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