📄 main.lst
字号:
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 1
MACRO ASSEMBLER A51 V8.00d
OBJECT MODULE PLACED IN .\Output\Bin\Main.obj
ASSEMBLER INVOKED BY: C:\Program Files\Keil\C51\BIN\A51.EXE ..\..\Code\Main\Main.asm SET(LARGE) DEBUG PRINT(.\Output\Lis
ting\Main.lst) OBJECT(.\Output\Bin\Main.obj) EP
LOC OBJ LINE SOURCE
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
2 ;Study Kit By lxj.com QQ:67016879
;
3 ;March/2009
;
4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
6 ;Head
0000 7 ORG 0x0000
0000 020559 8 LJMP MAIN
000B 9 ORG 0x000B
000B 020057 10 LJMP TIMER_INTERRUPT_0_FOR_MULTI_TASK
0030 11 ORG 0x0030
12
13 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
14 ;Include
15 ;Common
16 ;$include (..\Common\Common.inc)
+1 17 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
+1 18 ;;System common part
+1 19 ;;
+1 20 ;; Memory assign in the direct RAM 128Byte(0x00~0x7F):
+1 21 ;;
+1 22 ;; 0x00~0x07( 8Byte ): Local varible address(RO,R1,R2,R3,R4,R5,R6,R7)
+1 23 ;; 0x08~0x1F( 24Byte ): Global varible address
+1 24 ; 0x20~0x7F( 114Byte ): Task Buffer address(RAM)
+1 25 ;;
+1 26 ;; Memory assign From external(xdata) memory:
+1 27 ;; never used
+1 28 ;;
+1 29 ;;
+1 30 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
+1 31 ;Defines
+1 32 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 33 ;MCU define
008E +1 34 DEFINE_MCU_AUXR EQU 0x8E ;8052 Register
+1 35
+1 36 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 37 ;Crystal and Timer define
C000 +1 38 DEFINE_CRYSTAL_FREQUENCY EQU 11059200 ;Hz
+1 39
0002 +1 40 DEFINE_TIMER_MODE EQU 0x02
+1 41
+1 42 ;How to compute the timer counter begin value
+1 43 ;Example: 100us (255-(100us/(1s/11.0592MHz*12)) = 0xA3(about)
00A3 +1 44 DEFINE_TIMER0_COUNTER_BEGIN_VALUE EQU 0xA3;0xA3
+1 45
00E8 +1 46 DEFINE_SLEEP_1S_BYTE0 EQU 0xE8
0003 +1 47 DEFINE_SLEEP_1S_BYTE1 EQU 0x03
+1 48
+1 49 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 2
+1 50 ;Stack define
+1 51 ;SP=start+1
001F +1 52 DEFINE_SP_START_ADDRESS EQU 0x7F - DEFINE_TASK_BUFFER_SIZE
0077 +1 53 DEFINE_SP_TEMP_START_ADDRESS EQU 0x7F - 0x08
+1 54
+1 55 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 56 ;Task define
0004 +1 57 DEFINE_TASK_MAX EQU 0x04
000F +1 58 DEFINE_TASK_REGISTER_SIZE EQU 0x0F
0008 +1 59 DEFINE_TASK_STACK_SIZE EQU 0x08
0001 +1 60 DEFINE_TASK_STATCK_POINTER_SIZE EQU 0x01
0018 +1 61 DEFINE_TASK_BLOCK EQU DEFINE_TASK_REGISTER_SIZE + DEFINE_TASK_STACK_SIZE +
DEFINE_TASK_STATCK_POINTER_SIZE
0060 +1 62 DEFINE_TASK_BUFFER_SIZE EQU DEFINE_TASK_BLOCK * DEFINE_TASK_MAX
+1 63
+1 64 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 65 ;IR define
0000 +1 66 DEFINE_IR_CUSTOMER_CODE EQU 0x00
00A2 +1 67 DEFINE_IR_IO_PORT EQU P2.2
+1 68
+1 69 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 70 ;Keypad define
00B0 +1 71 DEFINE_KEYPAD_IO_PORT EQU P3
+1 72
+1 73 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 74 ;Tube define
0080 +1 75 DEFINE_TUBE_IO_PORT_DATA EQU P0
00A0 +1 76 DEFINE_TUBE_IO_PORT_CONTROL EQU P2
00A7 +1 77 DEFINE_TUBE_IO_PORT_CONTROL_1 EQU P2.7
00A6 +1 78 DEFINE_TUBE_IO_PORT_CONTROL_2 EQU P2.6
00A5 +1 79 DEFINE_TUBE_IO_PORT_CONTROL_3 EQU P2.5
00A4 +1 80 DEFINE_TUBE_IO_PORT_CONTROL_4 EQU P2.4
+1 81
0001 +1 82 DEFINE_TUBE_SLEEP_25MS_BYTE0 EQU 0x01
0000 +1 83 DEFINE_TUBE_SLEEP_25MS_BYTE1 EQU 0x00
+1 84
0000 +1 85 DEFINE_TUBE_SHOW_MODE_HEX EQU 0x00
0001 +1 86 DEFINE_TUBE_SHOW_MODE_DECIMAL EQU DEFINE_TUBE_SHOW_MODE_HEX + 1
0002 +1 87 DEFINE_TUBE_SHOW_MODE_CLOCK EQU DEFINE_TUBE_SHOW_MODE_DECIMAL + 1
+1 88
+1 89 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 90 ;TONE define
00A3 +1 91 DEFINE_TONE_IO_PORT EQU P2.3
+1 92
+1 93 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 94 ;LED define
0090 +1 95 DEFINE_LED_IO_PORT EQU P1
+1 96
+1 97 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 98 ;I2C define
00A1 +1 99 DEFINE_I2C_IO_SCL EQU P2.1
00A0 +1 100 DEFINE_I2C_IO_SDA EQU P2.0
+1 101
+1 102 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 103 ;LCD define
0090 +1 104 DEFINE_LCD_IO EQU P1
+1 105
0090 +1 106 DEFINE_LCD_IO_RS EQU P1.0
0091 +1 107 DEFINE_LCD_IO_RW EQU P1.1
0092 +1 108 DEFINE_LCD_IO_EN EQU P1.2
0093 +1 109 DEFINE_LCD_IO_BL EQU P1.3
+1 110
0094 +1 111 DEFINE_LCD_IO_DATA4 EQU P1.4
0095 +1 112 DEFINE_LCD_IO_DATA5 EQU P1.5
0096 +1 113 DEFINE_LCD_IO_DATA6 EQU P1.6
0097 +1 114 DEFINE_LCD_IO_DATA7 EQU P1.7
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 3
+1 115
+1 116 ;Define End
+1 117 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
+1 118
+1 119 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
+1 120 ;Variable
+1 121 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 122 ;Task variable
+1 123 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 124 ;
+1 125 ;Task RET address
+1 126 ;Warning: don't alter the value in this address
+1 127 ;If task function no loop it will RET this address value to PC
+1 128 ;VAR_TASK_RET_ADDRESS_H EQU DEFINE_SP_START_ADDRESS
+1 129 ;VAR_TASK_RET_ADDRESS_L EQU DEFINE_TASK_RET_ADDRESS_H - 1
+1 130
0008 +1 131 VAR_TASK_CURRENT_ID EQU 0x08
+1 132
+1 133 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 134 ;Timer variable
0009 +1 135 VAR_TIMER_TICK_NOW_BYTE0 EQU VAR_TASK_CURRENT_ID + 1
000A +1 136 VAR_TIMER_TICK_NOW_BYTE1 EQU VAR_TIMER_TICK_NOW_BYTE0 + 1
+1 137
+1 138 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 139 ;Clock variable
000B +1 140 VAR_CLOCK_SECOND EQU VAR_TIMER_TICK_NOW_BYTE1 + 1
000C +1 141 VAR_CLOCK_MINUTE EQU VAR_CLOCK_SECOND + 1
000D +1 142 VAR_CLOCK_HOUR EQU VAR_CLOCK_MINUTE + 1
+1 143
+1 144 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 145 ;Tube variable
000E +1 146 VAR_TUBE_SHOW_MODE EQU VAR_CLOCK_HOUR + 1
000F +1 147 VAR_TUBE_SHOW_BYTE0 EQU VAR_TUBE_SHOW_MODE + 1
0010 +1 148 VAR_TUBE_SHOW_BYTE1 EQU VAR_TUBE_SHOW_BYTE0 + 1
+1 149
+1 150 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 151 ;IR variable
0011 +1 152 VAR_IR_BUFFER_START_ADDRESS EQU VAR_TUBE_SHOW_BYTE1 + 1
0011 +1 153 VAR_IR_CUSTOMER_CODE EQU VAR_IR_BUFFER_START_ADDRESS
0012 +1 154 VAR_IR_CUSTOMER_CODE_INVERSE EQU VAR_IR_CUSTOMER_CODE + 1
0013 +1 155 VAR_IR_KEY_CODE EQU VAR_IR_CUSTOMER_CODE_INVERSE + 1
0014 +1 156 VAR_IR_KEY_CODE_INVERSE EQU VAR_IR_KEY_CODE + 1
+1 157
+1 158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 159 ;Tone variable
+1 160 ;VAR_TONE_MODE EQU VAR_TUBE_SHOW_BYTE1 + 1
+1 161
+1 162 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 163 ;LED variable
+1 164 ;VAR_LED_SHOW_MODE EQU VAR_TONE_MODE + 1
+1 165
+1 166 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 167 ;Keypad variable
+1 168 ;VAR_KEYPAD_KEY EQU VAR_LED_SHOW_MODE + 1
+1 169
+1 170 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 171 ;LCD variable
+1 172 ;VAR_LCD_MODE EQU VAR_IR_KEY_CODE_INVERSE + 1
+1 173 ;VAR_LCD_BUFFER EQU VAR_LCD_MODE + 1
+1 174
+1 175 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 176 ;COM variable
+1 177 ;VAR_COM_MODE EQU VAR_LCD_BUFFER + 21
+1 178 ;VAR_COM_BUFFER EQU VAR_COM_MODE + 1
A51 MACRO ASSEMBLER MAIN 04/19/2009 02:07:50 PAGE 4
+1 179
+1 180 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+1 181 ;E2PROM variable
+1 182 ;VAR_E2PROM_MODE EQU VAR_COM_BUFFER + 23
+1 183 ;VAR_E2PROM_BUFFER EQU VAR_COM_MODE + 1
+1 184
+1 185 ;Variable End
+1 186 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
187
188 ;$include (..\Common\Timer.inc)
+1 189 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
+1 190 ;System Timer part
+1 191 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
+1 192 ;Timer initialization
0030 +1 193 TIMER_INITIAL:
0030 750900 +1 194 MOV VAR_TIMER_TICK_NOW_BYTE0,#0x00
0033 750A00 +1 195 MOV VAR_TIMER_TICK_NOW_BYTE1,#0x00
0036 22 +1 196 RET
+1 197
+1 198 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;
+1 199 ;Note: Timer startup after all initiallization
0037 +1 200 TIMER_STARTUP:
+1 201 ;Timer mode
0037 758902 +1 202 MOV TMOD,#DEFINE_TIMER_MODE
+1 203
+1 204 ;Timer counter begin value
003A 758CA3 +1 205 MOV TH0,#DEFINE_TIMER0_COUNTER_BEGIN_VALUE
003D 858C8A +1 206 MOV TL0,TH0
+1 207
+1 208 ;Enable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -