51單片機把4位16進制數轉成10進制數的方法
2位16進制轉10進制,用除以10求商跟余數的方法,即可。
4位16進制數呢?DIV指令只可以對2位16進制數進行除法運算啊,求高手解答。
例如把TH1 TL1的數值轉成十進制, 分別存入R4 R3 R2 R1 R0。
;------------------------------------------------------------------
下面把這段轉換程序,寫成子程序的結構,便于網友移植。
;
程序經過仿真調試通過,如下所示:
;------------------------------------------------------------------
;
MOV R0, TH1
MOV R1, TL1
CALL HEX2BCD ;調用子程序把R0 R1中的數字,轉換成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é)的二進制數轉換成BCD碼的程序如下:
;功能:16位二進制數變換成為 BCD 碼;
;入口:R0 R1 中是 16 位二進制數,其中R0中是高 8 位;
;出口:R2 R3 R4 中是 BCD 碼,其中R2中是萬位,R3中是千、百位,R4中是十、個位。
HEX2BCD:
CLR A
MOV R2, A ;先清零
MOV R3, A
MOV R4, A
MOV R5, #16 ;共轉換十六位數
LOOP:
CLR C
MOV A, R1 ;從待轉換數的高端移出一位到Cy
RLC A
MOV R1, A
MOV A, R0
RLC A
MOV R0, A
MOV A, R4 ;送到BCD碼的低端
ADDC A, R4 ;帶進位加。自身相加,相當于左移一位
DA A ;十進制調整,變成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 ;共轉換十六位數
RET
;------------------------------------------------------------------

編輯:admin 最后修改時間:2018-05-19