MSP430學(xué)習(xí)筆記2-跑馬燈程序,熟悉定時器寄存器的配置
這個例子主要還是熟悉有關(guān)定時器A的寄存器配置以及IAR的配置方式。
/***********************************************
程序功能:實現(xiàn)流水燈以三種流動方式和四種流動速度
的不同組合而進行點亮"流動"
------------------------------------------------
撥碼開關(guān)設(shè)置:將LED位撥至ON,其余撥至OFF
測試說明:觀察流水燈流動順序和速度的變化
************************************************/
#include
typedefunsignedintuint;
uinti=0,j=0,dir=0;
uintflag=0,speed=0;//flag--燈光流動方式,speed--燈光流動速度
/****************主函數(shù)****************/
voidmain(void)
{
/*下面六行程序關(guān)閉所有的IO口*/
P1DIR=0XFF;P1OUT=0XFF;
P2DIR=0XFF;P2OUT=0XFF;
P3DIR=0XFF;P3OUT=0XFF;
P4DIR=0XFF;P4OUT=0XFF;
P5DIR=0XFF;P5OUT=0XFF;
P6DIR=0XFF;P6OUT=0XFF;
WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗
P6DIR|=BIT2;P6OUT|=BIT2;//關(guān)閉電平轉(zhuǎn)換
P5OUT&=~BIT7;
CCTL0=CCIE;//使能CCR0中斷
CCR0=50000;
TACTL=TASSEL_2+ID_3+MC_1;//定時器A的時鐘源選擇SMCLK,8分頻增計數(shù)模式
P2DIR=0xff;//設(shè)置P2口方向為輸出
P2OUT=0xff;
_EINT();//使能全局中斷
LPM0;//CPU進入LPM0模式各時鐘全部工作
}
/*******************************************
函數(shù)名稱:Timer_A
功能:定時器A的中斷服務(wù)函數(shù),在這里通過標志
控制流水燈的流動方向和流動速度
參數(shù):無
返回值:無
********************************************/
#pragmavector=TIMERA0_VECTOR
__interruptvoidTimer_A(void)
{
if(flag==0)
{
P2OUT=~(0x80>>(i++));//燈的點亮順序D8->D1
}
elseif(flag==1)
{
P2OUT=~(0x01<<(i++));//燈的點亮順序D1->D8
}
else
{
if(dir)//燈的點亮順序D8->D1,D1->D8,循環(huán)繞圈
{
P2OUT=~(0x80>>(i++));
}
else
{
P2OUT=~(0x01<<(i++));
}
}
if(i==8)
{
i=0;
dir=~dir;
}
j++;
if(j==10)
{
i=0;
j=0;
flag++;
if(flag==4)flag=0;
switch(speed)//根據(jù)speed的值來選擇相應(yīng)的速度,速度的選擇主要通過改變分頻來實現(xiàn)
{
case0:
TACTL&=~(ID0+ID1);//這個地方其實沒必要,意思是清零TACTL的78兩位
//ID1的值是0x0080ID2的值是0x0040通過計算就可以得出
TACTL|=ID_3;//改為八分頻
break;
case1:
TACTL&=~(ID0+ID1);
TACTL|=ID_2;
break;
case2:
TACTL&=~(ID0+ID1);
TACTL|=ID_1;
break;
case3:
TACTL&=~(ID0+ID1);
TACTL|=ID_0;
break;
default:
break;
}
if(flag!=3)speed++;
if(speed==4)speed=0;
}
}