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

📄 t128_bank.a51

📁 T108 LCD屏的DEMO源代码!需要的就下吧
💻 A51
📖 第 1 页 / 共 2 页
字号:
				INC		DPTR
				MOV		A,#0xA0
				MOVX	@DPTR,A
;         Registers[0xF1FB]=0x00; 
				INC		DPTR
				MOV		A,#0x00
				MOVX	@DPTR,A
;         Registers[0xF1FC]=0xE0; 
				INC		DPTR
				MOV		A,#0xE0
				MOVX	@DPTR,A	  
;         Registers[0xF1FD]=0x90; 
				MOV  	DPTR,#0xF1FD
				MOV		A,#0x90
				MOVX	@DPTR,A  
                ENDM             

SWITCH3         MACRO            ; Switch to Memory Bank #3                   
;         Registers[0xF1F0]=0x0B; 
				MOV		DPTR,#0xF1F0
				MOV		A,#0x0B
				MOVX	@DPTR,A
;         Registers[0xF1F1]=0x00; 
				CLR		A
				INC		DPTR
				MOVX	@DPTR,A
;         Registers[0xF1F2]=0xC0; 
				INC		DPTR
				MOV		A,#0xC0
				MOVX	@DPTR,A
;         Registers[0xF1F3]=0x00; 
				INC		DPTR
				MOV		A,#0x00
				MOVX	@DPTR,A
;         Registers[0xF1F5]=0x6C; 
				MOV		DPTR,#0xF1F5
				MOV		A,#0x6C
				MOVX	@DPTR,A
;         Registers[0xF1F9]=0x00; 
				CLR		A
				MOV		DPTR,#0xF1F9
				MOVX	@DPTR,A
;         Registers[0xF1FA]=0x00; 
				INC		DPTR
				MOV		A,#0x80
				MOVX	@DPTR,A
;         Registers[0xF1FB]=0x00; 
				INC		DPTR
				MOV		A,#0x00
				MOVX	@DPTR,A
;         Registers[0xF1FC]=0xE0; 
				INC		DPTR
				MOV		A,#0xE0
				MOVX	@DPTR,A
;         Registers[0xF1FD]=0x90; 
				INC		DPTR
				MOV		A,#0x90
				MOVX	@DPTR,A 
;		  while(!(Registers[0xF1FC]&0x80));
?C0007:
				MOV  	DPTR,#0xF1FC
				MOVX 	A,@DPTR
				JNB  	ACC.7,?C0007
?C0008: 
;         Registers[0xF1F0]=0x0B; 
				MOV		DPTR,#0xF1F0
				MOV		A,#0x0B
				MOVX	@DPTR,A
;         Registers[0xF1F1]=0x00; 
				CLR		A
				INC		DPTR
				MOVX	@DPTR,A
;         Registers[0xF1F2]=0xE0; 
				INC		DPTR
				MOV		A,#0xE0
				MOVX	@DPTR,A
;         Registers[0xF1F3]=0x00; 
				INC		DPTR
				MOV		A,#0x00
				MOVX	@DPTR,A
;         Registers[0xF1F5]=0x6C; 
				MOV		DPTR,#0xF1F5
				MOV		A,#0x6C
				MOVX	@DPTR,A
;         Registers[0xF1F9]=0x00; 
				CLR		A
				MOV		DPTR,#0xF1F9
				MOVX	@DPTR,A
;         Registers[0xF1FA]=0xA0; 
				INC		DPTR
				MOV		A,#0xA0
				MOVX	@DPTR,A
;         Registers[0xF1FB]=0x00; 
				INC		DPTR
				MOV		A,#0x00
				MOVX	@DPTR,A
;         Registers[0xF1FC]=0xE0; 
				INC		DPTR
				MOV		A,#0xE0
				MOVX	@DPTR,A	  
;         Registers[0xF1FD]=0x90; 
				MOV  	DPTR,#0xF1FD
				MOV		A,#0x90
				MOVX	@DPTR,A  
                ENDM           
