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