单片机 定时器 中断(用C语言写的)

用定时器进入中断,假设每隔1s进行一次中断。如果在执行中断服务的时间超过了1s,那么下次中断时不会被响应。如何控制,使得执行中断服务的时间恰好等于1s,这样,执行中断服务... 用定时器进入中断,假设每隔1s进行一次中断。

如果在执行中断服务的时间超过了1s,那么下次中断时不会被响应。

如何控制,使得执行中断服务的时间恰好等于1s,这样,执行中断服务后,恰好又迎来新的一次中断?????
回答的好有追加。
展开
 我来答
甜甜圈的店铺
2011-07-27 · TA获得超过1092个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:240万
展开全部
楼上的回答都没明白楼主问题的意思。
其实楼主你这个问题很好办的。
我不知道楼主您用的是什么编辑器,如果使用Keil的话。你先编写好你的中断函数,然后按“Debug”进入调试模式,在调试模式下,编辑框右边会有一个列表显示当前寄存器的值和所有变量的值。
这个列表最下面有一个“sec”,它的值就是显示程序执行的时间(以秒为单位的)。

这个时候,你只要把PC指针指向中断服务程序的第一条语句,然后在中断服务程序的最后一条语句设置一个断点,然后按"run"全速运行一次中断服务程序,再看看“sec”显示的是多少。
追问
用C语言如何实现?
追答
我说的就是用C语言实现的啊。如果楼主不明白的话,可以去优酷或者土豆搜郭天祥《十天学会单片机》,他的第二节课(讲流水灯的)就有详细的讲解如何用这个DEBUG模式的"sec"控制流水灯的闪烁延时时间。
宀相向项
2012-11-28 · 超过11用户采纳过TA的回答
知道答主
回答量:74
采纳率:100%
帮助的人:24.8万
展开全部
1S中断一次???这可不能实现啊!!!定时器的一次定时时间的是毫秒级的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caopengcheng
2011-07-27 · TA获得超过485个赞
知道答主
回答量:75
采纳率:0%
帮助的人:65.4万
展开全部
如何控制,使得执行中断服务的时间恰好等于1s,这样,执行中断服务后,恰好又迎来新的一次中断?????
RE:这个就不一定了。一般中断都是处理一些标志之类的。你所说的是响应中断的函数执行时间要控制在1s,一般没人这么做的。无意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dsp558
2011-07-30
知道答主
回答量:10
采纳率:0%
帮助的人:23.3万
展开全部
用定时器进行计数虽然方便,但是有一定误差,比如说外界的温度会影响晶振。
楼主想用定时器每隔1S中断一次也会受到温度的影响,假设忽略这个问题,也会受到内部程序延时的影响,总之,很复杂,建议你以后学习用专门的时钟芯片来定时,等你成为高手后再来看这些问题就会觉的很简单了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zaoshen14
2011-07-27 · TA获得超过240个赞
知道答主
回答量:245
采纳率:0%
帮助的人:149万
展开全部
我随便说说啊
我的经验是中断服务程序里面的代码一定要少 我的做法是 一般只在里面置一些标志
具体的工作在外面的循环程序里面做

这样做我认为很稳定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a01c0ca
2011-07-27
知道答主
回答量:22
采纳率:0%
帮助的人:6.3万
展开全部
#include <reg52.h>
#define uchar unsigned char
sbit d1=P1^0;
uchar num;
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1) ;
}
void T0_time()interrupt 1
{

TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)//表示一秒到了
{num=0;
d1=~d1;}
}
哥你看个程序,这是50ms的中断灯隔1s闪烁;一般一条语句的执行时间很短不会超过1s
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式