1、首先确定工作模式为 “快速PWM模式”。计数器上限值由OCRnA中的值确定。结合下图选择模式15。
![图1](https://img-blog.csdnimg.cn/20200527143852706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3phb2hhbmc=,size_16,color_FFFFFF,t_70)
2、在模式15的情况下,根据下图可知,
COMnX1:COMnX0=0:1,OCnA只能输出50%的占空比,频率可调。
COMnX1:COMnX0=1:0,OCnA输出高电平。(原因看图3)
COMnX1:COMnX0=1:1,OCnA输出低电平。(原因看图3)
OCnB和OCnC可以输出任意占空比PWM波形。
![](https://img-blog.csdnimg.cn/20200527145118650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3phb2hhbmc=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20200527150252766.png)
根据要求编写程序
void T3_init(void)//定时器1,扫描检测io口电平变化
{
DDRE|=0x38;//设置PE3,PE4,PE5为输出
TCCR3A=0x6B;//COM3A1 COM3A0=1 0时,OC3A输出50%占空比的PWM信号
//COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30
0 1 1 0 1 0 1 1
//WGM31:WGM30=1 1 采用15模式快速PWM
//A、B比较输出模式,匹配A时取反,匹配B时置0(10).
TCCR3B=0X1A;//WGM33:WGM32=1 1 计数器数值累加到OCRn。 8分频
//ICNC3 ICES3 – WGM33 WGM32 CS32 CS31 CS30
1 1 0 1 0
// CS2 CS1 CS0=0 1 0 ;8分频
TCNT3=0x0000;//设置定时器的初始值
ETIMSK=0x00;//0x04;//溢出中断使能
OCR3A=9999; //PWM信号频率=8M/(8*(1+9999))=100Hz
OCR3B=1000; //OCR3B/OCR3A 占空比
OCR3C=2000;
}
由于OCA3在一个计数周期反转一次信号,所以该脚的PWM信号频率是其他引脚的二分之一。