单片机外设驱动-NE555频率测量
题目要求
在CT107D单片机综合实训平台上,利用NE555产生方波信号并测量其频率,具体功能要求如下:
[1] 上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。
[2] 用短路环将J13中的NAL与P34短接,NE555发生的信号输入到单片机的P34引脚。
[3] 单片机测量信号频率,并显示在数码管中,频率数据显示用6位数码管,单位是Hz,当显示长度不足6位时,未使用到的数码管熄灭,在最左边的1位数码管用“F”作为提示符。显示格式如下:
NE555
需要知道2点就可以:
[1] NE555电路是一个信号发生电路,其信号输出接到单片机的P34引脚,即单片机的T0引脚。
[2] 该信号的频率大小可以通过Rb3可调电位器改变。
因为NE555芯片基本上就是一个纯硬件的设计,一旦电路确定了,就没有变化了,单片机也不需要对它有任何的配置。所以,在整个单片机测量频率的过程中,跟NE555芯片一点儿关系都没有,实际上考查的是你应用定时/计数器测量信号频率的技术。
因为需要测量NE555的频率,所以我使用了定时器0计数模式来计算555的脉冲。
计数器初值设为最大,即来一次脉冲计数加一。
定时器1用来定时,1s采集一次555的频率数值。
void init_Timer()
{
AUXR |= 0x80;
////////////定时器0:计数(8位重装载) 定时器1:定时(16位)/////////////
TH0 = 0XFF; //设置定时0初值
TL0 = 0XFF; //设置定时0初值
TH1 = (65535 - 1000)/256; //设置定时1初值
TL1 = (65535 - 1000)%256; //设置定时1初值
TMOD = 0x16; //设置定时器模式
TR0 = 1; //定时器0开始计时
TR1 = 1; //定时器1开始计时
ET0 = 1; //定时器0的中断允许开关
ET1 = 1; //定时器1的中断允许开关
EA = 1;
}
//定时器0中断
void service1() interrupt 1
{
count_f++; //ne555频率
}
//定时器1中断
void service2() interrupt 3
{
static unsigned int cnt1;
TH1 = (65535 - 1000)/256; //设置定时初值
TL1 = (65535 - 1000)%256; //设置定时初值
cnt1++;
if(cnt1==100)//100ms
{
dat_f = count_f;
count_f = 0;
cnt1=0;
}
}
NE555实验效果
短接GND和NAL,用手调节一下Rb3,看看数码管上的数值是否变化了呢