日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转换8421码的程序c语言,16进制数转换成8421BCD编码函数

發(fā)布時間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转换8421码的程序c语言,16进制数转换成8421BCD编码函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

.INCLUDE hardware.inc

.IRAM

_Led_Out:

.dw 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000

_List_8421_Data: //16進位數(shù)轉(zhuǎn)換成8421碼的位權(quán)表,萬位每千位進位,千位每百位進位,百位每十位進位

.dw 0xFFFF,0xEA60,0xC350,0x9C40,0x7530,0x4E20,0x2710

//60000-10000

.dw 0x2328,0x1F40,0x1B58,0x1770,0x1388,0x0FA0,0x0BB8,0x07D0,0x03E8

//9000-1000

.dw 0x0384,0x0320,0x02BC,0x0258,0x01F4,0x0190,0x012C,0x00C8,0x0064

//900-100

.dw 0x005A,0x0050,0x0046,0x003C,0x0032,0x0028,0x001E,0x0014,0x000A

//90-10

//.RAM

//.DATA

.code

//=========================================================================================

//函數(shù): hex_to_8421()

//語法:hex_to_8421(被轉(zhuǎn)換數(shù),符號標記)

//描述:16進位數(shù)轉(zhuǎn)換成8421碼,存放在C段中定義好的數(shù)組當(dāng)中

//須定義一個下標8位的整數(shù)數(shù)組,C段中如下書寫

//extern int led_out [8]={0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};

//參數(shù):被轉(zhuǎn)換數(shù)小于0xFFFF的數(shù),符號標記0或非零的數(shù)

//返回:無

//=============================================================================================

.PUBLIC _hex_to_8421;

_hex_to_8421: .PROC

push bp to [sp];

bp=sp+1;? ?? ?? ?? ?? ???//基址重定位,準備取參數(shù)

r1=[bp+3];? ?? ?? ?? ?? ?//備轉(zhuǎn)換成8421碼的16進位數(shù)字

r3=[bp+4];? ?? ?? ?? ?? ?//符號位標志,為0,則做無符號整數(shù)處理,非1做有符號數(shù)處理

R4=_Led_Out;? ?? ?? ?? ? //輸出數(shù)據(jù)的地址******************************可修改輸出名稱

bp=_List_8421_Data;? ?? ?//基址定位到位權(quán)表頭**************************對應(yīng).IRAM段,可修改輸入名稱

//------------------------------------------

test R3,0xFFFF;? ?? ?? ? //檢查R3是否非0,如果非零,做有符號數(shù)處理,如果為0,做無符號數(shù)處理

je _hex_loop0;? ?? ? //為0,做無符號數(shù)處理,跳到_hex_loop0

R3=0xF000;? ?? ?? ?? ? //非0,做有符號數(shù)處理

[R4]=r3;? ?? ?? ?? ?? ?//表的第1個單元高4字節(jié)存放符號標記,F為負,0為正

R1-=0X0001;? ?? ?? ?? ?//包括下1步,減1后反碼轉(zhuǎn)換成10進位正數(shù)

R1^=0xFFFF;

_hex_loop0:

R2=0X0007;? ?? ?? ???//R2為進位標志,從9到1循環(huán),R2初置7,進入循環(huán)后減1為6做初值

//------------------------------------------

_hex_loop1:? ?? ?? ?? ???//位權(quán)表遍歷開始標記

CALL _Clear_WatchDog;? ?? ?? ?? ?// 清看門狗

BP+=0X0001;? ?? ?? ?? ?//基址加1,定位到位權(quán)表第一個有效數(shù)字

R2-=0X0001;? ?? ?? ?? ?//位權(quán)減1,準備輸出位權(quán)表第一個有效數(shù)字所對應(yīng)的位數(shù)字

cmp r1,[bp];? ?? ?? ???//比較被轉(zhuǎn)換數(shù)和當(dāng)前位權(quán)的大小

jb _hex_loop2;? ?? ?//如果被轉(zhuǎn)換數(shù)小于當(dāng)前位權(quán),則跳到"_hex_loop1",繼續(xù)比較

jmp _hex_loop3;? ?? ? //如果被轉(zhuǎn)換數(shù)大于當(dāng)前位權(quán),則跳到"_hex_loop3",進行轉(zhuǎn)換

_hex_loop2:? ?? ?? ?//R2進位循環(huán)處理的標記

CMP R2,0X0002;

JB _hex_loop4;??//包括上1步,如果R2小于2,跳到_hex_loop4,將R2置為10

JMP _hex_loop1;? ?//如果R2大于等于2,跳到"_hex_loop1",繼續(xù)比較

_hex_loop4:

R2=0x000A;? ?? ?//包括下1步,將R2置為10,跳到"_hex_loop1",繼續(xù)比較

JMP _hex_loop1;

//------------------------------------------

_hex_loop3:? ?? ?? ?? ???//判斷并輸出數(shù)據(jù)的標記

cmp r1,0x2710;

jnb _hex_2710;? ?? ?? ???//包括上1步,如果R1大于等于0x2710(10000),跳到_hex_2710處理

cmp r1,0x03e8;

jnb _hex_03e8;? ?? ?? ???//包括上1步,如果R1大于等于0x03E8(1000),跳到_hex_03E8處理

cmp r1,0x0064;

jnb _hex_0064;? ?? ?? ???//包括上1步,如果R1大于等于0x0064(100),跳到_hex_0064處理

cmp r1,0x000a;

jnb _hex_000a;? ?? ?? ???//包括上1步,如果R1大于等于0x000A(10),跳到_hex_000A處理

//------------------------------------------

R3=R4+5;? ?? ?? ?? ?? ? //包括下2步,輸出10進制第1位,跳到"_hex_000",結(jié)束轉(zhuǎn)換

[R3]=R1;

jmp _hex_over;

_hex_2710:

R3=R4+1;? ?? ?? ?? ?//包括下3步,輸出10進制第5位,被轉(zhuǎn)換數(shù)減位權(quán),做被轉(zhuǎn)換數(shù),跳到"_hex_loop1",繼續(xù)比較

[R3]=R2;

r1-=[bp];

jmp _hex_loop1;

_hex_03e8:

R3=R4+2;? ?? ?? ?? ?//包括下3步,輸出10進制第4位,被轉(zhuǎn)換數(shù)減位權(quán),做被轉(zhuǎn)換數(shù),跳到"_hex_loop1",繼續(xù)比較

[R3]=R2;

r1-=[bp];

jmp _hex_loop1;

_hex_0064:

R3=R4+3;? ?? ?? ?? ?//包括下3步,輸出10進制第3位,被轉(zhuǎn)換數(shù)減位權(quán),做被轉(zhuǎn)換數(shù),跳到"_hex_loop1",繼續(xù)比較

[R3]=R2;

r1-=[bp];

jmp _hex_loop1;

_hex_000a:

R3=R4+4;? ?? ?? ?? ?//包括下3步,輸出10進制第2位,被轉(zhuǎn)換數(shù)減位權(quán),做被轉(zhuǎn)換數(shù),跳到"_hex_loop1",繼續(xù)比較

[R3]=R2;

r1-=[bp];

jmp _hex_loop1;

_hex_over:

pop bp from [sp];

RETF

.ENDP;

.PUBLIC _Clear_WatchDog;

_Clear_WatchDog: .PROC

PUSH R1 TO [SP];

R1 = 0x0001;

[ASM_Port_Watchdog_Clear] = R1;

POP R1 FROM [SP];

RETF

.ENDP;

總結(jié)

以上是生活随笔為你收集整理的转换8421码的程序c语言,16进制数转换成8421BCD编码函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。