51系列微控制器在處理中斷時影響主程式嗎??處理中斷程式時主程式還在繼續執行嗎??還是已經停止了

2021-05-25 11:55:29 字數 3888 閱讀 9564

1樓:

遇到中斷,程式執行中斷程式,中斷程式執行完成後,主程式繼續往下執行。

比方你正在喝茶,喝到一半時候,來個個**,這時候你得放下茶杯去接**,**接完後,剩餘一半的茶繼續喝。明白了嗎?

2樓:做而論道

微控制器裡面只有一個cpu,cpu只能執行一個程式。

cpu執行中斷程式時,就把主程式停下了。

因此,這才叫做「中斷」。

3樓:詹古香喬慧

主程程式出現多箇中斷按中斷優先順序處理,處理中斷程式後返回原中斷處繼續執行下面程式。

4樓:練鴻才荀悅

你還沒有理解中斷的意義!中斷產生了,微控制器就停止執行主函式,進入中斷執行中斷(中斷得開啟),當執行完中斷後,微控制器又回到主函式執行。就像我現在在看別人提出的問題,當我看到你的問題時(中斷產生),我就進來回答(執行中斷),回答完後我得繼續看別人提出的問題(返回主函式),我回去看別人提出的問題時既不會從頭看起,也不會往後看很多,而是從你問題後的問題繼續看!

為什麼微控制器中斷程式執行時主程式還在慢慢執行?初學~~~

5樓:匿名使用者

你從哪看出來程式還在執行的,你的中斷只有一句,馬上就執行完成了,就跳出中斷函式繼續執行之前的程式了,你要是想觀察中斷後主程式是否執行,應該用死迴圈或者延時吧程式指標留在中斷函式裡,比如你可以在中斷裡延時個2s,等跳出中斷後再觀察主程式跑到哪兒了就一目瞭然了

6樓:

前面的說的都有各自的說明,我想說的是,你選擇低電平觸發,你怎麼觸發它?

手動?還是一直給它一個低電平?如果一直給它低電平的話,因為中斷是隨機的,我們不可能知道它什麼時候會發生中斷,又因為你的終端函式太短了,執行一次中斷只需要一個機器週期,一直接地的話,隨時都在發生中斷,所以你原先設定的0.

5s變一次,就變成了差不多3s變一次,其實你仔細觀察它或許不是精確的幾s變一次,由於中斷的隨機性,導致你的0.5s的時間也發生了隨機性。

7樓:生活如歌

和前面的朋友說的一樣。你的中斷程式太短,執行時間很快,所以你感覺不到它的執行。

8樓:匿名使用者

微控制器是單執行緒的,不可能同時執行。

9樓:匿名使用者

建議先了解一下中斷的概念。它是處理異常事件時暫停正在執行的程式,跳轉到一個特定地址去響應異常事件。隨後繼續執行原來的程式。詳細概念到書上查查或網上搜一下

10樓:匿名使用者

遇到和您一樣的問題,請問您現在知道原因嗎?

51微控制器的中斷服務程式能否用主程式中的某一段代替?

11樓:匿名使用者

可以的,但是得判斷中斷標誌位,判斷有中斷時跳轉到reti,正常執行主程式時不跳轉。

其實還不如把主程式寫兩遍,一個是不帶rei的主程式,一個是中斷服務程式,後面要加reti

舉個例子,假設你可以判斷tf0(中斷0的溢位標誌)*** 000bh

ajmp main1

*** 0100h

main:

…………

main1:

…………

jb tf0,int0

…………

ajmp main

int0:

clr tf0

reti

end這下夠明白了吧

12樓:匿名使用者

可以啊,進入中斷後馬上返回主程式。在中斷程式中設定一個標誌位,在主程式中判斷此標誌位,如果標誌位改變,就證明已經進入過中斷,然後做出相應的處理就ok了。

用主程式代替後就可以像普通函式一樣返回。

微控制器中使用中斷程式會延長主程式執行的時間嗎

13樓:

可以的,但是得判斷中斷標誌位,判斷有中斷時跳轉到reti,正常執行主程式時不跳轉。 其實還不如把主程式寫兩遍,一個是不帶rei的主程式,一個是中斷服務程式,後面要加reti 舉個例子,假設你可以判斷tf0(中斷0的溢位標誌) *** 000bh ajmp main1 *** 0100h main: …… …… main1:

…… …… jb tf0,int0 …… …… ajmp main int0: clr tf0 reti end 這下夠明白了吧

51微控制器中中斷服務程式佔用時間不?

14樓:匿名使用者

在某種意思上,中

