📄 adc0832.asm
字号:
;ADCS BIT P1.5;使能接口
;ADCLK BIT P1.6 ;时钟接口
;ADDO BIT P1.7 ;数据输出接口(复用)
;ADDI BIT P1.7 ;数据输入接口
MOV 30H,#02H;方式字选择
MOV R0,#31H;数据存储首地址
CONV:LCALL ADC0832;调用A/D转换子程序
MOV A,@R0
LCALL HBCD;调用单字节十六进制转BCD子程序
MOV R2,#02H;N个待分离的BCD
MOV R0,#34H;分离后BCD首地址
MOV R1,#32H;待分离BCD首地址
LCALL CBCD;分离压缩的BCD码
MOV R0,#34H;显示缓冲区首地址
LCALL DISPLAY;调用显示子程序
MOV R0,#31H;恢复数据存储地址
LJMP CONV
;========================================
ADC0832:SETB P1.7 ;初始化通道选择
NOP
NOP
CLR P1.5;拉低/CS端
NOP
NOP
SETB P1.6 ;拉高CLK端
NOP
NOP
CLR P1.6 ;拉低CLK端,形成下降沿
MOV A,30H
MOV C,ACC.1 ;确定取值通道选择
MOV P1.7,C
NOP
NOP
SETB P1.6 ;拉高CLK端
NOP
NOP
CLR P1.6 ;拉低CLK端,形成下降沿2
MOV A,30H
MOV C,ACC.0 ;确定取值通道选择
MOV P1.7,C
NOP
NOP
SETB P1.6 ;拉高CLK端
NOP
NOP
CLR P1.6 ;拉低CLK端,形成下降沿3
SETB P1.7
NOP
NOP
MOV R7,#8 ;准备送下后8个时钟脉冲
ADH:MOV C,P1.7 ;接收数据
MOV ACC.0,C
RL A ;左移一次
SETB P1.6
NOP
NOP
CLR P1.6 ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,ADH ;循环8次
MOV C,P1.7 ;接收数据
MOV ACC.0,C
MOV @R0,A
MOV R7,#8
ADL:MOV C,P1.7 ;接收数据
MOV ACC.0,C
RR A ;左移一次
SETB P1.6
NOP
NOP
CLR P1.6 ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,ADL ;循环8次
MOV B,@R0
CJNE A,B,ADC0832 ;数据校验
SETB P1.5;拉高/CS端
CLR P1.6 ;拉低CLK端
SETB P1.7 ;拉高数据端,回到初始状态
RET
;=======================================
HBCD: MOV B,#100
DIV AB
MOV R3,A
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
MOV 32H,R3
MOV 33H,A
RET
;======================================
CBCD:MOV A,@R1 ;分离后将占2N个单元
MOV B,A
ANL A,#0F0H
SWAP A
MOV 4CH,A
MOV A,B
ANL A,#0FH
MOV 4DH,A
MOV @R0,4CH
INC R0
MOV @R0,4DH
INC R0
INC R1
DJNZ R2,CBCD
RET
;===================================
DISPLAY:MOV R4,#04H;位数选择
MOV R5,#00H
DISP:MOV A,R5
SWAP A
ORL A,@R0
MOV P0,A
ACALL DELAY1
INC R5
INC R0
DJNZ R4,DISP
RET
DELAY1:MOV R6,#10H
LOOP11:MOV R7,#38H
LOOP2:DJNZ R7,LOOP2
DJNZ R6,LOOP11
RET
;=============================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -