第5章单片机的定时计数器与串行接口ppt课件.ppt
《第5章单片机的定时计数器与串行接口ppt课件.ppt》由会员分享,可在线阅读,更多相关《第5章单片机的定时计数器与串行接口ppt课件.ppt(89页珍藏版)》请在三一办公上搜索。
1、第5章 单片机的定时/计数器与串行接口,单片机原理、接口及应用,5.1 定时/计数器 定时计数器结构和工作原理 定时计数器的控制寄存器 定时器的四种工作方式 定时计数器的应用编程5.2 串行接口,51系列单片机片内有二个十六位定时/计数器:定时器0(T0)和定时器1(T1)。两个定时器都有定时或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合 定时/计数器实际上是16位加1计数器。T0由2个8位持殊功能寄存器TH0和TL0构成,T1由2个8位持殊功能寄存TH1和TL1构成。每个定时器都可由软件设置为定时工作方式或 计数工作方式。T0和T1受特殊功能寄存器TMOD和TCON控制。
2、,5.1.1 8051定时/计数器结构和工作原理,1.定时工作方式,设置为定时工作方式时,定时器计数的脉冲是由51单片机片内振荡器经12分频后产生的。每经过一个机器周期定时器(T0或T1)的数值加1直至计数满产生溢出。如:当8051采用12MHz晶体时,每个机器周期为1s,计5 个机器周期即为5 s,即定时5 s。,2.计数工作方式,设置为计数工作方式时,通过引脚T0(P34)和T1(P35)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时,定时器的值加1,在每个机器周期CPU采样T0和T1的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加 1。由于检测一个1
3、至0的跳变需要二个机器周期,故最高计数频率为振荡频率的二十四分之一。虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。,5.1.2 定时计数器的控制寄存器定时器共有两个控制寄存器:定时器控制TCON(88H)定时器工作模式寄存器TMOD(89H),1.工作模式寄存器TMOD(89H),TMOD用于控制T0和T1的操作模式。其各位的定义如下:,定时器T0,定时器T1,GATE:门控信号 GATE=0,TRx=1时即可启动定时器工作;GATE=1,INTx=1才可启动定时器工作。C/T:定时器/计数器选择位 C/T=1,为计数器
4、方式;C/T=0,为定时器方式。M1 M0 工作模式选择位 M1M0=00 工作方式0(13位方式)。M1M0=01 工作方式1(16位方式)。M1M0=10 工作方式2(8位自动再装入方式)。M1M0=11 工作方式3(T0为2个8位方式)。,2.控制寄存器TCON(88H),TCON寄存器 中定时器控制 仅用了其中高四位,其意义如下:TF1:T1溢出中断请求标志。TF1=1,T1有溢出中断请求。TF1=0,T1无溢出中断请求。TR1:T1运行控制位。TR1=1,启动T1工作。TR1=0,停止T1工作。,TF0:T0溢出中断请求标志。TF0=1,T0有溢出中断请求。TF0=0,T0无溢出中断
5、请求。TR0:T0运行控制位。TR0=1,启动T0工作。TR0=0,停止T0工作。,C/T,C/T,5.1.3 定时器的四种工作方式,对TMOD寄存器的M1、M0位的设置,可选择四种工作方式,即方式0、方式1、方式2和方式3。下面用THX、TLX(X=1或0)表示TH1 TL1 TH0 TL0。1.方式 0定时器(T0或T1)工作于13位定时、计数方式。用于计数方式时最大计数值为 213 8192个脉冲用于定时工作时,定时时间为:t(213一T0初值)时钟周期12在这种模式下,16寄存器(THX和TLX)只用13位,其中THX占高8位。其中TLX占低5位,TLX的高3位末用。当TLX的低5位溢
6、出时向THX进位,而THX溢出时硬件置位TF0,并申请中断。,定时、计数溢出否可查询TF0是否置位,如果开中断则产生溢出中断。,2.方式1 当TMOD中M1M0=01时,定时计数器工作在方式1。该模式是一个16位定时计数方式。寄存器TH0和TL0是以全16位参与操作,计数方式时最大计数 21665536(个外部脉冲)用于定时工作方式时,定时时间为:t(216一T0初值)时钟周期12 16寄存器(THX和TLX)中THX提供高8位、TLX提供低8位计数初值,3.方式2 当TMOD中M1M0=10时,定时器工作在方式2。方式2是8位的可自动重装载的定时计数方式。16位的计数器被拆成两个8位,其中T
7、L0用作8位计数器,TH0用以保持计数初值。当TL0计数溢出,置位TF0,TH0中的初值自动装入TL0,继续计数,循环重复计数。用于计数工作方式时,最大计数值为:28256(个外部脉冲)。用于定时工作方式时,其定时时间为;t(28TH0初值)振荡周期12这种工作方式可省去用户重装常数的程序,并可产生精确的定时时间,特别适用作串行口波待率发生器。,4.方式3当TMOD中M1M0=11时,定时器工作在方式3。若将T0设置为模式3,TL0和TH0被分成为两个互相独立的8位计数器TH0和 TL0。TL0可工作为定时方式或计数方式。占用原T0的各控制位、引脚和中断源。即CT、GATE、TR0、TF0和T
8、0(P3.4)引脚、INT0(P3.2)引脚。TH0只可用作定时功能,占用定时器T1的控制位TR1和T1的中断标志位TF1,其启动和关闭仅受TRl的控制。定时器T1无模式 3,可工作于方式0、1、2,但不能使用中断方式。只有将T1用做串行口的波特率发生器时,T0才工作在方式3,以便增加一个定时器。,5.1.4 定时计数器的应用编程,5.1.4.1 定时器的计数初值C的计算和装入 如前所述,8xx51定时器/计数器不同工作方式的模值不同,由于采用加1计数,因此计数初值应为负值,计算机中用有符号数采用补码表示。计数初值(C)的求法如下。计数方式:计数初值 C=模-X(其中X为要计的脉冲个数)定时方
9、式:计数初值 C=t/MC补=模t/MC 其中t为欲定时时间,MC为8xx51的机器周MC=12/fosc 当采用12MHZ晶振时,MC=1us;当采用6MHZ晶振时,MC=2us。,方式0(13位方式):C=(-64H)补=2000H64H=1F9CH 1F9CH0001 1111 1001 1100B 把13位中的高八位1111 1100B装入TH0,而把13位中的低五位xxx1 1100B装入TL0。MOV TH0,#0FCH;MOV TL0,#1CH;(xxx用“0”填入)方式1(16位方式):C=(-64H)补=10000H-64H=FF9CH 用指令装入计数初值:MOV TH0,#
10、0FFH MOV TL0,#9CH,例 要计100个脉冲的计数初值,方式2(8位自动再装入方式)C=(64H)补=100H64H=9CH 初值既要装入TH0,也要装入TL0:MOV TH0,#9CH MOV TL0,#9CH,5.1.4.2 定时计数器的初始化编程 定时计数器的初始化编程步骤:1)根据定时时间要求或计数要求计算计数器初值;2)工作方式控制字送TMOD寄存器;3)送计数初值的高八位和低八位到THX和TLX寄存 器中;4)启动定时(或计数),即将TRX置位。如果工作于中断方式,需要置位EA(中断总开关)及ETX(允许定时/计数器中断)。并编中断服务程序。,例5-1 如图7-2所示,
11、P1中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。,5.1.4.3 应用编程举例,分析 利用T1完成100ms的定时,当P1口线输出“1”时,发光二极管亮,每隔100ms”1”左移一次,采用定时方式1,先计算计数初值:MC=2s 100ms/2s=50000=C350H(C350H)补=10000H-C350H=3CB0H,查询方式如下:ORG 0030H MOV A,#01H:置第一个LED亮NEXT:MOV P1,A MOV TMOD,#10H;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H;定时100ms SETB TR1
12、AGAI:JBC TF1,SHI;100ms到转SHI,并清TF1 SJMP AGAISHI:RL A SJMP NEXT,中断方式 ORG 0000H AJMP MAIN;单片机复位后从0000H开始执行 ORG 001BH AJMP IV1;转移到IV1 ORG 0030H;主程序MAIN:MOV A,#01H MOV P1,A;置第一个LED亮 MOV TMOD,#10H;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H;定时100ms SETB TR1;启动T1工作 SETB ET1;允许T1中断WAIT:SJMP WAIT;等待中断,IV1:RL A;中断服
13、务程序,左移一位 MOV P1,A;下一个发光二极管亮 MOV TH1,#3CH MOV TL1,#0B0H;重装计数初值 RETI;中断返回以上程序进入循环执行,八个LED一直循环轮流点亮。,方法1:采用T0产生周期为200ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好100ms。T0采用方式1,X=得X=3CB0H,T1采用方式2,计数初值X=5=FBH均采用查询方式,流程图和程序如下:,例5-2 在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮一秒灭一秒周而复始,设fosc=6MHZ。,解:16位定时最大为*2us=13
14、1.072ms,显然不能满足要求,可用以下两种方法解决。,ORG 0000HMAIN:CLR P1.7 SETB P1.0 MOV TMOD,#61H MOV TH1,#0FBH MOV TL1,#0FBH SETB TR1LOOP1:CPL P1.7,LOOP2:MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LOOP3:JBC TF0,LOOP4 SJMP LOOP3 LOOP4:CPL P1.0 JBC TF1,LOOP1 AJMP LOOP2 END,程序中用JBC指令对定时/计数溢出标志位进行检测,当标志位为1时跳转并清标志。,方法2:T0每隔100ms中断一
15、次,利用软件对T0的中断次数进行计数,中断10次即实现了1秒的定时。ORG 000BH;T0中断服务程序入口 AJMP IP0 ORG 0030H;主程序开始 MAIN:CLR P1.7;T0定时100ms MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA,MOV R4,#0AH;中断10次计数 SETB TR0 SJMP;等待中断 IP0:DJNZ R4,RET0;MOV R4,#0AH CPL P1.7RET0:MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 RETI,例5-有P3.4引脚(T0)输入
16、一低频信号(其小于0.5kHZ),要求P3.4每发生一次负跳变时,P1.0输出一个500us同步负脉冲,同时P1.1输出一个1ms的同步正脉冲。已知晶振频率为6MHZ。,图7-5,解按提意,设计方法如图7-5所示。初态P1.1输出高电平(系统复位时实现),P1.1输出低电平,T0选方式计数方式(计一个脉冲,初值为FFH)。当加在P3.4上的外部脉冲负跳变时,T0加1,计数器溢出,程序查询到TF0为1,改变T0为500s定时工作方式,并使P1.0输出,P1.1输出。T0第一次定时500s溢出后,P1.0恢复,T0第二次定时500s溢出后,P1.1恢复,T0恢复外部脉冲计数。设定时500s的初始值
17、为X,则:(256X)2106=50010-6 解得 X=6,源程序如下:BEGIN:MOV TMOD,#6H;设T0为方式外部计数 MOV TH0,#0FFH;计数一个脉冲 MOV TL0,#0FFH CLR P1.1;P1.1初值为0 SETB TR0;启动计数器DELL:JBC TF0,RESP1;检测外跳变信号 AJMP DELLRESP1:CLR TR0 MOV TMOD,#02H;重置T0为500ms定时,MOV TH0,#06H;重置定时初值 MOV TL0,#06H SETB P1.1;P1.1置1 CLR P1.0;P1.0清0 SETB TR0;启动定时计数器DEL2:JB
18、C TF0,RESP2;检测第一次500us到否 AJMP DEL2RESP:SETB P1.0;P1.0恢复1DEL3:JBC TF0,RESP3;检测第二次500us到否 AJMP DEL3RESP3:CLR P1.1;P1.1复0 CLR TR0 AJMP BEGIN,5.1.4.4 门控位的应用 门控位GATE为1时,TRx=1,INTx=1才能启动定时器。利用这个特性可以测量外部输入脉冲的宽度。例7-4 利用T0门控位测试 INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz,将所测得值最高位 存入片内71H单元,低位存入70H单元。解:设外部脉冲 由(P3.2)输入,T0工作于
19、定时方式 1(16位计数),GATE设为1。测试时,应在INT0 低电平时,设置TR0为1(16位计数);当INT0 变为高电平时,就启动计数;再次变低时,停止计数。此计数值与机器周期的乘积即为被测正脉冲的宽度。因fosc=12MHZ,机器周期为1us,测试过程如下。,源程序如下:MOV TMOD,#09H;设T0为方式1 MOV TL0,#00H;设计初值取最大值 MOV TH0,#00H MOV R0,#70H JB P3.2,$;等P3.2(INT0)变低 SETB TR0;启动T0准备工作 JNB P3.2,$;等待P3.2(INT0)JB P3.2,$;等待P3.2(INT0)CLR
20、 TR0;停止计数,MOV R0,TL0;存放结果 INC R0 MOV R0,TH0 SJMP$读者不难编出C语言程序。这种方案被测脉冲的宽度最大为65535个机器周期。由于靠软件启动和停止计数,有一定的测量误差。其可能的最大误差与指令的执行时间有关。此例中,在读取定时器的计数之前,已把它停住。但在某些情况下,不希望在读计数值时打断定时的过程,由于我们不可能在同一时刻读取THX和TLX的内容。读取一个时恰好另一个产生溢出,在这种情况下,读取的计数值有可能是错的。可以解决错读的方法是:,先读THX后读TLX,若两次读得的THx没有发生变化,则可确定读到的内容是正确的。若前后两次读到的THx有变
21、化,则再重复上述过程,重复读到的内容就应该是正确的了。下面是按此思路编写的程序段,读到的TH0 和TL0放在R1和R0内:RP:MOV A,TH0;MOV R0,TL0;CJNE A,TH0,RP;MOV R1,A,5.1.5 小 结,定时计数器应用非常广泛,如定时采样、时间测量、产生音响、作脉冲源、制作日历时钟、测量波形的频率和占空比、检测电机转速等。因此应很好掌握。51系列单片机既有两个16位的定时计数器,有四种不同的工作方式,归纳于下表:,定时和计数实质都是对脉冲的计数,只是被计脉冲的来源不同,定时方式的被计脉冲来源于时钟,计数方式的被计脉冲来源于外部,定时方式的计数初值和被计脉冲周期有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 定时 计数器 串行 接口 ppt 课件

链接地址:https://www.31ppt.com/p-6614884.html