PIC软件串行异步通信三倍速采样法设计

发布者:创意火舞最新更新时间:2010-06-22 来源: 电子工程师关键字:串行异步通信  UART  起止式协议  三倍速采样法 手机看文章 扫描二维码
随时随地手机看文章
    在利用单片机开发各种嵌入式应用系统时,异步串行通信是常用的一种通信模式,有的应用中还要求实现多路异步串行通信。人们平时所应用的各种厂商的单片机,绝大部分片上只提供一个UART(通用异步收发器)硬件模块,利用它可以方便地实现一路串行通讯。PIC系列单片机也不例外,在其丰富的一系列产品中,除高端系列(PIC 17/18)一些型号片上带有2路UART硬件模块外,其他大部分型号片上只有1路UART,一些低端廉价的PIC单片机甚至还不带硬件UART。为了提高系统的性价比,要求设计者用软件实现1路或多路异步串行通信。很多人对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是采用何种方式来实现可靠的UART功能。

1 串行异步通信的基本协议

1.1 起止式协议的原理

    起止式异步协议是串行异步通信的基本协议,特点是逐个字符传输,并且传送单个字符总是以起始位开始,停止位结束,字符之间没有固定的时间间隔要求,它的数据格式是靠起始位和停止位来实现字符界定的,故称为起止式协议。

    起止式协议的格式定义为:对于一个完整的字符信息,必须包括起始位、若干数据位、奇偶校验位和停止位;必须定义每位信息的时间宽度—— 每秒发送的信息位个数,即为波特率。单片机系统中常用的波特率为300 bit/s~19200 bit/s。当波特率为1200 bit/s时,每个信息位的时间宽度为1/1200≈833(us);无数据通信时,数据线空闲状态应该是高电平,起始位为低电平,数据位低位先发且后跟奇偶校验位(若有),停止位为高电平,如图1所示。

 
图1 起止式串行异步通信的格式

1.2 起止式协议的优劣

    起止式协议是按字符传输的,每传输一个字符,就用起始位来通知收方,以此来重新核对收发双方同步。若接收设备和发送设备两者的时钟频率略有偏差,这也不会因偏差的累积而导致错位,加之字符之间的空闲位也为这种偏差提供一种缓冲,所以该异步串行通信的可靠性高。但由于要在每个字符中加上起始位和停止位这样一些附加位,使得传输效率变低,只有约80%。因此,该通信协议一般用在数据速率较慢的场合(小于19.2 kbit/s)。在高速传送时,一般要采用同步协议。

    按图1最基本的异步串行通信时序,软件实现UART在不同架构的单片机上有多种方法。其中数据接收是关键,因异步通信没有可参照的时钟信号,发送方随时都可能发送数据,任何时刻串行数据到来时,系统都应该及时准确地接收。比较而言,本机发送串行数据相对容易,只要对发送出去的电平做持续时间的定时即可。按不同的接收技巧并针对PIC单片机的特点,下面介绍一种常用且十分可靠的方法——三倍速采样法。

2 三倍速采样法

2.1 三倍速采样法的实现

    三倍速采样法就是以3倍于波特率的频率对接收引脚Rx进行采样,保证检测到起始位,又可以调整采样的时间间隔;将有效数据位的采样点控制在码元的中间1/3处,最大限度地减少误码,提高接收的准确性。将图1的起始位和部分数据位放大,如图2所示,把每个信息位分成三等份,每等份的时间宽度设为t ,以便于分析。

 
图2 三倍速采样法格式

    以三倍频对信息位进行采样时,每个信息位都可能被采样到3次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,虽然每次具体的采样点会在此S0阴影区随机变化。检测到起始位低电平后,间隔4ts时间,正好是第1位数据位的中间1/3处(图2中Ds阴影区)。此后的数据位、校验位和停止位的采样间隔都是3ts ,所有采样点均落在码元的中问1/3处,采样数据最可靠。

    PIC单片机采用此法实现软件UART时,硬件上只需要任意定义两个I/O引脚,分别初始化成输入(串行数据接收)和输出(串行数据发送)即可。软件上只要实现定时采样,定时时间间隔在中档以上有中断机制的单片机上可以用不同的定时器(TMR0、TMR1、TMR2等),通过定时中断实现;在低档无中断的PIC单片机上可以控制每次主循环所耗的时间来实现。对于1200 bit/s波特率,码元宽度为833us,采样时间间隔即为278us。整个串行接收或发送是一个过程控制问题,用状态机方式实现最为高效简易。图3给出了串行接收的参考状态机转移过程。

 
