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

📄 multitask.lst

📁 单片机学习的最好例子, 1.51多任务切换 2.红外解码 3.数码管扫描显示 4.1602LCD的现实,以及文字动画效果 5.系统构架,资源整合,菜单应用,按键板,其它更新中
💻 LST
📖 第 1 页 / 共 3 页
字号:
A51 MACRO ASSEMBLER  MULTITASK                                                            04/04/2009 22:01:21 PAGE     1


MACRO ASSEMBLER A51 V1.12
NO OBJECT MODULE REQUESTED           
ASSEMBLER INVOKED BY: C:\PROGRA~1\MANLEY\MEDWINV3\A51.EXE MULTITASK.INC DB

LOC  OBJ            LINE     SOURCE

                       1     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                       2     ;;Multi Tast part
                       3     ;;  Task structure(use xdata=external memory):  
                       4     ;;  Register size   ( 16Byte ): PCL,PCH,SP,PSW,ACC,B,DPL,DPH,RO,R1,R2,R3,R4,R5,R6,R7
                       5     ;;  Task stack size (  8Byte ): stack0~stack n
                       6     ;;
                       7     ;;  Task All buffer size      : (Register size + Task stack size) * DEFINE_TASK_MAX
                       8     ;;  Note: If function end by "_" means use in internal only
                       9     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      10     ;Initial task all xdata
0000                  11     TASK_INITIAL:
0000 900147           12         MOV      DPTR,#TASK_FINISHED_    
                      13         MOV      DEFINE_TASK_RET_ADDRESS_H,DPH
*** ERROR #7 IN 13 (MULTITASK.INC, LINE 13): UNDEFINED SYMBOL
                      14         MOV      DEFINE_TASK_RET_ADDRESS_L,DPL
*** ERROR #7 IN 14 (MULTITASK.INC, LINE 14): UNDEFINED SYMBOL
                      15         
0009 E4               16         CLR      A
                      17         MOV      VAR_TASK_CURRENT_ID,A
*** ERROR #7 IN 17 (MULTITASK.INC, LINE 17): UNDEFINED SYMBOL
                      18                  
                      19         MOV      DPTR,#DEFINE_TASK_XDATA_ADDRESS
*** ERROR #7 IN 19 (MULTITASK.INC, LINE 19): UNDEFINED SYMBOL
                      20         MOV      R0,#DEFINE_TASK_XDATA_SIZE
*** ERROR #7 IN 20 (MULTITASK.INC, LINE 20): UNDEFINED SYMBOL
                      21     
0011                  22         TASK_INITIAL_DATA_LOOP:
0011 F0               23         MOVX     @DPTR,A
0012 A3               24         INC      DPTR
0013 D8FC             25         DJNZ     R0,TASK_INITIAL_DATA_LOOP
0015 22               26     RET
                      27     
                      28     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      29     ;Create a task and initial xdata,(i.e. PC=function start address,SP=Initial Define)
                      30     ;Note: The task stack is very small, the sub function don't use too many nesting ( not out of 3 max )
                      31     ;Because call sub function need PUSH PC to stack and return need POP PC to stack but is automatic by MCU
                      32     ;Input  : R0 - Task ID, DPTR - Task function entry address
                      33     ;Output : xdata
0016                  34     TASK_CREATE_:
                      35         ;RET if R0 > DEFINE_TASK_MAX
0016 D3               36         SETB     C
0017 E8               37         MOV      A,R0
0018 04               38         INC      A
                      39         SUBB     A,#DEFINE_TASK_MAX
*** ERROR #7 IN 39 (MULTITASK.INC, LINE 39): UNDEFINED SYMBOL
                      40     
001B 4003             41         JC       TASK_CREATE_START
001D 02004C           42         LJMP     TASK_CREATE_START_RETURN
                      43     
0020                  44         TASK_CREATE_START:
                      45     
                      46         ;offset
0020 E8               47         MOV      A,R0
                      48         MOV      B,#DEFINE_TASK_XDATA_BLOCK
*** ERROR #7 IN 48 (MULTITASK.INC, LINE 48): UNDEFINED SYMBOL
0024 A4               49         MUL      AB
                      50     
0025 F8               51         MOV      R0,A    
A51 MACRO ASSEMBLER  MULTITASK                                                            04/04/2009 22:01:21 PAGE     2

