(5)、中斷應用程序舉例(外部中斷):
void interrupt_initial()
{
P1DIR&=~BIT7; //P1.7為輸入
P1IE|=0x80; //P1.7中斷允許
P1IES|=0x00; //P1.7上升沿觸發(fā)
P1IFG=0; //P1.7中斷標志清除,對于多源中斷必須先清中斷標志再打開中斷
_EINT(); //總中斷允許
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1IFG&=~BIT7; //P1.7中斷標志清除
/*在此寫中斷服務子程序*/
}
? #pragma vector - 下面的函數(shù)是一個用于所列矢量的中斷
?__interrupt void - 識別中斷名稱
關閉局部中斷一般是給想關的特殊功能寄存器相關位置0
同樣以P1口外部中斷為例:
關閉局部中斷:
P1IE&=~BIT0;//關閉P1.0外部中斷
(2)、打開、關閉全局中斷:
_EINT();//打開總中斷,相當于51的EA=1;
_DINT();//關閉總中斷,相當于51的EA=0;
(3)、各中斷向量Interrupt Vectors:
#define BASICTIMER_VECTOR (0 * 2u) /* 0xFFE0 Basic Timer */
#define PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */
#define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */
#define USART1RX_VECTOR (3 * 2u) /* 0xFFE6 USART 1 Receive */
#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */
#define TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */
#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */
#define ADC12_VECTOR (7 * 2u) /* 0xFFEE ADC */
#define USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */
#define USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */
#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */
#define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */
#define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-6, TB */
#define TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */
#define NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */
#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */