单片机原理及应用2012-2013-12第七章定时器/计数器学习要求理解定时器/计数器的工作原理及其控制的含义掌握4种工作方式的功能及其初值的计算掌握定时器/计数器初始化编程3定时器/计数器作用:可以实现定时控制、定时扫描、延时控制、计数、信号测量等。实现定时或计数时,通称采用以下三种方法:1.硬件法硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。2.软件法软件法定时是执行一段循环程序进行时间延时。优点:时间比较精确,且不需外加硬件电路。但占用CPU,定时的时间不宜太长。43.可编程定时器/计数器51单片机内部提供2个可编程的定时器/计数器T0和T1,它们可以用于定时或对外部脉冲计数,还可以作为串口的波特率发生器。定时器达到预定定时时间或者计数器计满数时,给出溢出标志,还可以发出内部中断。特点:计数值通过程序设定,改变计数值,也改变了定时时间,灵活、方便。注:51系列单片机采用的是可编程定时器定时方法。5第一节定时器/计数器的工作原理及组成一.工作原理每来一个脉冲,计数值加1,直到计满溢出系统时钟振荡器定时方式计数方式外部脉冲源决定加1计数器的运行与停止定时器/计数器的核心是一个加1计数器61、计数器如图,脉冲不等间隔记录外界发生的事情。对单片机,对外部脉冲进行计数,外部脉冲的下降沿有效。其最大容量为65536实例:电度表,汽车的里程表、录音机的计数器等确认一次负跳变需两个机器周期。CPU在一个周期采样高电平,下个周期采样低电平。然后第三个机器周期计数加1所以,计数频率最高为fosc/24。72、定时器等间隔,次数已定,时间确定即对机器周期进行计数。Tn左图定时时间为T×n。实例:闹钟(若定时1小时,说明秒针走了3600次)由单片机提供一个稳定的计数源,如工作原理图,其计数源为:单片机晶振经过12分频之后的一个脉冲源,其时间间隔与晶振有关。若晶振为12MHz,则计数间隔为1微秒。8二.组成则用于控制定时计数器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。特殊功能寄存器TMOD控制定时计数器的工作方式T0/T1,16位,可定时和计数,有4种工作方式91.定时器的控制寄存器TCONTF1TR1TF0TR0IE1IT1IE0IT08FH8EH8DH8CH8BH8AH89H88HT1字段T0字段外部中断控制字定时器T1的溢出中断标志位。定时器T0的溢出中断标志位。定时器T1的运行控制位。由软件置1或清零定时器T0的运行控制位。102.定时器的方式寄存器TMODM0M1GATEM0M1GATET1方式字段/CT/CTT0方式字段GATE——门控位。GATE=0时,只要TRx=1,定时器/计数器开始工作,不受INTx的影响。(内部控制)GATE=1,只有TRx为1且INTx输入为高电平时,定时器Tx才允许启动工作。(外部控制)11M0M1GATEM0M1GATET1方式字段/CT/CTT0方式字段C/T——定时或计数功能选择控制位。C/T=1,选择开关接外部脉冲源Tx,用作计数方式C/T=0,选择开关接内部时钟源,用作定时方式12M1、M0:工作方式选择位。M0M1GATEM0M1GATET1方式字段/CT/CTT0方式字段当M1M0=00时,方式0,13位定时器/计数器;=01时,方式1,16位定时器/计数器;=10时,方式2,8位自动重装定时器/计数器=11时,方式3,两个独立的8位定时器/计数器13第二节定时器/计数器的工作方式一.方式0(M1M0=00)TH的高8位和TL的低5位构成13位的脉冲计数器,而TL的高3位不用脉冲信号送到TL1,每输入一个脉冲信号TL0加1,当TL1的低5位溢出时就向TH1进位,13位计数器计满溢出时就向TF1进位,TF1=1,向CPU发出中断请求,如果中断允许,就进入中断响应。14二.方式1(M1M0=01)两个8位寄存器TH和TL构成16位脉冲计数器,TL计满溢出向TH进位,16位计满,TF置115三.方式2(M1M0=10)TH1为初值常数寄存器TL1为8位寄存器16方式2与方式0、1的区别:工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。工作方式2就具有自动重新装载功能,即自动加载计数初值。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。方式2在串口通讯时,常用作串行口波特率发生器。17三.方式3使用本身的控制位GATE、C//T、TF0、TR0和/INT0,并占用T0的中断源。而TH0只有内部定时时,占用定时器T1的TR1、TF1。•说明:方式3只能用于T0,而T1只有方式0,1,2(M1M0=11)(TH0和TL0是两个独立的8位计数器)(TL0可作为定时器和计数器)(TH0只能作定时器使用)18第三节定时器/计数器的应用一.定时器/计数器的编程方法编程基本步骤如下1.计算计数器初值初值X=2N-定时时间/机器周期•N的取值:方式0,N=13;方式1,N=16方式2,N=8;方式3,N=862210NXs定时时间192.确定控制字1)方式寄存器TMOD的确定M0M1GATEM0M1GATET1方式字段/CT/CTT0方式字段2)控制寄存器TCON的确定203.编制初始化程序1)确定工作方式,对TMOD赋值MOVTMOD,#XXH2)预置定时或计数的初值XMOVTLX,#XXHMOVTHX,#XXH3)根据需要开放定时器/计数器的中断MOVIE,#XXH4)启动、停止定时器/计数器的工作SETBTRXCLRTRX21二.方式0的应用例1,设晶振fosc=6MHz;要求由P1.0端输出一个周期为500μs的方波信号,由定时器T1采用查询方式实现。解:1.确定计数初值X•则计数初值X=2N-定时时间/机器周期=213-250/2=8067=1111110000011B•TH1=11111100B=FCH•TL1=00011B=03H1362210Xs定时时间222.确定控制字M0M1GATAM0M1GATA/CT/CT00000000TMODTR0TF0TF11TRTCON01233.编写程序ORG0000HMOVTMOD,#00HMOVTH1,#0FCHMOVTL1,#03HMOVIE,#00HSETBTR1LOOP:JBCTF1,LOOP1AJMPLOOPLOOP1:MOVTH1,#0FCHMOVTL1,#03HCPLP1.0AJMPLOOP;T1方式0;计数初值;禁止中断;启动定时;查询计数溢出位TR1;重新赋计数初值;信号跳变,查询负半周期程序初始化24三.方式1的应用解:1.确定计数初值X•X=2N-定时时间/机器周期=216-250/2=65536=1111111110000011B•TH1=11111111B=FFH•TL1=10000011B=83H例2,设单片机利用定时器T1,工作方式1;设晶振f=6MHz;要求在引脚为高电平时,以中断方式由P1.0端输出一个周期为500μs的方波信号。1INT252.确定控制字M0M1GATAM0M1GATA/CT/CT10010000TMOD故:TMOD=90HEAESET1EX1ET0EX0IE10001000TR0TF0TF11TRTCON0126ORG0000HLJMPMAIN;跳转到主程序ORG001BH;T1的中断入口地址LJMPDVT1;转向IT1中断服务程序ORG0100H;主程序MAIN:MOVTMOD,#90H;MOVTH1,#0FFH;装入计数初值MOVTL1,#83;SETBET1;T1开中断SETBEA;CPU开中断SETBTR1;启动T1SJMP$;等待中断MOVIE,#843.编写程序27OGR0100HDVT0:CPLP1.0;P1.0取反输出MOVTH0,#0FFH;重新装入计数值MOVTL0,#83H;RETI;中断返回END28四.方式2的应用例3:用定时器T1,采用工作方式2,计数,要求每计满156次,将P1.7取反。思路:T1工作于计数方式,外部计数脉冲由T1(P3.5)引脚引入,每来一个负跳变计数器加1,由程序查询TF1的状态。由题意知:TMOD=60H计数初值:X=28-156=100=64H故TH1=TL1=64H29程序设计:ORG2000HMOVTMOD,#60H;T1方式2,计数MOVTH1,#64H;T1计数初值MOVTL1,#64HSETBTR1;启动T1LOOP:JBCTF1,REPSJNPLOOPREP:CPLP1.7SJMPLOOP30五.方式3的应用例4,要求使用定时器T0工作在方式3情况下,使P1.0引脚上产生400μs的方波,P1.1引脚上产生800μs的方波。设单片机的晶振频率为6MHz。解:1.确定计数初值X•TL0=X=2N-定时时间/机器周期=28-200/2=156=10011100B所以TL0=9CH所以:TH0=38H2.确定控制字T0工作在方式3,故TMOD=03H•TH0=X=2N-定时时间/机器周期=28-400/2=56=00111000B313.编程ORG0000HREST:LJMPMAINORG000BHLJMPIT0;转T0中断服务程序ORG001BHLJMPIT1;转T1中断服务程序ORG0100HMAIN:MOVSP,#60HACALLMAIN1HERE:AJMPHERE32MAIN1:MOVTMOD,#03H;方式3MOVTL0,#9CHMOVTH0,#38HSETBET0SETBET1SETBEASETBTR0SETBTR1RETT0初始化程序33IT0:MOVTL0,#0CEH;T0中断处理程序CPLP1.0RETIIT1:MOVTH0,#9CHCPLP1.1TETI34六.运行中读定时器/计数器方法:先读THX,后读TLX,再读THX。若前后两次读取的THX相同,则两次读得的数据时正确的,如不相同,再重复读取,直到重读的内容相同为止。ORG0300HRDTIME:MOVA,TH0MOVT0,TL0CJNEA,TL0,RDTIMEMOVR1,ARET在读取运行中的定时器/计数器时,注意:若恰好出现TLX溢出向THX进位的情况,则读得的TLX值就完全不对。同样,先读THX,在读TLX也可能出错。35随堂练习(中断和定时/计数)一、填空题1、MCS-51单片机有()个中断源,有()个中断优先级,优先级由软件填写特殊功能寄存器()加以选择2、MCS-51单片机中,T0中断服务程序入口地址为()3、外部中断请求标志位是()和()4、MCS-51单片机外部有()种断信号触发方式,若选用外部中断0为边沿触发方式,则需用指令()5、MCS-51单片机中断系统选用外部中断1和定时器/计数器T1中断为高优先级,则(IP)=6、MCS-51单片机有()个16位可编程定时器/计数器,有()种工作方式。367、MCS-51单片机最大计数值(),此时工作于方式()8、若定时器/计数器工作方式0,为()位的,TL的低()计满溢出时,向高()位的TH进位。9、当定时器/计数器工作方式3时,要占用T1的()和()两个控制位10、当T0作为一个科自动重装初值的8位定时器/计数器时,()作为8位计数器,()为常数寄存器。11、当T0工作方式3,TH0溢出时,()将被硬件置1请求中断。12、T0和T1两引脚也可作为外部中断输入引脚,这时TMOD中的C/T位应当为()。13、要使T1停止工作,则指令();在工作方式3下,要使TH0开始工作,应执行指令()。37二、选择题1、中