找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2772|回復: 1
打印 上一主題 下一主題
收起左側(cè)

通過單片機定時器產(chǎn)生PWM波的源程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:111063 發(fā)表于 2016-3-27 21:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通過單片機定時器產(chǎn)生PWM波  PWM(脈寬調(diào)制)在很多場合都用得上,例如LED亮度控制,開關電源輸出電圧控制等。 這里采用簡單的定時器實現(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;        //設置低電平持續(xù)時間,LED2亮        

TH0 = PWMH_H;        

TL0 = PWMH_L;   

}     

else     

{         

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

TH0 = PWML_H;         

TL0 = PWML_L;  

   }

}


評分

參與人數(shù) 2黑幣 +81 收起 理由
暗光 + 31 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:81140 發(fā)表于 2016-10-20 22:09 | 只看該作者
單片機睡眠模式挺有趣的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表