彻底理解串口通信

上传人:灯火****19 文档编号:126189763 上传时间:2020-03-23 格式:PDF 页数:11 大小:285.60KB
返回 下载 相关 举报
彻底理解串口通信_第1页
第1页 / 共11页
彻底理解串口通信_第2页
第2页 / 共11页
彻底理解串口通信_第3页
第3页 / 共11页
彻底理解串口通信_第4页
第4页 / 共11页
彻底理解串口通信_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《彻底理解串口通信》由会员分享,可在线阅读,更多相关《彻底理解串口通信(11页珍藏版)》请在金锄头文库上搜索。

1、串口通讯概念和基本实验串口通讯概念和基本实验 1 1 1 1 串行接口的一般概念 串行接口的一般概念 单片机与外界进行信息交换称之为通讯 89c51 单片机的通讯方式有两种 A 并行通讯 数据的各位同时发送或接收 本文档不涉及并行通讯 只将串行通 讯 B 串行通讯 数据一位一位顺序发送或接收 串行通讯的方式 异步通讯 它用一个起始位表示字符的开始 用停止位表示字符的结束 其每帧 的格式如下 在一帧格式中 先是一个起始位 0 然后是 8 个数据位 规定低位在前 高 位在后 接下来是奇偶校验位 可以省略 最后是停止位 1 用这种格式表示 字符 则字符可以一个接一个地传送 在异步通讯中 CPU 与外

2、设之间必须有两项规定 即字符格式和波特率 字符格式的规定是双方能够在对同一种 0 和 1 的串理解成同一种意义 原则上字 符格式可以由通讯的双方自由制定 但从通用 方便的角度出发 一般还是使用 一些标准为好 如采用 ASCII 标准 波特率即数据传送的速率 其定义是每秒钟传送的二进制数的位数 例如 数据传送的速率是 120 字符 s 而每个字符如上述规定包含 10 数位 则传送波 特率为 1200 波特 同步通讯 在同步通讯中 每个字符要用起始位和停止位作为字符开始和结束的 标志 占用了时间 所以在数据块传递时 为了提高速度 常去掉这些标志 采 用同步传送 由于数据块传递开始要用同步字符来指示

3、 同时要求由时钟来实现 发送端与接收端之间的同步 故硬件较复杂 本文档不讨论同步通讯 2 2 2 2 89c5189c5189c5189c51 单片机的串行接口结构单片机的串行接口结构 89c51 单片机通过引脚 RXD P3 0 串行数据接收端 和引脚 TXD P3 1 串行数据发送端 与外界通讯 SBUF 是串行口缓冲寄存器 包括发送寄存器和 接收寄存器 它们有相同名字和地址空间 但不会出现冲突 因为它们两个一个 只能被 CPU 读出数据 一个只能被 CPU 写入数据 所以 语句 SBUF SBUF 是有意义的 它并不是将本身的值赋给了本身 而是将一个寄存器的值赋给了另 一个寄存器 并且单

4、片机不会搞错哪个是发送的 哪个是接受的 3 3 3 3 串行口的控制与状态寄存器 串行口的控制与状态寄存器 串行口控制寄存器 SCON 它用于定义串行口的工作方式及实施接收和发送控制 其各位定义如下表 串口控制寄存器 SCON 示意 表 各位的说明如下 SM0 SM1 工作方式控制位 其中 fosc 为晶振频率 SM0SM1SM2RENTB8RB8TIRI SM0SM1工作方式说明波特率 000同步移位寄存器Fosc 12 01110 位异歩收发由定时器控制 10211 位异步收发Fosc 32 或 Fosc 64 11311 位异步收发由定时器控制 注意 由于实验条件本文档只有方式 1 和方

5、式 3 的例程 SM2 多机通讯控制位 本文档不使用 编程时置 0 即可 REN 接收允许控制位 由软件置位以允许接收 又由软件清 0 来禁止接收 TB8 是要发送数据的第 9 位 在方式 2 或方式 3 中 要发送的第 9 位数据 根 据需要由软件置 1 或清 0 例如 可约定作为奇偶校验位 或在多机通讯中作为 区别地址帧或数据帧的标志位 RB8 接收到的数据的第 9 位 在方式 0 中不使用 RB8 在方式 1 中 若 SM2 0 RB8 为接收到的停止位 在方式 2 或方式 3 中 RB8 为接收到的第 9 位数 据 TI 发送中断标志 在方式 0 中 第 8 位发送结束时 由硬件置位

