C8051F020內(nèi)部有5 個計數(shù)器/定時器:其中三個16 位計數(shù)器/定時器與標(biāo)準(zhǔn)8051 中的計數(shù)器/定時器兼容,還有兩個16 位自動重裝載定時器可用于ADC、SMBus、UART1 或作為通用定時器使用。這些計數(shù)器/定時器可以用于測量時間間隔,對外部事件計數(shù)或產(chǎn)生周期性的中斷請求。 將定時器與中斷系統(tǒng)的結(jié)合將給我們編程帶來很大的幫助,程序條理性強(qiáng)易編寫易讀。 下面我將利用可裝載的計數(shù)器中斷程序編寫流程總結(jié)如下: 一:定時器初始化 1:停止定時器,清中斷溢出位。 通過設(shè)置SFR中TMRnCN,停止將TMRnCN^2置0,清中斷溢出位TMRnCN^7。 2:計數(shù)值和裝載值的設(shè)置 通過SFR中TMRnL,TMRnH,TMRnRLL, TMRnRLH設(shè)置。 3:打開中斷系統(tǒng)允許位 通過SFR中的IE,EIE1,EIE2實現(xiàn),將對應(yīng)定時中斷位置1即可允許。 4:打開定時器 通過TMRnCN^2置1啟動。 二:中斷部分 1:打開全局中斷 將IE^7置1。一般將該部分寫在定時器初始化前面。 2:中斷服務(wù)程序(ISR) 以C語言為例 void ADD (void) interrupt N { 具體程序 } 其中ADD位程序名,N為中斷優(yōu)先級(具體詳見相應(yīng)MCU說明書) 注意:由于定時器溢出位不能硬件清零,需要在中斷程序編寫清零程序,如所使用定時器為非重載,可以在中斷程序中編寫計數(shù)值的初始化。 |