📄 bcd6.xsf
字号:
;"#C:\Program Files\Rigel\Reads51\Include\sfr51.inc"
; --- 8051 registers ---
ACC data 0xE0
B data 0xF0
DPH data 0x83
DPL data 0x82
IE data 0xA8
IP data 0xB8
P0 data 0x80
P1 data 0x90
P2 data 0xA0
P3 data 0xB0
PCON data 0x87
PSW data 0xD0
SBUF data 0x99
SCON data 0x98
SP data 0x81
TCON data 0x88
TH0 data 0x8C
TH1 data 0x8D
TL0 data 0x8A
TL1 data 0x8B
TMOD data 0x89
; --- 8051 register bit fields ---
; IE
EA bit 0xAF
ES bit 0xAC
ET1 bit 0xAB
EX1 bit 0xAA
ET0 bit 0xA9
EX0 bit 0xA8
; IP
PS bit 0xBC
PT1 bit 0xBB
PX1 bit 0xBA
PT0 bit 0xB9
PX0 bit 0xB8
; P3
RD bit 0xB7
WR bit 0xB6
T1 bit 0xB5
T0 bit 0xB4
INT1 bit 0xB3
INT0 bit 0xB2
TXD bit 0xB1
RXD bit 0xB0
; PSW
CY bit 0xD7
AC bit 0xD6
F0 bit 0xD5
RS1 bit 0xD4
RS0 bit 0xD3
OV bit 0xD2
P bit 0xD0
; TCON
TF1 bit 0x8F
TR1 bit 0x8E
TF0 bit 0x8D
TR0 bit 0x8C
IE1 bit 0x8B
IT1 bit 0x8A
IE0 bit 0x89
IT0 bit 0x88
; SCON
SM0 bit 0x9F
SM1 bit 0x9E
SM2 bit 0x9D
REN bit 0x9C
TB8 bit 0x9B
RB8 bit 0x9A
TI bit 0x99
RI bit 0x98
;*-----------------------------------------------------------
;*
;* bin6bcd - routine compute from binary value to bcd
;*
;* Entry: reg_e:d - binary value (24 bit)
;*
;* Exit: reg_e:d - 8 bcd digits (0000:0000-1677:7215)
;*
;*-----------------------------------------------------------
H1 EQU 08H
H2 EQU 09H
H3 EQU 0AH
D1 EQU 0BH
D2 EQU 0CH
D3 EQU 0DH
D4 EQU 0EH
TMP1 EQU 0FH
TMP2 EQU 10H
TMP3 EQU 11H
TMP4 EQU 12H
POINTER EQU 13H
HOLD EQU 14H
MOV H1,#0F2H ;020A1B HEX
MOV H2,#0ABH ;INPUT
MOV H3,#0FFH
;----------------------------------------------
MOV D1,#00H
MOV D2,#00H
MOV D3,#00H
MOV D4,#00H ;OUTPUT
;----------------------------------------------
MOV TMP1,#00H ;TEMPORARI
MOV TMP2,#00H
MOV TMP3,#00H
MOV TMP4,#00H
;-------------------------------------------------------------------------------------
BIN6BCD:
MOV SP,#20H
MOV A,H3
MOV R0,#8
CJNE R0,#01H,DOWN
CLR C
RRC A
MOV HOLD,A
JNC DOWN
MOV A,R0
RL A
RL A
MOV POINTER,A
ACALL ADDITION
DOWN:
MOV A,HOLD
DJNZ R0,BIN6BCD
MULAI: MOV A,H2
MOV R0,#8
CLR C
RRC A
MOV HOLD,A
JNC DOWNH2
MOV A,R0
ADD A,#08H
RL A
RL A
MOV POINTER,A
ACALL ADDITION
DOWNH2:
MOV A,HOLD
DJNZ R0,MULAI
TERUS: MOV A,H1
MOV R0,#8
CLR C
RRC A
MOV HOLD,A
JNC DOWNH3
MOV A,R0
ADD A,#10H
RL A
RL A
MOV POINTER,A
ACALL ADDITION
DOWNH3:
MOV A,HOLD
DJNZ R0,TERUS
BBBB: SJMP BBBB
;-------------------------------------------------------------------------------------
ADDITION:
MOV DPTR,#BINBCDTAB
DEC POINTER
MOV A,POINTER
MOVC A,@A+DPTR
MOV TMP1,A
MOV A,POINTER
DEC A
MOVC A,@A+DPTR
MOV TMP2,A
MOV A,POINTER
DEC A
DEC A
MOVC A,@A+DPTR
MOV TMP3,A
MOV A,POINTER
DEC A
DEC A
DEC A
MOVC A,@A+DPTR
MOV TMP4,A
;-------------- DO ADDITION TMP1 -------------------
CLR C
MOV A,TMP1
ADD A,D4
DA A
MOV D4,A
MOV A,TMP2
ADDC A,D3
DA A
MOV D3,A
MOV A,TMP3
ADDC A,D2
DA A
MOV D2,A
MOV A,TMP4
ADDC A,D1
DA A
MOV D1,A
CLR C
RET
;-------------------------------------------------------------------------------------
HETE: SJMP HETE
BINBCDTAB:
DB 00H,00H,00H,01H ; bit 0
DB 00H,00H,00H,02H ; bit 1
DB 00H,00H,00H,04H ; bit 2
DB 00H,00H,00H,08H ; bit 3
DB 00H,00H,00H,16H ; bit 4
DB 00H,00H,00H,32H ; bit 5
DB 00H,00H,00H,64H ; bit 6
DB 00H,00H,01H,28H ; bit 7
DB 00H,00H,02H,56H ; bit 8
DB 00H,00H,05H,12H ; bit 9
DB 00H,00H,10H,24H ; bit 10
DB 00H,00H,20H,48H ; bit 11
DB 00H,00H,40H,96H ; bit 12
DB 00H,00H,81H,92H ; bit 13
DB 00H,01H,63H,84H ; bit 14
DB 00H,03H,27H,68H ; bit 15
DB 00H,06H,55H,36H ; bit 16
DB 00H,13H,10H,72H ; bit 17
DB 00H,26H,21H,44H ; bit 18
DB 00H,52H,42H,88H ; bit 19
DB 01H,04H,85H,76H ; bit 20
DB 02H,09H,71H,52H ; bit 21
DB 04H,19H,43H,04H ; bit 22
DB 08H,38H,86H,08H ; bit 23
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -