论坛风格切换切换到宽版
  • 3276阅读
  • 2回复

哪位朋友有关于双字节16进制整数转换成双字节BCD码整数的源程序???? [复制链接]

上一主题 下一主题
离线madswan
 
发帖
453
只看楼主 倒序阅读 0楼 发表于: 2005-01-23
哪位朋友有关于双字节16进制整数转换成双字节bcd码整数的源程序????
离线BA3CE
发帖
1652
只看该作者 1楼 发表于: 2005-01-24
待转换的双字节十六进制整数在r6、r7中。
转换后的三字节BCD码整数在r3、r4、r5中。


hb2:clr a;BCD码初始化
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h;转换双字节十六进制整数
hb3:mov a,r7;从高端移出待转换数的一位到cy中
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5;BCD码带进位自身相加,相当于乘2
addc a,r5
da a;十进制调整
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3
addc a,r3
mov r3,a;双字节十六进制数的万位数不超过6,不用调整
djnz r2,hb3;处理完16bit
ret

'
哪位朋友有关于双字节16进制整数转换成双字节bcd码整数的源程序????
'
离线BG4UVR
发帖
11287
只看该作者 2楼 发表于: 2005-01-24
c的:

输入16bit的16进制数,输出16bit的bcd码(即4位10进数)。注意,结果中丢掉了万位数,只留了4位,如果需要万位,请自己改一下。

unsigned int hex2bcd(unsigned int hex_data)
{
     unsigned int bcd_data=0;
     unsigned int temp;
     temp=hex_data%10000;
     bcd_data=bcd_data|temp/1000<<12;
     temp=temp%1000;
     bcd_data=bcd_data|temp/100<<8;
     temp=temp%100;
     bcd_data=bcd_data|temp/10<<4;
     bcd_data=bcd_data|temp%10;
     return bcd_data;
}