;                                            								  *
;                                                                             *
;-----------------------------------------------------------------------------*
ENDIF;                                                                        *
;									      *
IF ?B_VAR_BANKING = 1;                                                        *							        
;									      * 
XMEM EQU 0x02000000       ; LX51 xdata symbol offset: do not change!	      *
;									      *
;******* Configuration Section for uVision2 Memory Simulation Support *********
;                                                                             *
; The following settings allow you to map the physical xdata and code memory  *
; banks into simulation memory of the uVision2 Simulator.                     *
;                                                                             *
?B?XSTART EQU 0x8000      ; Start of xdata bank area                          *
?B?XEND   EQU 0xFFFF      ; Stop of xdata bank area                           *
?B?XMEM   EQU XMEM+0x010000  ; First HDATA memory bank in xdata space         *
;                                                                             *
; The above setting redirects the symbols in the area X:0x20000 .. X:0x2FFFF  *
; into the uVision2 simulation memory area for the EEPROM  V:0 .. V:0xFFFF    *
;                                                                             *
;-----------------------------------------------------------------------------*
;                                                                             *
                PUBLIC ?B?XSTART, ?B?XEND, ?B?XMEM;                           *
ENDIF;                                                                        *
;                                                                             *
;******************************************************************************
;                                                                             *
; THEORY OF OPERATION                                                         *
; -------------------                                                         *
; The section below describes the code generated by BL51 or LX51 and the      *
; operation of the L51_BANK.A51 module.  BL51/LX51 generates for each         *
; function that is located in a code memory bank and called from the common   *
; area or a different code bank and entry into the INTRABANK CALL TABLE.  The *
; INTRABANK CALL TABLE is located in the SEGMENT ?BANK?SELECT and listed in   *
; the Linker MAP file. The entries in that TABLE have the following format:   *
;                                                                             *
;   ?FCT?1:  MOV  DPTR,#FCT     ; Load Address of target FCT                  *
;            JMP  ?B_BANKn      ; Switch to Bank and Jump to Target Code      *
;                                                                             *
; Instead of directly calling the function FCT, the Linker changes the entry  *
; to ?FCT?1.  This entry selects the bank where the function FCT is located   *
; and calls that function via the routines defined in this L51_BANK.A51 file. *
; The L51_BANK.A51 file contains two sets of functions for each bank:         *
;                                                                             *
; ?B_BANKn    is a routine which saves the entry of the ?B_SWITCHn function   *
;             for the current active bank on the STACK and switches to the    *
;             bank 'n'.  Then it jumps to the address specified by the DPTR   *
;             register.  It is allowed to modify the following registers in   *
;             the ?B_BANKn routine:  A, B, R0, DPTR, PSW                      *
;                                                                             *
; ?B_SWITCHn  is a function which selects the bank 'n'.  This function is     *
;             used at the end of a user function to return to the calling     *
;             code bank.  Only the following registers may be altered in the  *
;             ?B_SWITCHn function:  R0, DPTR                                  *
;                                                                             *
; The current active bank is stored in ?B_CURRENTBANK.  RTX-51 uses this      *
; variable to restore the code bank after a task switch.  To get correct      *
; results, ?B_CURRENTBANK must be set to the code bank before the hardware    *
; switch is done, or the code banking sequences must be interrupt protected.  *
;******************************************************************************

                NAME    ?BANK?SWITCHING

                PUBLIC  ?B_NBANKS, ?B_MODE, ?B_CURRENTBANK, ?B_MASK
                PUBLIC  ?B_FACTOR, ?B_RST_BANK
IF (?B_RTX = 1)
                PUBLIC  ?B_RESTORE_BANK
ENDIF

; Standard SFR Symbols required in L51_BANK.A51
ACC     DATA    0E0H
B       DATA    0F0H
DPL     DATA    82H
DPH     DATA    83H
IE      DATA    0A8H
EA      BIT     IE.7


; generate Mask and Bank Number Information
IF      ?B_NBANKS <= 2
  MASK          EQU     00000001B
