在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART 在开发嵌入式系统时,异步串行通信是一种常见的通信模式,特别是在使用单片机如PIC系列的情况下。大部分单片机,包括PIC家族的许多型号,仅配备了一个硬件UART(通用异步收发传输器)模块,这限制了同时进行多路串行通信的能力。PIC17和18系列的高端产品是例外,它们提供了两个UART模块。然而,对于那些只有一个UART或甚至没有硬件UART的低端单片机,设计者需要通过软件来实现额外的串行通信接口,以提高系统性价比。 异步串行通信的基本格式包括起始位、数据位、奇偶校验位(如果使用的话)和停止位。波特率定义了每秒传输的位数,常见的波特率范围从300到19200 b/s。例如,1200 b/s的波特率意味着每个位的时间宽度约为833微秒。起始位为低电平,数据位从低位开始发送,随后是奇偶校验位(如果有的话),最后是高电平的停止位。 软件实现UART的关键在于接收端,因为异步通信缺乏同步时钟,接收方必须随时准备接收可能随时到来的数据。相比之下,发送端相对较简单,只需要精确控制电平持续时间即可。 本文提到了两种在PIC单片机上实现软件UART的可靠方法。首先介绍的是三倍速采样法。这种方法通过以波特率的三倍频率采样接收引脚,确保能检测到起始位,并在每个数据位的中间1/3位置进行采样,从而减少误码,提高接收的准确性。具体来说,每个信息位分为三等份,采样点设在码元中间,这样可以确保即使在波特率有轻微变化的情况下也能正确接收。 在实施过程中,PIC单片机需要将两个I/O引脚分别设置为输入(用于接收)和输出(用于发送)。在中档及以上具有中断机制的单片机上,可以通过定时中断实现定时采样;而在没有中断的低端单片机上,可以通过控制主循环的时间来达到同样的效果。例如,对于1200 b/s的波特率,采样间隔为278微秒。 状态机是实现这种串行接收和发送过程的有效工具。状态机可以跟踪接收过程的不同阶段,如等待起始位、读取数据位、处理校验位和停止位等。通过中断服务程序,可以实现定时中断来处理这些操作。例如,使用HITECH-PICC编译器编写的中断服务程序,可以实现全双工1200 b/s串行通信,并且可以扩展以支持多路通信,只需为每路通信复制并独立配置相应的代码。 这种方法的优势在于其灵活性。接收和发送的引脚可以根据需要重新配置,波特率也可以独立调整,而且软件UART的实现不依赖于硬件UART的可用性。只要确保微控制器有足够资源处理其他任务,就可以在有限的带宽内实现多路串行通信。 通过巧妙的软件设计和有效的采样策略,即使在只有单一硬件UART的单片机上,也能实现可靠且高效的多路异步串行通信,这对于嵌入式系统的设计来说是一个重要的技术。
剩余6页未读,继续阅读
- 粉丝: 376
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- base(1).apk.1
- K618977005_2012-12-6_beforeP_000.txt.PRM
- 秋招信息获取与处理基础教程
- 程序员面试笔试面经技巧基础教程
- Python实例-21个自动办公源码-数据处理技术+Excel+自动化脚本+资源管理
- 全球前8GDP数据图(python动态柱状图)
- 汽车检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 检测高压线电线-YOLO(v5至v9)、COCO、Darknet、VOC数据集合集.rar
- 检测行路中的人脸-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- Image_17083039753012.jpg