第6章MCS-51单片机内部定时器/计数器及串行接口第6章MCS-51单片机内部定时器/计数器及串行接口6.1定时器/计数器的结构及工作原理6.2方式和控制寄存器6.3工作方式6.4定时器/计数器应用举例6.5MCS-51单片机的串行接口6.6串行口的应用第6章MCS-51单片机内部定时器/计数器及串行接口6.1定时器/计数器的结构及工作原理图6.1定时器/计数器结构框图第6章MCS-51单片机内部定时器/计数器及串行接口加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值,设最大值为M,计数值为N,初值为X,则X的计算方法如下:计数状态:X=M-N定时状态:X=M-定时时间/T而T=12÷第6章MCS-51单片机内部定时器/计数器及串行接口6.2方式和控制寄存器一、定时器/计数器的方式寄存器TMOD图6.2TMOD各位定义第6章MCS-51单片机内部定时器/计数器及串行接口1.M1M0工作方式控制位表6.1工作方式选择表M1M0方式说明00013位定时器(TH的8位和TL的低5位)01116位定时器/计数器102自动重装入初值的8位计数器113T0分成两个独立的8位计数器,T1在方式3时停止工作第6章MCS-51单片机内部定时器/计数器及串行接口2.C/T若C/T=1时,为计数器方式;C/T=0时,为定时器方式。3.GATE定时器/当GATE=1时,只有INT0(或INT1)引脚为高电平且TR0(或TR1)置1时,相应的定时器/计数器才被选通工作,这时可用于测量在INTx端出现的正脉冲的宽度。若GATE=0,则只要TR0(或TR1)置1,定时器/计数器就被选通,而不管INT0(或INT1)的电平是高还是低。第6章MCS-51单片机内部定时器/计数器及串行接口二、定时器/计数器控制寄存器TCONTF0、TF1分别是定时器/计数器T0、T1的溢出标志位,加法计数器计满溢出时置1,申请中断,在中断响应后自动复0。TF产生的中断申请是否被接受,还需要由中断是否开放来决定。TR1、TR0分别是定时器/计数器T1、T0的运行控制位,通过软件置1后,定时器/计数器才开始工作,在系统复位时被清0。第6章MCS-51单片机内部定时器/计数器及串行接口6.3工作方式一、方式0图6.3方式0(13位计数器)第6章MCS-51单片机内部定时器/计数器及串行接口二、方式1图6.4方式1(16位计数器)第6章MCS-51单片机内部定时器/计数器及串行接口三、方式2图6.5方式2(初始常数自动重装载)第6章MCS-51单片机内部定时器/计数器及串行接口四、方式3图6.6方式3(两个8位独立计数器)第6章MCS-51单片机内部定时器/计数器及串行接口6.4定时器/计数器应用举例一、方式0的应用例1利用定时器输出周期为2ms的方波,设单片机晶振频率为6MHz。选用定时器/计数器T0作定时器,输出为P1.0引脚,2ms的方波可由间隔1ms的高低电平相间而成,因而只要每隔1ms对P1.0取反一次即可得到这个方波。定时1ms的初值:因为机器周期=12÷6MHz=2μs所以1ms内T0需要计数N次:N=1ms÷2μs=500第6章MCS-51单片机内部定时器/计数器及串行接口由此可知:使用方式0的13位计数器即可,T0的初值X为X=M-N=8192-500=7692=1E0CH但是,因为13位计数器中,低8位TL0只使用了5位,其余码均计入高8位TH0的初值,则T0TH0=0F0H,TL0=0CHTMOD初始化:TMOD=00000000B=00H(GATE=0,C/T=0,M1=0,M0=0)TCON初始化:启动TR0=1IE初始化:开放中断EA=1,定时器T0中断允许ET0=1第6章MCS-51单片机内部定时器/计数器及串行接口程序清单如下:ORG0000HAJMPSTART;ORG000BHAJMPTOINT;T0ORG0030HSTART:MOVSP,#60H;MOVTH0,#0F0H;T0MOVTL0,#0CHMOVTMOD,#00HSETBTR0;启动T0第6章MCS-51单片机内部定时器/计数器及串行接口SETBET0;开T0SETBEA;MAIN:AJMPMAIN;TOINT:CPLP1.0MOVTL0,#0CHMOVTH0,#0F0HRET第6章MCS-51单片机内部定时器/计数器及串行接口二、方式1应用方式1与方式0基本相同,只是方式1改用了16位计数器。要求定时周期较长时,13位计数器不够用,可改用16位计数器。例2已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。假定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时器/计数器T1的方式1完成该项产品的计数任务。第6章MCS-51单片机内部定时器/计数器及串行接口图6.7硬件原理图第6章MCS-51单片机内部定时器/计数器及串行接口(1)初始化:TMOD=11010000B=0D0H(GATE=1,C/T=1,M0M1=01)TCON=00H(2)T1在方式1时,溢出产生中断,且计数器回零,故在中断服务程序中,需用R0计数中断次数,以保护累积计数结果。第6章MCS-51单片机内部定时器/计数器及串行接口(3)启动T1计数,开T1中断。程序清单如下:ORG0000HAJMPSTART;ORG001BHAJMPT1INT;T1ORG0100HSTART:MOVSP,#60H;MOVTCON,#00HMOVTMOD,#0D0HMOVTH1,#00H第6章MCS-51单片机内部定时器/计数器及串行接口MOVTL1,#00HMOVR0,#00H;MOVP3,#28H;设置P3.5SETBTR1;启动T1SETBET1;开T1SETBEA;MAIN:ACALLDISP;主程序,…ORG0A00HT1INT:INCR0;RETIDISP:…;RET第6章MCS-51单片机内部定时器/计数器及串行接口三、方式2方式2是定时器自动重装载的操作方式,在这种方式下,定时器0和1的工作是相同的,它的工作过程与方式0、方式1基本相同,只不过在溢出的同时,将8位二进制初值自动重装载,即在中断服务子程序中,不需要编程送初值,这里不再举例。定时器T1工作在方式2时,可直接用作串行口波特率发生器,第6章MCS-51单片机内部定时器/计数器及串行接口四、方式3定时器T0工作在方式3时是2个8位定时器/计数器。且TH0借用了定时器T1的溢出中断标志TF1和运行控制位TR1。例3假设有一个用户系统中已使用了两个外部中断源,并置定时器T1于方式2,作串行口波特率发生器用,现要求再增加一个外部中断源,并由P1.0口输出一个5Hz的方波(假设晶振频率为6MHz)。第6章MCS-51单片机内部定时器/计数器及串行接口在不增加其它硬件开销时,可把定时器/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0立即溢出,申请中断,相当于边沿激活的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。由P1.0输出5kHz的方波,即每隔100μs使P1.0的电平发生一次变化。则TH0中的初始值X=M-N=256-100/2=206。下面是有关的程序。第6章MCS-51单片机内部定时器/计数器及串行接口MOVTL0,#0FFHMOVTH0,#206MOVTL1,#BAUD;BAUDMOVTH1,#BAUDMOVTMOD,#27H;置T0工作方式3;TL0MOVTCON,#55H;启动定时器T0、T1,置外部中断0和1;MOVIE,#9FH;第6章MCS-51单片机内部定时器/计数器及串行接口TL0溢出中断服务程序(由000BH单元转来):TL0INT:MOVTL0,#0FFH…;外部引脚T0引起中断处理程序RETITH0溢出中断服务程序(由001BH转来):TH0INT:MOVTH0,#206CPLP1.0RETI此处串行口中断服务程序、外中断0和外中断1的中断服务程序没有列出。第6章MCS-51单片机内部定时器/计数器及串行接口6.5MCS-51单片机的串行接口6.5.1串行通信的基本概念(1)同步方式是将一大批数据分成几个数据块,数据块之间用同步字符予以隔开,而传输的各位二进制码之间都没有间隔。其基本特征是发送与接收时钟始终保持严格同步。(2)异步通信是按帧传送数据,它利用每一帧的起、止信号来建立发送与接收之间的同步,每帧内部各位均采用固定的时间间隔,但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收的。第6章MCS-51单片机内部定时器/计数器及串行接口6.5.2与串行口有关的特殊功能寄存器1.数据缓冲器SBUF串行口缓冲器SBUF是可直接寻址的特殊功能寄存器,其内部RAM字节地址是99H。在物理上,它对应着两个独立的寄存器,一个发送寄存器,一个接收寄存器。发送时,就是CPU写入SBUF的时候,51系列单片机没有专门的启动发送状态的指令;接收时,就是读取SBUF的过程,接收寄存器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时响应接收器的中断,没有把上一帧数据读走,而产生两帧数据重叠的问题。第6章MCS-51单片机内部定时器/计数器及串行接口2.串行口控制寄存器SCONSCON用于控制和监视串行口的工作状态,其各位定义如图5.3所示。相应的各位功能介绍如下:SM0、SM1:用于定义串行口的操作模式,两个选择位对应4种模式,见表6.2。其中fOSC是振荡器频率,UART为通用异步接收和发送器的英文缩写。SM2:多机通信时的接收允许标志位。在模式2和3中,若SM2=1,且接收到的第9位数据(RB8)是0,则接收中断标志(RI)不会被激活。在模式1中,若SM2=1且没有接收到有效的停止位,则RI不会被激活。在模式0中,SM2必须是0。第6章MCS-51单片机内部定时器/计数器及串行接口表6.2串行口操作模式选择SM0SM1模式功能波特率000110110101同步移位寄存器8位UART9位UART9位UARTfOSC/12可变(T1溢出率)fOSC/64或fOSC/32可变(T1溢出率)第6章MCS-51单片机内部定时器/计数器及串行接口3.电源控制寄存器PCON特殊功能寄存器PCON中,只有一位(最高位)SMOD与串行口的工作有关,该位是串行口波特率系数的控制位:SMOD=1时,波特率加倍,否则不加倍。PCON的地址为87H,不可位寻址,因此初始化时需要字节传送。第6章MCS-51单片机内部定时器/计数器及串行接口6.5.3串行口的4种工作模式1.模式0(1)模式0输出状态。图6.8外接移位寄存器输出第6章MCS-51单片机内部定时器/计数器及串行接口(2)模式0输入状态。图6.9外接移位寄存器输入第6章MCS-51单片机内部定时器/计数器及串行接口2.模式1串行口工作于模式1时,为波特率可变的8位异步通信接口。数据位由P3.0(RXD)端接收,由P3.1(TXD)端发送。传送一帧信息为10位:一位起始位(0),8位数据位(低位在前)和一位停止位(1)。波特率是可变的,它取决于定时器T1的溢出速率及SMOD的状态。(1)模式1发送过程。用软件清除TI后,CPU执行任何一条以SBUF为目标寄存器的指令,就启动发送过程。数据由TXD引脚输出,此时的发送移位脉冲是由定时器/计数器T1送来的溢出信号经过16或32分频而取得的。一帧信号发送完时,将置位发送中断标志TI=1,向CPU申请中断,完成一次发送过程。第6章MCS-51单片机内部定时器/计数器及串行接口(2)模式1接收过程。用软件清除RI后,当允许接收位REN被置位1时,接收器以选定波特率的16倍的速率采样RXD引脚上的电平,