如果不想在C程式中產生中斷該怎麼辦

2022-08-02 12:00:33 字數 2749 閱讀 3639

1樓:匿名使用者

1、實現中斷響應和中斷返回

當cpu收到中斷請求後,能根據具體情況決定是否響應中斷,如果cpu沒有更急、更重要的工作,則在執行完當前指令後響應這一中斷請求。cpu中斷響應過程如下:首先,將斷點處的pc值(即下一條應執行指令的地址)推入堆疊保留下來,這稱為保護斷點,由硬體自動執行。

然後,將有關的暫存器內容和標誌位狀態推入堆疊保留下來,這稱為保護現場,由使用者自己程式設計完成。保護斷點和現場後即可執行中斷服務程式,執行完畢,cpu由中斷服務程式返回主程式,中斷返回過程如下:首先恢復原保留暫存器的內容和標誌位的狀態,這稱為恢復現場,由使用者程式設計完成。

然後,再加返回指令reti,reti指令的功能是恢復pc值,使cpu返回斷點,這稱為恢復斷點。恢復現場和斷點後,cpu將繼續執行原主程式,中斷響應過程到此為止。

2、實現優先權排隊

通常,系統中有多箇中斷源,當有多箇中斷源同時發出中斷請求時,要求計算機能確定哪個中斷更緊迫,以便首先響應。為此,計算機給每個中斷源規定了優先順序別,稱為優先權。這樣,當多箇中斷源同時發出中斷請求時,優先權高的中斷能先被響應,只有優先權高的中斷處理結束後才能響應優先權低的中斷。

計算機按中斷源優先權高低逐次響應的過程稱優先權排隊,這個過程可通過硬體電路來實現,亦可通過軟體查詢來實現。

3、實現中斷巢狀

當cpu響應某一中斷時,若有優先權高的中斷源發出中斷請求,則cpu能中斷正在進行的中斷服務程式,並保留這個程式的斷點(類似於子程式巢狀),響應高階中斷,高階中斷處理結束以後,再繼續進行被中斷的中斷服務程式,這個過程稱為中斷巢狀。如果發出新的中斷請求的中斷源的優先權級別與正在處理的中斷源同級或更低時,cpu不會響應這個中斷請求,直至正在處理的中斷服務程式執行完以後才能去處理新的中斷請求。

2樓:風若遠去何人留

中斷是系統產生的, 是不可避免的.

不過 在c程式中可以捕捉部分中斷,自行處理.

比如 不想ctrl c 結束. 就可以這樣static void signal_stop(int signo)int main()

以上**限於linux

c語言怎麼跳出中斷

3樓:晨曦月殤

c語言,進入中斷後如果中斷程式中什麼都不執行會直接跳出中斷函式,返回去執行之前的程式,如果中斷中有任務,那麼完成後會跳出中斷,或者中斷中是一些子程式,會先跳去執行子程式,直到全部完成後就跳出中斷,恢復原來的程式執行環境,執行進入中斷之前的程式。

4樓:匿名使用者

照這一小段程式來看,你最後少了一個大括號,也許只是複製過來的時候漏了。

只是如果中斷無法跳出,這個,如果你的tf0 或p33這兩個值為真的話,你的中斷還真的無法跳出了。

如果你是想判斷如果tf0=1時p14取反,那麼語句可以換成if(tf0==1)

因為while迴圈是這樣的:首先判斷表示式的值是否為真,如果為真則執行迴圈體,然後繼續判斷表示式的值。。。。。所以,如果tf0或p33等於1 那麼會一直執行下去,無法跳出。

c語言子程式中可以有中斷嗎?

5樓:金色潛鳥

可以。c 語言 函式 和 子程式 都叫 函式。 子程式 就是 void 函式。

函式 可以 呼叫 其它 函式。

c 語言 函式 也允許 自己調自己 (叫 遞迴呼叫)。

函式裡可以中斷,也可以建執行緒。很靈活。

c語言終端處理的問題。 第一,為什麼要中斷處理,原理是什麼,如果不中斷處理會有什麼後果。

6樓:擺渡人生

第一,cpu同時只能幹一件事,所以要暫停去幹另一件事 需保護現場 資料 不中斷可能會導致資料丟失錯誤 甚至無法處理終端。。串列埠中也可用查詢方式 不用中斷。

第二,步驟 大致是 開中斷允許位 中斷優先順序設定 中斷向量地址設定 寫中斷服務函式:清中斷標誌位,幹中斷需處理的事情

第三,這句話是定義中斷向量 把timer 定義為定時器中斷向量地址為 0x1c的位置 0x1c 自然位地址了

微控制器c語言中斷程式

7樓:匿名使用者

#include

void init(void)//宣告中斷抄初始化襲

main()

void in_0(void)interrupt 0//中斷服務函式

8樓:匿名使用者

clr ex0

jnb p3.1,read1

setb ex0

reti

clr a

mov dph,a

jb p3.1,hard11

inc dptr

nopnop

ajmp hard1

mov a,dph

jz readoutt0

急求c程式!!51微控制器怎麼在外部中斷程式中關閉外部中斷。

9樓:匿名使用者

您好:你的程式中關不到外部中斷的原因是你的主函式中有一句 ex1=1; ,你在中斷中關了中斷,但一進入主函式又開了,所以等於沒有關。解決的方法為:

在主函式里加一句程式,如下:

main()

希望可以幫到您。

10樓:匿名使用者

首先主函式沒有死迴圈。執行一次就停掉了。

中斷已經不起作用了。

先修改程式在說。

c語言中斷

c語言程式,c語言程式設計序

include main printf n d n 輸出字元的個數。希望你能明白。輸入以空格隔開的字元,按回車鍵終止迴圈。ch是一個字元,不是字串。當你輸入一句字元時,輸入了第一個字元後第一次scanf c ch 執行完畢。程式繼續,到判斷 n scanf c ch 這時就相當於提示你輸入第二個字元...

C語言程式解析,c語言程式詳解

一看就是個數列問題 從n 1,p t 1 p 2009,s s t 2009 n 2 p i 1 t 1 p 2009 s s t 2009 t 2009 i 2 t 1 p 2009 p 2009 j 1 s s t 2009 t 2009 t 2009 j 2 s s t 2009 t 2009...

C程式求改正,c語言程式求改正,

include include void date int day,int month main 呼叫函式的時候和函式實現的引數順序不一樣 p date month1,day1 q date month2,day2 p date day1,month1 q date day2,month2 w p ...