單片機中斷的撤除方法
CPU響應(yīng)某中斷請求后,在中斷返回前,應(yīng)該撤除該中斷請求,否則會引起另一次中斷而發(fā)生錯誤。根據(jù)中斷方式的不同,中斷的撤除可以分為定時器/計數(shù)器中斷請求的撤除、外部中斷請求的撤除、串口中斷請求的撤除。
一、定時器/計數(shù)器T0/T1中斷的撤除
定時器/計數(shù)器T0/T1的外部中斷請求,在CPU響應(yīng)中斷后,由內(nèi)部硬件自動清除中斷標(biāo)志TF0和TF1,IE0和IE1,無需采取其它措施。
二、外部中斷請求的撤除
對于電平觸發(fā)方式的外部中斷請求的撤除,不僅要清除中斷標(biāo)志,還需在中斷響應(yīng)后把中斷請求輸入端從低電平強制改為高電平。撤除中斷請求的電路方案如圖所示。
圖 電平方式外部中斷請求的撤消電路
上圖中,用D觸發(fā)器鎖存外部中斷請求低電平,通過觸發(fā)器輸出端Q送INT0,所以增加的D觸發(fā)器對外部中斷請求沒有影響。中斷響應(yīng)后,為了撤銷低電平引起的中斷請求,可利用D觸發(fā)器的直接置位端SD來實現(xiàn)。AT89S52的一根I/O口線P1.0控制SD端。只要在SD端輸入一個負(fù)脈沖(P1.0初始狀態(tài)為1),即可使D觸發(fā)器置1,從而撤銷了低電平的中斷請求信號,所需負(fù)脈沖可以通過在中斷服務(wù)程序中增加以下兩條指令得到:
SETB P1.0 ; P1.0置1
CLR P1.0 ; P1.0置0
所以,電平方式下外部中斷請求信號的撤除,要通過硬件和軟件的配合來解決。
三、 串行口中斷請求的撤除
AT89S52進入串行口中斷服務(wù)程序后常需要對它們進行檢測,以測定串行口發(fā)生了接收中斷還是發(fā)送中斷。TI和RI是串行口中斷的標(biāo)志位(見SCON),中斷系統(tǒng)不能自動將它們撤除,為防止CPU再次響應(yīng)這類中斷,只能用軟件的方法,在中斷服務(wù)程序中用如下指令將它們撤除。
CLR TI ; 撤除發(fā)送中斷
CLR RI ;撤除接收中斷
若采用字節(jié)型指令,則可使用如下指令。
編輯:admin 最后修改時間:2018-05-08