標題: 通過單片機定時器產(chǎn)生PWM波的源程序 [打印本頁]

作者: saber韓武    時間: 2016-3-27 21:30
標題: 通過單片機定時器產(chǎn)生PWM波的源程序
通過單片機定時器產(chǎn)生PWM波  PWM(脈寬調(diào)制)在很多場合都用得上,例如LED亮度控制,開關(guān)電源輸出電圧控制等。 這里采用簡單的定時器實現(xiàn)PWM波輸出,通過更改定時器定時參數(shù),

控制IO口輸出 波形高低電平持續(xù)時間,實現(xiàn)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驅(qū)動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; //單片機進入休眠模式,節(jié)省功耗

     }

}   



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;        //設(shè)置低電平持續(xù)時間,LED2亮        

TH0 = PWMH_H;        

TL0 = PWMH_L;   

}     

else     

{         

LED2 = 1;        //設(shè)置高電平持續(xù)時間,LED2滅                 

TH0 = PWML_H;         

TL0 = PWML_L;  

   }

}



作者: idealize    時間: 2016-10-20 22:09
單片機睡眠模式挺有趣的





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1