語言主程序部分 // 左移移位法作hex to bcd轉(zhuǎn)換的算法程序,加上這一段調(diào)用演示,以察看運(yùn)行結(jié)果 // 12M晶振時(shí)匯編算法運(yùn)行時(shí)間大約為1339ns,C語言減法轉(zhuǎn)換時(shí)間大約897ns // 不同的輸入數(shù)據(jù)在C語言的減法轉(zhuǎn)換時(shí)間略有不同,最大時(shí)間59999時(shí)為1231ns // 所以C語言的減法運(yùn)算還是略快一些。 // http://www.xiao-qi.com/曉奇工作室收集整理,Keil C51下調(diào)試運(yùn)行通過
#include <reg51.h>
unsigned char bcdData[3]; unsigned int ihexs; unsigned char disp_buffer[5];
extern void hex_bcd(unsigned int iHex); // 聲明外部函數(shù) void hextobcd(unsigned int hexs,unsigned char j);
void main(void){ ihexs = 59999; hex_bcd(ihexs); hextobcd(ihexs,5); while(1); } /*************************** hex to bcd 轉(zhuǎn)換程序 ***************************/ void hextobcd(unsigned int hexs,unsigned char j) {
unsigned int va; unsigned char i; va = 10000; //最大數(shù)級(jí)萬位 for (i=j-1;i;i--) { disp_buffer[i] = 0; //目標(biāo)數(shù)組清零 while ((hexs>=va)&&(va>9)) { hexs -= va; //減除數(shù) disp_buffer[i]++; //商位加1 } va /= 10; //除數(shù)除10,指向低一位 } disp_buffer[0]=hexs; //最后個(gè)位數(shù) }
匯編語言模塊,建立另一個(gè)文件 NAME HEX_BCD ;*********************************** ; Hex to 壓縮BCD碼的轉(zhuǎn)換(每4位代表一位bcd碼) ; 輸入Hex:R6R7 返回地址:bcdData ;*bcdData = BCD(R6R7) ; http://www.xiao-qi.com/曉奇工作室收集整理,Keil C51下調(diào)試運(yùn)行通過 ;************************************ ?PR?_HEX_BCD?HEX_BCD SEGMENT CODE ; 碼段定義敘述,需要對(duì)本文件內(nèi)的所有 ?PR?_BCD_ADJ?HEX_BCD SEGMENT CODE ; 碼段定義敘述,需要對(duì)本文件內(nèi)的所有 PUBLIC _HEX_BCD EXTRN DATA(bcdData)
RSEG ?PR?_HEX_BCD?HEX_BCD _HEX_BCD:CLR A ;目標(biāo)數(shù)據(jù)清零初始化 |