完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人汇编语言萌新,有好多不懂的地方,下面是程序,求大神解答
OE BIT P2.7 ;ADC0808的OE端 EOC BIT P2.6 ;ADC0808的EOC端 ST BIT P2.5 ;ADC0808的START和ALE端 CS4 BIT P2.3 CS3 BIT P2.2 CS2 BIT P2.1 CS1 BIT P2.0 LED_0 DATA 30H ;显示缓冲区 LED_1 DATA 31H LED_2 DATA 32H LED_3 DATA 33H ADC DATA 34H ;存放转换后的数据 ORG 0000H AJMP START ORG 0030H ;--------------初始化------------------------------------------ START: MOV SP,#60 ;设置堆栈 MOV LED_0,#00H ;清空显示缓冲区 MOV LED_1,#00H MOV LED_2,#00H MOV LED_3,#00H MOV DPTR,#TABLE ;送字形码表首地址 ;---------------ADC0808转换-------------------------------- AD_CONV: CLR ST SETB ST CLR ST ;启动转换 JNB EOC,$ ;等待转换结束 SETB OE ;允许输出 MOV ADC,P1 ;暂存转换结果 CLR OE ;关闭输出 ;---------------数据处理--------------------------------------- ADC_RD: MOV A,ADC ;将AD转换结果转换成BCD码 MOV B,#0C4H ;乘以19.6mv(5V/255) MUL AB ;AB相乘结果存在A MOV R7,A ;把A结果存在R7 MOV R6,B ;B中数据存在R6 TUNBCD: CLR A ;清空A CLR C ;清空C MOV R3,A ;清空R3 MOV R4,A ;清空R4 MOV R5,A ;清空R5 MOV R2,#10H ;把10H赋给R2 T_BCD: MOV A,R7 ;把R7中结果赋给A RLC A ;将A循环左移 MOV R7,A ;将循环左移后的结果存在R7 MOV A,R6 ;把R6数据赋给A RLC A ;将A循环左移 MOV R6,A ;将循环左移结果给R6 MOV A,R5 ;把R5数据赋给A ADDC A,R5 ;把A和R5中数据相加 DA A ;将计算结果改为十进制 MOV R5,A ;把A中数据赋给R5 MOV A,R4 ;把R4中数据赋给A ADDC A,R4 ;把R4和A中数据相加 DA A ;把结果转换为十进制 MOV R4,A ;把转换后的结果赋给R4 MOV A,R3 ;把R3中数据赋给A ADDC A,R3 ;把A和R3中数据相加 MOV R3,A ;把相加结果存在R3 DJNZ R2,T_BCD ;R2-1若不为零则跳到T_BCD MOV A,R5 ;把R5数据移到A SWAP A ;将A高四位和低四位互换 ANL A,#0FH ;把A和0FH相与 MOV LED_0,A ;把相与结果存在LED_0 MOV A,R4 ;把R4结果存在A ANL A,#0FH ;把A和0FH相与 MOV LED_1,A ;把相与后的结果存在LED_1 MOV A,R4 ;把R4结果存在A SWAP A ;把A高四位和低四位互换 ANL A,#0FH ;把A和0FH相与 MOV LED_2,A ;把相与后的结果赋给LED_2 MOV A,R3 ;把R3数据赋给A ANL A,#0FH ;把A和0FH相与 MOV LED_3,A ;把相与后的结果存在LED_3 LCALL DISP ;调用DISP函数 AJMP AD_CONV ;跳到AD_CONV执行 DISP: MOV A,LED_0 ;把LED_0的数据存在A CLR CS4 ;清空CS4 CLR CS3 ;清空CS3 CLR CS2 ;清空CS2 CLR CS1 ;清空CS1 MOVC A,@A+DPTR ;查表 SETB CS4 ;把CS4置1 MOV P0,A ;把A的数据存在P0 LCALL DELAY ;调用DELAY函数 CLR CS4 ;把CS4清零 MOV A,LED_1 ;把LED_1赋给A MOVC A,@A+DPTR ;查表 SETB CS3 ;把CS3置1 MOV P0,A ;把A的数据赋给P0 LCALL DELAY ;调用DELAY函数 CLR CS3 ;清零CS3 MOV A,LED_2 ;把LED_2的数据赋给A MOVC A,@A+DPTR ;查表 SETB CS2 ;把CS2置1 MOV P0,A ;把A中数据给P0 LCALL DELAY ;调用DELAY函数 CLR CS2 ;清空CS2 MOV A,LED_3 ;把LED_3中数据给A MOVC A,@A+DPTR ;查表 SETB CS1 ;把CS1置1 MOV P0,A ;把A中数据给P0 CLR P0.7 ;第一位显示小数点 LCALL DELAY ;调用DELAY函数 CLR CS1 ;清空CS1 RET DELAY: MOV R7,#3 ;把3赋给R7 DELA: MOV R6,#115 ;把115赋给R6 DJNZ R6,$ ;R6-1若不为0则跳到$ DJNZ R7,DELA ;R7-1若不为0则跳到DELA RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,6FH END
|
|
相关推荐
4个回答
|
|
都是先用最简单的程序开始调试
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
776 浏览 0 评论
2265 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2124 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1682 浏览 0 评论
2786 浏览 3 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5528 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 00:39 , Processed in 0.793960 second(s), Total 98, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号