一,对于AT89S51单片机来说,前面3种工作模式均适用于Timer 0和Timer 1,但模式3只适用于Timer 0,Timer 1不具有模式3.
二,在模式3下,Timer 0的TL0和TH0变成两个独立的8位的Timer寄存器。但不具备自动重新装载计数初始值的特性。
三,以TL0为Timer寄存器的Timer使用TMOD和TCON中原来Timer 0的控制位,设置的方法与前面相同。而以TH0为Timer寄存器的Timer 使用原来Timer 1的溢出标志位TF1和启动/关闭TR1,并且不能用作计数器使用。
例:AT89S51单片机的P1 .0口输出周期为300,占空比为1/3的方波信号。
程序:
ORG 00H;
START:
MOV TMOD, #03H;设置Timer 0工作在模式3下
LOAD:
MOV TL0,#9CH;往TL0中载入计数初始值(156)
MOV TH0,#38H;往TH0中载入另一个计数初始值(56)
SETB P1.0; P1.0置1
CALL TL_DELAY; 调以TL0为基础的延时子程序
CLR P1.0; P1.0清0
CALL TH_DELAY; 调以TH0为基础的延时子程序
JMP LOAD; 循环,重新装载计数初始值
TL_DELAY: ;以TL0为Timer寄存器的Timer 的延时子程序
SETB TR0; 启动以TL0为Timer寄存器的Timer
CHECK0:
JNB TF0,CHECK0;检测TF0溢出标志,等于1就往下执行,否则返回继续检测。
CLR TR0; 关闭Timer
CLR TF0; 将TF0清0
RET ; 返回主程序
TH_DELAY: ;以TH0为Timer寄存器的Timer 的延时子程序
SETB TR1; 启动以TH0为Timer寄存器的Timer
CHECK1:
JNB TF1,CHECK1; 检测TF1溢出标志,等于1就往下执行,否则返回继续检测。
CLR TR1 ; 关闭Timer
CLR TF1 ; 将TF1清0
RET ; 返回主程序
END ; 程序结束(总延时110us)
|