|
本帖最后由 1314love 于 2022-8-10 17:29 編輯
程序1://led燈長(zhǎng)亮
void Timer0_Init()
{
TMOD&=0xF0; //設(shè)置定時(shí)器模式
TMOD|=0x01; //設(shè)置定時(shí)器模式TH0=64535/256; //設(shè)置定時(shí)器初值
TL0=64535%256; //設(shè)置定時(shí)器初值
TF0=0; //清除TF0標(biāo)志位
TR0=1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA=1;PT0=0;
}
int main()
{
Timer0_Init();
while(1)
{
;
}
}
void Timer0_Rountine() interrupt 1
{
P0_0=0;
}
程序2://led每隔1s閃爍
void Timer0_Init()
{
TMOD&=0xF0; //設(shè)置定時(shí)器模式
TMOD|=0x01; //設(shè)置定時(shí)器模式TH0=64535/256; //設(shè)置定時(shí)器初值
TL0=64535%256; //設(shè)置定時(shí)器初值
TF0=0; //清除TF0標(biāo)志位
TR0=1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA=1;PT0=0;
}
int main()
{
Timer0_Init();
while(1)
{
;
}
}
unsigned int T0count;
void Timer0_Rountine() interrupt 1
{
TH0=64535/256; //設(shè)置定時(shí)器初值
TL0=64535%256; //設(shè)置定時(shí)器初值
T0count++;
if(T0count>=1000)
{
T0count=0;
P2_0=~P2_0;
}
}
第一段程序的led燈為什么會(huì)長(zhǎng)亮,就定時(shí)器不是要計(jì)數(shù)到溢出然后然后才會(huì)產(chǎn)生中斷才進(jìn)入到中斷函數(shù)執(zhí)行這條中斷函數(shù)的語(yǔ)句嗎?而且進(jìn)去了為什么還是一直亮著的,難道是因?yàn)橹骱瘮?shù)里面的while函數(shù)沒(méi)語(yǔ)句才一直亮著嗎?
第二段程序的中斷函數(shù)是會(huì)自己不斷+1嗎?然后等到加到溢出了,T0count初始化為0,然后led燈就點(diǎn)亮,再跳到主函數(shù)的while循環(huán),這里是不是while循環(huán)和中斷函數(shù)同時(shí)執(zhí)行,等到中斷函數(shù)的值加到溢出,主函數(shù)就跳到中斷函數(shù)點(diǎn)亮燈。還有那個(gè)中斷給個(gè)TH0=64535/256; //設(shè)置定時(shí)器初值
TL0=64535%256; 沒(méi)想明白,有點(diǎn)亂呀,大伙請(qǐng)幫幫我.謝謝
|
|