上次发帖简单说了下芯圣HC18M003的PWM设备,这次给出示例程序及输出波形。以下是2路独立PWM输出模式下的程序:
#include"holychip_define.h"
/***************************************************************************************
* @实现效果 PC0,PC2输出频率为3.9KHz的方波,PWM0占空比为50%,PWM01占空比为25%
***************************************************************************************/
void main() {
/**********************************系统初始化******************************************/
OSCCON = 0x04; //Fosc=32M Fcpu=4M(Fosc4分频 2T)
/************************************IO初始化******************************************/
ANSELC = 0xFF;
TRISC = 0xFF; //PC设置数字输出模式
/********************************PWM初始化*********************************************/
PWMMAP = 0x11; //PWM映射PC2 PC0
FLTMODE = 0x00; //禁止故障检测
PWM0C = 0x01; //时钟源RC32MHz/8
PWM0C |= 0x00; //PWM0和PWM01均为高有效
PWMM = 0x11; //独立输出模式,自动重载
PWM0PH = 0x03;
PWM0PL = 0xFF; //PWM周期配置
//PWM0周期 = [ PWM0PH : PWM0PL] * PWM0工作时钟源周期
// = 1023*(1/4000000)
// = 256 us
PWM0DH = 0x01;
PWM0DL = 0xFF; //PWM0占空比50%
PWM0DTH = 0x00;
PWM0DTL = 0xFF; //PWM01占空比为25%
PWMEN = 0x11; //PWM0和PWM01使能
while(1) {
}
}实际测试PC0和PC2的输出波形见下图:

黄色标记的PC2的输出波形,粉色标记的是PC0的输出波形。为了便于对比观察,测试的时候,人为改变了输出电压单位,使两边的波形不至于重叠。
可以看到,PWM的周期为256微秒左右(f=3.91111kHz,T=1/f=255.68μS≈256μS),误差不大。占空比与程序设置的是一致的。一个是50%,一个和是25%。
我要赚赏金
