打印

请教一个子程序: 二进制转十进制

[复制链接]
2351|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wushiyan|  楼主 | 2007-8-7 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     将P1口的二进制状态转换为十进制
MOV A,P1
CLR C
MOV R5,#00H
MOV R4,#00H
MOV R3,#08H
NEXT: RLC A
      MOV R2,A
      MOV A,R5
      ADDC A,R5
      DA A
      MOV R5,A
      MOV A,R4
      ADDC A,R4
      MOV R4,A
      MOV A,R2
      DJNZ R3,NEXT
   其中R5是个位,R4是十位,这个程序是在一本书看到的,我觉得不对,请教二进制转十进制的程序?例如14H转为R4=02,R5=00.
      

相关帖子

沙发
li_mu| | 2007-8-8 07:34 | 只看该作者

没错吧?低四位有效,屏蔽高四位

使用特权

评论回复
板凳
udbit18| | 2007-8-8 08:41 | 只看该作者

程序错了

程序应该这样写:
ZH: MOV    A,P1
    MOV    R5,#00H
    CLR    C
    ADD    A,R5
    JNC    LP
    MOV    R3,#01H    ;如果有进位,这就是百位
    MOV    R4,A
    ANL    A,#0FH
    MOV    R5,A       ;存个位
    MOV    A,R4
    ANL    A,#0F0H
    MOV    R4,A     ;存十位
   这是十六进制转十进制的子程序,也就是二进制转BCD码的 

使用特权

评论回复
地板
udbit18| | 2007-8-8 08:42 | 只看该作者

对不起

最后面要加上一返回指令  “RET”

使用特权

评论回复
5
udbit18| | 2007-8-8 08:44 | 只看该作者

又忘了,标号没有注明

使用特权

评论回复
6
udbit18| | 2007-8-8 09:23 | 只看该作者

我上面的程序都是错的,这才是正确的,经过调试的

ZH: MOV    A,P1
    MOV    R2,#00H
    MOV    R3,#00H
    MOV    R4,A
    ANL    A,#0FH
    MOV    R5,A       
    MOV    A,R4
    ANL    A,#0F0H
    SWAP   A 
    MOV    R4,A
    CLR    C
LP: MOV    A,R2
    ADD    A,#16H
    DA     A
    JNC    LP1
    INC    R3 
LP1:MOV    R2,A
    DJNZ   R4,LP
    ADD    A,R5
    DA     A
    MOV    R4,A
    ANL    A,#0FH
    MOV    R5,A
    MOV    A,R4
    SWAP   A
    ANL    A,#0FH
    MOV    R4,A   
    RET 
R3是百位数,R4是十位数,R5是个位数

使用特权

评论回复
7
老黄头| | 2007-8-8 13:13 | 只看该作者

这样行不行

MOV    A,P1
MOV    B,#64H
DIV    A,B
MOV    R7,A   ; 百位
MOV    A,B
MOV    B,#0AH
DIV    A,B    ;    十位在A,个位在B
RET

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