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

📄 timer.#3

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 #3
字号:
/****************************************************************************
 **
 ** 文件名:  timer.c
 ** 功能:    C8051Fxxx定时器驱动和延时函数;
 ** 创建时间:2005.08.05

 ** 修改时间:2005.12.01
 ** 修改说明:

 ** 作者:    李立学
 ** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
 ** 
 ****************************************************************************/


#include "LZK.H"

/***********************************************************************
* 名称:DuS()
* 功能:延时,10uS为1个单位.
* 入口参数:ucTime,延时单位个数时间.    
* 出口参数:无
* 说明:    
***********************************************************************/
void DuS(unsigned char ucTime)       // Unit: 1uS,24MHz System clock
{
   unsigned char i;
   for(i=0;i<ucTime;i++);
   for(i=0;i<ucTime;i++);
   for(i=0;i<ucTime;i++);
}

/***********************************************************************
* 名称:DmS()
* 功能:延时,1mS为1个单位.
* 入口参数:ucTime,延时单位个数时间.    
* 出口参数:无
* 说明:    
***********************************************************************/
void DmS(unsigned char ucTime)       // Unit: 1mS
{
   unsigned char i;
   for(i=0; i<ucTime; i++)
   {
      DuS(250);
	   DuS(250);
	   DuS(250);
	   DuS(250);
   } 
}

/***********************************************************************
* 名称:D1S()
* 功能:延时,1S为1个单位.
* 入口参数:ucTime,延时单位个数时间.    
* 出口参数:无
* 说明:    
***********************************************************************/
void D1S(unsigned char ucTime)       // Unit: 1S
{
   unsigned char i;
   for(i=0;i<ucTime;i++)
   {
      DmS(250);
      DmS(250);
      DmS(250);
      DmS(250);
   }
}

