×
单片机 > 单片机程序设计 > 详情

51手记之标准51(四)

发布时间:2020-06-08 发布时间:
|
51手记之标准51---串行口

1.串行通信基本方式:异步通信和同步通信

1).异步通信方式——以“字符”为单位进行传送

        用一帧表示一个字符,一个字符包括4个部分

        起始位   1位  有效 

        数据位   5--8位

        奇偶校验位   1位

        停止位 1位、1位半、2位  “1”有效

    在异步通信时,通信双方必须事先约定

        ①字符格式。 双方要事先约定数据位的位数、奇偶校验形式及起始位和停止位的位数;

 例如:用ASCⅡ码通信,有效数据为7位,加一个奇偶校验位、一个起始位和一个停止位共10位。当然停止位也可以大于1位。

        ②波特率(Baud rate)。波特率就是传送速率,即每秒传送的二进制位数。单位为bit/s或波特。

2).同步通信方式

        异步通信由于要在每个数据前后附加起始位、停止位,每发送一个字符约有20%的附加数据,占用了传输时间,降低了传送效率

        同步通信则去掉每个数据的起始位和停止位,把要发送的数据按顺序连接成一个数据块,在数据块的开头附加1~2个同步字符,

        在数据块的末尾加差错校验字符。同步通信的数据格式如图7-2所示。在数据块内部,数据与数据之间没有间隙。

        要求:发送和接收双方要保持完全同步,所以,要求发送和接收设备必须使用同一时钟。

        解决办法:

        对于近距离通信:采用在传输线中增加一根时钟信号线来解决。

        对于远距离通信:通过解调器从数据流中提取同步信号,用锁相技术实现收、发频率完全相同的时钟信号。

        如上所述,异步通信技术较为简单,应用范围广;同步通信传输速率高,适用于高速率、大容量的数据通信,但硬件复杂。

2.串行通信数据传输方式

        单工方式:数据传送是单向的,一端为发送另一端为接收,只需一条数据线。

        半双工方式:数据传送是双向的,A→B,B→A,同一时间只能做一个方向传送,只需一条数据线。

        全双工方式:数据传送是双向的,A、B两端可同时发送,又可同时接收,需两根数据线。


 

MCS-51系列单片机有一个全双工的串行口

1.串行口结构

 

        组成:发送数据缓冲器:只能写入,不能读出

        接收数据缓冲器:只能读出,不能写入

        发送控制器

        输出控制门

        接收控制器

        输入移位寄存器

 

        两个专用寄存器 SCON:存放串行口的控制和状态信息

        PCON:改变串行通信波特率

 

        发送缓冲器和接收缓冲器两个用同一符号SBUF,地址99H,用指令判断选哪个

        MOV SBUF,A  写入;MOV A,SBUF 读出

 

2.工作方式

        串行口有4种工作方式,由SCON中的SM0:SM1来定义。方式0时,SM2位(多机通讯控制位) 必须为0。

1)方式0

        发送数据缓冲器:只能写入,不能读出

        同步移位寄存器输入输出方式,常用于外接移位寄存器,以扩展并行I/O口。

        RXD引脚——串行输入/输出

       TXD引脚——输出同步移位脉冲

       8位数据为一帧,不设起始位和停止位,先发送或接收最低位。

       波特率固定为fosc/12。

 

①发送

        当CPU执行一条将数据写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口即把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先, TXD引脚输出同步移位脉冲,发送完8位数据置“1”中断标志位TI。

②接收

        方式0接收时,REN为串行口接收允许接收控制位,REN=0,禁止接收。 REN=1,允许接收。当CPU向串行口的SCON寄存器写入控制字(置为方式0,并置“1”REN位,同时RI=0) 时,产生一个正脉冲,串行口即开始接收数据。

        引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器也以fosc/12的固定波特率采样RXD引脚的数据信息,当接收到8位数据时置“1”中断标志RI。表示一帧数据接收完毕,可进行下一帧数据的接收。

2)方式1

        8位异步收发通信。用于数据的串行发送和接收。TXD脚和RXD脚分别用于发送和接收数据。

        方式1收发一帧的数据为10位,1个起始位(0) ,8个数据位,1个停止位(1) ,先发送或接收最低位。

①发送

        方式1输出时,数据位由TXD端输出,

        当CPU执行一条数据写发送缓冲器SBUF的指令,就启动发送。图中TX时钟的频率就是发送的波特率。发送开始时,内部发送控制信号变SEND*变为有效,将起始位向TXD输出。

        此后,每经过一个TX时钟周期,便产生一个移位脉冲,并由TXD输出一个数据位。8位数据位全部发送完毕后,置“1”中断标志位TI,然后SEND*信号失效。

