1樓:匿名使用者
二樓說的已經相當好了。我只是想在補充一些,主函式內是不能寫中斷服務程式----函式內是不能再定義函式的,中斷服務程式也是一個函式。還有計算機中,設定中斷就是為了達到實時響應,如果你只在中斷程式中設定一個標號,然後把中斷的操作寫在其他函式中就不能快速的響應中斷,而失去了中斷的意義了。
如你把定時器設為1ms中斷一次,在中斷服務程式用一個標號來表示有中斷產生,然後在其他函式中執行中斷的操作,又假如其他函式執行的時間需要10ms那麼也就11ms才執行一次中斷,從而失去了中斷的意義了。2:因為p0口是漏極開路的。
與你所想的也許有很大的區別。呵呵!希望可以幫到你!
2樓:匿名使用者
當你的主程式很長的時候,把中斷的操作寫
在主程式中不能快速的響應。例如一個外部中斷在主程式的開頭被觸發,而你的中斷操作放在主程式的結尾。而你的整個主程式的執行時間是10ms,那麼你這個中斷操作就延遲了10ms。
如果放在中斷服務程式中,不論何時發生中斷,cpu將會跳到中斷服務程式中去處理中斷操作。這是微控制器的一種並行操作方式。第二個問題:
因為p0口是漏極開路的。你去看看p0口的內部結構圖,再用一點點的電路知識就能分析出來。
3樓:匿名使用者
首先為這個你要呼叫的c檔案寫一個標頭檔案,比如這個檔案叫fun.c,那你可以寫一個叫fun.h的標頭檔案。
這個標頭檔案的內容是fun.c檔案裡的函式宣告。接著把fun.
c加入你的專案裡。下一步在主函式的上面用#include "fun.h"把標頭檔案包含進來。
4樓:匿名使用者
就像電腦關機與待機的區別
微控制器程式中,中斷服務子程式與其他普通程式有什麼不同?
5樓:電量測量
這兩型別的子程式區別在於如下幾點:
中斷服務子程式有5箇中斷內
源中斷服務子程式不需要容在主程式中被呼叫,而是滿足條件自動觸發從指令上看中斷用reti,子程式用ret
在呼叫普通子程式時有可能被優先順序高的中斷子程式打斷兩者入口地址不同,中斷有固定入口地址
6樓:aizen_人間喜劇
一個自動呼叫 一個手動呼叫 你說有什麼不同
7樓:陸澤仍雅麗
兩型別程式區別於幾點:
斷服務程式5斷源
斷服務程式需要主程式呼叫滿足條件自觸發
指令看斷用reti程式用ret
呼叫普通程式能優先順序高斷程式打斷
兩者入口址同斷固定入口址
c語言中中斷服務子程式與其他子程式的區別
8樓:勤奮的小龍
中斷是微控制器復的一個
制重要功能,中斷子程式專為bai
執行中du斷功能,它是在發生中斷後zhi,自動執行的,不需dao要主程式呼叫;普通子函式要主程式呼叫才能執行。
彙編裡的區別:
普通子函式用ret返回;中斷子程式用reti返回,reti返回時要清除中斷標誌的;
普通子函式呼叫時直接進入函式入口地址,中斷函式在中斷髮生時先進中斷入口
03h、08h、13h、18h、23h後隨即寫一個跳轉指令,再跳轉到相應語句。
c語言區別:
普通子函式用的是c語言裡的主函式呼叫子函式的方法,子函式可以有引數,有返回值;中斷函式沒有引數,沒有返回值;
中斷函式的寫法也不一樣,以80c51為例:
void int0() interrupt 0 using 1
interrupt 0不是是外部中斷0引發的中斷,必須寫; using 1
表示在中斷函式裡用第一組暫存器r0-r7.這個可以省略。
9樓:匿名使用者
中斷服務子程式只需新增關鍵字 interrupt 0/1/2/3/4/5,且不能有返回引數及輸入引數,其他使用方法同普通子程式一樣.
10樓:匿名使用者
「並在mai.c(主函式在其中)檔案中而在另一個c檔案中 」 完全無法理解你這句話啥意思
最好是宣告。 這種語法要求跟你怎麼用這個函式完全沒關係的, 無論是什麼函式只要你用到了最好就是先宣告
11樓:匿名使用者
要, #include" "這相當於檔案包含 只需標頭檔案
mcs-51微控制器程式中可以直接呼叫中斷服務程式嗎?為什麼?
12樓:丿丶
這樣給你說吧。當微控制器執行起來的時候是高速運轉你while(1)裡面的程式。但是這樣是不夠的,比如你想把某個訊號傳遞給微控制器讓它處理,比如說:
你按了某個鍵來控制某個燈的亮滅,這時候就需要微控制器來響應你的動作,響應的方式就是中斷。也就是說你在主程式中完成了某個中斷的觸發條件時,當達到這個條件時程式就會跳轉到中斷服務函式中去,執行完中斷服務函式中的程式後再返回主程式中繼續迴圈執行。你說的呼叫其實不太正確,中斷服務函式只能觸發,它是由微控制器內特定的某些暫存器的標誌位控制的,當這些滿足觸發條件的時候,標誌位被硬體置1,然後自動執行你編寫的中斷服務函式。
說的不是很清楚,請見諒,中斷是微控制器內最重要的功能之一,與之對應的還有定時器(這是微控制器的心臟),這些內容在51裡面都是很簡單的,但是到了32位微控制器裡面會變得特別複雜。
希望這些內容能給你一些幫助。
13樓:匿名使用者
理論上是可以的,實際上,也是可以的,但要說明的是,中斷服務程式的返回使用 reti 指令,與子程式返回的 ret 指令是有區別的。
14樓:生活如歌
可以直接呼叫,但這樣中斷服務程式和普通子程式沒什麼區別了吧。
15樓:匿名使用者
呼叫可以,但是如果有堆疊操作的話,可能會破壞程式的執行效果。
如果主程式呼叫中斷程式時,中斷在呼叫的話會怎樣??
c51中有克遞迴呼叫的函式。但**也比較大。記憶體佔用多,似乎不太合算。
微控制器 多個c原檔案裡的程式含有中斷,主程式呼叫的時候中斷服務程式怎麼辦?寫在主函還是直接跟在子程式裡?
16樓:匿名使用者
中斷程式你寫在**都沒問題,只有安你微控制器的中斷函式格式寫就ok了,但是這個包含中斷的。c檔案必須要被編譯哦。
17樓:匿名使用者
那些子函式用的是同一個中斷嗎,如果用的是不同的中斷就沒關係啊。
還有你的微控制器有中斷優先順序嗎,有的話你就要好好考慮一下了
18樓:匿名使用者
中斷子程式以及呼叫的程式沒有錯誤的話 可以把中斷單獨拿出來做個模組,寫在.h檔案裡,extern void t0()interrupt 1 用到的c檔案,包含這個.h標頭檔案就好
51微控制器中斷服務函式與其他函式的區別
19樓:無殤洛城
中斷函式,屬於後臺觸發,前臺執行的函式體;
其他函式,都屬於前臺呼叫執行的函式體。
51微控制器中斷服務函式與其他函式的差異性:
1,中斷函式與普通函式相比要注意在入口遮蔽一些中斷,在出口恢復,防止中斷函式在處理重要工作中,又被中斷重入,導致處理異常。
2,中斷函式還要注意在入口儲存重要的暫存器狀態,特別是函式中用到的暫存器,在出口恢復,防止中斷函式結束後給正常程式帶來異常。
3,普通函式相當於子程式,完全可以寫到主函式裡面去。
4,中斷函式一般是和硬體相關聯,在一定條件下才跳轉進入的函式,這也是中斷兩字的來歷------中斷現在正在進行的程式,執行中斷函式。
5,中斷函式需要預先設定中斷條件。在嵌入式上,可以是硬體上的定時器技術溢位,或者是中斷引腳電平的跳變,在pc上也可以是一些特定的事件的發生,比如滑鼠的單擊,鍵盤某個按鍵的按下,等等。
6,中斷服務程式的入口地址是相對固定的,而普通的功能程式入口則是隨意設定的,此外,中斷服務程式的呼叫方式也不同於普通的功能程式,中斷服務程式的呼叫是靠中斷申請訊號,而非普通的程式。
20樓:匿名使用者
其實微控制器的中斷服務函式就像一個小型的作業系統,可以同時執行多個任務,中斷觸發之後進入中斷函式,執行完之後,回到程式原先執行的位置,這樣給人感覺同時在執行兩個任務
請教高人c51微控制器c語言中的中斷優先順序怎麼設定
c51中設定中斷優先順序,需要對中斷暫存器ip進行配置。具體值需要根據使用者需要的優先順序順序進行確定,具體的設定方法就是直接寫如下c語言語句 ip 06h 如果5箇中斷同時發生,則響應次序為 定時器0 外中斷1 外中斷0 定時器1 序列中斷 下面給出ip暫存器中每位 共8位 的含義 px0 ip....
微控制器c51怎樣才能學好
步驟 1.找本書大概瞭解一下微控制器結構,大概瞭解就行。不用都看懂,又不讓你出書的。三天 2.找學習板練習編寫程式,學微控制器就是練程式設計序,遇到不會的再問人或查書。二十天 3.自己網上找些小電路類的資料練習設計外圍電路。焊好後自己除錯,熟悉過程。十天 4.自己完全設計具有個人風格的電路,產品,你...
C51微控制器中如何把float的變數取出它的整數存入
用c語言的強制型別轉換就可以吧!比如 float a unsigned char b b unsigned char int a 有些編譯copy器float直接轉換bai成duunsigned char 會有警告,所以先轉 zhi換成int型,再轉dao成unsigned char型。c51微控制...