/***********************************************************************
* 名称:T0T1_Init()
* 功能:T0、T1初始化.
        T0:功率因数的相差测量;T1:UART1的波特率发生器,8位自装载模式;
		      Mode 1: 16-bit CNT;    Mode 2: 8-bit CNT with Auto-Reload
* 入口参数:无.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T0T1_Init(void)
{
   SFRPAGE = TIMER01_PAGE;  // T0: PhaseDiff MSR; T1: UART1;
   TCON = 0x00;             // 0000 0000
// TCON(00000000): Timer Control Register
// TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
// Bit7: TF1: Timer 1 Overflow Flag.
// Bit6: TR1: Timer 1 Run Control.
// Bit5: TF0: Timer 0 Overflow Flag.
// Bit4: TR0: Timer 0 Run Control.
// Bit3: IE1: External Interrupt 1 Flag.
// Bit2: IT1: External Interrupt 1 Type Select.
//       0/1: /INT1 is level triggered , active logic-low / edge triggered, falling-edge.
// Bit1: IE0: External Interrupt 0 Flag.
// Bit0: IT0: External Interrupt 0 Type Select.
//       0/1: /INT0 is level triggered , active logic-low / edge triggered, falling-edge.

   TMOD = 0x29;	  // 0010 1001: T1 MODE 2; T0 MODE 1; 
// TMOD(00000000): Timer Mode Register
// Bit7: GATE1: Timer 1 Gate Control.
//       0:     Timer 1 enabled when TR1 = 1 irrespective of /INT0 logic level.
//       1:     Timer 1 enabled only when TR1 = 1 AND /INT0 = logic 1.
// Bit6: C/T1: Counter/Timer 1 Select.
//       0:    Timer  : Timer 1 incremented by clock defined by T0M bit (CKCON.3).
//       1:    Counter: Timer 1 incremented by high-to-low transitions on external input pin (T0).
// Bits5-4: T1M1-T1M0: Timer 1 Mode Select.
//          00 Mode 0: 13-bit counter/timer
// 			01 Mode 1: 16-bit counter/timer
// 			10 Mode 2: 8-bit counter/timer with auto-reload
// 			11 Mode 3: Timer 1 inactive
// Bit3: GATE0: Timer 0 Gate Control.
//       0:     Timer 0 enabled when TR0 = 1 irrespective of /INT0 logic level.
//       1:     Timer 0 enabled only when TR0 = 1 AND /INT0 = logic 1.
// Bit2: C/T0: Counter/Timer Select.
//       0:    Timer:   Timer 0 incremented by clock defined by T0M bit (CKCON.3).
//       1:    Counter: Timer 0 incremented by high-to-low transitions on external input pin (T0).
// Bits1-0: T0M1-T0M0: Timer 0 Mode Select. Same with T1M1-T1M0
//          00 Mode 0: 13-bit counter/timer
// 			01 Mode 1: 16-bit counter/timer
// 			10 Mode 2: 8-bit counter/timer with auto-reload
// 			11 Mode 3: Timer 1 inactive
   CKCON = 0x00;  // 000 1 0 0 00: T1 Uses the SYSCLK; T0 USE SYSCLK/12; 
// CKCON(00000000): Clock Control Register
// Bits7-5: UNUSED. Read = 000b, Write = don’t care.
// Bit4: T1M: Timer 1 Clock Select.
//       1, use SYSCLK.
// Bit3: T0M: Timer 0 Clock Select.
//       1, use SYSCLK.
// Bit2: UNUSED. Read = 0b, Write = don’t care.
// Bits1-0: SCA1-SCA0: Timer 0/1 Prescale Bits
//          00 System clock divided by 12
// 			01 System clock divided by 4
// 			10 System clock divided by 48
// 			11 External clock divided by 8
   TH0 = TH0_INIT; 	 // TH0_INIT = 0x00;
   TL0 = TL0_INIT;    // TL0_INIT = 0x00; 

   TH1 = TH1_INIT; 	 // UART1: 57600;
   TL1 = TL1_INIT;    // UART1: 57600; 

   SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T2_Init()
* 功能:T2初始化.
        125uS定时中断,高优先级.
* 入口参数:无.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T2_Init(void)
{
   SFRPAGE = TMR2_PAGE;
   TMR2CN = 0x00;  // 0000 0000 
// TMR2CN(00000000): Timer n Control Registers
// Bit7: TFn:  Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
//       0/1: Timer Disabled / Enabled and running/counting.
// Bit1: Tn/C: Timer Select/Counter.
// Bit0: CP/RLn: Capture/Reload Select.
//       0/1: Timer is in Auto-Reload Mode / Capture Mode.
   TMR2CF = 0x00; // 000 00 000: T2 uses the sysclk devided by 12;  
// TMR2CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00         01      10                11
// SYSCLK/12  SYSCLK  EXTERNAL CLOCK/8  SYSCLK/2.
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
//       0/1: Count up Regardless of / Depending on the state of TnEX.
   RCAP2H = TH2_INIT;   // 250 x 0.5uS = 125uS.  
   RCAP2L = TL2_INIT;   // 250 x 0.5uS = 125uS. 
   SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T3_Init()
* 功能:T3初始化.
        10mS定时中断,优先级低于125uS中断.
* 入口参数:无.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T3_Init(void)
{
   SFRPAGE = TMR3_PAGE;
   TMR3CN = 0x00;  // 0000 0000 
// Bit7: TFn:  Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
//       0/1: Timer Disabled / Enabled and running/counting.
// Bit1: C/Tn: Counter/Timer Select.
// Bit0: CP/RLn: Capture/Reload Select.
//       0/1: Timer is in Auto-Reload Mode / Capture Mode.
   TMR3CF = 0x00; // 000 00 000: T3 uses the sysclk devided by 12;  
// TMR3CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00         01      10                11
// SYSCLK/12  SYSCLK  EXTERNAL CLOCK/8  SYSCLK/2
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
//       0/1: Count up Regardless of / Depending on the state of TnEX.
   RCAP3H = TH3_INIT;   // 2000 x 0.5uS = 10mS.
   RCAP3L = TL3_INIT;   // 2000 x 0.5uS = 10mS.
   SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T4_Init()
* 功能:T4初始化.
        UART0波特率发生器.
* 入口参数:无.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T4_Init(void)
{
   SFRPAGE = TMR4_PAGE;
   TMR4CN = 0x00;  // 0000 0000 
// TMR2CN(00000000): Timer n Control Registers
// Bit7: TFn: Timer n Overflow/Underflow Flag.
// Bit6: EXFn: Timer 2, 3, or 4 External Flag.
// Bit5-4: Reserved.
// Bit3: EXENn: Timer n External Enable.
// Bit2: TRn: Timer n Run Control.
//       0/1: Timer Disabled / Enabled and running/counting.
// Bit1: C/Tn: Counter/Timer Select.
// Bit0: CP/RLn: Capture/Reload Select.
//       0/1: Timer is in Auto-Reload Mode / Capture Mode.
   TMR4CF = 0x18; // 000 11 000: T4 uses the sysclk devided by 2;  
// TMR2CF(00000000): Timer n Configuration Registers
// Bit7-5: Reserved.
// Bit4-3: TnM1 and TnM0: Timer Clock Mode Select Bits.
// 00         01      10                11
// SYSCLK/12  SYSCLK  EXTERNAL CLOCK/8  SYSCLK/2
// Bit2: TOGn: Toggle output state bit.
// Bit1: TnOE: Timer output enable bit.
// Bit0: DCEN: Decrement Enable Bit.
//       0/1: Count up Regardless of / Depending on the state of TnEX.
   RCAP4H = TH4_INIT;
   RCAP4L = TL4_INIT;
   SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T0_RunCtrl()
* 功能:T0运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T0计数.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T0_RunCtrl(bit RunCtrl)
{
  SFRPAGE = TIMER01_PAGE;   // Timer0 & Timer1 Page
  TR0 = RunCtrl;            // T0 Run / STOP. 
  SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T1_RunCtrl()
* 功能:T1运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T1计数.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T1_RunCtrl(bit RunCtrl)
{
  SFRPAGE = TIMER01_PAGE;   // Timer0 & Timer1 Page
  TR1 = RunCtrl;            // T0 Run / STOP. 
  SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T2_RunCtrl()
* 功能:T2运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T2计数.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T2_RunCtrl(bit RunCtrl)
{
  SFRPAGE = TMR2_PAGE;      // Timer2 Page
  TR2 = RunCtrl;            // T2 Run / STOP. 
  SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T3_RunCtrl()
* 功能:T3运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T3计数.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T3_RunCtrl(bit RunCtrl)
{
  SFRPAGE = TMR3_PAGE;      // Timer3 Page
  TR3 = RunCtrl;            // T3 Run / STOP. 
  SFRPAGE = 0x00;
}

/***********************************************************************
* 名称:T4_RunCtrl()
* 功能:T4运行控制.
* 入口参数:RunCtrl,0/1:禁止/使能T4计数.    
* 出口参数:无
* 说明:    
***********************************************************************/
void T4_RunCtrl(bit RunCtrl)
{
  SFRPAGE = TMR4_PAGE;      // Timer4 Page
  TR4 = RunCtrl;            // T4 Run / STOP. 
  SFRPAGE = 0x00;
}

⌨️ 快捷键说明

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