蓝桥杯单片机NE555学习笔记

 蓝桥杯单片机NE555中一般采用采用定时器0进行计数频率

下面是一般使用的模版,我们对其进行一定讲解

#include <STC15F2K60S2.H>
unsigned int freq;//计数频率
unsigned int time_1s;
// 计数器
void Timer0Init(void) // 0微秒@12.000MHz
{
    AUXR &= 0x7F; // 定时器时钟12T模式
    TMOD &= 0xF0; // 设置定时器模式
    TMOD |= 0x05;
    TL0 = 0x00; // 设置定时初值
    TH0 = 0x00; // 设置定时初值
    TF0 = 0;    // 清除TF0标志
    TR0 = 1;    // 定时器0开始计时
}
// 定时器
void Timer1Init(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 Timer1Sever() interrupt 3
{
    if (++time_1s == 1000)
    {
        time_1s = 0;
        // 1秒定时器中断
        freq = TH0 << 8 | TL0; // 读取定时器0当前值
        TH0 = 0;
        TL0 = 0;
    }
}
void main()
{
}

 根据我们对ne555使用定时器0计脉冲,故C/非T 为1 模式选择 10 模式 为16位不自动装载

故我们根据软件对上面进行修改,TMOD |= 0x05; 
    TL0 = 0x00; // 设置定时初值
    TH0 = 0x00; // 设置定时初值

还有就是ne555所得数据我们用int型变量装载,可以直接对这个变量进行相除和取余

若使用此功能,我们需要把我们所写的按键显示模块中P3.4区域需不添加进去(例如第十届省赛题,按键显示模块使用的是bin区域)

对定时器1中进行这一块讲解

void Timer1Sever() interrupt 3
{
    if (++time_1s == 1000)
    {
        time_1s = 0;
        // 1秒定时器中断
        freq = TH0 << 8 | TL0; // 读取定时器0当前值
        TH0 = 0;
        TL0 = 0;
    }
}

freq = TH0 << 8 | TL0; // 读取定时器0当前值 

  • TH0 << 8
    将 TH0(高 8 位)左移 8 位,使其占据 16 位整数的高 8 位。
    例如:

    • 如果 TH0 = 0x12,则 TH0 << 8 结果为 0x1200

  • TL0
    直接取 TL0(低 8 位),占据 16 位整数的低 8 位。
    例如:

    • 如果 TL0 = 0x34,则 TL0 的值为 0x34

  • 按位或操作 |
    将高 8 位和低 8 位合并为 16 位整数。
    例如:

    • 0x1200 | 0x34 = 0x1234

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值