欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2003|回復: 12
打印 上一主題 下一主題
收起左側

關于51單片機中斷的理解

[復制鏈接]
跳轉到指定樓層
樓主
ID:1091094 發表于 2023-11-20 20:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  我使用的是STC89C51RC單片機,在芯片手冊中關于中斷處理是這么介紹的:
  6.4 中斷處理
    當某中斷產生而且被CPU響應,主程序被中斷,接下來將執行如下操作:
   1. 當前正被執行的指令全部執行完畢;
   2. PC值被壓入棧;
   3. 現場保護;
   4. 阻止同級別其他中斷;
   5. 將中斷向量地址裝載到程序計數器PC;
   6. 執行相應的中斷服務程序。
   中斷服務程序ISR完成和該中斷相應的一些操作。ISR以RETI(中斷返回)指令結束,
將PC值從棧中取回,并恢復原來的中斷設置,之后從主程序的斷點處繼續執行。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
  而且我在開發板上試驗,在沒有設置中斷優先級的情況下,當正在執行一個中斷服務程序時,有即使外部有中斷信號來,
也一樣會被忽略。
  所以是不是51中斷的機制就是這樣子的,而且跟它的芯片手冊的介紹也對的上。  是不是其他內核的單片機的中斷也是這樣子的?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2023-11-22 00:29 | 只看該作者
中斷優先級只有2級,只有當低優先級的中斷設置優先時,才能中斷高優先級的中斷,如果均不設置優先級,按自然優先處理(中斷編號小的優先級高)
回復

使用道具 舉報

板凳
ID:879348 發表于 2023-11-22 08:09 | 只看該作者
一般應用默認中斷就行了,最關鍵的不要在中斷里運行輔助函數
回復

使用道具 舉報

地板
ID:123289 發表于 2023-11-22 09:25 | 只看該作者
【在沒有設置中斷優先級的情況下】
無論你設置與否,它都是存在的,你不設置,它取默認值。
回復

使用道具 舉報

5#
ID:1091094 發表于 2023-11-22 11:42 | 只看該作者
yzwzfyz 發表于 2023-11-22 09:25
【在沒有設置中斷優先級的情況下】
無論你設置與否,它都是存在的,你不設置,它取默認值。

我覺得默認的優先級是指同時接收到多個中斷時,應該執行哪個中斷。不被執行的中斷就被舍棄。
  而且在不設置優先級的情況下,正在執行中斷服務函數時,有中斷信號產生都是無效的。
  起碼,在STC的51單片機上是這樣子的。
回復

使用道具 舉報

6#
ID:1100538 發表于 2023-11-22 13:40 | 只看該作者
51自定義中斷優先級是:INT0-T0-INT1-T0-ES
回復

使用道具 舉報

7#
ID:1100538 發表于 2023-11-22 13:42 | 只看該作者
3038838599 發表于 2023-11-22 11:42
我覺得默認的優先級是指同時接收到多個中斷時,應該執行哪個中斷。不被執行的中斷就被舍棄。
  而且在不 ...

不會舍棄,高的執行了在執行下一級
回復

使用道具 舉報

8#
ID:647261 發表于 2023-11-22 14:35 | 只看該作者
我看到這個問題在論壇上討論過很多很多次了,怎么還有人搞不清楚
51的優先級只有2個,分別是高優先級和低優先級
高優先級中斷可以打斷低優先級中斷,執行完后再回到低優先級中斷
相同優先級的中斷不能相互打斷,也沒有先后順序之分
不設置優先級就只有查詢順序,這個順序僅在有中斷同時觸發時,順序號小的先執行
所以2樓說的“中斷編號小的優先級高”,4樓說的“無論你設置與否,它都是存在的”,6樓說的“
51自定義中斷優先級是:INT0-T0-INT1-T0-ES”,7樓說的,都是錯誤的,你的理解是對的
回復

使用道具 舉報

9#
ID:1091094 發表于 2023-11-22 16:36 | 只看該作者
sttt300 發表于 2023-11-22 14:35
我看到這個問題在論壇上討論過很多很多次了,怎么還有人搞不清楚
51的優先級只有2個,分別是高優先級和低 ...

