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

📄 context.asm

📁 realtime RTOS NEW
💻 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 + -