NE555可以产生一定频率的脉冲,可以通过单片机进行频率检测
首先来重新学习一下555定时器的原理
这个接的不太看得懂,先去复习一下数电
……
然后可以看到有一组排针
555定时的输出信号刚好和P3^4口相邻
而P3^4口又恰巧为定时器0对应计数模式的IO口
所以就可以测出555定时器产生的方波的频率的
大致思路:
定时器0用来计数,每一秒采集到的方波数即为频率
定时器1控制时间,每一秒产生一次中断,将定时器0中的数取出后清零
再来看一下定时器的相关寄存器的设置
ET0不需要打开,因为定时器0不需要进入中断
对定时器0和定时器1进行初始化
//定时器的初始化
void Timer_Init()
{
TMOD=0x05; //定时器1-16位自动重装 定时器0-16位不可重装(计数)
TH1=(65535-10000)/256; //10ms进入中断
TL1=(65535-10000)%256;
TH0=0; //计数
TL0=0;
EA=1;
ET1=1; //允许定时器1进入中断
TR1=1;
TR0=1;
}
//定时器1的中断服务函数
void Timer_Service() interrupt 3
{
Timer_count++;
if(Timer_count==100) //1s为一次采样
{
Timer_count=0;
fre=TH0;
fre=(fre<<8)|TL0; //将定时器0中所计数放入变量fre中
TH0=0; //重新开始新的一次频率检测
TL0=0;
}
}
还可以通过外部中断进行频率检测,不过略微麻烦……