c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序.doc
16位二進(jìn)制轉(zhuǎn)換為BCD碼的C51匯編程序
16位二進(jìn)制轉(zhuǎn)換為BCD碼的C51匯編程序
16位二進(jìn)制轉(zhuǎn)BCD碼的程序算法及51匯編實(shí)現(xiàn):
n=b15~b0
n=[b15~b8]*256+[b7~b0]
=[b15~b12]*4096+[b11~b0]
,高四位[b15~b12]取值范圍為0~15,代表了4096的個(gè)數(shù)
n=[b15~b12]*4000+{[b15~b12]*(100-4)+[b11~b0]}
用x 代表[b15~b12],有:
n=x*4000+{x*(100-4)+[b11~b0]
即:n=4*x(千位)+x(百位)+[b11~b0]-4*x
上式中后面的位:[b11~b0]-4*x,如果,,,,于356,就直接轉(zhuǎn)換成BCD碼,如果
數(shù)值較大,就要把11~7位看成128的個(gè)數(shù)y,在百位中加上y,在十位加上3*y,并在
[b6~b0]中減去2*y
就有:
n=n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y
由此,就可以明確由高9位[b15~b7]變換出來(lái)十進(jìn)制的各個(gè)位的數(shù)值,可能大于9,到最后整理一下即可。
剩下的低7位變成BCD 碼已經(jīng)很簡(jiǎn)單了。
這是別人的思路,容易理解,但用匯編也不太好寫,期待有人能寫出來(lái),下面是我同,,,,的一個(gè)算法:
高八位減一,讓第八位加上256,(存放壓縮BCD碼的三個(gè)字節(jié)百位加2,十位加5,各位加6)
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP int0
ORG 0100H
MAIN:MOV SP,#60H
MOV R4,#30
MOV TMOD,#01H
MOV TH0,#00H
MOV TL0,#00H
MOV IE,#81H
SETB TR0
SETB IT0
LOOP:LCALL BCD
LCALL UBCD
LOOP1: LCALL XIANSHI
LCALL DELAY
DJNZ R4,LOOP1
AJMP LOOP
BCD:MOV A,#00H
MOV 38H,41H
MOV 37H,40H
MOV 34H,A
MOV 35H,A
MOV 36H,A
MOV A,37H
MOV B,#100
DIV AB
MOV 35H,A
MOV A,B
MOV B,#10
DIV AB
SWAP A
ADD A,B
MOV 36H,A
MOV R3,38H
CJNE R3,#0,JIA
AJMP RETURN
JIA: CLR C
MOV A,36H
ADDC A,#56H
DA A
MOV 36H,A
MOV A,35H
ADDC A,#02H
DA A
MOV 35H,A
MOV A,34H
ADDC A,#0
MOV 34H,A
DJNZ R3,JIA
RETURN:RET
UBCD: MOV A,34H
CJNE A,#00H,WUWEI
MOV R1,#35H
MOV R0,#36H
MOV A,#00H
XCHD A,@R0
MOV 30H,A
MOV A,@R0
SWAP A
MOV 31H,A
MOV A,#00H
XCHD A,@R1
MOV 32H,A
MOV A,@R1
總結(jié)
以上是生活随笔為你收集整理的c51 c语言 16位二进制转换为bcd码,16位二进制转换为BCD码的C51汇编程序.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Typora 实用教程
- 下一篇: Elasticsearch7.x学习