本文目錄一覽:
- 1、誰會用C語言編寫61的中斷服務程序,舉個列,格式是怎麼樣的。
- 2、c語言怎麼編寫單片機的中斷
- 3、如何使用c語言書寫定時器1中斷服務程序的首部?
- 4、幾種單片機C語言的中斷程序寫法
- 5、怎樣用C語言編寫一個DOS下的中斷服務程序
誰會用C語言編寫61的中斷服務程序,舉個列,格式是怎麼樣的。
61是神馬?51單片機?
格式:void 函數名()interrupt 中斷號 using 工作組
{
中斷服務程序內容
}
注意:中斷不能返回任何值,所以前面是 void 後面是函數名,名字可以自己起,但不要與c語言的關鍵字相同;中斷函數不帶任何參數,所以 函數名後面的 () 內是 空的,中斷號是指單片機的幾個中斷源的序號。這個序號是單片機識別不同中斷的唯一標誌。所以一定要寫正確。
後面的using 工作組 是指這個這個中斷使用單片機內存中 4 個工作寄存器的哪一組, c51 編譯後會自動分配工作組,因此最後這句話我們通常省略不寫。 c51 中斷寫法實例void T1-time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
}
上面的意思是定時器 1 的中斷服務程序,定時器 1 的中斷服務序號是 3 ,因此我們要寫成 interrupt 3 ,服務程序的內容是給 兩個初值寄存器裝入新值。。
寫中斷前的準備 1 TMOD 賦值 確定工作方式。T0 還是T1 的工作方式。
2 計算初值 裝入 TH0 TL0 或者 TH1 TL1
3 中斷方式時 ,對 IE 賦值,開放中斷。
4 使 TR0 和 TR1 置位,啟動定時器/計數器 定時/計數。
c語言怎麼編寫單片機的中斷
標準c語言沒有中斷調用機制,但是不同編譯器都有相應的中斷處理方式,可以使用戶實現中斷功能。
解決方案:
1、採取輪詢的方式解決,就是每10毫秒檢查一下是否有鍵盤請求,總的來說,這樣基本上可以解決問題,而且簡單易行,但每10毫秒都要檢查,系統消耗太大。
2、採取中斷的方式:
(1)用高級語言調用中斷來處理問題。中斷是cpu響應一個中斷外圍設備8259A的一個過程,當鍵盤敲擊,cpu保存斷點暫停執行並且跳到相應的中斷處理程序繼續執行,結束後根據斷點再跳回來。通過這種方式可以輕鬆+愉快地解決這個問題。但是需要用到高級語言調用彙編,根據編譯器的不同而有所差別。
(2)自己模擬中斷。可以另外建立一個線程專門響應鍵盤的敲擊,如果有敲擊則打斷主線程。這樣做實現起來很複雜,而且涉及到不少複雜的關鍵技術,比如信號量之類的東西。
3、強大的vc
vc採取了消息映射的機制來處理外部設備的請求,比如時鐘中斷、鍵盤中斷等等。通過此可以灰常灰常容易的處理外部中斷。
如何使用c語言書寫定時器1中斷服務程序的首部?
單片機定時中斷C語言的寫法步驟》由會員分享,可在線閱讀,更多相關《51單片機定時中斷C語言的寫法步驟(2頁珍藏版)》請在人人文庫網上搜索。
1、51單片機定時中斷C語言的寫法步驟程序說明:51單片機定時器0工作於方式一,定時50ms中斷一次晶振為12M#includevoid mainTOMD = 0X01;/配置定時器0工作於方式一TH1 = (65536-50000)/256; /高八位裝入初值TL1 = (65536-50000)%256; /低八位裝入初值ET0 = 1;/開定時器0中斷EA = 1;/開總中斷TR0 = 1;/啟動定時器0while(1);void Timer0_int() interrupt 1/重新裝初值TH1 = (65536-50000)/256; /高八位裝入初值TL1 = (65536-50000)%256; /低八位裝入初值 /*/上面是比較好理解的。如果實在要求簡潔的話,看下面的,跟上面功能一樣#includevoid mainTOMD = 0X01;/配置定時器0工作於方式一TH1 = 0x3c; /高八位裝入初值TL1 = 0xb0; /低八位裝入初值IE = 0x82;/開總中斷並開定時器0中斷TR0 = 1;/啟動定時器0while(1);void Timer0_int() interrupt 1/重新裝初值TH1 = 0x3c; /高八位裝入初值TL1 = 0xb0; /低八位裝入初值。
幾種單片機C語言的中斷程序寫法
關於c的中斷使用一般是,定義函數的時候在後面加上interrupt
n
其中
n
對應中斷源的編號,其值從
開始,以
80c51
單片機為例,編號從
0~4,分別對應外中斷
0.
定時器0
中斷.外部中斷
1
.定時器1
中斷.和串列口中斷
.
void
xxxx(void)interrupt
n//中斷服務函數
{
要寫的中斷服務程序.
}
怎樣用C語言編寫一個DOS下的中斷服務程序
DOS中斷中斷屬於彙編層面的內容,可以用asm內聯實現:
在windows visual c++下用__asm關鍵字。
在gcc下用__asm__宏即可。
示例(vc):
#include stdio.h
int main()
{
__asm int 3h;
return 0;
}
這樣就可以在C裡面寫入彙編代碼了。
__asm 關鍵字用於調用內聯彙編程序,並且可在 C 或 C++ 語句合法時出現。 它不能單獨出現。 必須後跟彙編指令、一組在大括弧中的命令、或者至少一對空大括弧。 術語 「__asm 塊」在此處指任何命令或命令組,不管是否在大括弧內。
如果不與大括弧一起使用,則 __asm 關鍵字表示此行的其餘部分是一條彙編語言語句。 如果與大括弧一起使用,則該關鍵字表示大括弧之間的每一行都是一條彙編語言語句。為了與早期版本兼容,_asm 是 __asm 的同義詞。
由於 __asm 關鍵字是語句分隔符,因此您可以將程序集指令放在同一行中。
在 Visual C++ 2005 之前,指令
__asm int 3
不會導致在使用 /clr 編譯時生成本機代碼;編譯器會將該指令轉換為 CLR 中斷指令。
__asm int 3 現在將導致為函數生成本機代碼。 如果您希望函數導致代碼中出現斷點,還希望將函數編譯為 MSIL,請使用 __debugbreak。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249074.html