最近一个项目上需要用到数据值比较大的运算,求一个功率。很多小产品上虽然用到的显示功率一般两三位数,但是要把这两位数求出来还真的费点劲。电压,我们一般用用毫伏表示,电流也是毫安,那么当5V电压,1A的电流,计算数据为5000*1000=5000000=7A120H,这已经不是2个字节可以容得下的数据范围,而且两字节相乘的结果也得用4个字节来存储。当我们要把这4字节的十六进制数转成十进制数时。用减法的效率一般很低啦。我这里给大家分享一个简单的加3移位判断法,这个子程序,体现了MINI-C的强大C语言和汇编融合处理能力。也将MINI-C的数据指针用到恰到好处啦,有点自卖自夸。
入口参数是4字节的num,
输出是全局变量,TEMP3~TEMP7,5个字节,temp3是最高位。
void dword_to_dec(dword num)
{
byte temp2;
clear hb@fpp0_index
mov a, 0x20
mov temp2, a
clear temp3
clear temp4
clear temp5
clear temp6
clear temp7
set0 CF
shift:
slc num$0
slc num$1
slc num$2
slc num$3
slc temp7
slc temp6
slc temp5
slc temp4
slc temp3
dzsn temp2
goto adjdec
return;
adjdec:
mov a, la@temp7
mov lb@fpp0_index, a
call adjbcd
mov a, la@temp6
mov lb@fpp0_index, a
call adjbcd
mov a, la@temp5
mov lb@fpp0_index, a
call adjbcd
mov a, la@temp4
mov lb@fpp0_index, a
call adjbcd
mov a, la@temp3
mov lb@fpp0_index, a
call adjbcd
goto shift
adjbcd:
//;---------------------------------
//; mov a, 0x22
//;idxm fpp0_index, a
//;---------------------------------
idxm a, fpp0_index
add a, 0x03
mov g_byte, a
t0sn g_byte.3
idxm fpp0_index, a
idxm a, fpp0_index
add a, 0x30
mov g_byte, a
t0sn g_byte.7
idxm fpp0_index, a
ret 0x00
//;-------------the end of hex2bcd---------------------
}
-
C语言
+关注
关注
180文章
7604浏览量
136622 -
十进制
+关注
关注
0文章
66浏览量
13206 -
程序
+关注
关注
117文章
3782浏览量
80990
原文标题:应广单片机MINI-C,4字节转十进制子程序
文章出处:【微信号:应广单片机,微信公众号:应广单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论