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

📄 time_module.c

📁 用于C51上的modbus协议
💻 C
字号:
#include "STC89C58.h"
#include "TG01R.h"

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

void  Delay_50us(uint _time);       		//延时函数,非中断方式,延时时间基准50us
void  TimeOut_Start(uint _time50us);		//开始时间溢出,中断方式,时间基准50us
void  TimeOut_ReStart(uint _time);          //
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_ReStart(uint _time)
{
 TR0  =  0;
 Tcounter = _time;
 TH0  =  Base_50us;
 TL0  =  Base_50us;
 T0IR =  0;
 TR0  =  1;
}


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

⌨️ 快捷键说明

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