定时器
定时器简介
定时器是单片机中常用的外设,用于实现定时和计数功能。定时器可以用于定时中断、PWM输出、定时计数等应用。 STC8G系列单片机共有3个定时器,分别是定时器0、定时器1和定时器2。其中,定时器0和定时器1是16位定时器,定时器2是8位定时器。 定时器的工作原理是通过计数器对时钟信号进行计数,当计数器的值达到预设的值时,触发定时器中断或输出PWM信号。
定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟
,则为定时方式
,此时定时器/计数器每 12 个时钟或者每 1 个时钟得到一个计数脉冲,计数值加 1;如果计数脉冲来自单片机外部引脚
,则为计数方式
,每来一个脉冲加 1。
定时器0
- 定时器的工作模式:
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不同占空比的输出。