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

📄 simple_eos.c

📁 Embedded C 这本书的范例光碟程式
💻 C
字号:
/*------------------------------------------------------------------*-
   Simple_EOS.C (v1.00)
  ------------------------------------------------------------------
   Main file for Simple Embedded Operating System (sEOS) for 8051. 
-*------------------------------------------------------------------*/
#include "Main.H"
#include "Simple_EOS.H"
#include "Menu_Data.H"
/*------------------------------------------------------------------*-  
  sEOS_ISR()
  Invoked periodically by Timer 2 overflow: 
  see sEOS_Init_Timer2() for timing details.
-*------------------------------------------------------------------*/
void sEOS_ISR() interrupt INTERRUPT_Timer_2_Overflow
   {
   TF2 = 0;  // Must manually reset the T2 flag   
   //===== USER CODE - Begin =======================================
   // Call MENU_Command_Processor every 5ms
   MENU_Command_Processor();
   //===== 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 ~60ms (12 MHz oscillator).

  Note: Precise tick intervals are only possible with certain 
  oscillator / tick interval combinations.  If timing is important,
  you should check the timing calculations 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 Timer 2 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 Timer 2 high byte
   RCAP2H  = Reload_08H;   // Load Timer 2 reload capt. reg. high byte
   TL2     = Reload_08L;   // Load Timer 2 low byte
   RCAP2L  = Reload_08L;   // Load Timer 2 reload capt. reg. low byte
   // Timer 2 interrupt is enabled, and ISR will be called 
   // whenever the timer overflows.
   ET2     = 1;
   // Start Timer 2 running
   TR2   = 1;     
   EA = 1;            // Globally enable interrupts
}
/*  sEOS_Go_To_Sleep() */
void sEOS_Go_To_Sleep(void)
{
   PCON |= 0x01;    // Enter idle mode (generic 8051 version)
}

⌨️ 快捷键说明

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