找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3348|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

51單片機為什么保護現(xiàn)場前要關(guān)CPU中斷?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:50910 發(fā)表于 2021-11-12 09:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在李朝青所編《單片機原理及接口技術(shù)》P113頁講到,中斷服務(wù)子程序中在保護現(xiàn)場和恢復(fù)現(xiàn)場前應(yīng)關(guān)中斷,完成后再開中斷。為什么呢?
我個人認為,在保護現(xiàn)場和恢復(fù)現(xiàn)場的中間,即使被更高一級的中斷打斷,因為在這更高一級的中斷中也有保護現(xiàn)場和恢復(fù)現(xiàn)場的操作,它不會改變上一次中斷的現(xiàn)場數(shù)據(jù),為什么還要關(guān)中斷呢?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:624769 發(fā)表于 2021-11-12 12:22 | 只看該作者
這本書沒看過, “中斷服務(wù)子程序中在保護現(xiàn)場和恢復(fù)現(xiàn)場前應(yīng)關(guān)中斷” 中的  中斷子程序 是 中斷程序本身? 還是 中斷程序 另外 調(diào)用的子程序?   其中舉例用的單片機,又是什么單片機?  編程的語言 又是什么?

如果 51 單片機  用 KEIL C 編程的話,  那么,在中斷響應(yīng)后,“保護現(xiàn)場” 之前, 你是沒有任何手段去 關(guān)閉中斷的。  如果匯編編程的話,  雖然可以在 “保護現(xiàn)場” 之前 關(guān)中斷,但是 只要這個“現(xiàn)場”不牽涉到  DPTR , 是沒有必要關(guān)中斷的。 只有 姚老板的 STC15 系列的 11年~13年的部分產(chǎn)品(具體就不點名了),才會需要 關(guān)中斷。不然會跑飛。
回復(fù)

使用道具 舉報

板凳
ID:429003 發(fā)表于 2021-11-12 12:59 | 只看該作者
發(fā)生中斷保護現(xiàn)場的過程,CPU需要執(zhí)行多步操作(有多個寄存器需要入棧保存),無法在一個指令周期完成全部入棧操作。CPU執(zhí)行這個過程時不能被高優(yōu)先級中斷打斷,否則現(xiàn)場被破壞程序會跑飛。
回復(fù)

使用道具 舉報

地板
ID:401564 發(fā)表于 2021-11-12 14:28 | 只看該作者
現(xiàn)場保護:主要是把一些會有可能會被中斷內(nèi)部改變,或者是中斷內(nèi)部在使用到的數(shù)據(jù)保存起來,比如8051的CY(C標(biāo)志位),這個CY在8051的很多計算中都要用到,如果在主程序中用到,在中斷中也要用到,那么,如果不保存起來,中斷中改變了CY,等到中斷返回之后,主程序中的計算就會出錯

恢復(fù)現(xiàn)場:就是把保存的數(shù)據(jù)恢復(fù)

至于執(zhí)行中斷時要關(guān)閉中斷,在8051中是沒有必要的,因為8051是軟件堆棧.
除非你中斷設(shè)計得非常不合理,比如:定時器2需要1秒時間來完成中斷操作,但你又開啟了定時器1,10mS中斷時間,定時器1的中斷等級設(shè)定成比定時器2高,這樣一來,在執(zhí)行定時器2中斷的時候,它就會不斷的被定時器1中斷打斷,整個的定時器2中斷時間可能很長,有時候程序都跑不動

對于其它的一般只有幾層的硬件堆棧單片機來說,就要關(guān)閉中斷,不然就會溢出,程序就跑飛了
回復(fù)

使用道具 舉報

5#
ID:57657 發(fā)表于 2021-11-12 20:09 | 只看該作者
xstong 發(fā)表于 2021-11-12 12:59
發(fā)生中斷保護現(xiàn)場的過程,CPU需要執(zhí)行多步操作(有多個寄存器需要入棧保存),無法在一個指令周期完成全部 ...

多級中斷嵌套,只要堆棧順序正確是是不會跑飛的,除非堆棧溢出或數(shù)組越界,指針錯誤等。
回復(fù)

使用道具 舉報

6#
ID:50910 發(fā)表于 2021-11-13 10:22 | 只看該作者
188610329 發(fā)表于 2021-11-12 12:22
這本書沒看過, “中斷服務(wù)子程序中在保護現(xiàn)場和恢復(fù)現(xiàn)場前應(yīng)關(guān)中斷” 中的  中斷子程序 是 中斷程序本身? ...

回答:1、是中斷程序本身。2、8051單片機。3、匯編語言。
回復(fù)

使用道具 舉報

7#
ID:980554 發(fā)表于 2021-11-13 11:16 | 只看該作者
設(shè)置 9 個按鍵,每個按鍵遞進 10%,剛好
晶振選用11.0592,串口波特率一般采用9600
定時器內(nèi)設(shè)置一個變量,用于控制占空比
回復(fù)

使用道具 舉報

8#
ID:624769 發(fā)表于 2021-11-13 11:19 | 只看該作者
brucekang 發(fā)表于 2021-11-13 10:22
回答:1、是中斷程序本身。2、8051單片機。3、匯編語言。

基于這個3個限定,結(jié)論是:

的確能在 中斷程序保護現(xiàn)場前,關(guān)中斷,但是,事實和你理解的一樣,毫無必要, 需要在保護現(xiàn)場前關(guān)中斷,只有2個可能。
1)單片機本身缺陷,目前只在姚老板的特定幾個版本單片機上遇到過,其他牌子可以忽略這個問題。
2)編程者自身能力問題,無法“完美”的保護現(xiàn)場,還可能會破壞現(xiàn)場。(可能你看得這本書的作者屬于這個情況。)
回復(fù)

使用道具 舉報

9#
ID:420836 發(fā)表于 2021-11-15 09:01 | 只看該作者
在中斷保護堆棧保存過程中,不得中斷該過程。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表