这是编写的一个自动切换量程的电压表汇编程序,调试时有个问题,就是只能从0.00调到1.99,不满足题目及程序的编写要求,恳请前辈们悉心指点一二:
(题目:采用模数转换芯片ADC0832做电压采集,继电器做量程切换,电压采集结果用3位数码管显示,要求分档采集0-2V的电压。当电压在0~0.2V范围内,显示单位为毫伏mV,如175mV;在0.2~2V范围内,显示单位为V,如0.22V。(单位不显示,仅显示数字)
)
(附加说明:p2口控字形,p0口控字位,p3.6档位切换,我在线,还有要说明的我再补充)
ORG 0000H
MAIN: CLR P3.6
CLR 00H
TEST:
MOV SP,#60H
ACALL DELAY
ACALL CONV
ACALL JUDGE
ACALL DISPLAY
LJMP TEST
CONV:
SETB P3.0 ;初始化通道选择
CLR P3.2
NOP
NOP
CLR P3.3 ;拉低/CS端
NOP
NOP
SETB P3.2 ;拉高CLK端
NOP
NOP
CLR P3.2 ;拉低CLK端,形成下降沿
SETB P3.0
NOP
NOP
SETB P3.2 ;拉高CLK端
NOP
NOP
CLR P3.2 ;拉低CLK端,形成下降沿2
CLR P3.0 ;1-0选择1通道
NOP
NOP
SETB P3.2 ;拉高CLK端
NOP
NOP
CLR P3.2 ;拉低CLK端,形成下降沿3
SETB P3.0
NOP
NOP
MOV R7,#8 ;准备送下后8个时钟脉冲
RECEIVE:
MOV C,P3.1 ;接收数据
MOV ACC.0,C
RL A ;左移一次
SETB P3.2
CLR P3.2 ;形成一次时钟脉冲
DJNZ R7,RECEIVE ;循环7次
MOV C,P3.1 ;接收数据
MOV ACC.0,C
SETB P3.3 ;拉高/CS端
CLR P3.2 ;拉低CLK端
SETB P3.1 ;拉高数据端,回到初始状态
MOV 30H,A
RET
JUDGE: JB 00H,LOOP
CJNE A,#0FFH,LOOP1
SETB 00H ;大量程
SETB P3.6
SJMP DONE
LOOP:
CJNE A,#19H,LOOP2
CLR 00H
CLR P3.6
SJMP DONE
LOOP1: CLR 00H
CLR P3.6
LCALL BCDCON
SJMP DONE
LOOP2: JC CLEAR
LCALL BCDCON
SJMP DONE
CLEAR: CLR 00H
CLR P3.6
SJMP DONE
DONE: RET
BCDCON:
MOV A,30H
MOV B,#200
MUL AB
MOV R4,B
MOV A,R4
MOV B,#100
DIV AB
MOV 40H,A
MOV A,B
MOV B,#10
DIV AB
MOV 41H,A
MOV 42H,B
DISPLAY:
SETB P0.3
SETB P0.4
SETB P0.5
NUMBER1:JB P3.4,LED
MOV DPTR,#TAB1
MOV A,40H
MOVC A,@A+DPTR ;查字形表
MOV P2,A ;p2口作字形
CLR P0.5
ACALL DELAY
SETB P0.5
SJMP NUMBER2
LED: MOV DPTR,#TAB2
MOV A,40H
MOVC A,@A+DPTR ;查字形表
MOV P2,A ;p2口作字形
CLR P0.5
ACALL DELAY
SETB P0.5
NUMBER2:MOV DPTR,# TAB1
MOV A,41H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
CLR P0.4
ACALL DELAY
SETB P0.4
NUMBER3:MOV DPTR,# TAB1
MOV A,42H
MOVC A,@A+DPTR ;查字形表
MOV P2,A
CLR P0.3
ACALL DELAY
SETB P0.3
RET
TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
TAB2: DB 0BFH,86H,0DBH
DELAY: MOV R3,#0AH
DELAY1: MOV R4,#0FFH
DELAY2: DJNZ R4,DELAY2
DJNZ R3,DELAY1
RET