Delay的变通,不要浪费Delay
前两天在做一个项目,说白了程序很简单,控制一大堆电磁阀,和上位机通信。根据上位机的命令控制不同的电磁阀动作。其中在某些电磁阀的控制流程中有很多地方需要长时间延时。最长的时候多达30m。另外一点比较特殊的地方就是需要实时响应上位机发送的报警命令,控制一路报警灯触发报警。因为前期规划没有使用操作系统,也就纯单片机底层程序。这就会有点矛盾,要Delay则无法实时响应报警,想实时显示报警则传统的延时程序无法使用。
在这里,经过试验,我借鉴了操作系统的TASK调用方式。即占用一个硬件定时器,做系统节拍。通过一个整体变量对其进行赋值和清零。通过这个系统节拍编写一个硬件延时程序,程序里包含时钟节拍的判断,需要延时的时间输入,以及报警判断。因为报警其实是串口中断,在延时程序里只需判断buf里的数据,故实际占用时间很少。由此就实现了即可输入制定延时时间同时还可以响应报警的前后台程序。
其核心跟UCos的程序轮转类似,相当于两个TASK在轮换执行,一个为响应上位机动作,一个为响应上位机报警。通过延时程序来进行切换。
写了这么一堆,其实也没什么意思,就是一点小花招,有需要的可以借鉴,觉得土的也可以吐槽。
不浪费时间,从不浪费Delay开始。。。