📄 push_box.lst
字号:
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 + -