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

2021-03-27 11:34:19 字數 3261 閱讀 6077

1樓:匿名使用者

在某種意思上,中

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

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

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

如:...while(1)

}interrupt 1

2樓:匿名使用者

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

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

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

3樓:匿名使用者

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

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

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

4樓:匿名使用者

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

mcs-51微控制器程式中可以直接呼叫中斷服務程式嗎?為什麼?

5樓:丿丶

這樣給你說吧。當微控制器執行起來的時候是高速運轉你while(1)裡面的程式。但是這樣是不夠的,比如你想把某個訊號傳遞給微控制器讓它處理,比如說:

你按了某個鍵來控制某個燈的亮滅,這時候就需要微控制器來響應你的動作,響應的方式就是中斷。也就是說你在主程式中完成了某個中斷的觸發條件時,當達到這個條件時程式就會跳轉到中斷服務函式中去,執行完中斷服務函式中的程式後再返回主程式中繼續迴圈執行。你說的呼叫其實不太正確,中斷服務函式只能觸發,它是由微控制器內特定的某些暫存器的標誌位控制的,當這些滿足觸發條件的時候,標誌位被硬體置1,然後自動執行你編寫的中斷服務函式。

說的不是很清楚,請見諒,中斷是微控制器內最重要的功能之一,與之對應的還有定時器(這是微控制器的心臟),這些內容在51裡面都是很簡單的,但是到了32位微控制器裡面會變得特別複雜。

希望這些內容能給你一些幫助。

6樓:匿名使用者

理論上是可以的,實際上,也是可以的,但要說明的是,中斷服務程式的返回使用 reti 指令,與子程式返回的 ret 指令是有區別的。

7樓:生活如歌

可以直接呼叫,但這樣中斷服務程式和普通子程式沒什麼區別了吧。

8樓:匿名使用者

呼叫可以,但是如果有堆疊操作的話,可能會破壞程式的執行效果。

如果主程式呼叫中斷程式時,中斷在呼叫的話會怎樣??

c51中有克遞迴呼叫的函式。但**也比較大。記憶體佔用多,似乎不太合算。

mcs51微控制器,中斷服務程式的返回指令和子程式的返回指令有什麼區別?是多少?

9樓:

中斷服務程式的返回指令 彙編助記符 reti 機器指令 32h

子程式的返回指令 彙編助記符 ret 機器指令 22h

10樓:馬洋陌越

ret用於

一般程式的返回

reti用於中斷函式的返回

以上是一般微控制器書籍簡紹的,然而在實際應用中,我發現,在程式返回中一樣可以使用reti,而在中斷返回中卻無法使用ret,究其原因是因為reti比ret多做一件事情就是將「優先順序生效」觸發器清零

原來在8051構架中--中斷系統中含有兩個不可定址的「優先順序生效」觸發器。一個用於指出cpu是否正在執行高優先順序的中斷服務程式,這個觸發器為1時,系統將遮蔽所有的中斷請求;另一個則指出cpu是否正在執行低優先順序中斷服務程式,該觸發器為1時,將阻止除高優先順序以外的一切中斷請求。由此可見,若要響應同級甚至是低階中斷請求,必須使得該「優先順序生效」觸發器清零。

但該觸發器又是不可定址的,所以無法用軟體直接清零。」

c51微控制器的中斷操作,與直接在主函式內寫入中斷服務程式有什麼區別?

11樓:匿名使用者

二樓說的已經相當好了。我只是想在補充一些,主函式內是不能寫中斷服務程式----函式內是不能再定義函式的,中斷服務程式也是一個函式。還有計算機中,設定中斷就是為了達到實時響應,如果你只在中斷程式中設定一個標號,然後把中斷的操作寫在其他函式中就不能快速的響應中斷,而失去了中斷的意義了。

如你把定時器設為1ms中斷一次,在中斷服務程式用一個標號來表示有中斷產生,然後在其他函式中執行中斷的操作,又假如其他函式執行的時間需要10ms那麼也就11ms才執行一次中斷,從而失去了中斷的意義了。2:因為p0口是漏極開路的。

與你所想的也許有很大的區別。呵呵!希望可以幫到你!

12樓:匿名使用者

當你的主程式很長的時候,把中斷的操作寫

在主程式中不能快速的響應。例如一個外部中斷在主程式的開頭被觸發,而你的中斷操作放在主程式的結尾。而你的整個主程式的執行時間是10ms,那麼你這個中斷操作就延遲了10ms。

如果放在中斷服務程式中,不論何時發生中斷,cpu將會跳到中斷服務程式中去處理中斷操作。這是微控制器的一種並行操作方式。第二個問題:

因為p0口是漏極開路的。你去看看p0口的內部結構圖,再用一點點的電路知識就能分析出來。

13樓:匿名使用者

首先為這個你要呼叫的c檔案寫一個標頭檔案,比如這個檔案叫fun.c,那你可以寫一個叫fun.h的標頭檔案。

這個標頭檔案的內容是fun.c檔案裡的函式宣告。接著把fun.

c加入你的專案裡。下一步在主函式的上面用#include "fun.h"把標頭檔案包含進來。

14樓:匿名使用者

就像電腦關機與待機的區別

51微控制器中斷執行過程?坐等,51微控制器中斷中的斷點地址問題,坐等!!!!

51微控制器中斷執行過程,如外部中斷。當 cpu 檢測到 有 中斷觸發 訊號後,首先 執行完成 當前執行的指令,將下一條指令 的 地址 壓入堆疊,cpu 進入中斷 入口 地址,開始 執行 中斷服務程式,當然在中斷服務程式中不能破壞正常執行 程式的各種 暫存器的 狀態 和 資料,中斷服務 程式執行 完...

51微控制器URAT中斷接收資料,51微控制器串列埠接收多個字元 假如是4位元組 ,是分4次中斷傳輸的,還是一次中斷完成的?

t1定時器的初始化程式 void init1 main void main tmod 0x01 th0 th0 tl0 tl0 es 1 允許uart串列埠的中斷ri 0 ea 1 et0 1 tr0 1 init1 main tmod,被初始化了兩次不同的數值,只有最後一次,才是有效的。應該統一使...

微控制器的子程式 子程式和中斷服務子程式 中是不是最後不能用LJMP之類的跳轉指令的?只能是RET或

簡單來說,可以這樣理解沒錯。ret reti指令本身已經包含了從stack中pop pc的操作。call 和 ret 這兩條指令,要配套使用。jmp 和 reti,不屬於它們,不可濫用。微控制器中,能否使用ljmp指令從主程式轉入子程式或從子程式跳轉回主程式,為什麼 這個當復 然是能使用ljmp指令...