51單片機把4位16進制數(shù)轉(zhuǎn)成10進制數(shù)的方法
2位16進制轉(zhuǎn)10進制,用除以10求商跟余數(shù)的方法,即可。
4位16進制數(shù)呢?DIV指令只可以對2位16進制數(shù)進行除法運算啊,求高手解答。
例如把TH1 TL1的數(shù)值轉(zhuǎn)成十進制, 分別存入R4 R3 R2 R1 R0。
;------------------------------------------------------------------
下面把這段轉(zhuǎn)換程序,寫成子程序的結(jié)構(gòu),便于網(wǎng)友移植。
;
程序經(jīng)過仿真調(diào)試通過,如下所示:
;------------------------------------------------------------------
;
MOV R0, TH1
MOV R1, TL1
CALL HEX2BCD ;調(diào)用子程序把R0 R1中的數(shù)字,轉(zhuǎn)換成BCD碼,送到R2 R3 R4
;-------下面,把萬千百十個位,分別存入R4 R3 R2 R1 R0
MOV A, R4
MOV B, #16
DIV AB ;除以16,目的是分離出高、低四位
MOV R1, A ;存放十位
MOV R0, B ;存放個位
;
MOV A, R2
MOV R4, A ;存放萬位
;
MOV A, R3
MOV B, #16
DIV AB
MOV R3, A
MOV R2, B
SJMP $ ;到此,完成了題目要求
;------------------------------------------------------------------
;兩個字節(jié)的二進制數(shù)轉(zhuǎn)換成BCD碼的程序如下:
;功能:16位二進制數(shù)變換成為 BCD 碼;
;入口:R0 R1 中是 16 位二進制數(shù),其中R0中是高 8 位;
;出口:R2 R3 R4 中是 BCD 碼,其中R2中是萬位,R3中是千、百位,R4中是十、個位。
HEX2BCD:
CLR A
MOV R2, A ;先清零
MOV R3, A
MOV R4, A
MOV R5, #16 ;共轉(zhuǎn)換十六位數(shù)
LOOP:
CLR C
MOV A, R1 ;從待轉(zhuǎn)換數(shù)的高端移出一位到Cy
RLC A
MOV R1, A
MOV A, R0
RLC A
MOV R0, A
MOV A, R4 ;送到BCD碼的低端
ADDC A, R4 ;帶進位加。自身相加,相當于左移一位
DA A ;十進制調(diào)整,變成BCD碼
MOV R4, A
MOV A, R3
ADDC A, R3
DA A
MOV R3, A
MOV A, R2
ADDC A, R2
MOV R2, A
DJNZ R5, LOOP ;共轉(zhuǎn)換十六位數(shù)
RET
;------------------------------------------------------------------
編輯:admin 最后修改時間:2018-05-19