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

📄 main.lst

📁 单片机学习的最好例子, 1.51多任务切换 2.红外解码 3.数码管扫描显示 4.1602LCD的现实,以及文字动画效果 5.系统构架,资源整合,菜单应用,按键板,其它更新中
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -