嵌入式 > 嵌入式开发 > 详情

P1 端口中断操作

发布时间:2024-03-14 发布时间:
|
/*******************************************************************************

* 功能 : P1.0用来控制LED的亮灭,软件延时50000,来翻转P1.0 *
* *
* MSP430F2274 *
* ----------------- VCC 3.0v *
* /|\ | XIN|- ___ *
* | | XOUT|- | *
* --|RST P1.2|-->LED-----| *
* +--key-->|P1.3 P1.1|-->LED-----| *
* |---key-->|P1.4 P1.0|-->LED-----| *
* | ------------------- *
* GND *
* 作者 : Singel *
* 时间 : 2008-10-11 16:36:00 *
* 调试环境 : IAR For MSP430 Embedded Workbench v3.42A *
********************************************************************************/

#include"msp430x22x4.h"


unsigned char keybuffer;
unsigned char scanflag;
unsigned char TEMP_KEY;
void Do_Without_PORT_Register( void )
{
P1IE = 0x00;
P1IFG = 0x00;
P1IE = 0x00;
}

void PORT_init( void )
{
P1DIR |= (BIT0+BIT1+BIT2);
P1OUT |= (BIT0+BIT1+BIT2);
P1DIR &=~ (BIT4+BIT3);
P1IES &=~ (BIT4+BIT3);
P1IE |= (BIT4+BIT3);
P1IFG &=~ (BIT4+BIT3);
}

void key_procss ( void )
{
TEMP_KEY = TEMP_KEY&0X18;
switch(TEMP_KEY)
{
case 0x10: P1OUT ^= BIT0+BIT1+BIT2;break;
case 0x08: P1OUT ^= BIT0+BIT1+BIT2;break;
}
P1IE |= (BIT4+BIT3);
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_12MHZ;
DCOCTL = CALBC1_12MHZ;
Do_Without_PORT_Register();
PORT_init();
_BIS_SR(GIE+LPM4_bits);
while(1)
{
if(scanflag)
{
scanflag = 0;
key_procss();
}
_BIS_SR(GIE + LPM4_bits);

}
}
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR ( void )
{
_BIC_SR_IRQ(LPM4_bits);
TEMP_KEY = P1IFG;
scanflag = 1;
P1IE &=~ (BIT4+BIT3);
P1IFG &=~ (BIT4+BIT3);
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
占先式内核(只带延时服务)