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

📄 simple_eos.c

📁 CODE for embedded C ,hand coding version
💻 C
字号:
/*------------------------------------------------------------------*-
 Simple_EOS.c(v1.00)
 ---------------------------------------------------------------------

 Main file for Simple Embedded Operating System (sEOS) for 8051 
 Demonstrate version with dummy task X()
 -*------------------------------------------------------------------*/
 #include "Main.H"
 #include "Simple_EOS.H"

 //Header for dummy task
 #include "X.H"

 /*------------------------------------------------------------------*-
  sEOS_ISR()
  Invoked periodically by Timer 2 overflow :
  see sEOS_Init_Timer2() for details
  -*-----------------------------------------------------------------*/
  void sEOS_ISR() interrupt INTERRUPT_Timer_2_Overflow
 {
     //Must manually reset the T2 flag
	 TF2 = 0 ;

	 //========USER CODE - Begin ===================================
	 //Call dummy task here
	 X();
	 //========USER CODE - END ======================================

 }


 /*------------------------------------------------------------------*-
  sEOS_Init_Timer2()
  Sets up Timer 2 to drive the simple EOS 
  Parameter gives tick interval in MILLISECONDS
  Max tick interval is ~60 ms (12 MHZ oscillator)
  Note: Precise tick intervals are only possible with certain oscillator/tick interval
  combination .If timing is important ,you should check the timing calculation manually

  -*-------------------------------------------------------------------*/
  void sEOS_Init_Timer2(const tByte TICK_MS){
    tLong Inc;
	tWord Reload_16 ;
	tByte Reload_08H ,Reload_08L ;
	
	//Timer 2 is configured as a 16 bit timer 
	//which is automatically reloaded when it overflows
	T2CON = 0x04 ; //Load Timer2 control register 

	//Number of timer increments required (max 65536)
	Inc = ((tLong)TICK_MS * (OSC_FREQ /1000) ) /  (tLong)OSC_PER_INST ;

	//16 BIT reload value 
	Reload_16 = (tWord)(65536UL  - Inc);

	//8 bit reload values (High & Low )
	Reload_08H = (tByte)(Reload_16 / 256);
	Reload_08L = (tByte)(Reload_16 % 256);

	//Used for manually checking timing (in simulator)
	P2 = Reload_08H;
	P3 = Reload_08L;


	TH2  = Reload_08H ; //Load T2 high byte
	RCAP2H = Reload_08H; //Load T2 reload capt,reg,high byte
	TL2  = Reload_08L ;
	RCAP2L = Reload_08L ;


	//Timer2 interrupt is enabled ,and ISR will be called 
	//whenever the timer overflow 
	ET2 = 1 ;

	//Start Timer 2 running ;

	TR2 = 1;

	EA = 1 ; //Globally enable interrupts


   
  }

  /*-----------------------------------------------------------------*-
  sEOS_Go_To_Sleep()
  This operation system enters 'idle mode' between clock ticks to save power
  ,The next clock tick will return the processor to the normal operating stats
  -*-----------------------------------------------------------------*/
  void sEOS_Go_To_Sleep(void){
    PCON |= 0x01  ; //Enter idle mode(generic 8051 version)
   }

   /*----------------------------------------------------------------*-
   ------------------END OF FILE --------------------------------------
   -*------------------------------------------------------------------*/

⌨️ 快捷键说明

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