第五章定时器及应用_第1页
第五章定时器及应用_第2页
第五章定时器及应用_第3页
第五章定时器及应用_第4页
第五章定时器及应用_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

5,定时器及应用,2,思考:单片机系统实现定时功能的方法?,软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。单片机内部定时/计数器,3,本讲主要内容:,5-1.实现器概述5-2.定时器的控制5-3.定时器的4种模式及其应用5-4.定时器/计数器综合应用举例,4,5.1定时器概述,AT89C51单片机有2个16位的可编程定时器/计数器,称为定时器/计数器0和定时器/计数器1,分别由两个8位的特殊功能寄存器TH0、TL0和TH1、TL1组成。,5,5.1定时器概述,两个16位定时器实质上是16位加1计数器。用于定时控制、延时、外部事件计数和检测等场合。每个定时器可由软件设置为定时工作方式或技术工作方式及其它灵活的可控功能方式,这些功能由TMOD和TCON所控制。,6,定时器/计数器的结构和工作原理,定时器/计数器的结构定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。,7,计数器工作原理,计数功能所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲的计数。AT89C51芯片的信号引脚T0(P3.4)和T1(P3.5)分别是两个计数器的计数输入端。外部输入的脉冲在负跳变时有效,供计数器进行加1计数。,8,计数器工作原理,计数器输入的计数脉冲源系统的时钟占当期输出脉冲经12分频后产生,通过T0或T1引脚对外部脉冲信号计数。计数过程每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。,9,计数器工作原理,计数方式下,单片机在每个机器周期的S5P2对计数脉冲输入引脚进行采样。如果前一个机器周期为高电平,后一个机器周期为低电平,即为一个有效的计数脉冲,在下一个机器周期的S3P1进行计数。由于采样计数脉冲是在2个机器周期完成的,所以计数脉冲的周期不能小于2个机器周期。,10,定时器工作原理,定时功能定时功能是通过对单片机内部脉冲进行计数来实现的。即每个机器周期产生1个计数脉冲,使计数器加1。在使用定时器时,既可以根据计数值计算定时时间,也可以根据定时时间的要求计算出计数器的预置值。,11,定时与计数都是利用计数实现!,加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值。设最大值为M,计数值为N,初值为X,则X的计算方法为:计数状态:X=MN定时状态:X=M(定时时间机器周期),12,5.2.1工作模式寄存器寄存器:TMOD字节地址:89H(不可位寻址),定时器/计数器1,定时器/计数器0,功能:用于设定定时器/计数器的工作方式(只能用字节传送指令设置其内容)TMOD的低半字节对应定时器/计数器0,高半字节对应定时器/计数器1,前后半字节的位格式完全对应。,5.2定时器的控制,13,C/T:定时方式或计数方式选择位C/T=0定时工作方式C/T=1计数工作方式GATE:门控位GATE=0以运行控制位(TR0或TR1)启动定时器GATE=1以外部中断请求信号(INT0或INT1)启动定时器,M1和M0:工作方式选择位,14,5.2.2定时器/计数器控制寄存器:TCON字节地址:88H位地址:88H8FH(可位寻址),功能:用于保存外部中断请求以及定时器的计数溢出。TCON既有定时器/计数器的控制功能,又有中断控制功能,其中与定时有关的控制位共4位:TF1、TR1、TF0、TR0。,15,TF0和TF1:计数溢出标志位当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。计数溢出标志位的使用有两种情况:使用中断方式时,作中断请求标志位来使用,在转向中断服务程序时由硬件自动清“0”。使用查询方式时,作查询状态位来使用,查询有效后应以软件方法及时将该位清“0”TR0和TR1:运行控制位(软件置1或清0)TR0(TR1)=0停止定时器/计数器工作TR0(TR1)=1启动定时器/计数器工作,16,中断允许控制寄存器:IE字节地址:0A8H位地址:0A8H0AFH,其中与定时器/计数器有关的控制位共3位:EA:中断允许总控制位ET0和ET1:定时器/计数器中断允许控制位ET0(ET1)=0禁止定时器/计数器中断ET0(ET1)=1允许定时器/计数器中断,17,5.3定时器的4种模式及应用,计数器工作方式选择,18,模式0,模式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。,该方式计算不方便,建议不采用!,19,5.3.1模式1及应用,模式1的计数位数是16位,由TL0(TL1)作为低8位、TH0(TH1)作为高8位,组成了16位加1计数器。,20,例5-1,用定时器T1产生一个50Hz的方波,由P1.1输出。方波周期为T=1/50=0.02s=20ms,用T1定时10ms,单片机采用12MHZ晶振,一个机器周期是1us,即是计数器计数10000次。TH1=(65536-10000)/256;TL1=(65536-10000)%256;,注意定时器的初值计算方法!,21,用查询方式编程,voidmain()TMOD=0 x10;/T1模式1,定时TR1=1;/定时器开始计数while(1)TH1=(65536-10000)/256;TL1=(65536-10000)%256;/装入计数初值while(TF1!=1);TF1=0;/清除T1溢出标志位P1_1=P1_1;,22,用中断方式编程,初始化程序应该完成以下工作:1.对TMOD赋值,以确定T0和T1的工作方式。2.计算初值,并将其写入TH0、TL0或TH1、TL1。3.中断方式时,则对IE赋值,开放中断。4.使TR0或TR1置位,启动定时计数器。,23,程序流程:,主程序流程,中断服务子程序流程,24,程序(主程序),#include#defineucharunsignedchar#defineuintunsignedintsbitP1_1=P11;voidmain()TMOD=0 x10;/T1模式1,16位计数器TH1=(65536-10000)/256;TL1=(65536-10000)%256;/装入计数初值EA=1;/开总中断ET1=1;/开定时器1中断TR1=1;/定时器开始计数while(1);,25,程序(定时器1中断服务程序),voidtimer1_int(void)interrupt3TH0=(65536-10000)/256;TL0=(65536-10000)%256;/重新装入计数初值P1_1=P1_1;,26,例题,用单片机和内部定时器来产生矩形波,要求频率为100Hz,占空比为2:1,设单片机的时钟频率为12MHz。,27,5.3.2模式2及其应用,模式2为自动重装初值的8位计数方式。在模式2下,当计数器计满255(FFH)溢出时,CPU自动把TH的值装入TL中,不需用户干预。因此特别适合于用作较精确的脉冲信号发生器。,28,二、模式2工作特点,可以自动重新装载的8位定时器/计数器。,在程序初始化时,TL0和TH0由软件赋予相同的初值。,用于定时工作方式时,定时时间为:t=(28TH0初值)振荡周期12,用于计数工作方式时,计数长度最大为:28=256个脉冲,该模式可省去软件中重装常数的语句,并可产生相当精确的定时时间,适合于作串行口波特率发生器。,29,例5-2,当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500us的同步脉冲,请编程实现该功能。方法1(只用T0)按照查询方式编程(请同学们自行参照书上汇编程序编程)。选择T0为模式2电平发生负跳变采用外部计数方式。当P3.4引脚上发生负跳变时,T0计数器加1,溢出标志TF0置1,然后改变T0为500us定时方式,并使P1.0同步输入一个500us脉冲。同步脉冲输出后T0又恢复外部事件计数方式。,30,方法2:计数用T0,采用查询方式,定时用T1中断,均采用模式2。T0工作在外部事件计数方式,当计数达到0FFH时候,再加1计数器就会溢出。T1工作在定时工作方式,设晶振频率为6MHz,500s相当于250个机器周期。因此,初值X为(256X)2s=500sX=6=06H,31,电路,用脉冲信号源模拟外部事件,用示波器对照显示P3.4口的输入和P1.0口的输出,方波信号源的周期必须大于1000us即频率小于1000HZ,这里我们为了清楚在示波器上进行对比,方波信号源发生频率为500HZ。,32,程序,主程序设置T0,T1的模式;T0,T1装入初值;T0开始计数;判断T0是否溢出,溢出后清溢出标志位。P1.0清0开T1开始计时T1中断P1.0拉高关T1,33,例5-3,利用定时器T1的模式2对外部信号计数。要求每计满100次,将P1.0端取反。外部信号由P3.5引脚输入,每发生一个负跳变计数器加1,输入100个脉冲后计数器发生溢出中断。TH1=TL1=28-100=0 x9C;采用信号发生器产生周期为0.01s,频率为100Hz的方波信号,计数满100次即耗时1s,P1.0口接一发光二极管,现象为发光二极管每隔一秒闪烁。,34,电路,35,5.3.3模式3及应用,方式3只适用于定时器/计数器T0,定时器T1方式3时相当于TR1=0,停止计数。,工作方式3将T0分成为两个独立的8位计数器TL0和TH0。,36,综合应用举例,P14619以中断方式产生单片机秒、分脉冲发生器。假定P1.0每秒产生1个机器周期的正脉冲,P1.1每分钟产生1个机器周期的正脉冲。为便于仿真,要求改进,设置一能显示分和秒的计时器。,37,电路图,38,#include#defineucharunsignedchar#defineuintunsignedintucharm=0;uchars=0;uchari=0;ucharcodesmg=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90;/0-9共阳级段码,39,分处理函数和秒处理函数,/分钟处理函数voidIncrease_Minute()if(+m9)m=0;P3=smgm;,/秒处理函数voidIncrease_Second()if(+s59)s=0;Increase_Minute();P0=smgs/10;P2=smgs%10;,40,主函数,voidmain()TMOD=0 x10;/T1模式1TH1=(65536-50000)/256;TL1=(65536-50000)%256;/装入计数初值,12MHz晶振一次溢出为50msEA=1;/开总中断ET1=1;/开定时器1中断TR1=1;/定时器1开始计数P3=smg0;while(1);,41,定时器1中断程序,voidtimer1_int(void)interrupt3TH1=(65536-50000)/256;TL1=(65536-50000)%256;/重新装入计数初值i+;if(i=20)/50ms*20=1s时间到i=0;Increase_Second();,42,作业,P14

温馨提示

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

评论

0/150

提交评论