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

標(biāo)題: 關(guān)于51單片機(jī)中斷的理解 [打印本頁(yè)]

作者: 3038838599    時(shí)間: 2023-11-20 20:06
標(biāo)題: 關(guān)于51單片機(jī)中斷的理解
  我使用的是STC89C51RC單片機(jī),在芯片手冊(cè)中關(guān)于中斷處理是這么介紹的:
  6.4 中斷處理
    當(dāng)某中斷產(chǎn)生而且被CPU響應(yīng),主程序被中斷,接下來(lái)將執(zhí)行如下操作:
   1. 當(dāng)前正被執(zhí)行的指令全部執(zhí)行完畢;
   2. PC值被壓入棧;
   3. 現(xiàn)場(chǎng)保護(hù);
   4. 阻止同級(jí)別其他中斷;
   5. 將中斷向量地址裝載到程序計(jì)數(shù)器PC;
   6. 執(zhí)行相應(yīng)的中斷服務(wù)程序。
   中斷服務(wù)程序ISR完成和該中斷相應(yīng)的一些操作。ISR以RETI(中斷返回)指令結(jié)束,
將PC值從棧中取回,并恢復(fù)原來(lái)的中斷設(shè)置,之后從主程序的斷點(diǎn)處繼續(xù)執(zhí)行。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
  而且我在開發(fā)板上試驗(yàn),在沒(méi)有設(shè)置中斷優(yōu)先級(jí)的情況下,當(dāng)正在執(zhí)行一個(gè)中斷服務(wù)程序時(shí),有即使外部有中斷信號(hào)來(lái),
也一樣會(huì)被忽略。
  所以是不是51中斷的機(jī)制就是這樣子的,而且跟它的芯片手冊(cè)的介紹也對(duì)的上。  是不是其他內(nèi)核的單片機(jī)的中斷也是這樣子的?



作者: csmyldl    時(shí)間: 2023-11-22 00:29
中斷優(yōu)先級(jí)只有2級(jí),只有當(dāng)?shù)蛢?yōu)先級(jí)的中斷設(shè)置優(yōu)先時(shí),才能中斷高優(yōu)先級(jí)的中斷,如果均不設(shè)置優(yōu)先級(jí),按自然優(yōu)先處理(中斷編號(hào)小的優(yōu)先級(jí)高)
作者: wufa1986    時(shí)間: 2023-11-22 08:09
一般應(yīng)用默認(rèn)中斷就行了,最關(guān)鍵的不要在中斷里運(yùn)行輔助函數(shù)
作者: yzwzfyz    時(shí)間: 2023-11-22 09:25
【在沒(méi)有設(shè)置中斷優(yōu)先級(jí)的情況下】
無(wú)論你設(shè)置與否,它都是存在的,你不設(shè)置,它取默認(rèn)值。
作者: 3038838599    時(shí)間: 2023-11-22 11:42
yzwzfyz 發(fā)表于 2023-11-22 09:25
【在沒(méi)有設(shè)置中斷優(yōu)先級(jí)的情況下】
無(wú)論你設(shè)置與否,它都是存在的,你不設(shè)置,它取默認(rèn)值。

我覺(jué)得默認(rèn)的優(yōu)先級(jí)是指同時(shí)接收到多個(gè)中斷時(shí),應(yīng)該執(zhí)行哪個(gè)中斷。不被執(zhí)行的中斷就被舍棄。
  而且在不設(shè)置優(yōu)先級(jí)的情況下,正在執(zhí)行中斷服務(wù)函數(shù)時(shí),有中斷信號(hào)產(chǎn)生都是無(wú)效的。
  起碼,在STC的51單片機(jī)上是這樣子的。

作者: wenwu2013    時(shí)間: 2023-11-22 13:40
51自定義中斷優(yōu)先級(jí)是:INT0-T0-INT1-T0-ES
作者: wenwu2013    時(shí)間: 2023-11-22 13:42
3038838599 發(fā)表于 2023-11-22 11:42
我覺(jué)得默認(rèn)的優(yōu)先級(jí)是指同時(shí)接收到多個(gè)中斷時(shí),應(yīng)該執(zhí)行哪個(gè)中斷。不被執(zhí)行的中斷就被舍棄。
  而且在不 ...

