找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2518|回复: 11
打印 上一主题 下一主题
收起左侧

求一个51单片机汇编,将16进制转为十进制的程序

[复制链接]
跳转到指定楼层
楼主
串口发送的16进制需要转为十进制
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

沙发
ID:883242 发表于 2023-7-16 17:24 | 只看该作者
一般不会有十六进制转十进制发送的奇怪需求,对于两边都非常麻烦,完全没有意义。我猜你的真实需求是把十六进制转成十进制的ASCII码。
回复

举报

板凳
ID:1085441 发表于 2023-7-16 19:58 | 只看该作者
是16进制转为BCD吗?很长时间没写过汇编了,写了一下,应该差不多吧,如有错误请大家指正
;入口 R0, 出口 R0
    MOV     A,R0
    MOV     B,#10
    DIV      AB
    RL        A
    RL        A
    RL        A
    RL        A
    MOV     R0,B
    ORL      A,R0
    MOV     R0,A
回复

举报

地板
ID:259813 发表于 2023-7-16 20:48 | 只看该作者
是把十六进制转成十进制的ASCII码,目的是通过串口发送后接收方好读
回复

举报

5#
ID:73992 发表于 2023-7-16 22:56 | 只看该作者
ORG        0000H
MOV        R0,#0XAF        ;单字节数值入口        ,R0         ,假设 R0=#AF
MOV        A,R0
MOV        B,#0X64
DIV        AB
MOV        R5,A                ;百位 存入R5
MOV        A,B
MOV        B,#0X0A
DIV        AB
MOV        R6,A                ;十位 存入R6
MOV        A,B
MOV        B,#0X01
DIV        AB
MOV        R7,A                ;个位 存入R7
END
       

回复

举报

6#
ID:259813 发表于 2023-7-17 13:34 | 只看该作者
我没说清楚,风速传感器用串口助手看到的是十六进制例如0A,将其转换为好读的十进制发出
回复

举报

7#
ID:1085441 发表于 2023-7-17 14:29 | 只看该作者
;如果小于100,如果大于100,耀多除一次100
;入口 R0, 出口 R0,R1,R0是十位,R1是各位
    MOV     A,R0
    MOV     B,#10
    DIV      AB
    ADD     A,#30H
    MOV     R0,A
    MOV     A,B
    ADD     A,#30H
    MOV     R1,A
回复

举报

8#
ID:884147 发表于 2023-7-17 15:33 | 只看该作者
chydn2000 发表于 2023-7-17 13:34
我没说清楚,风速传感器用串口助手看到的是十六进制例如0A,将其转换为好读的十进制发出

就是说数据0A你想在串口工具上显示10,这需要16进制转BCD码程序,还要看16进制是几位的
回复

举报

9#
ID:384109 发表于 2023-7-17 16:06 | 只看该作者
51汇编有专门的指令
回复

举报

10#
ID:123289 发表于 2023-7-17 16:13 | 只看该作者
;格式转换类:BIN→ASCII----
;HEXTOASC_AR0.ASM:  BIN→ASCII,数字A→(R0,+1+2)3位高位在前。
;输入:A=16进制数,R0=存入地址
;输出:(R0,+1+2)=A的ASCII
;影响:PSW,A,B,R0
HEXTOASC_AR0:   MOV     B, #C_100                   ;取百位数
                DIV     AB
                ORL     A, #C_30H                   ;做成ASCII码
                MOV     @R0, A                      ;存入
                INC     R0
                MOV     A, B                        ;取余数
                MOV     B, #C_10                    ;取十位数
                DIV     AB
                ORL     A, #C_30H                   ;做成ASCII码
                MOV     @R0, A                      ;存入
                INC     R0
                MOV     A, B                        ;取余数,是个位
                ORL     A, #C_30H                   ;做成ASCII码
                MOV     @R0, A                      ;存入
                RET
注:
C_10 = 10; C_30H = 30H = 48; C_100 = 100 = 64H
回复

举报

11#
ID:259813 发表于 2023-7-18 23:10 | 只看该作者
lyonkon的程序经过验证完全正确,谢谢
回复

举报

12#
ID:1089019 发表于 2023-7-19 19:44 | 只看该作者
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表