第五章-单片机定时器与计数器---副本...ppt_第1页
第五章-单片机定时器与计数器---副本...ppt_第2页
第五章-单片机定时器与计数器---副本...ppt_第3页
第五章-单片机定时器与计数器---副本...ppt_第4页
第五章-单片机定时器与计数器---副本...ppt_第5页
免费预览已结束,剩余42页可下载查看

下载本文档

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

文档简介

,第五章单片机定时器与计数器,CompanyLogo,单片机定时器与计数器,CompanyLogo,一、定时/计数器结构,MCS-51单片机定时器/计数器的逻辑结构如图5-1所示。主要由工作方式寄存器TMOD、控制寄存器TCON和初值寄存器TLX、THX等工作部件组成。,CompanyLogo,等效逻辑结构图,CompanyLogo,1工作方式寄存器(TMOD89H),GATE:门控位。GATE=0启动不受/INT0或/INT1的控制;GATE=1启动受/INT0或/INT1的控制。C/:外部计数器/定时器方式选择位。C/=0定时方式;C/=1计数方式。M1M0:工作模式选择位。,TMOD,CompanyLogo,M1M0:工作模式选择位。,CompanyLogo,2、初值寄存器TH0,TL0,TH1,TL1,51子系列单片机内有两个十六位增一定时/计数器,TH0,计数值高八位,TL0,计数值低八位,TH1,计数值高八位,TL1,计数值低八位,最大计数器值M65535,CompanyLogo,3定时/计数器控制寄存器(TCON88H),TR0:定时/计数器0运行控制位。软件置位/复位。与GATE有关分两种情况:GATE=0时:若TR0=1,开启T0;若TR0=0,停止T0。GATE=1时:若TR0=1且/INT0=1时,开启T0;若TR0=1但/INT0=0,则不能开启T0。若TR0=0,停止T0计数。TR1:定时/计数器1运行控制位。用法与TR0类似。TF0/TF1:定时/计数溢出标志。1:有溢出,0:无溢出IE0/IE1:外部中断请求标志。1:有请求,0:无请求IT0/IT1:外部中断触发方式。1:下降沿,0:低电平,CompanyLogo,二、定时器/计数器的工作方式,工作方式M1M0=00,工作方式0:13位计数。TH的8位和TL的低5位,CompanyLogo,在工作方式0下,计数器的计数值由下式确定:213-X=8192-X计数值范围是:18192(213)定时器的定时值由下式确定:T=N*Tcy=(8192-X)*Tcy,例:单片机晶振频率fosc=12MHZ定时器0定时1MS,采用方式0时,TCON,TMOD,TH0,TL0的值分别是:,TCON=0 x10,TMOD=0 x00,TH0=(81921000)/32,TL0=(81921000)%32,CompanyLogo,工作方式的应用:【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式0产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。解:(1)计算计数初值.欲产生周期为600s的等宽方波脉冲,只需在P1.7端以300s为周期交替输出高低电平即可,因此定时时间应为300s。设待求计数初值为N,则:(213-N)210-6=30010-6N=8042=1F6AH0001111101101010B用T1实现。将低5位01010B=0A写入TL1,将高8位有效值11111011B=FBH写入TH1中。,CompanyLogo,(2)TMOD初始化为把定时/计数器1设定为方式0,则M1M0=00。为实现定时功能应使C/T=0,为实现内部定时器启动应使GATE=0,因此设定工作方式控制寄存器TMOD=00H。(3)由TR1启动和停止定时器TR1=1为启动,TR1=0为停止,CompanyLogo,C语言参考程序,#include/包含特殊功能寄存器库sbitP1_7=P17;/定义P1.7口,程序中用P1_7代替/P1.7。voidmain()/主函数IE=0 x00;/关中断TMOD=0 x00;/工作方式设定TR0=1;/启动定时for(;)/无限循环体TH1=0 xFB;TL1=0 x0A;/计数初值设定dowhile(!TF1)/查询是否溢出,当TF0=1时溢出来,则跳出do-while循环。P1_7=!P1_7;TF1=0;/溢出,P1.7取反,中断标志TF1清0。,CompanyLogo,中断方式完成,#include/包含特殊功能寄存器库sbitP1_7=P17;/定义P1.7口,程序中用P1_7代替P1.7。voidmain()/主函数TMOD=0 x00;/工作方式设定TR0=1;TH1=0 xFB;TL1=0 x0A;ET0=1;EA=1;while(1);/启动定时VoidT_0()interrupt1using3P1_7=!P1_7;TH1=0 xFB;TL1=0 x0A;,CompanyLogo,2.定时/计数器工作方式1M1M0=01,P3.4,P3.2,CompanyLogo,在工作方式1下,计数器的计数值由下式确定:216-X=65536-X计数值范围是:165536(216)定时时间长;时器的定时值由下式确定:T=N*Tcy=(65536-X)*Tcy,定时计数器的工作方式1与方式0基本相同,区别只是方式0是13位计数器,而方式1为了16位计数器。当要求定时时间较长,13位计数器不能满足要求时,可改用方式1,用16位计数器计数。,CompanyLogo,工作方式1应用,【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式1产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。该题目就是用方式1实现例5-1的功能。原理与例5-1相似,只需修改工作方式和计数初值设置即可。,CompanyLogo,(1)计算计数初值欲在P1.7引脚输出周期为600s的等宽方波脉冲,只需在P1.7端交替输出300s的高低电平即可,因此定时时间应为300s。设计数初值为N,则:(65536-N)210-6=30010-6N=65386将计数初值N的低8位6AH写入TL1;将计数初值N的高8位1FH写入TH1。(2)TMOD初始化题目要求定时器/计数器1为工作方式1,所以M1M0=01;为实现定时功能应使C/=0;为实现定时器内启动,应使GATE=0。此题目不涉及定时器/计数器0,为方便起见,设其各控制位均为0。则工作方式控制寄存器TMOD=10H。(3)启动和停止控制因为定时器/计数器1作定时器,故当TR1=1时,启动计数;当TR1=0时,停止计数。(4)中断的开放/禁止题目中要求用查询方式检查T1的计数溢出状态,故设置IE=00H,以关中断。,CompanyLogo,3、定时/计数器工作方式2M1M0=10,初值自动重装,将TH中的数值装入TL中。,CompanyLogo,工作在方式下,计数器的计数值由下式确定:28-X=256-X计数范围为:1256定时准确定时器的定时值由下式确定:T=N*Tcy=(256-X)*Tcy,CompanyLogo,工作方式的应用【例】使用定时器T0以方式2产生200微秒定时,在P1.0输出周期为400微秒的连续方波。已知晶振频率fosc=6MHz。(1)计算计数初值(256-N)210-6=20010-6N=156=9CH(2)TMOD初始化工作方式2时,M1M0=10,实现定时功能C/T=0,内部启动GATE=0。定时器1不用,无关位设定为0,可得TMOD=02H。(3)允许中断(4)TR0启动定时,CompanyLogo,C语言参考程序:#include/包含特殊功能寄存器库sbitP1_0=P10;/定义P1.0口,程序中用P1_0代替P1.0。voidmain()/主函数TCON=0 x00/清TCON,定时器中断标志清零及不允许计数TMOD=0 x02;/设定时器T0工作方式2TH0=0 x9c;TL0=0 x9c;/设初值EA=1;ET0=1;/开中断TR0=1;/启动计数while(1);/无限循环,结束主函数voidtime0_int(void)interrupt1/中断函数P1_0=!P1_0;,CompanyLogo,、定时/计数器工作方式功能多,当M1,M0=11时,定时/计数器处于工作方式3,此时,定时/计数器的等效电路如图所示,CompanyLogo,当T0工作于方式3时,T1只能工作在方式0、方式1或方式2,并且由于已没有计数溢出标志位TF1可供使用,只能把计数溢出直接送给串行口,作串行口的波特率发生器使用。等效电路图如下,波特率发生器,CompanyLogo,在使用定时/计数器时,应做好4件事:设置TMOD以选择工作方式;计算并设置计数初值THX,TLX;设置IE、IP以规定中断的开放/禁止及优先级;设置TCON以启动/停止定时/计数器的工作。,CompanyLogo,工作方式的应用【例】假设有一个用户系统中已使用了两个外部中断源,并置定时器T1于方式2,作串行口波特率发生器用,现要求再增加一个外部中断源,当有中断时,累加器加1。并由P1.0口输出一个5KHz的方波(假设晶振频率为6MHz)。,CompanyLogo,思路,在不增加其它硬件开销时,可把定时/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。由P1.0输出5kHz的方波,即每隔100s使P1.0求反一次。则TH0的初始值:(256-N)210-6=10010-6N=206,CompanyLogo,C语言参考程序:#include/包含特殊功能寄存器库sbitP1_0=P10;/定义P1.0口,程序中用P1_0代替P1.0voidmain()/主函数TMOD=0 x27;/置T0工作方式3,TL0计数器方式;TH0为8位定时器TL0=0 xFF;/送初值,用于外部引脚T0口(P3.4)做新增外部中断TH0=206;/送定时100s的初值TL1=BAUD;/BAUD是根据波特率要求设置的常数TH1=BAUD;TCON=0 x55;/启动定时器T0、T1,置边沿触发IE=0 x9F;/开放全部中断while(1);/无限循环,结束主函数voidTL0INT(void)interrupt1/中断函数,处理新增的外部中断源TL0=0 xFF;/外部引脚T0引起中断处理程序voidTH0INT(void)interrupt3/中断函数,处理输出5kHz的方波TH0=206;/重送初值P1_0=!P1_0;/P1.0口取反,CompanyLogo,5.计数器功能,当C/T1时,多路开关接通计数器引脚TX,外部计数脉冲由引脚输入。每一个脉冲过来,计数器的寄存器单元加一。加满之后溢出,满值会根据不同的方式而各不相同。计数方式也受GATE位控制。计数溢出后需重装初值。,CompanyLogo,例:T0控制LED实现二进制计数,本例对按键的计数不使用查询法,不使用外部中断函数,不使用定时或计数中断函数。而是启用了计数器,连接在T0引脚的按键每次按下时,会使计数寄存器的值递增,其值通过LED以二进制形式显示,CompanyLogo,#includevoidmain()TMOD=0 x05;/定时器0为计数器,工作方式1,最大计数值65535TH0=0;/初值为0TL0=0;TR0=1;/启动定时器while(1)P1=TH0;P2=TL0;,CompanyLogo,练习:计数器,对P3.5端口进行脉冲计数,计数满100次后产生中断,在P1端口输出100的二进制值。,CompanyLogo,MCS51单片机有两个定时器计数器,当它们选择计数工作方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1,若把定时器计数器设置成计数工作方式,计数初值设定为满量程,一旦计数从外部引脚输入一个负跳变信号,计数器To或T1加1,产生溢出中断,这样,便可把外部计数输入端T0(P34)或T1(P35)扩展为外部中断源输入。,CompanyLogo,C语言参考程序:#include/包含特殊功能寄存器库#defineucharunsignedchar/定义数据类型uchari;/定义变量i,作为存放中断函数中加1的记录。voidmain()/主函数TMOD=0 x60;/T1方式2,计数器TL1=0 xFF;/设初值满量程TH1=0 xFF;TR1=1;/启动T1计数ET1=1;/T1中断允许EA=1;/CPU中断开放while(1);/无限循环,结束主函数voidINT(void)interrupt3/中断函数i+;/中断加1处理P1=i;/将结果送P1口,CompanyLogo,四、全自动洗衣机定时控制Proteus仿真,洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。设洗衣机有三段定时时间,分别为:进水阶段定时2秒,洗涤阶段定时4秒,甩干阶段定时2秒。并分别用三个LED发光二极管表示进水、洗涤、甩干三个环节的工作状态。其中如果发光二极管A亮,表示进水工作正在进行;发光二极管B亮,表示洗涤工作正在进行;发光二极管C亮,表示甩干工作正在进行。发光二极管熄灭时,说明相应的定时已到,工作停止。图5-7给出了Proteus仿真电路图。,CompanyLogo,CompanyLogo,图5-6中,S表示洗衣机启动开关,开关按下洗衣机开始工作。首先是进水定时控制,表示正在进水的LED发光二极管A点亮。当进水控制的定时时间到时,进水工作停止,发光二极管A灭灯;接着开始洗涤工作定时,发光二极管B点亮;洗涤工作结束后,开始甩干工作定时,发光二极管C点亮。当洗衣功能结束时,三个指示灯都熄灭,表示洗衣工作结束,并接通扬声器LS1鸣声提醒。,CompanyLogo,C语言参考程序,#include/包含51单片机寄存器定义的头文件sbitP20=P20;/将P20位定义为P2.0引脚sbitP37=P37;/将P37位定义为P3.7引脚unsignedcharCountor;/设置全局变量,储存定时器T1中断次数unsignedcharf=0;/设置全局变量,作为区分不同阶段的定时voiddelay1()/延时函数intq;for(q=0;q500;q+);voidmain(void)/主函数if(P20=0)/若P2.0=0,说明键按下,执行语句,否则一直等待。delay1();/有键按下,延时去抖动if(P20=0)/再判有键按下,CompanyLogo,P1=0 x0e;/A灯亮,开始放水定时EA=1;/开总中断ET0=1;/定时器T0中断允许TMOD=0 x01;/使用定时器T0的模式1TH0=(65536-46083)/256;/定时器T0的高8位赋初值,定时50msTL0=(65536-46083)%256;/定时器T0的高8位赋初值TR0=1;/启动定时器T0while(1);/无限循环等待中断voidTime0(void)interrupt1using0,CompanyLogo,if(f=0)/f为标志变量,若f=0,执行第1阶段定时(放水功能)Countor+;/Countor加1if(Countor=40)/若累计满40次,即计时满2sP1=0 x0d;/A灯灭,结束放水,B灯亮,开始洗涤Countor=0;/将Countor清0,重新从0开始计数f+;/f加1,准备第2阶段的定时if(f=1)/若f=1,执行第2阶段定时(洗涤功能)Countor+;/Countor加1if(Countor=80)/若累计满80次,即计时满4SP1=0 x0B;/B灯灭,结束洗涤,C灯亮,开始甩干Countor=0;/将Counto

温馨提示

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

评论

0/150

提交评论