版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机定时器作用原理及学习应用详解定时器是单片机的重点中的重点,但不是难点,大家一定要完全理解并且熟练掌握定时器的应用。定时器的初步认识时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,如果大家用的晶振是11.0592M,那么对于这个单片机系统来说,时钟周期=1/11059200秒。机器周期:我们的单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/1105
2、9200秒。现在有不少增强型的51单片机,其速度都比较块,有的1个机器周期等于4个时钟周期,有的1个机器周期就等于1个时钟周期,也就是说大体上其速度可以达到标准51架构的3倍或12倍。因为我们是讲标准的51单片机,所以我们后边的课程如果遇到这个概念,全部是指12个时钟周期。这两个概念了解即可,下边就来我们的重头戏,定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时功能,因此我们的课程也是主要来讲定时器功能,计数器功能大家自己了解下即可。顾名思义,定时器就是用来进行定时的。定时器内部有一个寄存器,我们让它开始
3、计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。还有一个特别注意的地方,就是秒表是加到60后,秒就自动变成0了,这种情况在单片机和计算机里我们称之为溢出。那定时器加到多少才会溢出呢?定时器有几种模式,假如是16位的定时器,也就是2个字节,最大值就是65535,那么加到65535后,再加1就算溢出,如果有其他位数的话,道理是一样的,对于51单片机来说,溢出后,这个值会直接变成0。从某一个初值,经过计算确定的时间后溢出,这个过程就
4、是其定时的含义。定时器的寄存器描述标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR也就是特殊功能寄存器来控制。而和定时器有关的特殊功能寄存器,有以下几个,大家不需要去记忆这些寄存器的名字和作用,你只要大概知道就行,用的时候,随时可以查手册,找到每个寄存器的名字和每个寄存器所起到的作用表2定时值存储寄存器容称tfiiSSFRii 址TII0走时器0高宇节3CHTLO定时器Offi宁书3AH7H1定时1高宇节8DHTL1走时器他字节3BH. diimgoc* cooi表3TC
5、ON-定时器/计数器控制寄存器的位分配(地址:88H)可位寻址;复位值:0x00;复位源:任何复位ffi特号76TP1TRI54TFOTRO2IE12 1T1 - E?0'TO表4TCON-定时器/计数器控制寄存器的位描述位留号捕流rajp4:II14AAH口目中1144丁射冲-空f-.,+R77F1止日勺诽片国出初击?旦止羽酢1盘生也H日勺戟1H直J洎芳r种左武:细年清零f或舍进入左时器中断时硬牛渭零。67R1逵利运彳亍控帝血。钛件K曲湾零来进芍启动关闭走时器-运时器。溢出标志"一旦定时器发生溢出时硬件置匕清零有两5TP0种方式:软件清霍或考进入定时器中断时删清其艮4TRD
6、走凶。运行控?W也软八直位惰零来进万启动民闭左时庭3IE12rn1EOa外部中断部分”弓走时器元茨*暂且不看1To1anaon,com大家注意在表4中的描述中,只要写到硬件置1或者清0的,就是指一旦符合条件,单片机自动完成的动作,只要写软件置1或者清0的,是指我们用程序去完成这个动作,后边课程中不再做说明。表2中的寄存器,是存储计数器的计数值的,两个字节的用于定时器1,两个字节用于定时器00表3中有TF1、TR1、TF0TR0这4位需要我们理解清楚。两位定时器1的,两位定时器0的,我们只解释定时器1的,定时器0的同理。先看TR1,当我们程序中写TR1=1以后,定时器值就会每经过一个机器周期加1
7、,当我们程序中写TR1=0以后,定时器值就会保持不变化。TF1,这个是一个标志位,他的作用是告诉我们定时器溢出了。比如我们的定时器设置成16位的定时器,那么每经过一个机器周期,TL1加1一次,当TL1加到255后,再加1,TL1变成0,TH1会加1一次,如此一直加到TH1和TL1都是255(即TH1和TL1组成的16位整型数为65535)以后,再加1一次,那么就会溢出,TH1和TL1同时都变为0,只要一溢出,TF1马上自动变成1,告诉我们定时器溢出了,仅仅是提供给我们一个信号,让我们知道定时器溢出了,它不会对定时器是否继续运行产生任何影响。表5TMOD-定时器方式控制寄存器的位分配(地址89H
8、)不可位寻址;复位值:0x00;复位源:任何复位位755432i10GATTQT3ATEorMO(T1)(T1)(T1)口)(TO)(TO).TO)i(Tfi)com细心的同学会发现,TCONIE个地方标注的是“可位寻址",TMOD这里标注的是“不可位寻址”。这个地方的意思就是比如TCON有一位TR1,我们可以在程序中直接进行TR1=1;这样操作。但是(T1)M1=1;这样的操作就是错误的。我们要操作就必须一次操作一个字节,就是必须一次性对TMO断有位操作,不能对其中某一位单独进行操作。表6TMOD-定时器/计数器方式控制寄存器的位描述符号描讲11/TO在表95中*桥T的表超制宦时器
9、的位.桩TD的表超科庭柑器。肘位*滚佼被置t无为门割兔SH'INTY脐为高弁且TRW婕带H立彼11时便统定时cl匚器X*左时器开始计时出谟立扳清。时,只更TR位破宜1'定时腐就侵能开始计时?GATE不曼翌弓脚INTY夕喑月詹号的书册静用来测星外弗岂引总中克屋:这是庠时羿牛颐外功能,本诂踝暂不解°cfT走时器或廿霖罪选挥应该何踌g零时坏作龙时功能(内部奈统时用作计数器功能。.,.h,.Jr.1n.工作模M1IVO00011 0 i11表7TMOD-定时器方式控制寄存器M1/M0工作模式仃藕容加尬单片机的侣位定时辞.THti的8位'和九rt的5陵成f13位定时器1
10、 币谦JTL唯&戊丹北位的走时器2 中丈自动重装度,走时溢出右TH?装圭TLn中3 攀匕二“器匚走时莽浇或尹卜展煤讨蒸以上这4种模式的配置,其中模式0是为了兼容老的8048单片机而设的,现在的51几乎不会用到这种模式,而模式3根据我的应用经验,他的功能模式2完全可以取代,所以基本上也是不用,那么我们重点就学习模式1和模式2。模式1就是THn和TLn组成了一个16位的定时器,取值范围是0到65535,溢出后,只要不对THn和TLn重新赋值,则从0开始计数。模式2的功能是自动装载,就是TLn溢出后,TFn就直接置1了,并且THn的值直接赋给TLn,然后TLn从新赋值的这个数字开始计数。这个
11、功能可以用来产生串口的通信波特率,我们讲串口的时候要用至I,本章节我们重点来学习模式1。为了加深大家理解这个定时器原理,我们来看一下他的模式1的电路示意图1。图1定时器/计数器模式1示意图我带着大家来分析一下这个示意图,后边如果手册中遇到,大家也就会自己研究了。osC匡表示时钟频率,因为我们1个机器周期等于12个时钟周期,所以那个d就等于12。下边GATA右边的那个门是一个非门电路,再右侧是一个或门,再往右是一个与门电路看下图上可以看出来,下边部分电路是控制了上边部分,那我们先来边是如何控制的,我们以定时器0为例。1 、TR0和下边或门电路的结果要进行与门运算,TR0如果是0的话,与运算完了肯
12、定是0,所以确定如果要让定时器工作,TR0=1。2 、与门结果要想是1,那或门出来的信号必须也得是1才行。在GATE位为1的情况下,经过一个非门变成0,或门电路结果要想是1的话,那INT0即P3.2引脚必须是1的情况下,这个时候定时器才会工作,而INT0引脚是0的情况下,定时器不工作,这就是GATE位的作用。3 、当GATE位为0的时候,经过一个非门变成1,不管INT0引脚是什么电平,经过或门电路后则肯定是1,定时器就会工作。4 、要想让定时器工作,就是加1,从图上看有两种方式,第一种方式是那个开关打到上边的箭头,就是C/T=0的时候,一个机器周期TL就会加1一次,当开关打到下边的箭头,即C/
13、T=1的时候,T0引脚即P3.4引脚来一个脉冲,TL就加1一次,这也就是计数器功INTO引脚是P3.2,INT1引脚是P3.3,TO引脚是P3.4,T1引脚是P3.5。定时器程序应用了解了定时器相关的寄存器,那么我们下面就来做一个定时器的程序,巩固一下我们学到的内容。我们这节课的程序先使用定时器0,在使用定时器的时候,需要以下几个步骤:第一步:设置特殊功能寄存器TMOD配置好工作模式;第二步:设置计数寄存器THO和TLO的初值;第三步:设置TCON通过打开TR0位来让定时器开始计数。第四步:判断TCOr寄存器的TF0亿监测定时器溢出情况。写程序之前,我们要先来学会计算如何用定时器定时时间。我们
14、以晶振是11.0592M为例讲解,时钟周期就是1/11059200,机器周期就是12/11059200,我们假如要定时20ms就是0.02秒,要经过x个机器周期得到0.02秒,我们来算一下x*12/11059200=0.02,得至ijx=18432。那么我们现在16位的定时器溢出值是65536,我们可以这样,先给TH0和TL0一个初值,让他们经过18432个机器周期后刚好溢出,溢出后我们可以通过检测TF0位得知,就刚好是0.02秒。这个初值y二65536-18432=47104,转成16进制就是0xB800,那么就是TH0=0xB8,TL0=0x00。那0.02秒我们已经定时出来了,细心的同学
15、会发现,我们如果初值直接给一个0x0000,一直到65536溢出,定时器定时值最大也就是71ms左右,那么我们想定时更长时间怎么办呢?用你小学学过的逻辑,倍数关系就可以解决此问题。那好了,我们下面就用程序来实现以下这个功能#inelude/包含寄存器的库文件sbitLED=P0;sbitADDR0=P1:sbitADDR1=P1:sbitADDR2=P1:=sbitADDR3.=P1:sbitENLED=P1;voidmain()unsignedcharcounter=0;ENLED=0;ADDR0=0;ADDR1=1;ADDR2=1;ADDR3=1;LED=1;/74HC138和LED灯初始化部分TMOD=0x01;/设置定时器0为模式1TH0=0xB8;TL0=0x00;/定时值初值TR0=1;/打开定时器0while(1)if(1=TF0)/判断定时器0是否溢出TFO=0;THO=0xB8;/一旦溢出后,重新赋值TL0=0x00;counter+;if(50=counter)/判断定时器0溢出是否达到50次counter=0;/counter清0,重新计数LED=!LED;/LED取反操作,0->1,1->0程序都有注释,不难理解,这里要解释一个地方,就是两次if判断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工作总结之电销顶岗实习总结
- 工作总结之车险出单员实习总结
- 机器人操作系统(ROS2)入门与实践 课件 第4章 ROS2机器人运动控制
- 银行内部审计工作评价制度
- 银行合规管理制度培训
- 《风景区方案分享》课件
- 文秘实践报告
- 山东省济南市济阳区2024届九年级上学期1月期末考试数学试卷(含解析)
- 第5周-七年级上册数学华东师大版(2024)每周测验(含答案)
- 小学生食品安全知识主题班会模板
- 2024年建筑业10项新技术
- 空冷岛详解ppt课件
- IATF16949作业准备验证及停工后验证规定
- 石墨坩埚生产制造项目规划设计方案(75页)
- 消防联动调试记录表通用
- EN10204-2004中文版
- (重要)高中数学数列十种求通项和七种求和方法,练习及答案
- 教师师德考核记录表
- 江苏省对口单招计算机原理教案课件
- 300MW机组热力系统计算与经济性分析
- 苏教版三年级数学上册教材分析各单元目标解读
评论
0/150
提交评论