⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bassub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;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 + -