您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 项目四 定时器与数码管动态显示
项目四定时器与数码管动态显示项目描述定时器用来实现精确定时,是单片机系统的一个重点,应用十分广泛,大家一定要完全理解并熟练掌握定时器的应用。本项目利用定时器设计一个实时时钟,利用六位数码管分别显示时钟的时、分、秒等信息。定时器4.1.1定时器的初步认识学习定时器之前,我们先来了解单片机时序中的几个概念:时钟周期、机器周期和指令周期。时钟周期:时钟周期T是时序中最小的时间单位,具体计算的方法就是1/时钟源频率,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。定时器机器周期:单片机完成一个操作的最短时间。机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的。51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。定时器指令周期:执行一条指令(这里指汇编语言指令)所需要的时间称为指令周期,指令周期是时序中的最大单位。由于机器执行不同指令所需时间不同,因此不同指令所包含的机器周期数也不尽相同。51系列单片机的指令可能包括1~4个不等的机器周期。通常,包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令,等等。指令所包含的机器周期数决定了指令的运算速度,机器周期数越少的指令,其执行速度越快。定时器定时器用来进行定时。定时器内部有一个寄存器,开始计数后,这个寄存器的值每经过一个机器周期就会自动加1,因此,我们可以把机器周期理解为定时器的计数周期。定时器每过一个机器周期的时间,也就是12/11059200秒,数字自动加1。还有一个特别注意的地方,就是钟表是加到60后,秒就自动变成0了,这种情况在单片机或计算机里我们称之为溢出。那定时器加到多少才会溢出呢?后面会讲到定时器有多种工作模式,分别使用不同的位宽(指使用多少个二进制位),假如是16位的定时器,也就是2个字节,最大值就是65535,那么加到65535后,再加1就算溢出,对于51单片机来说,溢出后,这个值会直接变成0。从某一个初始值开始,经过确定的时间后溢出,这个过程就是定时的含义。定时器4.1.2定时器的寄存器标准的51单片机内部有T0和T1这两个定时器。(1)定时值存储寄存器下表的寄存器是存储定时器的计数值的。TH0/TL0用于T0,TH1/TL1用于T1。先学习如何看寄存器TF1TR1TF0TR0IE1IT1IE0IT0TCON1、先分清每一位属于哪个模块2、查看每一位是可读、可写、可读写位的哪一种3、看每一位的具体功能以及在0或1时分别是什么状态4、如何通过指令设置寄存器或者寄存器某一位的值5、寄存器的物理地址定时器(2)定时器控制寄存器TCON(地址0x88、可位寻址)TF0/TF1:T0/T1计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。=1:计数溢出;=0:计数未满。TR0/TR1:T0/T1启停控制位。=1:启动计数;=0:停止计数。低四位IE1、IT1、IE0、IT0用于外部中断,下一章再做介绍。M1,M0:工作方式选择位。=00:13位定时器/计数器;=01:16位定时器/计数器(常用);=10:可自动重装的8位定时器/计数器(常用);=11:T0分为2个8位定时器/计数器;仅适用于T0。C/:定时方式/计数方式选择位。=1:选择计数器工作方式,对T0/T1引脚输入外部事件的负脉冲计数;=0:选择定时器工作方式,对机器周期脉冲计数定时。GATEC/TM1M0GATEC/TM1M0T1T0T定时器(3)定时器模式寄存器TMOD(地址0x89、不可位寻址)GATE:门控位,定时器/计数器的启/停可由软件与硬件两者控制=0:软件控制,只由TCON中的启/停控制位TR0/TR1控制定时器/计数器的启/停。=1:硬件控制,由外部中断请求信号/和TCON中的启/停控制位TR0/TR1组合状态控制定时器/计数器的启/停。0INT1INT定时器定时器定时器/计数器的4种工作方式M1M0工作方式功能描述00工作方式013位计数器01工作方式116位计数器10工作方式2自动再装入8位计数器11工作方式3定时器0:分成两个8位计数器,定时器1:停止计数MCS-51单片机的定时器/计数器共有4种工作模式,现以T0为例加以介绍,T1与T0的工作原理相同,但在方式3下,T1停止计数。1.工作方式0(M1M0=00,13位定时器/计数器)由TH0的全部8位和TL0的低5位(TL0的高3位未用)构成13位加1计数器,当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,溢出标志位TF0置“1”。2.工作方式1(M1M0=01,16位定时器/计数器)由TH0和TL0构成16位加1计数器,其他特性与工作方式0相同。定时器3.工作方式2(M1M0=10,自动重装计数初值的8位定时器/计数器)16位定时器/计数器被拆成两个8位寄存器TH0和TL0,CPU在对它们初始化时必须装入相同的定时器/计数器初值。以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。这种工作方式很适合于那些重复计数的应用场合(如串行数据通信的波特率发生器)。定时器4、工作方式3(M1M0=11,2个8位定时器/计数器,仅适用于T0)TL0:8位定时器/计数器,使用T0原有控制资源TR0和TF0,其功能和操作与方式0或方式1完全相同。TH0:只能作为8位定时器,借用T1的控制位TR1和TF1,只能对片内机器周期脉冲计数。在方式3模式下,定时器/计数器0可以构成两个定时器或者一个定时器和一个计数器。一般,只有在T1以方式2运行(当波特率发生器用)时,才让T0工作于方式3下。定时器定时器例:设定定时器1为定时工作方式,要求软件启动定时器1按方式2工作。定时器0为计数方式,要求由软件启动定时器0,按方式1工作。怎么来实现这个要求呢?①控制定时器1工作在定时方式或计数方式是哪个位?C/T位(D6)是定时或计数功能选择位,当C/T=0时定时/计数器就为定时工作方式。②设定定时器1按方式2工作。要使定时/计数器1工作在方式2,M0(D4)M1(D5)的值必须是10。③设定定时器0为计数方式。当C/T=1时,就工作在计数器方式。④由软件启动定时器0,当门控位GATE=0时,定时/计数器的启停就由软件控制。定时器⑤设定定时/计数器工作在方式1,使定时/计数器0工作在方式1,M0(D0)M1(D1)的值必须是01。从上面的分析我们可以知道,只要将TMOD的各位,按规定的要求设置好后,定时器/计数器就会按我们预定的要求工作。我们分析的这个例子最后各位的情况如下:D7D6D5D4D3D2D1D000100101二进制数00100101b=十六进制数25H。所以执行TMOD=0x25(或者用汇编语言MOVTMOD,#25H)这条指令就可以实现上述要求。定时器4.1.3定时器初始化由于定时器/计数器的功能是由软件编程确定的,所以一般在使用前都要对其进行初始化,初始化的步骤一般如下:(1)确定工作方式(即对TMOD赋值);(2)预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);(3)根据需要开放定时器/计数器中断(直接对IE位赋值)(4)启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。定时器下面介绍一下确定时时/计数器初值的具体方法。在不同工作方式下计数器位数不同,最大计数值也不同。现假设最大计数值为M,那么各方式下的最大值M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器0分成两个8位计数器,所以两个M均为256。因为定时器/计数器是作“加1”计数,并在计数满溢出时产生中断,因此初值X可以这样计算:X=M-计数值4、计数器初值的计算方法:用最大计数量减去需要的计数次数。即:TC=MC其中:TC——计数器需要预置的初值;M——计数器的模值(最大计数值);方式0时,M=213;方式1时,M=216;方式2,3时,M=28;C——计数器计满回0所需的计数值,即设计任务要求的计数值。例如:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,则应当预置的初值为:TC=MC=819212=81805、定时器初值的计算定时时间的计算公式为:T=(MTC)×T0(或TC=MT/T0)其中:T——定时器的定时时间,即设计任务要求的定时时间;T0——计数器计数脉冲的周期,即单片机系统主频周期的12倍;M——计数器的模值;TC——定时器需要预置的初值。若设初值TC=0,则定时器定时时间为最大。若设单片机系统主频为12MHz,则各种工作方式定时器的最大定时时间为???定时器例:选择T1方式0用于定时,在P1.1输出周期为1ms方波,晶振fosc=6MHz。解:根据题意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定时时间为500us,因定时时间不长,取方式1即可。则M1M0=1;因是定时器方式,所以C/T=0;在此用软件启动T1,所以GATE=0。T0不用,方式字可任意设置,只要不使其进入方式3即可,一般取0,故TMOD=10H。计算500us定时T1初始值:机器周期:T=12/fosc=12/(6×106)Hz=2μs设初值为X,则:(216-X)×2×10-6s=500×10-6sX=216-250=65286=FF06H=1111111100000110B因此TH1=FFH,TL1=06H。定时器初始化程序如下:TMOD=0x10;//定时器1方式0TH1=0XFF;TL1=0X06;//装入时间常数TR1=1;//启动定时器定时器4.1.4定时器中断1、中断的基本概念中断的定义:所谓“中断”,是指CPU执行正常程序时,系统中出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程。中断后转向执行的程序叫中断服务程序或中断处理程序。原程序被断开的位置(地址)叫作断点。发出中断信号的设备称为中断源。中断源要求中断服务所发出的标志信号称为中断请示或中断申请。中断源向CPU发出中断申请,CPU经过判断认为满足条件,则对中断源作出答复,这叫中断响应。中断响应后就去处理中断源的有关请求,即转去执行中断服务程序。定时器2.引入中断的主要优点(1)提高CPU工作效率(2)实现实时处理功能(3)实现分时操作定时器3.STC89C52中断源STC89C52单片机共有6个中断源。它们分别是:2个外部中断,即4个片内中断,即定时器T0的溢出中断、定时器T1的溢出中断、定时器T2的溢出中断和串行口中断;这6个中断源,可以根据需要随时向CPU发出中断申请。(1)外部中断源外部中断是由外部信号引起的,请求有两种信号触发方式,即低电平触发和下降沿触发。外部中断请求的这两种信号方式,可通过设置寄存器TCON中的IT0和IT1位状态的值来设定。定时器控制寄存器TCON各位定义如下表所示。定时器IE0/IE1:外部中断申请标志位(由硬件自动置位,中断响应后转向中断服务程序时,由硬件自动清0)=0:没有外部中断申请;=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置)。=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/INT1端申请中断的信号负跳变有效定时器(2)定时器溢出中断源定时/计数器中断由单片机内部定时器产生,属于内部中断。STC89C52内部有三个16位的定时器/计数器T0、T1和T2,最常用的是T0和T1,它们以计数的方
本文标题:项目四 定时器与数码管动态显示
链接地址:https://www.777doc.com/doc-6315468 .html