51核心的最基礎的中斷源請求有外部中斷、定時器中斷和串列埠中斷,這也是學習和開發者最長用的。當然還有其他的中斷源,比如adc、spi、pwm等。以外部中斷0為例,在程式設計中常使用的方式為:
void int0()interrupt 0 using 1
在這裡特別做上筆記:其中前面的void int0() 只是代表乙個普通沒有形參的函式而已,函式名寫成什麼都是可以的,這個到不重要。那麼後面的就乙個乙個詞的扣把:(2-1-i-c-中國-電子網,防抓取)
其中 interrupt n 組成一組,n用來指明中斷號,在函式後使用了interrupt關鍵字後,就會自動的生成中斷向量,51核心中斷號如下圖,這是我今天查的正在使用的mcu:
例如:interrupt 1 指明是定時器中斷0;
interrupt 2 指明是外部中斷1;
interrupt 3 指明是定時器中斷1
對於51核心的mcu,不同廠家及不同型號的內部資源會有所不同,上圖是我正在開發的一款中穎sh88f516微控制器,由上圖可見內部資源還算可以,能夠滿足一般的產品。後面的using n 指的是使用第n組暫存器。這個之前我在使用的過程中往往忽略了這個,也沒有出現什麼問題。但是今天注意到這個問題,查完資料後用上發現效果還不如不用,很有肯能是沒有把這個知識用好的原因把。對比之後給我的感覺是在使用c語言寫程式時,能不用就不用吧。查資料解釋說假如在中斷函式中使用了using n,中斷不再儲存r0-r7的值,這也就意味著假如乙個高優先順序的中斷及乙個低優先順序的中斷同時使用了using n,而這個n恰恰相等,那就等著哭把,因為這個bug還真不是那麼好找出來的(今天我就遇到了這個問題)。21ic整理
其次就是中斷優先順序的問題了,如圖上面的中斷表,在右側第二欄標的很清楚,除了復位之外,就數外部中斷0優先順序最高了,依次往下排列,那麼問題來了,今天剛好就碰到了需要串列埠0的優先順序比定時器0的優先順序高。沒辦法,只好接著啃資料手冊,還好這暫存器不多,一會就查到了下表和相關的描述:
所以按照描述修改下優先順序就可以達到目的了。
總結:用到回過頭來用到51的中斷,發現有些東西在之前學習的時候並沒有太在意,導致現在在開發產品上使用的時候不清楚用途。因為工作跟學習性質是不一樣的,作為開發者的角度來說,質量往往是第一要求。同時會接觸到很多新鮮的事物和技術,但是話又說回來了,最基本的知識還是需要打牢。
0中斷優先順序 51微控制器中斷基本概念
在了解基本概念之前,先看三個問題 1.你想使用的中斷是哪個?2.你所希望的觸發條件是什麼?3.你希望在中斷之後做什麼?可以邊看邊思考,文章最後給出答案 微控制器在執行程式時,中斷也隨時有可能發生,但無論何時發生,只要一旦發生,微控制器將立即暫停當前程式,趕去處理中斷程式,處理完中斷程式後再返回剛才暫...
0中斷優先順序 乾貨 微控制器裡面的「中斷」優先順序
摘要 中斷優先順序的內容,有一般緊急的中斷,有特別緊急的中斷,這取決於具體的系統設計,這就涉及到中斷優先順序和中斷巢狀的概念,今天先簡單介紹一下相關暫存器,不做例程說明。中斷的產生背景,實際生活當中還有更複雜的,比如我正在看電視,這個時候來 了,我要進入接 的 中斷 程式當中去,就在接 的同時,聽到...
51微控制器的中斷優先順序及中斷巢狀
說最基本的,老的51微控制器 80c51系列 有5個中斷源,2個優先順序,可以實現二級中斷服務巢狀。現在很多擴充套件的51微控制器已經有4個優先順序 或更多 和更多的中斷源了。在說到中斷之前,我先來定義一下優先順序,明白了什麼是優先順序,後面的闡述就容易明白了。實際上很多人都是混淆了優先順序的含義,...