定时器中断函数内调用其他函数的时间问题

2019-07-15 10:13发布

最近看到中断这块,有一处不太理解,希望大家能指点一下。
比如我现在有一个外部中断0的中断函数
这个函数每次延迟50ms
我想实现就是每过10s中让蜂鸣器响一下
我想知道我在调用beep()这个蜂鸣器的函数中不影响此中断么
就比如我这个beep里面有delay(100)这样的 那岂不是我每调用
一次就会有这么多的误差吗
void t0() interrupt 1
{
        if(++count==200)
       {
               beep();
               count=0;
       }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
人中狼
1楼-- · 2019-07-16 11:07
中断是用来处理特殊情况,非特定规律情况的,在中断里除了做一些必要的操作外,都是设置一些状态标志,然后返回主程序,由主程序做相应的处理。
在简单的项目里,中断占用资源的弊端不明显,甚至会另程序简化,编程简单,但是在较大的项目里就会出现问题,如当外部中断源多于中断端口时,一个中断端口需要判断多个中断源。如在中断中做必要操作后,在主程序里仍需做大量的提示,记录等系列操作,这些情况都需要中断程序占用资源越少越好。
moon548834
2楼-- · 2019-07-16 12:28
 精彩回答 2  元偷偷看……
moon548834
3楼-- · 2019-07-16 14:59
刚刚我在自己仿真时发现
即便是你的中断是只有3 4个基本语句
但实际上仍然做不到精准延时
因为假设你的定时器是1ms
你每1000ms让灯亮一下
那么3 4个基本语句的
有8个左右的机械周期 这部分会*1000的放大 这个误差也是不小的
在我的例子中 实际上这个灯是1010ms亮一下
还需要进行一些补偿 才可以做到精准定时。
这个补偿也是我自己脑补出来的 没想到上网一搜还真有这么个东西..

一周热门 更多>