新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51學(xué)習(xí)之定時(shí)器中斷

51學(xué)習(xí)之定時(shí)器中斷

作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
定時(shí)器中斷可用兩種方式處理:查詢和進(jìn)入中斷處理。
1.查詢
void Init_T0 (void) 定時(shí)器初始化
{
TMOD = 0x01;
TH0 = (65536-65000) /256;
TL0 = (65536-65000) %6;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Main() 主函數(shù)
{ Init_T0 ();
Speak1 =1;
if(TF0==1) 查詢中斷標(biāo)志
{
Speak1=~Speak1;
//TH0 = (65536-65000) /256;
//TL0 = (65536-65000) %6;
TF0=0;
}
}
2.進(jìn)入中斷處理
void Init_T0 (void) 定時(shí)器初始化
{
TMOD = 0x01;
TH0 = (65536-65000) /256;
TL0 = (65536-65000) %6;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Time0_Int() interrupt 1 中斷處理函數(shù)
{
Speak1=~Speak1;
//TH0 = (65536-65000) /256;
//TL0 = (65536-65000) %6;
}
void Main() 主函數(shù)
{
Init_T0 ();
Speak1 =1;
while(1); 等待中斷
}
對(duì)于查詢方式,一定要手動(dòng)清楚中斷標(biāo)志。
上面2段程序,我屏蔽了,中斷時(shí)重新裝計(jì)數(shù)初值的語句,程序都可正常運(yùn)行,所以我認(rèn)為無論對(duì)于那種處理方式,重裝初值都不必要。
初始化時(shí),可定義輸出口的初始狀態(tài)。而在處理中斷時(shí),一定要用取反語句。手動(dòng)置0或1,程序不能正常運(yùn)行。
對(duì)于方式2,開始main中沒寫最后的while(1),程序不正常運(yùn)行。
上述定時(shí)最大為65535,約65ms.如果計(jì)時(shí)大于此,可在中斷中處理。
程序如下:
int a;
void Time0_Int() interrupt 1
{
if(a++==20)
{ a=0;
Speak1=~Speak1;
}
}
呵呵,在寫上面這一小段時(shí),開始沒寫a=0,燈一直亮,后來參考下,發(fā)現(xiàn)不清0.a一直變大,程序只能執(zhí)行一次。



評(píng)論


技術(shù)專區(qū)

關(guān)閉