其實我也是看到論壇上的回答,感覺不怎么正確,所以就自己再通過開發板求證的。
可能AT89C51的優先級只有兩個,但是在STC89c51rc這個型號上,中斷優先級是有四個的。
回復

使用道具 舉報

10#
ID:883242 發表于 2023-11-22 20:56 | 只看該作者
樓主位帖子的理解最大問題是“忽略”這兩個字。

事實是不可能被忽略,只會被掛起pending

中斷執行過程中,同等級中斷不會立刻響應,但是會被掛起。

中斷執行完畢,同等級中斷就會執行。
回復

使用道具 舉報

11#
ID:123289 發表于 2023-11-23 10:53 | 只看該作者
舉例說明下,中斷何時會被丟棄與不會被丟棄:
假設正在執行INT0中斷服務程序中,程序執行時間很長,還未結束(遇RETI指令視為結束!)
而外設正通過串口向CPU發送數據1,2,3,4……
這時收到發來了【1】,RI被置位,由于INT0未結束,而串口無法響應中斷;
須臾【2】又收到了,RI再次置位,不過RI原本已是1,置位也是白置,SBUF中的【1】,被【2】擠掉了。
這時INT0結束了,RI=1的申請被執行,于是轉串口中斷服務,也就收到了【2】,這樣【1】就丟失了。
這時【3】又發來了,RI又被硬件置1。由于程序寫的很糟糕,應在開始就清RI,結果,在中斷服務程序結束前才清RI。這樣【3】也丟了。
然后【4】來了,當然就收到了。

【關鍵點】記住:
1、每個中斷源有一個IF標記,中斷源動作(起效)時,IF被硬件置1,但它只是【申請】中斷,是否被被批準【響應】,還取決于其它條件(被允許、已打開、無更高、同級在執行、CPU當前指令執行完畢……)。
2、由于一個中斷源只有一個標記IF,會出現以下三種情況:
2.1、中斷源動作了,IF被置1,但未被響應(如串口收到【1】未被響應),又來了N次動作(如串口又陸續收到【2】……【N】),那么只有中斷響應前的一個【N】會被收到,在N之前的全部丟失。
2.2、中斷響應后IF未被清除保持1,在中斷服務退出后,會再次進入中斷。也即數據【1】被無限次當作串入的數據。
所以必須及時清除中斷標記IF。提示:注意看手冊,有的IF在中斷響應后會由硬件自動清除。
2.3、中斷源動作讓IF=1,在未被響應之前,誤將IF清成0,則中斷申請取消,無法響應,即丟失。這在共用一個中斷入口的中斷源中時易發生。
例如,串行中斷服務程序:先看了TI=0無發送中斷,于是轉至查看RI=1,就在處理接收數據過程中,TI變1了、之后服務程序也結束了,不過程序寫的比較差,在退出中斷前,才清除了RI、TI。這樣就丟失了一個TI。

回復

使用道具 舉報

12#
ID:1100910 發表于 2023-11-23 16:12 | 只看該作者
標準51只有一個中斷優先級管理的寄存器IP,只有兩級,默認都是0(低優先級),你沒有設置,也即都是低優先級,此時只有與硬件相關的所謂自然優先級(但與IP決定的高低可嵌套中斷響應的優先級不同,只是多個中斷同時發生的情況下先響應哪個中斷,也叫查詢順序,不可以嵌套中斷響應,CPU響應一個中斷后,其他的都得等待,相當于排隊)。對于宏晶的單片機說實話有點亂,看看網站內容及Datasheet就可窺見一斑。按照手冊說明(如果描述內容屬實),它增設了一個IPH寄存器,跟IP一樣,也是其中一位對應某一個中斷源,從而構成四級中斷優先級,但默認值都為0,跟沒有增設是一樣的。不同的單片機的架構是不一樣的,支持的中斷工作機制也不同,比如ARM的中斷管理。😄
回復

使用道具 舉報

13#
ID:1100910 發表于 2023-11-23 16:15 | 只看該作者
3038838599 發表于 2023-11-22 16:36
其實我也是看到論壇上的回答,感覺不怎么正確,所以就自己再通過開發板求證的。
可能AT89C51的優先級只 ...

不管它有多少級優先級,你沒設置跟沒有是一樣的。除非你設置為不同的優先級才能測試中中斷優先級帶來的中斷嵌套效果!😄
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表