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

📄 push_box.lst

📁 使用PROTEUS仿真的推箱子游戏,全汇编格式,通过按钮操作,1602显示
💻 LST
📖 第 1 页 / 共 5 页
字号:
A51 MACRO ASSEMBLER  PUSH_BOX                                                             12/01/2007 13:29:27 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN PUSH_BOX.OBJ
ASSEMBLER INVOKED BY: C:\Program Files\Keil\C51\BIN\A51.EXE PUSH_BOX.a51 INCDIR(F:\51_Project\TEMP\include\) SET(SMALL)
                       DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;IC BODY: AT89S52
                       2     ;CRYSTAL: 12M Hz(1 Ft=1us)
                       3     ;
                       4     
                       5     ;===========================================================
                       6     ;          DECLARE VARIABLES INSIDE THIS SECTION
                       7     ;===========================================================
                       8             ;#include <_Define.a51>
                +1     9     ;===========================================================
                +1    10     ;I/O
  00B2          +1    11     RST             EQU P3.2
  00B3          +1    12     E               EQU P3.3
  00B4          +1    13     CS1             EQU P3.4
  00B5          +1    14     CS2             EQU P3.5
  00B6          +1    15     DI              EQU P3.6
  00B7          +1    16     RW              EQU P3.7 
  0090          +1    17     LCD_DATA_PORT   EQU P1
                +1    18     
                +1    19     ;==============================================
  00A0          +1    20     KEY_INPUT_PORT  EQU P2
  0030          +1    21     KEY_NEW_STATE   EQU ram_buf_addr+0
  0031          +1    22     KEY_OLD_STATE   EQU ram_buf_addr+1
  0032          +1    23     KEY_DEB_TIME    equ ram_buf_addr+2
  0033          +1    24     KEY_PIN_SETTING EQU ram_buf_addr+3
  0034          +1    25     KEY_VALUE       EQU ram_buf_addr+4
  0035          +1    26     KEY_VALUE_BUF   EQU ram_buf_addr+5
  000A          +1    27     deb_time        equ 10          ;
  0000          +1    28     trigger_type    equ 0           ;
  0006          +1    29     max_key_num     equ 6
                +1    30     
  0001          +1    31     key_input_pin0  equ 1           ;
  0001          +1    32     key_input_pin1  equ 1           ;
  0001          +1    33     key_input_pin2  equ 1           ;
  0001          +1    34     key_input_pin3  equ 1           ;
  0001          +1    35     key_input_pin4  equ 1           ;
  0001          +1    36     key_input_pin5  equ 1           ;
  0000          +1    37     key_input_pin6  equ 0           ;
  0000          +1    38     key_input_pin7  equ 0           ;
  003F          +1    39     key_input_pins  equ 00111111B   ;
                +1    40     ;===========================================================
                +1    41     ;CON.
  0001          +1    42     bit0            equ 01H
  0002          +1    43     bit1            equ 02H
  0004          +1    44     bit2            equ 04H
  0008          +1    45     bit3            equ 08H
  0010          +1    46     bit4            equ 10H
  0020          +1    47     bit5            equ 20H
  0040          +1    48     bit6            equ 40H
  0080          +1    49     bit7            equ 80H
                +1    50     
  0030          +1    51     ram_buf_addr    equ 030H        ;
  0000          +1    52     bit_address     equ 000H
  0040          +1    53     data_num        equ 040H        ;
  0080          +1    54     lcd_ram_addr    equ 080H        ;
  00C0          +1    55     start_line      equ 0C0H
  00B8          +1    56     base_x          equ 0B8H
  0040          +1    57     base_y          equ 040H
