定时器计数器和串行通信.ppt
《定时器计数器和串行通信.ppt》由会员分享,可在线阅读,更多相关《定时器计数器和串行通信.ppt(119页珍藏版)》请在三一办公上搜索。
1、第6章 定时器/计数器和串行通信,6.1 定时器/计数器的结构及工作原理6.2 定时器/计数器的应用6.3 串行口的结构及工作方式6.4 串行口的应用6.5 RS-232C串行通信接口,6.1 定时器/计数器的结构及工作原理,MCS-51单片机内部有两个16位的可编程的定时器计数器,称为定时器0、定时器1,分别用T0、T1表示。它们均可独立编程,具有四种工作方式。6.1.1 定时器/计数器的结构,6.1.1 定时器/计数器的结构,6.1.1 定时器/计数器的结构,在作定时器使用时,是对内部的机器周期进行计数。每个机器周期包含12个振荡周期,即定时器的输入脉冲是对外部晶振进行12分频后得到的。例
2、如,外部晶振频率为12MHz,则定时器的输入时钟脉冲频率为1MHz,即每隔1us接收到一个脉冲,计数值加1。所以,实际上是通过对机器周期的计数实现计算时间的功能。,当定时器用作为外部事件计数时,是对引脚T0或T1上外部输入的负脉冲信号做加法计数。将外部输入信号接到T0(P3.4)或T1(P3.5)引脚,当检测到的电平由高跳变到低时,计数器就加1。因此,为了确保得到可靠的采样值,需要2个机器周期来识别一个从“1”到“0”的跳变,这就要求外部计数脉冲的高电平与低电平保持时间至少为一个完整的机器周期。所以最高计数频率为晶振频率的1/24。,6.1.1 定时器/计数器的结构,不管是定时还是计数,T0或
3、T1在对内部时钟或外部事件计数时都不占用CPU时间,只有定时器计数器产生溢出时,才会向CPU发出中断请求。CPU也可重新设置定时器计数器的工作方式和计数初值,以改变定时器的操作。设计数的最大值为M,所需的计数值为N,则初值X的计算方法如下:计数状态:X=MN 定时状态:X=M定时时间/T 其中,T=12晶振频率,6.1.1 定时器/计数器的结构,6.1.2 工作方式和控制寄存器,1.工作方式寄存器TMOD寄存器TMOD是可编程的特殊功能寄存器,字节地址为89H,不可位寻址。其中低4位控制T0,高4位控制T1。GATE:控制方式选择位,用来控制定时器启动操作方式。当GATE=0时,只能由软件控制
4、TR0或TR1位来控制定时器的启停。TRi(i=0,1)位为1,定时器启动;TRi(i=0,1)为0时,定时器停止工作;当GATE=1时,定时器的启动要由外部中断引脚和TRi(i=0,1)位共同控制。只有当外部中断引脚为高时,TRi(i=0,1)置1才能启动定时器工作。,6.1.2 工作方式和控制寄存器,C/T:计数/定时方式选择位,当C/T=0时设置为定时器工作方式;当C/T=1时设置为计数器工作方式。M1、M0:工作方式控制位,对应于4种工作方式。例 要设定T1为定时器,方式2,T0为计数器,方式1,并由内部TRi控制启停。则TMOD=25H,可用下面指令赋值:MOV TMOD,#25H,
5、6.1.2 工作方式和控制寄存器,2.控制寄存器TCONTCON字节地址为88H,位地址为88H8FH。TF1和TF0:定时器T1和定时器T0的溢出标志位。TR1和TR0:定时器T1和定时器T0的启动控制位。IE1和IE0:外部中断INT1和外部中断INT0的中断请求标志位。IT1和IT0:外部中断INT1和外部中断INT0的触发方式选择位。TCON中低4位是与外部中断有关的位,高4位为定时器控制位。对T0的启、停控制可以通过以下位操作指令完成:SETB TR0;启动T0计数 CLR TR0;停止T0计数,6.1.3 定时器/计数器的工作方式,1.工作方式0TMOD中M1M000时,定时/计数
6、器被选为工作方式0,计数器长度为13位。由TLi(i=0,1)的低5位(TL的高3位未用)和THi(i=0,1)的8位构成13位计数器(对T0、T1都适用)。,当C/T=0为定时方式时,T0对机器周期进行计数。设定时时间为t,则计数初值 例6-1设T0工作方式0,定时时间t=1ms,fosc=12MHz,计算T0的计数初值。7192=11100000 11000B=E0H 18H 高8位 低5位 TH0计数初值为E0H,TL0计数初值为18H。,6.1.3 定时器/计数器的工作方式,6.1.3 定时器/计数器的工作方式,当C/T=1为计数方式时,外部计数脉冲由T0引脚输入。当外部信号电平发生由
7、1至0的跳变时,计数器加1。,6.1.3 定时器/计数器的工作方式,2.工作方式1TMOD中M1M001时,定时计数器设定为工作方式1,工作方式1是16位定时计数器,其结构和工作过程几乎与方式0完全相同,唯一的区别是计数器的长度为16位。设定时时间为t,则计数初值X为:,6.1.3 定时器/计数器的工作方式,3.工作方式2方式2为能自动重装初值的8位计数器。,6.1.3 定时器/计数器的工作方式,3.工作方式2方式2优点:省去了由软件重新赋初值的麻烦,所以它常用于定时控制或串行口的波特率发生器。方式2缺点:定时/计数长度短。设定时时间为t,则计数初值X为:,6.1.3 定时器/计数器的工作方式
8、,工作方式3只适用定时器T0,而T1无此工作方式,若将T1设置为方式3,相当于TR1=0,T1停止工作。此时,T0被拆成两个独立的8位计数器TH0和TL0。,6.1.3 定时器/计数器的工作方式,其中TL0使用原来T0的一些控制位和引脚,他们是C/T、GATE、TR0、TF0和T0(P3.4)引脚及(P3.2)引脚。此方式下的TL0作为8位计数器,其功能和方式0、方式1一样,可以实现定时和计数两种功能,只不过是一个8位的计数器;而TH0只能完成定时功能,对机器周期进行计数。它借用原定时器T1的控制位TR1和溢出标志位TF1,同时占用了T1的中断请求信号。工作方式3为定时器T0增加了一个8位的定
9、时器,此时的T1仍可以设置为工作方式0、1、2,用在任何不需要中断的场合。T0工作于模式3 时,T1一般用作串行口波特率发生器。,6.2 定时器/计数器的应用,1.工作方式0的应用例6-2设单片机晶振频率fosc=6MHz,使用定时器T1以方式0产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。(1)计数初值。欲产生周期为600s的等宽方波脉冲,只需在P1.7端交替输出300s的高低电平即可,应此定时时间为300s。设待求计数初值为N,则将低5位0AH写入TL1,将高8位FBH写入TH1中。,6.2 定时器/计数器的应用,(2)工作方式寄存器TMOD初始化因定时计数器1为工作
10、方式0,所以应使M1M0=00。为实现定时功能应使当C/T=0,为实现定时器的软件控制启动应使GATE=0,因此控制寄存器TMOD=00H。(3)TR1=1为启动,TR1=0为停止。程序如下:,ORG 0000H LJMP START ORG 0030HSTART:MOV TCON,#00H;清TCON MOV TMOD,#00H;工作方式设定 MOV TH1,#0FBH;计数初值设定 MOV TL1,#0AH MOV IE,#00H;关中断 SETB TR1;启动定时器LOOP0:JBC TF1,LOOP1;查询是否溢出 SJMP LOOP0 LOOP1:MOV TH1,#0FBH;重新设值
11、 MOV TL1,#0AH CPL P1.7;输出取反 SJMP LOOP0 END,法2:采用中断方式 ORG 0000H LJMP START ORG 001BH LJMP T1INT ORG 0100HSTART:MOV SP,#30H MOV TCON,#00H MOV TMOD,#00H MOV TH1,#0FBH MOV TL1,#0AH,SETB TR1 SETB ET1 SETB EA MAIN:AJMP MAIN T1INT:MOV TH1,#0FBH MOV TL1,#0AH CPL P1.7 RETI,6.2 定时器/计数器的应用,2.工作方式1的应用例6-3设单片机晶振
12、频率fosc=12MHz,使用定时器T0以方式1产生周期为3ms、占空比为1:2的脉冲波,并由P1.7输出,以查询方式完成。(1)计数初值。欲产生周期为3ms、占空比为2:3的脉冲波,可设定定时时间为1ms,在程序中加入P1.7口的状态判断,当P1.7为高电平时,需溢出两次才对端口取反。设待求计数初值为N,则 将低8位18H写入TL0,将高8位FCH写入TH0中。,6.2 定时器/计数器的应用,(2)TMOD初始化因定时计数器T0为方式1,所以M1M0=01。为实现定时功能应使当C/T=0,为实现定时器的软件控制启动应使GATE=0,因此设定工作方式控制寄存器TMOD=01H。(3)由TR0启
13、动和停止定时器。TR0=1为启动,TR0=0为停止。程序如下:ORG 0000H LJMP MAIN ORG 0030HMAIN:MOV TMOD,#01H;T0为16位定时模式 MOV TL0,#18H;定时器赋初值 MOV TH0,#0FCH;定时器赋初值,6.2 定时器/计数器的应用,MOV R2,#02H;R2赋初值 SETB TR0;开启定时器 LOOP:JBC TF0,CPLP;定时时间到,转CPLP并将TF0清零 AJMP LOOP;TF0为0则转LOOP循环等待CPLP:MOV TL0,#18H;定时器重装初值 MOV TH0,#0FCH;定时器重装初值 JB P1.7,CPL
14、P1;P1.7为1则转CPLP1 CPL P1.7;P1.7为0则取反 MOV R2,#02H;R2重新赋值 AJMP LOOP;转LOOP等待定时时间到CPLP1:DJNZ R2,LOOP;2ms未到转LOOP CPL P1.7;2ms到对P1.7口取反 AJMP LOOP;转LOOP等待定时时间到 END;程序结束,【练习1】已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。假定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时器/计数器T1的方式1完成该项产品的计数任务。,(1)初始化:TMOD=11010000
15、B=0D0H(GATE=1,C/T=1,M0M1=01)TCON=00H(2)T1在方式1时,溢出产生中断,且计数器回零,故在中断服务程序中,需用R0计数中断次数,以保护累积计数结果。,(3)启动T1计数,开T1中断。程序清单如下:,ORG 0000H AJMP START;复位入口 ORG 001BH AJMP T1INT;T1中断入口 ORG 0100H START:MOV SP,60H;初始化程序 MOV TCON,00H MOV TMOD,0D0H MOV TH1,00H,MOV TL1,00H MOV R0,00H;清中断次数计数单元 MOV P3,28H;设置P3.3,P3.5第二
16、功能 SETB TR1;启动T1 SETB ET1;开T1中断 SETB EA;开总中断 MAIN:ACALL DISP;主程序,调显示子程序 ORG 0A00H T1INT:INC R0;中断服务子程序 RETI DISP:;显示子程序 RET,6.2 定时器/计数器的应用,3.方式2的应用例6-4使用定时器T0以方式2产生200s定时,在P1.0口输出周期为400s的连续方波。已知晶振频率fosc=6MHz。(1)计数初值(2)TMOD初始化工作方式2时,M1M0=10,实现定时功能C/T=0,GATE=0。定时器T1不用,无关位设置为0,可得TMOD=02H。,ORG 0000H LJM
17、P START ORG 000BH LJMP LOOP0 ORG 0030HSTART:MOV TCON,#00H MOV TMOD,#02H;定时器方式2 MOV TH0,#9CH;设置计数初值 MOV TL0,#9CH;设置计数初值 SETB EA;允许总中断 SETB ET0;T0中断允许 SETB TR0;启动T0HERE:SJMP HERE;等待中断 ORG 0500H;中断服务子程序LOOP0:CPL P1.0;P1.0取反 RETI END,【练习2】某MCS-51应用系统对单相电度表进行用电检测和管理,电度表每运转一圈产生一个脉冲,假设电度表每转200圈为1度电,试利用T1模式
18、2对脉冲进行计数,每计200个脉冲对用电量加1,假设用电量存放在片内RAM的50H单元。计数初值:X=M-计数值=28-200=56D=38H采用查询方式,编程如下:,MOV TMOD,60H;设置T1模式2计数功能 MOV TH1,38H;保存计数初值 MOV TL1,38H;设置计数初值 SETB TR1;启动计数 LP:JBC TF1,LOOP;查询是否计数溢出 AJMP LPLOOP:INC 50H AJMP LP,6.2 定时器/计数器的应用,4.方式3的应用例6-5 设某用户系统,已使用了两个外部中断源,并置定时器T1于方式2,作串口波特率发生器用,现要求再增加一个外部中断源,并由
19、P1.0口输出一个5KHz的方波,fosc=12MHz。,分析:可把定时器/计数器T0置于工作方式3,利用外部引脚T0作附加的外部中断输入端,把TL0预置为0FFH,这样做当T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出5KHz方波。TL0的计数初值为0FFH,TH0的计数初值计算如下:因为P1.0输出5KHz方波,即每隔100s电平变化一次。则TH0中的初值:X=256-10012/12=156,6.2 定时器/计数器的应用,程序如下:ORG 0000H LJMP START ORG 000B
20、H LJMP TL0INT ORG 001BH LJMP TH0INT ORG 0100HSTART:MOV TL0,#0FFH;置TL0计数初值 MOV TH0,#156;置TH0计数初值 MOV TL1,#data;data是根据波特率要求设置 的常数,MOV TH1,#data MOV TMOD,#27H;T0方式3,TL0计数器方式 MOV TCON,#55H;启动T0、T1,置边沿触发 MOV IE,#9FH;开放全部中断 SJMP$ORG 0200H;TL0溢出中断服务程序TL0INT:MOV TL0,#0FFH;外部引脚T0引起中断处理程序 RETI ORG 0300H;TH0溢
21、出中断服务程序 TH0INT:MOV TH0,#156 CPL P1.0 RETI END,6.2 定时器/计数器的应用,5.外部脉冲频率的测量例6-6通过定时器/计数器测量外部引脚T1上的脉冲信号频率Fx,设晶振频率fosc=6MHz。,(1)设计思路采用定时闸门计数方法测量脉冲频率,设定时器/计数器0为定时方式,提供100ms的基准闸门时间T,在10T期间,定时器/计数器T1对外部脉冲进行计数,所获得的计数值m即为被测脉号频率。(2)定时器/计时器参数设定 设定时器/计数器0用来提供100ms的闸门时间,单片机时钟振荡频率fosc=6MHz,定时器/计数器1用来对外部脉冲计数。设定时器/计
22、数器0采用方式1,定时器状态,由内部TR0控制启动、停;设定时器/计数器1采用方式1、计数器状态,由TR1控制启、停。因此,6.2 定时器/计数器的应用,TMOD=01010001B=51H T0的计数初值:频率测量子程序如下:MSFC:MOV TMOD,#51H;设T0、T1控制字 MOV R0,#0AH;100ms定时的10倍扩展 MOV TL1,#00H;T1计数器清零 MOV TH1,#00H MOV TL0,#0B0H;T0计数器装入计数初值 MOV TH0,#3CH;T0计数器装入计数初值 SETB P3.5;置T1引脚为输入方式,JB P3.5,$;等待FX低电平 SETB TR
23、0;启动T0计数 SETB TR1;启动T1计数 WAIT:JBC TF0,SECC;查询100ms定时,定时到转SECC SJMP WAIT;100ms定时时间未到,等待 SECC:MOV TL0,#0B0H;重装计数初值 MOV TH0,#3CH DJNZ R0,WAIT;查询1s定时时间,未到转WAIT CLR TR1;1s定时到,停止T1计数 CLR TR0;停止T0计数 MOV 31H,TH1;将T1计数值送入31H,30H MOV 30H,TL1 RET,【练习3】照相机快门打开信号接在INT0(P3.2)引脚,使用T0并利用门控位GATE测照相机快门打开的时间。结果存放在30H和
24、31H单元。实质:检测外部输入正脉冲的宽度。,解:外部脉冲由INT0(P3.2)输入,其宽度为TP,如图所示。T0工作于定时方式,模式1(16位计数器)。测试时,在INT0=0时,设置TR0=1;当INT0=1时,启动计数;当INT0=0时,停止计数。使TR0=0,读出TH0、TL0的计数值,用计数值乘以定时脉冲周期即得被检测正脉冲的宽度TP。,MOV TMOD,09H;设T0为模式1,定时,GATE=1 MOV TL0,00H;设置计数初值为0 MOV TH0,00H MOV R0,30H;地址指针送R0 JB INT0,;等待INT0变低 SETB TR0;准备启动定时器0 JNB INT
25、0,;等待INT0变高 JB INT0,;变高,启动计数,等待INT0再次变低 CLR TR0;停止计数 MOV R0,TL0;读取计数值 INC R0 MOV R0,TH0,6.实时时钟例6-7设计实时时钟程序。(1)实现时钟计时的基本方法本例涉及到了定时器与中断的联合应用。时钟计时的最小单位是秒,但使用单片机定时器/计数器进行定时,即使按方式1工作,其最大定时时间也达不到1秒。鉴于此,可把定时器的定时时间定为100ms,这样,计数溢出10次即得到时钟计时的最小单位秒;而10次计数可用软件方法实现。,假定使用定时器T1,以工作方式1进行100ms的定时。如单片机晶振频率为6MHz,为得到10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 定时器 计数器 串行 通信
链接地址:https://www.31ppt.com/p-5960808.html