实验四基于单片机的串行通信一、 实验目的1.了解串行通信的基本知识;2.掌握用单片机串行口实现串行通信的方法。
二、 实验器材微机、示波器、万用表、电源、AEDK仿真开发系统,面包板一块,MAX202C芯片一块,电容、电阻、导线若干。
三、 实验原理此处仅介绍与本实验内容密切相关的串行通信基本知识,其它有关基本知识介绍请见本讲义实验七。
1.串行通信的异步和同步传送方式CPU与其外部设备之间的信息交换或计算机之间的信息交换均可被称为“通信”。
通信的基本方式可分为并行通信和串行通信两类。
并行通信是指数据各位同时并行传送的通信方式,而串行通信是指数据逐位顺序串行传送的通信方式(如图4.1所示)。
在并行通信中,由于有多根传输线并行传送数据,因此传送速度快、通信速率高。
但当多位数据远程传输时,传输线路的开销就成为突出问题。
由于串行通信只需一对传输线,并且可以利用电话线等现有通信信道作为传输介质,因而可以大大降低传输线路的成本。
一般而言,串行通信的传送速度明显低于并行通信。
(a)并行通信 (b)串行通信图4.1 通信方式示意图串行通信分为异步传送和同步传送两类。
异步通信是一种字符再同步的通信方式,而同步通信是靠识别同步字符来实现数据的发送和接收的。
(1) 异步传送方式异步传送的特点是:①数据以字符方式随机且断续地在线路上传送(但在同一字符的内部的传送是同步的)。
各字符的传送依发送方的需要可连续,也可间断。
②通信双方用各自的时钟源来控制发送和接收。
③通信双方按异步通信协议传输字符。
异步通信格式如图4.2所示,每个字符由起始位、数据位、奇偶校验位和停止位四个部分顺序组成。
这四个部分组成异步传输中的一个传输单元,即字符帧。
z 起始位:为“0”信号,占1位。
起始位的作用有两个:①表示一个新字符帧的开始。
即线路上不传送字符时,应保持为“1”。
接收端检测线路状态连续为“1”后或在停止位后有一个“0”,就知道将发来一个新的字符帧。
②用以同步接收端的时钟,以保证后续的接收能正确进行。
z 数据位:紧接于起始位后面,它可以占5、6、7或8位不等,数据的位数依最佳传送速率来确定。
如所传数据为ASCII 码字符,则常取7位。
数据位传输的顺序,总是最低位(LSB )D 0在先。
z 奇偶校验位:在数据位之后,占1位。
它用来检验信息传送否有错。
它的状态常由发送端的奇偶校验电路确定。
奇偶位的值取决于校验类型,若为偶校验,则数据位和校验位中逻辑“1”的个数必须是偶数;若为奇校验,则数据位和校验位中逻辑“1”的个数必须是奇数。
也可以规定不用奇偶校验位,或用其它的校验方法来检验信息传送过程是否有错。
z 停止位:用“1”来表征一个字符帧的结束。
停止位可以占1位、1.5位或2位不等。
接收端收到停止位时,表明这一字符已接收完毕,也表明下一个字符帧可能到来。
若停止位以后不是紧接着传送下一个字符帧,则让线路上保持为“1”,即空闲等待状态。
图4.2既表示一个字符紧接一个字符传送的情况,又表示两个字符间有空闲位的情况。
串行通信的一个重要指标是波特率。
它定义为每秒钟传送二进制数码的位数(亦称波特率),以“位/秒”(bps )为单位。
在异步通信中,波待率=(每个字符帧的位数)×(每秒传送的字符数)常用的波特率有600、1200、2400、4800、9600、19200(bps )等。
由于异步通信双方各用自己的时钟源,若时钟频率等于波特率,则频率稍有偏差就会产生接收错误。
时钟频率应比波特率高,时钟频率与波特率的比一般选16:1或者64:1。
采用较高频率的时钟,在一位数据内就有16或64个时钟,就可以保证捕捉正确的信号。
空闲位 起校停起校停空闲位 第n 个字符帧 第n +1个字符帧图4.2异步通信的字符帧格式因此,在异步通信中,收发双方必须事先约定两件事:一是规定字符帧格式,即规定字符各部分所占的位数,是否采用校验,以及校验的方式等;二是规定所采用的波特率以及时钟频率和波特率间的比例关系。
异步传送由于不传送同步时钟脉冲,所以设备比较简单,实现起来方便,它还可根据需要连续地或有间隙地传送数据,对各字符间的间隙长度没有限制。
缺点是在数据字符串中要加上起同步作用的起始位和停止位,降低了有效数据位的传送速率,仅适合于低速通信的场合。
(2) 同步传送方式同步传送方式以许多字符或许多位组成的数据块为传输单位连续地传送数据。
在通信开始以后,发送端连续发送字符,接收端也连续接收字符,直到一个数据块传送结束。
同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,这就提高了数据传送的效率,其符号格式如图4.3所示。
同步通信可以分为单同步字符方式和双同步字符方式,图4.3(a)为双同步字符方式,图4.3(b)为单同步字符方式,同步字符之后是连续的数据块。
同步字符可以由用户约定,当然也可以采用ASCII码中规定的SYN代码,即16H。
按同步方式通信时,在发送时要插入同步字符,接收方检测到同步字符时,即准备开始接收,因此,硬件设备需有插入同步字符和相应的检测手段,设备较复杂。
在同步传送时,无论接收或发送,都要求统一时钟。
为了保证接收正确无误,发送方除了传送数据外还要把时钟信号同时传送出去。
同步传送的优点是传送速率较高,可达56K波特或更高。
图4.3同步传送符号格式2.MCS-51系列单片机的串行通信接口MCS一51系列单片机内部有一个可编程的全双工串行通信口,可作为通用异步接收和发送器,也可作为同步移位寄存器用。
该串行口有4种工作模式(详见下文2.6)。
片内的定时器/计数器可用作波特率发生器。
接收、发送均可工作在查询方式或中断方式。
2.1串行通信接口结构MCS一51系列单片机内部的串行通信口,有二个物理上相互独立的接收、发送缓冲器SBUF,对外也有两条独立的收、发信号线RxD(P3.0)和TxD(P3.1)。
可以同时发送、接收数据,实现全双工传送。
发送缓冲器和接收缓冲器不能互换,发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。
两个缓冲器占用同一个端口地址(99H)。
具体对哪一个缓冲器进行操作,取决于所用的指令是发送还是接收。
接收是双缓存的,以避免在接收下一帧数据之前,CPU未能及时响应接收中断, 未把上一帧数据取走而产生两帧数据重叠的问题。
而对于发送器,,因为发送时CPU是主动的,不会产生写重叠的问题,所以不需要双缓存。
与串行通信口有关的寄存器有多个,除SBUF之外,还有SCON、PCON、IE和定时器/计数器,用校验方式进行通信,有时也会用到程序状态字寄存器PSW。
2.2串行口控制寄存器SCONSCON用于控制和监视串行口的工作状态,定义如下:表4.2 SCON 寄存器(MSB) (LSB)SM0 SM1 SM2 REN TB8 RB8 TI RIz SM0和SM1:串行口工作模式选择位,对应四种模式,见表4.3。
z SM2:在模式0时,SM2不用,应设置为0。
在模式1时,SM2一般也应设置为0。
若SM2=1,则只有收到有效停止位才会激活RI,并自动发出串行口中断请求(设中断是开放的),若没有接收到有效停止位,则RI清零。
在模式2或模式3下,SM2的设置与字符帧第九位的作用有关。
①在第九位用作奇偶位的情形,应置SM2=0。
②在第九位用于表示是地址帧还是数据帧的多机通信情形,若SM2=1和RB8=1时,RI不仅被激活,而且可以向CPU请求中断;若SM2=0,串行口以单机发送或接收方式工作,TI和RI以正常方式被激活。
SM2在多机通信中的使用方法,详见本讲义P.34的有关主从式多机通信过程的说明。
表4.3 串行口工作模式选择SM0 SM1 模 式 功 能 波 特 率0 00 11 0 1 1 0123同步移位寄存器8位UART9位UART9位UARTf OSC/12可变f OSC/64或f OSC/32可变z REN:允许接收控制位,由软件置位或清除。
REN=1则允许接收, REN=0, 禁止接收。
z TB8:该位是模式2和3中要发送的第九位数据。
在许多通信协议中, 该位是奇偶位,可以按需要由软件置位或清除。
在多机通信中, 该位用于表示是地址帧还是数据帧。
z RB8:该位是模式2和3中已接收的第九位数据(可能是奇偶位, 或是地址帧/数据帧标识位)。
在模式1中, 若SM2=0, RB8是已接收的停止位。
在模式0中, RB8未用。
z TI:发送中断标志。
在模式0中, 在发送完第8位数据时, 由硬件置位;在其他模式中, 在发送停止位之初, 由硬件置位,申请中断, CPU响应中断后, 发送下一帧数据。
在任何模式中, 都必须由软件清除TI.z RI:接收中断标志。
在模式0中, 接收第8位数据结束时, 由硬件置位;在其他模式中, 在接收停止位的半中间, 由硬件置位,申请中断, 要求CPU取走数据。
但在模式1中, SM2=1时, 若未接收到有效的停止位, 则不会对RI 置位。
在任何模式中,都必须由软件清除RI.2.3 电源控制寄存器PCON 中的波特率倍增控制位SMODPCON 中有与串行口通信波特率有关的控制位SMOD ,SMOD =1时波特率加倍。
2.4 允许中断寄存器IE 的串行口中断控制位ESIE 中的ES 位为串行口中断控制位,ES=1且总中断允许位EA=1时,允许串行口中断。
2.5 定时器/计数器1作波特率发生器在模式1和模式3下,其中f osc 为晶振频率, TH1为定时器1的重装载值.,定时器/计数器1工作于自动重装载模式, 即模式2。
定时器1中断应禁止。
2.6 串行口的工作模式串行口的四种工作模式中,模式1、2、3用于通信,模式0主要用于I/O 口扩展。
模式0在模式0状态下,串行口为同步移位寄存器方式,其波特率固定为f osc /12。
RxD (P3.0)端输入/输出数据,而TxD(P3.1)线专用于输出时钟脉冲给外部移位寄存器。
发送、接收的是8位数据,低位在先。
模式1串行口工作在模式1,为8位异步通信口,即一字符帧由10位组成:1位起始位、8位数据位和1位停止位。
模式1发送图4.4模式1发送时序图4.4示意模式1的发送时序。
模式1的发送是在发送中断标志TI=0时,由一条写SBUF 的指令启动发送控制器的SEND 端,使SEND=0。
启动发送后,串行口能自动地插入一()125612322TH f osc SMOD−××=()计数器溢出速率定时器波特率/322×=SMOD位起始位0,在字符结束前插入一位停止位1,然后在发送移位脉冲SHIFT作用下,依次由TxD线上发出。
一个字符发完之后,自动维持TxD线的信号为1,在8位数据发出之后,也就是在停止位开始时,使TI置1,用以通知CPU可以发出下一个字符。