//為了保證代碼可以在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é)束。
{ }
本文引用地址:http://www.ex-cimer.com/article/201611/322213.htm
在上述中
USART0RX_VECTOR是定義中斷地址宏,其實(shí)就是一個(gè)中斷矢量值,例如,地址, 0xffe0 。
這個(gè)中斷矢量有芯片型號決定,一旦信號確定,那么所有的終端矢量也就確定了。
SPI0_rx是中斷函數(shù)名稱,使用者可以根據(jù)自己的喜好來編寫這個(gè)函數(shù)名。
實(shí)際例程
//**************************************************************************
//例程描述:利用定時(shí)器定時(shí)功能,實(shí)現(xiàn)P1.0方波輸出。
#include <msp430x14x.h>
{
WDTCTL = WDTPW + WDTHOLD;//停止看門狗WDT,不使用內(nèi)部看門狗定時(shí)器。
P1DIR |= 0x01;//設(shè)置P1.0口方向?yàn)檩敵觥?br />CCTL0 = CCIE;//設(shè)置捕獲/比較控制寄存器中CCIE位為1,CCR0捕獲/比較功能中斷為允許。
CCR0 = 50000;//捕獲/比較控制寄存器CCR0初值為5000。
TACTL = TASSEL_2 + MC_2;//設(shè)置定時(shí)器A控制寄存器TACTL,使時(shí)鐘源選擇為SMCLK輔助時(shí)鐘。
_BIS_SR(LPM0_bits + GIE);//進(jìn)入低功耗模式LPM0和開中斷
}//定時(shí)器A 中斷服務(wù)程序區(qū)
//當(dāng)IAR編譯器版本大于或等于2.0以上時(shí),則中斷寫法格式如下。
#pragma vector=TIMERA0_VECTOR//定時(shí)器A0中斷向量
__interrupt void Timer_A (void)//中斷函數(shù)
{
P1OUT ^= 0x01; //P1.0取反輸出
CCR0 += 50000; //重新載入CCR0捕獲/比較數(shù)據(jù)寄存器數(shù)據(jù)
}
//程序結(jié)束
//**************************************************************************
評論