Ⅰ 怎樣在c語言中使用中斷函數
首先你要寫中斷函數
然後在主程序中像調用子函數一樣調用就可以了
舉個例子吧
#define uchar unsigned char
#define uchar unsigned char
sbit D1=P1^0;
uchar aa;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(aa==20)
{
D1=~D1;
aa=0;
}
}
}
void T0time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
Ⅱ c語言編譯沒問題,但是中斷了,幫幫忙啊,各位大神
Stack overflow 棧溢出 ,你用的是遞歸演算法 會大量消耗 棧。但棧是有限的 階乘 參數不能過大。
另外第25行n=0 改成n==0
Ⅲ 什麼是C語言的中斷程序作用是什麼
中斷服務程序:處理器處理「急件」,可理解為是一種服務,是通過執行事先編好的某個特定的程序來完成的,這種處理「急件」的程序被稱為——中斷服務程序。
當中央處理器正在處理內部數據時,外界發生了緊急情況,要求CPU暫停當前的工作轉去處理這個緊急事件。處理完畢後,再回到原來被中斷的地址,繼續原來的工作,這樣的過程稱為中斷。實現這一功能的部件稱為中斷系統,申請CPU中斷的請求源稱為中斷源,單片機的中斷系統一般允許多個中斷源,當多個中斷源同時向CPU請求中斷時,就存在一個中斷優先權的問題。通常根據中斷源的優先順序別,優先處理最緊急事件的中斷請求源,即最先響應級別最高的中斷請求。
Ⅳ 匯編中的中斷c語言用什麼
你的意思是不歷轎是怎麼用C語言實現匯編中的中斷?
匯編中的中斷是通過在中斷向量表中對應位置肢運肆的一條跳轉指令跳到中斷程序來實現中斷的;而C語言也是差不多,只不過C語言的中斷函數要用一個特殊的關鍵字去標明它,比如「#pragma
interrupt_handler
int_function()",當然,每一種編譯器可能都不一樣;這是中斷函數與普通函數的區別。當然編譯器碰到一個有這樣關鍵字的函數時就知道它是中斷函數,就會把這個函數的入口地址放悄鉛到中斷向量表中對應的位置去。當中斷來的時候,這樣就能跳到中斷裡面執行中斷程序了。
Ⅳ 如何用c語言編寫一個可中斷的程序
駐留程序
通俗點講
就是
程序運行完了,
還要保留
臨時數據
和
運行狀態,
等下一次
調用時
繼續
執行
和普通程序的
區別:
普通程序(如一個
子函數)
調用完了
,
臨時數據
就
不需要了,
分配的
內存
空間
就
回收了,
而
駐留程序
是
要保留這些的
駐留
程序
主要
用於
中斷函數
,
非中斷函數
也
有應用,較少。分別舉個例子:
1)用於
中斷:
假設
一個
用
定時器
做的
時鍾函數,定時器
設置為
1s一個中斷。
main()
{
顯示
時間
hour,min,sec;
//
循環
刷屏顯示
}
中斷函數
{
sec++;
if(sec>=60)
{
sec=0;
min++;
}
if(min>=60)
{
min=0;
hour++;
}
if(hour>=24)
{
hour=0;
}
}
這時候
就能看出,
中斷程序
在
運行完的
時候
不能
把
3個
變數
清空,
因為
下次
中斷
還要用到
上次的
值,
這個程序
要
一直
駐留
內存;
2)再來個
普通
函數的
假設
做了一個程序
,程序中
有一個
函數aa,而
函數
aa
我只能
讓它執行
3次就得
關閉程序(這個
用在
密碼
驗證上)
aa()
{
密碼驗證次數n+1
返回n
和
驗證結果
}
那這個
aa函數
在
密碼
驗證
階段
就要
常駐
內存
Ⅵ 關於c語言中中斷的問題
標准c語言沒有中斷調用機制,但是不同編譯器都有相應的中斷處理方式,可以使用戶實現中斷功能。
下面是我曾經寫過的一片跟中斷有關的東西,希望對你有幫助。
~~~~~~~~~~~~~~~~~~~~~~~~~
曾經設計俄羅斯方塊,採取延時的方法,比如每次循環延時100毫秒,但是這個期間無法響應鍵盤的請求,游戲總的來說感覺卡卡的。
現在想想解決方案還真不少:
1、採取輪詢的方式解決,就是每10毫秒檢查一下是否有鍵盤請求,總的來說,這樣基本上可以解決問題,而且簡單易行,但每10毫秒都要檢查,系統消耗太大。
2、採取中斷的方式:
(1)用高級語言調用中斷來處理問題。中斷是cpu響應一個中斷外圍設備8259A的一個過程,當鍵盤敲擊,cpu保存斷點暫停執行並且跳到相應的中斷處理程序繼續執行,結束後根據斷點再跳回來。通過這種方式可以輕松+愉快地解決這個問題。但是需要用到高級語言調用匯編,根據編譯器的不同而有所差別。
(2)自己模擬中斷。可以另外建立一個線程專門響應鍵盤的敲擊,如果有敲擊則打斷主線程。這樣做實現起來很復雜,而且涉及到不少復雜的關鍵技術,比如信號量之類的鬼東西~。
3、強大的vc
原來一直感覺vc只是一個編譯器,現在才發現,vc也可以是一種語言。vc採取了消息映射的機制來處理外部設備的請求,比如時鍾中斷、鍵盤中斷等等。通過此可以灰常灰常容易的處理外部中斷。
Ⅶ c語言運行中斷如何看哪裡錯誤
首先,編程錯誤有邏輯錯誤和語法錯誤,不同錯誤的查看方式不同。
語法錯誤在在程序編譯時編譯器會報錯,編譯不能通過,此類錯誤如:變數使用時尚未定義,符號錯誤等等。可以根據編譯器的提示查看錯誤。
而邏輯錯誤主要是程序在邏輯上出現問題,此類錯誤編譯能通過,但是程序運行起來未必會得到所期望得到的結果。如:計算1到100所有數字的和,在寫for循環時錯寫成for(i=1;i<100;i++)這樣100就沒有加進去了,這就是邏輯錯誤。邏輯錯誤的查找通常採用調試的方式。比如,在Visual Studio C++中,你可以在運行結果不正確的代碼段中設置斷點,調試運行(F5),單步執行程序,觀察執行過程中變數的值,直至找到出錯的地方。
Ⅷ c語言怎麼編寫單片機的中斷
外部中斷(INT0):
I0(void)
interrupt
0//interrupt
0用於外部中斷INT0
{//中斷執行的內容}
定時器/計數器中斷(T0):
T0(void)
interrupt
1//interrupt
1用於定時器/計數器T0
{//中斷執行的內容}
外部中斷(INT1):
I1(void)
interrupt
2//interrupt
2用於外部中斷INT1
{//中斷執行的內容}
定時器/計數器中斷(T1):
T1(void)
interrupt
3//interrupt
3用於定時器/計數器T1
{//中斷執行的內容}