本帖最后由 芯圣电子官方QQ 于 2023-7-25 10:14 编辑
#define ALLOCATE_EXTERN
#include "HC89F0541.h"
实现效果 P14,P15输出频率为100KHz,占空比为40%/50%的方波,两路互补输出,死区时间 为0.5us。
void main()
{
CLKSWR = 0x51; //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
CLKDIV = 0x01; //Fosc 1分频得到Fcpu,Fcpu=16MHz
P1M4 = 0xC2; //P14设置为推挽输出
P1M5 = 0xC2; //P15设置为推挽输出
PWM0_MAP = 0x14; //PWM0通道映射P14口
PWM01_MAP = 0x15; //PWM01通道映射P15口
PWMM |= 0x01; //PWM0自动重载
PWM0C = 0x01; //PWM0和PWM01均为高有效,时钟8分频
//独立模式下,PWM0和PWM01共用一个周期寄存器
//PWM0的占空比调节使用 PWM0组的占空比寄存器
//PWM01的占空比调节使用 PWM0组的死区寄存器
//周期计算 = 0x0014 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x0014 / (16000000 / 8)
// = 20 /2000000
// = 10us 100KHz
PWM0PH = 0x00; //周期高4位设置为0x00
PWM0PL = 0x14; //周期低8位设置为0x14
//占空比计算= 0x000A / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x000A / (16000000 / 8)
// = 10 / 2000000
// = 5us 占空比为50%
PWM0DH = 0x00; //PWM0,PWM01高4位占空比0x00
PWM0DL = 0x0A; //PWM0,PWM01低8位占空比0x0A
//死区调节的是PWM01相对于PWM0左右各缩减的时间
//死区计算 = 0x0001 / (Fosc / PWM分频系数) (Fosc见系统时钟配置的部分)
// = 0x0001 /(16000000 / 8)
// = 1 /2000000
// = 0.5us
PWM0DTH = 0x00; //PWM0,PWM01高4位死区时间0x00
PWM0DTL = 0x01; //PWM0,PWM01低8位死区时间0x01
PWMEN |= 0x11; //使能PWM1以及PWM01
while(1);
}
|