单片机 计数器问题

我用C写的一个AT89S52程序,程序运行完一次程序要59MS,每秒最多只能运行17次程序。而我现在要在程序里加一个方法去对外部脉冲计数。接在P3.0口。外部脉冲的频率每秒1到50次不等。外部脉冲在1到13次时,程序可以正常计数,当超过15次时就不能计数了,请问有什么方法可以解决??

我的程序里有AD、测温,时钟和液晶显示,有这些方法在,程序运行最快我也只能控制到第秒17次
请问怎么读定时器0的数值???

你把脉冲输入接到P3.4(或者P3.5)上吧,然后把定时器0(或者定时器1)改成计数模式,最多能计数65536个脉冲,不知道能不能满足你的要求,如果不能满足,那就中断之后记下中断次数,定时器清0重新计数,最后65536乘上中断次数就行了
定时器/计数器计数的时候不会占用CPU的时间,所以只要不溢出中断不会增加程序的运行时间,而且计数也准确啊
还有啊,看下你的AD是不是也可以接成中断的方式
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-18
两位楼上的说的很对,脉冲采集一定要用中断,否则会产生漏脉冲的情况;
另外补充一下,测温和显示不一定要做到实时,一般的做法是经过8次采样之后进行平均,然后再进行计算和送显,测温,AD和显示可以用一个定时器进行中断,然后每次中断进行处理,这个定时器可以设定10ms,50ms,这个时间根据你需要的采样时间来设定,在中断中设定一个标志量,定时器中断后标志置1,在主程序的循环中用if(flg==1){...}来处理相应程序,在处理最后将标志清零
第2个回答  2009-11-23
采用中断,多任务查询,好好协调,不至于有59ms的。
--------------------
请问怎么读定时器0的数值?
使用传送指令即可。
但是,如果定时器0处于“计数中”,数值的准确读取,就比较困难。
第3个回答  2009-11-18
外部计数最好用计数中断来做,要不很容易会漏掉脉冲的
第4个回答  2009-11-18
你用中断就好了
还有就是,如果你用的18B20测温的话,你就不能一直测了,过段时间采集一次吧
相似回答