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