单片机 计数器问题
我用C写的一个AT89S52程序,程序运行完一次程序要59MS,每秒最多只能运行17次程序。而我现在要在程序里加一个方法去对外部脉冲计数。接在P3.0口。外部脉冲的频率每...
我用C写的一个AT89S52程序,程序运行完一次程序要59MS,每秒最多只能运行17次程序。而我现在要在程序里加一个方法去对外部脉冲计数。接在P3.0口。外部脉冲的频率每秒1到50次不等。外部脉冲在1到13次时,程序可以正常计数,当超过15次时就不能计数了,请问有什么方法可以解决??
我的程序里有AD、测温,时钟和液晶显示,有这些方法在,程序运行最快我也只能控制到第秒17次
请问怎么读定时器0的数值??? 展开
我的程序里有AD、测温,时钟和液晶显示,有这些方法在,程序运行最快我也只能控制到第秒17次
请问怎么读定时器0的数值??? 展开
展开全部
两位楼上的说的很对,脉冲采集一定要用中断,否则会产生漏脉冲的情况;
另外补充一下,测温和显示不一定要做到实时,一般的做法是经过8次采样之后进行平均,然后再进行计算和送显,测温,AD和显示可以用一个定时器进行中断,然后每次中断进行处理,这个定时器可以设定10ms,50ms,这个时间根据你需要的采样时间来设定,在中断中设定一个标志量,定时器中断后标志置1,在主程序的循环中用if(flg==1){...}来处理相应程序,在处理最后将标志清零
另外补充一下,测温和显示不一定要做到实时,一般的做法是经过8次采样之后进行平均,然后再进行计算和送显,测温,AD和显示可以用一个定时器进行中断,然后每次中断进行处理,这个定时器可以设定10ms,50ms,这个时间根据你需要的采样时间来设定,在中断中设定一个标志量,定时器中断后标志置1,在主程序的循环中用if(flg==1){...}来处理相应程序,在处理最后将标志清零
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
采用中断,多任务查询,好好协调,不至于有59ms的。
--------------------
请问怎么读定时器0的数值?
使用传送指令即可。
但是,如果定时器0处于“计数中”,数值的准确读取,就比较困难。
--------------------
请问怎么读定时器0的数值?
使用传送指令即可。
但是,如果定时器0处于“计数中”,数值的准确读取,就比较困难。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
外部计数最好用计数中断来做,要不很容易会漏掉脉冲的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用中断就好了
还有就是,如果你用的18B20测温的话,你就不能一直测了,过段时间采集一次吧
还有就是,如果你用的18B20测温的话,你就不能一直测了,过段时间采集一次吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询