单片机的定时器计数器_第1页
单片机的定时器计数器_第2页
单片机的定时器计数器_第3页
单片机的定时器计数器_第4页
单片机的定时器计数器_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第7章单片机的定时器/计数器任务:懂得设置TMOD和TCON以及初值计算读懂程序注意:不同工作方式下初值的处理单片机的定时器计数器共57页,您现在浏览的是第1页!7.1

定时器/计数器概述

实现定时功能,主要采用下面三种方法:软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。采用硬件定时:完全由硬件实现,不占CPU,但定时值与定时范围不能由软件进行控制和修改,即不可编程。采用可编程芯片定时:通过对系统时钟脉冲的计数实现,计数值通过程序设定,此种定时功能强,使用灵活。单片机的定时器计数器共57页,您现在浏览的是第2页!7.1.1定时/计数器的结构实质:加1计数器(16位),由高8位(TH)和低8位(TL)两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

单片机的定时器计数器共57页,您现在浏览的是第3页!TMOD、TCON与T0、T1的结构框图单片机的定时器计数器共57页,您现在浏览的是第4页!设置为定时器模式时,计数值N=T/Tcy注:加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。注:由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。例如:当晶振频率为12MHz时,计数脉冲的周期要大于2s。

单片机的定时器计数器共57页,您现在浏览的是第5页!注意:此SFR只能对其进行字节操作,不能进行位操作单片机的定时器计数器共57页,您现在浏览的是第6页!

二、控制寄存器TCONTCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。可以用软件置1或清0,同硬件置1或清0的效果一样。TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。TR0(TCON.4):T0运行控制位,其功能与TR1类同。单片机的定时器计数器共57页,您现在浏览的是第7页!单片机的定时器计数器共57页,您现在浏览的是第8页!注意:定时和计数应用在方式0下输入脉冲的计数值范围是:0-8192(213)定时器模式时:定时时间T为(213-计数初值)×机器周期结论一:最小定时单位为一个机器周期,最大定时单位为213×机器周期思考:已知一单片机晶体振荡器为6MHz,则最大和最小定时单位为多少?单片机的定时器计数器共57页,您现在浏览的是第9页!定时/计数器应用举例初始化程序应完成如下工作:对TMOD赋值,以确定T0和T1的工作方式;计算初值,并将其写入TH0、TL0或TH1、TL1;中断方式时,则对IE赋值,开放中断;使TR0或TR1置位,启动定时/计数器定时或计数。单片机的定时器计数器共57页,您现在浏览的是第10页!2、对TMOD附值GATE=0,C/T=0(定时)M1M0=00(方式0)

TMOD=00H单片机的定时器计数器共57页,您现在浏览的是第11页!

二、方式1方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。计数个数与计数初值的关系为:

单片机的定时器计数器共57页,您现在浏览的是第12页!

例利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12MHz。分析:1、当为定时方式时(C/T=0),T0对机器周期进行计数,其定时时间为:

T=(216-X)×机器周期则:计数值N=T/机器周期=213-X所以X=216-N=65536-N2、采用方式1时,M1M0=01单片机的定时器计数器共57页,您现在浏览的是第13页!

ORG0000HLJMPMAIN;跳转到主程序

ORG000BH;T0的中断入口地址

LJMPDVT0;转向中断服务程序

ORG0100HMAIN:MOVTMOD,#01H;置T0工作于方式1

MOVTH0,#0D8H;装入计数初值

MOVTL0,#0F0HSETBET0;T0开中断

SETBEA;CPU开中断

SETBTR0;启动T0

SJMP$;等待中断

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

MOVTH0,#0D8H;重新装入计数值

MOVTL0,#0F0HRETI;中断返回

END单片机的定时器计数器共57页,您现在浏览的是第14页!单片机的定时器计数器共57页,您现在浏览的是第15页!单片机的定时器计数器共57页,您现在浏览的是第16页!源程序如下:

MOVTL1,

#06H;给TL1置初值

MOVTH1,#F8H;给TH1置初值

SETBTR1;启动T1LP1:JBCTF1,LP2;查询计数溢出否

AJMPLP1

LP2:MOVTL1,06H;重装初值

MOVTH1,F8H

CPLP1。1;输出取反

AJMPLP1;重复循环单片机的定时器计数器共57页,您现在浏览的是第17页!源程序如下:

MOVTMOD,#60H;设置T1为方式2

MOVTL1,#9CH;置初值

MOVTH1,#9CH

SETBTR1;启动T1DEL:JBCTF1,REP;查询计数溢出

AJMPDEL

REP:CPLP1。0;输出取反

AJMPDEL

单片机的定时器计数器共57页,您现在浏览的是第18页!BEGIN:MOVTMOD,#09H;T0工作于方式1,GATE置1

MOVTL0,#00H

MOVTH0;#00H

WAIT1:JBP3。2,WAIT1;等待INT0变低

