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