本帖最后由 1314love 于 2022-8-10 17:29 編輯
程序1://led燈長亮
void Timer0_Init()
{
TMOD&=0xF0; //設置定時器模式
TMOD|=0x01; //設置定時器模式TH0=64535/256; //設置定時器初值
TL0=64535%256; //設置定時器初值
TF0=0; //清除TF0標志位
TR0=1; //定時器0開始計時
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; //設置定時器模式
TMOD|=0x01; //設置定時器模式TH0=64535/256; //設置定時器初值
TL0=64535%256; //設置定時器初值
TF0=0; //清除TF0標志位
TR0=1; //定時器0開始計時
EA=1;PT0=0;
}
int main()
{
Timer0_Init();
while(1)
{
;
}
}
unsigned int T0count;
void Timer0_Rountine() interrupt 1
{
TH0=64535/256; //設置定時器初值
TL0=64535%256; //設置定時器初值
T0count++;
if(T0count>=1000)
{
T0count=0;
P2_0=~P2_0;
}
}
第一段程序的led燈為什么會長亮,就定時器不是要計數到溢出然后然后才會產生中斷才進入到中斷函數執行這條中斷函數的語句嗎?而且進去了為什么還是一直亮著的,難道是因為主函數里面的while函數沒語句才一直亮著嗎?
第二段程序的中斷函數是會自己不斷+1嗎?然后等到加到溢出了,T0count初始化為0,然后led燈就點亮,再跳到主函數的while循環,這里是不是while循環和中斷函數同時執行,等到中斷函數的值加到溢出,主函數就跳到中斷函數點亮燈。還有那個中斷給個TH0=64535/256; //設置定時器初值
TL0=64535%256; 沒想明白,有點亂呀,大伙請幫幫我.謝謝
|