第5章单片机的定时计数器与串行接口1.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章单片机的定时/计数器与串行接口单片机原理、接口及应用第5章单片机的定时/计数器与串行接口5.1定时/计数器★定时计数器结构和工作原理★定时计数器的控制寄存器★定时器的四种工作方式★定时计数器的应用编程5.2串行接口第5章单片机的定时/计数器与串行接口★51系列单片机基本型片内有二个十六位定时/计数器:定时器0(T0)和定时器1(T1);增强型片内有三个十六位定时/计数器:T0、T1、T2。本章重点介绍T0和T1。★定时/计数器有定时或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合★定时/计数器实际上是16位加1计数器。T0由2个8位持殊功能寄存器TH0和TL0构成,T1由2个8位持殊功能寄存TH1和TL1构成。★每个定时器都可由软件设置为定时工作方式或计数工作方式。★T0和T1受特殊功能寄存器TMOD和TCON控制。5.1.18051定时/计数器结构和工作原理第5章单片机的定时/计数器与串行接口1.定时工作方式★设置为定时工作方式时,定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的。★每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出。如:当8051采用12MHz晶体时,每个机器周期为1μs,计5个机器周期即为5μs,即定时5μs。第5章单片机的定时/计数器与串行接口2.计数工作方式★设置为计数工作方式时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。★当输入脉冲信号产生由1至0的下降沿时,定时器的值加1,在每个机器周期CPU采样T0和T1的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加1。★由于检测一个1至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。★虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。第5章单片机的定时/计数器与串行接口5.1.2定时计数器的控制寄存器★定时器共有两个控制寄存器:定时器控制TCON(88H)定时器工作模式寄存器TMOD(89H)1.工作模式寄存器TMOD(89H)TMOD用于控制T0和T1的操作模式。其各位的定义如下:TMODD7D6D5D4D3D2D1D0(89H)GATEC/TM1M0GATEC/TM1M0定时器T0定时器T1第5章单片机的定时/计数器与串行接口★GATE:门控信号GATE=0,TRx=1时即可启动定时器工作;GATE=1,除TRx=1外,还需INTx=1才可启动定时器工作。★C/T:定时器/计数器选择位C/T=1,为计数器方式;C/T=0,为定时器方式。★M1M0工作模式选择位M1M0=00工作方式0(13位方式)。M1M0=01工作方式1(16位方式)。M1M0=10工作方式2(8位自动再装入方式)。M1M0=11工作方式3(T0为2个8位方式)。第5章单片机的定时/计数器与串行接口TF1TR1TF0TR0IE1IT1IE0IT0T1请求有/无T1工作启/停T0请求有/无T0工作启/停INT1请求有/无INT1方式下沿/低电平INT0请求有/无INT0方式下沿/低电平2.控制寄存器TCON(88H)TCON寄存器中定时器控制仅用了其中高四位,其意义如下:★TF1:T1溢出中断请求标志。TF1=1,T1有溢出中断请求。TF1=0,T1无溢出中断请求。★TR1:T1运行控制位。TR1=1,启动T1工作。TR1=0,停止T1工作。第5章单片机的定时/计数器与串行接口★TF0:T0溢出中断请求标志。TF0=1,T0有溢出中断请求。TF0=0,T0无溢出中断请求。★TR0:T0运行控制位。TR0=1,启动T0工作。TR0=0,停止T0工作。第5章单片机的定时/计数器与串行接口定时计数器的内部逻辑电路结构&1C/TC/T第5章单片机的定时/计数器与串行接口5.1.3定时器的四种工作方式对TMOD寄存器的M1、M0位的设置,可选择四种工作方式,即方式0、方式1、方式2和方式3。下面用THX、TLX(X=1或0)表示TH1TL1TH0TL0。1.方式0★定时器(T0或T1)工作于13位定时、计数方式。用于计数方式时最大计数值为213=8192个脉冲用于定时工作时,定时时间为:t=(213一T0初值)×时钟周期×12★在这种模式下,16寄存器(THX和TLX)只用13位,其中THX占高8位。其中TLX占低5位,TLX的高3位末用。★当TLX的低5位溢出时向THX进位,而THX溢出时硬件置位TF0,并申请中断。第5章单片机的定时/计数器与串行接口★定时、计数溢出否可查询TF0是否置位,如果开中断则产生溢出中断。2.方式1当TMOD中M1M0=01时,定时计数器工作在方式1。★该模式是一个16位定时/计数方式。寄存器TH0和TL0是以全16位参与操作,计数方式时最大计数216=65536(个外部脉冲)用于定时工作方式时,定时时间为:t=(216一T0初值)×时钟周期×12★16寄存器(THX和TLX)中THX提供高8位、TLX提供低8位计数初值第5章单片机的定时/计数器与串行接口3.方式2当TMOD中M1M0=10时,定时器工作在方式2。方式2是8位的可自动重装载的定时计数方式。★16位的计数器被拆成两个8位,其中TL0用作8位计数器,TH0用以保持计数初值。当TL0计数溢出,置位TF0,TH0中的初值自动装入TL0,继续计数,循环重复计数。★用于计数工作方式时,最大计数值为:28=256(个外部脉冲)。用于定时工作方式时,其定时时间为;t=(28—TH0初值)×振荡周期×12★这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波待率发生器。第5章单片机的定时/计数器与串行接口4.方式3当TMOD中M1M0=11时,定时器工作在方式3。★若将T0设置为模式3,TL0和TH0被分成为两个互相独立的8位计数器TH0和TL0。★TL0可工作为定时方式或计数方式。占用原T0的各控制位、引脚和中断源。即C/T、GATE、TR0、TF0和T0(P3.4)引脚、INT0(P3.2)引脚。TH0只可用作定时功能,占用定时器T1的控制位TR1和T1的中断标志位TF1,其启动和关闭仅受TRl的控制。★定时器T1无模式3,可工作于方式0、1、2,但不能使用中断方式。★只有将T1用做串行口的波特率发生器时,T0才工作在方式3,以便增加一个定时器。第5章单片机的定时/计数器与串行接口5.1.4定时计数器的应用编程5.1.4.1定时器的计数初值C的计算和装入如前所述,8xx51定时器/计数器不同工作方式的模值不同,由于采用加1计数,因此计数初值应为负值,计算机中用有符号数采用补码表示。计数初值(C)的求法如下。★计数方式:计数初值C=模-X(其中X为要计的脉冲个数)★定时方式:计数初值C=[t/MC]补=模-t/MC其中t为欲定时时间,MC为8xx51的机器周MC=12/fosc当采用12MHZ晶振时,MC=1μs;当采用6MHZ晶振时,MC=2μs。第5章单片机的定时/计数器与串行接口方式0(13位方式):C=(-64H)补=2000H-64H=1F9CH1F9CH=0001111110011100B把13位中的高八位11111100B装入TH0,而把13位中的低五位xxx11100B装入TL0。MOVTH0,#0FCH;MOVTL0,#1CH;(xxx用“0”填入)方式1(16位方式):C=(-64H)补=10000H-64H=FF9CH用指令装入计数初值:MOVTH0,#0FFHMOVTL0,#9CH例要计100个脉冲的计数初值第5章单片机的定时/计数器与串行接口方式2(8位自动再装入方式)C=(-64H)补=100H-64H=9CH初值既要装入TH0,也要装入TL0:MOVTH0,#9CHMOVTL0,#9CH第5章单片机的定时/计数器与串行接口5.1.4.2定时计数器的初始化编程定时计数器的初始化编程步骤:1)根据定时时间要求或计数要求计算计数器初值;2)工作方式控制字送TMOD寄存器;3)送计数初值的高八位和低八位到THX和TLX寄存器中;4)启动定时(或计数),即将TRX置位。如果工作于中断方式,需要置位EA(中断总开关)及ETX(允许定时/计数器中断)。并编中断服务程序。第5章单片机的定时/计数器与串行接口例5-1如图7-2所示,P1中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。5.1.4.3应用编程举例第5章单片机的定时/计数器与串行接口分析利用T1完成100ms的定时,当P1口线输出“1”时,发光二极管亮,每隔100ms”1”左移一次,采用定时方式1,先计算计数初值:MC==2μs100ms/2μs=50000=C350H(C350H)补=10000H-C350H=3CB0H第5章单片机的定时/计数器与串行接口①查询方式如下:ORG0030HMOVA,#01H:置第一个LED亮NEXT:MOVP1,AMOVTMOD,#10H;T1工作于定时方式1MOVTH1,#3CHMOVTL1,#0B0H;定时100msSETBTR1AGAI:JBCTF1,SHI;100ms到转SHI,并清TF1SJMPAGAISHI:RLASJMPNEXT第5章单片机的定时/计数器与串行接口②中断方式ORG0000HAJMPMAIN;单片机复位后从0000H开始执行ORG001BHAJMPIV1;转移到IV1ORG0030H;主程序MAIN:MOVA,#01HMOVP1,A;置第一个LED亮MOVTMOD,#10H;T1工作于定时方式1MOVTH1,#3CHMOVTL1,#0B0H;定时100msSETBTR1;启动T1工作SETBET1;允许T1中断WAIT:SJMPWAIT;等待中断第5章单片机的定时/计数器与串行接口IV1:RLA;中断服务程序,左移一位MOVP1,A;下一个发光二极管亮MOVTH1,#3CHMOVTL1,#0B0H;重装计数初值RETI;中断返回以上程序进入循环执行,八个LED一直循环轮流点亮。第5章单片机的定时/计数器与串行接口方法1:采用T0产生周期为200ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好100ms。T0采用方式1,X=-得X=3CB0H,T1采用方式2,计数初值X=-5=FBH均采用查询方式,流程图和程序如下:162162210100382例5-2在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮一秒灭一秒周而复始,设fosc=6MHZ。解:16位定时最大为*2us=131.072ms,显然不能满足要求,可用以下两种方法解决。第5章单片机的定时/计数器与串行接口第5章单片机的定时/计数器与串行接口ORG0000HMAIN:CLRP1.7SETBP1.0MOVTMOD,#61HMOVTH1,#0FBHMOVTL1,#0FBHSETBTR1LOOP1:CPLP1.7LOOP2:MOVTH0,#3CHMOVTL0,#0B0HSETBTR0LOOP3:JBCTF0,LOOP4SJMPLOOP3LOOP4:CPLP1.0JBCTF1,LOOP1AJMPLOOP2END程序中用JBC指令对定时/计数溢出标志位进行检测,当标志位为1时跳转并清标志。第5章单片机的定时/计数器与串行接口方法2:T0每隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1秒的定时。ORG000BH;T0中断服务程序入口AJMPIP0ORG0030H;主程序开始MAIN:CLRP1.7;T0定时100msMOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBET0SETBEA第5章单片机的定时/计数器与串行接口MOVR4,#0AH;中断10次计数SETBTR0SJMP$;等待中断IP0:DJNZR4,RET0;MOVR4,#0AHCP

1 / 89
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功