16位二进制数转成BCD码--51单片机

来源:互联网 发布:怎么看b超单子的数据 编辑:程序博客网 时间:2024/05/22 15:26

要求:编写一段程序,把计数器中T0中计的数(TH0和TL0)转成8421BCD码。
并且高8位给P1口,低8位给P0口,要是转成BCD码超过16位,则给P2.0高电平。
我是做单片机课设的,这段程序实在编不明白了,向各位大侠请教了!无比感谢中!
答对有额外加分啊!!!!
悬赏分:200 - 解决时间:2010-1-3 13:03
最佳答案:
――――――――――――――――――――――――――
程序如下:
     MOV  R0, TL0
     MOV  R1, TH0
     CLR  A
     MOV  R2, A            ;先清零
     MOV  R3, A
     MOV  R4, A
     MOV  R5, #16          ;共转换16位数
LOOP:
     CLR  C
     MOV  A,  R0           ;从待转换数的高端移出一位到Cy
     RLC  A
     MOV  R0, A
     MOV  A,  R1
     RLC  A
     MOV  R1, A

     MOV  A,  R4           ;送到BCD码的低端
     ADDC A,  R4           ;带进位加。自身相加,相当于左移一位
     DA   A                ;十进制调整,变成BCD码
     MOV  R4, A
     MOV  A,  R3
     ADDC A,  R3
     DA   A
     MOV  R3, A
     MOV  A,  R2
     ADDC A,  R2
     MOV  R2, A
     DJNZ R5, LOOP         ;循环16遍, 转换即完成
;
     MOV  P0, R4           ;按照要求输出
     MOV  P1, R3
     CLR  P2.0
     MOV  A,  R2
     JZ   P20_L
     SETB P2.0
P20_L:
     RET
;完
――――――――――――――――――――――――――
回答者: 做而论道 - 十一级   2009-12-14 08:52
提问者对于答案的评价:谢谢啊
原题网址:http://zhidao.baidu.com/question/129295511.html?fr=im2
.
更多的位数,也可以仿照本方法处理。
下面这个链接,其中有一段程序,是做而论道用80x86汇编语言编写的,可将48位二进制数,转换成为32位十进制数,该程序也经过了实践的检验。
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/ba5d41b6733c0dff30add1ef.html

 

0 0