MSP430F5529 (六)定時器Timer_A-2
實(shí)驗(yàn)二:比較模式-增減模式輸出PWM波
/*在比較和增減模式下產(chǎn)生PWM波(矩形波) */
/*提一個PWM波的用處:驅(qū)動直流電機(jī)。我們知道對于直流電機(jī),驅(qū)動它的電流的頻率并不影響轉(zhuǎn)速 ,只有占空比會影響轉(zhuǎn)速*/
/*開發(fā)板上P2.0是有外接排針的,所以用這一端口輸出PWM*/
/*看CPU引腳發(fā)現(xiàn),P2.0為TA1.1,也就是定時器A1的1號捕獲比較器輸出口*/
#include
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P2SEL|=BIT0; //聲明有特殊功能,不做普通I/O使用
P2DIR|=BIT0; //輸出
P2DS |=BIT0; //全力驅(qū)動,否則可能無法驅(qū)動電機(jī)
P2OUT&=~BIT0; //初始化輸出低電平
/*把SMCL配置為XT2 4MHZ*/
P5SEL=BIT2+BIT3; //聲明特殊功能,將用作外部時鐘晶振XT2輸入
UCSCTL6&=~XT2OFF; //開啟XT2
while(SFRIFG1 & OFIFG)
{
UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//清除3種時鐘錯誤標(biāo)志
SFRIFG1&=~(OFIFG);//清除時鐘錯誤標(biāo)志位
} //直到XT2從起振到振蕩正常,沒有錯誤發(fā)生
UCSCTL4|=SELS_5; //把SMCLK的時鐘源選為XT2 4MHZ
TA1CCTL0=CCIE; //定時器A1的捕獲比較器0開啟CCIFG位中斷
TA1CCR0=200; //置入計數(shù)終值,則PWM頻率為10KHZ
TA1CCTL1=CCIE; //捕獲比較器1開啟中斷
TA1CCR1=50; //占空比為75%
TA1CTL|=TACLR; //將計時器A1清零
TA1CTL|=TASSEL_2+MC_3; //定時器選擇SMCLK作為時鐘源,且為增減模式
TA1CCTL1=OUTMOD_4; //定時器A1中的捕獲比較器1,輸出模式為4翻轉(zhuǎn)
while(1);
}
//呼吸燈//
// 介紹: 該程序利用TIMER A 的 UP模式 在P1.3腳產(chǎn)生PWM輸出
// 將CCR0設(shè)置為1500來定義PWM的周期,利用循環(huán)不斷改變CCR1的值,
// 實(shí)現(xiàn)利用改變PWM的占空比來改變LED亮度.
// SMCLK = MCLK = TACLK = default DCO
#include
void delay_nms(unsigned int n)// 延時函數(shù)
{
unsigned int j;
for (j=0;j<(n);j++)
{
__delay_cycles(400); //太短會使LED顯得好像在常亮,太長就要等較長時間來觀察了
}
}
void main(void)
{
unsigned const PWMPeriod = 1500; //設(shè)置PWM周期參數(shù),const聲明此值不允許改變.該數(shù)值太大,會導(dǎo)致LED閃爍
volatile unsigned int i; //聲明變量i是隨時可變的,系統(tǒng)不要去優(yōu)化這個值
WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗
P1DIR |=BIT3; // 設(shè)置 P1.3為輸出
P1SEL |=BIT3; // 設(shè)置 P1.3為TA0.2輸出
TA0CCR0 = PWMPeriod; // 設(shè)置PWM 周期
TA0CCTL2 = OUTMOD_7; // 設(shè)置PWM 輸出模式為:7 - PWM復(fù)位/置位模式,
// 即輸出電平在TAR的值等于CCR2時復(fù)位為0,當(dāng)TAR的值等于CCR0時置位為1,改變CCR2,從而產(chǎn)生PWM。其實(shí)模式2也可以
TA0CTL= TASSEL_2 +MC_1; // 設(shè)置TIMERA的時鐘源為SMCLK, 計數(shù)模式為up,到CCR0再自動從0開始計數(shù)
while(1)
{
TA0CCR2=0;//確保最開始是暗的
//漸亮過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變長,改變PWM的占空比
for(i=0;i
TA0CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
//在暗的時候延長delay時間,可增強(qiáng)效果
}
//漸暗過程:不斷設(shè)置TA0CCR2的值,使翻轉(zhuǎn)的時間變短,改變PWM的占空比
for(i=PWMPeriod;i>0;i-=1)
{
TA0CCR2=i;
delay_nms(4-(i/500)); //占空比變化的延時,調(diào)整延遲時間可改變呼吸燈變暗的速度
//在暗的時候延長delay時間,可增強(qiáng)效果
}
TA0CCR2=0; //確保燈暗
delay_nms(250); //時間長一點(diǎn),增強(qiáng)視覺效果
}
}
評論