📄 context.asm
字号:
;*
;==============================================================================
; Copyright (C) 2004 RuanHaiShen, All rights reserved.
; SUMMARY:
; timer service.
;
; DESCRIPTION:
; See http://www.01s.org for documentation, latest information, license
; and contact details.
; email:ruanhaishen@01s.org
;============================================================================*/
;*===========================================================================*/
#include "example/mcs51/config.h"
#define TASK_IDLE_PRIO (CFG_MAX_TASKS - 1)
public __entry_init
extrn code(__mcs51_do_tick)
extrn code(__schedule)
extrn data(_current_prio)
COUNTER EQU 20000
T0H_COUNTER EQU (65536 - COUNTER) / 256
T0L_COUNTER EQU (65536 - COUNTER) - T0H_COUNTER * 256
CSEG AT 000BH
CLR EA
JMP IT0_IRS
CSEG AT 0100H
;*===========================================================================*/
__entry_init:
MOV A, SP ;get arg
ADD A, #03H
MOV R0, A
MOV A, @R0
MOV R7, A
SETB EA ;enable interrupt
RET
;*===========================================================================*/
IT0_IRS:
PUSH ACC
MOV A , #TASK_IDLE_PRIO
CJNE A , _current_prio, IT0_NOR_IN
POP ACC
JMP IT0_IDLE_IN
IT0_NOR_IN:
PUSH B
PUSH PSW
PUSH DPH
PUSH DPL
PUSH 00H
PUSH 01H
PUSH 02H
PUSH 03H
PUSH 04H
PUSH 05H
PUSH 06H
PUSH 07H
IT0_IDLE_IN:
;-----------------------------------
LCALL __mcs51_do_tick
MOV A, #LOW IT0_OUT
PUSH ACC
MOV A, #HIGH IT0_OUT
PUSH ACC
MOV TH0,#T0H_COUNTER
MOV TL0,#T0L_COUNTER
RETI
;-----------------------------------
IT0_OUT:
MOV A , #TASK_IDLE_PRIO
CJNE A , _current_prio, IT0_NOR_OUT
LJMP __schedule
IT0_NOR_OUT:
LCALL __schedule
POP 07H
POP 06H
POP 05H
POP 04H
POP 03H
POP 02H
POP 01H
POP 00H
POP DPL
POP DPH
POP PSW
POP B
POP ACC
RET
;*===========================================================================*/
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -