发布于 2010-04-17 00:14:34
8楼
芳季 的电眼问题有一段时间了。我讲一下我的思路,供参考:
一、先讲纯时间的延时:
0、设延时时间为Td(ms)
1、脉冲输入,可以用DI的上升和下降沿中断,获得输入处理控制权;
2、延时后的输出,采用定时器中断,1ms的分辨率。(更高分辨率可以考虑用高速输出+HC)。
3、开辟一存贮区作为FIFO,可以用表指令,也可以自已用程序搭建;
4、初始状态,表为空、定时中断为空闲;
5、有输入,发生上升/下降沿中断,记下此时的时间点(用BITIM指令);
5.1、判断定时中断是否为空闲(若定时中断为空闲,表一定为空,否则就是程序有问题);
5.2、若定时中断空闲,直接启动定时中断,让其在Td后中断,输出该输入事件;
5.3、若定时中断进行中,则取本次的时间点,和上一次输出事件的时间点,相差得出间隔时间dT(ms),放入FIFO中(溢出问题另论),当然,连同输入的沿特性也放入FIFO。(还得有最小时间差的限制)
6、发生定时中断,处理输出,然后
6.1、若表为空,则置定时中断为闲;
6.2、若表为非空,从FIFO中取出一(组)数,(当然FIFO的个数会减小),将定时器置为dT后中断。
7、....