📄 adc_voltage.asm
字号:
; **************************
; 数据采集系统
; **************************
; **************************
; AD转换伪定义
; **************************
P1_ADC_EN EQU 97H
ADC_CONTR EQU 0C5H
ADC_DATA EQU 0C6H
RAM EQU 30H
; **************************
; 初始化
; 主程序入口和子程序入口
; **************************
ORG 0000H
LJMP START
START: LCALL DL1S
MOV P1_ADC_EN,#80H
CLR A ;初始化
MOV R0,#70H
MOV R2,#02H
MOV P1,#0FFH
CLEAR: MOV @R0,A
INC R0
DJNZ R2,CLEAR
MAIN:
LCALL ADSTART
LCALL V_SHOW
LJMP MAIN
; **************************
; AD转换
; **************************
ADSTART:
MOV ADC_DATA,#00H ;给结果转换寄存器赋值
MOV ADC_CONTR,#07H
LCALL DL1MS
ORL ADC_CONTR,#08H
AD: MOV A,ADC_CONTR
JNB ACC.4,AD
MOV A,ADC_DATA
MOV RAM,A
MOV A,ADC_CONTR
CLR ACC.3
MOV ADC_CONTR,A
MOV A,RAM
MOV B,#20H
MUL AB
MOV 12H,A ;存低八位
MOV 11H,B ;存高八位
RET
; **************************
; 除法子程序
; **************************
DIVIDE: MOV R1, 11H ;入口条件R0为高位,R1为低位,R2被除数扩充位
MOV R0, 12H
MOV R2, #00H
MOV R3, #1AH ;除数
MOV R4, #00H ;出口条件,商数存放,R4为低位,余数在R2中
MOV R5, #00H
MOV R7, #16
CHU5: MOV A, R0
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
MOV A, R2
RLC A
MOV R2, A
MOV A, R4 ;商数左移
RLC A
MOV R4, A
MOV A, R5
RLC A
MOV R5, A
CJNE R2, #1AH, LOOP0
LOOP0: JC LOOP1
MOV A, R2; 建立新的余数
SUBB A, R3
MOV R2, A
MOV A, R4
ADD A, #01H
MOV R4, A
MOV A, R5
ADDC A, #00H
MOV R5, A
LOOP1: DJNZ R7, CHU5
RET
; **************************
; 双字节转十进制BCD码
; **************************
BCD: MOV A,R4 ;BCD码转换
MOV R3,A
MOV A,R5
MOV R2,A
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#10H
IBTL2:
CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5 ;R6存低八位,R5存高八位
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,IBTL2
RET
; **************************
; 显示程序
; **************************
V_SHOW: LCALL DIVIDE
LCALL BCD
MOV A,R5
ANL A,#0FH
MOV 70H,A
MOV A,R6
SWAP A
ANL A,#0FH
MOV 71H,A
MOV A,R6
ANL A,#0FH
MOV 72H,A
MOV R3,#0FFH ;显示延时
DISLOOP:
LCALL SHOW
DJNZ R3,DISLOOP
RET
SHOW:
MOV A,#0FDH
MOV R0,#70H
DISP: MOV P0,#0FFH
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV 20H,P2
JNB 01H,DISLOOP1
DISLOOP2:
MOV P0,A
LCALL DL1MS
INC R0
MOV A,P2
JNB ACC.3,DISLOOP0
RL A
AJMP DISP
DISLOOP1:
CLR ACC.7
LJMP DISLOOP2
DISLOOP0: RET
; **************************
; 延时程序
; **************************
DL1S: MOV R5,#40 ;延时1秒子程序
DL0: MOV R6,#10
DL1: MOV R7,#10
DL2: DJNZ R7,DL2
DJNZ R6,DL1
DJNZ R5,DL0
RET
DL1MS:MOV R6,#14H ;延时1毫秒
DL3: MOV R7,#19H
DL4: DJNZ R7,DL4
DJNZ R6,DL3
RET
; **************************
; 共阳极段码查表
; **************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -