📄 bassub.asm
字号:
;INCLUDE "BASSUB.INC"
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: CLR_MEMORY - CLEAN ONE BLOCK DATA IN MEMORY WITH A
; FUNCTION:
; PARMENTERS:
; A - THE GAVEN DATA
; R0 - THE POINTER TO THE START POSITION IN MEMORY
; R5 - THE NUMBER OF BYTES
; CHANGE REGISTERS: R0, R5
; RETURN: None
;------------------------------------------------------------
CLR_MEMORY: CLR A
NextOne: MOV @R0, A
INC R0
DJNZ R5, NextOne
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOV_EXTTORAM - MOVE ONE BLOCK DATA FORM HIGH RAM TO LOW
; FUNCTION: NONE
; PARMENTERS:
; A - THE NUMBER OF BYTES WILL BE MOVED
; R1 - THE START POSITION OUT IN_RAM
; DPTR - THE START POSITION OF P_ROM
; CHANGE REGISTERS: A, THE BUFFER POINT BY R1
; RETURN: None
;------------------------------------------------------------
MOV_EXTTORAM: PUSH ACC
MOVX A, @DPTR
MOVX @R1, A
POP ACC
INC DPTR
INC R1
DEC A
JNZ MOV_EXTTORAM
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOV_RAMTOEXT - MOVE ONE BLOCK DATA FORM LOW EXT. TO HIGH EXT. RAM
; FUNCTION: NONE
; PARMENTERS:
; A - THE NUMBER OF BYTES WILL BE MOVED
; R1 - THE START POSITION OUT IN_RAM
; DPTR - THE START POSITION OF P_ROM
; CHANGE REGISTERS: A, THE BUFFER POINT BY R1
; RETURN: None
;------------------------------------------------------------
MOV_RAMTOEXT: PUSH ACC
MOVX A, @R1
MOVX @DPTR, A
POP ACC
INC R1
INC DPTR
DEC A
JNZ MOV_RAMTOEXT
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOV_ROMTORAM - MOVE ONE BLOCK DATA FORM PROGRAM TO EXT. RAM
; FUNCTION: NONE
; PARMENTERS:
; A - THE NUMBER OF BYTE WILL BE MOVE
; R1 - THE START POSITION OUT IN_RAM
; DPTR - THE START POSITION OF P_ROM
; CHANGE REGISTERS: A, THE BUFFER POINT BY R1
; RETURN: None
;------------------------------------------------------------
MOV_ROMTORAM: PUSH ACC
ADD A, R1
MOV R1, A
POP ACC
NextToRAM: DEC A
PUSH ACC
DEC R1
MOVC A, @A+DPTR
MOVX @R1, A
POP ACC
JNZ NextToRAM
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: CMP_RAMTOEXT - COMPAREE ONE BLOCK DATA FORM PROGRAM TO EXT. RAM
; FUNCTION: NONE
; PARMENTERS:
; A - THE NUMBER OF BYTE WILL BE MOVE
; R1 - THE START POSITION OUT IN_RAM
; DPTR - THE START POSITION OF P_ROM
; CHANGE REGISTERS: A, THE BUFFER POINT BY R1
; RETURN: None
;------------------------------------------------------------
CMP_RAMTOEXT: PUSH ACC
MOVX A, @R1
MOV B, A
MOVX A, @DPTR
CLR C
SUBB A, B
JZ CmpNext
POP ACC
EndCmp: RET
CmpNext: POP ACC
DEC A
JZ EndCmp
XCH A, B
JZ EndCmp
XCH A, B
INC R1
INC DPTR
AJMP CMP_RAMTOEXT
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOVP_R0 - MOVE POINTER (R0 POINTED) DOWN R7 GROUP DATA
; FUNCTION:
; PARMENTERS:
; R0 - THE POINTER TO THE START POSITION IN MEMORY
; A - THE NUMBER OF GROUPS WILL SKIP OVER
; CHANGE REGISTERS: A, B, R0
; RETURN: R0
;------------------------------------------------------------
MOVP_R0: DEC A ; GET THE SHIFT NUMBER
MOV B, #03
MUL AB
ADD A, R0
MOV R0, A
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOVPR0_RS - COPY THREE BYTES IN EXTREN MEMORY
; FUNCTION: TO REGISTERS R7,R4,R5
; PARMENTERS:
; R0 - THE POINTER TO THE START POSITION IN MEMORY
; CHANGE REGISTERS: R7, R4, R5
; RETURN: R7, R4, R5
;------------------------------------------------------------
MOVPR0_RS: PUSH ACC
MOVX A, @R0
MOV R7, A
INC R0
MOVX A, @R0
MOV R4, A
INC R0
MOVX A, @R0
MOV R5, A
DEC R0
DEC R0
POP ACC
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOVPR1_RS - COPY THREE BYTES IN EXTREN MEMORY
; FUNCTION: TO REGISTERS R7,R4,R5
; PARMENTERS:
; R1 - THE POINTER TO THE START POSITION IN MEMORY
; CHANGE REGISTERS: R7, R4, R5
; RETURN: R7, R4, R5
;------------------------------------------------------------
MOVPR1_RS: PUSH ACC
MOVX A, @R1
MOV R7, A
INC R1
MOVX A, @R1
MOV R4, A
INC R1
MOVX A, @R1
MOV R5, A
DEC R1
DEC R1
POP ACC
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: MOVRS_PR0 - COPY THREE BYTES IN REGISTER R7,R4,R5
; TO MEMORY POINT BY R0
; FUNCTION:
; PARMENTERS:
; R7, R4, R5 - THE REGISTER WILL BE COPY FROM
; R0 - THE POINTER TO THE START POSITION IN MEMORY
; CHANGE REGISTERS: NONE
; RETURN: BUFFER DATA POINT BY R0
;------------------------------------------------------------
MOVRS_PR0: PUSH ACC
MOV A, R7
MOVX @R0, A
INC R0
MOV A, R4
MOVX @R0, A
INC R0
MOV A, R5
MOVX @R0, A
DEC R0
DEC R0
POP ACC
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: DELAY - DELAY 50us
; CALL FUNCTION:
; USING PARMENTERS: NONE
; COMMON DATA USED:
; CHANGE REGISTER: C, A
; RETURN: NONE
;------------------------------------------------------------
DELAY: PUSH ACC
MOV A, #0C7H ; 5*2*200 = 1mS ( 12MZ )
DelLoop: DEC A
INC A
DEC A
JNZ DelLoop ; 5 CLOCKS
POP ACC
DEC A
JNZ DELAY
RET
;###########################################################
; FILE: BASSUB.ASM
; NAME: BCDTOBIN - CONVERT THE BCD CODE TO BINARY CODE
; PARMENTERS: A - BCD CODE
; CHANGE: A, B
; RETURN: A
;###########################################################
BCDTOBIN: PUSH ACC
MOV B, #0AH
SWAP A
ANL A, #0FH
MUL AB
POP B
ANL B, #0FH
ADD A, B
RET
;###########################################################
; FILE: BASSUB.ASM
; NAME: BINTOBCD - CONVERT THE BINARY CODE TO BCD CODE
; PARMENTERS: A - BINARY CODE < 99
; CHANGE: A, B
; RETURN: A
;###########################################################
BINTOBCD: MOV B, #0AH
DIV AB
ANL A, #0FH
SWAP A
ORL A, B
RET
;###########################################################
; FILE: BASSUB.ASM
; NAME: BCD_TOSTR - CONVERT THE INTEGER TO HEX ASCII CODE
; PARMENTERS: A - THE INTEGER
; R1 - THE BUFFER FOR STORE THE ASCII STRING
; R2 - THE NUMBER OF CHARACTER WILL BE STORED
; CHANGE: C, A, R2, THE BUFFER POINTER BY R1
; RETURN: C - ERROR FLAG, R1 - THE BUFFER FOR STRING
;###########################################################
PROC BCD_TOSTR, HEX_TOSTR, INT_TOSTR
BCD_TOSTR: PUSH ACC
MOV A, R2
ADD A, R1
MOV R1, A
POP ACC
PUSH ACC
AJMP FillLow
NextBCD: PUSH ACC
JZ FillSP
FillLow: ANL A, #0FH
ADD A, #30H
FillStr: DEC R1
MOVX @R1, A
POP ACC
SWAP A
ANL A, #0FH
DJNZ R2, NextBCD
RET
FillSP: MOV A, #cSPACE
AJMP FillStr
;###########################################################
; FILE: BASSUB.ASM
; NAME: HEX_TOSTR - CONVERT THE INTEGER TO HEX ASCII CODE
; PARMENTERS: A - THE INTEGER
; R1 - THE BUFFER FOR STORE THE ASCII STRING
; R2 - THE NUMBER OF CHARACTER WILL BE STORED
; CHANGE: C, A, R2, THE BUFFER POINTER BY R1
; RETURN: C - ERROR FLAG, R1 - THE BUFFER FOR STRING
;###########################################################
HEX_TOSTR: PUSH ACC
MOV A, R2
ADD A, R1
MOV R1, A
POP ACC
NextHex: PUSH ACC
ANL A, #0FH
CJNE A, #0AH, ForHalf
ForHalf: JNC ASCIs
ADD A, #30H
AJMP SaveHex
ASCIs: ADD A, #37H
SaveHex: DEC R1
MOVX @R1, A
POP ACC
SWAP A
ANL A, #0FH
DJNZ R2, NextHex
RET
;###########################################################
; FILE: BASSUB.ASM
; NAME: INT_TOSTR - CONVERT THE INTEGER TO ASCII CODE
; PARMENTERS: A - THE INTEGER
; R1 - THE BUFFER FOR STORE THE ASCII STRING
; R2 - THE NUMBER OF CHARACTER WILL BE STORED
; CHANGE: C, A, B, R2, THE BUFFER POINTER BY R1
; RETURN: C - ERROR FLAG, R1 - THE BUFFER FOR STRING
;###########################################################
INT_TOSTR: PUSH ACC
MOV A, R2
ADD A, R1
MOV R1, A
POP ACC
CJNE R2, #0, NextASCII
GreatEnd: SETB C
RET
NextASCII: MOV B, #0AH ; FOR FRIST ZERO DATA
DIV AB
XCH A, B
ORL A, #30H
SaveToBuf: DEC R1
MOVX @R1, A
MOV A, B
DJNZ R2, IsZero
CLR C
JNZ GreatEnd
RET
IsZero: JNZ NextASCII
MOV A, #cSPACE
AJMP SaveToBuf
END
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: TOC_R6BIT - MOVE THE [R6=0...] BIT TO C
; FUNCTION:
; PARMENTERS:
; A - THE OLD DATA BYTE
; R6 - THE INDEX OF BIT THAT WILL BE SET
; CHANGE REGISTER: C, B
; RETURN: REGISTER C
;------------------------------------------------------------
PROC dTOC_R6BIT, TOC_R6BIT, FIXtoBYTE
dTOC_R6BIT: MOV A, @R0
TOC_R6BIT: MOV B, R6
CALL FIXtoBYTE
PUSH ACC
To_NextBit: RRC A
DJNZ B, To_NextBit
POP ACC
RET
FIXtoBYTE: PUSH ACC
MOV A, #07H
ANL A, B
INC A
MOV B, A
POP ACC
RET
END
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: xSET_R6BIT - SET [R6=0__...] BIT IN EXTERN MENORY
; FUNCTION:
; PARMENTERS: R0 - THE POINTER TO DATA
; R6 - THE INDEX OF BIT THAT WILL BE SET
; CHANGE REGISTER: C, B
; RETURN: REGISTER A
;------------------------------------------------------------
PROC xSET_R6BIT, SET_R6BIT, CPL_R6BIT
xSET_R6BIT: MOVX A, @R0
CALL SET_R6BIT
MOVX @R0, A
MOV A, R0 ; the i/o on/off status
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: SET_R6BIT - SET [R6=0__...] BIT IN REGISTER A
; FUNCTION:
; PARMENTERS: A - THE OLD DATA BYTE
; R6 - THE INDEX OF BIT THAT WILL BE SET
; CHANGE REGISTER: C, B
; RETURN: REGISTER A
;------------------------------------------------------------
SET_R6BIT: MOV B, R6
CALL FIXtoBYTE
PUSH B
R_NextSet: RRC A
DJNZ B, R_NextSet
SETB C
POP B
L_NextSet: RLC A
DJNZ B, L_NextSet
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: CPL_R6BIT - COMPLEMENT [R6=0__...] BIT IN REGISTER A
; FUNCTION:
; PARMENTERS: A - THE OLD DATA BYTE
; R6 - THE INDEX OF BIT THAT WILL BE SET
; CHANGE REGISTER: C, B
; RETURN: REGISTER A
;------------------------------------------------------------
CPL_R6BIT: MOV B, R6
CALL FIXtoBYTE
PUSH B
R_NextCpl: RRC A
DJNZ B, R_NextCpl
CPL C
POP B
L_NextCpl: RLC A
DJNZ B, L_NextCpl
RET
END
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: xCLR_R6BIT - CLEAR [R6=0__...] BIT IN EXTERN MENORY
; FUNCTION:
; PARMENTERS: R0 - THE POINTER TO DATA
; R6 - THE INDEX OF BIT THAT WILL BE SET
; CHANGE REGISTER: C, B
; RETURN: REGISTER A
;------------------------------------------------------------
PROC xCLR_R6BIT, CLR_R6BIT, FIX_R6BIT, CTO_R6BIT
xCLR_R6BIT: MOVX A, @R0
CALL CLR_R6BIT
MOVX @R0, A
MOV A, R0 ; the i/o on/off status
RET
;#############################################################
; FILE NAME BASSUB.ASM
; SUBROUTE: CLR_R6BIT - SET [R6=0...] BIT IN REGISTER A
; FUNCTION:
; PARMENTERS: A - THE OLD DATA BYTE
; R6 - THE INDEX OF BIT THAT WILL BE CLEAR
; CHANGE REGISTER: C, B
; RETURN: REGISTER A
;------------------------------------------------------------
CLR_R6BIT: MOV B, R6
CALL FIXtoBYTE
R_NextClr: RRC A
DJNZ B, R_NextClr
CLR C
MOV B, R6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -