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

📄 simple_eos.c

📁 Keil uVision2用C语言开发的交通灯嵌入式系统
💻 C
字号:
/*------------------------------------------------------------------*-

   Simple_EOS.C (v1.00)

  ------------------------------------------------------------------

   Main file for Simple Embedded Operating System (sEOS) for 8051. 

   COPYRIGHT
   ---------

   This code is associated with the book:

   EMBEDDED C by Michael J. Pont 
   [Pearson Education, 2002: ISBN: 0-201-79523-X].

   This code is copyright (c) 2001 by Michael J. Pont.
 
   See book for copyright details and other information.

-*------------------------------------------------------------------*/

#include "Main.H"
#include "Simple_EOS.H"

#include "T_Lights.H"

// ------ Private variable definitions -----------------------------
static tByte Call_count_G;


/*------------------------------------------------------------------*-
  
  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 =======================================
   // This ISR is called every 50 ms
   // - only want to update lights every second
   if (++Call_count_G < 20)
      {
      return;
      }

   // Time to update LED
   Call_count_G = 0;

   // Call traffic lights update function
   TRAFFIC_LIGHTS_Update();
   //===== 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()

  This operating system enters 'idle mode' between clock ticks
  to save power.  The next clock tick will return the processor
  to the normal operating state.

  *** ADAPT AS REQUIRED FOR YOUR HARDWARE ***

-*------------------------------------------------------------------*/
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 + -