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