手边单片机只有一个向上计数的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++;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如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;
}
一周热门 更多>