📄 time_module.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 + -