基于C语言的MCS-51单片机教程 课件 2任务4:定时计数器的使用_第1页
基于C语言的MCS-51单片机教程 课件 2任务4:定时计数器的使用_第2页
基于C语言的MCS-51单片机教程 课件 2任务4:定时计数器的使用_第3页
基于C语言的MCS-51单片机教程 课件 2任务4:定时计数器的使用_第4页
基于C语言的MCS-51单片机教程 课件 2任务4:定时计数器的使用_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

任务4:定时计数器的使用软件延时法:利用指令(延时子程序)运行所消耗的时间实现所需的定时时间。特点:由CPU控制,占用CPU的资源;硬件法:利用一个硬件电路实现所需的时间定时,一旦时间到便产生一个标志信号通知CPU。特点:由CPU控制定时的启动,但定时过程由专用模块实现,CPU不参与其过程。所以提高了CPU的工作效率。定时器就是专用于产生延时和计数的外围模块,是单片机内部重要的组成部分。一、定时的两种方式

定时:用于产生一个标准的时间间隔。单片机使用这种方式可以产生一个符合某一要求的脉冲方波(如下图)。而定时/计数器是对89C51晶振信号12分频后的脉冲计数,即每个机器周期使定时器(T0或T1)的数值加1直至溢出。当89C51单片机晶振频率为12MHz时,一个机器周期为1uS,计数频率为1MHz,计数器计数1次所用时间为1uS,计数器计数N个,则所用时间为N*1uS。

20mS40mSMCS-51Px.y

输出波形

计数:通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时,定时器加1计数。

外部脉冲外部设备说明:不管是定时还是计数方式,定时/计数器实质都是对脉冲计数,当对外部信号计数就是计数功能,对内部晶振信号12分频计数就是定时功能。每个定时/计数器都不占用CPU时间,除非计数器溢出,才可以中断CPU当前操作。

二、定时器的相关寄存器GATE门控位:GATE=0时,只要软件设置TR=1,就可以启动计数器工作;

GATE=1时,只有外部中断引脚INT=TR=“1”时,才能启动计数器工作C/T计数/定时方式选择位:C/T=1时,计数模式。

C/T=0时:定时模式。M1、M0工作方式设置位。GATEC/TM1M0GATEC/TM1M0定时器1定时器01.工作方式寄存器TMOD(SFR的地址:89H)M1M0工作方式说明00013位定时/计数器01116位定时/计数器1028位自动重装定时/计数器113T0分成两个独立的8位定时/计数器;T1停止计数注意!不可以位寻址TF0:T0的溢出中断请求标志:硬件自动置1或清0

计数器溢出时硬件自动置位,即TF0=1。进入中断后再由硬件自动清除(TF0=0);TR0:T0的运行控制位:软件置1或清0

由软件设定:TR0=1

T0开始工作;

TR0=0

T0停止计数。TF1、TR1同上。TF1TR1TF0TR0IE1IT1IE0IT02、控制寄存器TCON(SFR地址:88H)可以位寻址定时/计数器相关位外部中断相关位3、初值寄存器TH和TLTH1和TL1:T1的高八位和低八位寄存器。TH0和TL0:T0的高八位和低八位寄存器。在MCS-51单片机内部,具有两个完全相同的定时计数器T0、T1。它们都具有两种工作模式:定时和计数;无论是定时或计数模式,又都有具备四种工作方式,根据实际要求达到最佳的工作状态。定时计数器的工作方式、工作模式是由SFR中的TMOD内容来决定的。因此对其方式、模式的设定是靠对TMOD的初始化编程实现的。三、51单片机定时器/计数器的四种工作方式1,方式0:13位定时器/计数器THTL震荡器1/12(8位)(低5位)TF中断启动控制T引脚TRGATEINT高三位弃用C/T=0C/T=113位加1计数器在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF=1,向CPU发出中断请求。由于低8位计数器中的高三位没有参与工作,故填装初值时应“避开”此三位。类同于模式0。由于两个计数器为完整的8位,故将计算好的16位初值可直接填装到TH、TL中。在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF=1,向CPU发出中断请求。TLTH震荡器1/12(8位)(8位)TF中断启动控制T引脚TRGATEINTC/T=0C/T=12,方式1:16位定时器/计数器16位加1计数器方式0、1的特点13位和16位的计数器方式。启动后,从某一个初值的基础上进行“加1”计数。当计到“全1”时再来一个计数脉冲,计数器就会产生一个“溢出中断信号”即TF=1,此时计数器本身为“全零”。如果需要重复性的完成某一值的定时或计数,需要在每一次计数前不断的重新预装初值,称之为“软件重装初值”。TL做计数器,TH做初值寄存器,工作前TL,TH分别预置相同的初值。TL计数产生溢出的同时,将TH中的初值自动重装TL。TL继续计数。TL(8位)TH(8位)震荡器1/12TF中断控制T引脚TRGATEINTC/T=1C/T=03,方式2

:8位自动重装定时器/计数器8位加1计数器8位初值寄存器方式2的特点及应用8位计数器的方式,定时或计数的范围远远小于方式0和方式1;具备初值“硬件自动重装”功能,非常适合进行重复性定时的场合,如产生连续方波信号等。编成中省去了软件重装初值的麻烦;在MCS-51单片机中,T1设定成此模式用于做串行口波特率发生器。将T0和T1重新进行“拆分、组合”。将T0变为TH0,TL0组成的两个独立的8位定时/计数器。TH0+TF1+TR1组成8位定时/计数器;TL0+TF0+TR0组成8位定时/计数器;TL0震荡器1/12TF0中断控制T0引脚TR0GATEINT0C/T=0C/T=1TH0TF1中断控制TR1Fosc/124,方式3

