标题: 通过单片机定时器产生PWM波的源程序 [打印本页]

作者: saber韩武    时间: 2016-3-27 21:30
标题: 通过单片机定时器产生PWM波的源程序
通过单片机定时器产生PWM波  PWM(脉宽调制)在很多场合都用得上,例如LED亮度控制,开关电源输出电圧控制等。 这里采用简单的定时器实现PWM波输出,通过更改定时器定时参数,

控制IO口输出 波形高低电平持续时间,实现PWM波。   代码如下:

   #include<reg52.h>

  #define T0_INTERRUPT 1  //T0中断向量号

#define PWMH_L 0x9C  

#define PWMH_H 0xFF   //PWM低电平时间0.1ms   

#define PWML_L 0xCE  #define PWML_H 0xFF   

//PWM高电平时间0.05ms    sbit LED1 = P1^0;   //常亮LED,作为对比,仿真看不出效果

sbit LED2 = P1^1;    //PWM驱动LED     

typedef unsigned char uchar; typedef unsigned int uint;   

void Init_T0();   

void main() {   

   LED1 = 0;      //点亮LED1   

LED2 = 1;      //熄灭LED2  

   Init_T0();    //初始化定时器0   

while(1)     {         

PCON |= 0x01; //单片机进入休眠模式,节省功耗

     }

}   



void Init_T0() {

     TMOD &= 0xF0;     

TMOD |= 0x01;  //16位定时器模式           

TH0 = PWML_H;

        TL0 = PWML_L;   

        EA = 1;       //开全局中断  

   ET0 = 1;      //允许T0中断     

TR0 = 1;      //启动定时器

}  



void T0_Interrupt() interrupt T0_INTERRUPT

{      

TF0 = 0;     

if(LED2 == 1)

    {         

LED2 = 0;        //设置低电平持续时间,LED2亮        

TH0 = PWMH_H;        

TL0 = PWMH_L;   

}     

else     

{         

LED2 = 1;        //设置高电平持续时间,LED2灭                 

TH0 = PWML_H;         

TL0 = PWML_L;  

   }

}



作者: idealize    时间: 2016-10-20 22:09
单片机睡眠模式挺有趣的





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1