中斷編程注意
① 嵌入式中編寫中斷處理程序有什麼需要注意的
1.中斷基本概念什麼是中斷?先打個比方。當一個經理正處理文件時,電話鈴響了(中斷請求),不得不在文件上做一個記號(返回地址),暫停工作,去接電話(中斷),並指示「按第二方案」(調中斷服務程序),然後,再靜下心來(恢復中斷前狀態),接著處理文件……。計算機科學家觀察了類似實例,「外師物化,內得心源」,借用了這些思想、處理方式和名稱,研製了一系列中斷服務程序及其調度系統。中斷是CPU處理外部突發事件的一個重要技術。它能使CPU在運行過程中對外部事件發出的中斷請求及時地進行處理,處理完成後又立即返回斷點,繼續進行CPU原來的工作。引起中斷的原因或者說發出中斷請求的來源叫做中斷源。根據中斷源的不同,可以把中斷分為硬體中斷和軟體中斷兩大類,而硬體中斷又可以分為外部中斷和內部中斷兩類。外部中斷一般是指由計算機外設發出的中斷請求,如:鍵盤中斷、列印機中斷、定時器中斷等。外部中斷是可以屏蔽的中斷,也就是說,利用中斷控制器可以屏蔽這些外部設備的中斷請求。內部中斷是指因硬體出錯(如突然掉電、奇偶校驗錯等)或運算出錯(除數為零、運算溢出、單步中斷等)所引起的中斷。內部中斷是不可屏蔽的中斷。軟體中斷其實並不是真正的中斷,它們只是可被調用執行的一般程序。例如:ROMBIOS中的各種外部設備管理中斷服務程序(鍵盤管理中斷、顯示器管理中斷、列印機管理中斷等,)以及DOS的系統功能調用(INT21H)等都是軟體中斷。CPU為了處理並發的中斷請求,規定了中斷的優先權,中斷優先權由高到低的順序是:(1)除法錯、溢出中斷、軟體中斷(2)不可屏蔽中斷(3)可屏蔽中斷(4)單步中斷。
② 單片機編程問題求教(中斷方式編程)
你 可以 改寫這個 程序
ORG 0000H
START: LJMP MAIN
ORG 000BH
LJMP TC0
ORG 001BH
LJMP TC1
ORG 0030H
MAIN: MOV SP, #5FH
SETB EA
SETB ET0
SETB ET1
MOV TMOD, #22H
MOV TH0, #91H
MOV TL0, #91H
SETB TR0
HERE: LJMP HERE
ORG 1000H
TC0: CPL P1.0
MOV TH1, #4DH
MOV TL1, #4DH
SETB TR1
CLR TR0
LJMP HERE
ORG 2000H
TC1: CPL P1.0
RETI
END
③ 學習51單片機C語言編程,學到中斷卡住了,什麼時候用哪種中斷呢怎麼使用中斷是干嗎的,看中斷程序看不懂
中斷是為了使時間更精確。使用中斷一般要先設置使用哪個定時/計數器的模式幾,之後再設置定時器的使能為,再打開總中斷使能位,啟動定時器。外部中斷比定時器的優先順序高,如果有更重要的事等著去處理則交給外部中斷,當檢測到有外部中斷時,會去執行外部中斷服務,執行完後回到之前未執行的地方接著繼續執行;串口用到定時器,因為在串口的模式1和模式3中需要用定時器的溢出率來設置波特率。我說得不怎麼詳細,這個幾句話說不清。這個你可以先把概念搞懂,之後用列子去理解概念會比較好,不懂的就多問問。
這是我在網上看到的一點資料
http://blog.sina.com.cn/s/blog_a05b986d010152h3.html
④ 單片機編程中的中斷問題
試了用proteus模擬沒問題。INT0低電平時,P2.0才有低電平。中斷後保持低電平時,P2.1是低電平,但顯示是變慢,因為要頻繁進中斷的,這正常。
你是實物嗎?是不是有線接錯?
⑤ 單片機編程時中斷程序如何使用
中斷程序不是使用的,是當單片機的中斷源有中斷請求時,以允許中斷的情況下,就是自動轉到中斷程序去執行了。所以,編程時,需要在中斷完成什麼任務,都要寫到中斷程序中就行了,會自己去執行的。而不需要你去使用的。
⑥ 51單片機中斷編程
外部中斷信號接到P3.3口,為INT0中斷,程序如下
#include<reg51.h>
sbit X0=P1^0; //用X0表示P1.0
sbit X1=P1^1; //用X0表示P1.1
sbit X2=P1^2; //用X0表示P1.2
void main(void)
{
P1=0x00; //將P1口初始化位高電平,如果沒有這句,初始化為低電平,這里可根據需要選擇
EA=1; //中斷允許
IT1=1; //觸發方式為下降沿觸發
EX1=1; //外部中斷允許
while(1); //這里可以隨便寫你需要的主程序,我用了個死循環,目的是等待中斷
}
void counter1(void) interrupt 2 //INT1中斷
{
EX1=0; //禁止外部中斷
ET0=1; //計時器中斷0允許
ET1=1; //計時器中斷1允許
TMOD=0x21; //T1用模式2、T0用模式1
IP=0x0a; //T1、T0為高優先順序
X2=~X2; //每次中斷就取反P1.2引腳
X1=1; //P1.1輸出低電平0.3ms
X0=1; //P1.0輸出低電平1.5ms
TH0=0xfd; //T0用模式1,16位計時器,在1.5ms後執行時間中斷0
TL0=0x12;
TH1=0x6a; //T1用模式2,8位計時器,在0.3ms執行時間中斷1
TL1=0x6a;
TR1=1; //啟動計時器T1
TR0=1; //啟動計時器T0
while(X0==1); //等待中斷響應完成
EX1=1; //允許外部中斷
}
void counter2(void) interrupt 1 //定時器0中斷
{
X0=0;
}
void counter3(void) interrupt 3 //定時器1中斷
{
X1=0;
}
程序已經經過模擬調試,可以完成你的要求,等待加分中。。。。
PS一下,如果滿意的話,十分期待給好評,謝謝了
⑦ 寫中斷子程序應注意什麼
中斷是單片機的一個重要功能,中斷子程序專為執行中斷功能,它是在發生中斷後,自動執行的,不需要主程序調用
在匯編中:
中斷子程序用RETI返回,RETI返回時要清除中斷標志的
中斷函數在中斷發生時先進中斷入口
03H、08H、13H、18H、23H後隨即寫一個跳轉指令,再跳轉到相應語句
在C語言中:
中斷函數沒有參數,沒有返回值
要進一步了解,參考:
http://z..com/question/84264993.html
http://z..com/question/100717950.html
http://z..com/question/81735469.html?fr=qrl&cid=865&index=5
⑧ 寫8051單片機C語言中斷程序的時候應該注意什麼問題
樓主你的程序沒有錯,你用中斷0讓P3.3取反,然後不執行IF裡面的語句,思路是對的,,只是你的"中斷程序不能根據輸入中斷"是什麼意思?.根據你的程序,外部中斷源應該是一個開關接P3.2口吧,由開關來引發中斷0,不能根據輸入引發中斷,應該是中斷源的問題,有可以中斷源沒有規律,所以P3_3沒有規律的自動中斷.
⑨ 單片機編程時,中斷程序的編程原則是什麼
什麼意思啊,既然你已經打開中斷了,干嗎再打開呢?如果終端中的幾種情況有關中斷的,那麼關中斷後,程序就跳不到中斷程序內了,你再開中斷也沒用啊!
打開中斷還是要再主程序或一些子函數中才有效。
不過再中斷中再次打開中斷是合法的,因為打開中斷不就是讓ET0=1么?