《单片机原理》第四章.ppt
第4章 MCS-51单片机的定时/计数器原理及应用,4.1 MCS-51的定时/计数器概述4.2 定时/计数器的四种工作模式4.3 MCS-51对定时/计数器的控制4.4 定时计数器的初始化4.5 定时器应用举例(方式1)4.6 定时器门控位GATE的应用,8031/8051内部带有两个16位的定时/计数器8032/8052内部带有三个16位的定时/计数器,(1)是一个二进制的加法计数器,当计数器计满回零时刻自动产生溢出中断请求;(2)既可以用作定时器,也可用作计数器;(3)有四种工作模式:模式0、模式1、模式2和模式3;(4)定时时间和计数值均可通过程序设定,最大值与工作模式和单片机的时钟频率有关;(5)它是硬件延时逻辑电路,与软件延时相比,可以提高CPU的工作效率。,4.1 MCS-51的定时/计数器概述,4.1.1 定时/计数器的特点,1、定时产生一个标准的时间间隔 例如单片机使用这种方式可以产生一个符合某一要求的脉冲方波(如下图)。,输出波形,4.1.2 定时/计数器的应用,4.1 MCS-51的定时/计数器概述,2、计数对外部的事件(脉冲)进行统计外部事件的发生是随机的,单片机不可能预知外部事件何时发生,但可以进行统计(计数)。当达到所要求的计数值时,单片机进行相应的操作。,4.1 MCS-51的定时/计数器概述,单片机检测产品数量示意图,P0口 MCS-51T0,红外线扫描发射器,红外线接收电路,产品包装控制器,产品生产线,产品,传送带,4.1 MCS-51的定时/计数器概述,4.2 定时/计数器的四种工作模式,4.2.1 模式0 13位计数器模式 在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TFi=1。,高三位弃用,图1 T1方式0控制逻辑,问题:(1)如何控制是定时还是计数?(2)如何控制定时/计数的长短?(3)如何启动定时/计数器工作?,P3口第2功能,(1)C/T:计数器输入脉冲选择开关(2)寄存器初值:该参数决定着定时或计数的周期。(3)TR、GATE、INT1控制定时/计数器的启动:GATE=0时,TR1=1开始工作;TR1=0:计数器T1停止计数;GATE=1时(门控方式),TR=1且/INT1=1时开始工作。此种方 式主要用于测量加在INT1脚上一个正脉冲的脉宽。(4)TF=1:计数或定时时间到,可采用查询或中断方式处理,4.2 定时/计数器的四种工作模式,计数值C=213-初值,定时时间T=(213-初值)Tosc 12,4.2 定时/计数器的四种工作模式,【注】C/T、TR、GATE均可通过定时器控制寄存器设置,4.2.1 模式0 13位计数器模式,返回,4.2.2 模式116位计数器模式(以T1为例),定时时间=(216-初值)Tosc 12,4.2 定时/计数器的四种工作模式,返回,由TL1做计数器,TH1做初值寄存器,工作前TL1、TH1分别预置相同的初值。TL1计数时,当产生溢出的同时,将TH1中的初值自动重装TL1。TL1继续计数。,4.2.3 模式28位自动重装初值模式,定时时间=(28-TH1初值)Tosc 12,4.2 定时/计数器的四种工作模式,用作串行口波特率发生器,在这种模式中,单片机将T0和T1重新进行“拆分、组合”,将T0变为由TH0和TL0组成的两个独立的8位定时/计数器。,4.2.4 模式3 组合扩展模式(仅适用于T0),4.2 定时/计数器的四种工作模式,模式3时定时器T0的结构图,(1)TH0计数脉冲来自内部fosc,所以只能处于“定时”方式;(2)TH0分别借用了定时器T1的TR1和TF1为自己服务,使TH0能象TL0那样用TR1启动定时,并用TF1来作为TH0的溢出中断的标志;(3)此时,T1缺少了启动控制信号TR1和溢出标志TF1,那么在模式3时,T1是如何启动和工作?没有溢出标志TF1,则T1就不去查询;没有启动控制信号TR1,可以让它在模式3之前就启动工作,并将设定为自动重装模式(模式2),作串行口的波特率发生器。(4)模式3就是将单片机原有的T0、T1两个计数器变成三个独立的计数器。其中T1要事先设定为模式2(串行口的波特率发生器)并启动起来。,结构图,4.2 定时/计数器的四种工作模式,模式3时T0(TH1、TH2)及T1的特点,定时/计数器4种模式比较,T=(M-TC)Tosc 12 其中,T:定时时间,Tosc:时钟周期。,C=M-TC其中,C:计数值,M:计数器的模,TC:计数初值,4.2 定时/计数器的四种工作模式,返回,GATE 选通门:GATE=0时,只要TR=1,计数器就开始工作;GATE=1时,只有INT=TR=“1”时,计数器工作(用来测量INT脚高电平脉冲的宽度)。C/T 计数、定时方式选择位:C/T=1时,计数方式。C/T=0时:定时方式。M1、M0 模式选择:确定四种工作模式.,T1,T0,1、模式控制寄存器TMOD(SFR的地址:89H),结构图,4.3 MCS-51对定时/计数器的控制,MCS51通过控制寄存器TMOD和TCON实现对T0、T1的控制,返回,模式0、模式1:区别仅在于长度为13位和16位;模式2:常用于单片机串行通讯时作“波特率”发生器。模式3:仅T0可以工作于该模式,4.3 MCS-51对定时/计数器的控制,T1,T0,4.3.1 模式控制寄存器TMOD(SFR的地址:89H),TF0 定时器T0的溢出标志:计数器溢出时硬件自动置位,即TF0=1。进入中断后硬件自动清除(TF0=0),若是查询方式则可由软件清除;TR0 计数器T0的控制位:由软件设定:TR0=1计数器开始工作;TR0=0计数器停止计数。TF1、TR1同上。,T0、T1的启动和溢出标志 外部中断标志和触发方式选择,4.3 MCS-51对定时/计数器的控制,返回,4.3.2 控制寄存器TCON(SFR地址:88H),4.4 定时/计数器的初始化,(1)根据需要,设定工作方式(C/T位)计数或定时以及工作模式(M1、M0);(2)确定初值TC;(3)若用中断方式,则要设置相应的中断参数、优先级别;(4)送命令字,启动计数器。,4.4.1 定时器初始化的步骤,4.4.2 计数、定时初值的计算,(1)计数初值计算公式:TC=M-C,计数器初值计算应用举例,【例】在模式0或模式1时,每接收100个外部事件,要求产生一个中断,确定计数初值。(1)模式1:TC=65536-100=65436=FF9CH(2)模式0:TC=8192-100=8092=1F9CH(注意TH、TL),FFH,9CH,THi=FFHTLi=9CH,模式1,计算结果:1FH,9CH,实际初值:THi=FCH TLi=1CH,模式0,THi,TLi,模式0电路,4.4 定时/计数器的初始化,(2)定时器初值计算公式:TC=M T/T计数 其中:M 为计数模;T为定时时间;T计数为系统时钟周期的12倍,即12Tosc 设系统时钟为6MHz,则T计数=2 s。定时器4种模式的最大定时时间与M有关。,4.4 定时/计数器的初始化,4.4.2 计数、定时初值的计算,(1)确定模式:选择模式1,且C/T=0(定时方式)。(2)计算定时初值:TC=M T/T计数 TC=65536-50ms/2 s=65536-25000=40536=9E58H 即THi=9EH;TLi=58H【思考题】编写出使用T1时的初始化并启动定时的指令。,【例】请计算定时50ms所需要的定时初值。(设fosc=6MHz),定时器初值计算应用举例,4.4 定时/计数器的初始化,MOV TMOD,#00010000B;T1为模式1定时方式MOV TH1,#9EHMOV TL1,#58H;送T1的50ms的定时初值SETB TR1;启动T1定时器,模式寄存器TMOD,4.4 定时/计数器的初始化,T1,T0,【例】请计算定时50ms所需要的定时初值。(设fosc=6MHz),定时器初值计算应用举例,(3)定时器初始化程序,4.5 定时器应用举例(方式1),20ms,10ms,10ms,【例1】利用单片机的P1.0产生一个频率为50Hz的对称方波(设fosc=6MHz)。,MCS-51P1.0,用单片机设计一个方波发生器示意图,0 0 0 0 0 0 0 1,TCON,【解】选择定时器并确定工作方式、工作模式和定时初值。(1)选用T0的定时方式(C/T=0);(2)模式1(M2 M1=01),(3)计算TC:TC=65536-10ms/2s=60536=EC78H 即TH0=ECH,TL0=78H(4)编程实现 可使用查询和中断两种方法,在此介绍查询法,TMOD,4.5 定时器应用举例(方式1),ORG 1000H STRAT:MOV TMOD,#01H;设定时器0为定时,模式1SETB TR0;启动定时器T0 LOOP:MOV TH0,#0ECH;设定时初值MOV TL0,#78HJNB TF0,$;定时时间到?CLR TF0;清T0标志CPL P1.0;P1.0取反SJMP LOOP;循环继续END,程序清单(查询法),4.5 定时器应用举例(方式1),程序流程图(查询法),设定T0的模式,启动T0,设定定时初值,TF0=1,清标志,CPL P1.0,N,Y,4.5 定时器应用举例(方式1),【解】(1)选择T0且设定为定时方式、模式1。(2)TC=65536-50ms/2s=9E58H(3)TMOD控制字为:00000001B=01H(4)T0采用中断方式:即每50ms产生一次中断,中断20次便是1S。,【例2】利用P1.0口线输出周期为2S的方波。(要求用中断方式实现),【分析】如何产生1S的定时?,1000ms的定时由50ms累计20次,4.5 定时器应用举例(方式1),中断服务程序,程序流程图,主程序,初始化(T0设置)(开中断)(中断次数设置),等待中断,START,4.5 定时器应用举例(方式1),ORG 0000HLJMP STARTORG 000BHLJMP BRT0 ORG 1000HSTART:MOV TMOD,#01H;设T0为定时方式,模式1MOV TH0,#9EH;50mS定时初值MOV TL0,#58HMOV IE,#82H;开中断(T0)SETB TR0;启动定时器T0开始定时MOV R0,#14H;计数器R0赋初值20 SJMP$;等待T0中断(TF0=1时引发中断)ORG 0080HBRT0:DJNZ R0,NEXT;T0中断服务程序CPL P1.0;P1.0输出取反MOV R0,#14H;计数器R0重赋初值20NEXT:MOV TH0,#9EH;软件重装初值MOV TL0,#58HRETI;中断返回END,IE寄存器,程序清单,4.5 定时器应用举例(方式1),4.6 定时器门控位GATE的应用,如果GATE=1,TR=1时电路是否计数取决于/INT0:/INT0=1 时开始计数;/INT0=0时电路停止计数。利用这一特点,可以实现测量外部脉冲的宽度。,(1)将外部脉冲接到P3.2(/INT0)上,使用T0且C/T=0,且令GATE=1;(2)计数器TH0、TL0原始初值为00H,且设为模式1;(3)在/INT0=0时设定TR0=1(T0准备计数);(4)当/INT0=1时,定时器T0自动开始计数;(5)当/INT0=0时计数自动停止计数,此时TH0、TL0中的计数值就是与脉冲宽度相对应的数据。,脉宽测量的实现(以T0为例),4.6 定时器门控位GATE的应用,计数停止(/INT0=0)完成计数,程序流程图,设定T0模式模式1,GATE=1,TH0、TL0原始清零,数据指针R0赋初值,INT0=0?,SETB TR0,INT0=0?,INT0=1?,CLR TR0,取TH、TL值,N,N,N,等待低电平,Y,准备计数,等待高电平(高电平时自动计数),等待低电平(低电平时完成计数),Y,Y,保存计数值,4.6 定时器门控位GATE的应用,INT0 EQU P3.2 MOV TMOD,#09H;设定T0为模式1且GATE0=1MOV TH0,#00HMOV TL0,#00H;计数器原始清零MOV R0,#20H;设置数据区指针并原始赋初值JB INT0,$;等待P3.2引脚上的脉冲变低,寻找准备阶段SETB TR0;INT0变低后,TR0置1(但不计数)JNB INT0,$;若INT0低电平则等待,(准备阶段)JB INT0,$;若INT0高电平则等待(计数阶段)CLR TR0;INT0变低后,关闭T0(完成计数)MOV R0,TL0INC R0MOV R0,TH0;保存计数器T0的计数值,4.6 定时器门控位GATE的应用,准备阶段 计数阶段 完成计数,MCS-51INT0,外部脉冲,【说明】若系统时钟为12MHz,则T=(THL、TL0)1s,作 业,定时与计数的区别是什么?如何控制MCS-51单片机进行定时或计数、及四种工作模式?如何启动定时/计数器工作?定时或计数的值由什么来决定?如何判断定时/计数是否完成?四种模式中,哪一种计数/定时的范围最大?哪一种具有自动重装功能,它用于什么场合?GATE端的作用是什么?它是如何工作的?,高电平,四位二进制异步加法计数器,返回,3.3.1 中断的开放和关闭控制,EA:总允许位(一级控制)ES:串行口中断允许位(二级控制)ES=1时,允许RI、TI引发中断,否则禁止串口中断。ET1、ET0:定时器T1、T0允许位(二级控制)EX1、EX0:外中断/int1、/int0允许位(二级控制)“1”允许;“0”禁止中断。,3.3 中断的控制,由中断允许寄存器IE实现两级控制(SFR地址:0A8H),返回,结构图,例如,要允许外部中断INT0开放,则可用下列指令:SETB EA SETB EX0,或mov IE,#81H,P3.0 P3.7 P3端口线(10 17脚):通用I/O端口,负载能力为4个TTL;具有第二功能。,P3口第二功能表,1.2 MCS-51单片机内部结构及引脚定义,返回,