单片机BCD转十六进制问题
发布网友
发布时间:2023-06-01 07:49
我来回答
共3个回答
热心网友
时间:2024-05-29 18:15
这是个压缩BCD码转换为十六进制的程序,
BCDH: MOV B,#10H ;分离十位和个位,这里除以16,就是将高四位移动到低四位,低四位给B
DIV AB
MOV 57H,B ;暂存个位,B是余数,也就是低四位
MOV B,#10 ;将十位转换成十六进制,高四位原来是十进制,现在变成了低四位,还原本来值,所以乘10
MUL AB
ADD A,57H ;按十六进制加上个位,高低四位的值相加就是结果了
RET
热心网友
时间:2024-05-29 18:15
必须先掌握人工变化的方法,才能看明白程序。
----
在计算机里面,计算、存储,都是使用二进制。
二进制数,写出来,太琐碎,通常都是用 16 进制来表示。
以后,就用 16 进制数代表二进制数。
这种代表方法,用嘴念出来,写在纸上,都可以。
却不能说计算机里面存放的就是 16 进制数。
本题目的要求,说是转为 16 进制,其实,这是出题人概念不清。
计算机里面,那有一位一位的、真正的 16 进制数?
计算机里面,只有 0、1 这样的二进制数;
就连 2~9 这样的十进制数,都没有!
怎么可能有 A~F 这样的 16 进制数?
求出二进制的数,才是本题的目的。
----
当十位、个位,分别存放在 A、57H,
就应该把十位乘以 10,再加上个位。
这个过程,用二进制计算,得出二进制的结果,就是题目要求的结果。
题目程序中的注释,有错误:
……
MOV B, #10 --;设置乘数,不是【将十位转换成十六进制】
MUL AB ----;将十位数乘以10
ADD A,57H ---;按十六进制加上个位
这句应该说:
ADD A,57H ---;按照二进制加上个位
RET
热心网友
时间:2024-05-29 18:16
需要帮你做设计吗