找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机定时器中断程序求助

[复制链接]
跳转到指定楼层
楼主
ID:543966 发表于 2020-3-5 20:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么在定时器的中断内调用一次函数之后,不能再进入定时器中断了(之前的进入都没问题,调用函数后就不能进入了)?调试发现程序一直在while(1)中不动,TH0、TL0已经赋值了。
中断内的调用函数部分:
if(t > (t1 + 10000))
{
        mode4();
}
调用的函数:
void mode4()
{        
        t = 1;
        restore = 0;
        t1 = 25000;
        t2 = 25000;
        t3 = 25000;
        TR0 = 1
        while(1);
}


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

使用道具 举报

沙发
ID:687694 发表于 2020-3-5 22:57 | 只看该作者
void mode4()
{        
        t = 1;
        restore = 0;
        t1 = 25000;
        t2 = 25000;
        t3 = 25000;
        TR0 = 1
        while(1);
}
就在这个函数中的while(1);中无限循环了。。。。
回复

使用道具 举报

板凳
ID:462827 发表于 2020-3-5 23:27 | 只看该作者
你竟然在中断中调用一个带无限循环的子函数
回复

使用道具 举报

地板
ID:487821 发表于 2020-3-6 01:18 | 只看该作者
这样会一中断又跑这个函数,函数里又在whiel(1),所以就在函数与中断之间循环,其实是有产生中断,在你没感觉
回复

使用道具 举报

5#
ID:213173 发表于 2020-3-6 09:44 | 只看该作者
使用定时器中断服务函数的一般要求:函数中任务尽可能简短,俗称打一枪就跑,不可久留。更不能接近或大于中断周期。不是必须不要在中断函数中执行具体任务,只要设置个标志,具体任务放在main函数主循环中完成。更不能调用带有阻滞型延时函数和while(1)死循环的子函数。在中断任务没有完成前CPU不会响应再入中断请求。除非有更高优先级中断才能打断此中断。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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