第六讲 串口通信的学习
提要:主要学习用 Atmega8 的串口通信。
前面我们的输出大都是以 LED 的方式提供,下面我们就来学习一种新的方 式:串口通信。
6.1 串口通信的使用特点:
首先我们了解一下串口通信: RS232 是美国电子工业协会正式公布的串行 总线标准,也是目前最常用的串行接口标准,用来实现计算机与计算机之间、计 算机与外设之间的数据通讯。RS232 串行接口总线适用于:设备之间的通讯距 离不大于 15m,传输速率最大为 20kBps。RS232 协议以5V~15V 表示逻辑 1; 以+5V~15V 表示逻辑 0。 ATmega8单片机带有一个全双工通用同步/异步串行收发模块 USART,其主 要特点如下:
1. 全双工操作;
2. 支持同步或异步操作;测井电缆
3. 同步操作时,可主机时钟同步,也可从机时钟同步;
4. 独立的高精度波特率发生器,不占用定时/计数器;
5. 支持 5、6、7、8 和 9 位数据位,1 位或 2 位停止位的串行数据帧结
构;
6. 由硬件支持的奇偶校验位发生和校验;
7. 数据溢出检测;
8. 帧错误检测;
9. 包括错误起始位的检测的噪声滤波器和数字低通滤波器;
10. 三个完全独立的中断, TX 发送完成、 TX 发送数据寄存器空、 TX 接收完 成;
便于理解,我们把 USART 收发模块分为三部分:时钟发生器、数据发送器 和接收器。
时钟发生器:由同步逻辑电路和波特率发生器组成; 数据发送器:由一个单独的
写入缓冲器 UDR、一个串行移位寄存器、校验位发
生器和用于处理不同帧结构的控制逻辑电路构成;
接收器:包括时钟、数据接收单元、校验位校验器、控制逻辑、移位寄存器和两 级
接收缓冲――接收 UDR。
其中接收器是 USART 模块中最复杂的部分,它支持与发送器相同的帧结构 同时支持帧错误、数据溢出和校验错误的检测。
还是先了解要用到的寄存器: UDR、 UCSRA、 UCSRB、 学习应用之前,我们
UCSRC、UBRRL、UBRRH。
led显指数一. USART 数据寄存器 UDR:是两个物理上分离的寄存器 TXB 和
RXB
当读取 UDR 组成, 它们分别享有相同的 I/O 地址。 当写入 UDR 时 TXB 被写入,
时 RXB 被读取。当 USCRA 寄存器中的 UDRE 位被置 1 时,UDR 才能被写
老杨工作室 young45@126
的状态。由于这种特性,访问接收缓冲 RXB 不要使用 SBI 和 CBI 之类的指 令,
n77SBIC SBIS FIFO 二. USART 控制和状态寄存器 A:
UCSRA
第 7 位 RXC:USART 接收完成;
第 6 位 TXC:USART 发送完成;
第 5 位 UDRE:USART 数据寄存器空;
第 4 位 FE:接收帧出错;
第 3 位 DOR:接收数据溢出出错;
第 2 位 PE:校验错误;
第 1 位 U2X:USART 传输速率倍速;
三. USART 控制和状态寄存器 B:UCSRB
第 7 位 RXCIE:RX 接收完成中断允许;
第 6 位 TXCIE:TX 发送完成中断允许;
第 5 位 UDRIE:USART 数据寄存器空中断允许;
第 4 位 RXEN:数据接收允许;
第 3 位 TXEN:发送数据允许;
第 2 位 UCSZ2:数据位数大小,与 UCSRC 中的 UCSZ1:0 一起使用;
第 1 位 RXB8:采用接收的数据为 9 位数据帧时,接收数据的第 9 位,必 须 在 URD 读取前读取;
第 0 位 TXB8:采用发送数据格式为 9 位数据帧时,发送数据的第 9 位, 必 须在 URD 写入前写入。
四. USART 控制和状态寄存器 C:UCSRC
该寄存器与 UBRRH 寄存器共享一个 I/O 空间的地址。
第 7 位 URSEL:寄存器选择,当读写 UCSRC 时,该位为 1;
第 6 位 UMSEL: USART 工作模式选择, 该位置 1 为同步模式, 清零为异步 模式;
第 5..4 位 UPM1..0:校验方式;
UPM1 UPM0 校验方式
0 0 无校验
0 1 保留
1 0 使能偶校验
1 1 使能奇校验
第 3 位 USB:停止位选择,该为置 1 表示 2 位停止位,该位为 0 表示 1 位 停止位;
第 2..1 位 UCSZ1..0:发送或接收字符长度,与 UCSRB 中的 UCSZ2 一起 使
用,定义和设置接收和发送数据帧中的数据位数(5、6、7、8、9 位);
第 0 位 UCPOL:时钟极性,该位只有在同步模式下使用,同步模式下该 位 设定了串行输出数据变化和数据输入采样与同步时钟 XCK 之间的关系;在
老杨工作室 young45@126
0 XCK 上升沿 XCK 下降沿
1 XCK 下降沿 XCK 上升沿
五. 波特率寄存器:UBRRL 和 UBRRH
UBRRL 和 UBRRH 一起构成一个 16 位寄存器;其中 UBRRH 寄 存器与
UCSRC 寄存器共享一个 I/O 空间的地址。
第 15 位 URSEL:寄存器选择,,
当读写 UBRRH 时,该位必须为 0;
第 14..位保留位,兼容起见,写入时这些位写 0;
第 11..0 位 UBRR11..0: USART 波特率设置寄存器,
如果波特率设置被改变, 正在进行的接收和发送将被打断;
写 UBRRL 将立即更新对波特率预分频的设置。 UBRR 的值和波特率的换算关系入下:
异步正常模式
U2X=0
异步倍速模式 U2X=1
同步主机模式 BAUD=
fosc
16(U 1)BRR+
BAUD=
fosc
8(U 1)BRR+
BAUD=
fosc
2(U 1)BRR+
BARR=-
fosc
1
16´BAUD
BARR=-红外线烤箱
fosc
1
8´BAUD
BARR=-
fosc
1
2´BAUD
UBRRH 寄存器与 UCSRC 寄存器在 I/O 空间共享同一个地址($20),因而 对
这两个寄存器的读写操作要按照一些特殊的规范进行:
写操作: 写入数据的最高位用于选择写入的寄存器,最高位为 1 时,表示 写 入数据到 UCSRC,最高位为 0 表示写入数据到 UBRRH。
读操作: 读数据要比写入数据操作复杂些, 读取寄存器的选择是通过读取时 间的先后序列确定的。读第一次 I/O 空间地址$20,返回的是寄存器 UBRRH 的 内容;在接下来的一个时钟周期内再次读取地址$20,则返回寄存器 UCSRC 的 内容。因此,读地址$20,一般读到的是 UBRRH 的值,要读取
6.2 串口通信之例一:查询方式
好了,我们学习了这么多的 USART 通信的理论,接下来我们就试着应用 一 下。我们是用 Protues 仿真, 所以就不用和电脑连接了,直接用 Protues 里的 串口 终端就可以了,下面我给出电路图,很简单:
老杨工作室 young45@126
直接把串口终端和 ATmega8 的 TXD(PD1)、 这个电路很简单,不用 232 模块,
RXD(PD0)连接起来就可以了。 要实现的功能也简单,我们先用 查询的方式来实现 串口的通信, 然后再用中
断的方式实现。好了,现在我先给出一个例子:
老杨工作室 young45@126
包装盒fonmoo
老杨工作室 young45@126
怎么样,是不是很简单啊,我们首先发出一些提示信息,由于 Protues 的串 口终端还不能显示汉语, 所以我让它输出一些简单的英语提示;接下来就是提示 你在终端上输出信息,然后显示出你输入的字符。
6.3 串口通信之例二:中断方式
好了, 上面我们是用查询的方式来实现接收字符的功能的,下面我们就用 中 断的方式来实现接收字符。 程序要实现的功能和上面是一样的,电 路图也用上面 的。
充气包装袋
老杨工作室 young45@126