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

下载本文档

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

文档简介

5单片机定时与计数电子信息工程系董峰任务与知识点(参考教材§5.3,P135)任务定时器实现LED闪烁改变LED灯闪烁速度流水线产品计数交通信号灯的定时控制知识点定时器/计数器的基本结构及工作原理定时器/计数器的初始化定时器/计数器的相关计数器及各种工作方式定时器/计数器的应用5.1定时器与计数器的基本概念1、计数

计数是指对事物数量的统计,通常以“1”为单位进行累加。生活中常见的有家用水电表、汽车里程表等;同时,计数也应用于工业生产中,如某生产流水线对产品进行计数打包,每计到8个,就产生电信号,驱动机械装置进行包装。2、计数器的容量家用水电表走到一定的数量就到顶,再计数就要从零开始。任何计数装置都是有一定的容量限制的。80C51单片机中有两个16位计数器,分别称之为T0和T1,最大的计数量为65536(2的16次方)。3、定时单片机内部有定时与计数装置,如图5-1所示,我们称为定时器与计数器。图5‑1定时器/计数器的定时或计数来源假设单片机内部振荡频率是12MHZ,一个内部计数信号的时间间隔将是1μS。

定时器则是由单片机内部振荡信号经过12分频后产生一个时间间隔稳定的计数信号。计数器记录的是单片机外部发生的事件,由单片机的外部电路提供计数信号4、溢出

计数器是有容量限制的,当到了最大容量时就会清零。如何捕捉这种情况呢?我们叫做溢出。一般来说,对溢出是做相关处理工作的,比如:课间休息十分钟,……,时间到了(溢出),则上课铃响了(相关处理),就意味着要上课了。5、计数次数的预置(重点)80C51单片机最大计数容量是65536,因此只要计满这个数值就会产生溢出,但在实际工作中,经常会有少于65536这个数值的要求。如:生产流水线,要求每计数8个,就要进行溢出处理。类似这种情况很多,如何设置任意溢出的计数值呢?

这里就需要预置计数次数:如果要计数100,预先在计数器中放上65436,这样再来100次脉冲信号,就到了65536最大计数量,意味着可以溢出处理了。65436就称计数的预置值。6、定时时间的预置(重点)

只要计数装置计数间隔时间固定,定时时间是可以转化成计数量来处理的,这里就需要知道每计数一次要花费的时间,这个与单片机晶振频率相关。假设晶振频率是12MHZ,一个机器周期(计时脉冲)是1μS,最大定时时间为65.536ms(计满65536个脉冲)。如果要定时50ms,预先在计数器中放入定时初值65536-50000=15536即可。另外,需要说明

单片机的定时计数装置一般是需要不断重复定时计数操作,即这次完成50ms的定时任务,紧接着可能进行第二次50ms的定时操作。而定时计数器一旦产生溢出,其值就会清零,定时时间就会不准确。

为避免这种错误,我们应该在溢出发生后,马上将定时计数预置初值再次送到定时计数器中,可以保证定时器计数器准确工作。想一想,做一做(1)生产流水线对药片进行计量,每到60粒即为一瓶,要进行封装操作,计数器应预置多大的计数预值?(2)假设单片机的晶振频率是12MHZ,需要定时10ms,定时器应预置定时初值为多少?5.2定时器实现LED灯闪烁【例5-1】用定时器的查询方式实现LED灯的闪烁(间隔时间为60ms)程序分析:

JBC指令格式:JBCbit,标号

这是一条判断转移并清0指令,JBC后面的第1个参数是位变量,第2个参数是一个标号。如果bit位的值等于1,则转到标号所指的位置去执行指令,同时该bit位清0。在这里,是判断定时溢出标志TF0是否溢出,并做出相应事件处理。XRL指令格式:XRLdirect,#data

这是一条逻辑异或指令,XRL后面的第1个参数是直接地址,第2个参数是一个立即数。将直接地址中的数据和立即数按位异或,结果再存放入直接地址中。在程序中,它起的作用是将P1口数据取反后,去点亮LED灯。开始学习定时器/计数器的知识,了解什么是硬件延时了。目标:5.2.1定时器/计数器的基本结构及工作原理图5‑28051定时器/计数器逻辑结构图1.基本结构TMOD、TCON是与定时器工作密切相关的两个控制寄存器。定时器0,定时器1是16位加法计数器

TL0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可单独访问,进行定时/计数初值的设定。TMOD寄存器用于决定定时器/计数器是计数用,还是定时用;TCON寄存器决定定时器/计数器具什么时侯启动,以及什么时侯停止工作。

都可以设置为定时器或计数器用。它们分别由两个8位专用寄存器组成。定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。2.工作原理

定时器开始工作后,它是不会占用CPU的操作时间。也就是说,定时器和CPU之间是互不干扰,并行工作的;

只有在定时器溢出时,才可能中断CPU当前的操作,要求CPU进行相应的溢出处理工作,如【例4-1】中,当溢出发生时,系统将跳转到“13NEXT:”处,做定时器重新赋初值、P1口数据取反等工作。比较一下定时器延时程序和软件延时程序区别?

软件延时程序中,CPU在延时上花费了大量的精力,只顾着计算延时、让彩灯闪烁了,就限制单片机其它功能的发挥。

定时器定时程序中,CPU只需要设好定时初值,延时计算给定时器去做了,CPU可以多做一些其它工作了。5.2.2定时器/计数器的初始化(重点)

在启动定时器/计数器工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器的相关寄存器中,这个过程称为定时/计数器的初始化。

初始化一般有四个步骤

步骤一:确定工作方式通过对工作方式寄存器TMOD进行参数设置,表明定时器/计数器0工作在定时模式的工作方式1中。步骤二:预置定时或计数的初值设12M晶振,则机器周期T=1s。因要求每60ms溢出一次,计数值=60ms/1s=60000。在工作方式1时,其最大计数值等于6553665536-60000=5536=15A0H,将15H、0A0H分别预置给TH0、TL0,即完成初值设置。步骤三:是否开启定时器/计数器中断

我们可以根据实际需要,决定是否允许定时器/计数器的中断请求产生和CPU是否允许接受定时器/计数器的中断请求。由于在本例中使用的是溢出查询处理方式,未采用溢出中断处理方式,因此对中断允许寄存器IE的相关标志位未做设置。

在下一章学习中,我们将学习到定时器/计数器溢出的中断处理方式。

步骤四:启动定时器/计数器工作直接由软件置位启动定时器/计数器工作。想一想,做一做(1)如何将计数初值由十进制数转化成十六进制数,并正确赋值给TH0和TL0?(2)我们如何做到让硬件定时时间变长?5.3对LED灯闪烁速度的控制思考:在例5-1中,LED灯闪的太快了,如何放慢速度呢?下面我们进行试验。【例5-2】LED灯0.5秒闪烁速度控制。溢出否?循环次数10初始化灯亮重置循环初值10重置时间初值NYNY溢出否?循环次数10初始化灯亮重置循环初值10重置时间初值NY程序分析:

在定时溢出时,并不马上改变P1口状态(LED灯亮灭状态),而是利用指令“DJNZR7,JP1”

做循环次数为10的循环判断,没到循环次数,则继续定时,等待溢出;到了循环10次,将LED灯亮灭状态改变,再次设置循环次数,继续定时,等待溢出。在上例中,LED灯闪得太快了,如何放慢它的速度呢?下面我们来进行实验。放慢速度的方法:目标:学习与定时器工作相关的两个寄存器寄存器TMOD和TCON。

5.3.1工作方式寄存器TMOD(重要)TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0位地址(无)定时器1定时器0由上表可知,TMOD的低4位为T0的方式字段,高4位为T1的方式字段,它们的含义完全相同。各标志介绍如下:

GATE:门控位。当GATE=0时,控制寄存器TCON中的TR0或TR1置1即可启动定时器,称之为软启动;当GATE=1时,控制寄存器TCON中的TR0或TR1须先置1,由(P3.2)或(P3.3)引脚为高电平时启动定时器,称之为硬启动。作用:用于控制定时/计数器是否受外部中断请求信号的影响。

:功能选择位。=0时,设置为定时器工作模式;=1时,设置为计数器工作模式。表5-1表5-1方式寄存器TMOD表5-2定时/计数器工作方式设置表M1和M0:工作方式控制位。T0或T1的工作方式选择取决于M1M0设置,其中工作方式0、1、2对T0和T1完全相同,而工作方式3仅为T0所具有,可构成如下表所示的四种工作方式。M1M0工作方式说明00方式013位定时/计数器01方式116位定时计数器10方式2自动重装8位定时/计数器11方式3T0分成两个8位定时/计数器,T1停止计数最后需要注意:TMOD寄存器是不能位寻址的,只能用字节指令设置定时器工作模式和工作方式,高4位定义T1,低4位定义T0。复位时,TMOD所有位均置0。5.3.2控制寄存器TCONTCOND7D6D5D4D3D2D1D0位名称TF1TR1TF0TR0位地址8FH8EH8DH8CHTF1:T1溢出标志位。当T1计数满产生溢出时,由硬件自动置TF1=1。在中断允许时,向CPU发出T1的中断请求,进入中断服务程序后,由硬件自动清0。在中断屏蔽时,TF1可作溢出查询测试用,此时必须由软件清0。TR1:T1运行控制位。当GATE=0时,TR1置1,即可启动T1;当GATE=1,TR1置1,不能启动T1,必须等为高电平才能启动T1。TF0和TR0将作用于T0,其功能及操作情况同TF1和TR1。表5-3控制寄存TCON5.4流水线产品计数和溢出处理

前面介绍了定时/计数器的定时方式,下面通过两个案例看看定时/计数器的计数方式是如何进行的。首先,让我们来看看计数信号在计数器内部是如何表示的,如【例5-3】所示;其次,我们还要知道计数溢出是如何得到处理的,如【例5-4】所示。产品计数溢出处理5.4.1流水线产品计数【例5-3】按键次数通过LED灯显示(二进制数)1、任务分析:该指令将定时/计数器1设定为计数模式的工作方式1,定时/计数器0不工作。

图5‑3外部按键计数电路原理图

当程序运行时,只要按下按钮,按钮所连的红灯就会亮一下,表示计数器进行了一次计数,同时计数值会通过上面的八个黄灯以二进制形式输出。2、工作过程及电路原理图:3、计数工作必须满足以下要求:(重点)(1)外部计数脉冲从引脚T0(P3.4)和T1(P3.5)输入;(2)外部脉冲最高频率不能超过振荡频率的1/24;(3)保证输入信号高/低电平保持在一个机器周期以上时间,才能被系统检测到;(4)只有输入引脚电平发生1到0的负跳变后,新的计数值才装入计数器中。4、定时/计数的四种工作方式工作方式0工作方式1工作方式2工作方式3由方式寄存器TMOD

中的M1M0决定,参见表5-1所示工作方式0图5‑4T0方式0时的逻辑电路结构图设置M1M0=00B,构成13位定时器/计数器。最大计数值为8192。其中,TH0占高8位,TL0占低5位(高3位未用)。当TL0低5位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位),并申请中断。

当GATE=0时,TR0直接控制T0的启动和关闭。TR0=1,接通控制开关,T0从初值开始计数直至溢出。当GATE=1时,与门的输出由的输入电平和TR0位的状态来确定。若TR0=1,外部信号电平通过引脚控制T0是否工作,当为高电平时,允许计数,否则停止计数。

工作方式1INT0振荡器÷12TL08位中断TF0_C/T=0_C/T=1控制T0TR0GATE&≥11TH08位设置M1M0=01B,构成16位定时器/计数器。最大计数值为65536。其中,TH0占高8位,TL0占低8位。当TL0低8位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位),并申请中断。

当GATE=0时,TR0直接控制T0的启动和关闭。TR0=1,接通控制开关,T0从初值开始计数直至溢出。当GATE=1时,与门的输出由的输入电平和TR0位的状态来确定。操作完全同工作方式0。图5‑5T0方式1时的逻辑电电路结构图INT0振荡器÷12TH08位TL08位中断TF0重新输入_C/T=0_C/T=1控制T0TR0GATE&≥11工作方式2设置M1M0=10B,构成8位定时器/计数器。最大计数值为256。其中,TL0用来计数。当TL0溢出时自动向中断位TF0进位(硬件自动置位),并申请中断。同时,TH0存储计数初值会自动向TL0中重装。操作方式同前图5‑6T0方式2时的逻辑电路结构图工作方式3操作方式同前设置M1M0=11B,T0被分解成两个独立的8位计数器TL0和TH0。T1停用。TL0占用T0的所有资源,可用作8位定时/计数器。TH0只能用作定时器使用,溢出时占用定时/计数器T1的控制位TF1。TH0定时器的启动和关闭占用定时/计数器T1的控制位TR1,仅受TR1置1或清0控制。图5‑7T0方式3时的逻辑电路结构图想一想,做一做(1)51单片机定时器/计数器四种工作方式的特点及设置方法?5.4.2计数溢出处理【例4-4】计数溢出触发蜂鸣器发声

