Skip to content

定时器

定时器简介

定时器是单片机中常用的外设,用于实现定时和计数功能。定时器可以用于定时中断、PWM输出、定时计数等应用。 STC8G系列单片机共有3个定时器,分别是定时器0、定时器1和定时器2。其中,定时器0和定时器1是16位定时器,定时器2是8位定时器。 定时器的工作原理是通过计数器对时钟信号进行计数,当计数器的值达到预设的值时,触发定时器中断或输出PWM信号。

定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12 个时钟或者每 1 个时钟得到一个计数脉冲,计数值加 1;如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加 1。

定时器0

工作模式TMOD

  • 定时器的工作模式:
c
    // 修改定时器模式为模式1
    TMOD = 0x01; //16位不自动重装模式
  • 定时器0中断处理函数:
c
    // 定时器0中断处理函数
    void timer0_isr() interrupt 1
    {
        // 中断处理代码
        // 在模式1下,定时器0溢出后,TH0和TL0需要手动装载初值,所以可以设置不同的值.
        TH0 = 0x00; // 定时器0高8位初值
        TL0 = 0x00; // 定时器0低8位初值
    }
  • 启动定时器0:
c
    // 启动定时器0
    TR0 = 1; // 启动定时器0
    ET0 = 1; // 使能定时器0中断
    EA = 1;  // 使能总中断
  • 启动之前,需要设置定时器初值
c
    // 设置定时器初值
    TH0 = 0x00; // 定时器0高8位初值
    TL0 = 0x00; // 定时器0低8位初值

在模式1下,定时器0溢出后,TH0和TL0需要手动装载初值,所以可以设置不同的值.从而形成不同的定时时间,连接一个引脚,可以实现PWM不同占空比的输出。