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

📄 sw_int.src

📁 基本STC4052写的一个小的OS, 完成了任务调度功能,及堆栈空间切换, 及中断处理
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\OBJ\sw_int.SRC generated from: sw_int.c
; COMPILER INVOKED BY:
;        C:\Keil3\C51\BIN\C51.EXE sw_int.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND NOPRINT SRC(.\OBJ\sw_int.SRC)

$NOMOD51

NAME	SW_INT

P1M0	DATA	091H
P1M1	DATA	092H
P0	DATA	080H
P3M0	DATA	0B1H
P1	DATA	090H
P3M1	DATA	0B2H
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
ISP_TRIG	DATA	0E6H
EA	BIT	0A8H.7
SPCTL	DATA	085H
CF	BIT	0D8H.7
CH	DATA	0F9H
IE	DATA	0A8H
CL	DATA	0E9H
CCAP0H	DATA	0FAH
CCAP1H	DATA	0FBH
CR	BIT	0D8H.6
CCAP0L	DATA	0EAH
RD	BIT	0B0H.7
CCAP1L	DATA	0EBH
CCAPM0	DATA	0DAH
CCAPM1	DATA	0DBH
ES	BIT	0A8H.4
IP	DATA	0B8H
EPCA	BIT	0A8H.6
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
ISP_CMD	DATA	0E5H
PS	BIT	0B8H.4
SP	DATA	081H
CMOD	DATA	0D9H
CCON	DATA	0D8H
OV	BIT	0D0H.2
WR	BIT	0B0H.6
ADC_CONTR	DATA	0C5H
PCON	DATA	087H
SBUF	DATA	099H
ISP_ADDRH	DATA	0E3H
SCON	DATA	098H
TCON	DATA	088H
TMOD	DATA	089H
ISP_ADDRL	DATA	0E4H
IE0	BIT	088H.1
IE1	BIT	088H.3
AUXR	DATA	08EH
B	DATA	0F0H
ADC_DATA	DATA	0C6H
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
ISP_CONTR	DATA	0E7H
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
PX0	BIT	0B8H.0
WDT_CONTR	DATA	0E1H
PX1	BIT	0B8H.2
IDLE_CLK	DATA	0C7H
DPH	DATA	083H
pinLed	BIT	090H.4
DPL	DATA	082H
SPSTAT	DATA	084H
IPH	DATA	0B7H
REN	BIT	098H.4
ISP_DATA	DATA	0E2H
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PCAPWM0	DATA	0F2H
PSW	DATA	0D0H
PCAPWM1	DATA	0F3H
CCF0	BIT	0D8H.0
CCF1	BIT	0D8H.1
SPDAT	DATA	086H
?PR?_?OsTaskSwitch?SW_INT                SEGMENT CODE INBLOCK 
?PR?_?OsIntExit?SW_INT                   SEGMENT CODE INBLOCK 
?PR?IR_CaptureInt6?SW_INT                SEGMENT CODE INBLOCK 
?PR?SysTimer0?SW_INT SEGMENT CODE INBLOCK 
?PR?UartISR?SW_INT   SEGMENT CODE INBLOCK 
?PR?_?OSTaskSW?SW_INT                    SEGMENT CODE INBLOCK 
?PR?_?ISRAdrFun?SW_INT                   SEGMENT CODE INBLOCK 
?DT?SW_INT           SEGMENT DATA 
	EXTRN	DATA (sysTimeTick)
	EXTRN	BIT (gOsMsgIntShed)
	EXTRN	CODE (_?SRL_RevChar)
	EXTRN	DATA (gOs)
	EXTRN	BIT (gOsShedLock)
	EXTRN	CODE (_?OsDealDelay)
	EXTRN	DATA (gOsIntLevel)
	EXTRN	CODE (Timer10msProc)
	EXTRN	CODE (_?IR_Decode)
	EXTRN	DATA (?C_IBP)
	PUBLIC	sys10ms
	PUBLIC	_?ISRAdrFun
	PUBLIC	_?OSTaskSW
	PUBLIC	UartISR
	PUBLIC	SysTimer0
	PUBLIC	IR_CaptureInt6
	PUBLIC	_?OsIntExit
	PUBLIC	_?OsTaskSwitch

	RSEG  ?DT?SW_INT
        sys10ms:   DS   1
