;START、EOC、OE分别接于P3.2、P3.1、P3.0,CBA分别接于P3.5、P3.6、P3.7
;D0-D7接于P1口,P0口接数码管段码,P2口接数码管位码
;供电应采用开关电源供电,以确保0809的参考电压为+5V
STA EQU P3.2 ;定义START引脚
EOC EQU P3.1 ;定义转换完成标志位引脚
OE EQU P3.0 ;定义输出允许引脚
ORG 0000H
LJMP START
ORG 0030H
START:
CLR STA ;将START引脚清零,为下一次A/D转换做好准备
CLR OE ;关闭输出允许引脚
CAIJI:
CLR P3.5 ;清除CBA,选择第0路通道进行转换
CLR P3.6
CLR P3.7
SETB STA ;锁存CBA,并对A/D转换器进行复位
NOP
CLR STA ;在START引脚产生下跳沿
JNB EOC,$ ;检测转换是否完成
SETB OE ;打开允许输出引脚
MOV P1,#0FFH ;准备读入之前先写1
MOV A,P1 ;将转换得到的数据读入A中
CHULI:
MOV B,#50
DIV AB ;将转换得到数据除以50,求出电压表个位数值
MOV 30H,A ;将电压个位数值存于30H
MOV A,B
MOV B,#5
DIV AB ;将除以50得到的余数再除以5,求出电压表十分之一位的数值
MOV 31H,A ;将电压十分之一位数值存于31H
MOV A,B
MOV B,#5
DIV AB
MOV 32H,A
XIANSHI:
MOV DPTR,#TAB
MOV A,32H ;显示百分之一位的数值
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#11101111B
MOV R0,#0FFH ;显示延时
DJNZ R0,$
MOV P2,#11111111B ;延时后,关闭显示
MOV A,31H ;显示十分之一位的数值
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#11011111B
MOV R0,#0FFH ;显示延时
DJNZ R0,$
MOV P2,#11111111B ;延时后,关闭显示
MOV A,30H ;显示个位的数值
MOVC A,@A+DPTR
ANL A,#11111110B ;使显示个位的数码管点亮小数点
MOV P0,A
MOV P2,#10111111B
MOV R0,#0FFH ;显示延时
DJNZ R0,$
MOV P2,#11111111B ;延时后,关闭显示
LJMP START ;重新采集数据进行处理和显示
TAB:
DB 03H 9FH 25H 0DH 99H 49H 0C1H 1FH 01H 19H
这是我的程序,麻烦高手帮我看看有没有错?错在哪里,为什么采集到的电压跟测量的电压相差那么大。
谢谢。