51內(nèi)核的最基礎(chǔ)的中斷源請求有外部中斷、定時器中斷和串口中斷,這也是學習和開發(fā)者最長用的。當然還有其他的中斷源,比如ADC、SPI、PWM等。以外部中斷0為例,在編程中常使用的方式為:
void INT0()interrupt 0 using 1
{
……
}
在這里特別做上筆記:其中前面的void INT0() 只是代表一個普通沒有形參的函數(shù)而已,函數(shù)名寫成什么都是可以的,這個到不重要。那么后面的就一個一個詞的扣把:(2-1-i-c-中國-電子網(wǎng),防抓?。?/p>
其中 interrupt n 組成一組,n用來指明中斷號,在函數(shù)后使用了interrupt關(guān)鍵字后,就會自動的生成中斷向量,51內(nèi)核中斷號如下圖,這是我今天查的正在使用的MCU:
例如:
12
interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1
。。。
對于51內(nèi)核的MCU,不同廠家及不同型號的內(nèi)部資源會有所不同,上圖是我正在開發(fā)的一款中穎SH88F516單片機,由上圖可見內(nèi)部資源還算可以,能夠滿足一般的產(chǎn)品。后面的using n 指的是使用第n組寄存器。這個之前我在使用的過程中往往忽略了這個,也沒有出現(xiàn)什么問題。但是今天注意到這個問題,查完資料后用上發(fā)現(xiàn)效果還不如不用,很有肯能是沒有把這個知識用好的原因把。對比之后給我的感覺是在使用C語言寫程序時,能不用就不用吧。查資料解釋說假如在中斷函數(shù)中使用了using n,中斷不再保存R0-R7的值,這也就意味著假如一個高優(yōu)先級的中斷及一個低優(yōu)先級的中斷同時使用了using n,而這個n恰恰相等,那就等著哭把,因為這個BUG還真不是那么好找出來的(今天我就遇到了這個問題)。
其次就是中斷優(yōu)先級的問題了,如圖上面的中斷表,在右側(cè)第二欄標的很清楚,除了復(fù)位之外,就數(shù)外部中斷0優(yōu)先級最高了,依次往下排列,那么問題來了,今天剛好就碰到了需要串口0的優(yōu)先級比定時器0的優(yōu)先級高。沒辦法,只好接著啃數(shù)據(jù)手冊,還好這寄存器不多,一會就查到了下表和相關(guān)的描述:
所以按照描述修改下優(yōu)先級就可以達到目的了。
總結(jié):用到回過頭來用到51的中斷,發(fā)現(xiàn)有些東西在之前學習的時候并沒有太在意,導致現(xiàn)在在開發(fā)產(chǎn)品上使用的時候不清楚用途。因為工作跟學習性質(zhì)是不一樣的,作為開發(fā)者的角度來說,質(zhì)量往往是第一要求。同時會接觸到很多新鮮的事物和技術(shù),但是話又說回來了,最基本的知識還是需要打牢。
-
51單片機
+關(guān)注
關(guān)注
274文章
5702瀏覽量
123623 -
定時器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114816 -
串口中斷
+關(guān)注
關(guān)注
0文章
64瀏覽量
13898
原文標題:51單片機內(nèi)核的中斷及中斷向基礎(chǔ)知識
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論