二進制數(shù)轉(zhuǎn)換為BCD碼(義隆單片機)
本例為單字節(jié)二進制數(shù)(0X20)轉(zhuǎn)換為非壓縮BCD 碼,存在0X25,0X24,0X23 中,0X25 為百位,0X23 為個位。
main: MOV a,@0xa4 ;賦值
MOV 0x20,a
MOV 0x21,a
MOV 0x22,a
MOV a,@0x0 ;0x23,0x24,0x25 單元清0
MOV 0x23,a
MOV 0x24,a
MOV 0x25,a
MOV a,@0x64 ;對100 的個數(shù)計數(shù)
MOV 0x26,a
MOV a,@0x25 ;百位存在0x25 中
MOV 0x04,a
call a0 ;調(diào)計數(shù)子程
MOV a,@0x0a ;對10 的個數(shù)計數(shù)
MOV 0x26,a
dec 0x04 ;個位存在0x24 中
call a0
MOV a,0x22 ;除去百位,十位,余下的即個位,存入0x23
MOV 0x23,a
self: jmp self
a0: ;計數(shù)子程
MOV a,0x26
sub 0x22,a
jbs 0x03,2
jmp a1
inc 0x00 ;無余數(shù)則對應(yīng)位加1
MOV a,@0x0 ;0x21 與0x22 在返回時應(yīng)保持相同
MOV 0x21,a
ret
a1: jbs 0x03,0 ;小于則跳a2
jmp a2
inc 0x00 ;大于則計數(shù)值加1
MOV a,0x22
MOV 0x21,a ;將0x22 保存到0x21 中
jmp a0 ;跳回a0 繼續(xù)計數(shù)
a2: MOV a,0x21 ;0x21 中保存的減之前的數(shù)據(jù),此時恢復(fù)到0x22
MOV 0x22,a
ret
eop