51单片机,定时器每20ms进中断,中断里执行100ms软件延时函数,当100ms延时函数执行20

51单片机,定时器每20ms进中断,中断里执行100ms软件延时函数,当100ms延时函数执行20ms后应该再次进中断,那么应该再次执行100ms延时函数还是继续上次没执... 51单片机,定时器每20ms进中断,中断里执行100ms软件延时函数,当100ms延时函数执行20ms后应该再次进中断,那么应该再次执行100ms延时函数还是继续上次没执行的80ms程序? #include<reg51.h> void Delay100ms() { 略; } main() { TMOD=0x01; TH0=(65536-20000)/256; TH0=(65536-20000)%256; ET0=1; EA=1; TR0=1; while(1); } void Time0(void) { TH0=(65536-20000)/256; TH0=(65536-20000)%256; Delay100ms(); } 展开
 我来答
linnjing
2014-04-21 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:515万
展开全部
首先,你这么做不科学。
不应在中断里进行延时。
回答你的问题,
“定时中断中执行20ms后应该再次进定时中断”,在51中,不是这样的。51内部有记录中断服务级别的标志,每个中断优先级有一个标志,这个标志用户程序是看不到的。进行中断后,对应优先级的中断服务状态标志自动被置位,同级别的中断都不再响应,也就是说,定时中断不会再次进定时中断,执行reti指令后,这个标志自动被复位,同级别的中断才会继续响应。
假设不是51系统,比如ARM,进入中断后,可以手动允许同级别的中断继续响应,这时再次中断后是延时100ms还是80ms,取决于你的延时程序。如果延时程序的变量是建立在栈上的局部变量,每次调用delay,都会一组新的变量,也就是说,延时每次都是100ms。如果是用的静态变量,或者全局变量,则有可能,只延时80ms。
追问
这样做确实不科学,主要想利用定时器扫描做多任务处理。但是处理任务时浪费的时间必对定时器的准确性造成影响。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式