不會(huì)舍棄,高的執(zhí)行了在執(zhí)行下一級(jí)
作者: sttt300    時(shí)間: 2023-11-22 14:35
我看到這個(gè)問(wèn)題在論壇上討論過(guò)很多很多次了,怎么還有人搞不清楚
51的優(yōu)先級(jí)只有2個(gè),分別是高優(yōu)先級(jí)和低優(yōu)先級(jí)
高優(yōu)先級(jí)中斷可以打斷低優(yōu)先級(jí)中斷,執(zhí)行完后再回到低優(yōu)先級(jí)中斷
相同優(yōu)先級(jí)的中斷不能相互打斷,也沒(méi)有先后順序之分
不設(shè)置優(yōu)先級(jí)就只有查詢順序,這個(gè)順序僅在有中斷同時(shí)觸發(fā)時(shí),順序號(hào)小的先執(zhí)行
所以2樓說(shuō)的“中斷編號(hào)小的優(yōu)先級(jí)高”,4樓說(shuō)的“無(wú)論你設(shè)置與否,它都是存在的”,6樓說(shuō)的“
51自定義中斷優(yōu)先級(jí)是:INT0-T0-INT1-T0-ES”,7樓說(shuō)的,都是錯(cuò)誤的,你的理解是對(duì)的
作者: 3038838599    時(shí)間: 2023-11-22 16:36
sttt300 發(fā)表于 2023-11-22 14:35
我看到這個(gè)問(wèn)題在論壇上討論過(guò)很多很多次了,怎么還有人搞不清楚
51的優(yōu)先級(jí)只有2個(gè),分別是高優(yōu)先級(jí)和低 ...

其實(shí)我也是看到論壇上的回答,感覺(jué)不怎么正確,所以就自己再通過(guò)開發(fā)板求證的。
可能AT89C51的優(yōu)先級(jí)只有兩個(gè),但是在STC89c51rc這個(gè)型號(hào)上,中斷優(yōu)先級(jí)是有四個(gè)的。
作者: Hephaestus    時(shí)間: 2023-11-22 20:56
樓主位帖子的理解最大問(wèn)題是“忽略”這兩個(gè)字。

事實(shí)是不可能被忽略,只會(huì)被掛起pending

中斷執(zhí)行過(guò)程中,同等級(jí)中斷不會(huì)立刻響應(yīng),但是會(huì)被掛起。

中斷執(zhí)行完畢,同等級(jí)中斷就會(huì)執(zhí)行。
作者: yzwzfyz    時(shí)間: 2023-11-23 10:53
舉例說(shuō)明下,中斷何時(shí)會(huì)被丟棄與不會(huì)被丟棄:
假設(shè)正在執(zhí)行INT0中斷服務(wù)程序中,程序執(zhí)行時(shí)間很長(zhǎng),還未結(jié)束(遇RETI指令視為結(jié)束!)
而外設(shè)正通過(guò)串口向CPU發(fā)送數(shù)據(jù)1,2,3,4……
這時(shí)收到發(fā)來(lái)了【1】,RI被置位,由于INT0未結(jié)束,而串口無(wú)法響應(yīng)中斷;
須臾【2】又收到了,RI再次置位,不過(guò)RI原本已是1,置位也是白置,SBUF中的【1】,被【2】擠掉了。
這時(shí)INT0結(jié)束了,RI=1的申請(qǐng)被執(zhí)行,于是轉(zhuǎn)串口中斷服務(wù),也就收到了【2】,這樣【1】就丟失了。
這時(shí)【3】又發(fā)來(lái)了,RI又被硬件置1。由于程序?qū)懙暮茉愀猓瑧?yīng)在開始就清RI,結(jié)果,在中斷服務(wù)程序結(jié)束前才清RI。這樣【3】也丟了。
然后【4】來(lái)了,當(dāng)然就收到了。

