最近一個項目上需要用到數據值比較大的運算,求一個功率。很多小產品上雖然用到的顯示功率一般兩三位數,但是要把這兩位數求出來還真的費點勁。電壓,我們一般用用毫伏表示,電流也是毫安,那么當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文章
7608瀏覽量
137151 -
十進制
+關注
關注
0文章
67瀏覽量
13238 -
程序
+關注
關注
117文章
3792瀏覽量
81171
原文標題:應廣單片機MINI-C,4字節轉十進制子程序
文章出處:【微信號:應廣單片機,微信公眾號:應廣單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論