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

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(); }
首先,你这么做顷高不科学
不应在中断里进行延时。
回答你的问题,
“定时中断中执行20ms后应该再次进定时中断”,在51中,不是这样的。51内部有记录中断服务级别的标志,每衫改个中断优先级有一个标志,这个标志用户程序是看不到的。进行中断后,对应优先级的中断服务状态标志自动被置位,同级别的中断都不再响应,也就是说,定时中断不会再次进定时中断,执行reti指令后,这个标志自动被复位,同级别的中断才会继续响雀塌尺应。
假设不是51系统,比如ARM,进入中断后,可以手动允许同级别的中断继续响应,这时再次中断后是延时100ms还是80ms,取决于你的延时程序。如果延时程序的变量是建立在栈上的局部变量,每次调用delay,都会一组新的变量,也就是说,延时每次都是100ms。如果是用的静态变量,或者全局变量,则有可能,只延时80ms。