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

📄 os_cpu_a.asm

📁 ucosii c源码
💻 ASM
字号:

$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
	
	?PR?_?serial?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	(_?serial)
	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	ACC
		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
		PUSHALL
		
		CLR	TR0
		MOV	TH0,#70H
		MOV	TL0,#00H
		SETB	TR0
		
		LCALL	_?OSIntEnter
		LCALL	_?OSTimeTick
		LCALL	_?OSIntExit
		POPALL
		RETI
		
		
		CSEG	AT	0023H
		LJMP	SerialISR
		RSEG	?PR?_?serial?OS_CPU_A
		
	SerialISR:
		USING	0
		PUSHALL
		CLR	EA
		LCALL	_?serial
		SETB	EA
		POPALL
		RETI
		
		
		END
	
	
	
	
	
	

⌨️ 快捷键说明

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