单片机系统中利用晶振+外部计数器精确定时
我的看法是:不需要那么复杂,既然你认为可以采用外部计数器进行计数,还不如直接用分频电路芯片将脉冲信号分频,然后将分频后的信号接入8051,并采用脉冲触发方式的中断读分频率后的脉冲数(来个脉冲,内部用于储存脉冲数的单元加1),最后再通过定时器确定所读分频后脉冲数,并将所读脉冲数与分频数相乘不就得了。 只要分频后脉冲的周期比中断响应的时间长,就能保证中断不会漏失。最大误差就是定时到时,少计入的分频数的值了,只要中断不会漏失中断所需的时间并不影响计数的精度的!因为脉冲触发方式的中断只在脉冲的上升沿触发,中断子程序执行期间,脉冲信号仍然在分频的。
★★★【补充】:★★★
虽然晶振脚引...全部
我的看法是:不需要那么复杂,既然你认为可以采用外部计数器进行计数,还不如直接用分频电路芯片将脉冲信号分频,然后将分频后的信号接入8051,并采用脉冲触发方式的中断读分频率后的脉冲数(来个脉冲,内部用于储存脉冲数的单元加1),最后再通过定时器确定所读分频后脉冲数,并将所读脉冲数与分频数相乘不就得了。
只要分频后脉冲的周期比中断响应的时间长,就能保证中断不会漏失。最大误差就是定时到时,少计入的分频数的值了,只要中断不会漏失中断所需的时间并不影响计数的精度的!因为脉冲触发方式的中断只在脉冲的上升沿触发,中断子程序执行期间,脉冲信号仍然在分频的。
★★★【补充】:★★★
虽然晶振脚引的信号能与门,但是如何控制晶振来计时呢?我还是看不懂!
就你补充说明的情况看,也根本没有必要如此麻烦吧,看来你对8051的控制系统可能是第一次设计的吧!你完全可以将比较器输出的TTL信号作为外部中断信号对单片机进行中断,然后内部采用一个定时器进行计时即可。
例如,将TTL信号通过一个反向器,就可得到比较信号高电平的两个脉冲上升沿(一个直接从TTL输出取得,另外一个经过反向器取得),用它们分别与P3。2和P3。3连接,作为两个外部控制信号。内部则用T0(或T1,或两个串联使用)进行计时。
但TTL信号高电平时中断让定时器开始计时,经过反向器的信号作为第二个外部中断信号(即TTL由高变低时发出的信号),用来控制定时器停止计时,同时将所计的时间数储存,不就可以了吗?虽然两次中断都要延时微小的时,但正负刚好抵消,不会产生误差(即使有也是1-2个微秒的小误差),何乐而不为呢?干吗非要通过硬件来自找麻烦。
而且,应该记住,硬件多一个,实际就多一个故障点,实际的系统是能够减少硬件则应该尽量减少的!
不知道这样的解释能够使你清楚,希望你再好好理解一下8051内部的资源,祝你早日解决问题。
收起