單片機-一個簡單頻率測量
單位由一個信號源的項目,其中由一個功能,即實現一個方波信號頻率的測量。實際情況中,信號的頻率一般在15-25Hz。占空比在10%-90%之間。可以說頻率非常低。因為單位使用STC89C54的時間比較長,所以單位要求使用該單片機。這個項目非常簡單。因為時間很久了,所以我稍微回憶一下。
本文引用地址:http://www.104case.com/article/201809/388457.htm電路圖邏輯上是這樣的:
我將信號經過比例縮小跟隨后直接接到INT0管腳。具體想法是這樣的,設定一個10uM的定時器計時。每兩秒中作為一個測量周期。方波最會有下跳沿的,每一下跳沿作為一個周期的開始。兩秒計時結束后查看一共采集到K個下跳沿。那么該方波的周期就是T=2/K秒。頻率f=K/2。
有一個同事提供了頻率測量的思路。在三秒中時間范圍內統計INT0下跳沿出現的個數,即可統計出方波脈沖的頻率。因為下跳沿會觸發外部中斷,所以只需統計程序進入中斷程序的次數。我們來看看代碼實現的方法。
/*************************************/
//定時器初始化
//每1毫秒中斷一次
/*************************************/
#define SYS_CLK 12000000L
#define TIME0_LOAD -(SYS_CLK/12/1000)
typedef struct FREQ
{
unsigned char start;
unsigned int timer;
unsigned int int_Count;
unsigned int T;
}FREQ;
FREQ freq={0,0};
void Timer0_Init( )
{
TMOD = TMOD | 0x01;
TH0 = TIME0_LOAD>>8;
TL0 = TIME0_LOAD0x00FF;
EA =1;
ET0 =1;
TR0 =1;
}
/*************************************/
//定時器串口中斷程序
/*************************************/
void Timer0_isr( ) interrupt 1
{
評論