?? time_module.c
字號(hào):
/************************************************************************
* 廣州周立功單片機(jī)發(fā)展有限公司 http://www.zlgmcu.com *
************************************************************************/
/************************************************************************
* *
* 系統(tǒng)定時(shí)、軟件延時(shí)處理程序 *
* *
************************************************************************/
#include <AT89X51.H>
//數(shù)據(jù)類型定義
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
//利用T0定時(shí)器以實(shí)現(xiàn)精確的延時(shí)
#define Crystal 11059200L //定義晶體頻率11.592MHZ
#define Base_50us 256-46 //50us溢出時(shí)間基準(zhǔn)
static uint data Tcounter; //基準(zhǔn)時(shí)間計(jì)數(shù)器
static bit T0IR; //T0中斷標(biāo)志
void Delay_50us(uint _time); //延時(shí)函數(shù),非中斷方式,延時(shí)時(shí)間基準(zhǔn)50us
void TimeOut_Start(uint _time50us); //開(kāi)始時(shí)間溢出,中斷方式,時(shí)間基準(zhǔn)50us
void TimeOut_Stop(void); //停止時(shí)間溢出定時(shí)
/*-------------------------------------------------------------------------------------------
定時(shí)器0中斷函數(shù) 、用以實(shí)現(xiàn)定時(shí)功能
-------------------------------------------------------------------------------------------*/
void T0_Val(void) interrupt 1 using 2
{
Tcounter--;
if(Tcounter == 0)
{
T0IR = 1; //時(shí)間定時(shí)到,置位標(biāo)志
TR0 = 0;
}
}
/*-------------------------------------------------------------------------------------------
函數(shù)原型: void Delay_50us(uint _time50us)
參數(shù)說(shuō)明: _time50us延時(shí)時(shí)間基準(zhǔn)單位為50us 的個(gè)數(shù)
返回值: 無(wú)
說(shuō)明: 用于系統(tǒng)時(shí)間定時(shí)
-------------------------------------------------------------------------------------------*/
void Delay_50us(uint _time50us)
{ uint TempCount;
TempCount = _time50us;
TMOD |= 0x02; //T0,初值自動(dòng)重裝
TH0 = Base_50us; //設(shè)置定時(shí)初值
TL0 = Base_50us;
ET0 = 0; //禁止T0中斷
TR0 = 1; //計(jì)時(shí)開(kāi)始
while( TempCount--)
{
while(!TF0);TF0 = 0; //等待
}
TR0 = 0;
}
/*-------------------------------------------------------------------------------------------
函數(shù)原型: void TimeOut_Start(uint _time)
參數(shù)說(shuō)明: _time 定時(shí)時(shí)間基準(zhǔn)單位為50us 的個(gè)數(shù)
返回值: 無(wú)
說(shuō)明: 用于系統(tǒng)時(shí)間延時(shí)
-------------------------------------------------------------------------------------------*/
void TimeOut_Start(uint _time)
{
Tcounter = _time;
TMOD |= 0x02; //T0,初值自動(dòng)重裝
TH0 = Base_50us; //設(shè)置定時(shí)初值
TL0 = Base_50us;
T0IR = 0; //清除中斷T0標(biāo)志
ET0 = 1; //使能T0中斷
EA = 1;
TR0 = 1; //計(jì)時(shí)開(kāi)始
}
/*
void TimeOut_Stop(void)
{
Tcounter=0;
ET0 = 0;
TR0 = 0;
}
*/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -