#include <msp430x24x.h> //130731調試通過
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char i = 0,j = 0;
void DelayMs(unsigned int ms)
{
unsigned char j;
while(--ms)
{
for(j=130;j>0;--j);
// _NOP();
}
}
/***** 定時器A 初使化 *******/
void TimerA_Init(void)
{
CCTL0 = CCIE; //使能CCR0中斷
CCR0 = 5000;
TACTL = TASSEL_2 + ID_0 + MC_1; //定時器A的時鐘源選擇SMCLK,增計數模式
}
/**** 定時器B 初使化 *****/
void TimerB_Init (void)
{
TBCCTL0 = CCIE; // INTERRUPT ENABLE
TBCCR0 = 5000; //
TBCTL = TBSSEL_2 + ID0 + MC_1; //ID_2 + ID1 +
}
void SystemInit(void)
{
// WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
/* DCOCTL |= 0xE0;
BCSCTL1 &= 0x00;
BCSCTL1 |= 0x47;
BCSCTL2 &= 0x00;
BCSCTL2 |= 0x88;*/
P2DIR = 0xff; //設置P2口方向為輸出
P2OUT = 0x00;
P5DIR = BIT4; //設置P6口方向為輸出
P5OUT = BIT4;
P1DIR = BIT1; //設置P6口方向為輸出
P1OUT &= ~BIT1;
}
void Wdt(void)
{
WDTCTL |= WDTPW | WDT_MDLY_8;//以SMCLK進行32ms的延遲
IE1 |= WDTIE; // 開WDT中斷
}
void main(void)
{
SystemInit();
TimerA_Init();
TimerB_Init();
Wdt();
_EINT(); //使能全局中斷
for(;;)
{
P5OUT ^= BIT4;
DelayMs(200);
__low_power_mode_4(); // 進入LPM4模式
}
}
/*******************************************
函數名稱:Timer_A
功 能:定時器A的中斷服務函數,在這里通過標志
控制流水燈的流動方向和流動速度
參 數:無
返回值 :無
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(i++ >19)
{
i=0;
P2OUT ^= 0xF0;
}
}
/****** 定時器B 中斷處理 ***********/
#pragma vector = TIMERB0_VECTOR
__interrupt void Timer_B0 (void)
{
if(j++ > 5)
{
j = 0;
P2OUT ^= 0x0F;
// __low_power_mode_off_on_exit(); // 退出低功耗模式
}
}
/****** 看門狗 中斷服務子程序***********/
#pragma vector = WDT_VECTOR
__interrupt void WDT_IRQ(void)
{
__low_power_mode_off_on_exit(); // 退出低功耗模式
P1OUT ^= BIT1;// 對引腳取反
}