斷更具有實時性,中斷處理是根據程式段的大小花費時間的,中斷程式段如果比定時時間還長,那個這個定時在主程式裡失去意義了;比如中斷定時為10個機器週期,而中斷程式段需要執行11個機器週期,那麼意味著緊著的中斷程式失去了理論的實時性;cpu無法在設計的要求下執行指令,所以,一般情況下,要考慮程式段是否能在中斷定時時間內完成;若能完成,那麼使用非自動賦值時也存在時間差異,兩個高低8位的賦值語句也將至少浪費兩個機器(還需要放在中斷的最前面),所以要求時間較為精確時,一定要使用自動裝載方式,若是使用非中斷方式,c語言程式是無法保證的,要使用匯編,一個一個指令進行計算。

而所謂的查詢等待,cpu在這個時間段內就執行累加或自減計數,不做任何工作,這個時間就被白白的浪費了;

中斷程式中可以關閉定時器的,在主程式裡設定一個變數,不斷地查詢這個變數是否為要關閉定時器的值,而中斷程式可以為這個變數賦值。

如:...while(1)

}interrupt 1

15樓:匿名使用者

中斷程式是肯定要佔用時間的,在中斷中可以關閉定時器的;

一般可以在中斷中做計數,累加,設定標誌位,到主迴圈裡面查詢比較好,

當然主要是看你要求的時間精度以及允許的誤差了,如果不是特別高的話也是沒太大影響的,我用t1技術,t0定時,可以測65000hz內的頻率,誤差不查過50,反正可以達到我的頻率測量效果了

16樓:匿名使用者

如果要保證實時性,那就要對每條指令的執行時間相當的瞭解,只有這樣才能夠準確地進行時間的設定;

如果改用查詢等待,則在計時時會佔用主程式的時間,而利用計時器的中斷程式則可以和主程式同時進行,可以讓微控制器的效率更高,當然用查詢也是可以的,只是微控制器此時需要佔用主程式段的時間;

在中斷程式中和主程式中是一樣的,均可以對計時器進行關閉和開啟操作。

17樓:匿名使用者

需要佔用時間,時間的長短 由 中斷服務程式 的長短有關。

微控制器中斷語句結束後回到主程式**?

18樓:駿馳飛車族

在程式正常執行的時候,如果來了一箇中斷。那麼,微控制器會儲存當前地址然後立即進入中斷服務函式。執行完畢後,回到儲存的地址處也就是中斷髮生的地方繼續向下執行。

微控制器在空閒模式或是掉電模式下被中斷啟用的話,首先會執行中斷的服務函式。然後繼續向下執行。具體回到**關鍵要看你讓微控制器下一步做什麼。

如果你下面的程式直接指向sleep的話,那麼微控制器就會直接睡眠。如果指向其他服務函式的話,那麼微控制器就會執行其他的函式。直到執行到sleep的時候才再次睡眠。

否則繼續執行下一步的程式。

微控制器中中斷服務子程式沒執行完能強行跳回主程式嗎,若不能為什麼?若能,相應的中斷標誌位會被清零嗎

19樓:匿名使用者

當然可以強行跳回主程式,不影響中斷標誌位的清零,只要進入中斷,該硬體清零的就自動清零,但強行跳回主程式,微控制器會認為一直在執行中斷程式,因此以後有中斷髮生時也不會再進入中斷程式。所以不能這樣做,用reti就會跳回主程式。

20樓:寡人天才

goto語句能隨便跳

硬體清零的中斷標誌會清0

軟體手動清0的中斷標誌不會自動清0

急求微控制器外部中斷程式,51微控制器外部中斷程式

這相不用中斷程式,就是一個按鍵掃描就行了。bit sign 0 void main void ww interrupt 0我只是簡寫一下,大概就是這個意思 第一次按下數碼管顯示,再按一下數碼管不顯示。希望對你有所幫助!51微控制器外部中斷程式 去抖動抗干擾,程式,或 加個104 電容。急求c程式!5...

51微控制器外部中斷到底什麼意思,51微控制器中的外部中斷服務程式入口0和1有什麼不同

51微控制器有兩個外部中斷申請輸入端 int0 和 int1 這兩個引腳對應兩個中斷入口,只有這兩個引腳上的電平變化,才會觸發相應的中斷 51微控制器中的外部中斷服務程式入口0和1有什麼不同 你是哪個型別的51微控制器 一般是指 兩個中斷的區分 51微控制器有幾個中斷源,分別是什麼?一共5種中斷 優...

什麼是中斷,51子系列微控制器的中斷源有哪些,其優先順序是怎麼樣確定的中斷返回指令和子程式返回指令的差

51微控制器中斷源有 1.兩個外部中斷 init0 init1 分別由ie0 和ie1兩位控制開啟 2.定時器中斷t0 和t1 3.串列埠中斷 優先順序由ip暫存器控制,只能分兩級,高或低。優先順序相同的中斷源也分高低,順序為 外部中斷0 定時器中斷0 外部中斷1 定時器中斷1 序列中斷 中斷返回是...