本帖最后由 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; 没想明白,有点乱呀,大伙请帮帮我.谢谢
|