⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 28-0 tlc549.asm

📁 TLC549是一种采用8位逐次逼近式工作的A/D转换器。内部包含系统时钟、采样和保持、8位A/D转换器、数据寄存器以及控制逻辑电路。TLC549每25uS重复一次“输入—转换—输出”。器件有两个控制输
💻 ASM
字号:
;//****************************************************************
;//*文件名:串行A/D转换器TLC549转换程序

;//*创建人:巫升辉 

;//*2006.2.25 

;功能:把模拟的量通过串行的模数转换成数字信号,并同过调用7279显示被转换
       ;的数字量

;接线:P1.0接DATA,P1.1接CLK,P1.2接CS-549,AIN接可调电压0~5V端。

;//****************************************************************

         
        DAT0      BIT     P1.0
        CLK0      BIT     P1.1
        CS        BIT     P1.2

        ADHEX     DATA  050H
	DBUF      DATA  060H
	BIT_COUNT DATA  070H
        TIMER     DATA  072H
        TIMER1    DATA  073H
        TIMER2    DATA  074H
	DATA_IN   DATA  020H
        DATA_OUT  DATA  021H
        CLK       BIT     P1.6
        DAT       BIT     P1.7


        ORG   0000H
        LJMP  MAIN
        ORG   0100H
main:
        ACALL TLC549_ADC
        MOV R7,#0
        DJNZ   R7,$
        ACALL TLC549_ADC
        MOV   R7,A              ;存转换结果
        MOV   ADHEX,A     
        CALL  MUL500           ; ADHEX*500/256  
        CALL  HB2  
        CALL  TODISP           ; 拆开显示
        NOP
        CALL  DISPLAY 
        CALL  delay
        LJMP  MAIN    

TLC549_ADC:                   ;串行显示处理程序,结果存在A中
        CLR   A
        CLR   CLK0
        CLR   CS
        MOV   R6,#8
ADLOOP:
        SETB  CLK0
        NOP
        NOP
        MOV   C,DAT0
        RLC   A
        CLR   CLK0
        NOP
        DJNZ  R6,ADLOOP
        SETB  CS
        SETB  CLK0
        RET

DISPLAY:				 
	ANL   P2,#00H                     ; CS7279有效
	MOV   DATA_OUT,#10100100B         ; A4H,复位命令
	CALL  SEND
        MOV   DATA_OUT,#11001000B         ; 译码方式0,0位显示 
	CALL  SEND
	MOV   DATA_OUT,DBUF 
	CALL  SEND			      
        MOV   DATA_OUT,#11001001B         ; 译码方式0,1位显示 
	CALL  SEND
	MOV   DATA_OUT,DBUF+1       
	CALL  SEND
        MOV   DATA_OUT,#11001010B         ; 译码方式0,2位显示  
	CALL  SEND
	MOV   DATA_OUT,DBUF+2 
	CALL  SEND
	MOV   P2,#0FFH                     ; CS7279无效
        RET

SEND:     MOV  BIT_COUNT,#8         ; 发送字符子程序
          ANL  P2,#00H
          CALL LONG_DELAY
SEND_LOOP:MOV  C,DATA_OUT.7
          MOV  DAT,C
          SETB CLK
          MOV  A,DATA_OUT
          RL   A
          MOV  DATA_OUT,A         
          CALL SHORT_DELAY
          CLR  CLK
          CALL SHORT_DELAY
          DJNZ BIT_COUNT,SEND_LOOP
          CLR  DAT
          RET

LONG_DELAY:MOV TIMER,#150              ;延时约200US
DELAY_LOOP:DJNZ TIMER,DELAY_LOOP
           RET
SHORT_DELAY:
           MOV TIMER,#20               ;延时约20US
SHORT_LP:  DJNZ TIMER,SHORT_LP
           RET
 
DELAY:MOV   TIMER,#4
AA0:  MOV   TIMER1,#0
AA1:  MOV   TIMER2,#0
AA2:  DJNZ  TIMER2,AA2
      DJNZ  TIMER1,AA1
      DJNZ  TIMER,AA0
      RET



;功能:单字节二进制无符号数乘500(1f4H=100H+0f4H)
;入口条件:被乘数在R7中。
;出口信息:乘积在R4、R5、R6中(R6低八位)。
MUL500:
    	MOV   A,#0f4H	;计算R3乘R7
	MOV   B,R7
  	MUL   AB
  	MOV   R5,B	;暂存部分积
  	MOV   R6,A
        MOV   A,R7
	ADD   A,B
	MOV   R5,A
	CLR   A
	RLC   A
	MOV   R4,A
	CLR   C
        MOV   A,R6
	SUBB  A,#80H
	JC    RETURN  
	CLR   C
        MOV   A,R5
	ADD   A,#1
	MOV   R5,A 		  
        MOV   A,R4
	ADDC  A,#0
	MOV   R4,A   

RETURN:	RET

; 功能:双字节十六进制整数转换成双字节BCD码整数

; 入口条件:待转换的双字节十六进制整数在R6、R7中。
; 出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
HB2:
        MOV     A,R4
        MOV     R6,A
        MOV     A,R5
        MOV     R7,A

        CLR     A	         ;BCD码初始化
    	MOV	R3,A
    	MOV  	R4,A
    	MOV  	R5,A
    	MOV	R2,#10H	   ;转换双字节十六进制整数
HB3:	MOV	A,R7   ;从高端移出待转换数的一位到CY中
    	RLC  	A
    	MOV	R7,A
    	MOV  	A,R6
    	RLC  	A
    	MOV	R6,A
    	MOV	A,R5       ;bcd码带进位自身相加,相当于乘2
    	ADDC	A,R5
    	DA	A         	;十进制调整
    	MOV	R5,A
    	MOV	A,R4
    	ADDC    A,R4
    	DA  	A
    	MOV	R4,A
    	MOV 	A,R3
    	ADDC	A,R3
    	MOV 	R3,A	;双字节十六进制数的万位数不超过6,不用调整
    	DJNZ    R2,HB3  ;处理完16bit
	RET 	

TODISP:
    	MOV    A,R4
	ORL    A,#80H
        MOV    DBUF+2,A   
        MOV    A,R5
	SWAP   A
	ANL    A,#0FH
        MOV    DBUF+1,A
    	MOV    A,R5
	ANL    A,#0FH
        MOV   DBUF,A
	RET

        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -