最近一個項目上需要用到數(shù)據(jù)值比較大的運算,求一個功率。很多小產(chǎn)品上雖然用到的顯示功率一般兩三位數(shù),但是要把這兩位數(shù)求出來還真的費點勁。電壓,我們一般用用毫伏表示,電流也是毫安,那么當5V電壓,1A的電流,計算數(shù)據(jù)為5000*1000=5000000=7A120H,這已經(jīng)不是2個字節(jié)可以容得下的數(shù)據(jù)范圍,而且兩字節(jié)相乘的結果也得用4個字節(jié)來存儲。當我們要把這4字節(jié)的十六進制數(shù)轉成十進制數(shù)時。用減法的效率一般很低啦。我這里給大家分享一個簡單的加3移位判斷法,這個子程序,體現(xiàn)了MINI-C的強大C語言和匯編融合處理能力。也將MINI-C的數(shù)據(jù)指針用到恰到好處啦,有點自賣自夸。
入口參數(shù)是4字節(jié)的num,
輸出是全局變量,TEMP3~TEMP7,5個字節(jié),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瀏覽量
136694 -
十進制
+關注
關注
0文章
67瀏覽量
13208 -
程序
+關注
關注
117文章
3785瀏覽量
81004
原文標題:應廣單片機MINI-C,4字節(jié)轉十進制子程序
文章出處:【微信號:應廣單片機,微信公眾號:應廣單片機】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論