; 
; //////////////////////////////////////////////////////////////////
; //                          
; //      Copyright (c) 2006-2010 walnutcy 
; //      All Right Reserved.       
; //                                 
; //      $Author    walnutcy           
; //      $Email     walnutcy@163.com   
; //      $Version   v1.0        
; //      $FileName        
; //      $Since       
; //      $Log     
; //                    
; //      DESCRIPTION      
; //                      
; //	    History:      
; //	    <author>          <time>     <version >    <desc>     
; //      walnutcy       2006-11-22      0.1          建立
; //////////////////////////////////////////////////////////////////
; 
; #include "includes.h"
; 
; U8 sys10ms;
; 
; 
; #pragma asm
  ;/////////////////////////////////////////////////
  ;////////add by walnutcy 2006-11-22
  ;				PUBLIC  PUSHALL
  PUSHALL MACRO 
  ;;;;;;;;;;;;;;;;;;;;;;
  	    PUSH	ACC		 
  	    PUSH	B		 
  	    PUSH	PSW		 
  	    MOV	PSW,#0x00
  	    PUSH	DPL		 
  	    PUSH	DPH		 
  	    PUSH	0x00	 
  	    PUSH	0x01	 
  	    PUSH	0x02	 
  	    PUSH	0x03	 
  	    PUSH	0x04	 
  	    PUSH	0x05	 
  	    PUSH	0x06	 
  	    PUSH	0x07	
  ;;;;;;;;;;;;;;;;;;;;;;;;;;		 
          ENDM
  
  POPALL	MACRO
  ;;;;;;;;;;;;;;;;;;;;
  		POP		0x07
  		POP		0x06
  		POP		0x05
  		POP		0x04
  		POP		0x03
  		POP		0x02
  		POP		0x01
  		POP		0x00
  		POP		DPH 
  		POP		DPL 
  		POP		PSW 
  		POP		B   
  		POP		ACC 		    
  ;;;;;;;;;;;;;;;;;;;;;;;;
  		ENDM
  ;/////////////////////////////////////////////////
; #pragma	endasm
; 
; void OsTaskSwitch (void) REENTRANT

	RSEG  ?PR?_?OsTaskSwitch?SW_INT
_?OsTaskSwitch:
	USING	0
			; SOURCE LINE # 69
	DEC  	?C_IBP
	DEC  	?C_IBP
	DEC  	?C_IBP
; {
; 	U8 tmp;
; 	U8 tmpsp1;
; 	U8 tmpsp2;
; 	if (gOsShedLock)
			; SOURCE LINE # 74
	JNB  	gOsShedLock,$ + 5H
	AJMP 	?C0002
; 	{	return;
			; SOURCE LINE # 75
; 	}
			; SOURCE LINE # 76
?C0001:
; 	__asm POP DPL
	 POP DPL
; 	__asm POP DPH
	 POP DPH
; 	if (1==gOsIntLevel)
			; SOURCE LINE # 79
	MOV  	A,gOsIntLevel
	CJNE 	A,#01H,?C0003
; 	{
			; SOURCE LINE # 80
; 		tmpsp1 = DPL;
			; SOURCE LINE # 81
	MOV  	R0,?C_IBP
	INC  	R0
	MOV  	@R0,DPL
; 		tmpsp2 = DPH;
			; SOURCE LINE # 82
	MOV  	R0,?C_IBP
	INC  	R0
	INC  	R0
	MOV  	@R0,DPH
; 		__asm POP DPL
	 POP DPL
; 		__asm POP DPH 
	 POP DPH 
; 
; 	}
			; SOURCE LINE # 86
?C0003:
; 	tmp = gOs.currTask;
			; SOURCE LINE # 87
	MOV  	R0,?C_IBP
	MOV  	@R0,gOs+01FH
; 	gOs.tcb[tmp].sp = SP;
			; SOURCE LINE # 88
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+02H)
	MOV  	R0,A
	MOV  	@R0,SP
; 
; 	if (OS_TASK_RUN==gOs.tcb[tmp].state)
			; SOURCE LINE # 90
	MOV  	A,R7
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+07H)
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R4,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R5,A
	MOV  	A,R4
	SWAP 	A
	MOV  	R0,A
	ANL  	A,#0F0H
	XCH  	A,R0
	MOV  	A,R5
	SWAP 	A
	ANL  	A,#0FH
	ORL  	A,R0
	ANL  	A,#0FH
	XRL  	A,#03H
	JNZ  	?C0004
; 	{
			; SOURCE LINE # 91
; 		gOs.tcb[tmp].state = OS_TASK_RDY; 
			; SOURCE LINE # 92
	MOV  	R0,?C_IBP
	MOV  	A,@R0
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+07H)
	MOV  	R0,A
	MOV  	R6,AR4
	MOV  	A,R5
	ANL  	A,#0FH
	ORL  	A,#010H
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,A
; 	}
			; SOURCE LINE # 93
?C0004:
; 	for(tmp=0;tmp<OS_TASK_MAX_NUM;tmp++)
			; SOURCE LINE # 94
	MOV  	R0,?C_IBP
	CLR  	A
	MOV  	@R0,A
?C0005:
	MOV  	R0,?C_IBP
	MOV  	A,@R0
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#04H
	JNC  	?C0006
