P22,P10输出频率为1.955KHz,占空比为33.4%的方波,两路互补输出,死区时间为18.5us。
void main()
{
/************************************系统初始化****************************************/
WDTCCR = 0x00; //关闭看门狗
//本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
CLKSWR = 0x51; //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
CLKDIV = 0x01; //Fosc 1分频得到Fcpu,Fcpu=16MHz
/*************************************PWM初始化****************************************/
P2M1 = P2M1&0xF0|0x08; //P22设置为推挽输出
// P1M0 = P1M0&0xF0|0x08; //P10设置为推挽输出
P0M0 = P0M0&0x0F|0x80; //P01设置为推挽输出
PWM0_MAP = 0x22; //PWM0通道映射P22口
// PWM01_MAP = 0x10; //PWM01通道映射P10口
PWM01_MAP = 0x01; //PWM01通道映射P01口
PWM0C = 0x01; //PWM0和PWM01均为高有效,时钟8分频
//互补模式:互补模式中对于PWM0的有效期间为占空比期间,PWM01的有效期间为占空比的互补期间
//PWM0组的周期寄存器 调节PWM组的周期
//PWM0组的占空比寄存器 调节PWM组的占空比
//PWM0组的死区寄存器 调节PWM组的死区时间
//周期计算 = 0x03ff / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x03ff /(16000000 / 8)
// = 1023 /2000000
// = 511.5us 约1.955KHZ
PWM0PH = 0x03; //周期高4位设置为0x03
PWM0PL = 0xFF; //周期低8位设置为0xFF
//占空比计算= 0x0155 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x0155 /(16000000 / 8)
// = 341 /2000000
// = 170.5us 占空比为 170.5/511.5 = 33.4%
PWM0DH = 0x01; //PWM0,PWM01高4位占空比0x01
PWM0DL = 0x55; //PWM0,PWM01低8位占空比0x55
//死区调节的是PWM01相对于PWM0左右各缩减的时间
//死区计算 = 0x025 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x025 /(16000000 / 8)
// = 37 /2000000
// = 18.5us
PWM0DTH = 0x00; //PWM0,PWM01高4位死区时间0x00
PWM0DTL = 0x25; //PWM0,PWM01低8位死区时间0x25
PWM0EN = 0x07; //使能PWM0,工作于互补模式
while(1);
}
|