ELSEIF  ?B_NBANKS <= 4
  MASK          EQU     00000011B
ELSEIF  ?B_NBANKS <= 8
  MASK          EQU     00000111B
ELSEIF  ?B_NBANKS <= 16
  MASK          EQU     00001111B
ELSEIF  ?B_NBANKS <= 32
  MASK          EQU     00011111B
ELSE
  MASK          EQU     00111111B
ENDIF     								  


IF  ?B_MODE = 4 ;**************************************************************

?B_FACTOR       EQU     0               ; Dummy Declarations
?B_FIRSTBIT     EQU     0
?B_MASK         EQU     MASK

?BANK?SELECT    SEGMENT CODE
?BANK?DATA      SEGMENT DATA
                RSEG    ?BANK?DATA
?B_CURRENTBANK: DS      1

BANK            MACRO   N
                PUBLIC  ?B_BANK&N
?B_BANK&N:
                PUSH    ?B_CURRENTBANK
                MOV     A,#HIGH ?BANK?SWITCH
                PUSH    ACC
                PUSH    DPL
                PUSH    DPH
                ENDM

SWITCH          MACRO   N
                PUBLIC  ?B_SWITCH&N
  IF (LONG_MACRO = 1)
    ?B_SWITCHJ&N:
  ELSE
    ?B_SWITCH&N:
  ENDIF
                MOV     ?B_CURRENTBANK,#LOW ?B_SWITCH&N
                SWITCH&N
                RET
                ENDM

  IF (LONG_MACRO = 1)
    SWITCHJ     MACRO   N
    ?B_SWITCH&N:
                JMP     ?B_SWITCHJ&N
                ENDM
  ENDIF

?BANK?SWITCH    SEGMENT CODE PAGE

                RSEG    ?BANK?SWITCH
B_SWITCH_START  EQU     $

  IF (LONG_MACRO = 1)
    ; Generate ?B_SWITCHn jmp table entries
    CNT         SET     0

                REPT    ?B_NBANKS
                SWITCHJ %CNT
    CNT         SET     CNT+1
                ENDM
  ENDIF


; Generate ?B_SWITCHn functions
CNT             SET     0

                REPT    ?B_NBANKS
                BANK    %CNT
                SWITCH  %CNT
CNT             SET     CNT+1
                ENDM

B_SWITCH_SIZE   EQU     $-B_SWITCH_START

  IF (LONG_MACRO = 0) AND (B_SWITCH_SIZE > 256)
    __ERROR__ "BANK SWITCH CODE BIGGER THAN 256 BYTES, SET LONG_MACRO TO 1"
  ENDIF

ENDIF  ; close block IF ?B_MODE = 4 *******************************************

                RSEG    ?BANK?SELECT

;************************  SWITCHBANK FUNCTION  *******************************
;                                                                             *
; SWITCHBANK allows use of bank-switching for C programs                      *
;                                                                             *
; prototype:   extern switchbank (unsigned char bank_number);                 *
;                                                                             *
;******************************************************************************
                PUBLIC  _SWITCHBANK, ?B_SWITCHBANK_A

_SWITCHBANK:    MOV     A,R7



IF  ?B_MODE = 4 ;**************************************************************

IF (?B_VAR_BANKING = 1)
                SJMP    ?B_SWITCHBANK_A
SELECT_BANK_R3:
                MOV     A,R3
                DEC     A
                ANL     A,#3FH
ENDIF

?B_SWITCHBANK_A:
                MOV	DPTR,#switch_tab
                MOVC    A,@A+DPTR
?B_RESTORE_BANK:                       ; entry for RTX-51/XBANKING bank restore
                MOV     DPTR,#?BANK?SWITCH
                JMP     @A+DPTR

S_ENTRY         MACRO   N
                DB      LOW ?B_SWITCH&N
                ENDM

switch_tab:     
CNT             SET     0

                REPT    ?B_NBANKS
                S_ENTRY %CNT
CNT             SET     CNT+1
                ENDM
ENDIF  ; close block IF ?B_MODE = 4 *******************************************



                END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -