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);
- }
|