; 	{
			; SOURCE LINE # 95
; 		if (gOs.osPrio&(1<<tmp))
			; SOURCE LINE # 96
	MOV  	A,#01H
	MOV  	R6,#00H
	MOV  	R0,AR7
	INC  	R0
	SJMP 	?C0029
?C0028:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
?C0029:
	DJNZ 	R0,?C0028
	MOV  	R7,A
	MOV  	A,gOs
	ANL  	A,R6
	MOV  	R6,A
	MOV  	A,gOs+01H
	ANL  	A,R7
	ORL  	A,R6
	JZ   	?C0007
; 		{ 	
			; SOURCE LINE # 97
; 			if (OS_TASK_RDY==gOs.tcb[tmp].state)
			; SOURCE LINE # 98
	MOV  	R0,?C_IBP
	MOV  	A,@R0
	MOV  	R5,A
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+07H)
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	MOV  	R7,A
	MOV  	A,R6
	SWAP 	A
	MOV  	R0,A
	ANL  	A,#0F0H
	XCH  	A,R0
	MOV  	A,R7
	SWAP 	A
	ANL  	A,#0FH
	ORL  	A,R0
	ANL  	A,#0FH
	XRL  	A,#01H
	JNZ  	?C0007
; 			{
			; SOURCE LINE # 99
; 				gOs.tcb[tmp].state = OS_TASK_RDY;				
			; SOURCE LINE # 100
	MOV  	A,R5
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+07H)
	MOV  	R0,A
	PUSH 	AR0
	MOV  	A,@R0
	MOV  	R6,A
	INC  	R0
	MOV  	A,@R0
	ANL  	A,#0FH
	ORL  	A,#010H
	POP  	AR0
	MOV  	@R0,AR6
	INC  	R0
	MOV  	@R0,A
; 				gOs.currTask = tmp;
			; SOURCE LINE # 101
	MOV  	gOs+01FH,R5
; 				SP = gOs.tcb[tmp].sp;
			; SOURCE LINE # 102
	MOV  	R0,?C_IBP
	MOV  	A,@R0
	MOV  	B,#07H
	MUL  	AB
	ADD  	A,#LOW (gOs+02H)
	MOV  	R0,A
	MOV  	A,@R0
	MOV  	SP,A
; 				break;	
			; SOURCE LINE # 103
	SJMP 	?C0006
; 			}
			; SOURCE LINE # 104
; 		}		
			; SOURCE LINE # 105
; 	}
			; SOURCE LINE # 106
?C0007:
	MOV  	R0,?C_IBP
	INC  	@R0
	SJMP 	?C0005
?C0006:
; 	__asm PUSH DPH
	 PUSH DPH
; 	__asm PUSH DPL
	 PUSH DPL
; 	if (1==gOsIntLevel)
			; SOURCE LINE # 109
	MOV  	A,gOsIntLevel
	CJNE 	A,#01H,?C0002
; 	{
			; SOURCE LINE # 110
; 		DPH = tmpsp2;
			; SOURCE LINE # 111
	MOV  	R0,?C_IBP
	INC  	R0
	INC  	R0
	MOV  	A,@R0
	MOV  	DPH,A
; 		DPL = tmpsp1;
			; SOURCE LINE # 112
	MOV  	R0,?C_IBP
	INC  	R0
	MOV  	A,@R0
	MOV  	DPL,A
; 		__asm PUSH DPH
	 PUSH DPH
; 		__asm PUSH DPL
	 PUSH DPL
; 	}
			; SOURCE LINE # 115
; }
			; SOURCE LINE # 116
?C0002:
	INC  	?C_IBP
	INC  	?C_IBP
	INC  	?C_IBP
	RET  	
; END OF _?OsTaskSwitch

; 
; void OsIntExit (void) REENTRANT

	RSEG  ?PR?_?OsIntExit?SW_INT
_?OsIntExit:
	USING	0
			; SOURCE LINE # 118
; {
; 	EnterCritical();
			; SOURCE LINE # 120
	CLR  	EA
; 	if (gOs.taskNum>1)
			; SOURCE LINE # 121
	MOV  	A,gOs+01EH
	SETB 	C
	SUBB 	A,#01H
	JC   	?C0011
; 	{	
			; SOURCE LINE # 122
; 		if (0==gOsMsgIntShed)
			; SOURCE LINE # 123
	JB   	gOsMsgIntShed,?C0012
; 		{	ExitCritical(); 
			; SOURCE LINE # 124
	SETB 	EA
	RET  	
; 			return;
; 		}
			; SOURCE LINE # 126
?C0012:
; 		gOsMsgIntShed = 0;
			; SOURCE LINE # 127
	CLR  	gOsMsgIntShed
; 		if (1==gOsIntLevel)
			; SOURCE LINE # 128
	MOV  	A,gOsIntLevel
	CJNE 	A,#01H,?C0011
; 		{
			; SOURCE LINE # 129
; 			OsTaskSwitch();
			; SOURCE LINE # 130
	LCALL	_?OsTaskSwitch

⌨️ 快捷键说明

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