📄 pin3.asm
字号:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:ADDR8279_1 EQU 0BFFFH
ADDR8279_2 EQU 0BFFEH
MOV DPTR,#ADDR8279_1
MOV A,#0D1H
MOVX @DPTR,A
WAIT1:MOVX A,@DPTR
JB ACC.7,WAIT1
MOV A,#00H
MOVX @DPTR,A
MOV A,#2CH
MOVX @DPTR,A
MOV TMOD,#05H
KAI:MOV TL0,#00H
MOV TH0,#00H
KAI1:SETB P1.0
JB P1.0,KAI2
SJMP KAI1
KAI2:SETB TR0
SETB P1.0
JNB P1.0,PINYU
SJMP KAI2
PINYU:CLR TR0
MOV R6,TH0
MOV R7,TL0
LCALL HB2
MOV 60H,R3
MOV 61H,R4
MOV 62H,R5
LCALL TRANS
LCALL LED
AJMP KAI
;;;入口条件:待转换的双字节十六进制整数在R6、R7中。
;;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2:CLR A ;;;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;;;转换双字节十六进制整数
HB3:MOV A,R7 ;;;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;;;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;;;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;;;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;; ;处理完16bit
RET
TRANS: MOV R0,#62H
MOV R1,#40H
MOV R6,#03H
LAST:MOV A,@R0
ANL A,#0FH
MOV @R1,A
MOV A,@R0
ANL A,#0F0H
SWAP A
INC R1
MOV @R1,A
INC R1
DEC R0
DJNZ R6,LAST
RET
LED:MOV DPTR,#ADDR8279_1
MOV A,#90H
MOVX @DPTR,A
MOV R1,#40H
MOV R7,#06H
MOV DPTR,#ADDR8279_2
LOOP:MOV A,@R1
ADD A,#05H
MOVC A,@A+PC
MOVX @DPTR,A
INC R1
DJNZ R7,LOOP
RET
DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -