導航:首頁 > 軟體知識 > 如何實現中斷子程序

如何實現中斷子程序

發布時間:2022-11-06 01:27:44

⑴ C語言中斷正在執行的子程序

在子程序中用While(一個全局變數){這里執行子程序的操作} 要中斷時把這個變數設為0, 則那個子程序就退出了. 這里假設你的子程序是個重復反復執行的操作.如果不是,那麼你的需求本身就是錯的做法你需要重新評估你的設計合理性.

⑵ VB如何實現子程序中斷上一級調用程序

假設你的子程序是:
function mysub(a,b,c)
....
end function

調用時可以這樣:
call mysub(m,n,p)

也可以這樣:
mysub m,n,p

注意上面兩種調用方法的區別:一個要括弧,一個不能加括弧。

⑶ c語言怎麼編寫單片機的中斷

標准c語言沒有中斷調用機制,但是不同編譯器都有相應的中斷處理方式,可以使用戶實現中斷功能。
解決方案:
1、採取輪詢的方式解決,就是每10毫秒檢查一下是否有鍵盤請求,總的來說,這樣基本上可以解決問題,而且簡單易行,但每10毫秒都要檢查,系統消耗太大。
2、採取中斷的方式:
(1)用高級語言調用中斷來處理問題。中斷是cpu響應一個中斷外圍設備8259A的一個過程,當鍵盤敲擊,cpu保存斷點暫停執行並且跳到相應的中斷處理程序繼續執行,結束後根據斷點再跳回來。通過這種方式可以輕松+愉快地解決這個問題。但是需要用到高級語言調用匯編,根據編譯器的不同而有所差別。
(2)自己模擬中斷。可以另外建立一個線程專門響應鍵盤的敲擊,如果有敲擊則打斷主線程。這樣做實現起來很復雜,而且涉及到不少復雜的關鍵技術,比如信號量之類的東西。
3、強大的vc
vc採取了消息映射的機制來處理外部設備的請求,比如時鍾中斷、鍵盤中斷等等。通過此可以灰常灰常容易的處理外部中斷。

⑷ 單片機的C語言中如何實現匯編中的中斷程序,寫哪裡還有org這個偽指令可以在C中實現嗎

如果是用C去寫的話,像匯編一樣,開中斷就行了。位置一般就在MAIN 之前的。
//晶振頻率22.1184MHz
#include<at89x52.h>

#define TIMER0H 0x4c
#define TIMER0L 0x00
#define TIMER0_RUN TR0=1
#define SECOND_OVERFLOW 40
#define SEG_PORT P0
#define DISPLAY_DIG1 P1&=0xf0;P1|=0x01

unsigned char g_CurrentDigit=0; //當前顯示的數字

void timer() interrupt 1
{
static unsigned char s_Count = 0;
TH0 = TIMER0H; //重置定時器初值
TL0 = TIMER0L;
//每次進入中斷服務程序,TH0和 TL0 的值都
TIMER0_RUN; //定時器運行,開始下一
if(s_Count != SECOND_OVERFLOW)
{ //未到整秒,把 sCount 值加1
s_Count++;
}
else
{ //到整秒,s_Count歸 0,更新把當前顯示
s_Count = 0;
if(g_CurrentDigit != 9)
{
g_CurrentDigit++;
}
else
{
g_CurrentDigit = 0;
}
}
return;
}

void Initial(void) //初始化
{
IE = 0x82; //僅允許Timer0 中斷
TMOD = 0x01; //Timer0 使用工作方式 1(16位) ,定時器
TH0 = TIMER0H; //設置定時器初值
TL0 = TIMER0L;
TIMER0_RUN; //定時器開始運行
DISPLAY_DIG1;
}

