怎样用51单片机检测频率??例如怎样辨别频率小于10Hz,怎样有大于等于10Hz???

[复制链接]
查看11 | 回复3 | 2010-7-2 13:50:12 | 显示全部楼层 |阅读模式
最好不要用定时器中断来做!

回复

使用道具 举报

千问 | 2010-7-2 13:50:12 | 显示全部楼层
方案1: 不用定时中断,可以用定时器计数方式吧? 用外部中断,测量下降沿(或上升沿)和下一个下降沿(或上升沿)之间的时间间隔(用定时器计数更精确,如果频率很高也可以用软件模拟的方式 做一个计数), 软件结构:在下降沿中断的同时,保存当前计数值,计数清零并重新启动计数器(如上,既可以是定时器计数,也可以软件计数), 算得计数的时间 + 中断响应的时间 就是T(周期) 倒数 就是频率了方案2:做一个循环,每次判断电平是否变化否则就 计数+1 如果跳变就保存计数值 做下一次准备 这样测量的值是一个周期内的固定电平的宽度值,如果占空比不是50%或固定的话 就方案3:改动下方案2,判断的时候同时判断是否由低变高这样是测定一个周期方案4:使用定时中
回复

使用道具 举报

千问 | 2010-7-2 13:50:12 | 显示全部楼层
可以使用P1口直接读取高低电平 但程序要写的短小而且一定要定好时间如果只有你说的10Hz左右 那在短时间内用IO口读取还是可以
不过用定时器要好些具体程序:sbit we = P1^0;char chk(){
uint i;
if(we == 0) i++; we = 1;}v
回复

使用道具 举报

千问 | 2010-7-2 13:50:12 | 显示全部楼层
最好是用定时器中断做,不然的话不准。频率高,数单位时间内的脉冲数,频率低,测两个脉冲的间隔如果不用中断做,你必须保证程序指令的时间在你设计时考虑计算了。10赫兹的频率还不算高,所以用纯软件做还看不出误差。比如你设置2个状态,端口为1是状态1,端口为0为状态2。每次当状态从1变化到2的时候计数,1秒之内看看能计几个就是频率了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行