应广单片机有两种硬件pwm,一种是8bit,另外一种是11bit,8bit的配置稍微简单一些.现在以pms133/psm134为例子,贴一个11bit pwm配置的例子.修改一下可以应用于应广其他系列的单片机中.要注意的是pms152的11bit pwm无法仿真,配置也稍微有点不同.在使用的时候要注意一下.再强调一遍,pms152的 11bit pwm 无法用仿真器仿真.只能通过烧片测试.
计算公式如下:
配置
/*11bit pwm输出OK*/
void PwmG0Init(void)
{
word usTmr;
usTmr=800;
/*上限低3位*/
pwmg0cubl=(usTmr<<6);
/*上限高8位*/
pwmg0cubh=(usTmr>>2);
usTmr=300;
/*占空比低3位*/
pwmg0dtl=usTmr<<6;
/*占空比高8位*/
pwmg0dth=usTmr>>2;
/*b7@0=计数值为0产生中断
b6:5@01=预分频为4
4:0@1-32分频*/
pwmg0s=0b1_10_10011;
/*b7@1=启用pwm
b6@默认,生成器输出状态
b5@0=输出极性不反转
b4@1=g2计数值清零
b3:b1@001=PB5;011=PA0;100=PB4
b0@1=(IHRC*2)*/
pwmg0c=0b1_0_0_1_100_0;
}
/*设置占空比*/
void SetRightPwmDt(void)
{
/*重新开启,可能出现关闭pwm的状况,因此设置占空比的的时候重新打开*/
pwmg0c=0b1_0_0_1_100_0;
/*占空比低3位*/
pwmg0dtl=usPwmCnt<<6;
/*占空比高8位*/
pwmg0dth=usPwmCnt>>2;
}
注意:8bit的pwm在使用的时候,即使设置占空比为0,仍有零星的波形输出.为了安全起见,11bit的pwm还是采用关闭pwm输出的策略去设置占空比为0
/*关闭*/
void ClosePwm(void)
{
pwmg0c=0b1_0_0_1_000_0;
/*对应的端口设置成0*/
}