|
一,對(duì)于AT89S51單片機(jī)來說,前面3種工作模式均適用于Timer 0和Timer 1,但模式3只適用于Timer 0,Timer 1不具有模式3.
二,在模式3下,Timer 0的TL0和TH0變成兩個(gè)獨(dú)立的8位的Timer寄存器。但不具備自動(dòng)重新裝載計(jì)數(shù)初始值的特性。
三,以TL0為Timer寄存器的Timer使用TMOD和TCON中原來Timer 0的控制位,設(shè)置的方法與前面相同。而以TH0為Timer寄存器的Timer 使用原來Timer 1的溢出標(biāo)志位TF1和啟動(dòng)/關(guān)閉TR1,并且不能用作計(jì)數(shù)器使用。
例:AT89S51單片機(jī)的P1 .0口輸出周期為300,占空比為1/3的方波信號(hào)。
程序:
ORG 00H;
START:
MOV TMOD, #03H;設(shè)置Timer 0工作在模式3下
LOAD:
MOV TL0,#9CH;往TL0中載入計(jì)數(shù)初始值(156)
MOV TH0,#38H;往TH0中載入另一個(gè)計(jì)數(shù)初始值(56)
SETB P1.0; P1.0置1
CALL TL_DELAY; 調(diào)以TL0為基礎(chǔ)的延時(shí)子程序
CLR P1.0; P1.0清0
CALL TH_DELAY; 調(diào)以TH0為基礎(chǔ)的延時(shí)子程序
JMP LOAD; 循環(huán),重新裝載計(jì)數(shù)初始值
TL_DELAY: ;以TL0為Timer寄存器的Timer 的延時(shí)子程序
SETB TR0; 啟動(dòng)以TL0為Timer寄存器的Timer
CHECK0:
JNB TF0,CHECK0;檢測(cè)TF0溢出標(biāo)志,等于1就往下執(zhí)行,否則返回繼續(xù)檢測(cè)。
CLR TR0; 關(guān)閉Timer
CLR TF0; 將TF0清0
RET ; 返回主程序
TH_DELAY: ;以TH0為Timer寄存器的Timer 的延時(shí)子程序
SETB TR1; 啟動(dòng)以TH0為Timer寄存器的Timer
CHECK1:
JNB TF1,CHECK1; 檢測(cè)TF1溢出標(biāo)志,等于1就往下執(zhí)行,否則返回繼續(xù)檢測(cè)。
CLR TR1 ; 關(guān)閉Timer
CLR TF1 ; 將TF1清0
RET ; 返回主程序
END ; 程序結(jié)束(總延時(shí)110us)
|
|