单片机/MCUwilliam hill官网
直播中

满满长路

8年用户 139经验值
私信 关注
[文章]

定时中断和PWM

                        #include < reg51.h >
#include < intrins.h >

***it  K1 =P3^0 ;                    //增加键
***it  K2 =P3^1 ;                    //减少键
***it  P00 =P1^1;

unsigned char PWM=0xe7;   //赋初值

void delayms(unsigned char ms);

void main()
{

     P1=0xff;
    TMOD=0x21 ;                           //设置定时器的工作方式,将定时器1设置与工作方式2.将定时器0设置成工作方式1,
    TH0=0xff ;             //50us延时常数
    TL0=0xce ;            //频率调节

    TH1=PWM ;            //脉宽调节
    TL1=0 ;

     EA=1;
     ET0=1;
     ET1=1;
         PT0=1;
         PT1=1;

     TR0=1 ;
         TR1=1;

   while(1)
   {
     do{
            if(PWM!=0xff)
           {PWM++ ;delayms(10);}

         }
     while(K1==0);

     do{
           if(PWM!=0xce)
          {PWM-- ;delayms(10);}

          }
     while(K2==0);
   }
}

void timer0() interrupt 1
{
    TR1=0 ;
    TH0=0xff ;
    TL0=0xce ;
    TH1=PWM ;
    TR1=1 ;
    P00=0 ;      //启动输出
}


void timer1() interrupt 3
{
    TR1=0 ;
    P00=1 ;     //结束输出
}


// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)

{
    unsigned char i ;
    while(ms--)
     {
        for(i = 0 ; i < 120 ; i++) ;
     }
}



我想知道这个PWM调节led灯亮度的程序是怎么通过定时中断完成的,或者说在这里定时中断的作用是什么?

回帖(5)

张先生

2016-8-10 19:09:57

最佳答案

首先,你的定时器是通过电平反转产生一个方波。其次,你的摁键改变interrupt 3的时间,即改变了脉冲的平均输出电压。
最后,我想说:你是想问中断产生的原因是什么吧?答案:计数
举报

chenwei6991627

2016-8-10 20:28:07
定时器的作用是控制频率的,PWM的高电平控制LED的亮度
举报

满满长路

2016-8-11 08:05:47
引用: chenwei6991627 发表于 2016-08-10 20:28
定时器的作用是控制频率的,PWM的高电平控制LED的亮度

那么这是怎么触发定时中断的呢
举报

满满长路

2016-8-12 23:04:22
引用: 小炮速援 发表于 2016-8-11 00:20
首先,你的定时器是通过电平反转产生一个方波。其次,你的摁键改变interrupt 3的时间,即改变了脉冲的平均输出电压。
最后,我想说:你是想问中断产生的原因是什么吧?答案:计数

产生方波就能改变灯的亮度吗?
举报

满满长路

2016-8-12 23:05:31
引用: 小炮速援 发表于 2016-8-11 00:20
首先,你的定时器是通过电平反转产生一个方波。其次,你的摁键改变interrupt 3的时间,即改变了脉冲的平均输出电压。
最后,我想说:你是想问中断产生的原因是什么吧?答案:计数

产生方波就能引起灯的亮度不同吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分