找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1967|回复: 0
打印 上一主题 下一主题
收起左侧

定时器程序设计方法--模式3

[复制链接]
跳转到指定楼层
楼主
ID:59980 发表于 2014-9-22 23:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一,对于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)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表