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

📄 os_cpu_a.asm

📁 在KEIL下使用UCOS来编写程式
💻 ASM
字号:
	NAME	OS_CPU_A_ASM

	PUBLIC	?C_XBP, C_XBP
	PUBLIC	_?OSTickISR

	EXTRN   CODE(_?C_OSCtxSw)
	EXTRN	CODE(_?OSIntEnter), CODE(_?OSTimeTick), CODE(_?OSIntExit)

	PUBLIC	_?LoadCtx, Stack, _?OSCtxSw, _?OSIntCtxSw

LoadXBP	MACRO
	MOV	DPH, C_XBP
	MOV	DPL, C_XBP+1
	ENDM

SaveXBP MACRO
	PUSH	IE
	CLR	EA
	MOV	C_XBP,   DPH
	MOV	C_XBP+1, DPL
	POP	IE
	ENDM

LoadReg	MACRO   REG
	MOVX	A,   @DPTR
	MOV	REG, A
	ENDM

SaveReg	MACRO   REG
	MOV	A,	REG
	MOVX	@DPTR,  A
	ENDM

PUSHA	MACRO
	PUSH	PSW
	PUSH	ACC
	PUSH	B
	PUSH	DPH
	PUSH	DPL
	
	IRP	REG,	<R0, R1, R2, R3, R4, R5, R6, R7>
	MOV	A,	REG
	PUSH	ACC
	ENDM

	ENDM

POPA	MACRO
	IRP	REG,	<R7, R6, R5, R4, R3, R2, R1, R0>
	POP	ACC
	MOV	REG,	A
	ENDM

	POP	DPL
	POP	DPH
	POP	B
	POP	ACC
	POP	PSW
	ENDM

DT?C_XBP	SEGMENT	DATA
		RSEG	DT?C_XBP
?C_XBP:
C_XBP:
	DS	1

?STACK	SEGMENT IDATA
	RSEG	?STACK
Stack:

PR?LoadCtx      SEGMENT CODE
	RSEG	PR?LoadCtx
_?LoadCtx:
	LoadXBP

	LoadREG	SP
	INC	DPTR

        MOV     R0, SP
LC_1:
	LoadREG	@R0
	INC     DPTR
	DEC     R0
	CJNE    R0, #Stack-1, LC_1

	SaveXBP

 	POPA
	RET

PR?OSCtxSw	SEGMENT CODE
	RSEG	PR?OSCtxSw
_?OSCtxSw:
	PUSHA
OSCS_1:
	LoadXBP

	MOV	A, SP
	CLR	C
	SUBB	A, #Stack-1
	INC	A
	CLR	C
	XCH	A, DPL
	SUBB	A, DPL
	JNC	SC_1
	DEC	DPH
SC_1:
	MOV	DPL,A

	SaveXBP

	SaveREG	SP
	INC	DPTR

        MOV     R0, SP
SC_2:
	SaveREG	@R0
	INC     DPTR
	DEC     R0
	CJNE    R0, #Stack-1, SC_2

	POPA
	LJMP	_?C_OSCtxSw

PR?OSIntCtxSw	SEGMENT	CODE
	RSEG	PR?OsIntCtxSw
_?OSIntCtxSw:
	DEC	SP
	DEC	SP
	DEC	SP
	DEC	SP
	LJMP	OSCS_1

	CSEG	AT	0BH
	LJMP	_?OSTickISR

	PUBLIC	OSTickRate

DT?OSTickISR	SEGMENT	DATA
	RSEG	DT?OSTickISR
OSTickRate:
	DS	1
OSTickCntr:
	DS	1

	EXTRN	CODE(_?UserTickTimer)

PR?OSTickISR	SEGMENT	CODE
	RSEG	PR?OSTickISR
_?OSTickISR:
	LCALL	ResetIntrHw
	PUSHA

	LCALL	_?UserTickTimer

	DEC	OSTickCntr
	MOV	A,		OSTickCntr
	JNZ	OSTI_1
	MOV	OSTickCntr,	OSTickRate

	LCALL	_?OSIntEnter
	LCALL	_?OSTimeTick
	LCALL	_?OSIntExit
OSTI_1:	
	POPA
	RET

ResetIntrHw:
	RETI

	END

⌨️ 快捷键说明

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