蓝桥杯单片机外设驱动-5


单片机外设驱动-NE555频率测量

题目要求

在CT107D单片机综合实训平台上,利用NE555产生方波信号并测量其频率,具体功能要求如下:

[1] 上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。

[2] 用短路环将J13中的NAL与P34短接,NE555发生的信号输入到单片机的P34引脚。

[3] 单片机测量信号频率,并显示在数码管中,频率数据显示用6位数码管,单位是Hz,当显示长度不足6位时,未使用到的数码管熄灭,在最左边的1位数码管用“F”作为提示符。显示格式如下:

1

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,看看数码管上的数值是否变化了呢

ne555


文章作者: Rb菌
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Rb菌 !
  目录