【關(guān)鍵點(diǎn)】記住:
1、每個(gè)中斷源有一個(gè)IF標(biāo)記,中斷源動(dòng)作(起效)時(shí),IF被硬件置1,但它只是【申請(qǐng)】中斷,是否被被批準(zhǔn)【響應(yīng)】,還取決于其它條件(被允許、已打開、無(wú)更高、同級(jí)在執(zhí)行、CPU當(dāng)前指令執(zhí)行完畢……)。
2、由于一個(gè)中斷源只有一個(gè)標(biāo)記IF,會(huì)出現(xiàn)以下三種情況:
2.1、中斷源動(dòng)作了,IF被置1,但未被響應(yīng)(如串口收到【1】未被響應(yīng)),又來(lái)了N次動(dòng)作(如串口又陸續(xù)收到【2】……【N】),那么只有中斷響應(yīng)前的一個(gè)【N】會(huì)被收到,在N之前的全部丟失。
2.2、中斷響應(yīng)后IF未被清除保持1,在中斷服務(wù)退出后,會(huì)再次進(jìn)入中斷。也即數(shù)據(jù)【1】被無(wú)限次當(dāng)作串入的數(shù)據(jù)。
所以必須及時(shí)清除中斷標(biāo)記IF。提示:注意看手冊(cè),有的IF在中斷響應(yīng)后會(huì)由硬件自動(dòng)清除。
2.3、中斷源動(dòng)作讓IF=1,在未被響應(yīng)之前,誤將IF清成0,則中斷申請(qǐng)取消,無(wú)法響應(yīng),即丟失。這在共用一個(gè)中斷入口的中斷源中時(shí)易發(fā)生。
例如,串行中斷服務(wù)程序:先看了TI=0無(wú)發(fā)送中斷,于是轉(zhuǎn)至查看RI=1,就在處理接收數(shù)據(jù)過(guò)程中,TI變1了、之后服務(wù)程序也結(jié)束了,不過(guò)程序?qū)懙谋容^差,在退出中斷前,才清除了RI、TI。這樣就丟失了一個(gè)TI。


作者: cdeda    時(shí)間: 2023-11-23 16:12
標(biāo)準(zhǔn)51只有一個(gè)中斷優(yōu)先級(jí)管理的寄存器IP,只有兩級(jí),默認(rèn)都是0(低優(yōu)先級(jí)),你沒(méi)有設(shè)置,也即都是低優(yōu)先級(jí),此時(shí)只有與硬件相關(guān)的所謂自然優(yōu)先級(jí)(但與IP決定的高低可嵌套中斷響應(yīng)的優(yōu)先級(jí)不同,只是多個(gè)中斷同時(shí)發(fā)生的情況下先響應(yīng)哪個(gè)中斷,也叫查詢順序,不可以嵌套中斷響應(yīng),CPU響應(yīng)一個(gè)中斷后,其他的都得等待,相當(dāng)于排隊(duì))。對(duì)于宏晶的單片機(jī)說(shuō)實(shí)話有點(diǎn)亂,看看網(wǎng)站內(nèi)容及Datasheet就可窺見(jiàn)一斑。按照手冊(cè)說(shuō)明(如果描述內(nèi)容屬實(shí)),它增設(shè)了一個(gè)IPH寄存器,跟IP一樣,也是其中一位對(duì)應(yīng)某一個(gè)中斷源,從而構(gòu)成四級(jí)中斷優(yōu)先級(jí),但默認(rèn)值都為0,跟沒(méi)有增設(shè)是一樣的。不同的單片機(jī)的架構(gòu)是不一樣的,支持的中斷工作機(jī)制也不同,比如ARM的中斷管理。😄
作者: cdeda    時(shí)間: 2023-11-23 16:15
3038838599 發(fā)表于 2023-11-22 16:36
其實(shí)我也是看到論壇上的回答,感覺(jué)不怎么正確,所以就自己再通過(guò)開發(fā)板求證的。
可能AT89C51的優(yōu)先級(jí)只 ...

不管它有多少級(jí)優(yōu)先級(jí),你沒(méi)設(shè)置跟沒(méi)有是一樣的。除非你設(shè)置為不同的優(yōu)先級(jí)才能測(cè)試中中斷優(yōu)先級(jí)帶來(lái)的中斷嵌套效果!😄




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1