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