📄 task_switch.ls1
字号:
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN task_switch.OBJ
ASSEMBLER INVOKED BY: f:\Keil\C51\BIN\A51.EXE task_switch.src PR(.\task_switch.ls1) EP DEBUG
LOC OBJ LINE SOURCE
1 ; .\task_switch.SRC generated from: task_switch.C
2 ; COMPILER INVOKED BY:
3 ; f:\Keil\C51\BIN\C51.EXE task_switch.C BROWSE DEBUG OBJECTEXTEND SRC(.\task_switch.
SRC)
4
5 $nomod51
6
7 NAME TASK_SWITCH
8
0080 9 P0 DATA 080H
0090 10 P1 DATA 090H
00A0 11 P2 DATA 0A0H
00B0 12 P3 DATA 0B0H
00D6 13 AC BIT 0D0H.6
00B4 14 T0 BIT 0B0H.4
00B5 15 T1 BIT 0B0H.5
00AF 16 EA BIT 0A8H.7
0090 17 T2 BIT 090H.0
00A8 18 IE DATA 0A8H
0080 19 P0_0 BIT 080H.0
0090 20 P1_0 BIT 090H.0
0081 21 P0_1 BIT 080H.1
00D1 22 FL BIT 0D0H.1
00A0 23 P2_0 BIT 0A0H.0
0091 24 P1_1 BIT 090H.1
0082 25 P0_2 BIT 080H.2
00B0 26 P3_0 BIT 0B0H.0
00A1 27 P2_1 BIT 0A0H.1
0092 28 P1_2 BIT 090H.2
0083 29 P0_3 BIT 080H.3
00B1 30 P3_1 BIT 0B0H.1
00A2 31 P2_2 BIT 0A0H.2
0093 32 P1_3 BIT 090H.3
0084 33 P0_4 BIT 080H.4
00B2 34 P3_2 BIT 0B0H.2
00A3 35 P2_3 BIT 0A0H.3
0094 36 P1_4 BIT 090H.4
0085 37 P0_5 BIT 080H.5
00CE 38 EXF2 BIT 0C8H.6
00B7 39 RD BIT 0B0H.7
00B3 40 P3_3 BIT 0B0H.3
00A4 41 P2_4 BIT 0A0H.4
0095 42 P1_5 BIT 090H.5
0086 43 P0_6 BIT 080H.6
00B4 44 P3_4 BIT 0B0H.4
00A5 45 P2_5 BIT 0A0H.5
0096 46 P1_6 BIT 090H.6
0087 47 P0_7 BIT 080H.7
00B5 48 P3_5 BIT 0B0H.5
00AC 49 ES BIT 0A8H.4
00A6 50 P2_6 BIT 0A0H.6
0097 51 P1_7 BIT 090H.7
00B6 52 P3_6 BIT 0B0H.6
00A7 53 P2_7 BIT 0A0H.7
00B8 54 IP DATA 0B8H
00B7 55 P3_7 BIT 0B0H.7
0098 56 RI BIT 098H.0
00D7 57 CY BIT 0D0H.7
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 2
00B2 58 INT0 BIT 0B0H.2
00B3 59 INT1 BIT 0B0H.3
0099 60 TI BIT 098H.1
00CB 61 RCAP2H DATA 0CBH
00BC 62 PS BIT 0B8H.4
0081 63 SP DATA 081H
0091 64 T2EX BIT 090H.1
00D2 65 OV BIT 0D0H.2
00CA 66 RCAP2L DATA 0CAH
00C9 67 C_T2 BIT 0C8H.1
00B6 68 WR BIT 0B0H.6
00CD 69 RCLK BIT 0C8H.5
00CC 70 TCLK BIT 0C8H.4
0099 71 SBUF DATA 099H
0087 72 PCON DATA 087H
0098 73 SCON DATA 098H
0089 74 TMOD DATA 089H
0088 75 TCON DATA 088H
0089 76 IE0 BIT 088H.1
008B 77 IE1 BIT 088H.3
00F0 78 B DATA 0F0H
00C8 79 CP_RL2 BIT 0C8H.0
00E0 80 ACC DATA 0E0H
00A9 81 ET0 BIT 0A8H.1
00AB 82 ET1 BIT 0A8H.3
008D 83 TF0 BIT 088H.5
00AD 84 ET2 BIT 0A8H.5
008F 85 TF1 BIT 088H.7
00CF 86 TF2 BIT 0C8H.7
009A 87 RB8 BIT 098H.2
008C 88 TH0 DATA 08CH
00A8 89 EX0 BIT 0A8H.0
0088 90 IT0 BIT 088H.0
008D 91 TH1 DATA 08DH
00AA 92 EX1 BIT 0A8H.2
009B 93 TB8 BIT 098H.3
008A 94 IT1 BIT 088H.2
00CD 95 TH2 DATA 0CDH
00D0 96 P BIT 0D0H.0
009F 97 SM0 BIT 098H.7
008A 98 TL0 DATA 08AH
009E 99 SM1 BIT 098H.6
008B 100 TL1 DATA 08BH
009D 101 SM2 BIT 098H.5
00CC 102 TL2 DATA 0CCH
00B9 103 PT0 BIT 0B8H.1
00D3 104 RS0 BIT 0D0H.3
00BB 105 PT1 BIT 0B8H.3
00D4 106 RS1 BIT 0D0H.4
00BD 107 PT2 BIT 0B8H.5
008C 108 TR0 BIT 088H.4
008E 109 TR1 BIT 088H.6
00CA 110 TR2 BIT 0C8H.2
00B8 111 PX0 BIT 0B8H.0
00BA 112 PX1 BIT 0B8H.2
0083 113 DPH DATA 083H
0082 114 DPL DATA 082H
00CB 115 EXEN2 BIT 0C8H.3
009C 116 REN BIT 098H.4
00C9 117 T2MOD DATA 0C9H
00C8 118 T2CON DATA 0C8H
00B0 119 RXD BIT 0B0H.0
00B1 120 TXD BIT 0B0H.1
00D5 121 F0 BIT 0D0H.5
00D0 122 PSW DATA 0D0H
123 ?PR?OS_Task_Switch?TASK_SWITCH SEGMENT CODE
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 3
124 ?DT?TASK_SWITCH SEGMENT DATA
125 ?PR?Timer2ISR?TASK_SWITCH SEGMENT CODE
126 EXTRN DATA (OS_Task_List)
127 EXTRN DATA (OS_Run_Time)
128 EXTRN IDATA (OS_pcb)
129 EXTRN DATA (OS_Current_ID)
130 EXTRN DATA (OS_Running)
131 PUBLIC Timer2ISR
132 PUBLIC OS_Task_Switch
133
---- 134 RSEG ?DT?TASK_SWITCH
0000 135 i?040: DS 1
136
---- 137 RSEG ?DT?TASK_SWITCH
0001 138 temp?041: DS 1
139 ; /*******************************************************
140 ; *************基于51内核的圈圈操作系统*****************
141 ; 本程序只供学习使用,未经作者许可,不得用于其它任何用途
142 ;
143 ; Task_Switch.c file
144 ;
145 ; Created by Computer-lov
146 ; Date: 2005.10.27
147 ;
148 ; Edit date:2006.2.24
149 ;
150 ; Version V1.1
151 ; Copyright(C) Computer-lov 2005-2015
152 ; All rigths reserved
153 ;
154 ; ******************************************************/
155 ;
156 ; #include "AT89X52.h"
157 ; #include "task_switch.h"
158 ; #include "MAIN.H"
159 ; #include "OS_core.h"
160 ;
161 ; ///////////////////////////////////////////任务切换函数/////////////////////////////////
162 ; void OS_Task_Switch(void)
163
---- 164 RSEG ?PR?OS_Task_Switch?TASK_SWITCH
0000 165 OS_Task_Switch:
166 USING 0
167 ; SOURCE LINE # 24
168 ; {
169 ; SOURCE LINE # 25
170 ; static unsigned char i; //使用static申明局部变量,避免临时变量使用相同地址
171 ; static unsigned char temp;
172 ;
173 ; EA=0; //关中断
174 ; SOURCE LINE # 29
0000 C2AF 175 CLR EA
176 ; __asm PUSH ACC //保护当前任务寄存器
0002 C0E0 177 PUSH ACC
178 ; __asm PUSH B
0004 C0F0 179 PUSH B
180 ; __asm PUSH PSW
0006 C0D0 181 PUSH PSW
182 ; __asm PUSH DPL
0008 C082 183 PUSH DPL
184 ; __asm PUSH DPH
000A C083 185 PUSH DPH
186 ; __asm PUSH 0 //0-7为工作寄存器
000C C000 187 PUSH 0
188 ; __asm PUSH 1
000E C001 189 PUSH 1
A51 MACRO ASSEMBLER TASK_SWITCH 02/25/2006 14:24:58 PAGE 4
190 ; __asm PUSH 2
0010 C002 191 PUSH 2
192 ; __asm PUSH 3
0012 C003 193 PUSH 3
194 ; __asm PUSH 4
0014 C004 195 PUSH 4
196 ; __asm PUSH 5
0016 C005 197 PUSH 5
198 ; __asm PUSH 6
0018 C006 199 PUSH 6
200 ; __asm PUSH 7
001A C007 201 PUSH 7
202 ;
203 ; OS_pcb[OS_Current_ID].Task_SP=SP; //保存当前堆栈指针
204 ; SOURCE LINE # 44
001C AF00 F 205 MOV R7,OS_Current_ID
001E EF 206 MOV A,R7
001F 75F005 207 MOV B,#05H
0022 A4 208 MUL AB
0023 2400 F 209 ADD A,#LOW (OS_pcb)
0025 F8 210 MOV R0,A
0026 A681 211 MOV @R0,SP
212 ;
213 ; OS_Current_ID=0; //设置为空闲任务的ID号,优先级最低
214 ; SOURCE LINE # 46
0028 E4 215 CLR A
0029 F500 F 216 MOV OS_Current_ID,A
217 ;
218 ; temp=0x01;
219 ; SOURCE LINE # 48
002B 750001 F 220 MOV temp?041,#01H
221 ; for(i=0;i<MAX_TASK;i++) //查找优先级最高的任务
222 ; SOURCE LINE # 49
002E F500 F 223 MOV i?040,A
0030 224 ?C0001:
225 ; {
226 ; SOURCE LINE # 50
227 ; if(OS_Task_List&temp) //判断是否有该任务
228 ; SOURCE LINE # 51
0030 E500 F 229 MOV A,OS_Task_List
0032 5500 F 230 ANL A,temp?041
0034 6027 231 JZ ?C0004
232 ; {
233 ; SOURCE LINE # 52
234 ; if(OS_pcb[i].Suspend==0) //查找未挂起任务
235 ; SOURCE LINE # 53
0036 E500 F 236 MOV A,i?040
0038 75F005 237 MOV B,#05H
003B A4 238 MUL AB
003C 2400 F 239 ADD A,#LOW (OS_pcb+02H)
003E F8 240 MOV R0,A
003F E6 241 MOV A,@R0
0040 701B 242 JNZ ?C0004
243 ; {
244 ; SOURCE LINE # 54
245 ; if(OS_pcb[i].Priority<OS_pcb[OS_Current_ID].Priority) //如果优先级高,则切换之
246 ; SOURCE LINE # 55
0042 AF00 F 247 MOV R7,OS_Current_ID
0044 EF 248 MOV A,R7
0045 75F005 249 MOV B,#05H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -