单片机 计数器问题

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

我的程序里有AD、测温,时钟和液晶显示,有这些方法在,程序运行最快我也只能控制到第秒17次
请问怎么读定时器0的数值???
展开
 我来答
呵数苍度0j
2009-11-18 · TA获得超过317个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:98.1万
展开全部
你把脉冲输入接到P3.4(或者P3.5)上吧,然后把定时器0(或者定时器1)改成计数模式,最多能计数65536个脉冲,不知道能不能满足你的要求,如果不能满足,那就中断之后记下中断次数,定时器清0重新计数,最后65536乘上中断次数就行了
定时器/计数器计数的时候不会占用CPU的时间,所以只要不溢出中断不会增加程序的运行时间,而且计数也准确啊
还有啊,看下你的AD是不是也可以接成中断的方式
aldriscxy
2009-11-18 · TA获得超过1823个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:447万
展开全部
两位楼上的说的很对,脉冲采集一定要用中断,否则会产生漏脉冲的情况;
另外补充一下,测温和显示不一定要做到实时,一般的做法是经过8次采样之后进行平均,然后再进行计算和送显,测温,AD和显示可以用一个定时器进行中断,然后每次中断进行处理,这个定时器可以设定10ms,50ms,这个时间根据你需要的采样时间来设定,在中断中设定一个标志量,定时器中断后标志置1,在主程序的循环中用if(flg==1){...}来处理相应程序,在处理最后将标志清零
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2009-11-23 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:8341万
展开全部
采用中断,多任务查询,好好协调,不至于有59ms的。
--------------------
请问怎么读定时器0的数值?
使用传送指令即可。
但是,如果定时器0处于“计数中”,数值的准确读取,就比较困难。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友74a9090
2009-11-18 · TA获得超过544个赞
知道小有建树答主
回答量:248
采纳率:0%
帮助的人:164万
展开全部
外部计数最好用计数中断来做,要不很容易会漏掉脉冲的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lfflash
2009-11-18 · TA获得超过607个赞
知道小有建树答主
回答量:333
采纳率:0%
帮助的人:150万
展开全部
你用中断就好了
还有就是,如果你用的18B20测温的话,你就不能一直测了,过段时间采集一次吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式