使用8G1K08 20pin的单片机,使用PCA0 模块的 PWM模式产生PWM方波;
PWM 初始化及占空比设置代码如下。其中 adc_value 为10位adc采样值,范围为0 ~1023;
`#include "pwm.h"
void PWM_Init(void)
{
P3M0 &= ~0x20;
P3M1 &= ~0x20;
P_SW1 &= ~(0X20);
P_SW1 |= (0X10); // 切换PCA0 的引脚为P35
CCON = 0X00;
CMOD = 0X0A;
CCAPM0 = 0X42;
PCA_PWM0 |= 0xc0;
CL = 0;
CH = 0;
// 下边的三个值共同绝顶初始占空比
PWM_Duty(1024/2);
CCON |= 0X40;
}
void PWM_Duty(unsigned int adc_value)
{
// 首先将 PCA_PWM0 的 EPC0H 初始化为0,然后或上adc_value的最高位;
PCA_PWM0 &= ~(0X02);
PCA_PWM0 |= ((adc_value >> 9) & 0x02);
// 然后设置 PCA_PWM0 的 XCCAP0H (5:4)
PCA_PWM0 &= ~(0X30);
PCA_PWM0 |= ((adc_value >> 5) & 0x30);
CCAP0H = (adc_value & 0xff);
}
`
现象:
频率符合预期;
占空比看上去不太对。 求大神帮忙看下占空比设置是否正确。
另外有个小疑问, 这个PCA的计数器是16位的, 如果将CH,CL 设置为0, 等计数器溢出后是从多少开始计数, 需不需要软件设置 CH = 1111 1100 CL = 0000 0000