51MCU问题,请好心人帮忙! |
| 单片机论坛是国内大型的mcu电子技术与单片机社区http://www.51hei.com/bbs/ |
51MCU问题,请好心人帮忙! 作者:客人 时间:2008-8-1 17:37:53
第 1 楼
用89C51显示一个16位的二进制数,例如:显示“9999”。(9999=270FH=0010011100001111B)本程序将“9999”(即270FH)拆开放在R2和R3中,先将此十六进制数转换并组合成BCD码,再将组合的CBD码分开并放入显示缓冲区更新数据,最后显示。现在问题是:显示结果却为“9099”,百位不对,为什么百位显“0”而不是“9”??我想爆脑子都想不出来,请哪位好的大哥帮忙解释一下,万分感谢!! ;********将十六进制数转换并组合成BCD码************************ MOV R2,#27H ;放显示值的高8位 显示“9999” MOV R3,#0FH ;放显示值的低8位 LCALL NEXT MOV 31H,R5 MOV 32H,R6 LCALL READ LCALL DIS RET NEXT:CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H LOOP: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 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LOOP RET ;*************将组合的CBD码分开并放入显示缓冲区更新数据******************** READ:MOV 20H,#00H MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H MOV R0,#20H MOV A,31H SWAP A XCHD A,@R0 INC R0 SWAP A XCH A,@R0 MOV A,32H INC R0 SWAP A XCHD A,@R0 INC R0 SWAP A XCH A,@R0 MOV A,20H ;高位为零不显示 JNZ FF MOV 20H,#0BH ;0BH=11=1011B MOV A,21H JNZ FF MOV 21H,#0BH MOV A,22H JNZ FF MOV 22H,#0BH FF:RET ;***********************显示程式******************* DIS:MOV R0,#20H ;设R0的指针 MOV R1,#01000000B ;用于选位显。 MOV R3,#04H ;用于显示四位,所以扫描四次。 DIS1:MOV DPTR,#TAB MOV A,@R0 MOVC A,@A+DPTR MOV P3,A INC R0 MOV A,R1 MOV P1,A RR A MOV R1,A 延时一下 DJNZ R3,DIS1 RET TAB:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,00H,50H ;0123456789 作者:lg 时间:2008-8-18 15:51:01
第 2 楼
这里有单片机学习资料http://shop36173697.taobao.com/ |
|
查看完整版本:[51MCU问题,请好心人帮忙!] |
| 所属版面:单片机自由讨论 本帖第1页 |
| 共有回复:1 共有页数:1 每页帖数:50 |
|
欢迎光临单片机论坛 网址:http://www.51hei.com/bbs/ |