PWM波产生的方法及原理

2019-07-16 05:14发布

如休利用51单片机的来产生PWM波,用以控制led的亮度变化,在网上看过一些程序,有些地方不大明白,程序是这样的:
#include<reg52.h>
unsigned char cycle,pwm;
sbit led=P1^0;
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
bit flag;
TMOD=1;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
IE=0x82;
TR0=1;
cycle=10;
while(!flag)
  {
   delay(200000);
   pwm++;
   if(pwm==10)
    flag=1;
  }
while(flag)
  {
   delay(200000);
   pwm--;
   if(pwm==0)
    flag=0;
  }
}
void tim()interrupt 1
{
unsigned char count;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
count++;
if(count==pwm)////此处是什么意思呢?
  {
   led=1;
  }
  
if(count==10)
  {
   count=0;
   if(pwm!=0)///此处又是什么意思呢?
    led=0;
  }
}

感觉这个程序不是太好,因为烧到单片机观察到led虽然有亮度的变化,不过在由暗变的过程中有一个突然的跳跃,就是亮度一下子就上来了,请教高手指点迷津


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。