TMR 是指 Timer Register,中文名称为计时器寄存器。
TMR 在嵌入式系统中有着广泛的应用。它的主要功能是根据时钟信号定时触发相应的事件,例如切换管脚电平或执行指令等。
TMR 的工作原理可以简单理解为定时器的数字计时。当定时器的数字计时于设定的阈值相等时,系统会产生中断,触发相应事件的执行。
PWM 是 Pulse Width Modulation 的缩写,中文名称为脉宽调制。
PWM 信号可以看作一定时间内数字信号的高电平占空比,例如,1ms 中的 300us 为高电平,剩余的 700us 为低电平,则该 PWM 信号的占空比为 30%。
PWM 在嵌入式系统中的应用非常广泛,主要用于模拟模块控制、舵机控制、LED 亮度调节等。
TMR 和 PWM 密切相关,两者通常是配合使用。TMR 的主要功能是定时,而 PWM 是在定时的基础上,根据设定的占空比,控制输出信号的高低电平。
例如当 TMR 的数字计时器定时到达设定阈值时,设置的 PWM 占空比为 30%,则输出的 PWM 信号会在 1ms 中的前 300us 内为高电平,剩余的 700us 为低电平。
以 LED 亮度调节为例,如下代码可以实现基于 TMR 的 PWM 控制:
``` c
#include
void main()
TMOD = 0x01; // 定时器1模式1
TH1 = 0xFF; // 定时器1初始值
TL1 = 0xFF;
P1 = 0x00; // 初始设置为低电平
TR1 = 1; // 启动定时器1
while(1)
{
for(int i = 0; i < 255; i++)
{
P1 = i; // 根据计数器数值设置 LED 亮度
while(TF1 == 0); // 等待定时器1中断
TF1 = 0; // 清除中断标志位
}
}
```
在上面代码中,P1 是程序中连接 LED 的管脚。程序中将 TMR 设置为定时器模式 1,即高位计时,低位计数。每计数到 255,即约 1ms,中断一次,并根据计数值设置 LED 的亮度,从而实现基于 TMR 的 PWM 控制。