A51 MACRO ASSEMBLER  PUSH_BOX                                                             12/01/2007 13:29:27 PAGE     2

  00C7          +1    58     stack_ram       equ 0C7H        ;
                +1    59     
  0000          +1    60     empty_code      equ 000H
  0001          +1    61     wall_code       equ 001H
  0002          +1    62     place_code      equ 002H
  0003          +1    63     box_code        equ 003H
  0004          +1    64     man_code        equ 004H
                +1    65     ;===========================================================
                +1    66     ;VAR.
  0036          +1    67     STAGE_INDEX     EQU ram_buf_addr+6
  0037          +1    68     MAN_POSITION    EQU ram_buf_addr+7
  0038          +1    69     PAGE_INDEX      EQU ram_buf_addr+8
  0039          +1    70     COLUMN_INDEX    EQU ram_buf_addr+9
  003A          +1    71     X_POINTER       EQU ram_buf_addr+10
  003B          +1    72     Y_POINTER       EQU ram_buf_addr+11
  003C          +1    73     LCD_DATA        EQU ram_buf_addr+12
                +1    74     
  003D          +1    75     DELAY_CT1       EQU ram_buf_addr+13     ;
  003E          +1    76     DELAY_CT2       EQU ram_buf_addr+14     ;
                +1    77     
  0049          +1    78     MAIN_TEMP       EQU ram_buf_addr+25
                +1    79     ;===========================================================
                +1    80     ;VAR.BIT
  0000          +1    81     KEY_FLAG        BIT bit_address+0
  0001          +1    82     STAGE_UPGRADE   BIT bit_address+1
  0002          +1    83     DISPLAY_FLAG    BIT bit_address+2
  0003          +1    84     CHECK_UPGRADE   BIT bit_address+3
  0004          +1    85     ENTER_KEY_FLAG  BIT bit_address+4
  0005          +1    86     START_GAME_FLAG BIT bit_address+5       
                +1    87     ;===========================================================
                      88     
                      89     ;===========================================================
                      90     ;       ASSIGN INTERRUPT VECTORS INSIDE THIS SECTION
                      91     ;===========================================================
0000                  92             ORG  000H
0000 020935           93             LJMP MAIN_START
0003                  94             ORG  003H
0003 020059           95             LJMP INT0_ISR
0006 32               96             RETI
000B                  97             ORG  00BH
000B 020030           98             LJMP TIMER0_IR
0013                  99             ORG  013H
0013 020066          100             LJMP INT1_ISR
001B                 101             ORG  01BH
001B 02003D          102             LJMP TIMER1_IR
                     103     
                     104     ;==================== USER'S CODE START HERE ================
0030                 105             ORG  030H
                     106             ;#include <_interrupt_service.a51>
                +1   107     ;===========================================================
                +1   108     ;                 interrupt service subroutines
                +1   109     ;===========================================================
0030            +1   110     TIMER0_IR:      
0030 C0D0       +1   111             PUSH    PSW                     ;save PSW
0032 C0E0       +1   112             PUSH    ACC                     ;save ACC
0034 C2AF       +1   113             CLR     EA                      ;disable all interrupt
                +1   114     
                +1   115     
                +1   116     
0036            +1   117     TIMER0_IR_EXIT: 
0036 D0E0       +1   118             POP     ACC                     ;restore ACC
0038 D0D0       +1   119             POP     PSW                     ;restore PSW
003A D2AF       +1   120             SETB    EA                      ;enable all interrupt
003C 32         +1   121             RETI
                +1   122     ;============================================================
003D            +1   123     TIMER1_IR:      
A51 MACRO ASSEMBLER  PUSH_BOX                                                             12/01/2007 13:29:27 PAGE     3

003D C0D0       +1   124             PUSH     PSW                    ;save PSW
003F C0E0       +1   125             PUSH     ACC                    ;save ACC
0041 C2AF       +1   126             CLR      EA                     ;disable all interrupt
                +1   127     
0043 120088     +1   128             LCALL    SCAN_KEY
                +1   129             
0046            +1   130     TIMER1_IR_EXIT: 
0046 D0E0       +1   131             POP      ACC                    ;restore ACC
0048 D0D0       +1   132             POP      PSW                    ;restore PSW
004A D2AF       +1   133             SETB     EA                     ;enable all interrupt
004C 758DF0     +1   134             MOV     TH1,#0F0H
004F 758B60     +1   135             MOV     TL1,#060H
0052 D2AF       +1   136             SETB    EA
0054 D2AB       +1   137             SETB    ET1
0056 D28E       +1   138             SETB    TR1
0058 32         +1   139             RETI
                +1   140     ;============================================================
0059            +1   141     INT0_ISR:
0059 C0D0       +1   142             PUSH     PSW                    ;save PSW
005B C0E0       +1   143             PUSH     ACC                    ;save ACC
005D C2AF       +1   144             CLR      EA                     ;disable all interrupt  
                +1   145     
                +1   146     
                +1   147     
005F            +1   148     INT0_ISR_RTN:
005F D0E0       +1   149             POP      ACC                    ;restore ACC
0061 D0D0       +1   150             POP      PSW                    ;restore PSW
0063 D2AF       +1   151             SETB     EA                     ;enable all interrupt
0065 32         +1   152             RETI
                +1   153     ;============================================================