void main()
{
unsigned char code SEG_CODE[]
= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
Initial();
while(1)
{
SEG_PORT = SEG_CODE[g_CurrentDigit]; //顯示當前的數字
//當timer0溢出時,單片機響應 timer0 中斷,調用 timer 函數,
//每40 次調用當前顯示的數字加 1
}
}
程序分析:
程序中主程序做的事只是在死循環中反復顯示當前的數字,每產生一次中斷,程序就跳
轉到中斷服務函數 timer()中進行相應的更新。
這里中斷服務函數 timer()有別於普通 C函數的地方是在聲明中多了「interrupt 1」 ,說明
這個函數是中斷號為 1的中斷服務函數。各個中斷對應的中斷號如表 3.8所示。
這個程序需要初始化的東西比較多, 我們把這些初始化語句都放在了初始化函數 Initial()
中,這也是程序初始化很常見的做法。我們還第一次用到了靜態變數和全局變數。全局變數
是中斷處理函數與外界程序進行參數傳遞的唯一途徑,因此在單片機程序中全局變數的使
用頻率要比普通的 C 語言程序高。盡管如此,由於全局變數的使用會影響程序的結構化,
所以在可以不使用全局變數的地方,還是要避免使用全局變數。在程序中,為了把全局變
量與靜態變數跟普通變數區別開來,我們在變數前分別加了小寫 g_和小寫 s_以示區別。
IE 寄存器中的使能位和C中的中斷號 中斷源
0 外部中斷0
1 定時器0溢出
2 外部中斷1
3 定時器1溢出
4 串列口中斷
5
定時器2溢出(僅在S52、
C52中有此中斷源)

好了,以上是我找的一個實例,希望對你有幫助!

⑸ 51單片機如何調用兩個不同的中斷子程序

當然不可行了,中斷服務程序是不能調用的,只能靠硬體觸發。
你可以初始化時只開啟第一個中斷,在第一個中斷服務程序里,開啟第二個中斷,這樣還是可以的。

⑹ 編寫中斷子程序的基本規則

1.要注意中斷程序的優先順序。
2.中斷子程序盡量短。不要把耗費資源的計算放在中斷子程序中,除非是對時間要求非常敏感應用,如電機的FOC演算法,才能在中斷程序裡面之行。
3. 各個中斷程序中的處理不要相互沖突,中斷是否能嵌套也要小心。

⑺ 51單片機 C語言 如何實現中斷調用

你這個不是中斷調用,只是一種模式選擇。也就是按鍵1按下之後按照一種方式掃描顯示燈,按鍵2按下之後按照另一種方式顯示燈·············。很簡單的。我習慣用switch case 結構,想想就解決了。

⑻ 子程序應放在程序中的什麼位置中斷子程序是如何調用的

子程序一般放在主程序後邊,中斷子程序由中斷矢量決定,當有中斷請求,滿足中斷條件就調用中斷子程序

⑼ C語言中斷正在執行的子程序

在子程序中用While(一個全局變數){這里執行子程序的操作}
要中斷時把這個變數設為0,
則那個子程序就退出了.
這里假設你的子程序是個重復反復執行的操作.如果不是,那麼你的需求本身就是錯的做法你需要重新評估你的設計合理性.

⑽ 51單片機如何在主程序循環的時候通過按鍵進入中斷子程序

只要在P3.2和P3.3腳外部有按鍵,而且按下是接地,那按下鍵就會引起外部中斷0和外部中斷1申請中斷。在主程序初始化時,設置外部中斷為下降沿觸發,並開中斷就行。

閱讀全文

與如何實現中斷子程序相關的資料

熱點內容
醫葯代理產品怎麼樣 瀏覽:74
庫茲馬怎麼一直不交易 瀏覽:39
江蘇技術erp系統哪個好 瀏覽:525
建行為什麼會暫停客戶渠道交易 瀏覽:389
什麼是貨物真實交易 瀏覽:42
qq賬號信息如何重置 瀏覽:12
接種完了為什麼不顯示第二針信息 瀏覽:461
賣家怎麼刪除淘寶交易記錄 瀏覽:802
新型菜市場怎麼改造 瀏覽:915
資本市場股價如何升值 瀏覽:408
拒收快遞多久可以查到信息 瀏覽:112
福鼎花茶代理要什麼條件 瀏覽:542
高級市場有哪些 瀏覽:22
通用技術表格中結構設計怎麼填 瀏覽:964
如何掃描鞋子防盜扣查看得物信息 瀏覽:464
太原最大菜市場在什麼地方 瀏覽:936
做程序的公司一般叫什麼名字 瀏覽:142
湖州市湖州市場在哪裡 瀏覽:596
如何選項目做代理商 瀏覽:426
如何做好企業信息安全防護工作 瀏覽:779