资讯详情

AVR单片机学习(七)异步串行口UART

  • 一、串行通讯技术概述

    串行通讯的通俗定义:

    一位发送一位(相对与并行,)当然通过 位同步 帧同步

    串行通讯的分类

    同步串行通讯

    时钟线、数据线、通过时钟保持数据同步

    SPI,IIC 属于同步串口通讯

    异步串口通信

    只有一根数据线,通过波特率保证数据同步(顾名思义没有时钟线只有数据线)

    UART

    无线通信一般均为异步串行通信(相对于无形之中只能有一根天线)

    波特率

    每秒发送码元时间宽度为(1/9600)S 大概是在100个微妙左右

    发送方按照波特率发出数据

    接收方按照波特率确定码元时间宽度对数据进行采样

    帧格式

    8位数据格式

    idle 空闲时候保持高电平

    在发送数据的时候先发送一位起始位 低电平0

    然后数据 0 1 。。。。8 位

    P这位是可选的一般在多级通讯的时候需要发送9位数据在第9位时候 是地址位

    SP1(必选的一位停止位 是1) 也可以选2位 加一个SP2 但是一般都是1位 起始位 1位停止位 8位数据位

    之后数据继续保持空闲高电平

    接线图

    发送端:TXD

    接收端:RXD

    交叉连接

    RS232电平标准

    逻辑1 :-15V

    逻辑0 :+15V

    DB9 定义

    TXD /RXD /GDN 三根线即可瞒足绝大数应用场合

    下面是电路图

    MAX3232标示的是3.3V的芯片我们用的是5V MAX232 芯片标示错了 不论引脚封装还是顺序都是完全相同的。

    MAX 232 芯片能提供2路串口我们只用一个。由于这个电路图上是按照9定义的走线了所以我们就得用交叉线来跟PC通讯了。

    M16的USART特点

    全双工操作(独立的串行接受合发送寄存器,不像51是公用同一个寄存器,只能半双工)

    异步或同步操作(当然同步一般用不到。所以我们只当异步串行口使用)

    支持5,6,7,8或9个数据位和1个或2个停止位(一般用的最多是8位数据 1位停止)

    硬件支持的奇偶校验操作(一般用不到,有限的场合通信质量还是可靠的,没必要加上校验)

    三个独立的中断源(看技术文档《一》)

    噪声滤波,包括错误的起始位检测,以及数字

    USART 寄存器universal (通用的大体的)synchronous(同步) asynchronous(异步)R/T(接受/发送)

    UDR

    UCSRA

    UCSRB

    UCSRC

    UBRRL与UBRRH

    《一》

    Three Separate Interrupts (3个 分离 独立的中断 ) TX complete 发送完成中断 ,TX Data Register Empty 发送数据寄存器空 中断 RX Complete 接受完成中断。

    以下是整段中文解释

    通用同步和异步串行接收器合转发器(USART)是一个高度灵活的串行通讯设备。主要特点为:

    全双工操作(独立的串行接收和发送寄存器)

    异步或同步操作

    主机或从机提供时钟的同步操作

    高精度的波特率发生器

    支持5,6,7,8,或9个数据位合1个 或 2个停止位

    硬件支持的奇偶数校验操作

    数据过渡检测

    侦错误检测

    噪声滤波,宝货粗无的起始位检测,以及数字低通

    三个独立的中断:发送结束中断,发送数据寄存器空中断,以及接受结束中断

    三个独立中断的前两个中断我们一般用不到的因为我们发送之前查询一下发送数据寄存器是否忙(可供使用)就可以了,没必要采用这两个中断,但是接受一般采用中断方式,因为我们不可能一直不停的查询。而查询发送终中断最多耽误发送一个字节的时间。

    噪声滤波使用起来通信质量相比其他单片机的通信质量大大提升,怎么操作USART呢 ?

    首先介绍下有关的寄存器

    share the same I/O address 共享相同的I/O地址 referred to as USART称为USART 数据寄存器或 UDR

    其实就是发送数据和接受数据寄存器都采样同一个名称UDR 但是怎么样区分呢?

    写 就是 发送 读就是接受 第一段下面就是吧呵呵!本人英文不好呵呵 the Transmit Data Buffer Register(TXB)Will be the destination for data written to the UDR Register location ,Reading teh UDR Register location will return the contents of the Receive Data Buffer Register (RXB).

    第七位和第六位 接受完成(置位) 发送完成(置位) 这两段最后一句是说可以用接受中断标志合发送中断标志,自己慢慢看哦。

    第5位是 数据寄存器空 ,就是检测UDR 是否准备好接受新的数据。indicates 表明

    the UDRE flag indicates ifthe transmit buffer (UDR) is ready to receive new data这个UDRE标志指出发送(UDR )是否准备号接受新数据 假如UDRE is one ,the buffer empty , and therefore ready to written 已准备好进行数据接受。所以这一位我们发送之前对这一位查询是否置位,如果置位了就可以往里写数据了,进行发送操作。

    第4位:帧错误 第三位数据溢出 第二位:(parity)奇偶校验错误 一般我们是用不到的,没必要管他

    第1位:双 发送 速度 倍速发送跟设置波特率有影响的一般情况下把我们也是不用管的 如果将这位置位的话那么算出来的波特率就得乘以2.

    this bit only has effect for the asynchronous operation 这个位 仅对 有effect (效果) for the asynchronous operation 异步操作

    第0位:多处理器 communication 通讯 模式 这一位我们一般也是用不到的。

    所以这个UCSRA 这个控制状态寄存器一般用的最多的是第五位 UDRE数据寄存器空

    这个寄存器是平时用的最多的寄存器

    第七位:RX :RX 结束中断使能

    如果是使用USART的接受中断的话这一位必须置位使能

    writing this bit to one enables interrupt on theRXC flag.写1 使能中断RXC标志(置位后使能RXC中断)

    一个USART 接受中断结束 将生成 一个 RXCIE位写1 ,这个全局中断标志SREG is 写 UCSRA 寄存器的RXC位置位1时可以产生USART接受结束中断。

    第六位:IE TX 发送中断结束使能

    别人的解释:置位后使能TXC中断,当TXCIE为1 时,全局中断标志位SREG 置位,UCSRA寄存器的TXC置为1时可以产生UCSRA发送结束中断。(看多经典比我上面的一个一个字解释好吧)

    当然第六位我们一边用不到的。

    第五位:USART 数据寄存器空中断使能 也不常用

    第4位:接受使能

    第3位:发送使能

    这两位非常重要如果要用串行口 这两位必须使能。取代了通用端口了。

    第2位 :UCSZ2 字符长度

    这UCSZ2 位combined (结合)UCSRC寄存器的UCSZ1:0在一起可以设置数据帧所包含的数据位数(字符长度)。

    一般我们用8位 。 可以设置成5--9位 当然在 上电复位之后它的寄存器默认设置就是8位所以这我们也不用设置

    这个第1位和第0位分别是 :接受数据位8 和 发送数据位 8

    这两位仅仅对于数据长度设置成9位的时候才是有作用的

    锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

    锐单商城 - 一站式电子元器件采购平台