标题: 定时器程序设计方法--模式3 [打印本页]

作者: hts2008222    时间: 2014-9-22 23:24
标题: 定时器程序设计方法--模式3
一,对于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)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1