//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;// 对引脚取反
}