电路图逻辑上是这样的:

我将信号经过比例缩小跟随后直接接到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
{