編譯器能提供的中斷向量有幾個
A. 8086可容納幾個中斷向量
8086的中斷向量表存放在內存的前1K位元組,也就是地址為00000H—003FFH的地方。
中斷向量表可容納256個中斷向量,對應於類型號0—255,每一項佔用4個位元組,用來存放相應類型的中斷服務程序的入口地址。
B. 8086的中斷向量包含什麼內容一個中斷類型號為13H
存放中斷服務程序的入口地址,跳轉到中斷服務程序的入口地址。
在arm處理器中中斷向量的大小為4個位元組。在中斷向量裡面不是存儲的中斷服務程序的入口地址,而是跳轉到中斷服務程序的可執行代碼。
CPU要通過中斷號來找到中斷向量,所以要在內存中建立一張中斷向量查詢表。(在32位保護模式下該表稱為中斷描述符表),因為32位微機中有256個中斷向量,每個中斷向量大小為4Byte,所以整張表大小為1KB。因為中斷向量按照中斷號從0地址開始順序排列,所以任意一個中斷號為N的中斷向量的地址為中斷號N*4。
(2)編譯器能提供的中斷向量有幾個擴展閱讀:
注意事項:
中斷向量的名稱在WinAVR的最近幾個版本中有所變化,是微調。正是因為是微調,如果不注意,將會出現難以發現的錯誤。
最好的辦法就是打開查看X:WinAVR-20100110avrincludeavr路徑下的使用的處理器所對應的IO定義頭文件。
使用C語言編寫的處理代碼,主要考慮中斷功能上的處理,而不需要考慮現場保護和恢復等問題。編譯器會自動加入代碼實現中斷現場的保護,並在中斷結束時自動恢復現場。但如果在中斷服務程序中需要修改某些全局變數時,是否需要保護這些變數的初值將由編程員自行決定和實施。
C. msp430編程定時器B的中斷
微控論壇原創主貼 作者:bobo 微控論壇特約
因DC的邀請寫一個有關中斷的東東,我也接觸430不久只能以自己的心得體會更大家分享,若有紕漏懇請見諒。MSP430用戶手冊上有的中斷介紹我就不贅述了,大家可以看User Guider.我講的主要是書上沒有的,或者是點的不透的。希望對大家有用。
1.中斷嵌套,優先順序
430總中斷的控制位是狀態寄存器內的GIE位(該位在SR寄存器內),該位在復位狀態下,所有的可屏蔽中斷都不會發生響應。可屏蔽中斷又分為單中斷源和多中斷源的。單中斷源的一般響應了中斷服務程序中斷標志位就自動清零,而多中斷源的則要求查詢某個寄存器後中斷標志位才會清零。由於大多數人接觸的第一款單片機通常是51,51單片機CPU在響應低優先順序的中斷程序過程中若有更高優先順序的中斷發生,單片機就會去執行高優先順序,這個過程已經產生了中斷嵌套。而430單片機則不同,如果在響應低優先順序中斷服務程序的時候,即使來了更高優先順序的中斷服務請求,430也會置之不理,直至低優先順序中斷服務程序執行完畢,才會去響應高優先順序中斷。這是因為430在響應中斷程序的時候,總中斷GIE是復位狀態的,如果要產生類似51的中斷嵌套,只能在中斷函數內再次置位GIE位。
2.定時器TA
TimerA有2個中斷向量。TIMERA0,TIMERA1
TIMERA0隻針對CCR0的計數溢出
TIMERA1再查詢TAIV後可知道是CCR1,還是CCR2,亦或TAIFG引起的,至於TAIFG是什麼情況下置位的,則要看TA工作的模式
具體看用戶手冊。還有一點TA本身有PWM輸出功能,無須借用中斷功能。在這個問題上經常出現應用彎路的是如何結合TA和AD實行定時采樣的問題,很多人都是在TA中斷里打開AD這樣來做。這是不適宜的,因為430 的ADC10,ADC12(SD16不熟悉,沒發言權)模塊均有脈沖采樣模式和擴展采樣模式。只要選擇AD是由TA觸發采樣,然後把TA設置成PWM輸出模式,當然輸出PWM波的都是特殊功能腳,但是在這里它是不需要輸出的,所以引腳設置不必理會。值得關心的就是PWM的頻率,也就是你AD的采樣率。
3.看門狗復位
看門狗有2種工作模式:定時器 ,看門狗
定時器工作模式下WDTIFG在響應中斷服務程序有標志位自動復位,而在看門狗模式下,該標志位只能軟體清零。但是怎麼判斷復位是由於WDT工作在看門狗模式下的定時溢出引起的,還是看門狗寫密鑰錯誤引起的呢?………………………………
答案是沒有方法,至少我沒見過有什麼方法,也沒見過周邊的人有什麼方法。若有人知道方法謝謝分享。
4.經常有人會問這個語句的MOV.B #LPM0,0(SP)的作用。假如你在進入中斷函數之前,430是在LPM0下待機,若要求執行完中斷函數之後進入LPM3待機,在中斷函數里寫MOV.B #LPM3,SR是無效的。因為在進入中斷時430會把PC,SR壓棧,( SR內保存著低功耗模式的設置)即使你寫了MOV.B #LPM3,SR,在退出中斷出棧時SR會被重新設置成低功耗0,要達到這樣的目的,只能更改堆棧內SR的設置:MOV.B #LPM0,0(SP)。
5中斷向量:
430的中斷向量是FFE0H—FFFFH,一共32個位元組也就是FLASH的最後一段,430的FLASH有大有小,但是最後地址肯定是FFFFH(大FLASH超過64K的除外)所以它們的起始地址是不一樣的,而一般IAR默認編譯都是把程序放在FLASH開始的位置(不包括信息段)。
有個值得弄清楚的問題是:什麼是中斷向量?中斷向量實際就是保存中斷函數入口地址的存儲單元空間。就像FFFEH+FFFFH這2個位元組是復位中斷向量,那麼它存儲的就是主函數在FLASH內的起始地址,假如主函數保存在以0x1100為起始地址的FLASH塊內,那麼你會發現FFFFH 內保存的是0x11, FFFE內保存的是0x00.其他什麼TimerA,ADC12,所有的都一樣。只是你每次寫的程序長短不一,中斷函數放的位置不一樣。IAR編譯器都會給你定好,然後在你用JTAG燒寫程序的時候,把這個地址,燒寫到相應的中斷向量。因為中斷函數所處地址可以由用戶自定義,也可以讓IAR自動編譯,所以這個地址除了源代碼開發人員知道,其他人是不知道的,BSL就是應用這32個位元組的中斷向量內的內容的特殊性設置的密碼。但是有幾個東西在430是不變的,就是觸發中斷的條件滿足後,它到哪個地方去定址中斷服務函數的入口地址,是TI 在做430時就固化好,定死的。比方說上電復位的時候,它知道去FFFE,FFFF單元找地址,而不去FFE0,FFE2找地址,這個映射關系是430固化不變的。可有的時候你就是需要改變「中斷向量」,這怎麼辦?430FLASH程序自升級里有時就會碰到這個問題,方法是在430原來默認的中斷向量表內做一個跳轉操作,同樣以上電復位為例:
ORG 0x2345
PowerReset: mov.w &0xFCFE,PC
…………………………
…………………………
ORG 0xFFFE
DW PowerReset
D. 什麼是中斷向量中斷向量表指的是什麼
中斷向量:中斷服務程序的入口地址
中斷向量地址:內存中存放中斷服務程序入口地址的地址
在pc/at機中,中斷向量是指中斷服務程序的入口地址,每個中斷向量分配4個連續的位元組單元,兩個高位元組單元存放入口的段地址cs,兩個低位元組單元存放入口的段內偏移量ip。在pc/at中,規定內存儲器的最低1
kb用來存放中斷向量(共256個),稱這一片內存區為中斷向量表,地址范圍是0~3ffh
E. 8086/8088cpu一共可處理多少級中斷中斷向量和中斷向量表的含義是什麼
8086/8088的內部中斷主要有5種。
(1)
除法錯中斷
(2)
單步中斷
(3)
斷點中斷
(4)
溢出中斷
(5)用戶自定義的軟體中斷
在8086/8088內存的開始1K位元組建立了一個中斷向量表,每個中斷向量由4個位元組組成,低兩位是IP值,高兩位是CS值,這個CS:IP地址表示當相應中斷發生時,中斷處理程序的入口地址。
例如:除0中斷是0號中斷,即中斷向量的地址是0000:0000——0000:0003,假設中斷向量是:53
4E
08
26,則每當程序中有除以0的操作時,立即產生中斷,程序從0號中斷向量中取出地址:0826:534E,並立即轉到這個地址去執行相應的中斷處理程序。
F. 請教單片機高人:怎麼用C編寫中斷,匯編中可以有ORG 000BH來確定是T0中斷,那C怎麼辦還有現場保護怎辦
C51中斷函數格式
Keil C51編譯器中斷函數語法定義如下:
(C語言不用處理現場保護了) interrupt n <----這個是重點
void 函數名() interrupt n
{
}
//定時器T0中斷
void 函數名() interrupt 1
{
}
C51編譯器允許0~31個中斷,下列中斷及其相關地址為8051控制器所提供的中斷:
0:EXTERNAL 0 地址:0003H
1:TIMER/COUNTER 0 地址:000BH
2:EXTERNAL 1 地址:0013H
3:TIMER/COUNTER 1 地址:001BH
4:SERIAL PORT 地址:0023H
編寫中斷函數時應遵循下列規則:
·不能進行參數傳遞。如果中斷過程包括任何參數聲明,則編譯器將產生一個錯誤信息。
·無返回值。如果想定義一個返回值將產生錯誤,但是,如果返回整型值,編譯器將不產生
錯誤信息,因為整型值是默認值,編譯器不能清楚識別。
·在任何情況下,不能直接調用中斷函數,否則編譯器會產生錯誤。由於退出中斷過程是由
指令RETI完成的,該指令影響MCS-51單片機的硬體中斷系統,直接調用中斷函數時,硬體
上沒有中斷請求存在,因而這個指令的結果是不定的,並且通常是致命的。
·編譯器從絕對地址8n+3處產生一個中斷向量,其中n為中斷號,該向量包括一個中斷過
程的跳轉,向量的產生可由編譯器控制指令NOINTVECTOR壓縮,因而程序員可以從獨立的匯
編模塊中提供中斷向量。
·可以在中斷函數定義中使用using指定當前使用的寄存器組。格式如下:
void 函數名([形式參數])interrupt n [using m]
MCS-51單片機有四組寄存器R0~R7,程序具體使用哪一組寄存器由程序狀態字PSW中
的兩位RS1和RS0來確定。在中斷函數定義時,可以用using指定該函數具體使用哪一組寄
存器,m在0,1,2,3這4個數中取值,對應四組寄存器組。例如:
void delay() interrupt 3 using 2
·在中斷函數中調用的函數所使用的寄存器組必須與中斷函數相同。當沒有使用using指令
時,編譯器會選擇一個寄存器組作為絕對寄存器訪問。程序員必須保證按要求使用相應寄存
器組,C編譯器不會對此檢查。
·如果在中斷函數中執行浮點運算,必須保存浮點寄存器狀態,當沒有其他程序執行浮點運
算時,可以不保存。
G. 什麼是中斷向量
是指早期的微機系統中將由硬體產生的中斷入口地址或存放中斷服務程序的首地址。中斷是指在計算機執行程序的過程中。
當出現異常情況或者特殊請求時,計算機停止現行的程序的運行,轉而對這些異常處理或者特殊請求的處理,處理結束後再返回到現行程序的中斷處,繼續執行原程序。
存放中斷服務程序的入口地址。
來存放中斷向量(共256個),稱這一片內存區為中斷向量表,地址范圍是0~3FFH,如圖所示。
在PC/AT中由硬體產生的中斷標識碼被稱為中斷類型號(當然,中斷類型號還有其他的產生方法,如指令中直接給出、CPU自動形成等),即在中斷響應期間8259A產生的是當前請求中斷的最高優先順序的中斷源的中斷類型號。中斷類型號和中斷向量之間有下面的關系:
中斷類型號×4=存放中斷子程序首地址的存儲區首地址=中斷向量地址。
H. 什麼是中斷向量什麼是中斷向量表,有何作用,位於內存什麼位置8086共有多少級中斷
處理機可處理的每種中斷的標號為中斷類型碼。
中斷向量指中斷處理程序的入口地址,由處理機自動定址。
中斷向量表是存放中斷處理程序入口地址的默認的內存區域。在8086中,中斷類型碼乘以4得到向量表的入口,從此處讀出4個位元組內容即為中斷向量。
因中斷類型碼為8位,中斷類型碼的個數為0——FFH,所以最多有256個(級)中斷
望採納!
I. 什麼是中斷向量
中 斷 向 量
中斷向量即中斷源的識別標志,可用來存放中斷服務程序的入口地址或跳轉到中斷服務程序的入口地址。
(1)存放中斷服務程序的入口地址 在PC/AT機中,中斷向量是指中斷服務程序的入口地址,每個中斷向量分配4個連續的位元組單元,兩個高位元組單元存放入口的段地址CS,兩個低位元組單元存放入口的段內偏移量IP。在PC/AT中,規定內存儲器的最低1 KB用來存放中斷向量(共256個),稱這一片內存區為中斷向量表,地址范圍是0~3FFH,如圖所示。 在PC/AT中由硬體產生的中斷標識碼被稱為中斷類型號(當然,中斷類型號還有其他的產生方法,如指令中直接給出、CPU自動形成等),即在中斷響應期間8259A產生的是當前請求中斷的最高優先順序的中斷源的中斷類型號。中斷類型號和中斷向量之間有下面的關系: 中斷類型號×4=存放中斷子程序的首地址=中斷向量 有了存放中斷向量的首地址,從該地址開始的4個存儲單元中取出的就是中斷服務程序的入口。
(2)跳轉到中斷服務程序的入口地址 在AVR或ARM微處理器中,中斷向量的大小也是4個位元組,但其中存放的不是中斷程服務程序的入口地址,而是可執行的代碼。當響應中斷時,硬體自動執行相應中斷向量處的跳轉代碼,然後跳轉到具體的中斷服務程序的入口地址。
中斷向量地址和中斷向量
中斷向量:中斷服務程序的入口地址
中斷向量地址:內存中存放中斷服務程序入口地址的地址