📄 taskisr.ls1
字号:
00EC 225 AD0BUSY BIT 0E8H.4
00D0 226 PSW DATA 0D0H
00D8 227 CCF0 BIT 0D8H.0
009A 228 RB80 BIT 098H.2
00C1 229 SMB0STA DATA 0C1H
00D9 230 CCF1 BIT 0D8H.1
231 ?PR?_OSTask_TimeDal?TASKISR SEGMENT CODE
232 EXTRN DATA (OSRdyGrp)
233 EXTRN DATA (Prio)
234 EXTRN DATA (ISR_num)
235 EXTRN CODE (OSISR_Task_Sched)
236 EXTRN CODE (OSMapTab)
237 EXTRN DATA (OSRdyTab)
238 EXTRN XDATA (OSPCB)
239 PUBLIC _OSTask_TimeDal
240 ; /********************************************
241 ; 嵌入式系统 小型操作系统
242 ; 作者:汪普宏
243 ; 制作日期:2006.9
244 ; *********************************************/
245 ;
246 ; #include "os.h"
247 ; #include"OS_Mail.h"
248 ; #include "OS_Memory.h"
249 ; /****************************************
250 ; 模块功能:任务级任务调度
251 ; 模块接口:当前任务优先级,任务挂起延迟时间
252 ; 调用者:任务
253 ; 返回值: 无
254 ; *****************************************/
255 ;
256 ; void OSTask_TimeDal(uchar TimeDal) //任务级任务切换函数
A51 MACRO ASSEMBLER TASKISR 11/05/2004 10:43:36 PAGE 5
257
---- 258 RSEG ?PR?_OSTask_TimeDal?TASKISR
0000 259 _OSTask_TimeDal:
260 USING 0
261 ; SOURCE LINE # 17
262 ;---- Variable 'TimeDal?040' assigned to Register 'R7' ----
263 ; {
264 ; SOURCE LINE # 18
265 ; ISR_num++;
266 ; SOURCE LINE # 19
0000 0500 F 267 INC ISR_num
268 ; #pragma ASM
269 ; PUSH ACC
0002 C0E0 270 PUSH ACC
271 ; PUSH B
0004 C0F0 272 PUSH B
273 ; PUSH DPH
0006 C083 274 PUSH DPH
275 ; PUSH DPL
0008 C082 276 PUSH DPL
277 ; PUSH PSW
000A C0D0 278 PUSH PSW
279 ; MOV PSW, 0
000C 8500D0 280 MOV PSW, 0
281 ; PUSH AR0
000F C000 282 PUSH AR0
283 ; PUSH AR1
0011 C001 284 PUSH AR1
285 ; PUSH AR2
0013 C002 286 PUSH AR2
287 ; PUSH AR3
0015 C003 288 PUSH AR3
289 ; PUSH AR4
0017 C004 290 PUSH AR4
291 ; PUSH AR5
0019 C005 292 PUSH AR5
293 ; PUSH AR6
001B C006 294 PUSH AR6
295 ; PUSH AR7
001D C007 296 PUSH AR7
297 ; #pragma ENDASM
298 ; OSPCB[Prio].timedal=TimeDal;
299 ; SOURCE LINE # 36
001F E500 F 300 MOV A,Prio
0021 75F008 301 MOV B,#08H
0024 A4 302 MUL AB
0025 2400 F 303 ADD A,#LOW (OSPCB+07H)
0027 F582 304 MOV DPL,A
0029 E4 305 CLR A
002A 3400 F 306 ADDC A,#HIGH (OSPCB+07H)
002C F583 307 MOV DPH,A
002E EF 308 MOV A,R7
002F F0 309 MOVX @DPTR,A
310 ; if(Prio!=FREE_TASK)
311 ; SOURCE LINE # 37
0030 E500 F 312 MOV A,Prio
0032 6405 313 XRL A,#05H
0034 6048 314 JZ ?C0001
315 ; {
316 ; SOURCE LINE # 38
317 ; if(TimeDal>0)
318 ; SOURCE LINE # 39
0036 EF 319 MOV A,R7
0037 D3 320 SETB C
0038 9400 321 SUBB A,#00H
003A E500 F 322 MOV A,Prio
A51 MACRO ASSEMBLER TASKISR 11/05/2004 10:43:36 PAGE 6
003C 75F008 323 MOV B,#08H
003F 400F 324 JC ?C0002
325 ; {
326 ; SOURCE LINE # 40
327 ; OSPCB[Prio].flg=WAIT_TIME; //任务因时间延迟挂起
328 ; SOURCE LINE # 41
0041 A4 329 MUL AB
0042 2400 F 330 ADD A,#LOW (OSPCB+03H)
0044 F582 331 MOV DPL,A
0046 E4 332 CLR A
0047 3400 F 333 ADDC A,#HIGH (OSPCB+03H)
0049 F583 334 MOV DPH,A
004B 7401 335 MOV A,#01H
004D F0 336 MOVX @DPTR,A
337 ; }
338 ; SOURCE LINE # 42
004E 800C 339 SJMP ?C0003
0050 340 ?C0002:
341 ; else
342 ; {
343 ; SOURCE LINE # 44
344 ; OSPCB[Prio].flg=WAIT_MSG; //非空闲任务应因等待消息挂起
345 ; SOURCE LINE # 45
0050 A4 346 MUL AB
0051 2400 F 347 ADD A,#LOW (OSPCB+03H)
0053 F582 348 MOV DPL,A
0055 E4 349 CLR A
0056 3400 F 350 ADDC A,#HIGH (OSPCB+03H)
0058 F583 351 MOV DPH,A
005A E4 352 CLR A
005B F0 353 MOVX @DPTR,A
354 ; }
355 ; SOURCE LINE # 46
005C 356 ?C0003:
357 ; if((OSRdyTab[Prio>>3]&=~OSMapTab[Prio&0x07])==0) //从就绪表中删除该任务
358 ; SOURCE LINE # 47
005C E500 F 359 MOV A,Prio
005E 13 360 RRC A
005F 13 361 RRC A
0060 13 362 RRC A
0061 541F 363 ANL A,#01FH
0063 FF 364 MOV R7,A
0064 2400 F 365 ADD A,#LOW (OSRdyTab)
0066 F8 366 MOV R0,A
0067 E6 367 MOV A,@R0
0068 FE 368 MOV R6,A
0069 E500 F 369 MOV A,Prio
006B 5407 370 ANL A,#07H
006D 900000 F 371 MOV DPTR,#OSMapTab
0070 93 372 MOVC A,@A+DPTR
0071 F4 373 CPL A
0072 5E 374 ANL A,R6
0073 F6 375 MOV @R0,A
0074 7005 376 JNZ ?C0004
377 ; {
378 ; SOURCE LINE # 48
379 ; OSRdyGrp&=~OSMapTab[Prio>>3];
380 ; SOURCE LINE # 49
0076 EF 381 MOV A,R7
0077 93 382 MOVC A,@A+DPTR
0078 F4 383 CPL A
0079 5200 F 384 ANL OSRdyGrp,A
385 ; }
386 ; SOURCE LINE # 50
007B 387 ?C0004:
388 ; OSISR_Task_Sched();
A51 MACRO ASSEMBLER TASKISR 11/05/2004 10:43:36 PAGE 7
389 ; SOURCE LINE # 51
007B 120000 F 390 LCALL OSISR_Task_Sched
391 ; }
392 ; SOURCE LINE # 52
007E 393 ?C0001:
394 ; #pragma ASM
395 ; POP AR7
007E D007 396 POP AR7
397 ; POP AR6
0080 D006 398 POP AR6
399 ; POP AR5
0082 D005 400 POP AR5
401 ; POP AR4
0084 D004 402 POP AR4
403 ; POP AR3
0086 D003 404 POP AR3
405 ; POP AR2
0088 D002 406 POP AR2
407 ; POP AR1
008A D001 408 POP AR1
409 ; POP AR0
008C D000 410 POP AR0
411 ; POP PSW
008E D0D0 412 POP PSW
413 ; POP DPL
0090 D082 414 POP DPL
415 ; POP DPH
0092 D083 416 POP DPH
417 ; POP B
0094 D0F0 418 POP B
419 ; POP ACC
0096 D0E0 420 POP ACC
421 ; DEC ISR_num
0098 1500 F 422 DEC ISR_num
423 ; RETI
009A 32 424 RETI
425 ; #pragma ENDASM
426 ; } ; SOURCE LINE # 70
009B 22 427 RET
428 ; END OF _OSTask_TimeDal
429
430 END
A51 MACRO ASSEMBLER TASKISR 11/05/2004 10:43:36 PAGE 8
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C0001. . . . . . . . . . . C ADDR 007EH R SEG=?PR?_OSTASK_TIMEDAL?TASKISR
?C0002. . . . . . . . . . . C ADDR 0050H R SEG=?PR?_OSTASK_TIMEDAL?TASKISR
?C0003. . . . . . . . . . . C ADDR 005CH R SEG=?PR?_OSTASK_TIMEDAL?TASKISR
?C0004. . . . . . . . . . . C ADDR 007BH R SEG=?PR?_OSTASK_TIMEDAL?TASKISR
?PR?_OSTASK_TIMEDAL?TASKISR C SEG 009CH REL=UNIT
AA. . . . . . . . . . . . . B ADDR 00C0H.2 A
AC. . . . . . . . . . . . . B ADDR 00D0H.6 A
ACC . . . . . . . . . . . . D ADDR 00E0H A
AD0BUSY . . . . . . . . . . B ADDR 00E8H.4 A
AD0CM0. . . . . . . . . . . B ADDR 00E8H.2 A
AD0CM1. . . . . . . . . . . B ADDR 00E8H.3 A
AD0EN . . . . . . . . . . . B ADDR 00E8H.7 A
AD0INT. . . . . . . . . . . B ADDR 00E8H.5 A
AD0LJST . . . . . . . . . . B ADDR 00E8H.0 A
AD0TM . . . . . . . . . . . B ADDR 00E8H.6 A
AD0WINT . . . . . . . . . . B ADDR 00E8H.1 A
ADC0CF. . . . . . . . . . . D ADDR 00BCH A
ADC0CN. . . . . . . . . . . D ADDR 00E8H A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -