输出PWM信号问题咨询

2019-07-15 09:22发布

手边单片机只有一个向上计数的8位重装定时器,工作频率8MHz,我想输出一个40Khz的占空比可调的PWM信号,占空比可以从1-100%连续可调,调节步长1%。请大家指点一下如何编写,下面是我的定时器中断程序,Phase_data是控制占空比的变量,如果要想做到40K,则PWM周期要25us,做到100阶调整则定时器要0.25us中断一次了,中断程序无法实现,所以咨询一下要如何更改
void     ISR_PWM(void)                 //  定时器中断程序
{
                           
            if(Switch_Flag==1)
            {
         
                    
                    if (Phase_Counter<=Phase_data)
                    {
                             LED=1 ;
                    }
                    else
                    {
                             LED=0;        
                    }
                   if (Phase_Counter>=100)
                    {
                       Phase_Counter=0;
                    }         
                       Phase_Counter++;                 
                    
            }
         
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
余_恨
2019-07-15 16:02
用有WPM模块的芯片做
如STC15W系列

void STC15W_PWM_Init()
{
    P_SW2 |= 0x80;                 //使能访问XSFR
       
    PWMCFG = 0x00;                  //配置PWM的输出初始电平为低电平
   PWMCKS = 0x00;                  //选择PWM的时钟为Fosc/(0+1)
    PWMC = CYCLE;                   //设置PWM周期  1-32767 即频率
PWM5T1 = 1;     //设置PWM5第1次反转的PWM计数
PWM5T2 =240;      //设置PWM5第2次反转的PWM计数   占空比为(PWM2T2-PWM2T1)/PWMC
PWM5CR = 0x06;                                        //选择PWM5输出到P2.3,PWM5的T1匹配发生波形翻转时开启中断控

    PWMCR = 0xc0;                   //使能PWM信号输出 使能PWM5模块
        EA = 1;
        P_SW2 &= ~0x80;

}

void PWM_isr() interrupt 22 using 1
{
        PWMIF = 0x00;
        P_SW2 |= 0x80;
        PWM5T2 =  ;//中断改变此处的值就改变脉宽
        P_SW2 &= ~0x80;
}

一周热门 更多>