ysh329 发表于 2019-9-2 21:28:46

PWM占空比可调

求一个占空比可调,周期可调的,15KHZ的左右的PWM调试程序,用来做直流无极调压用

李扬 发表于 2019-9-3 19:30:49

/* 配置并启动PWM,fr-频率,dc-占空比 */
void ConfigPWM(unsigned int fr, unsigned char dc)
{
    unsigned inthigh, low;
    unsigned long tmp;
   
    tmp= (11059200/12) / fr;//计算一个周期所需的计数值
    high = (tmp*dc) / 100;      //计算高电平所需的计数值
    low= tmp - high;          //计算低电平所需的计数值
    high = 65536 - high + 12;   //计算高电平的重载值并补偿中断延时
    low= 65536 - low+ 12;   //计算低电平的重载值并补偿中断延时
    HighRH = (unsigned char)(high>>8); //高电平重载值拆分为高低字节
    HighRL = (unsigned char)high;
    LowRH= (unsigned char)(low>>8);//低电平重载值拆分为高低字节
    LowRL= (unsigned char)low;
   
    TMOD = 0x11;   //配置T0为模式1
    TH0 = HighRH;   //加载T0重载值
    TL0 = HighRL;
    ET0 = 1;      //使能T0中断
    TR0 = 1;      //启动T0
    PWMOUT = 1;   //输出高电平
    PWMOUT2 = 0;    //输出低电平
}       
/* T0中断服务函数,产生PWM输出 */
void InterruptTimer0() interrupt 1
{

        if ((PWMOUT == 1)||(PWMOUT2==0)) //当前输出为高电平时,装载低电平值并输出低电平
    {
      TH0 = LowRH;
      TL0 = LowRL;
      PWMOUT = 0;
                PWMOUT2=1;
               
    }
    else            //当前输出为低电平时,装载高电平值并输出高电平
    {
      TH0 = HighRH;
      TL0 = HighRL;
      PWMOUT = 1;
    }
}       

李扬 发表于 2019-9-3 19:32:16

想学单片机可以联系我们,我们专业单片机指导。
页: [1]
查看完整版本: PWM占空比可调