②接收

 

        前提REN=1;数据从RXD(P3.0) 引脚输入。当检测到起始位的负跳变时,则开始接收。

        定时控制信号有两种(如图所示),一种是接收移位时钟(RX时钟),它的频率和传送的波特率相同。另一种是位检测器采样脉冲,它的频率是RX时钟的16倍。也就是在1位数据期间,有16个采样脉冲,以波特率的16倍的速率采样RXD引脚状态,当采样到RXD端从1到0的跳变时就启动检测器,采用三中取二的原则,接收的值是3次连续采样(第7、8、9个脉冲时采样) 取其中两次相同的值,以确认是否是真正的起始位(负跳变) 的开始。

        当一帧数据接收完毕以后,必须同时满足以下两个条件,这次接收才真正完成。

        a.RI=0,即上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,说明“接收SBUF”已空。

        b.SM2=0或收到的停止位=1(方式1时,停止位已进入RB8),则收到的数据装入SBUF和RB8(RB8装入停止位) ,且置“1”中断标志RI。

        若这两个条件不同时满足,收到的数据不能装入SBUF,该帧数据将丢失。

        方式1波特率=(2SMOD/32)×定时器T1的溢出率=(2SMOD/32)/(256-TL1)

 

3)方式2

        9位异步通信接口。每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位。

        方式2波特率=(2SMOD/64)×fosc

①发送

        发送前,先根据通讯协议由软件设置TB8(例如,双机通讯时的奇偶校验位或多机通讯时的地址/数据的标志位)。

②接收

        REN=1。数据由RXD端输入,接收11位信息。当位检测逻辑采样到RXD引脚从1到0的负跳变,并判断起始位有效后,便开始接收一帧信息。在接收器完第9位数据后,需满足以下两个条件,才能将接收到的数据送入SBUF。

        a.RI=0,意味着接收缓冲器为空。

        b.SM2=0或接收到的第9位数据位RB8=1时。

        当上述两个条件满足时,接收到的数据送入SBUF(接收缓冲器) ,第9位数据送入RB8,并置“1”RI。若不满足这两个条件,接收的信息将被丢弃。

4)方式3

        方式3为波特率可变的9位异步通讯方式,除波特率外,方式3和方式2相同。

        方式3波特率=(2SMOD/32)×定时器T1的溢出率=(2SMOD/32)/(256-TL1)

3.多机通信

        串行口用于多机通信时必须使用方式2或方式3。

        由单片机构成的多机系统,常采用总线型主从式结构:在多个单片机组成的系统中,只有一个是主机,其余是从机,主机发送的信息可被各从机接收,而各从机发送的信息只有主机接收,从机与从机之间不能互相直接通信。

        主机的RXD与所有从机的TXD端相连,TXD与所有从机的RXD端相连。

        多机通信的实现,主要靠主、从机正确地设置与判断多机通信控制位SM2和发送、接收的第9位数据(TB8或RB8)。

1)多机通信原理

        串行口控制寄存器SCON中的SM2位就是满足这一条件而设置的多机通讯控制位。

        在串行口以方式2(或方式3)接收时:

        若SM2=1,表示允许多机通讯,这时出现两种可能情况: 

         ①接收到的第9位数据为1时,数据才装入SBUF,并将中断标志RI置“1”,向CPU发出中断请求; 

        ②接收到的第9位数据为0时,则不产生中断标志,信息将抛弃。

        若SM2=0,则接收的第9位数据不论是0还是1,都产生RI=1中断标志,接收到的数据装入SBUF中。

        当主机给从机发送信息时,要根据发送信息的性质来设置TB8,

        发送地址信号时,设置TB8=1,

        发送数据或命令时,设置TB8=0。

        当从机的SM2为1时,该从机只接收地址帧(RB8位为1),对数据帧(RB8位为0)不予理睬。

        而当SM2为0时,该从机接收所有发来的信息。

2)多机通信过程

        ①令所有从机的SM2位置1,使它们处于只接收地址帧的状态(即从机复位);

        ②主机发送一帧地址信息,其中包括8位地址,第9位(即TB8)为1,以表示发送的是地址;

        ③从机接收到地址帧后,各自中断CPU,把接收到的地址与其本机地址作比较;

        ④地址相符的从机对SM2清0,准备接收主机发来的数据/命令。地址不符的从机仍维持SM=1不变,对主机发来的数据帧不予理睬,直到主机发来新的地址帧;

        ⑤主机发送数据或控制信息(第9位为0)给被寻址的从机;

        ⑥被寻址的从机,因SM=0,可以接收主机发送过来的所有数据。当从机接收数据结束时,置位SM2,返回接收地址帧状态(复位状态);

        ⑦当主机需改为与其他从机通信时,可再发出地址帧来呼叫其他从机。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式