//我之前在网上找了一些代码,写的都不太具体,于是我决定自己写一段……
//*******************************************************************************
// MSP-FET430P140 Demo - Software Toggle P2 when P1 IO interrupt Is Enabled
//
// Description: P1设置为IO使能中断,8路IO针对8路LED小灯闪烁,观察IO中断的工作原理;
//
// ACLK= n/a, MCLK= SMCLK= default DCO ~800k
//
// MSP430F149
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// 1--0 --|P1.x P2.x |--LED 1 or 0
//
// Chris Hardy
// Hurbust edu.
// 2012 6 24
// Built with IAR Embedded Workbench Version: 5.10A
//******************************************************************************
#include
unsigned char ISR_flag;
void InitIO(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
InitIO();
_EINT(); //开总中断
while(1)
{
LPM3;//进入睡眠模式
switch(ISR_flag)
{
case BIT0: P2OUT ^= BIT0; break;
case BIT1: P2OUT ^= BIT1; break;
case BIT2: P2OUT ^= BIT2; break;
case BIT3: P2OUT ^= BIT3; break;
case BIT4: P2OUT ^= BIT4; break;
case BIT5: P2OUT ^= BIT5; break;
case BIT6: P2OUT ^= BIT6; break;
case BIT7: P2OUT ^= BIT7; break;
} // Toggle P2 using exclusive-OR
}
}
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR(void)
{
ISR_flag =P1IFG; //读取中断标志位
P1IFG=0;//多源中断,需靠软件清除P1IFG
_BIC_SR_IRQ(LPM3_bits); //将CPU从睡眠模式唤醒
}
void InitIO(void)
{
P1DIR &=~0xff;//set P1 to input direction
P1IES |= 0xff;//set P1 1--0 to set the flag
P1IE |= 0xff;//enable P1.0 interrupt
P1IFG = 0;
P2DIR |= 0xff; // Set P2.0 to output direction
P2OUT = 0xff;//all LED off
}
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。