您好,欢迎访问三七文档
第六章定时/计数器及应用本章主要内容定时/计数器基本概念定时/计数器的结构定时/计数器的工作方式定时/计数器应用举例第一节定时/计数器基本概念一、问题提出即:为什么要学习定时/计数器?在测控技术中,往往需要定时检测某个物理参数,或按照一定的时间间隔来进行某种控制。这种定时的获得,可通过两种方法来实现:(1)采用软件来实现定时,即编制一段延时程序,但会降低CPU的工作效率;(2)采用硬件来实现定时,即使用定时/计数器,当用某个计数功能时,可以对某种事件进行计数,然后根据计数结果来进行控制。不管CPU对定时/计数器设置为定时功能还是计数功能,定时/计数器T0,T1在启动后,都会按照设定的工作方式独立运行,不再占用CPU的时间,只有在定时/计数器溢出后,才可能向CPU发出中断请求信号。因此,定时/计数器是单片机中效率较高,且工作灵活的部件!一、定时/计数器的结构8051的两个定时/计数器T0、T1实际上就是加1计数器,其中T0由两个8位特殊功能寄存器TH0和TL0构成,T1由两个8位特殊功能寄存器TH1和TL1构成,T0和T1都可由软件设置为定时或计数功能。第二节定时/计数器的结构对机器周期进行计数,每过一个机器周期,计数器加1,直至计数器计满溢出。由于一个机器周期由12个振荡周期组成,则计数频率为振荡频率的1/12。如:振荡频率为12MHz,振荡周期为(1/12M)s,则计数频率为1MHz,机器周期为1us。定时器的定时时间与计数器初值(计数长度)和系统时钟频率(振荡频率)有关!如:定时/计数器T0由TH0和TL0组成,共16位,每过一个机器周期,T0加1,若从初始值T0=0开始,直至T0计数满溢出,则一共要经过216个机器周期,即:总定时时间=216个机器周期×一个机器周期的时间此时,定时时间与计数器初始值和振荡频率有关。且由于振荡频率不易改变,通常改变计数器初值,从而达到改变定时时间的目的。①定时/计数器做定时用②定时/计数器做计数用计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,在每一个机器周期的S5P2期间采样引脚输入电平,若前一个机器周期采样值为1(高电平),后一个机器周期采样值为0(低电平),则计数器加1。由于辨别一个信号由1到0的跳变,需要2个机器周期,所以计数频率为振荡频率的1/24。如:晶振频率为12MHz,则最高计数频率为0.5MHz。二、定时/计数器的功能及应用范围定时器/计数器具有定时和计数两种功能,应用范围如下:1.定时与延时控制方面可产生定时中断信号,以设计出各种不同频率的信号源;产生定时扫描信号,对键盘进行扫描以获得控制信号,对显示器进行扫描以不间断地显示数据。2.测量外部脉冲方面对外部脉冲信号进行计数可测量脉冲信号的宽度、周期,也可实现自动计数。3.监控系统工作方面对系统进行定时扫描,当系统工作异常时,使系统自动复位,重新启动以恢复正常工作。三、定时/计数器的控制使用定时/计数器时,除了要选择定时或计数功能外,每种功能还有4种工作方式,包括方式0、方式1、方式2和方式3。而工作方式和其他的设定都是由:定时/计数器方式寄存器TMOD和定时/计数器控制寄存器TCON决定的。即:对定时/计数器的设置也就是对TMOD和TCON的设置!1、定时/计数器的方式寄存器TMOD①GATE:门控位GATE=0:软件启动定时器。即用指令使TCON中的TR1(TR0)置1,则可启动定时/计数器1(定时/计数器0)。GATE=1:软件和硬件共同启动定时器。即用指令使TCON中的TR1(TR0)置1时,只有外部中断INT0(INT1)引脚输入高电平时才能启动定时/计数器1(定时/计数器0)。②C/T:功能选择位C/T=0时,以定时器方式工作。C/T=1时,以计数器方式工作。地址为89H,只能用字节寻址。③M1M0——操作方式控制位对应4种二进制编码,也就是4种工作方式。M1M0工作方式功能说明00方式013位计数器(即使用THx的全8位和TLx的低5位)01方式116位计数器(即使用THx的全8位和TLx的全8位)10方式2自动再装入8位计数器11方式3定时器T0:被分成两个独立的8位定时/计数器;定时器T1:停止计数定时器操作方式选择位定义说明:TMOD是地址为89H的特殊功能寄存器,用于控制定时/计数器T0和T1的工作方式以及功能选择,TMOD不能按位寻址,只能用字节设置,低半字节定义定时/计数器T0,高半字节定义定时/计数器T1。复位时,所有位为0。2、定时/计数器的控制寄存器TCON地址为88H,可进行位寻址,也可进行字节寻址。各位的功能说明:①TF1(TCON.7):定时器1溢出标志位。当定时器1计满溢出时,由硬件自动使TF1置1,并申请中断。对该标志位有两种处理方法:一种是以中断方式工作,即TF1置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF1清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF1置1后必须用软件使TF1清0。②TR1(TCON.6):定时器1启停控制位GATE=0时,用软件使TR1置1即启动定时器1,若用软件使TR1清0则停止定时器1。GATE=1时,用软件使TR1置1的同时外部中断INT1的引脚输入高电平才能启动定时器1。③TF0(TCON.5):定时器0溢出标志位。其功能同TF1。④TR0(TCON.4):定时器0启停控制位。其功能同TR1。⑤IE1(TCON.3):外部中断1请求标志位。当检测到外部中断引脚上存在有效中断请求信号时,由硬件使IE1=1或IE0=1,CPU响应中断,转向中断服务程序。⑦IE0(TCON.1):外部中断0请求标志位。其功能同IE1⑧IT0(TCON.0):外部中断0触发方式选择位。其功能同IT1⑥IT1(TCON.2):外部中断1触发方式选择位。IT1=0,外部中断1为电平触发方式IT1=1,外部中断1为边沿触发方式第三节定时/计数器的工作方式定时器/计数器的初始化步骤定时器/计数器是一种可编程部件,在使用定时器/计数器前,一般都要对其进行初始化,以确定其以特定的功能工作。初始化的步骤如下:确定定时器/计数器的工作方式,确定方式控制字,并写入TMOD。预置定时初值或计数初值,根据定时时间或计数次数,计算定时初值或计数初值,并写入TH0、TL0或TH1、TL1。根据需要开放定时器/计数器的中断,给IE中的相关位赋值。启动定时器/计数器,给TCON中的TR1或TR0置1。一、工作方式0及其应用当MIM0两位为00时,定时/计数器被选为工作方式0,其逻辑结构如下图所示。说明:工作方式0是一个13位的定时/计数器!16位的寄存器(TH0和TL0)只用了13位,即TH0的全8位和TL0的低5位。当TL0的低5位溢出时,向TH0进位;当TH0溢出时,则向中断标志TF0进位(硬件置位TF0),申请中断。启动定时/计数器工作的条件有两种情况:软件启动:GATE=0TRx=1或软件与硬件共同启动:GATE=1TRx=1INT0/INT1引脚电平为1看图:①软件启动②硬件与软件共同启动当GATE=0时,通过非门后,值取反为1,则使或门输出始终保持为1,此时,与引脚INTx的输入电平无关。控制位的电位取决于TRx的状态。若使TRx置1,则接通控制开关,启动定时/计数器开始计数;若使TRx清0,则断开控制开关,停止计数。当GATE=1时,通过非门后,值取反为0,则“或”门的输出取决于INTx引脚的输入电平,当INTx为高电平时,“或”门输出为高电平,此时,若TRx置1,则接通控制开关,启动定时/计数器开始计数;若TRx清0,则断开控制开关,停止计数。说明:假设T0工作在方式0,TH0的全8位和TL0的低5位组成一个13位的二进制数计数器,单片机开机或复位时,T0的值为0000H,当T0被启动后,从第一个输入脉冲开始计数,每来一个脉冲,计数加1,即从13个0一直加到13个1,再计数一个脉冲时,13位计数器则从13个1变成13个0,并产生溢出,溢出位就被送入TF0标志位,产生中断申请。因此,T0工作在方式0,引起一次中断所允许的计数脉冲最多为:213个但是,如果定时/计数器每次都固定从全0开始计数,计满后溢出,发出中断申请,就达不到不同定时时间的目的,因此,可以预先向TH0和TL0中装入初始值X,使计数器T0从X值开始计数,直至计满溢出,这样就可得到不同的定时时间。设需要计数的脉冲个数为Y,则:Y=213-X在计数方式下,当输入第213-X个脉冲时,产生溢出中断申请;在定时方式下,当计第213-X个机器周期时,产生溢出中断申请。即定时时间间隔:t=(213-X)×振荡周期×12例:设定时/计数器T0选择工作方式0,定时时间为1ms,振荡频率为12MHz,试编程实现在P1.0输出周期为2ms的方波。解:分析如下①系统采用12MHz的晶振:则振荡周期Tc=1/12M(s),机器周期Tm=12Tc=1us。②若定时/计数器从全0开始计数,直至计满溢出,共需213个机器周期,引起中断所需的定时时间为:213×1us=8.192ms,而题目要求定时时间为1ms,则需将T0赋初始值X。③要在P1.0得到输出周期为2ms的方波,要使P1.0每1ms取反一次。初始化过程:①计算T0定时1ms的初始值t=(213-X)×1us=1ms8192-X=1000X=7192D=11100000,11000B则:TH0=11100000B=E0HTL0=00011000B=18H②确定工作方式:对TMOD寄存器赋值TMOD.1,TMOD.0:有M1M0=00,选定T0为方式0TMOD.2:有C/T=0,选定T0为定时功能(即计机器周期数)TMOD.3:有GATE=0,表示不受INT0控制,直接由TR0=1,可启动T0TMOD.4~TMOD.7:用于T1,因此,这里不用,可设为0值则:TMOD=00H③开放定时器中断:对IE寄存器赋值EA--ESET1EX1ET0EX0则:IE=1000,0010B④启动定时/计数器T0:使TCON的TR0置位则:TR0=1解法①:在定时/计数器T0中断被禁止的情况下,采用查询TF0状态来控制P1.0的输出,程序清单如下:MOVTMOD,#00H;MOVTL0,#18HMOVTH0,#0E0H;SETBTR0;LOOP:JBCTF0,NEXT;SJMPLOOP;NEXT:MOVTL0,#18HMOVTH0,#0E0H;CPLP1.0;SJMPLOOP;置T0为工作方式0,且为定时功能,并直接由TR0=1启动T0赋初值启动T0TF0=1时,对TF0清0且转移;TF0=0时,查询等待重装计数初值输出取反重复循环采用查询方式的程序简单,但在定时/计数过程中,CPU要不断查询溢出标志位TF0的状态,当查询在TF0=1时,用指令对TF0清0,且对P1.0取反。这种方法占用了很多CPU的工作时间,使CPU效率下降,因此要采用中断方式!解法②:采用定时/计数器溢出中断方式(CPU响应中断后,TF0自动清0)程序清单如下:主程序:MAIN:MOVTMOD,#00H;MOVTL0,#18HMOVTH0,#0E0H;SETBTR0;SETBEA;SETBET0;HERE:SJMPHERE;置T0为工作方式0,定时功能,并直接有TR0=1启动赋初始值启动T0CPU打开中断T0中断允许等待中断中断服务子程序:ORG000BH;AJMPCTC0;CTC0:MOVTL0,#18H;MOVTH0,#0E0HCPLP1.0;RETI;规定T0中断入口转中断服务子程序重装初值输出取反,达到方波效果中断返回例:12MHZ晶振,选择T0工作于方式0解:分析如下:①系统采用12MHz的晶振:则振荡周期Tc=1/12M(s),机器周期Tm=12Tc=1us。②选择T0方式0,若定时/计数器从全0开始计数,直至计满溢出,共需213个机器周期,引起中断所需的定时时间为:213×1us=8.192ms,而题目要求定时时间为2
本文标题:定时计数器及应用
链接地址:https://www.777doc.com/doc-6472452 .html