《单片机应用及控制技术》第7章-定时计数器_第1页
《单片机应用及控制技术》第7章-定时计数器_第2页
《单片机应用及控制技术》第7章-定时计数器_第3页
《单片机应用及控制技术》第7章-定时计数器_第4页
《单片机应用及控制技术》第7章-定时计数器_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章定时/计数器上海电子信息职业技术学院何永艳主编7.1定时/计数概述80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。这两个计数器都是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,从0-65535。7.1.1定时/计数器的概念1.定时功能对片内机周脉冲计数,是定时器。2.计数器功能对外部事件脉冲(下降沿)计数,是计数器。定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。7.1.2.定时/计数器的功能7.2定时/计数器的方式控制寄存器7.2.1.定时/计数器控制寄存器TCON(88H)7.2.2定时/计数器工作方式控制寄存器TMOD7.3定时/计数器的四种工作方式7.3.1工作方式0

定时/计数器的工作方式0称之为13位定时/计数器方式它由TL0/1的低5位和TH0/1的8位构成13位的计数器此时TL0/1的高3位未用。7.3.2工作方式1

工作方式1是16位的定时/计数器方式,将TMOD的M1M0设为01即可。7.3.3工作方式2工作方式2--自动再装入预置数的工作方式。预置数放T0或T1的高8位中,在工作方式2中只有低8位参与计数而高8位是不参与计数的,用作预置数的存放,这样计数范围就小了。通常工作方式2用于波特率发生器。工作方式2特别适合于用作较精确的脉冲信号发生器7.3.4工作方式3在这种工作方式下T0被拆成2个独立的定时/计数器来用。其中TL0可以构成8位的定时器或计数器工作方式,而TH0则只能作为定时器用。7.3.5定时/计数方法51系列单片机的计数器是16位的,也就是最大的计数值范围是0-65535,因此计数器计到65536个脉冲就会产生溢出。定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。80C51定时/计数初值计算公式:7.4定时/计数器的应用使用定时器实时或计数时,需要先对定时器进行设置,即进行初始化等步骤,应用步骤如下:1.合理选择定时/计数器工作方式2.计算定时/计数器定时初值(按上述公式1计算)3.编制应用程序1)定时/计数器的初始化。包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。

2)正确编制定时/计数器中断服务程序。注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。3)若讲定时/计数器用于计数方式,则外部事件脉冲必须从P3.4(T0)或P3.5(T1)引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。7.4.1定时/计数器应用步骤【例7.1】利用定时/计数器T0,产生200us的定时,并使P1.0引脚上输出周期为400us的方波,设系统时钟频率为12MHz。解:由于晶振为12MHz,所以机器周期T为1us。定时时间为200us,定时时间比较短,可以用工作方式0、1、2、3来定时。现举例分别用工作方式1、2两种方式编程。1.用工作方式2实现定时1)计算计数初值XT0初值=28-200us/1us=256-200=56=38H即TH0=38H,TL0=38H2)求T0的方式控制字TMOD:

M1M0=10,GATE=0,C/T=0,可取方式控制字为02H;3)编写源程序:(1)查询方式ORG0000HLJMPMAIN ;跳转至主程序ORG0100HMAIN: MOVTMOD,#02H ;置T0工作于方式2MOVTH0,#38H;装入T0初值MOVTL0,#38HSETBTR0 ;启动T0LOOP: JBCTF0,LOOP1 ;查询定时时间到否?AJMPLOOP ;LOOP1:CLRP1.0 ;P1.0取反输出AJMPLOOP ;继续生成波形END(2)中断方式

ORG0000HLJMPMAIN;跳转到主程序

ORG000BH;T0的中断入口地址

LJMPDVT0;转向中断服务程序

ORG0100HMAIN:MOVTMOD,#02H ;置T0工作于方式2MOVTH0,#38H;装入T0初值

MOVTL0,#38HSETBET0;T0开中断

SETBEA;CPU开中断

SETBTR0;启动T0SJMP$;等待中断

DVT0:CPLP1.0;P1.0取反输出

RETI;中断返回

END2.用工作方式1实现定时1)计算计数初值XT0初值=216-200us/1us=65336=FF38H即TH0=0FFH,TL0=38H2)求T0的方式控制字TMOD:

M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;3)编写源程序:(1)查询方式ORG0000HLJMPMAIN ;跳转至主程序ORG0100HMAIN:MOVTMOD,#01H ;置T0工作于方式1MOVTH0,#0FFH;装入T0初值

MOVTL0,#38H SETBTR0 ;启动T0LOOP:JBCTF0,LOOP1 ;查询定时时间到否?

AJMPLOOP ;LOOP1:CLRP1.0 ;P1.0取反输出

MOVTH0,#0FFH;重置T0初值

MOVTL0,#38HAJMPLOOP ;继续生成波形

END(2)中断方式ORG0000HLJMPMAIN;跳转到主程序

ORG000BH;T0的中断入口地址

LJMPDVT0 ;转向中断服务程序

ORG0100HMAIN:MOVTMOD,#01H ;置T0工作于方式2MOVTH0,#0FFH;装入计数初值

MOVTL0,#38HSETBET0;T0开中断

SETBEA;CPU开中断

SETBTR0;启动T0SJMP$;等待中断

DVT0:CPLP1.0;P1.0取反输出

MOVTH0,#0FFH;重置T0初值

MOVTL0,#38HRETI;中断返回

END【例7.2】测量在(P3.3)端出现的正脉冲的宽度。可用示波器观察。解:门控制位GATE使定时器/计数器T1的启动计数受INT1的控制;当GATE为1,TR1为1时,只有INT1引脚输入高电平时,T1才允许计数,利用GATE的这个功能,可测试INT1引脚(P3.3)上正脉冲的宽度(机器周期数)。源程序如下:

ORG0040HMOVTMOD,#90H ;定时器T1模式1、定时功能

MOV TH1,#00H ;设定初值

MOV TL1,#00H ;

JB P3.3,$ ;等待INT1变低

SETB TR1 ;启动T1 JNB P3.3,$ ;等待INT1变高

JB P3.3,$ ;开始计数,等待变低

CLRTR1 ;停止计数

END【例7.3】已知晶振12MHZ,要求利用定时器T0使图中发光二极管进行秒闪烁。

解:发光二极管进行秒闪烁。即一秒钟一亮一暗,亮500ms,暗500ms。晶振12MHz,每机周1s,T0方式1最大定时只能65ms余。取T0定时50ms,计数10次,即可实现500ms定时。①计算定时初值

T0初值=216-50000s/1s=65536–50000=15536=3CB0HTH0=3CH;TL0=0B0H。②设置TMOD:

00000001B=01H③编制程序如下:

ORG 0000H ;复位地址

LJMP MAIN ;转主程序

ORG 000BH ;T0中断入口地址

LJMP IT0 ;转T0中断服务程序

ORG 0100H ;主程序首地址MAIN: MOV TMOD,#01H ;置T0定时器方式1 MOV TH0,#3CH ;置T0初值50mS MOV TL0,#0B0H

MOV IE,#10000010B ;T0开中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论