在例5-3中,我们学习了定时/计数是如何进行的,但在生产流程中,产品计数到了一定数限要进行包装的,就涉及计数溢出处理了。通过案例学习计数溢出处理。程序如下:1、任务分析:对定时器T0工作模式和工作方式进行相关设置:计数模式为:工作方式2,对外部连续脉冲信号进行计数。定时器T0计数初值为9CH,即计数到100就会自动溢出对P3.7端口进行取反,其目的是使连接到该端口的蜂鸣器鸣叫;代码中可以看到循环10次,即应该鸣叫5声2、蜂鸣器的工作原理图5‑8电磁式蜂鸣器实物图电磁式蜂鸣器的工作电流一般比较大,以致于单片机的I/O口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。

单片机上使用的蜂鸣器一般都是电磁式无源蜂鸣。蜂鸣器根据结构不同分为压电式蜂鸣器和电磁式蜂鸣器,而两种蜂鸣器又可再分类为有源蜂鸣器和无源蜂鸣器,这里的源特指振荡源。有源蜂鸣器直接加电就可以响起,无源蜂鸣器需要我们给它提供振荡源。理想的振荡源为一定频率的方波。(必须在20KHZ以内,否则人耳听不见)。3、工作过程及电路原理图图5‑9计数溢出触发蜂鸣器电路原理图

由图可知,外部脉冲信号频率为4HZ,每到一个脉冲需要用时0.25秒,我们进行计数100次,需要花费时间25秒,也就是说,定时/计数器0到25秒时间就会产生溢出,系统将进行蜂鸣器发声的处理。想一想,做一做(1)在例【5-4】中,我们设置定时器/计数器工作于计数模式,但同样能起作定时效果,定时器与计数器最重要的区别是什么?(2)设置定时器T0,使P1.0输出如图所示的矩形脉冲。5.5交通灯信号的定时控制复杂的交通灯信号系统要包括交通灯正常显示、单路放行控制、紧急事件处理、数码管倒计时等相关控制系统。在这里,我们只介绍交通信号灯的正常定时控制是如何进行设计的。交通灯信号设计交通灯亮灭时序程序设计分析内容包括电路原理图、及交通灯信号设计方法交通灯信号变化要求及亮灭时序安排延时子程序设计、信号灯点亮控制及参数设计、信号灯时延设计、主程序初始化设计三部分内容讲解5.5.1 交通灯信号设计图5‑10十字路口交通灯示意图1、工作电路原理图我们用12只发光二极管模拟交通信号灯。在电路控制时,设计P1各端口相关电位来实现交通灯控制功能。由于相对路口的交通信号是一样的,故只需要单片机P1口的六个引脚就够用了。2、交通灯信号设计方法在实际的交通控制中,如果一道为绿灯或黄灯时,另一道必为红灯。P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0控制码P1口状态说明空空B绿B黄B红A绿A黄A红11110011F3HA灯放行,B灯禁止11110101F5HA灯警告,B灯禁止11011110DEHA灯禁止,B灯放行11101110EEHA灯禁止,B灯警告11110110F6H两灯禁止,两道禁行表5‑3交通灯控制码与状态说明设P1口各引脚输出高电平时,则相关的连线的“信号灯”熄灭;反之,P1口线各引脚输出低电平时,则相关的连线的“信号灯”会点亮。形成的相应控制码和状态说明见下表所示。5.5.2 交通灯亮灭时序设计好交通信号表达之后,我们就要考虑交通信号是如何进行亮灭切换的。即:设计交通灯正常情况下的亮灭时序。通过图示,A、B道(注:A是主道,B是支道)轮流放行。A道放行1分钟,其中5秒用于警告(A绿灯闪烁3秒,A黄灯亮2秒);B道放行30秒,其中5秒用于警告(B灯警告设置同A灯)。要求主干道绿灯时间应该设置比非主干道的要长一些,同时考虑绿灯要能够保持一定时间的闪烁,起到提醒作用。图4‑11交通灯亮灭控制设计流程图5.5.3 程序设计分析1、延时子程序代码设计从信号灯点亮的时长有55秒、2秒、25秒很多种,较为特殊的是闪烁,亮灭一次为1秒,我们可以知道最小的延时时间应该是0.5秒。为提高时间精确度,我们采用定时器进行延时处理。单片机最长的定时时间为65.536ms,和0.5秒最小延时有很大差距,怎么办呢?如果我们设置定时50ms,50ms重复10次,就可以获取0.5秒的延时时间,如下代码所示。延时时间到了,将F0标志置“1”,让主程序进行相应处理2、信号灯点亮控制的参数设计信号灯有七种状态:⑴A、B道禁行(即初始化1秒);⑵A绿灯点亮55秒;⑶

温馨提示

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

评论

0/150

提交评论