定时器中断程序执行时间很长,超过定时时间,我该怎么办。求指教

定时器中断程序执行时间很长,超过定时时间,我该怎么办。求指教,第1张

具体看什么要求,一般一个中断执行时间计时毫秒, 估计是你写程序写的太多,造成PLC扫描中断周期过长,

1建议你把中断程序优化下,写到其他位置,和中断分离,这样扫描的周期纳陪 会短缺茄敬点

2另外,你可以考伏慎虑用定时中断啊,这样避免了中断程序没扫描完,中断就被复位。

3程序一般控制毫秒控制肯定能达到工业使用要求的,你也可以把定时时间加长点。

跟你理清一下思路,你的问题就解决了。首先,你的程序很简单,就是让发光亩罩改二极管1秒亮1秒灭。因此,你前提是要定时1秒,但51单片机无法定时1秒,因此,你的程序就要定时50毫秒,每到了50毫秒,你就让num自加1,当num加到20时,换句话说,已经定时50毫秒20次了,那就是1秒咯,所以此有led1=~led1

//让发光管状态取反,达到程序目的。另外,定时50毫秒你要给th0和tl0赋给初值,因此

th0=(65536-45872)/256

//重新装载初值tl0=(65536-45872)%256才会有这两句,但定时50毫秒后,你的初值也会随之消失,因此才会在void

t0_time()这个函数中重新赋迅判初值。的确像你所说的初值是装满了开始执行中断,其实从你tmod=0x01

//设置定时器0位工作模式1(m1,m0位0,1)这句已经开始定时了,而赋初值是为了准确的定时50毫秒罢了。明白了没有?

(其实你可以这样理解,定时计数器就好比一个空的瓶子,当你给tmod=0x01时,水就开始一滴一滴的往瓶子你滴,当瓶子满了的时候,中断就发生了。假如从一个空的瓶子滴到满的瓶子定时是80毫秒的话,可你只需要定时50毫秒就够了,所以就要一开始往瓶子里倒水,使滴水的起点不是空瓶子,这就是赋初值的作用。当瓶子满了后,瓶子就会自动清空,重新从零开始。而第二次你再想定闷判时50毫秒,你就必须从新再往瓶子里倒水,这就是第二次赋初值的作用)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12269337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存