原创 51学习之IO模拟PWM

2011-2-23 17:52 2536 7 7 分类: MCU/ 嵌入式

/*******************************************************************/
// 程序说明:
// 利用定时器控制产生占空比可变的 PWM 波
// 按K1,PWM值减小,则占空比减小,LED 灯渐暗。
// 按K2,PWM值增加,则占空比增加,LED 灯渐亮。

/*********************************************************/

#include < reg52.h >
#include < intrins.h >

sbit  K1 = P1^4 ;                    //减少键
sbit  K2 = P1^5 ;                    //增加键

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

void delayms(unsigned char ms);

/**************************************************************************************
** Function Name:      main
** Descriptions:       主函数
** Input Parameters:   void
** Output parameters:  void
** Returned Value:     void
**--------------------------------------------------------------------
**************************************************************************************/
void main(void)

 P1 = 0xfe;
    P0 = 0xff;
    TMOD = 0x21 ;
    TH0 = 0xfc ;               //1ms延时常数 12M
    TL0 = 0x18 ;               //频率调节

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

 EA = 1;
 ET0 = 1;
 ET1 = 1;
   
 TR0 = 1 ;

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

      do{
            if(PWM != 0x02)
            {
       PWM--;
       delayms(10);
      }
   }
      while(K2 == 0);
 }
}

/**************************************************************************************
** Function Name:      timer0
** Descriptions:       定时器0中断服务程序
** Input Parameters:   void
** Output parameters:  void
** Returned Value:     void
**--------------------------------------------------------------------
**************************************************************************************/
void timer0() interrupt 1

    TR1 = 0 ;
    TH0 = 0xfc ;
    TL0 = 0x66 ;
    TH1 = PWM ;
    TR1 = 1 ;
    P0 = 0x00 ;            //启动输出
}


/**************************************************************************************
** Function Name:      timer1
** Descriptions:       定时器1中断服务程序
** Input Parameters:   void
** Output parameters:  void
** Returned Value:     void
**--------------------------------------------------------------------
**************************************************************************************/
void timer1() interrupt 3
{
    TR1 = 0 ;
    P0 = 0xff ;           //结束输出
}

/**************************************************************************************
** Function Name:      delayms
** Descriptions:       延时
** Input Parameters:   ms
** Output parameters:  void
** Returned Value:     void
**--------------------------------------------------------------------
**************************************************************************************/
void delayms(unsigned char ms)

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


/**************************************************************************************
 END FILE
**************************************************************************************/


文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条