SETBTR0;启动T0WAIT2:JNBP3。2,WAIT2;等待正脉冲到WAIT3:JBP3。2,WAIT3;等待INT0变低

CLRTR0;停止T0计数

MOVR0,#DISBUF;显示缓冲区首地址送R0

MOVA,TL0;机器周期的存放格式为低位占低地址,高位占高地址,连续4个显示缓冲单元

XCHDA,@R0

INCR0

SWAPA

XCHDA,@R0

源程序如下:单片机的定时器计数器共57页,您现在浏览的是第19页!7.3定时/计数器及中断系统综合应用[例]设MCS-51单片机系统时钟频率ФCLK为6MHZ,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序(1)主程序任务:1)T0工作方式的设定:选择方式1(16位方式,最大定时131ms) 2)定时常数的设定(定时0.1s): TC=216-100ms/2μs=15536=3CB0H即:TH0应装3CH,TL0应装B0H。单片机的定时器计数器共57页,您现在浏览的是第20页!主程序如下:MAIN:MOVTMOD,#01H;设定T0为方式1

MOVTH0,#3CH;装入定时常数高8位

MOVTL0,#0B0H;装入定时常数低8位

MOVIE,#82H ;开放T0中断

SETBTR0 ;启动T0 MOVR7,#0AH ;设置软件计数器

SJMP$单片机的定时器计数器共57页,您现在浏览的是第21页!完整程序如下:

ORG0000HAJMPMAIN ORG000BH AJMPTOINT ORG0030H MAIN:MOV TMOD,#01H MOVTH0,#3CH MOV TL0,#0B0H MOVIE,#82H SETB TR0 MOV R7,#0AH单片机的定时器计数器共57页,您现在浏览的是第22页!思考题及习题1、80C51有几个中断源?各中断标志是如何产生的?又是如何复位的?CPU响应各中断时,其中断入口地址是多少?2、某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H。试编写主程序及中断服务程序(转至相应的入口即可)。3、外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定?4、定时/计数器工作于定时和计数方式时有何异同点?5、定时/计数器的4种工作方式各有何特点?6、要求定时/计数器的运行控制完全由TR1、TR0确定和完全由、高低电平控制时,其初始化编程应作何处理?单片机的定时器计数器共57页,您现在浏览的是第23页!KeiluVision2是目前使用广泛的单片机开发软件,它集成了源程序编辑和程序调试于一体,支持汇编、C、PL/M语言。点击桌面快捷图标,可以直接进入主界面:KeiluVision2的使用单片机的定时器计数器共57页,您现在浏览的是第24页!在Keil系统中,每做个独立的程序,都视为项目(或者叫工程)。首先从菜单的“项目”中“新项目...”,建立我们将要做的工程项目:

单片机的定时器计数器共57页,您现在浏览的是第25页!为项目选定一个目标设备(如ATMEL89C51)单片机的定时器计数器共57页,您现在浏览的是第26页!“文件”/“保存”,扩展名必须是.ASM单片机的定时器计数器共57页,您现在浏览的是第27页!单片机的定时器计数器共57页,您现在浏览的是第28页!在相应选项卡进行设置,如“调试”选项卡,可设置软件/硬件仿真方式。硬件方式还需设置串口和波特率(一般为9600)单片机的定时器计数器共57页,您现在浏览的是第29页!“步进”运行方式选中“Port0”进行模拟“调试”单片机的定时器计数器共57页,您现在浏览的是第30页!7.1.2定时/计数器的工作原理输入的计数脉冲有两个来源:

定时功能

系统的时钟振荡器输出脉冲经12分频后送来

计数功能

T0或T1引脚输入的外部脉冲源

工作原理:每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。由溢出时计数器的值减去计数初值才是加1计数器的计数值。振荡器÷12加1计数器TFxT0(T1)中断C/T=0C/T=1控制信号如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。单片机的定时器计数器共57页,您现在浏览的是第31页!

7.2定时/计数器的控制

8051单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。一、工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下:单片机的定时器计数器共57页,您现在浏览的是第32页!GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1置1启动定时/计数器工作;GATE=1时,外部中断请求信号启动定时器。:定时/计数模式选择位。

=0为定时模式;=1为计数模式。M1M0:工作方式设置位。单片机的定时器计数器共57页,您现在浏览的是第33页!

7.3定时/计数器的工作方式

一、方式0

方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。单片机的定时器计数器共57页,您现在浏览的是第34页!门控位GATE具有特殊的作用:当GATE=0时,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制。此时当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。

单片机的定时器计数器共57页,您现在浏览的是第35页!结论二:定时时间T为(213-计数初值)×机器周期而计数值N=T/Tcy(Tcy即机器周期)所以计数初值计算的公式为:X=213-N=8192-N单片机的定时器计数器共57页,您现在浏览的是第36页!例7-1应用定时器T0产生1ms定时(方式0),并使P1.0输出周期为2ms的方波,已知晶振频率为6MHz.请设计程序解:1、当为定时方式时(C/T=0),T0对机器周期进行计数,其定时时间为:

