51微控制器中斷處理程式中關中斷的問題

時間 2021-09-08 03:21:01

1樓:匿名使用者

中斷保護現場,是為了你中斷子程式執行完以後能夠返回到你程式中中斷點,即產生中斷的地方,使程式能夠繼續向下執行!!!!

如過你說的不用保護現場的話,那麼程式執行完以後就不能夠回到現場,那麼你的程式將不知道要跳轉到那裡去了,也就是飛鳥,呵呵……

你說的中斷巢狀,也是一樣的,兩者都要保護現場,不然你也不能夠回到現場,程式也會飛的!!!!

而我們保護現場的資料都是放在堆疊中的,因此,你的中斷次數也不能夠超過堆疊的級數,那樣資料也會丟失!!!!

說白了,中斷它不同於子程式,子程式是固定好了的,返回的位置也固定了;而中斷我們不能夠預知它在那裡發生中斷,因此要保護現場,使中斷子程式執行完後返回到中斷的地方!!!

呵呵……說的太多了!!!

我知道你說的意思了,但是你要知道,中斷現場保護是在中斷子程式中進行的,因此當你高一級的中斷髮生的時候(他們不可能共用一箇中斷子程式,如果是同一中斷,那也不可能,因為51中斷中你進入中斷子程式後要將禁止該中斷再次中斷,好象似的,嘿嘿……你可以試試),在高一級的中斷子程式中也有現場保護,你的問題就是沒有把現場保護放對地方!!!!!

它們是把現場保護在同一堆疊中,我跟你打個比方吧,假如說堆疊的地址是80h,低一級的中斷要保護的是1,2,3;高一級要保護的現場是4,5,6,那麼在低一級的中斷髮生的時候,現場保護1,2,3將壓如堆疊,(順序書上應該有,這裡是個比喻),那我先壓入1,堆疊地址加1,壓入2,堆疊地址再加1,如果這個時候高一級的中斷髮生,那麼現在就應該跳到高一級中斷的子程式,堆疊地址就是82h了,在將4,5,6分別壓入堆疊,這樣堆疊的地址就是85h,當高一級的中斷子程式結束後,返回現場,堆疊的資料要從85h開始彈出,這樣現場返回的就是6,5,4,這個時候程式就會跳到中斷之前的地方,即底一級的中斷那裡,將要繼續將3保護到堆疊中,在執行低一級的中斷子程式.(其中,你要在中斷保護現場完了後將中斷標誌清0啊,不然它始終會中斷的,不可能去執行程式去了...)

這樣講解你應該知道它們的過程了吧,呵呵!!!!!!

2樓:匿名使用者

無論在哪一級中斷,保護現場期間都是不能再發生中斷的,否則本級中斷的返回資訊將會被破壞,以至不能正確返回。如果保護現場期間不關中斷,而被高一級的中斷巢狀,高一級中斷的保護現場只能保證返回到這級中斷,而這級中斷會因為有關資訊的丟失而沒法正確返回原發生中斷處。

中斷保護的主要是返回地址,該地址是在中斷髮生時的pc暫存器中的,如果保護現場期間不關中斷,當(pc)內容還沒有完整儲存時,又有高階中斷髮生,將會停止儲存去響應高階中斷,原(pc)內容將被當前中斷處地址取代,以備響應高階中斷時儲存。顯然,當高階中斷結束返回本級中斷時,堆疊中本該是原返回地址的單元裡,並不是真正的返回地址(因為原儲存不完整),這樣勢必造成程式混亂。

3樓:匿名使用者

一句話: 你保護的是那個現場,如果中斷中又中斷,第二次保護了,ok,返回一次沒問題,還想再返回嗎?沒門了,第一次是不是沒保護?就是這個問題。

4樓:匿名使用者

下一次再儲存中斷現場就變了,儲存的就不一樣了push ebx,edi,eax值就變了,比如

push eax;

push ebx; push edi; ,當執行完push eax; 後,如果允許產生高階中斷的話,如果程式處理過程中ebx,edi需要變化的話,你再返回剛才的低階中斷怎麼知道原來的值啊,已經被覆蓋掉了。。

5樓:

本來我也想講一下我的看法,可是看到下面那個多的字就不想看了,估計已經把我的意思講出來了吧

6樓:匿名使用者

看你的解析好像挺行,雖然我沒試過.

我只能說,在中斷子程式裡面不宜做太多跳轉或者深層動作,這樣程式容易跳錯.這個我倒有體會.實在想不通可以試試啊!所有結果都是試驗出來嘚.

51微控制器寫個程式,好像在中斷裡面出不來了,主程式只執行了一部分,之後一直在中斷裡面執行

7樓:如此簡單

跟我之來前一樣,對中斷,定源

時器瞭解的不夠透徹,被老師訓了之後查資料搞實驗後終於搞清楚了,下面說說我的看法:千萬不要在中斷函式中做多餘的事!!!只能做最基本的操作,比如置標誌位,讓一個數加一等,與延時有關的操作千萬不要做!

你10ms進一次中斷,在裡面又掃描按鍵,又顯示液晶,這裡面花的時間遠遠地超過10ms,它肯定死在中斷裡出不來啊,因為你不關閉中斷的話它一直10ms進去,最好在中斷裡設定幾個標誌位,進中斷就讓標誌位置1,然後出中斷,在主迴圈裡判斷標誌位,如果標誌位置1了,就清零標誌位,然後做其他的動作。好好想一想,思路一定要清晰!

8樓:匿名使用者

如果真如你所說,那麼問題出在keyscan()函式。

9樓:雪芃長流如

開中斷以後,在中斷服務子程式中設定一箇中斷次數計數器,統計達到2次後

中斷次數計數器清0,然後再把莫暫存器加一。

c51微控制器中斷程式中的interrupt1,2,3是由什麼決定的

中斷是指由於某種事件的發生 硬體或者軟體的 計算機暫停執行當前的程式,轉而執行另一程式,以處理髮生的事件,處理完畢後又返回原程式繼續作業的過程。中斷是處理器一種工作狀態的描述。1 int0 外部中斷0,由p3.2埠引入,低電平或下降沿引起。預設優先順序最高。2 int1 外部中斷1,由p3.3埠引入...

微控制器中斷的意思,51微控制器外部中斷到底什麼意思?

八哥說科技 中斷就是指處理機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。中斷就是微控制器處理任務a時,發生了觸發中斷的條件停下來執行另一個任務b,觸發中斷的條件就屬於中斷源,任務b就是中斷任務 中斷服務函式 當...

求51微控制器簡單的中斷c語言程式

樂隱生態農學院 這個是我自己做的 99s的計數器。用數碼管顯示的,這裡使用了中斷,其目的是為了通過中斷來精確計算真實的時間。如果還有需要,給我郵箱,我這裡還有不少資料,我學了2個多月,基本也算有點小成了吧。呵 自行設計 99s,用數碼管顯示!include define uchar unsigned...