![]() |
小优化: 在占空比为0或100时关闭T0中断,否则开启T0中断。 这样configpwm()可以不用分成2个函数。
|
pwm工作期间只能在中断期间操作pwmout,否则可能会闪烁。 configpwm()要分成2个函数。一个仅用于计算High,Low的加载值,另一个配置T0,开启或关闭T0。 High,Low的加载值仅在T0中断处理更新。
|
PWM 是周期不变,占空比变化的信号。 定时器应设置为固定周期,定时时间到就对一个计数器进行加一操作。 计数器值小于占空比输出高电平;大于占空比输出低电平。 计数器值如果大于 PWM 周期则计数器清零。 |
lkc8210 发表于 2025-1-15 09:33 感谢,我去试试看 |
WL0123 发表于 2025-1-15 08:10 好的,谢谢了 |
WL0123 发表于 2025-1-15 08:10 什么人工智%发言? |
41/42行+12太小了 最少要加30 |
调光灯出现闪烁是因为PWM周期大于20ms。楼主用改变定时中断周期来改变占空比的方式不妥。 //以200um中断周期为例,占空比0~100% void Timer0Interrupt(void) interrupt 1 { static unsigned char count=0; TH0 = 0xFF; TL0 = 0x38; if(++count>=100)count=0; // num值在主函数中由按键调整0~100 if(count>=num)OUT=0;//暗 else OUT=1;//亮 } |