找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
ID:59980 发表于 2014-9-22 23:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
模式1下的Timer的特点

   一,Timer工作在模式1时是一个16位定时/计数器,计数的初始值的低位和高位分别装载到Timer寄存器TLx和THx中。

  二,Timer通过指令SETB将TRx置1启动。

  三,当TFx=1,表明计数完成,使用指令“CLR TRx”和“CLR TFx”来关闭Timer。

  四,想要重复Timer的计数过程,Timer寄存器中必须重新装载原来的计数的初始值,并将TFx位清0。

  五,模式1的设置步骤:

(1)设置Timer的工作模式。程序中向定时/计数器模式控制寄存器TMOD中装载01H。
(2)往TLx和THx 中载入计数初始值 。
(3)启动 Timer。将TRx置1以启动Timer。
(4)检测 Timer 溢出标志TFx。
(5)关闭 Timer。
(6)清溢出标志TFx。
(7)重新装载。

  六,Timer的计数时间与计数初始值

    Timer寄存器的低位字节TLx和高位字节THx 中装载的是Timer的计数初始值,当Timer启动后,从这个初始值开始每过1个机器周期计数值增加1,直到计数到16位的Timer寄存器的最大值---FFFFH后溢出为止。
    公式:
         t=Val(FFFF-MMLL+1)*1/fc(MHz)*1/12us
其中MM是THx中的数值,LL是TLx中的数值。

例:
    使用的晶振是12MHz,TH0和TL0中装载的计数初始值是EC78H,代入公式中得:
   t=Val(FFFF-EC78+1)*1/12*1/12=Val(1388)*1=5000*1=5000us,
计算过程中,(FFFF-EC78+1)计算结果为1388(十六进制),使用科学计算器可以转换成十进制5000,然后再与单位时间相乘,最后结果为5000,即5ms.


     七,如何选取Timer的计数初始值

例1:设计一个方波信号发生器,要求从P1.0口输出频率f=2KHz的方波,周期T=1/f=1/2*1000=500(us),所以P1.0口输出的高,低电平持续时间分别为250us.

例2:
     250即Timer计数时间,称之为设计时间。计数初始值的步骤:

    1)将设计时间(以us为单位,且小于65536)除以12/fc(MHz)。

2)用65536减去步骤1)得到的数。

3)用科学计数器步骤2)中的得数转换成十六进制数形式MMLL。如果转换结果<100H,则MM=0。

4)最后得计数初始值:THx=MM,TLx=LL.

       根据这个步骤,假设晶振频率为12MHz,设计时间250us:(1)250us/1us=250;(2)65536-250=65286;(3)65286=FF06H;(4)THx=FF,TLx=06。所以Timer寄存器的计数初始值为FF06H。


      八,如何利用Timer进行长时间定时

     1)Timer的设计时间取决于两个因素:晶振频率,THx和TLx中装载的计数初始值。
     2)硬件一旦完成,意味着晶振频率确定,Timer的设计时间就取决于THx和TLx中装载的计数初始值。
     3)当MMLL=0000H时,设计时间t具有最大值,如果晶振频率为12MHz,设计时间最大值=65536,即65.356ms.这个时间连0.1秒都不到,无法满足需要长时间定时的场合.

★★★★★   解决办法是多次重新装载计数初始值.★★★★★程序:

ORG 00H;
START:
      MOV TMOD,#10H; 设置Timer1工作在模式1下
      MOV R1,#50;     R1为重复定时计数器
LOAD:  
      MOV TL1,#0E0H;  往TL1和TH1中载入计数的初始值B1E0H(45536十进制)
      MOV TH1,#0B1H;
      SETB TR1;        启动Timer1
CHECK:
      JNB TF1,CHECK;   检测Timer1标志,当TF1=1,跳出执行下一行,否则返回CHECK
      CLR TR1;          TR1清0  关闭Timer1
      CLR TF1;         将TF1清0
      DJNZ R1,LOAD;    如果R1≠0,跳回LOAD重新装载计数初始值
;````````;  这里是所要处理的程序(如CLR P1.7;)
;````````;
      JMP START;        循环
      END;              程序结束(总延时1s)

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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