PWM输出问题

2019-03-24 19:27发布

用51模拟PWM波,为什么去除for(i=0;i<5000;i++); 程序就有问题,还有在运行这句话的过程中,定时器0应该也在运行,不会产生问题吗大家帮忙看看!谢谢!
#include"reg52.h"sbit led=P1^0;char count,ton;void main(){ int i; TMOD=0x01; TH0=(65535-88)/256; TL0=(65535-88)%256; EA=1; ET0=1; TF0=0; TR0=1; //ton=50 ; while(1)  {         for(i=0;i<5000;i++);  ton++;     if(ton>=100)ton=0;      }}
void time() interrupt 1 using 1{ TH0=(65535-88)/256; TL0=(65535-88)%256; count++; if(count>=100)count=0,led=0; if(count==ton)led=1;} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
孤獨の快樂
1楼-- · 2019-03-25 02:09

ton值的改变影响着PWM的占空比,for只是个延迟,为了使占空比变化比较慢

没延迟的话,占空比快速变化,波形就显得乱吧

jishuaihu
2楼-- · 2019-03-25 02:29
对于这种情况我习惯在定时器中设置两个值,设一个标志,不同的时候进定时器中断后给定时器赋得值不一样,这样就实现了占空比的调节,想调节占空比的话在主程序里面改变一些给定时器赋值的变量就可以了。不知道说清楚没有
Li_Lei
3楼-- · 2019-03-25 04:46

去除for(i=0;i<5000;i++);

程序逻辑没有问题,只是ton加得太快了,比pwm频率还高所以乱了。

很多51都带硬件pwm,建议你看看。

定时器靠硬件逻辑电路工作。

 

[ 本帖最后由 huo_hu 于 2012-1-17 11:28 编辑 ]

一周热门 更多>