6、在其它方 式的发送停止位前 由硬件置位 TI 置位既表示一帧信息发送结束 同时也是 申请中断 可根据需要 用软件查询的方法获得数据已发送完毕的信息 或用中 断的方式来发送下一个数据 TI 必须用软件清 0 RI 接收中断标志位 在方式 0 当接收完第 8 位数据后 由硬件置位 在其 它方式中 在接收到停止位的中间时刻由硬件置位 例外情况见于 SM2 的说明 RI 置位表示一帧数据接收完毕 可用查询的方法获知或者用中断的方法获知 RI 也必须用软件清 0 电源控制寄存器 PCON SMO D 此寄存器只有第一位 SMOD 和本文档有关 SMOD 串行口波特率加倍位 1 方式 1 3 波特率 定时

7、器 1 溢出率 16 方式 2 波特率为 Fosc 32 0 方式 1 3 波特率 定时器 1 溢出率 32 方式 2 波特率为 Fosc 64 8051 单片机的全双工串行口可编程为 4 种工作方式 现分述如下 方式方式 0 0 0 0 为移位寄存器输入 输出方式 本文档不用 故不叙述 有兴趣的话可以 看教程 方式方式 1 1 1 1 为波特率可变的 10 位异步通讯接口方式 发送或接收一帧信息 包括 1 个起始位 0 8 个数据位和 1 个停止位 1 输出 当 CPU 执行一条指令将数据写入发送缓冲 SBUF 时 就启动发送 串行 数据从 TXD 引脚输出 发送完一帧数据后 就由硬件置位

8、TI 输入 在 REN 1 时 串行口采样 RXD 引脚 当采样到 1 至 0 的跳变时 确认是开始位 0 就开始接收一帧数据 只有当 RI 0 且停止位为 1 或者 SM2 0 时 停止位才进入 RB8 8 位数据才能进入接收寄存器 并由硬件置位中断 标志 RI 否则信息丢失 所以在方式 1 接收时 应先用软件清零 RI 和 SM2 标 志 方式方式 2 2 2 2 方式 2 为固定波特率的 11 位异步通讯接口方式 它比方式 1 增加了一位可程控 为 1 或 0 的第 9 位数据 输出 发送的串行数据由 TXD 端输出一帧信息为 11 位 附加的第 9 位来自 SCON 寄存器的 TB8

9、位 用软件置位或复位 它可作为多机 通讯中地址 数据信息的标志位 也可以作为数据的奇偶校验位 当 CPU 执行一 条数据写入 SUBF 的指令时 就启动发送器发送 发送一帧信息后 置位中断标 志 TI 输入 在 REN 1 时 串行口采样 RXD 引脚 当采样到 1 至 0 的跳变时 确 认是开始位 0 就开始接收一帧数据 在接收到附加的第 9 位数据后 当 RI 0 或者 SM2 0 时 第 9 位数据才进入 RB8 8 位数据才能进入接收寄存器 并由硬件置位中断标志 RI 否则信息丢失 且不置位 RI 再过一位时间后 不 管上述条件时否满足 接收电路即行复位 并重新检测 RXD 上从 1

10、到 0 的跳变 工作方式工作方式 3 3 3 3 方式 3 为波特率可变的 11 位异步通讯接口方式 除波特率外 其余与方式 2 相 同 4 4 4 4 波特率的选择 波特率的选择 如前所述 在串行通讯中 收发双方的数据传送率 波特率 要有一定的 约定 在 89C51 串行口的四种工作方式中 方式 0 和 2 的波特率是固定的 而 方式 1 和 3 的波特率是可变的 由定时器 T1 的溢出率控制 以下讨论中 FOSC 是晶振的频率 A 方式 0 方式 0 的波特率固定为晶振频率的 1 12 B 方式 2 方式 2 的波特率由 PCON 中的选择位 SMOD 来决定 可由下式表示 波特率 2 的

11、 SMOD 次方除以 64 再乘一个 fosc 也就是当 SMOD 1 时 波特率 为 1 32fosc 当 SMOD 0 时 波特率为 1 64fosc C 方式 1 和方式 3 定时器 T1 作为波特率发生器 其公式如下 波特率 定时器 T1 溢出率乘 2 的 SMOD 次方除以 32 波特率 2 SMOD 定时器 1 的溢出率 32 T1 溢出率 T1 计数率 产生溢出所需的周期数 式中 T1 计数率的含义是 一秒钟计数的次数 它取决于它工作在定时器状态 还是计数器状态 当工作于定时器状态时 T1 计数率为 fosc 12 即一个机器周 期 当工作于计数器状态时 T1 计数率为外部输入频