T=(213-X)×机器周期则:计数值N=T/机器周期=213-X所以X=213-N=8192-N=8192-T/机器周期=8192-1×10-3/2×10-6=7692X对应的二进制数为11110000

01100

TH08位TL0低五位TH0=0F0HTL0=0CH单片机的定时器计数器共57页,您现在浏览的是第37页!ORG2000H

MOVTMOD,#00H;写入方式控制字

MOVTL0,#0CH;计数初值写入MOVTH0,#0F0H

SETBTR0;启动T0LOOP:JBCTF0,PE;TF0=1溢出跳转AJMPLOOP;PE:MOVTL0,#0CH;MOVTH0,#0F0H

CPLP1.0;思考?

AJMPLOOPEND单片机的定时器计数器共57页,您现在浏览的是第38页!单片机的定时器计数器共57页,您现在浏览的是第39页!解:1、计算计数初值X:由于晶振为12MHz,所以机器周期Tcy为1s。所以:N=T/Tcy=10×10-3/1×10-6=10000X=65536-10000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中

2、求T0的方式控制字TMOD:

M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;单片机的定时器计数器共57页,您现在浏览的是第40页!

三、方式2方式2为自动重装初值的8位计数方式。

工作方式2特别适合于用作较精确的脉冲信号发生器。

计数个数与计数初值的关系为:

单片机的定时器计数器共57页,您现在浏览的是第41页!

四、方式3方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。

工作方式3将T0分成为两个独立的8位计数器TL0和TH0

单片机的定时器计数器共57页,您现在浏览的是第42页!方式0、方式1的应用例:选择T1方式0用于定时,在P1.1输出周期为1ms的方波,晶振fosc=6MHZ。分析:1、根据题意,只要使P1.1每隔500µs取反一次即可得到1ms方波,因而T1的定时时间为500µs2、将T1设为定时方式0:GATE=0,C/T=0,M1M0=00;T0不用可为任意,只要不使其进入方式3,一般取0即可。故TMOD=00H。系统复位后TMOD为0,所以不必对TMOD置初值。3、计算500µs定时T1的初值:机器周期Tcy=12/fosc=12/6×106=2µs设初值为X则:(213-X)×2×10-6s=500×10-6sX=7942D=1111100000110B=1F06H因为在作13位计数器用时,TL1高3位未用,应写X的低5位装入TL1的低5位,所以TL1=06H;X的高8位应装入TH1,所以TH1=F8H。单片机的定时器计数器共57页,您现在浏览的是第43页!方式2的应用例:用定时器1方式2计数,要求每计满100次,将P1.0取反。根据题意,外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。方式2有自动重装初值的功能,初始化后不必再置初值。初值X=28-100=156D=9CH

TH1=TL1=9CHTMOD=60H单片机的定时器计数器共57页,您现在浏览的是第44页!门控位的应用图

外部正脉冲宽度测量例:利用T0门控位测试INT0引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。根据要求可这样设计程序:将T0设定为方式1,GATE设为1,置TR0为1。一旦INT0(P3。2)引脚上出现高电平即开始计数,直至出现低电平,停止计数,然后读取T0的计数值并显示。测试过程如下:INT0(P3.2)09H→(TMOD)1→TR0T0从0开始计数0→TR0停止T0计数读出T0值单片机的定时器计数器共57页,您现在浏览的是第45页!

INCR0

MOVA,TH0

XCHDA,@R0

INCR0

SWAPA

XCHDA,@R0DIS:LCALLDISUP;长调用显示子程序

AJMPDIS;重复显示机器周期数由于定时方式1的16位计数长度有限,被测脉冲高电平宽度只能小于65536个机器周期。单片机的定时器计数器共57页,您现在浏览的是第46页!3)中断管理:允许T0中断,开放总中断即:IE应装10000010B。4)启动定时器T0:SETB TR05)设置软件计数器初值:(如使用R7)即R7应装0AH6)动态停机: SJMP $单片机的定时器计数器共57页,您现在浏览的是第47页!(2)中断服务程序 任务: 1)恢复T0常数; 2)软件计数器减1; 3)判断软件计数器是否为0。为0时,改变P1.0状态,并恢复软件计数器初值;不为0时中断返回。程序如下: TOINT: MOV TL0,#0B0H ;恢复定时常数

MOV TH0,#3CH ; DJNZ R7,NEXT CPL P1.0 MOV R7,#0AH NEXT: RETI单片机的定时器计数器共57页,您现在浏览的是第48页! SJMP $TOINT: MOV TL0,#0B0H MOV TH0,#3CH DJNZ R7,NEXT

温馨提示

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

评论

0/150

提交评论