图3 状态机转移流程

    接收端空闲状态为高电平,当收到低电平确认为起始位后,间隔4ts采样第1个数据位,然后每间隔3ts采样其它数据位,最后接收高电平确认停止位,数据接收完后回到空闲状态。如果起始位或停止位确认不对,程序均转入帧错误执行,回到空闲状态重新接收。

2.2 三倍速采样法实际应用

    文中对中档单片机PIC12F675进行了软件异步串行通信设计,在程序设计中,关键部分是TMR0的中断服务。当通信波特率为1200 bit/S时,TMR0采用278us左右中断一次,TMR0的中断响应就为软件UART接收和发送通信过程的实现。通过MPLAB高效的代码编译后,约有150条单字指令代码,整个中断服务平均用约35个指令周期,实现一路软件UART在4 MHz工作频率下占用MCU约12%的运行带宽,通信过程比较可靠。理论上,只要保证MCU留有足够的运行带宽给其他任务,在此中断服务程序内把接收和发送的代码再复制1份或多份(数据结构独立),即可实现多路软件UART。当然,如果每路的波特率不同,采样频率必须是最高波特率的3倍,不同波特率的采样点间隔要独立调整。

    该方法还在实际产品设计中都得到了很好的验证 最典型的是红外线自动抄表系统。该系统采用38 kHz红外调制,波特率为1200 bit/s的半双工串行异步通信。用软件实现此UART,并利用PIC单片机CCP模块的PWM输出38 kHz载波,在单片机外只须一个一体化红外接收头和一个红外发射二极管,即可完成所有设计要求,最大程度地减化了硬件设计,降低了成本,提高了系统的可靠性和性价比。

3 结束语

    综上所述,三倍速采样法最大的好处是软硬件配置灵活、经济可靠,接收发送的引脚可以任意定义,采样定时可以用不同的定时器实现,利用同一个定时采样可以方便地实现多路软件UART,无需复杂的外围电路,即可实现可靠的串行异步通信。但也有些不足,不管有无数据通信,始终占用MCU运行带宽,串行通信的波特率不能太高,4 MHz频率工作的PIC单片机一般只能实现2400 bit/s的全双工通信。为此,可以通过提高MCU的振荡频率来实现高波特率通信,比如PIC单片机工作在20 MHz时,就可实现9600 bit/s;而且其通信可靠性可通过在采样时刻多次采样、多种校验等方法得到进一步提高。

关键字:串行异步通信  UART  起止式协议  三倍速采样法 引用地址:PIC软件串行异步通信三倍速采样法设计

上一篇:基于VB与MCS-51单片机的温度测控系统设计
下一篇:一种单片机和FPGA的远程温度监控系统

推荐阅读最新更新时间:2024-03-16 12:29