组合扩展模式(仅适用于T0)在方式3时T0,T1的电路结构图TL0八位定时/计数器TH0八位定时器TL1TF0TF1将T0分解为两个计数器TL0:8位定时/计数器;TH0:8位定时器(借用TR1和TF1)T1(模式2)做波特率发生器。TH1定时/计数器4种方式比较(计数最大值)模式计数模M最大计数值模式013位Tmax=213=8192模式116位Tmax=216=

65536模式2,38位Tmax=28=256定时/计数器4种方式比较(定时最大时间)模式计数模M最大定时时间Tmax(fosc=12M)模式013位Tmax=8192*1μЅ

=8.192ms模式116位Tmax=65536*1μЅ=65.536ms模式2,38位Tmax=256*1μЅ=0.256msM---计数器的模 模式0:M=213 =8192

模式1:M=216 =65536

模式2、3:M=28=256T=(M-TC)×t

其中,T:定时时间,M:计数器的模,TC:计数初值,t:计数器计数脉冲的周期(t=12/fosc)。四、51单片机初值的计算TC计算举例定时方式:要求T0产生50mS的定时。【解1】选择模式1。

TC=65536−(50mS*1000)/1μS =65536−50000 =15536=3CB0H【思考题】为什么选择模式1?【思考题】TC有没有更简洁的表示方式?

TH=(65536-50000)/256;TL==(65536-50000)%256;TH=(-50000)/256;TL==(-50000)%256;(1)设置定时/计数器的工作方式通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,以及工作方式及启动方法。(2)设置定时/计数器的初始值,即设置THx和TLx的值。

定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。五、定时/计数器的应用步骤(3)启动定时/计数器当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计数溢出时才能中断CPU当前的操作。

(4)计数溢出计数溢出标志位在控制寄存器TCON中,用于通知用户定时/计数器已经计满,用户可以采用查询方式或中断方式进行操作。中断方式查询方式定时/计数器的编程六、51单片机定时器编程与控制(1)中断方式——编程步骤设置中断优先级,当中断只有一个时不用设置设置TMOD初始化设置定时/计数初值启动定时/计数器编写定时/计数器中断的处理服务程序124563编程步骤开中断(2)查询方式——编程步骤设置TMOD初始化设置定时/计数初值启动定时/计数器查询溢出标志位TF0或TF1置位情况及相关处理1

2

4

5

3

开中断编程步骤任务:利用单片机定时/计数器实现1位简易秒表的设计,显示时间0到9秒。

举例任务分析任务的关键是定时,可以利用单片机内部定时/计数器完成。当单片机晶体振荡频率为12MHz,则定时计数器的定时基准为计数1次时间为1us,单片机定时计数器有4种工作模式,可以构成8位、13位和16位计数器;不同位数的计数器其最大定时时间不同,可以采用不同的定时方案。1)8位计数器当构成8位计数器时,其最大计数值为256,即最大定时时间为256us;可以利用定时计数器定时0.250ms,循环定时4000次,实现1S的定时;2)13位计数器当构成13位计数器时,其最大计数值为8192,即最大定时时间为8.192ms,可以利用定时计数器1次定时5ms,循环定时200次,实现1S的定时;3)16位计数器当构成16位计数器时,其最大计数值为65536,即最大定时时间为65.536ms,可以利用定时计数器1次定时50ms,循环定时20次,实现1S的定时;设计方案采用16位计数器实现定时50ms,循环反复20次,达到1S定时。显示采用1位七段数码管。硬件电路仿真图

软件程序单片机定时计数器溢出有中断和查询两种处理方式;查询方式是CPU启动定时计数器工作后,马上读取定时计数器溢出标志位TF0(TF1),判断是否为1,为1表示计数器溢出,1次定时时间到;如果为0,表示定时时间没到,CPU继续读取并判断,重复这个过程。中断方式是在定时计数器溢出后,利用定时/计数器中断系统向CPU提请中断请求,CPU转去处理相应的中断服务程序,如果定时计数器没有溢出,则CPU执行主程序。采用查询方式,定时计数器在定时计数时,CPU在查询中断溢出标志位,CPU不能处理其他事件,占用了CPU的时间;而中断方式,定时计数器在定时计数时,CPU执行主程序,只有计数溢出后,CPU才停止其他程序的执行,转去处理定时计数器溢出中断服务程序,不占用CPU资源。1)查询方式程序设计参考程序:/*1位秒表,数码管显示,定时溢出采用查询方式*/#include<reg51.h>voiddelay1s(){unsignedchari;TMOD=0x01;//置T0为模式1,16位计数器

for(i=0;i<20;i++)//20次循环定时,每次循环定时时间为50ms{ TH0=(65536-50000)/256;//定时器50mSTH0的初始值

TL0=(65536-50000)%256;//定时器50mSTL0的初始值

TR0=1; //启动T0 while(!TF0);//查询计数器是否溢出(TF0=1),即定时50ms时间到

TF0=0; //50ms定时时间到,将定时器溢出标志位TF0清零

}}参考程序:voidmain(){ unsignedcharS;//定义变量S,暂存秒的数值

TMOD=0X01;//定时器初始化

TH0=(65536-50000)/256;计数器初始值

TL0=(65536-50000)%256; S=0;//秒数值初始为0 TR0=1;//启动计时

while(1) { P0=S;//显示秒时间

delay1s();//调用1秒延时函数

S++;//秒变量加1

if(S==10)S=0;//判断10S时间是否到,到了秒变量清零。

}}2)中断方式程序设计参考程序:/*1位秒表,数码

温馨提示

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

评论

0/150

提交评论