0066            +1   154     INT1_ISR:
0066 C0D0       +1   155             PUSH     PSW                    ;save PSW
0068 C0E0       +1   156             PUSH     ACC                    ;save ACC
006A C2AF       +1   157             CLR      EA                     ;disable all interrupt  
                +1   158     
                +1   159     
                +1   160     
006C            +1   161     INT1_ISR_RTN:
006C D0E0       +1   162             POP      ACC                    ;restore ACC
006E D0D0       +1   163             POP      PSW                    ;restore PSW
0070 D2AF       +1   164             SETB     EA                     ;enable all interrupt
0072 32         +1   165             RETI
                +1   166     ;============================================================
                     167     
                     168             ;#include <_scan_key_direct.a51>
                +1   169     
                +1   170             
                +1   171     ;==============================================
0073            +1   172     SCAN_KEY_INITIAL:
0073 75313F     +1   173             MOV     KEY_OLD_STATE,#key_input_pins
0076 75333F     +1   174             MOV     KEY_PIN_SETTING,#key_input_pins
0079 753400     +1   175             MOV     KEY_VALUE,#00H
007C 753500     +1   176             MOV     KEY_VALUE_BUF,#00H
007F 753200     +1   177             MOV     KEY_DEB_TIME,#00H
0082 43A0FF     +1   178             ORL     KEY_INPUT_PORT,#0FFH
0085 C200       +1   179             CLR     KEY_FLAG        
0087 22         +1   180             RET
                +1   181     ;===============================================
0088            +1   182     SCAN_KEY:
0088 85A030     +1   183             MOV     KEY_NEW_STATE,KEY_INPUT_PORT    ;
008B 53303F     +1   184             ANL     KEY_NEW_STATE,#key_input_pins   ;
008E E531       +1   185             MOV     A,KEY_OLD_STATE                 ;
0090 6530       +1   186             XRL     A,KEY_NEW_STATE                 ;
0092 7005       +1   187             JNZ     KEY_STATUS_CHANGE               ;
0094 753200     +1   188             MOV     KEY_DEB_TIME,#00H               ;
0097 803B       +1   189             JMP     SCAN_KEY_RTN    
A51 MACRO ASSEMBLER  PUSH_BOX                                                             12/01/2007 13:29:27 PAGE     4

                +1   190                                     
0099            +1   191     KEY_STATUS_CHANGE:
0099 0532       +1   192             INC     KEY_DEB_TIME                    ;
009B E532       +1   193             MOV     A,KEY_DEB_TIME                  ;
009D B40A34     +1   194             CJNE    A,#deb_time,SCAN_KEY_RTN        ;
00A0 753200     +1   195             MOV     KEY_DEB_TIME,#00H               ;
                +1   196                     
00A3 E531       +1   197             MOV     A,KEY_OLD_STATE                 ;
00A5 6530       +1   198             XRL     A,KEY_NEW_STATE                 ;
00A7 F530       +1   199             MOV     KEY_NEW_STATE,A                 ;
00A9 75333F     +1   200             MOV     KEY_PIN_SETTING,#key_input_pins ;
00AC 7FFF       +1   201             MOV     R7,#0FFH                        ;
00AE            +1   202     GET_COL_VALUE:
00AE E533       +1   203             MOV     A,KEY_PIN_SETTING               ;
00B0 C3         +1   204             CLR     C                               ;
00B1 13         +1   205             RRC     A                               ;
00B2 F533       +1   206             MOV     KEY_PIN_SETTING,A               ;
00B4 5001       +1   207             JNC     GET_CHANGE_PIN
00B6 0F         +1   208             INC     R7                              ;
00B7            +1   209     GET_CHANGE_PIN:
00B7 E530       +1   210             MOV     A,KEY_NEW_STATE                 ;
00B9 C3         +1   211             CLR     C                               ;
00BA 13         +1   212             RRC     A                               ;
00BB F530       +1   213             MOV     KEY_NEW_STATE,A                 ;
00BD 50EF       +1   214             JNC     GET_COL_VALUE                   ;
                +1   215                     
00BF EF         +1   216             MOV     A,R7                            ;
00C0 9000D5     +1   217             MOV     DPTR,#key_bit_table             ;
00C3 93         +1   218             MOVC    A,@A+DPTR                       ;
00C4 C0E0       +1   219             PUSH    ACC
00C6 6531       +1   220             XRL     A,KEY_OLD_STATE                 ;
00C8 F531       +1   221             MOV     KEY_OLD_STATE,A                 ;
00CA D0E0       +1   222             POP     ACC
                +1   223     
                +1   224     IF(trigger_type==0)                             ;

⌨️ 快捷键说明

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