打印

如何测量信号的周期

[复制链接]
1521|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
victor3l|  楼主 | 2012-8-16 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的输入信号的频率上限10Khz,单片机的晶振22M的,这个输入信号就相当是低频信号了,我要测其频率,也只能用测其周期转换成频率的方法。我把信号接到外部中断口,打开定时器0,配置定时功能,并且有外部中断和TR0共同决定其开始计数。外部中断服务子程序如下
void ser()interrupt 0
{
TR0 = 1;//打开定时器
temp1 = TH0;
temp2 = TL0;//读出定时器中的数据,就知道时间也就是周期了

TH0    = 0;
TL0    = 0;//把重装定时器中的初值
}
我之所以要在外部中断中才开定时器,是因为我怕在频率脉冲没来的时候,定时器已经工作了。这样就导致了每次读到的定时器中的数据是0。
如何做到,在外部中断开定时器,而且还能在中断中读到数据了?

相关帖子

沙发
ayb_ice| | 2012-8-16 11:15 | 只看该作者
频率较高就用频率法,频率较低就用周期法

使用特权

评论回复
板凳
@三月天| | 2012-8-16 13:06 | 只看该作者
试试定时器的捕获功能。一般的MCU都有这个功能。

使用特权

评论回复
地板
victor3l|  楼主 | 2012-8-16 16:56 | 只看该作者
2# ayb_ice
我就是测周期了,把信号连载外部中断上,在他的服务子程序中计算周期程序如下
void int0() interrupt 0  //外部中断0
{
TR0= 0;//不允许定时器工作
speak = ~speak;
tempH = TH0;
tempL = TL0; //把定时器中的数据读走,这里代表多少时间
TH0   = 0;
TL0   = 0;//这里重新给定时器0装初值
TR0   = 1;//启动定时器0,开始计数。
}
当我把信号接到外部中断引脚上时,程序走到这个中断中了,但是我像上面那样读定时器0中的数据,为什么每次都读得是0,这是为什么啊?按道理第一次读得是0,但是以后就不应该在是0,可是这里始终是0.为什么啊?
这个定时器中的数据就是该信号的一个周期时间吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

308

帖子

5

粉丝