0026 A982             52         MOV      R1,DPL  ;Task function address low 8bit
0028 AA83             53         MOV      R2,DPH  ;Task function address high 8bit
                      54     
                      55         MOV      DPTR,#DEFINE_TASK_XDATA_ADDRESS
*** ERROR #7 IN 55 (MULTITASK.INC, LINE 55): UNDEFINED SYMBOL
                      56     
                      57         ;+offset
002D C3               58         CLR      C
                      59     
002E E582             60         MOV      A,DPL
0030 38               61         ADDC     A,R0
0031 F582             62         MOV      DPL,A
                      63     
0033 E583             64         MOV      A,DPH
0035 3400             65         ADDC     A,#00H
0037 F583             66         MOV      DPH,A
                      67     
                      68         ;PCL
0039 E9               69         MOV      A,R1
003A F0               70         MOVX     @DPTR,A
                      71     
                      72         ;PCH
003B A3               73         INC      DPTR
003C EA               74         MOV      A,R2
003D F0               75         MOVX     @DPTR,A
                      76     
                      77         ;SP
003E A3               78         INC      DPTR
                      79         MOV      A,#DEFINE_SP_START_ADDRESS
*** ERROR #7 IN 79 (MULTITASK.INC, LINE 79): UNDEFINED SYMBOL
0041 F0               80         MOVX     @DPTR,A
                      81     
                      82         MOV      R0,#DEFINE_TASK_XDATA_BLOCK
*** ERROR #7 IN 82 (MULTITASK.INC, LINE 82): UNDEFINED SYMBOL
0044 18               83         DEC      R0
0045 18               84         DEC      R0
0046 18               85         DEC      R0 
                      86         
0047 E4               87         CLR      A
0048                  88         TASK_CREATE_CLEAR__DATA_LOOP:
0048 A3               89         INC      DPTR
0049 F0               90         MOVX     @DPTR,A
                      91         ;Next
004A D8FC             92         DJNZ     R0,TASK_CREATE_CLEAR__DATA_LOOP
                      93         
004C                  94         TASK_CREATE_START_RETURN:        
004C 22               95     RET
                      96     
                      97     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                      98     ;Suspend a task 
004D                  99     TASK_SUSPEND:
                     100     ;reserve
004D 22              101     RET
                     102     
                     103     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                     104     ;Resume a task 
004E                 105     TASK_RESUME:
                     106     ;reserve
004E 22              107     RET
                     108     
                     109     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                     110     ;Task switch
004F                 111     TASK_SWITCH:
                     112         ;Disable Timer0 interrupt
                     113         ;Note: In Interrupt period don't changed Timer counter If close Timer0 
                     114         ;else Timer counter still be changed but the programs code run time is not same
A51 MACRO ASSEMBLER  MULTITASK                                                            04/04/2009 22:01:21 PAGE     3

004F C28C            115         CLR      TR0
0051 C2A9            116         CLR      ET0
                     117     
                     118         ;Save current task data
                     119         ;Note: PUSH,POP,CALL,RET,RETI instruction effect SP pointer
                     120     
                     121         ;PC counter
                     122         ;Note: here must POP PC counter
                     123         ;because call sub function the SP be changed so PC counter difficult Access 
                     124         POP      VAR_TASK_BUFFER_PCH
*** ERROR #7 IN 124 (MULTITASK.INC, LINE 124): UNDEFINED SYMBOL
*** ERROR #18 IN 124 (MULTITASK.INC, LINE 124): DATA-ADDRESS EXPECTED
                     125         POP      VAR_TASK_BUFFER_PCL
*** ERROR #7 IN 125 (MULTITASK.INC, LINE 125): UNDEFINED SYMBOL
*** ERROR #18 IN 125 (MULTITASK.INC, LINE 125): DATA-ADDRESS EXPECTED
                     126     
                     127         ;SP
                     128         MOV      VAR_TASK_BUFFER_SP, SP
*** ERROR #7 IN 128 (MULTITASK.INC, LINE 128): UNDEFINED SYMBOL
                     129     
                     130         ;PSW,A,B
                     131         MOV      VAR_TASK_BUFFER_PSW, PSW
*** ERROR #7 IN 131 (MULTITASK.INC, LINE 131): UNDEFINED SYMBOL
                     132         MOV      VAR_TASK_BUFFER_ACC, ACC
*** ERROR #7 IN 132 (MULTITASK.INC, LINE 132): UNDEFINED SYMBOL
                     133         MOV      VAR_TASK_BUFFER_B,   B
