定时器与波特率

上传人:ji****72 文档编号:37688207 上传时间:2018-04-20 格式:DOCX 页数:16 大小:103.19KB
返回 下载 相关 举报
定时器与波特率_第1页
第1页 / 共16页
定时器与波特率_第2页
第2页 / 共16页
定时器与波特率_第3页
第3页 / 共16页
定时器与波特率_第4页
第4页 / 共16页
定时器与波特率_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《定时器与波特率》由会员分享,可在线阅读,更多相关《定时器与波特率(16页珍藏版)》请在金锄头文库上搜索。

1、在串行通信中,收发双方对发送或接收的数据速率要有一定的约定,我们通过软件对MCS51 串行口编程可约定四种工作方式。其中,方式 0 和方式 2 的波特率是固定的,而方式 1 和方式 3 的波特率是可变的,由定时器 T1 的溢出率决定。串行口的四种工作方式对应着三种波特率。由于输人的移位时钟的来源不同,所以,各种方式的波特率计算公式也不同。 一、方式 0 的波特率方式 0 时,移位时钟脉冲由 S6(即第 6 个状态周期,第 12 个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。所以,波特率为振荡频率的十二分之一,并不受 PCON 寄存器中 SMOD 的影响,即:方式 0 的波特

2、率fosc12三、方式 l 和方式 3 的波特率 方式 1 和方式 3 的移位时钟脉冲由定时器 T1 的溢出率决定,故波特宰由定时器 T1 的溢出率与 SMOD 值同时决定,即:方式 1 和方式 3 的波特率2SMOD/32T1 溢出率其中,溢出率取决于计数速率和定时器的预置值。计数速率与 TMOD 寄存器中 CT 的状态有关。当 CT0 时,计数速率fosc2;当 CT1 时,计数速率取决于外部输入时钟频率。当定时器 Tl 作波特率发生器使用时,通常选用可自动装入初值模式(工作方式 2),在工作方式 2 中,TLl 作为计数用,而自动装入的初值放在 THl 中,设计数初值为 x,则每过“25

3、6 一 x”个机器周期,定时器 T1 就会产生一次溢出。为了避免因溢出而引起中断,此时应禁止 T1 中断。这时,溢出周期为:系统晶振频率选为 110592MHZ 就是为了使初值为整数,从而产生精确的波特率。如果串行通信选用很低的波特率,可将定时器 Tl 置于工作方式 0 或工作方式 1,但在这种情况下,T1 溢出时,需用中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。表 62 列出了各种常用的波特率及其初值。51 单片机串口通信及波特率设置 2010-05-21 14:131653 人阅读评论(0)收藏举报MCS-51 单片机具有一个全双工

4、的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。1. 数据缓冲寄存器 SBUFSBUF 是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU 写 SBUF 就是修改发送寄存器;读 SBUF 就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU 未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时 CPU是主动的,不会产生重叠问题。2. 状态控制寄存器 SCONSCON 是一个逐位

5、定义的 8 位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON 即可以字节寻址也可以位寻址,字节地址 98H,地址位为 98H9FH。它的各个位定义如下:MSB LSB SM0SM1SM2RENTB8RB8TIRISM0 和 SM1 是串口的工作方式选择位,2 个选择位对应 4 种工作方式,如下表,其中 Fosc 是振荡器的频率。SM0 SM1工作方式功能波特率 0 008 位同步移位寄存器Fosc/12 0 1110 位 UART可变 1 0211 位 UARTFosc/64 或 Fosc/32 1 1311 位 UART可变SM2 在工作方式 2 和 3 中是多机通

6、信的使能位。在工作方式 0 中,SM2 必须为 0。在工作方式1 中,若 SM2=1 且没有接收到有效的停止位,则接收中断标志位 RI 不会被激活。在工作方式 2 和 3中若 SM2=1 且接收到的第 9 位数据(RB8)为 0,则接收中断标志 RB8 不会被激活,若接收到的第9 位数据(RB8)为 1,则 RI 置位。此功能可用于多处理机通信。REN 为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。TB8 是工作方式 2 和 3 要发送的第 9 位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。RB

7、8 是工作方式 2 和 3 中接收到的第 9 位数据(例如是奇偶位或者地址/数据标识位),在工作方式 1 中若 SM2=0,则 RB8 是已接收的停止位。在工作方式 0 中 RB8 不使用。TI 为发送中断标志位,由硬件置位,软件清除。工作方式 0 中在发送第 8 位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1 时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除 TI。RI 为接收中断标志位,由硬件置位,软件清除。工作方式 0 中在接收第 8 位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1 时,申请中断,要

8、求 CPU 取走数据。但在工作方式 1 中,SM2=1 且未接收到有效的停止位时,不会对 RI 置位。在任何工作方式中都必须由软件清除 RI。系统复位时,SCON 的所有位都被清除。控制寄存器 PCON 也是一个逐位定义的 8 位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB SMOD GF1 GF0 PD IDL 仅最高位 SMOD 与串口的控制有关,其他位与掉电方式有关。PCON 的地址为 87H 只能按字节寻址,SMOD 是串行通信波特率系数控制位,当串口工作在工作方式 1、2 时,若使用 T1 作为波特率发生器其 SMOD=1 则波特率加倍(见下面详述)。GF1 和 GF0 用

9、于一般的用途,对于 AT89 系列为通用的标志位,PD 为电源下降位,对于 AT89系列,PD 为 1 进入掉电状态,IDL 为 IDLE 模式位,对于 AT89 系列,IDL 为 1 进入空闲工作方式,在 PD 和 IDL 同时为 1 时,PD 优先。(1) 工作方式 0SM0=0 且 SM1=0 时,串口选择工作方式 0,实质这是一种同步移位寄存器模式。其数据传输的波特率固定为 Fosc/12,数据由 RXD 引脚输入或输出,同步时钟由 TXD 引脚输出。接收/发送的是 8 位数据,传输是低位在前,帧格式如下: .D0D1D2D3D4D5D6D7 .(2)工作方式 1当 SM0=0 且 S

10、M1=1 时,串口选择工作方式 1,其数据传输的波特率由定时/计数器 T1、T2 的溢出速率决定,可通过程序设定。当 T2CON 寄存器中的 RCLK 和 TCLK 置位时,用 T2 作为发送和接收波特率发生器,而 RCLK=TCLK=0 时,用 T1 作为波特率发生器,两者还可以交叉使用,即发送和接收采用不同的波特率。数据由 TXD 引脚发送,由 RXD 引脚接收。发送或接收一帧的数据为 10 位,即 1 位起始位(0)、8 位数据位(低位在先)和 1 位停止位(1)。真格式如下:起始位 0D 0D 1D 2D 3D 4D 5D 6D 7停止位 1类似于工作方式 0,当执行任一条 SBUF

11、指令时,就启动串行数据的发送。在执行写入 SBUF 的指令时,也将“1”写入发送移位寄存器的第 9 位,并通知发送控制器有发送请求。实际上,发送过程始于内部的 16 分频计数器下次满度翻转(全“1”变全“0”)后的那几个机器周期的开始。所以,每位的发送过程与 16 分频计数器同步,而不是与“写 SBUF”同步。此方式的工作过程包括发送和接收两部分。当执行任一条写 SBUF 指令时,就启动串行数据的发送。在执行写入 SBUF 的指令时,也将“1”写入发送移位寄存器的第 9 位,并使发送控制器开始发送。在这期间,内部的定时保证写入 SBUF 与激活发送之间有一个完整的机器周期。当发送脉冲有效后,移

12、位寄存器的内容由 RXD 引脚串行移位输出,移位脉冲由 TXD 引脚输出。在发送有效的每个机器周期,发送移位寄存器右移一位,就在其左边补“0 ”。当数据的最高位移到移位寄存器的输出时,原写入第 9 位的“1”正好移到最高位的左边一位,由此向左的所有位都为“0”,这标志着发送控制器要进行最后依次移位,并撤消发送有效,同时使发送中断标志 TI 置位。当 REN=1 且接收中断标志 RI 位清除时,即启动一个接收过程。在下一个机器周期,接收控制器将“11111110”写入接收移位寄存器,并在下一周期内激发接收有效,同时由 TXD 引脚输出移位脉冲。在移位脉冲的控制下,接收移位寄存器的内容每一个机器周

13、期左移一位,同时由 RXD 引脚接收一位输入信号。每当接收移位寄存器左移一位,原写入的“11111110”也左移一位。当最右边的“0”移到最左边时,标志着接收控制器要进行最后一次移位。在最后移位即将结束时,接收移位寄存器的内容送入到接收数据缓冲寄存器 SBUF,然后在启动接收的第 10 个机器周期时,清除接收信号,将 RI 置位。如果在第一个时钟周期中接收到的不是起始位(“0”),就复位接收电路,继续检测 RXD 引脚上1 到 0 的跳变。如果接收到的是起始位,就将其移入接收移位寄存器,然后接收该帧的其他位。接收到的位从右边移入,原来写入的 1 从左边移出,当起始位移到最左边时,接收控制器将控

14、制进行最后一次移位,把接收到的第 9 为数据送到接收数据缓冲器 SBUF 和 RB8,同时置位 RI。在进行最后一次移位时,能将数据送入到接收数据缓冲器 SBUF 和 RB8 而且置位 RI 的条件如下: RI=0,即上一真数据接收完成时,发出的中断请求已经被响应,SBUF 中的上一帧数据已经被取走。 SM2=0 或接收到的停止位为 1。这两个条件有一个不满足接收到的数据就有可能丢失,并且无法修复;如两者都满足则数据装入SBUF,停止位装入 RB8 且置位 RI。开始发送后的一个位周期,发送信号有效,开始将起始位送 TXD 引脚。一位时间后,数据信号有效。发送移位寄存器将数据由低位到高位顺序输

15、出至 TXD 引脚。一位时间后第一个移位脉冲出现,将最低数据位从右边移出,同时从左边补上“0”。当数据的最高位移到移位寄存器的输出端时,先前写入第 9 位的“1”正好移到最高位的左边一位,而它的左区全部为“0”。在第 10 个位周期(16 分频计数器回 0 时),发送控制器要进行最后一次清除发送信号,同时使发送中断标志 TI 置位。当 REN=1 且接收中断标志 RI 位清除后,若在 RXD 引脚上检测到一个由“1”到“0”的跳变,立即启动一次接收的过程。同时复位 16 分频计数器,使输入位的边沿与时钟对齐,并将 1FFH(9 个“1”)写入接收移位寄存器。接收控制器继续以波特率的 16 倍的

16、速率继续对 RXD 引脚进行检测,对每一位时间的第 7、8、9 个计数状态的采样值用多数表决法,当 2 次或 2 次以上的采样值相同时,采样值被接受。(1) 工作方式 2 和 3当 SM0=1 且 SM1=0 时,串口选择工作方式 2,当 SM0=1 且 SM1=1 时,串口选择工作方式3。数据由 TXD 引脚发送由 RXD 引脚接收。发送和接收的一帧信息为 11 位,即 1 位起始位(0),9 位数位(低位在前,第 9 位数据位是可编程位)1 位停止位(1)。发送时,可编程位(TB8)可赋 0 或 1,接收时可编程位进入 SCON 中的RB8。帧的格式如下: 起始位 0D 0D 1D 2D 3D 4D 5D 6D 7可编程位 D8停止位 18051 单片机波特率计算公式(配套 C 语言例程) 8051 单片机使用定时器定时器 1 工作在方式方式 2 的情况下作为串口波特率发生器串口波特率发生器,其波特率波特率=(2smod /32)(定时器 T1 溢出率),其中 smod 是 PCON,表示是否波特率加倍,Fsoc 是系统

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号