51單片機(jī)定時(shí)/計(jì)數(shù)器C語(yǔ)言應(yīng)用實(shí)例
/************
設(shè)置T0為16位定時(shí)器,定時(shí)50ms,系統(tǒng)采用12MHz晶振。
************/
#include
voiDMAin()
{
TMOD=0x01;//設(shè)定T0的長(zhǎng)度和狀態(tài):16位定時(shí)
TH0=(65536-50000)/256;//50ms定時(shí),計(jì)數(shù)器的初值高8位
TL0=(65536-50000)%256;//50ms定時(shí),計(jì)數(shù)器的初值低8位
EA=1;//系統(tǒng)開(kāi)放中斷
ET0=1;//允許T0中斷
TR0=1;//啟動(dòng)T0
for(;;);//等待T0中斷產(chǎn)生
}
void T0_ISR( ) interrupt 1
{
實(shí)現(xiàn)用戶(hù)功能目標(biāo)代碼
/*恢復(fù)計(jì)數(shù)器初值*/
TH0=(65536-50000)/256; //50ms 定時(shí),計(jì)數(shù)器的初值高8 位
TL0=(65536-50000)%256; //50ms 定時(shí),計(jì)數(shù)器的初值低8 位
}
說(shuō)明:
void:中斷子程序返回值類(lèi)型
T0_ISR( ):T0 子程序名
interrupt:中斷子程序標(biāo)識(shí)關(guān)鍵字,不可遺漏或?qū)戝e(cuò)
1:定時(shí)/計(jì)數(shù)器中斷為1 號(hào)中斷
例:利用T0 定時(shí)器實(shí)現(xiàn)P1.0 輸出周期為100ms 的方波。系統(tǒng)采用12MHz 晶振。
源程序:
#include
sbit P10=P1^0;
void main( )
{
TMOD=0x01; //設(shè)定T0 的長(zhǎng)度和狀態(tài):16 位定時(shí)
TH0=(65536-50000)/256; //50ms 定時(shí),計(jì)數(shù)器的初值高8 位
TL0=(65536-50000)%256; //50ms 定時(shí),計(jì)數(shù)器的初值低8 位
EA=1; //系統(tǒng)開(kāi)放中斷
ET0=1; //允許T0 中斷
TR0=1; //啟動(dòng)T0
for(;;); // 等待T0 中斷產(chǎn)生
}
void T0_ISR( ) interrupt 1
{
P10=~P10; //P1.0 每50ms 取反一次
TH0=(65536-50000)/256; //恢復(fù)計(jì)數(shù)器初值
TL0=(65536-50000)%256; //恢復(fù)計(jì)數(shù)器初值
}





