启动ADC0809的汇编程序,仅仅两行而已:
MOV DPTR, #ADC0809的地址 ;这个地址,取决于单片机和0809的之间连线
MOVX @DPTR, A
这两行执行后,0809就启动了。
;//****************************************************************
;//*文件名:AD0809并行模数转换程序
;//*创建人:巫升辉
;//*2006.2.25
;功能:把模拟的量通过并行的模数转换成数字信号,并同过调用7279显示被转换
;的数字量
;接线:
;//****************************************************************
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:
CLR A
setb p3.3
MOV R0,#DBUF
MOV DPTR,#0FEF3H ;A/D
NOP
nop
nop
MOVX @DPTR,A
WAIT: JNB P3.3,WAIT
MOVX A,@DPTR ; 读入结果
NOP
nop
nop
MOVX A,@DPTR ; 读入结果
NOP
nop
nop
MOV R7,A
MOV ADHEX,A
CALL MUL500 ; ADHEX*500/256
CALL HB2
CALL TODISP ; 拆开显示
NOP
CALL DISPLAY
CALL delay
LJMP MAIN
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