//為了保證代碼可以在IAR編譯器的任何版本中都能正確得到編譯,所以作以下的條件編譯。
#ifdef __IAR_SYSTEMS_ICC__ //如果編譯器是IAR, 那么以下將被編譯。
#if __VER__ >= 200
#pragma vector=USART0RX_VECTOR //在IAR2.0以上中斷函數(shù)聲明。
__interrupt void SPI0_rx (void)
#else //在IAR2.0以下中斷函數(shù)聲明。
interrupt[USART0RX_VECTOR] void SPI0_rx (void)
#endif //IAR中斷函數(shù)聲明結(jié)束。
{ }
在上述中
USART0RX_VECTOR 是定義中斷地址宏,其實就是一個中斷矢量值,例如,地址, 0xffe0 。
這個中斷矢量有芯片型號決定,一旦信號確定,那么所有的終端矢量也就確定了。
SPI0_rx 是中斷函數(shù)名稱,使用者可以根據(jù)自己的喜好來編寫這個函數(shù)名。
實際例程
//************************************************************************** //例程描述:利用定時器定時功能,實現(xiàn)P1.0方波輸出。
#include <msp430x14x.h>
{ WDTCTL = WDTPW + WDTHOLD; //停止看門狗WDT,不使用內(nèi)部看門狗定時器。 P1DIR |= 0x01; //設(shè)置P1.0口方向為輸出。 CCTL0 = CCIE; //設(shè)置捕獲/比較控制寄存器中CCIE位為1,CCR0捕獲/比較功能中斷為允許。 CCR0 = 50000; //捕獲/比較控制寄存器CCR0初值為5000。 TACTL = TASSEL_2 + MC_2; //設(shè)置定時器A控制寄存器TACTL,使時鐘源選擇為SMCLK輔助時鐘。 _BIS_SR(LPM0_bits + GIE); //進入低功耗模式LPM0和開中斷 }
//定時器A 中斷服務(wù)程序區(qū) //當IAR編譯器版本大于或等于2.0以上時,則中斷寫法格式如下。 #pragma vector=TIMERA0_VECTOR //定時器A0中斷向量 __interrupt void Timer_A (void) //中斷函數(shù) { P1OUT ^= 0x01; //P1.0取反輸出 CCR0 += 50000; //重新載入CCR0捕獲/比較數(shù)據(jù)寄存器數(shù)據(jù) }
//程序結(jié)束 //**************************************************************************
|