找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 5
打印 上一主题 下一主题
收起左侧

中断点亮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; 没想明白,有点乱呀,大伙请帮帮我.谢谢

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1023753 发表于 2022-8-10 13:36 | 只看该作者
初始化设置灯灭,看下
回复

使用道具 举报

板凳
ID:401564 发表于 2022-8-10 15:43 | 只看该作者
为什么要搞个..........呢?
其它代码没有了?还是商业机密?
EA0=1;这是什么意思?
定时器启动了吗?
定时器中断开启了吗?新手写程序,它得是这个样子的:有注释,代码完整


回复

使用道具 举报

地板
ID:121859 发表于 2022-8-10 15:45 | 只看该作者
你的设置来看,定时器中断服务程序是根本进不去的,TR0还没有置1,也就是定时器0还没有工作。至于灯被点亮,应该是硬件上高有效的结果。缺省状态,IO口状态是“高”
回复

使用道具 举报

5#
ID:123289 发表于 2022-8-10 16:50 | 只看该作者
仔细阅读定时器章节。
回复

使用道具 举报

6#
ID:1041297 发表于 2022-8-10 17:29 | 只看该作者
Y_G_G 发表于 2022-8-10 15:43
为什么要搞个..........呢?
其它代码没有了?还是商业机密?
EA0=1;这是什么意思?

恩恩,启动了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表