*** ERROR #7 IN 133 (MULTITASK.INC, LINE 133): UNDEFINED SYMBOL
                     134         
                     135         ;Data pointer
                     136         MOV      VAR_TASK_BUFFER_DPL, DPL
*** ERROR #7 IN 136 (MULTITASK.INC, LINE 136): UNDEFINED SYMBOL
                     137         MOV      VAR_TASK_BUFFER_DPH, DPH
*** ERROR #7 IN 137 (MULTITASK.INC, LINE 137): UNDEFINED SYMBOL
                     138     
                     139         ;R0~R7
                     140         MOV      VAR_TASK_BUFFER_R0, R0
*** ERROR #7 IN 140 (MULTITASK.INC, LINE 140): UNDEFINED SYMBOL
                     141         MOV      VAR_TASK_BUFFER_R1, R1
*** ERROR #7 IN 141 (MULTITASK.INC, LINE 141): UNDEFINED SYMBOL
                     142         MOV      VAR_TASK_BUFFER_R2, R2
*** ERROR #7 IN 142 (MULTITASK.INC, LINE 142): UNDEFINED SYMBOL
                     143         MOV      VAR_TASK_BUFFER_R3, R3
*** ERROR #7 IN 143 (MULTITASK.INC, LINE 143): UNDEFINED SYMBOL
                     144         MOV      VAR_TASK_BUFFER_R4, R4
*** ERROR #7 IN 144 (MULTITASK.INC, LINE 144): UNDEFINED SYMBOL
                     145         MOV      VAR_TASK_BUFFER_R5, R5
*** ERROR #7 IN 145 (MULTITASK.INC, LINE 145): UNDEFINED SYMBOL
                     146         MOV      VAR_TASK_BUFFER_R6, R6
*** ERROR #7 IN 146 (MULTITASK.INC, LINE 146): UNDEFINED SYMBOL
                     147         MOV      VAR_TASK_BUFFER_R7, R7
*** ERROR #7 IN 147 (MULTITASK.INC, LINE 147): UNDEFINED SYMBOL
                     148     
                     149         ;Stack
                     150         MOV      R0,#DEFINE_SP_START_ADDRESS  ;Soruce address
*** ERROR #7 IN 150 (MULTITASK.INC, LINE 150): UNDEFINED SYMBOL
                     151         MOV      R1,#VAR_TASK_BUFFER_STACK0   ;Destination
*** ERROR #7 IN 151 (MULTITASK.INC, LINE 151): UNDEFINED SYMBOL
                     152     
007D 08              153         INC      R0  ;SP=start+1
                     154         MOV      R2,#DEFINE_TASK_STACK_SIZE
*** ERROR #7 IN 154 (MULTITASK.INC, LINE 154): UNDEFINED SYMBOL
                     155     
0080                 156         TIMER_INTERRUPT_0_FOR_MULTI_TASK_COPY_STACK_LOOP_0:
0080 E6              157         MOV      A,@R0
0081 F7              158         MOV      @R1,A
                     159     
A51 MACRO ASSEMBLER  MULTITASK                                                            04/04/2009 22:01:21 PAGE     4

0082 08              160         INC      R0
0083 09              161         INC      R1
                     162     
                     163         ;Next
0084 DAFA            164         DJNZ     R2,TIMER_INTERRUPT_0_FOR_MULTI_TASK_COPY_STACK_LOOP_0
                     165     
                     166         ;Save/Resume data from external memory
0086 0200C3          167         LJMP     TASK_SWITCH_BUFFER_ 
0089                 168         TIMER_INTERRUPT_0_FOR_MULTI_TASK__TASK_SWITCH_BUFFER_RETURN:
                     169         
                     170         ;Switch to next task
                     171         ;The order is inverse by save
                     172     
                     173         ;Stack
                     174         MOV      R0,#VAR_TASK_BUFFER_STACK0   ;Soruce address
*** ERROR #7 IN 174 (MULTITASK.INC, LINE 174): UNDEFINED SYMBOL
                     175         MOV      R1,#DEFINE_SP_START_ADDRESS  ;Destination
*** ERROR #7 IN 175 (MULTITASK.INC, LINE 175): UNDEFINED SYMBOL
                     176     
008D 09              177         INC      R1  ;SP=start+1
                     178         MOV      R2,#DEFINE_TASK_STACK_SIZE
*** ERROR #7 IN 178 (MULTITASK.INC, LINE 178): UNDEFINED SYMBOL

⌨️ 快捷键说明

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