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

📄 os_cpu_a.asm

📁 能在SST89E516单片机上运行的多任务实时操作系统ucosii v2.84 for keil C51源码,在硬件上已验证通过调试
💻 ASM
字号:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                          (c) Copyright 1992-2006, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
* File    : OS_CPU_A.A51
* By      : Jean J. Labrosse
*********************************************************************************************************
*/

$NOMOD51
EA	BIT	    0A8H.7
SP	DATA	081H
B	DATA	0F0H
ACC	DATA	0E0H
DPH	DATA	083H
DPL	DATA	082H
PSW	DATA	0D0H
TR0	BIT	    088H.4
TH0	DATA	08CH
TL0	DATA	08AH

        NAME OS_CPU_A         

?PR?OSStartHighRdy?OS_CPU_A    SEGMENT CODE
?PR?OSCtxSw?OS_CPU_A           SEGMENT CODE
?PR?OSIntCtxSw?OS_CPU_A        SEGMENT CODE
?PR?OSTickISR?OS_CPU_A         SEGMENT CODE

        EXTRN DATA  (?C_XBP)

        EXTRN IDATA (OSTCBCur)
        EXTRN IDATA (OSTCBHighRdy)
        EXTRN IDATA (OSRunning)
        EXTRN IDATA (OSPrioCur)
        EXTRN IDATA (OSPrioHighRdy)
    
		EXTRN CODE  (_?OSTaskSwHook) 
        EXTRN CODE  (_?OSIntEnter)
        EXTRN CODE  (_?OSIntExit)
        EXTRN CODE  (_?OSTimeTick)

        PUBLIC OSStartHighRdy
        PUBLIC OSCtxSw
        PUBLIC OSIntCtxSw
        PUBLIC OSTickISR
       
?STACK SEGMENT IDATA
        RSEG ?STACK
OSStack:
        DS 40H
OSStkStart IDATA OSStack-1

PUSHALL MACRO
            
		PUSH PSW
        PUSH ACC
        PUSH B
        PUSH DPL
        PUSH DPH
        MOV  A,R0 
        PUSH ACC
        MOV  A,R1
        PUSH ACC
        MOV  A,R2
        PUSH ACC
        MOV  A,R3
        PUSH ACC
        MOV  A,R4
        PUSH ACC
        MOV  A,R5
        PUSH ACC
        MOV  A,R6
        PUSH ACC
        MOV  A,R7
        PUSH ACC
        ENDM
    
POPALL  MACRO

        POP  ACC 
        MOV  R7,A
        POP  ACC
        MOV  R6,A
        POP  ACC
        MOV  R5,A
        POP  ACC
        MOV  R4,A
        POP  ACC
        MOV  R3,A
        POP  ACC
        MOV  R2,A
        POP  ACC
        MOV  R1,A
        POP  ACC
        MOV  R0,A
        POP  DPH
        POP  DPL
        POP  B
        POP  ACC
        POP  PSW
        ENDM    

;-------------------------------------------------------------------------
        RSEG ?PR?OSStartHighRdy?OS_CPU_A 
OSStartHighRdy:
        USING 0  
        LCALL _?OSTaskSwHook

OSCtxSw_in:    
        MOV  R0,#LOW (OSTCBCur) 
        INC  R0
        MOV  DPH,@R0  
        INC  R0
        MOV  DPL,@R0
        INC  DPTR       
        MOVX A,@DPTR   
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
        MOVX A,@DPTR
        MOV  R5,A 
        MOV  R0,#OSStkStart
        
restore_stack:    
        INC  DPTR
        INC  R0
        MOVX A,@DPTR
        MOV  @R0,A
        DJNZ R5,restore_stack
        MOV  SP,R0 
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP,A  
        INC  DPTR
        MOVX A,@DPTR
        MOV  ?C_XBP+1,A 
         MOV  R0,#LOW (OSRunning)
        MOV  @R0,#01    
        POPALL
        SETB EA  
        RETI
;-------------------------------------------------------------------------
        RSEG ?PR?OSCtxSw?OS_CPU_A
OSCtxSw:    
        PUSHALL
    
OSIntCtxSw_in:
        MOV  A,SP
        CLR  C
        SUBB A,#OSStkStart
        MOV  R5,A 
        MOV  R0,#LOW (OSTCBCur)
        INC  R0
        MOV  DPH,@R0
        INC  R0
        MOV  DPL,@R0
        INC  DPTR     
        MOVX A,@DPTR  
        MOV  R0,A
        INC  DPTR
        MOVX A,@DPTR
        MOV  R1,A
        MOV  DPH,R0
        MOV  DPL,R1
        MOV  A,R5
        MOVX @DPTR,A     
        MOV  R0,#OSStkStart  

save_stack:    
        INC  DPTR
        INC  R0
        MOV  A,@R0
        MOVX @DPTR,A
        DJNZ R5,save_stack
        INC  DPTR
        MOV  A,?C_XBP 
        MOVX @DPTR,A
        INC  DPTR
        MOV  A,?C_XBP+1
        MOVX @DPTR,A 
        LCALL 	_?OSTaskSwHook
        MOV  R0,#OSTCBCur
	    MOV  R1,#OSTCBHighRdy
	    MOV  A,@R1
        MOV  @R0,A
        INC  R0
	    INC  R1
	    MOV  A,@R1
        MOV  @R0,A
        INC  R0
	    INC  R1
	    MOV  A,@R1
        MOV  @R0,A
        MOV  R0,#OSPrioCur
	    MOV  R1,#OSPrioHighRdy
	    MOV  A,@R1
        MOV  @R0,A        
        LJMP OSCtxSw_in
;-------------------------------------------------------------------------
        RSEG ?PR?OSIntCtxSw?OS_CPU_A
        
OSIntCtxSw:
        MOV  A,SP
        CLR  C
        SUBB A,#4
        MOV  SP,A
        
        LJMP OSIntCtxSw_in
;-------------------------------------------------------------------------
        CSEG AT 000BH   
        LJMP OSTickISR 
        RSEG ?PR?OSTickISR?OS_CPU_A

OSTickISR:        
        USING 0
        CLR  EA 
        PUSHALL
        LCALL _?OSIntEnter           
        CLR  TR0
        MOV  TH0,#70H  
        MOV  TL0,#00H 
        SETB TR0         
        LCALL _?OSTimeTick
        LCALL _?OSIntExit
        POPALL        
        RETI
;-------------------------------------------------------------------------
        END
;-------------------------------------------------------------------------

⌨️ 快捷键说明

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