您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > MCS-51单片机的定时计数器及应用.
第7章MCS-51单片机的定时/计数器及应用定时/计数器是单片机应用系统的最重要组成部分之一7.1定时/计数器及应用概述(P139)定时/计数器是单片机的一项重要技术,MCS-51有T0和T1两个定时/计数器,增强型52还有T2定时/计数器。周期是事件出现的事件间隔,用T表示。频率是1s内周期性事件重复的次数,用f表示。f=1/T1s(秒)=1000ms(毫秒)1ms(毫秒)=1000μs(微秒)1μs(微秒)=1000ns(纳秒)1ns(纳秒)=1000ps(皮秒)7.2.1定时/计数器T0和T1的主要特性(P139)•T0和T1是两个16位的可编程定时/计数器。•T0和T1的定时功能:对内部系统时钟计数定时。•T0和T1的计数功能:对外部脉冲信号计数。•T0有4种工作方式,T1有3种工作方式,可通过编程来设定工作方式。(见P141表7.1)定时/计数器T0和T1工作方式选择表。定时/计数器的工作原理•T0和T1定时/计数器的核心分别是2个16位加1计数器,当计数到最大值,并再来1个计数脉冲时产生溢出,使溢出标志位置1,产生溢出中断,通过中断处理程序完成设计目的。•也可通过查询溢出标志获知溢出,通过相应的子程序完成设计目的。11111111111110溢出位计数器到了最大值再来1个脉冲00000000000011溢出位置1可通过P3.4和P3.5对外部脉冲计数外部脉冲外部脉冲从P3.4和P3.5接入,分别由T0和T1计数。定时/计数器的结构图(P140)TH1TL1TH0TL0TCONTMOD微处理器T1(P3.5)T0(P3.4)机器周期内部总线工作方式工作方式启动启动溢出溢出定时/计数器的结构说明•TH0和TL0是定时/计数器T0计数器的高8位和低8位,TH1和TL1是定时/计数器T1计数器的高8位和低8位。•工作模式寄存器TMOD用来设置定时/计数器T0和T1的工作方式。•控制寄存器TCON用来控制T0和T1的启动和停止。•当定时/计数器用于定时,加1计数器对内部机器周期计数(1μs)计数。•当定时/计数器用于计数,加1计数器对单片机引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数。•无论定时,还是计数,当加1计数器由全1再加1变成全0时产生溢出,形成溢出中断。定时/计数器的初值(P140)•对于加1计数器,每来1个计数脉冲就加1,当计数器计满时,由全1再加1变成全0时产生溢出,形成溢出中断。如果要计数N达到溢出,则要先向计数器设初值X。初值X=[(最大计满值M)+1]-[计数值N]•当定时/计数器工作于R位计数方式时,其最大计数(计满)值为2R-1。•对于8位计数器,其最大计满值为28-1=255;对于16位计数器,其最大计满值为216-1=65535;对于13位计数器,其最大计满值为213-1=8191;片外输入计数脉冲频率的最大值•对于外部脉冲的计数,在每个机器周期的S5P2对引脚P3.4或P3.5上的信号采样,如果在两个相邻周期出现下降沿,则在下一个机器周期的S3P2加1计数器计数1次。因此要2个机器周期才能计数1次。也就是最少需要2μs计数1次,因此外部输入脉冲频率500KHz。S1S2S3S4S5S6S1S2S3S4S5S61个机器周期1个机器周期7.2.3定时/计数器T0和T1的相关SFR(P141)定时/计数器T0和T1的工作模式寄存器TMODGATEC/TM1M0GATEC/TM1M0TMODb7b6b5b4b3b2b1b0T0C/T----1:计数模式,0:定时模式。M1M0----设置定时/计数器的工作方式,T0有4种工作方式,T1有3种工作方式。见P141表7.1。GATE----门控位,控制定时/计数器是否受外部中断请求信号影响。T1定时/计数器T0和T1工作方式选择M1M0方式对T0分为两个8位独立计数器;对T1设置方式3时停止工作.自动重载8位定时器/计数器16位定时器/计数器13位定时器/计数器010011001123定时器/计数器的控制寄存器TCONTF1TR1TF0TR0TE1IT1IE0IT0TCONb7b6b5b4b3b2b1b0硬件复位:0T1溢出中断:1T1中断标志位T1启停位T0中断标志位T0启停位停T1计数:0启T1计数:1硬件复位:0T0溢出中断:1停T0计数:0启T0计数:1触发标志位0:INT0电平触发1:INT0负边沿触发中断标志位0:硬件复位1:INT0上有中断触发标志位0:INT1电平触发1:INT1负边沿触发中断标志位0:硬件复位1:INT1上有中断TCON对于定时/计数器的控制(P142)•TF1----定时/计数器T1的溢出标志位,当T1计满溢出,TF1置1,中断处理后由硬件自动清零。•TR1----定时/计数器T1的启动位,TR1=1时启动,TR1=0时停止。由软件置位和清零。•TF0----定时/计数器T0的溢出标志位,功能与TF1相同。•TR0----定时/计数器T0的启动位,功能与TR1相同。7.2.4定时/计数器T0和T1的工作方式(P142)----方式0和方式1•方式0(M1M0=00)和方式1(M1M0=01)的区分只是计数的位数不同。方式0是13位,方式1是16位。方式0使用TL0(或TL1)的低5位和TH0(或TH1)的8位,TL0(或TL1)计满时向高位TH0(TH1)进位。方式1使用TL0(或TL1)的8位和TH0(或TH1)的8位,TL0(或TL1)计满时向高位TH0(TH1)进位。计数脉冲溢出计数脉冲溢出方式0和方式1的逻辑电路结构图振荡器/12TL0TH0TF0中断T0TR0GATEINT0控制T0(P3.4)----外部计数脉冲TR0----启动计数GATE----允许外部中断信号INT0进入方式0和方式1的初值•定时器和计数器的实质就是计数,当要求输入N个计数脉冲产生中断处理,要给计数器事先赋初值。•方式0的最大初值X为:X=8192-N•方式1的最大初值为:X=65536-N•方式0和方式1,给TL0TH0赋初值,当计数器计满溢出,产生溢出中断,计数脉冲仍不断的进入,此时会从全0开始计数,硬件不重载。因此如果需要重新实现N个计数时,就要用软件再重新赋初值。定时/计数器T0和T1的工作方式2(P143)----8位自动重载初值振荡器/12TL0(8位)TF0中断T0TR0GATEINT0控制TH0(8位)重载TL0(或TL1)用于计数,TH0(或TH1)用于保存初值,计满溢出时硬件自动将TH0的值重新装入TL0。自动装载的初值:X=256-N定时/计数器T0的工作方式3(P143)•方式3只能用于定时/计数器T0,将T0分为TL0和TH0两部分。•其中TL0可以作为8位定时/计数器使用,而TH0固定只能做定时器用。•使用方式3,计数器最大值和初值的设置方式与方式2完全相同。7.2.5定时/计数器T0和T1的编程(P144)•MCS-51单片机定时/计数器编程的过程:–1)选择工作方式,写入方式控制寄存器TMOD。–2)确定计数值,并求得定时/计数器的初值,写入初值寄存器。–3)开放定时/计数器的中断允许(开中断),编写中断服务程序。–4)设置控制寄存器TCON的值,启动定时/计数器。–5)等待定时/计数器计数时间到(溢出),执行中断服务程序。也可采用查询溢出标志方式,但要软件清零溢出标志。定时/计数器的应用例7.1(P144)•题目:单片机的系统时钟是12MHz,用定时/计数器T0编程实现从引脚P1.0输出周期为500μs的方波。•设计:定时器对内部机器周期(1μs)计数,当定时/计数器工作在方式2(8位自动重载),最大定时时间是256μs,满足250μs的定时要求。•将T0设置为定时器方式且为方式2,对工作模式寄存器TMOD的设置是C/T=0和M1M2=10,也即00000010B(02H)。8位计数器的初值:X=256-250=6采用中断处理方式的汇编程序(P145)ORG0000HLJMPMAINORG000BH;中断处理程序CPLP1.0;翻转输出RETI;中断返回ORG0030H;主程序MAIN:MOVTMOD,#02H;定时器T0工作方式2MOVTH0,#06H;初值保存MOVTL0,#06H;赋初值SETBEA;开放总中断SETBET0;开放T0溢出中断SETBTR0;启动T0SJMP$;原地踏步END采用中断处理方式的C51程序(P145)#includereg52.h#includeintrins.hsbitSQ=P1^0;intmain(void){TMOD=0x02;//T0定时器方式2TH0=0x06;//保存初值TL0=0x06;//赋初值EA=1;//开总中断ET0=1;//开T0溢出中断TR0=1;//启动T0while(1);//原地踏步{}}voidtime0_int(void)interrupt1{//中断服务程序SQ=!SQ;//输出翻转}采用查询方式的汇编程序(P145)ORG0000HLJMPMAINORG0100H;主程序MAIN:MOVTMOD,#02H;定时器T0工作方式2MOVTH0,#06;保存初值MOVTL0,#06;赋初值SETBTR0;启动T0LOOP:JBCTF0,NEXT;查询T0计数溢出SJMPLOOP;循环NEXT:CPLP1.0;翻转输出SJMPLOOP;循环END采用查询方式的C51程序(P145)#includereg52.hsbitSQ=P1^0;intmain(void){TMOD=0x02;//T0定时器工作方式2TH0=0x06;//保存初值TL0=0x06;//赋初值TR0=1;//启动T0while(1){if(TF0)//查询T0计数溢出{TF0=0;//清零标志SQ=!SQ;//输出翻转}}}加大定时时间的设计(P145)•对于系统时钟为12MHz的MCS-51,1个机器周期就是1μs。•如果定时计数值大于256(256μs),方式2不能直接处理;如果定时计数值小于8192(8192μs),可用方式0处理;如果定时计数值小于65536(65536μs),可用方式1处理。•如果定时计数值大于65536,可用2个定时器共同处理,或1个定时器配合软件来处理。加大定时时间的例7.2(P145)•例7.2:系统时钟为12MHz,编程实现从P1.1输出周期为1s的方波。•此例要求产生500ms的周期性定时,在引脚P1.1上翻转输出。•由于定时时间较长(计数值大),用1个定时器不能直接实现,可用定时器T0产生50ms的定时,再用1个寄存器R1对50ms计数10次。•或者再用定时器T1对50ms计数10次来实现。•这里将T0设置为定时器并选用方式1(16位不自动重载),对工作模式寄存器TMOD的设置是C/T=0和M1M2=01,也即00000001B(01H)。16位计数器的初值:X=65535-50000=15536•TH0=15536/256=60,TL0=15536%256=176。加大定时时间的例7.2(P145)•例7.2:系统时钟12MHz,编程实现从P1.1输出周期为1s的方波。要求产生500ms的周期性定时,在引脚P1.1上翻转输出。•由于定时时间较长(计数值大),用1个定时器不能直接实现,可用定时器T0产生50ms的定时,再用1个寄存器R2做软件计数器对50ms计数10次。•或者再用定时器T1对50ms计数10次来实现。•这里将T0设置为定时器并选用方式1(16位不自动重载),对工作模式寄存器TMOD的设置是C/T=0和M1M2=01,也即00000001B(01H)。16位计数器的初值:X=65535-50000=15536•TH0=15536/256=60,TL0=15536%256=176。用寄存器R2做软件计数,中断处理。汇编程序。ORG0000HLJMPMAINORG000BH;T0中断入口LJMPINTT0;500msORG0100HMAIN:MOVTMOD,#01H;T0定时器工作
本文标题:MCS-51单片机的定时计数器及应用.
链接地址:https://www.777doc.com/doc-2888167 .html