555定时器的频率检测

NE555可以产生一定频率的脉冲,可以通过单片机进行频率检测
首先来重新学习一下555定时器的原理

555定时器的频率检测_第1张图片
这个接的不太看得懂,先去复习一下数电
……
然后可以看到有一组排针
555定时器的频率检测_第2张图片
555定时的输出信号刚好和P3^4口相邻
而P3^4口又恰巧为定时器0对应计数模式的IO口
555定时器的频率检测_第3张图片
所以就可以测出555定时器产生的方波的频率的
大致思路:
定时器0用来计数,每一秒采集到的方波数即为频率
定时器1控制时间,每一秒产生一次中断,将定时器0中的数取出后清零
再来看一下定时器的相关寄存器的设置
在这里插入图片描述在这里插入图片描述
ET0不需要打开,因为定时器0不需要进入中断
555定时器的频率检测_第4张图片
555定时器的频率检测_第5张图片
对定时器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;
	}
}

还可以通过外部中断进行频率检测,不过略微麻烦……

Reference
http://forum.eepw.com.cn/thread/303164/1

你可能感兴趣的:(#,蓝桥杯——单片机)