应广单片机MINI-C编程要点

描述

最近一个项目上需要用到数据值比较大的运算,求一个功率。很多小产品上虽然用到的显示功率一般两三位数,但是要把这两位数求出来还真的费点劲。电压,我们一般用用毫伏表示,电流也是毫安,那么当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--------------------- 

}

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分