单片机解密51单片机和ADC0809的数字电压表设计
单片机解密程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。
①数据采集系统:因为ADC0809本身并没有内部时钟,需要外部时钟来提供工作的时钟频率。如果利用单片机ALE端脚提供的频率为6MHZ,而ADC0809工作的频率在10KHZ-1MHZ。因此,需要增加含触发器功能的器件,从面增加了系统的复杂程度。后来,最终用软件编程来提供ADC0809工作的时钟频率,从而解决了这个问题。
②显示系统的调试:要显示的数据存放在71H、72H、73H、74H单元中,先在30H~39H分单元中存放0~9的数,运行显示程序,进行查表指令,察看显示的结果是否与存放值一样。在测试的过程中发现小数点没有显示,通过下面几条指令,把小数点显示出来。
MOVC A,@A+DPTR
CJNER2,#0FEH,NOT_ONE ;不是左边第一个数码管,则转移
ORL A,#80H ;左边第一个数码管显示小数点
NOT_ONE: MOVP0,A ;数码管段选
(1) 单片机解密汇编语言程序清单
QIAN EQU 71H
BAI EQU 72H
SHI EQU 73H
GEWEI EQU 74H ;71H-74H存放显示数据,依次为个位、十位、百位、千位
SHUJU EQU 70H ;地址70H存放采集数据
ST BITP3.0 ;START和ALE共用一个端口
OE BIT P3.6
EOC BIT P3.7
CLK BITP3.3
ORG 0000H
LJMP START
ORG 0030H
TAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
START:
MAIN: LCALL TEST ;数据采集函数
LCALL TURNDATA ;数据处理函数
LCALL DISPLAY ;显示函数
LJMP MAIN
DELAY: MOV R7,#06H ;约延时1.5ms
LOOP1: MOV R6,#0FFH
LOOP2: DJNZ R6,LOOP2
DJNZR7,LOOP1
RET
TEST: CLR ST
CLR OE
SETB ST
CLR ST ;ST端口下降沿,开始转换
LOOPCLK: SETBCLK ;由软件来提供ADC0809工作的时钟频率
CLR CLK
JNB EOC,LOOPCLK ;EOC=1时,退出循环
SETBOE ;转换后数据的传送
MOV P1,#0FFH ;P1端口读数据,需先给高电平
MOV A,P1
CLR OE
MOV SHUJU,A ;存储数据到地址70H
RET
TURNDATA:
MOV A,SHUJU
MOV B,#51
DIV AB ;余数在B,相除以后C=0
MOV QIAN,A ;储存千位
CLR F0
MOV A,B
SUBBA,#1AH ;A减去26,测试上面AB相除时,余数与26相比较
MOV F0,C ;余数<26,则C=1,不用加5调整
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LP1
ADD A,#5 ;若AB相除后B>=26,百位加五
LP1: MOV BAI,A ;储存百位
CLR F0
MOV A,B
SUBBA,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LP2 ;F0=1时,转移
ADD A,#5 ;若AB相除后B>=26,十位加五
LP2: MOV SHI,A ;储存十位
CLR F0
MOV A,B
SUBBA,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LP3 ;F0=1时,转移
ADD A,#5 ;若AB相除后B>=26,个位加五

芯片解密