Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4
881 字
4 分钟
NE555相关知识和考点解析

一、定时器选择与原理#

频率测量本质是对脉冲上升沿计数,1s 内上升沿个数即为频率。通过查看原理图,使用跳线帽连接 NET_SIG(NE555 输出引脚)和 SIG_OUT(对应板子丝印 P34 ),这样NE555的输出就和P34引脚连接在一起。而定时器0在计数模式时,就是通过检测P34引脚的高低电平变化来对NE555输出脉冲进行计数。

根据手册可知,定时器 0 计数对应 P34 引脚,定时器 1 计数对应 P35 引脚。所以在频率测量中,不能使用定时器 1,而选择定时器 0 。测量原理是每 1s 获取一次计数结果并存入变量,由于最大值可能超过 256 (28 ),所以采用 16 位计数(216=65535 )。同时,需将定时器 0 的 C/T(计数 / 定时模式选择位)拉高,使其作为计数器工作,通过设置TMOD |= 0x05修改定时器 0 相关数据,且不影响定时器 1 功能。

二、定时器初始化#

  • 定时器 0 初始化

    void Timer0_Init(void) //1毫秒@12.000MHz
    {
    AUXR &= 0x7F; //定时器时钟12T模式
    TMOD &= 0xF0; //设置定时器模式
    TMOD |= 0x05; //定时器计数,16位不自动重载
    TL0 = 0x00; //设置定时初始值
    TH0 = 0x00; //设置定时初始值
    TF0 = 0; //清除TF0标志
    TR0 = 1; //定时器0开始计时
    }
  • 定时器 1 初始化:为取出计数结果,使用定时器 1 开启 1ms 定时,在中断中定时 1s 取数据。相关代码如下:

    unsigned int time_all_1s;
    void Timer1_Init(void) //1毫秒@12.000MHz
    {
    AUXR &= 0xBF; //定时器时钟12T模式
    TMOD &= 0x0F; //设置定时器模式
    TL1 = 0x18; //设置定时初始值
    TH1 = 0xFC; //设置定时初始值
    TF1 = 0; //清除TF1标志
    TR1 = 1; //定时器1开始计时
    ET1 = 1; //使能定时器1中断
    EA = 1; //开总中断
    }
    void Timer1_Isr(void) interrupt 3
    {
    if(++time_all_1s>=1000)
    {
    TR0 = 0;
    time_all_1s=0;
    Freq = TH0 << 8 | TL0; // 获取定时器0计数值,TH0左移8位与TL0组合
    TH0 = TL0 = 0; // 计数值清零,为下次获取做准备
    TR0 = 1;
    }
    }

三、主函数及初始化顺序#

main函数中,需遵循先初始化定时器 0,再初始化定时器 1 的顺序,否则第一次测量频率会出错。代码如下:

void main()
{
Timer0_Init();
Timer1_Init();
while(1)
{
// 主循环可添加其他处理逻辑
}
}

四、NE555 易错解析#

  • 第一次测量结果误差:第一次测量数据在 4T 上测可能导致值不对,解决方法是定义bit show_flag_first=0; ,在 1s 获取完值后将其置为 1,当show_flag_first为 1 时才进行数码管显示。相关代码如下:

    bit show_flag_first=0;
    void Seg_Proc()
    {
    if(show_flag_first)
    {
    //进行频率显示
    }
    }
    void Timer1_Isr(void) interrupt 3
    {
    if(++time_all_1s==1000)
    {
    show_flag_first=1;
    time_all_1s=0;
    Freq = TH0 << 8 | TL0;
    TH0 = TL0 = 0;
    }
    }
  • 接线问题:必须用跳线帽接上 P34 和 SIGNAL 线,否则无法测量。

  • 按键问题:由于按键最后一列会用到 P34,需屏蔽相关按键功能,避免对 P34 上升下降测量产生误差影响评分。

  • 注意事项

    1. 在1ms定时器1的中断函数中,当达到1s后计算频率脉冲次数时,要记得将计时time_all_1s置零,还要将TH0,TL0计数值清零!!!

    2. unsigned int time_all_1s;!!!!!!!!! 记住是unsigned int类型!!!!!!!!!!!!

      unsigned int Freq; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

NE555相关知识和考点解析
https://mizuki.mysqil.com/posts/蓝桥杯单片机/ne555相关知识和考点解析/
作者
风过无痕
发布于
2025-11-02
许可协议
CC BY 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00