/*******************************************************************************
文件名:main.c
描述:对系统进行初始化,包括时钟和P1口中断等。系统进入LPM3低功耗模式。当P1.7输入
上升沿时,触发P1口中断,修改标志位flag并退出LPM3低功耗模式,程序进入while
循环,LED1持续闪烁。
版本:1.0 2011-10-07
目标板:MSP430 LaunchPad
******************************************************************************/
#include "io430.h"
void InitSys();
__interrupt void Port1();
unsigned char flag;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitSys();
LPM3;
while(1)
{
if(flag == 1)
{
volatile unsigned int i;
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
i = 50000; // Delay
while (i--);
}
}
}
/*******************************************************************************
系统初始化
*******************************************************************************/
void InitSys()
{
unsigned int iq0;
//使用XT2振荡器
BCSCTL1 &= ~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; //清除振荡器失效标志
for(iq0 = 0xff;iq0 > 0;iq0--); //延时,等待XT2起振
}
while((IFG1 & OFIFG) != 0); //判断XT2是否起振
BCSCTL2 = SELM_2 + SELS; //选择MCLK、SMCLK为XT2
//以下填充用户代码,对各种模块、中断、外围设备等进行初始化
flag = 0;
P1DIR |= 0x01; // Set P1.0 to output direction
P1OUT = 0x00; // Toggle P1.0 using exclusive-OR
P1IE = 0x80; //打开P1口中断
P1IFG = 0x00; //复位P1口中断标志
P1IES = 0x00; //P1中断触发方式,本程序选择上升沿触发
__enable_interrupt(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
/*******************************************************************************
端口1中断函数
多中断中断源:P1IFG.0~P1IFG7
进入中断后应首先判断中断源,退出中断前应清除中断标志,否则将再次触发中断
*******************************************************************************/
#pragma vector = PORT1_VECTOR
__interrupt void Port1()
{
//以下为参考处理程序,不适用的端口应当删除其对于中断源的判断。
if((P1IFG & BIT7) == BIT7)
{
//处理P1IN.7中断
P1IFG &= ~BIT7; //清除中断标志
//以下填充用户代码
flag = 1;
}
LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}