thanh xuân
Ban Chủ Nhiệm
Trích mail của 1 bạn:
Em chào cô ạ, cô ơi, em đang học về interrupt I/O cho msp430G2553 thì bị vướng chỗ này ạ:
- Báo lỗi ở các dòng if ( P2IFG.3) : #18 expected a ")"
- Sau khi bỏ các lệnh trong phần interrupt ( bỏ if ( P2IFG.3 )) thì chương trình không chạy đoạn while(1) trong main.
- Bỏ dòng : _BIS_SR(LPM4_bits + GIE); thì chương trình chạy phần while(1) trong main nhưng không chạy ngắt khi nhấn nút.
Em đã em lại nhiều lần nhưng vẫn không biết sai chỗ nào, rất mong được sự hướng dẫn của cô, em cảm ơn cô nhiều ạ!
Em chào cô ạ, cô ơi, em đang học về interrupt I/O cho msp430G2553 thì bị vướng chỗ này ạ:
- Báo lỗi ở các dòng if ( P2IFG.3) : #18 expected a ")"
- Sau khi bỏ các lệnh trong phần interrupt ( bỏ if ( P2IFG.3 )) thì chương trình không chạy đoạn while(1) trong main.
- Bỏ dòng : _BIS_SR(LPM4_bits + GIE); thì chương trình chạy phần while(1) trong main nhưng không chạy ngắt khi nhấn nút.
Em đã em lại nhiều lần nhưng vẫn không biết sai chỗ nào, rất mong được sự hướng dẫn của cô, em cảm ơn cô nhiều ạ!
Code:
#include <msp430.h>
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
DCOCTL = 0; //tao 1MHZ
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
// config
P1SEL=0;
P1SEL2=0;
P1DIR |= BIT0+BIT1+BIT2+BIT3+BIT4;
// iNTERRUPT
P2IE |= BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P2IES |= BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
P2IFG &= ~BIT3 + ~BIT4 + ~BIT5 + ~BIT6 + ~BIT7;
_BIS_SR(LPM4_bits + GIE);
//main DK // example code
while(1)
{
P1OUT = BIT0 + BIT1;
_delay_cycles(1000000);
P1OUT = BIT3 + BIT4;
_delay_cycles(1000000);
P1OUT = BIT0 + BIT3;
_delay_cycles(1000000);
P1OUT = BIT1 + BIT4;
_delay_cycles(1000000);
}
}
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
P1OUT = 0x00;
if(P2IFG.3)
{
P1OUT = BIT1;
while (1)
{
if((P1IN & BIT5)==0) break;
P1OUT = BIT1 + BIT2 + BIT3;
}
}
else if(P2IFG.4)
P1OUT = BIT2;
else if (P2IFG.5)
P1OUT = BIT3;
else if (P2IFG.6)
P1OUT=BIT4;
else if (P2IFG.7)
{
P1OUT = 0x00;
WDTCTL = 0; // reset MCU
}
P2IFG &= ~BIT3 + ~BIT4 + ~BIT5 + ~BIT6 + ~BIT7;
}