1. 用单片机测频率的程序
我只有51的程序,没有MSP430的,但是我可以告诉您的思路:
1、你将输入信号输入外部中断引脚。
2、开启您的定时器T0;
3、使用定时器T0计时5S,然后读取外部中断了多少次。
4、计算外部中断的次数N,这样你就得到你所需要的频率了。那就是N*12=1分钟的次数。
2. 测周法测频率怎么用单片机实现。
主要是利用单片机的定时器计时,测量2个时间参数t1和t2,即如下所示:
计算信号的一个波形的周期t=t1+t2 则可以求出频率f=1/t
3. 基于89c51单片机实现测频,利用测频法以及测周法(两种方法测不同频率但是需要在同一个程序中)
先说测脉冲个数,用于频率较高场合,直接测周期用于频率较低场合。先默认计数法,当算得频率低于某一值时,改为测周期法,当频率高于某一值时,采用测脉冲个数法。
4. 51单片机测周C程序怎么写,计算两个脉冲之间的时间,程序怎么写!
或是低电平脉冲则直接接到单片机外部中断的引脚上就行了,一个低脉冲过来,进入中断,启动定时器/计数器,再来一个脉冲,再进入中断,关闭定时器/计数器,取得这个时间段的时钟周期,根据晶振频率算出时间就OK了。是不是很简单?
5. 51单片机制作频率计,测周法如何测量(用T0和T1两个就可以了吗),求大虾帮忙啊,最好详细点
#include<REG51.H>
#defineU8unsignedchar
U8codetab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};
U8codescn[]={0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管
U8buf[4]={0,0,0,0};//显示缓冲区
U8cnt=0;//扫描计数
unsignedintfreq=0;
unsignedintF;
voidmain(void)
{EA=1;//允许中断
TMOD=0x01;//设定时器0为模式1(16位)
ET0=1;//定时器0中断允许
TH0=(65536-5000)/256;//晶振12MHz,中断周期5mS
TL0=(65536-5000)%256;;
TR0=1;//开始计数
PX0=1;//外部中断优先级高
EX0=1;//允许外部中断
IT0=1;//外部中断下降沿触发
while(1);
}
voidexint0(void)interrupt0//外部中断0服务程序
{freq++;
}
voidtimeint(void)interrupt1//定时器0中断服务程序
{chari;
TH0=(65536-5000)/256;//晶振12MHz,中断周期5mS
TL0=(65536-5000)%256;;
i=cnt&0x03;//求应点亮的LED号(从左到右依次为0,1,2,3)
P0=tab[buf[i]];//笔划代码送P0口
P2=scn[i];//控制扫描码送P2口
cnt++;
if(cnt==200)
{cnt=0;//到1秒钟,显示的数字加一
F=freq;freq=0;
buf[0]=F/1000;
buf[1]=(F/100)%10;
buf[2]=(F/10)%10;
buf[3]=F%10;
}
}
6. 51单片机测频率的程序
测频率时,频率高的时候,采用“定时计数法”。
楼上给出的“开启一个定时器,计算一定时间t内的count值”,就是这种方法。
但是,频率低的时候,这种方法是不适用的。
因为想要计几个数,就要花费很长的时间。
故此,频率低的时候,应该使用“测量周期法”,再换算成频率。