51单片机用汇编把16进制转化为10进制,这个程序不是很懂,希望高手能详细解释下

如题所述

第1个回答  2020-04-09
这个程序是正确的。
程序循环了16次。

M_byte,L_byte,左移了16次,最高位,依次移进了Cy;

ADDC
指令,把
RW1,RW2,左移了16次,并把Cy,加入到了最低位。
ADDC
指令后面,是十进制调整指令,所以,RW1,RW2
中的内容就是BCD码。
第2个回答  2019-02-28
如果是ascii码表内的符号值,那么ascii值本身就可以认为是
16进制的(因为进制只是给人看的,单片机只有2进制,没有ascii

hex
之分),但如果是hex值,经过ascii发送后,需要接收解出数值,那么可以用这个函数:
uchar
ascii_tohex(uchar
ascii_data)
//ascii

hex
函数
{
uchar
hex_data=0;
//定义
hex变量存储转换结果
if(ascii_data>='0'
&&
ascii_data<='9')
hex_data=ascii_data-'0';
//若
转换内容为
字符'0-9',则转成对应数字0-9
else
if(ascii_data>='a'
&&
ascii_data<='f')
hex_data=ascii_data-'a'+10;
//若
转换内容为
字符'a-f',则转成数字10-15
else
if(ascii_data>='a'
&&
ascii_data<='f')
hex_data=ascii_data-'a'+10;
//若
转换内容为
字符'a-f',则转成数字10-15
return
hex_data;
//返回转换结果,非以上字符,不在hex(0-f)范围内,默认0
}//