12、率 此频率应小于 fosc 24 产生溢出所需周期与定时器 T1 的工作方式 T1 的预置值有关 定时器 T1 工作于方式 0 溢出所需周期数 8192 x X 为预置数 定时器 T1 工作于方式 1 溢出所需周期数 65536 x 定时器 T1 工作于方式 2 溢出所需周期数 256 x 因为方式 2 为自动重装入初值的 8 位定时器 计数器模式 所以用它来做波 特率发生器最恰当 当时钟频率选用 11 0592MHZ 时 容易获得标准的波特率 所以很多单片机 系统选用这个频率的晶振 好了 先面我们给出串口初始化的过程 前面讲的几个寄存器会在下面用到 串口初始化的歩骤 a 确定定时器 1 的工

13、作方式 编程 TMOD 寄存器 b 计算定时器 1 的初值 装载 TH1 TL1 c 启动定时器 1 编程 TCON 中的 TR1 位 d 确定串行口的工作方式 编程 SCON e 串行口在中断方式工作时 须开 CPU 和源中断 编程 IE 寄存器 为了说明以上的基本过程 请看串口通讯的第一个实验 本实验的目的很简 单 就是从 pc 机向单片机发送数据 然后单片机紧接着把 pc 发送的数据送回 pc 在显示器上显示出来 我们目前所要做的工作只是给单片机编程 让单片机 能够接收到 pc 发送的数据 并且接收到 pc 发送的数据以后在送给 pc 至于 pc 怎样发送 接受 由串口调试助手来完成 串

14、口调试助手要陪伴我们整个实验过 程 让我们先认识一下吧 从上图我们可以看见 左上角第一个设置是串口的选择 计算机上有两个串口 我也分不清那个是 COM1 那个是 COM2 你可以试一下 波特率的设置必须和你 已经写到单片机里的程序设置的波特率一致 校验位也要和单片机程序一至 数 据位是八位 停止位是一位 一切设置好后 在助手的下面的文本区填入要发送 的数据 点击发送后如果上面的大文本框内能够正确的显示出来的话 实验就成 功了 以后我们描述调试助手的设置用下面的格式 波特率 校验位 数据位 停止位 比如上图的设置描述为 9600 n 8 1 其中 n 为无校验 下面请看程序 实验四实验四 inc

15、lude 头文件 voidmain void 主程序 判断单片机串口是否正常工作 unsignedchara TMOD 0 x20 采用定时器 1 的工作方式 2 TL1 0 xfd 计算定时器 1 的初值 装载 TL1 TH1 TH1 0Xfd 波特率 9600 2 SMOD 定时器 1 的溢出率 32 溢出速率 计数速率 256 TH1 计数速率与 TMOD 寄存器中 C T TMOD 6 的状态有关 当 C T 0 时 计数速率为 Fosc 12 当 C T 1 时计数速率取决与外部输入时钟频率 但此频率不能超过 Fosc 24 SCON 0X50 允许串口接受数据 工作方式为 1 无奇

16、偶校验位 PCON 0 x00 串口波特率不加倍 TR1 1 启动定时器 1 计数 TR1 是 TCON 6 while 1 while RI 0 判断串口缓冲区是否接受完数据 RI 1 表示接受完 接受完了跳出循环 没接收完等待接受 RI 0 硬件置位 软件清零 a SBUF 接受串口缓冲区数据 SBUF a 通过串口缓冲区向外发送数据 while TI 0 判断串口缓冲区是否发送完数据 TI 1 时表示发送完 发送完跳出循环 没发送完等待发送 TI 0 硬件置位 软件清零 调试助手设置 9600 n 8 1 把这个程序编译 烧进单片机 就可以通过调试助手向单片机发送数据了 上面的 助手有一个自动发送的选项 用这个选项可以方便调试过程 如果没有回显或显 是不正确 请检查 1 单片机是否插上了板子 并且给板子加上了电 2 串口调试助手的设置是否正确 波特率 停止位 校验位 以及串口是否打 开 3 程序是否烧写正确 上面的程序使用查询方式做得 所谓查询 就是单片机不停的查询 RI 是否 为 1 TI 是否为 1 这样单片机出了处理串口的数据别的什么都干不了了 所以我们下面有了另一中方式

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

当前位置:首页 > IT计算机/网络 > 其它相关文档

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