標題:
通過單片機定時器產(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