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

📄 time_module.c

📁 C51 CAN开发测试软件和驱动程序
💻 C
字号:
/************************************************************************
 *   广州周立功单片机发展有限公司    http://www.zlgmcu.com             	*
 ************************************************************************/
/************************************************************************
 *                                                                      *
 *  系统定时、软件延时处理程序   										*
 *                                                                      *
 ************************************************************************/


#include  <P8XC5X2.H>

//数据类型定义
#define   uchar  unsigned char				
#define   ulong  unsigned long
#define   uint   unsigned int  

//利用T0定时器以实现精确的延时
#define   Crystal      11059200L     		//定义晶体频率11.592MHZ
#define   Base_50us    256-46        		//50us溢出时间基准
static uint      data         Tcounter;     //基准时间计数器
static bit       T0IR;                     	//T0中断标志

void  Delay_50us(uint _time);       		//延时函数,非中断方式,延时时间基准50us
void  TimeOut_Start(uint _time50us);		//开始时间溢出,中断方式,时间基准50us
void  TimeOut_Stop(void);           		//停止时间溢出定时

/*-------------------------------------------------------------------------------------------
定时器0中断函数 、用以实现定时功能            
 -------------------------------------------------------------------------------------------*/    
void  T0_Val(void)  interrupt   1   using  2
{
  Tcounter--;
  if(Tcounter == 0)
  {
    T0IR  = 1;              		 //时间定时到,置位标志
    TR0   = 0;
  }
    
} 


/*-------------------------------------------------------------------------------------------
 函数原型:  void  Delay_50us(uint _time50us)		                    
 参数说明:  _time50us延时时间基准单位为50us 的个数                                                        
 返回值:    无 
 说明:		用于系统时间定时                  
 -------------------------------------------------------------------------------------------*/    
void  Delay_50us(uint _time50us)
{ uint  TempCount;
  TempCount  = _time50us;
  TMOD |= 0x02;          			//T0,初值自动重装
  TH0  =  Base_50us;     			//设置定时初值
  TL0  =  Base_50us;
  ET0  =  0;            			//禁止T0中断
  TR0  =  1;            			//计时开始
  while( TempCount--)
  {
    while(!TF0);TF0  =  0;			//等待
  } 
  TR0  =  0;         
} 

/*-------------------------------------------------------------------------------------------
 函数原型:  void  TimeOut_Start(uint _time)		                    
 参数说明:  _time 定时时间基准单位为50us 的个数                                                        
 返回值:    无 
 说明:		用于系统时间延时                  
 -------------------------------------------------------------------------------------------*/ 
void  TimeOut_Start(uint _time)
{
 Tcounter = _time;
 TMOD |= 0x02;          			//T0,初值自动重装
 TH0  =  Base_50us;     			//设置定时初值
 TL0  =  Base_50us;
 T0IR =  0;             			//清除中断T0标志 
 ET0  =  1;             			//使能T0中断
 EA	  =  1;
 TR0  =  1;             			//计时开始
}
/*

void  TimeOut_Stop(void)
{
 Tcounter=0;
 ET0  =   0;
 TR0  =   0;
}

*/

⌨️ 快捷键说明

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