S3C2440的UART
S3C2440 的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口 每个 UART 包含一个波特率发生器、发送器、接收器和一个控制单元 UART 基本工作原理 内置波特率发生器,为串行数据的发送和接收提供时钟,根据这个时钟节拍,数据先写到FIFO中然后在拷贝到发送移位器中,在移位发送到引脚TxDn, 期间,发送过来的数据通过引脚RxDn进入移位器中然后拷贝到接收器的FIFO中 UART寄存器(详情见数据手册) ULCONn(3个) UCONn(3个) UFCONn(3个) UMCONn(2个) UTRSTATn(3个) UERSTATn(3个) UFSTATn(3个) UMSTATn(2个) UTXHn
[单片机]
S3C2440的<font color='red'>UART</font>
单片机 uart中断处理函数例子
#define Max_SendLen 100 #define Max_RecvLen 100 unsigned char TxData = {0}; unsigned char RxData = {0}; void Digital_Recv_Int_xxx(unsigned char RX_buf) { static unsigned char RxCounter = 0; static unsigned short packageSize = 0;//数据包总字节数 USART_ClearITPendingBit(UART_x, USART_IT_RXNE); RxData = RX_buf;//保存一
[单片机]
分析一下UART IIC SPI驱动编写步骤
1,首先都是设置引脚的功能,把引脚设置到对应的模式 2,然后设置对应串口控制器的一些参数(也就寄存器的一些参数),完成对串口的基本设置,比如UART的波特率等等的。要配置哪些参数一般在对应外设的初始化结构体里都列了。所以这个步骤就变得很简单,就往对应外设的初始化结构体里面赋值就行了。而且我发现对引脚的设置其实也是对引脚的那个结构体的里面的参数赋值!!!!!都给它弄成结构体了,很方便!!!!!!!!!!所以整个过程就变成了往两个结构体里面填值就可以了,怪不得都不不需要变成用STM32cube选几下就可以了!!!!!!确实本质就是这样子的!!!!!!! 3,然后写发送或者接收。 我觉得主体可以分为以上三个部分。
[单片机]
分析一下<font color='red'>UART</font> IIC SPI驱动编写步骤
TMS320VC5402和PC机的UART研究与设计
1 引言 TMS320VC5402以其低成本、低功耗、资源多的特点在通信、控制领域得到了广泛的应用。片上集成了最大192kB存储空间(64kB RAM、64kB ROM、64kB I/O),具有时分多路串口TMD,2个缓冲串口BSP、8位并行主机接口HPI、可编程等待状态发生器等,完全可以满足数据处理及控制要求。基于 5402构建的应用系统中必不可少的是各种数据通信接口的设计。与并口相比,串行接口的特点是减少器件引脚数目,节省了硬件系统的体积,降低了接口设计的复杂性。实际应用中,各系统之间需要实现异步串行数据传输和通信,而DSP5402具有同步串口,与标准的异步串行接口不同,本文针对这种应用,设计实现了DSP5402和PC
[嵌入式]
串行异步通信单片机程序设计实例
org 0000H AJMP START ORG 30H START: mov SP,#5fh ; mov TMOD,#20h ;T1: 工作模式2 mov PCON,#80h ;SMOD=1 mov TH1,#0FDH ;初始化波特率(参见表) mov SCON,#50h ;Standard UART settings MOV R0,#0AAH ;准备送出的数 SETB REN ;允许接收 SETB TR1 ;T1开始工作 WAIT: MOV A,R0 CPL A MOV R0,A MOV SBUF,A LCALL DELAY JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1
[单片机]
<font color='red'>串行</font>口<font color='red'>异步通信</font>单片机程序设计实例
STM32的UART DMA传输总结
使用DMA传输可以连续获取或发送一段信息而不占用中断或延时,在通信频繁或有大段信息要传输时非常有用。 由上表可知,要使用USART1TX/RX我们选择通道4和5 1、 DMA传输方式: (1) DMA_Mode_Normal,当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的DMA传输,需要3个步骤:在关闭DMA通道的情况下,在DMA_CNDTRx寄存器中重新写入传输数目,然后重新开启DMA。 void DMA1_Channel5_IRQHandler(void) {//由于不同的中断源拥有同一个中断矢量入口,所以需要判断中断标志 if(DMA_GetFlagStatus(DMA1_F
[单片机]
基于C8051F的AD UART0 KEY FLASH TIME3程序
//------------------------------------------------------------------------------------ // Main.c //------------------------------------------------------------------------------------ // Copyright (C) 2011 Shenyang 213. // Wbr // Tool chain: KEIL Full 'c' // //#pragma CD OE DB SB // Compilation
[单片机]
51单片机(二)—— GPIO&Uart
一、GPIO 1.1 内部上拉电路 51单片机的I/O口都可以同时作为输入和输出之用。除了P0口以外,其他的I/O口都有内部上拉电阻。 3个内部上拉电阻都有不同的功用,要理解这个电路需要一定的模拟电路的知识。 内部上拉电阻示意图 由于相关的硬件配置,在编程时有以下需要注意的地方: 当I/O口被用作输入用途时,读取输入前要保证锁存器状态为1。 当将I/O口由低拉高时,指令执行后需要1~2个机器周期才能使实际的输出变成高电平。 在外围电路上需要注意的地方: P0口做普通I/O使用时,要加上拉电路,因为其没有内部上拉。 为防止电流过大,必要时外加限流电阻。 1.2 编程示例 51单片机的I/O口在使用时,并不需要对其
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved