方式3下的T0和Tl大不相同。T0工作在方式3時,TL0和TH0被分成兩個獨立的8位定時器/計數(shù)器。其中,TL0可作為8位的定時器/計數(shù)器,而TH0只能作為8位的定時器。此時T1只能工作在方式0、1或2。
一般情況下,當(dāng)定時器Tl用作串行口波特率發(fā)生器時,T0才設(shè)置為方式3。此時,常把定時器Tl設(shè)置為方式2,用作波特率發(fā)生器。
假設(shè)某AT89S51單片機應(yīng)用系統(tǒng)的兩個外部中斷源已被占用,設(shè)置定時器Tl工作在方式2,用作波特率發(fā)生器?,F(xiàn)要求增加一個外部中斷源,并控制P1.0引腳輸出一個5 kHz(周期為200μs)的方波。假設(shè)系統(tǒng)時鐘為12 MHz。
基本思想:設(shè)置TL0工作在方式3計數(shù)模式,TL0的初值設(shè)為0FFH,當(dāng)檢測到T0引腳信號出現(xiàn)負(fù)跳變時,TL0溢出,同時向CPU申請中斷,這里T0引腳作為一個負(fù)跳沿觸發(fā)的外部中斷請求輸入端。在中斷處理子程序中,啟動TH0,TH0事先被設(shè)置為方式3的100 μs定時,從而控制P1.0輸出周期為200 μs的方波信號,如下圖所示。
(1)初值X計算。TL0的初值設(shè)為0FFH。
5 kHz方波的周期為200 μs,因此TH0的定時時間為100μs。TH0初值X計算如下
(2)程序設(shè)計。參考程序如下: