串行通信专题复习
- 格式:doc
- 大小:98.00 KB
- 文档页数:4
串行通信基础知识本节简要概括了串行通信中的相关概念,为学习PC 机与MCU 的串行通信做准备。
1. 基本概念我们知道,“位”(bit )是二进制数字的简称,是可以拥有两种状态的最小二进制值,分别用“0”和“1”表示。
在计算机中,通常一个信息单位用8位二进制表示,称为一个“字节”(byte )。
串行通信的特点是:数据以字节为单位,按位的顺序从一条传输线上发送出去。
这里至少涉及到以下几个问题:第一,每个字节之间是如何区分的?第二,发送一位的持续时间是多少?第三,怎样知道传输是正确的?第四,可以传输多远?等等。
这些问题属于串行通信的基本概念。
串行通信分为异步通信与同步通信两种方式,本节主要给出异步串行通信的一些常用概念。
正确理解这些概念,对串行通信编程是有益的。
① 异步串行通信的格式在MCU 的英文芯片手册上,通常说SCI 采用的是NRZ 数据格式,英文全称是:“standard non-return-zero mark/space data format ”,可以译为:“标准不归零传号/空号数据格式”。
这是一个通信术语,“不归零”的最初含义是:用负电平表示一种二进制值,正电平表示另一种二进制值,不使用零电平。
“mark/space ”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。
对学习嵌入式应用的读者而言,只要理解这种格式只有“1”、“0”两种逻辑值就可以了。
图3.3.1给出了8位数据、无校验情况的传送格式。
这种格式的空闲状态为“1”,发送器通过发送一个“0”表示一个字节传输的开始,随后是数据位(在MCU 中一般是8位或9位,可以包含校验位)。
最后,发送器发送1到2位的停止位,表示一个字节传送结束。
若继续发送下一字节,则重新发送开始位,开始一个新的字节传送。
若不发送新的字节,则维持“1”的状态,使发送数据线处于空闲。
从开始位到停止位结束的时间间隔称为一帧(frame )。
所以,也称这种格式为帧格式。
串行通信的基础知识串行数据通信要解决两个关键技术问题,一个是数据传送,另一个是数据转换。
所谓数据传送就是指数据以什么形式进行传送。
所谓数据转换就是指单片机在接受数据时,如何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。
8.1.1 数据传送单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。
异步串行通信通常以字符(或者字节)为单位组成字符帧传送。
字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。
1. 字符帧的帧格式字符帧由四部分组成,分别是起始位、数据位、奇偶校验位、停止位。
如图8.1所示:1)起始位:位于字符帧的开头,只占一位,始终位逻辑低电平,表示发送端开始发送一帧数据。
2)数据位:紧跟起始位后,可取5、6、7、8位,低位在前,高位在后。
3)奇偶校验位:占一位,用于对字符传送作正确性检查,因此奇偶校验位是可选择的,共有三种可能,即奇偶校验、偶校验和无校验,由用户根据需要选定。
4)停止位:末尾,为逻辑“1”高电平,可取1、1.5、2位,表示一帧字符传送完毕。
图8.1 字符帧格式异步串行通信的字符帧可以是连续的,也可以是断续的。
连续的异步串行通信,是在一个字符格式的停止位之后立即发送下一个字符的起始位,开始一个新的字符的传送,即帧与帧之间是连续的。
而断续的异步串行通信,则是在一帧结束之后不一定接着传送下一个字符,不传送时维持数据线的高电平状态,使数据线处于空闲。
其后,新的字符传送可在任何时候开始,并不要求整倍数的位时间。
2. 传送的速率串行通信的速率用波特率来表示,所谓波特率就是指一秒钟传送数据位的个数。
每秒钟传送一个数据位就是1波特。
即:1波特=1bps(位/秒)在串行通信中,数据位的发送和接收分别由发送时钟脉冲和接收时钟脉冲进行定时控制。
时钟频率高,则波特率高,通信速度就快;反之,时钟频率低,波特率就低,通信速度就慢。
了解MAX232
如果是短距离的串行数据传输,则标准的
TTL或CMOS足以应付;若要进行长距离的
串行数据传输,使用标准的TTL或CMOS,
恐怕驱动能力不足,且噪声边限太小,通
信质量很差!RS232是一种可长距离传输
的通信方式,因此,必须突破噪声边限太
小与驱动能力不足的限制,于是相关的驱
动IC应运而生,Maxim公司的MAX232系
列就属这类IC,MAX232这颗IC提供RS232
传送与接收的驱动。
在传送方面,MAX232内部将+5V电源提升
为+10V及-10V,然后接受TTL/CMOS的+5V
±V的信号,再送到线
电平,并转换成10
路上。
在接收方面,MAX232从线路上接受
±V的信号,经内部寄存器转换成
10
TTL/CMOS的+5V电平。
说穿了,MAX232只
不过是个电平转换设备而已,但只要+5V
电源与4~5个小电容(10μF即可)就能
同时提供双向的电平调整。
对于用户而言,
把它当成一般的寄存器来使用即可。
如图中列举的,对单片机而言也是可行的。
同步通信和异步通信
同步通信:是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。
同步通信传送的多字节数据由于中间没有空隙,因而传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。
异步通信:依靠起始位、停止位保持通信同步;异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。
最常见的帧格式为1个起始位、8个数据位、1个校验位和1个停止位组成,帧与帧之间可有空闲位。
起始位约定为0,停止位和空闲位约定为1。
异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收,但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低,在单片机主要采用异步通信方式。
串行工作方式
80c51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0SM1决定。
串行工作方式0
在方式0下,串行口是作为同步移位寄存器使用。
这时以RXD(P3.0)端作为数据移位的输入/输出端,而由TXD(P3.1)端输出移位脉冲。
移位数据的发送和接收以8位为一帧,不设起始位和停止位,无论输入/输出,均低位在前高位在后。
其帧格式:
使用方式0可将串行输入输出数据转换成并行输入输出数据。
方式0时,移位操作的波特率是固定的,为单片机晶振频率的1/12.以fosc表示晶振频率,则波特率=fosc/12,也就是一个机器周期进行一次移位。
若fosc=6MHZ,则波特率为500Kbit/s,即2μs移位一次。
如fosc=12MHZ,则波特率为1M(bit/s),即1μs移位一次。
串行工作方式1
方式1是一帧10位的异步通信方式,包括1个起始位,8个数据位和一个停止位。
数据发送:
方式1的数据发送是由一条写串行数据缓冲器SBUF指令开始的。
在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。
一个字符帧发送完后,使TXD输出线维持在“1”(space)状态下,并将串行控制寄存器SCON中的TI置1,表示一帧数据发送完毕。
数据接收:
接收数据时,SCON中的REN位应处于允许接收状态(REN=1)。
在此前提下,串行口采样RXD端,当采样到从1向0状态跳变时,就认定为已接收到起始位。
随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。
直到停止位到来之后把停止位送入RB8中,并置位中断标志位RI,表示可以从SBUF取走接收到得一个字符。
方式1的波特率是可变的,其波特率由定时/计数器T1的计数溢出率来决定,其公式为:
波特率=SMOD
2X(T1溢出率)/32。
其中SMOD为PCON寄存器中最高位的值,SMOD=1表示波特率倍增。
当定时/计数器T1用作波特率发生器时,通常选用定时初值自动重装的工作方式2(注意:不要把定时/计数器的工作方式与串行口的工作方式搞混淆了),从而避免了通过程序反复装入计数初值而引起的定时误差,使得波特率更加稳定。
而且,若T1不中断,则T0可设置为方式3,借用T1的部分资源,拆成两个独立的8位定时/计数器,以弥补T1被用作波特率发生器而少一个定时/计数器的缺憾。
若时钟频率为fosc,
定时计数初值为T1
初值,则波特率=
初值)
1
256
(
12
32
2
T
fosc
X
SMOD
-
在实际应用时,通常是先确定波特率,后根据波特率求T1定时初值,因此上式又可写为:
T1
初值=
波特率
X
fosc
X
SMOD
12
32
2
256-
串行工作方式2
方式2是一帧11位的串行通信方式,即1个起始位,8个数据位,1个可编程位TB8/RB8和1个停止位。
可编程位TB8/RB8既可作奇偶校验位用,也可作控制位(多机通信)用,其功能由用户确定。
数据发送:
发送前应先输入TB8内容,可使用如下指令完成:
SETB TB8 ; TB8位置1
CLR TB8 ; TB8位置0
然后再向SBUF写入8位数据,并以此来启动串行发送。
一帧数据发送完毕后,CPU自动将TI置1,其过程与方式1相同。
数据接收:
方式2的接收过程也与方式1基本相同,区别在于方式2把接收到的第9位内容送入RB8,前8位数据仍送入SBUF。
波特率:
方式2的波特率是固定的,且有两种:即fose/32和fosc/64。
2Xfosc/64
波特率=SMOD
串行工作方式3
方式3同样是一帧11位的串行通信方式,其通信过程与方式2完全相同,所不同的仅在于波特率。
方式2的波特率只有固定的两种,而方式3的波特率则与方式1相同,即通过设置T1的初值来设定波特率。
需要指出的是,当串口工作方式1或方式3时,且波特率要求按规范取1200、2400、4800、9600……,若采用晶振12MHZ和16MHZ,按上述公式计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。
解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHZ晶振。
常用波特率及其产生条件:
多机通信
双机通信时,两台单片机是平等的,而在多机通信中,有主机和从机之分,多机通信是指一台主机和多台从机之间的通信。
在串行方式2或方式3条件下,可实现一台主机和多台从机之间的通信。
多机通信原理
多机通信时,主机向从机发送的信息分为地址帧和数据帧两类,以第9位可编程TB8作区分标志,TB8=0,表示数据;TB8=1,表示地址。
多机通信充分利用了80c51串行控制寄存器SCON中的多机通信控制位SM2的特性。
当SM2=1时,CPU接收的前8位数据是否送入SBUF取决于接收的第九位RB8:RB8=1,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;RB8=0,将接收到的前8位数据丢弃。
即当从机SM2=1时,从机只能接收主机发送的地址帧(RB8=1),对数据帧(RB8=0)不予理睬。
当从机SM2=0时,可以接收主机发送的所有信息。
通信开始时,主机首先发送地址帧。
由于各从机SM2=1和RB8=1,所以各从机均分别发出串行接收中断请求,通过串行中断服务程序来判断主机发送的地址与本从机地址是否相符。
若相符,则把自身的SM2清0,以准备接收其后传送来的数据帧。
其余从机由于地址不符,则仍然保持SM2=1状态,因而不能接收主机传送来的数据帧。
这就是多机通信中主从机一对一的通信情况。
通信只能在主从机之间进行,如若需进行连个从机之间的通信,要通过主机作中介才能实现。
多机通信过程
1.各从机在初始化时置SM2=1,均只能接收主机发送的地址帧(RB8=1)。
2.主机发送地址帧(TB8=1),指出接收从机的地址。
3.各从机接收到主机发送的地址帧后,与自身地址比较,相同则置SM2=0;相异则保持SM2=1不变。
4.主机发送数据帧(TB8=0),由于指定的从机已将SM2=0,能接收主机发送的数据帧,而其他从机仍置SM2=1,对主机发送的数据帧不予理睬。
5.被寻址的从机与主机通信完毕,重置SM2=1,恢复初始状态。
多机通信协议
多机通信是一个较为复杂的通信过程,必须有通信协议来保证多机通信的可操作性和操作秩序。
这些通信
协议,除设定相同的波特率及帧格式外,至少应包括从机地址、主机控制命令、从机状态字格式和数据通信格式的约定。
8051的串行口是全双工的UART,它可同时发送和接收数据,是使用特殊寄存器内的SBUF寄存器及SCON串行控制寄存器。
SCON串行控制寄存器
RI:接收中断标志位。
在模式0下,当第8位结束时,硬件会将其设为1;。