串行通信原理与应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无用位,清0 高波特率使能 发送位第9位
TXSTA(98H):发送控制寄存器
7
CSRC
bit6 bit5 bit4 3 bit2 TX9 TXEN SYNC - BRGH
bit1 TRMT
bit0
TX9D
思考题:我想让PIC的USART模块采用8 位数据位发送数据,异步方式,高速状 态,请问TXSTA该设定何值?
0
如何判断接收完毕?

对于接收而言,当接收到一个字节后 PIR1的RCIF标志位会置1,通过判断此 位可得知是否收到一个数据,当RCREG 被读取后,RCIF自动被清空。
思考题:如何用程序判断是否接收完毕?
if((PIR1&0b00100000)!=0) 4 3 2 1 0 7 6 5 { // RCIF=1,说明收到一个数据 PIR1: RCIF // 把收到的数据读走。 }
TXSTA(98H):发送控制寄存器
7 0
6 5 4 3 2 1 0
TX9 TXEN SYNC 0 BRGH 0 TX9D
功能: 控制UART发送数据的格式
TXSTA(98H):发送控制寄存器
9位发送使能 发送使能 同步模式使能
7 0
6 5 4 3 2 1 0
TX9 TXEN SYNC 0 BRGH 0 TX9D
波特率发生寄存器:SPBPG(99H) 高波特率标志位:BRGH@TXSTA<2> 同步收发标志位:SYNC@TXSTA<4>

常用SPBPG的值:当主频是4Mhz时, 速度希望采用9600bps进行异步通信
则SPBRG=25,BRGH=1,SYNC=0
串行通信格式图
相关寄存器有两个: TXSTA: 发送控制寄存器 RCSTA:接收控制寄存器
PORTC<6>:TXD
Transmitter PORTC<7>:RXD Receiver
考虑传输速率问题
可能出现设备之间的主频不同的情
况,为了解决这个问题,两个设备 之间必须协商通信速率。 对于UART而言,传输速率是两个设 备之间预先协商好的,通过设置相 应寄存器来实现。
传输速率相关寄存器及标志位
发送缓冲寄存器 SPEN
1 接收移位寄存器 0
停 止 位
1 发送移位寄存器 0
停 止 位 1 0 TXEN 波特率发生器
起 起 始 始 位 位
1
波特率发生器
起始位 0
数据
停止位 1
(教材89页)图3-9 USART异步传送模式结构原理及时序图
串行通信时必须要考虑的问题
硬件如何连接?
传输速度是多少? 通信格式是什么样的? 要发送或接收的数据放在哪里? 如何判断发送或接收完毕?
例题1
电路图如上图
通过PIC16F877向PC的COM1不停的 发送字符’A’,要求波特率为 9600bps 8位数据位,无奇偶校验位,一位停 止位,无数据流控,请编程实现。
流程图
初始化串行口
TXREG‘A’
FALSE
PIR1的TXIF位==1
TRUE
TXREG‘A’
程序源代码
MAIN() { RCSTA=0b10010000; // 串口使能,接收使能 // 9600bps@4MHz SPBRG=25; TXSTA=0b00100100; //发送使能,高波特率 //发送字符‘A’ TXREG=‘A’; //死循环,循环发送 while(1) { if((PIR1&0b00010000)!=0) //发送完毕吗? { //再发送一个字符‘A’ TXREG=‘A’; } } }
2 I C
CAN
复杂, 可靠
用途 特点
PC与MCU PC与MCU MCU之间 MCU之间
简单
简单
USART特点
支持同步串行通信和异步串行通信 支持全双工 桢格式可编程
串行输出原理
串行输入原理
PIC的USART结构
接收 RCIF 8 8 接收缓冲寄存器 SPEN 1 TXIF 发送
5 0
4 CREN
3 0
bit2 FERR
bit1 OERR
bit0 RX9D
思考题:我想让PIC的USART模块在 溢出错 接收的第9位 桢格式错 异步方式下采用 8位数据位接收数据, 请问RCSTA该设定何值?
未用,置0 RCSTA=0b10010000;
要发送或接收的数据放在哪里?
要发送的数据放在TXREG里
什么是通信 两个设备之间交换数据 的过程我们称之为通信
A
单工 双工
B
通信的方式
从同时传输的数据位数来分为: 1、并行通信(Parrel)
2、串行通信(Serial)
串并行方式各自特点
速度
并 行 串 行 相对快 相对慢
价格
贵 廉价
距离


如何并行通信(有时间再讲)
DB0-DB7 WR RD CS ALE信号等 举例:内存的写数据过程(两部分)。 通过时序图让学生明白

Phase 1 Phase 2
CLK
ALE
WR
A[15:0] Address
Data
D[7:0]
如何串行通信
就用极少的数据线就能实现数据
通信,那么是如何实现的呢? 桢的概念:起始位,数据位,速 率(波特率),应答位或停止位。
串行通信桢格式
源自文库
常见的串行通信协议
名称 特点
USART
USB
快, 可靠
TXSTA=0b00100100;
RCSTA:接收控制寄存器
bit7 SPEN 6 RX9 5 SREN bit1 OERR 4 CREN bit0 RX9D
3 bit2 ADDEN FERR
功能: 控制UART接收数据的格式和状态
RCSTA:接收控制寄存器
串口使能
9位使能
连续接收使能
bit7 6 SPEN RX9
MCU通过UART与PC连接图
PC
MAX232 电平转换器
+12V/-12V+5V/0V
RX TX
+12V 代表 1
-12V 代表 0
+5V 代表 1 0V 代表 0
寄存器设置
RXSTA<SPEN>:1
b7
b6
b5
b4
B3
b2
b1
b0
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
TXREG=‘A’;
收到的数据放在RCREG里
char var=RCREG;
TXREG和RCREG都在0体中
如何判断发送成功?

对于发送而言,当一个字节发送完毕后 PIR1的TXIF标志位会被自动置1,通过 判断此位就可得知数据发送是否完毕, 当TXREG被赋值后,TXIF自动被清空。
思考题:如何用程序判断是否发送成功? if((PIR1&0b00010000)!=0) 3 2 1 7 6 5 4 { // TXIF=1,本次发送成功 PIR1: TXIF // 发下一个数据或结束发送 }
相关文档
最新文档