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

📄 sw_int.src

📁 基本STC4052写的一个小的OS, 完成了任务调度功能,及堆栈空间切换, 及中断处理
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; 		}
			; SOURCE LINE # 131
; 	}
			; SOURCE LINE # 132
?C0011:
; 	ExitCritical();
			; SOURCE LINE # 133
	SETB 	EA
; }
			; SOURCE LINE # 134
?C0013:
	RET  	
; END OF _?OsIntExit

; 
; void IR_CaptureInt6() //interrupt 6

	RSEG  ?PR?IR_CaptureInt6?SW_INT
IR_CaptureInt6:
	USING	0
			; SOURCE LINE # 136
; {
			; SOURCE LINE # 137
; 	U16 tmp;
; #pragma asm
; 	PUSHALL
	  PUSHALL
; #pragma endasm
; 	gOsIntLevel++;
			; SOURCE LINE # 142
	INC  	gOsIntLevel
;     if (CCF1)// PCA module 1 : IR 
			; SOURCE LINE # 143
	JNB  	CCF1,?C0015
;     {
			; SOURCE LINE # 144
;         CCF1 = 0;
			; SOURCE LINE # 145
	CLR  	CCF1
;         IR_Decode();
			; SOURCE LINE # 146
	LCALL	_?IR_Decode
;     }
			; SOURCE LINE # 147
?C0015:
; #if 1
;     if (CCF0)// PCA module 0 : 
			; SOURCE LINE # 149
	JNB  	CCF0,?C0016
;     {
			; SOURCE LINE # 150
; 		CCF0 = 0;
			; SOURCE LINE # 151
	CLR  	CCF0
; 		tmp = CCAP0H;
			; SOURCE LINE # 152
	MOV  	R7,CCAP0H
;---- Variable 'tmp?240' assigned to Register 'R6/R7' ----
;     	tmp = (tmp << 8) + CCAP0L; 
			; SOURCE LINE # 153
	MOV  	A,R7
	MOV  	R6,A
	MOV  	R5,CCAP0L
	MOV  	R4,#00H
	CLR  	A
	ADD  	A,R5
	MOV  	R7,A
	MOV  	A,R4
	ADDC 	A,R6
	MOV  	R6,A
; 		tmp += SYS_TIME_TICK;
			; SOURCE LINE # 154
	MOV  	A,#028H
	ADD  	A,R7
	MOV  	R7,A
	MOV  	A,#02H
	ADDC 	A,R6
	MOV  	R6,A
; 		CCAP0L = tmp & 0xff;
			; SOURCE LINE # 155
	MOV  	R5,AR7
	MOV  	A,R7
	MOV  	CCAP0L,A
;     	CCAP0H = tmp >> 8;
			; SOURCE LINE # 156
	MOV  	CCAP0H,R6
;     }
			; SOURCE LINE # 157
?C0016:
; #endif
; //  if (CF)  // PCA timer overflow
; //  {
; //      CF = 0;        
; //  }
; 
; 	OsIntExit();
			; SOURCE LINE # 164
	LCALL	_?OsIntExit
; 	if (gOsIntLevel)
			; SOURCE LINE # 165
	MOV  	A,gOsIntLevel
	JZ   	?C0017
; 		gOsIntLevel--;	
			; SOURCE LINE # 166
	DEC  	gOsIntLevel
?C0017:
; #pragma asm
; 	POPALL
	  POPALL
; 	RETI	    
	  RETI	    
; #pragma endasm
; }
			; SOURCE LINE # 171
	RET  	
; END OF IR_CaptureInt6

; 
; 
; 
; void SysTimer0 (void)// interrupt 1  //FC66 1ms

	RSEG  ?PR?SysTimer0?SW_INT
SysTimer0:
	USING	0
			; SOURCE LINE # 175
; { 
			; SOURCE LINE # 176
; #pragma asm
; 	PUSHALL
	  PUSHALL
; #pragma endasm
;  	gOsIntLevel++; 
			; SOURCE LINE # 180
	INC  	gOsIntLevel
; 
; 	TH0	=0xFC;
			; SOURCE LINE # 182
	MOV  	TH0,#0FCH
; 	TL0=0x67;
			; SOURCE LINE # 183
	MOV  	TL0,#067H
; 	TR0=1;
			; SOURCE LINE # 184
	SETB 	TR0
; 	sysTimeTick++ ;
			; SOURCE LINE # 185
	INC  	sysTimeTick+01H
	MOV  	A,sysTimeTick+01H
	JNZ  	?C0030
	INC  	sysTimeTick
?C0030:
; 
; #ifdef OS_DELAY
; 	OsDealDelay();
			; SOURCE LINE # 188
	LCALL	_?OsDealDelay
; #endif
; 
; 	sys10ms++;
			; SOURCE LINE # 191
	INC  	sys10ms
; 	if (10==sys10ms)
			; SOURCE LINE # 192
	MOV  	A,sys10ms
	CJNE 	A,#0AH,?C0019
; 	{	sys10ms = 0;
			; SOURCE LINE # 193
	CLR  	A
	MOV  	sys10ms,A
; #ifdef SET_TIMER
; 		Timer10msProc();
			; SOURCE LINE # 195
	LCALL	Timer10msProc
; #endif	
; //		isNeedTaskSW = 1;
; 		gOsMsgIntShed = 1;
			; SOURCE LINE # 198
	SETB 	gOsMsgIntShed
; 		OsIntExit();			
			; SOURCE LINE # 199
	LCALL	_?OsIntExit
; 	}
			; SOURCE LINE # 200
?C0019:
; 	if (gOsIntLevel)
			; SOURCE LINE # 201
	MOV  	A,gOsIntLevel
	JZ   	?C0020
; 		gOsIntLevel--;	
			; SOURCE LINE # 202
	DEC  	gOsIntLevel
?C0020:
; #pragma asm
; 	POPALL
	  POPALL
; 	RETI	    
	  RETI	    
; #pragma endasm
; }
			; SOURCE LINE # 207
	RET  	
; END OF SysTimer0

; 
; void UartISR (void) //interrupt 4 

	RSEG  ?PR?UartISR?SW_INT
UartISR:
	USING	0
			; SOURCE LINE # 209
; {
			; SOURCE LINE # 210
; 	U8 tmp;
; #pragma asm
; 	PUSHALL
	  PUSHALL
; #pragma endasm	 
; 	gOsIntLevel++; 
			; SOURCE LINE # 215
	INC  	gOsIntLevel
; 	if (RI)// receive
			; SOURCE LINE # 216
	JNB  	RI,?C0022
; 	{		
			; SOURCE LINE # 217
; 	    RI = 0;
			; SOURCE LINE # 218
	CLR  	RI
; 	  	tmp = SBUF;
			; SOURCE LINE # 219
;---- Variable 'tmp?441' assigned to Register 'R7' ----
	MOV  	R7,SBUF
; //		SBUF = tmp;
; //		while (!TI);
; //		TI=0;
; 	  	SRL_RevChar(tmp);
			; SOURCE LINE # 223
	LCALL	_?SRL_RevChar
; 	}
			; SOURCE LINE # 224
?C0022:
; 	OsIntExit();
			; SOURCE LINE # 225
	LCALL	_?OsIntExit
; 	if (gOsIntLevel)
			; SOURCE LINE # 226
	MOV  	A,gOsIntLevel
	JZ   	?C0023
; 		gOsIntLevel--;	
			; SOURCE LINE # 227
	DEC  	gOsIntLevel
?C0023:
; #pragma asm
; 	POPALL
	  POPALL
; 	RETI
	  RETI
; #pragma endasm
; }
			; SOURCE LINE # 232
	RET  	
; END OF UartISR

; 
; 
; void OSTaskSW (void) REENTRANT

	RSEG  ?PR?_?OSTaskSW?SW_INT
_?OSTaskSW:
	USING	0
			; SOURCE LINE # 235
; {
; 	EnterCritical();
			; SOURCE LINE # 237
	CLR  	EA
; #pragma asm
; 	PUSHALL
	  PUSHALL
; #pragma endasm
; 	if (gOs.taskNum<2)
			; SOURCE LINE # 241
	MOV  	A,gOs+01EH
	CLR  	C
	SUBB 	A,#02H
	JC   	?C0026
; 	{	return;//只有一个任务在运行
			; SOURCE LINE # 242
; 	}
			; SOURCE LINE # 243
?C0025:
; 	OsTaskSwitch();
			; SOURCE LINE # 244
	LCALL	_?OsTaskSwitch
; #pragma asm
; 	POPALL	    
	  POPALL	    
; #pragma endasm
; 	ExitCritical();
			; SOURCE LINE # 248
	SETB 	EA
; }
			; SOURCE LINE # 249
?C0026:
	RET  	
; END OF _?OSTaskSW

; 
; 
; void ISRAdrFun (void)  REENTRANT

	RSEG  ?PR?_?ISRAdrFun?SW_INT
_?ISRAdrFun:
			; SOURCE LINE # 252
; {
; #pragma asm
; 	   NOP				//3
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//6
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//0A
	  NOP				 
; 
	  
; 	   LJMP SysTimer0	//0B
	  LJMP SysTimer0	 
; ;	   NOP
	  ;	   NOP
; ;	   NOP
	  ;	   NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; ;;//////////////////////////////////
	  ;; 
; 	   NOP				//10
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 
	  
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//1A
	  NOP				 
; 
	  
; 	   NOP				//1B
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; ;;//////////////////////////////////
	  ;; 
; 	   NOP				//20
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   LJMP UartISR 	//23
	  LJMP UartISR 	 
; ;	   NOP
	  ;	   NOP
; ;	   NOP
	  ;	   NOP
; 
	  
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//2A
	  NOP				 
; 
	  
; 	   NOP				//2B
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; ;;//////////////////////////////////
	  ;; 
; 	   NOP				//30
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   LJMP IR_CaptureInt6 	//33
	  LJMP IR_CaptureInt6 	 
; ;	   NOP
	  ;	   NOP
; ;	   NOP
	  ;	   NOP
; 
	  
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//3A
	  NOP				 
; 
	  
; 	   NOP				//3B
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; ;;//////////////////////////////////
	  ;; 
; 	   NOP				//40
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP			 
	  NOP			 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 
	  
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP				//4A
	  NOP				 
; 
	  
; 	   NOP				//4B
	  NOP				 
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; 	   NOP
	  NOP
; #pragma endasm
; 
; }
			; SOURCE LINE # 347
	RET  	
; END OF _?ISRAdrFun

	END

⌨️ 快捷键说明

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