标题: 中断点亮led灯为什么会亮 [打印本页]

作者: 1314love    时间: 2022-8-10 11:04
标题: 中断点亮led灯为什么会亮
本帖最后由 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; 没想明白,有点乱呀,大伙请帮帮我.谢谢


作者: haiyang201    时间: 2022-8-10 13:36
初始化设置灯灭,看下
作者: Y_G_G    时间: 2022-8-10 15:43
为什么要搞个..........呢?
其它代码没有了?还是商业机密?
EA0=1;这是什么意思?
定时器启动了吗?
定时器中断开启了吗?新手写程序,它得是这个样子的:有注释,代码完整



作者: zhxiufan    时间: 2022-8-10 15:45
你的设置来看,定时器中断服务程序是根本进不去的,TR0还没有置1,也就是定时器0还没有工作。至于灯被点亮,应该是硬件上高有效的结果。缺省状态,IO口状态是“高”
作者: yzwzfyz    时间: 2022-8-10 16:50
仔细阅读定时器章节。
作者: 1314love    时间: 2022-8-10 17:29
Y_G_G 发表于 2022-8-10 15:43
为什么要搞个..........呢?
其它代码没有了?还是商业机密?
EA0=1;这是什么意思?

恩恩,启动了





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1