串行口的通信模式.docx

上传人:b****5 文档编号:6347460 上传时间:2023-01-05 格式:DOCX 页数:22 大小:1.37MB
下载 相关 举报
串行口的通信模式.docx_第1页
第1页 / 共22页
串行口的通信模式.docx_第2页
第2页 / 共22页
串行口的通信模式.docx_第3页
第3页 / 共22页
串行口的通信模式.docx_第4页
第4页 / 共22页
串行口的通信模式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

串行口的通信模式.docx

《串行口的通信模式.docx》由会员分享,可在线阅读,更多相关《串行口的通信模式.docx(22页珍藏版)》请在冰豆网上搜索。

串行口的通信模式.docx

串行口的通信模式

1.

2.MCS-51单片机的并行端口具备三种工作方式

通用I/O方式:

直接与外部设备连接,实现数据的并行交换。

常用于“最小系统”模式的设计;

总线方式:

当系统要与外部ROM、RAM或ADC等器件进行连接时,采用类似于微机系统的三总线结构进行设计,部分端口承担总线的功能。

此时系统称为“扩展系统”;

第二功能方式:

由于引脚的限制,内部信号无法正常输入输出。

因此借用I/O端口引脚作为内部信号通道也是一种不得已的方法。

当端口作为总线或第二功能时,就不能再做I/O。

3.输出操作:

MOVP0,A

数据经内总线送到锁存器的“D”端,经“/Q”端送场效管应输出极。

①总线送“0”时:

锁存器的/Q=1,使下端的FET导通(上面的FET截止),端口呈现“0”电平;

②总线送“1”时:

锁存器/Q=“0”,使下端的FET截止,输出极的两个FET全部截止。

在这种情况下,必须通过上拉电阻的作用使端口为高电平。

4.输入操作MOVA,P0

输入操作实际上有两种

①读引脚:

用于真正的外部数据输入的通道;

②读锁存器:

在端口作输出时常使用的操作。

a.读引脚:

当外部信号通过端口引脚输入时,读引脚上的电平实现信号的输入。

如指令:

MOVA,P0;A←P0

此时,单片机控制“读引脚”的三态门,使引脚处的外部电平经三态门送入内部总线。

读引脚操作前要事先向该端口写“1”

端口在输入(读引脚)时,原来锁存器的状态可能要影响引脚电平的输入。

如:

原来锁存器的状态为“0”态,电路将不能正确读入.要解决的方法就是让下端的FET截止,即事先向端口写一个“1”。

b,读锁存器:

端口作输出时的一种操作

在这种情况下,读入的数据不是来自引脚,而是端口内部的锁存器的内容。

为什么端口作输出时还要读入操作?

当端口输出时(MOVP0,A),往往要再将前面输入的状态取回来,进行再处理然后重新输出。

如:

ORLP0,A

将P0口前次输出的数据与累加器A的内容相“或”后在送回P0口(输出)。

此时P0口的数据是从锁存器中读回的,而不是从引脚输入。

上述的过程也称之谓“读——修改——写”操作。

凡是这种“读—修改—写”操作,读到的数据都是锁存器的数据而不是读引脚数据。

这种“读—修改—写”的操作有:

ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOVPx,y、CLRPx,y和SETPx,y。

而真正读引脚的指令只有 MOVA,P0

为什么“读——修改——写”操作不是从引脚回取信号?

引脚信号与外部设备连接,易受外界干扰;

引脚上的电平往往不能正确反映前次的输出结果。

P0口特点小结:

做通用数据I/O端口并与MOS器件连接时,必须外接“上拉电阻”,否则不能正确的输出高电平;

在输入操作前,必须先向端口“写1;

“读引脚”与“读锁存器”是不同的两个数据通道;

在总线方式时,P0口不能再做通用的I/O端口。

它分时输出地址、数据总线的信息(此时引脚不用外接上拉电阻)。

5.使用外数据存储器时,P2口分两种情况:

1,使用256B的外部RAM时,此时用8位的寄存器R0或R1作间址寄存器,这时P2口无用,所以在这种情况下,P2口仍然可以做通用I/O端口。

如:

movxa,@r0或movxa,@r1

2,如果访问外部ROM或使用大于256BRAM时,P2口必须作为外存储器的高八位地址总线。

如:

movxa,@dptr;访问外部数据存储器

movca,@a+dptr;访问外部程序存储器

这里使用了16位的寄存器DPTR

6.P3口

在多用途情况下,P3口分别作为串行口、外中断输入、外部计数输入和系统扩展时使用的WR和RD信号的端口。

在这种情况下,锁存器Q端为“1”电平以保证与门是打开的。

在通用I/O模式下,“替代输出功能”端为“1”电平,以保证与门打开。

原则上在进行系统设计时,P3口不做通用I/O口,以充分利用单片机的内部模块资源。

7.

使用灌电流的方式与电流较大的负载直接连接时,MCS-51的端口可以吸收约20mA的电流而保证端口电平不高于0.45V(见右上图),但驱动逻辑并不符合人们的日常习惯。

采用拉电流方式连接负载时,MCS-51所能提供“拉电流”仅仅为80μA,否则输出的高电平会急剧下降.如果我们采用右下图的方式,向端口输出一个高电平去点亮LED,会发现端口输出的电平不是“1”而是“0”!

8.当前嵌入式系统流行的串行接口

①异步串行UART、同步串行USRT总线接口;

②SPI(Microwire)总线接口---MOTOROAL、NS;

③I2C总线接口------PHILIPS;

④1-Wire总线接口----Dallas;

⑤CAN总线接口---Bosch;

⑥USB总线接口---Compaq等

9.串行通信的两种基本方式

异步通信传送方式:

在物理结构上,异步通信的双方只有数据线而没有时钟传输线。

A、B双方都以自己的时钟源控制着发送的速率或对接收进行采样;

由于通讯双方系统时钟往往不同,所以在异步通信中,要想保证通信的成功必须保证两点:

①通信双方必须保持相同的传送、接收速率(波特率);

②双方必须遵守相同的数据格式(字符帧)。

同步传送模式:

在物理结构上,通信双方除了通信的数据线外还增加了一个通信用的“时钟传输线clock”。

由主控方提供时钟信号clock。

由于有了时钟信号来“同步”发送或接收操作,所以被传送的数据不再使用“起始位”和“停止位”,因而提高了传送速度。

因此同步通信常被用于系统内部各芯片之间的接口设计。

由于同步通信多了一条“时钟线”,因此不太适合远距离的通信。

10.MCS-51单片机的串行接口

具有一个“全双工”的通讯能力串行接口。

其中;P3.0端口作RXD——异步接收端;

P3.1端口作TXD——异步发送端。

包含“同步通信”和“异步通信”两种工作方式的四种工作模式;

在“异步方式”中由T1做波特率发生器;

与串行口相关的SFR有:

SBUF(接收SBUF和发送SBUF)SCON串口控制寄存器(设定四种模式)。

11.

D1、D0:

TI、RI发送、接收完成标志

TI:

完成一帧数据发送标志,原始应软件清零,发送完成TI=1同时申请中断(如果中断开放,则引发中断);

RI:

完成一帧数据接收标志,原始应软件清零,接收完成RI=1并申请中断(如果中断开放,则引发中断);

D3、D2:

TB8、RB8发送、接收的第9位数据

TB8:

在9位数据传送的模式2、3时,将要发送的第9位数据,在执行MOVSBUF,A指令之前要事先将TB8设定好;

RB8:

在9位数据传送的模式2、3时,接收到的第9位数据;

D4:

REN允许接收控制位。

REN:

允许接收位,REN=1时允许接收,由软件置位或清零。

D5:

SM2多机通信使能位(用于接收方串口控制)

模式0、1时:

SM2不用。

模式2、3时:

有两种设定方法。

①若SM2=0,无论RB8如何,RI都能被激活,但RI不能引发中断!

CPU可通过查询RI的方式接收数据。

②若SM2=1,若接收到的第9位(RB8)=0时,RI不会被激活;若RB8=1时,RI不仅能被激活,并可引发中断。

这种特性得出一个特殊的结果:

如果接收方将其SM2=1,则能否接收到对方发送的数据不取决于自己,而是由发送方的TB8来决定的。

SM2=1的设定用于多机通信的场合。

12.使用RI、TI标志完成数据的发送与接收

SBUF是独立于CPU。

不论是数据的发送还是接收都由SBUF独立完成。

SBUF的传送速度远远低于CPU执行指令的速度,每次发送后CPU必须等待SBUF。

协调CPU与SBUF的速度只能靠标志信号。

即:

发送操作后,查询TI=1?

来决定是否可以发送下一个数据;

接收操作时,查询RI=1?

判断是否接收到数据。

13.利用接收标志RI控制数据的接收操作

RI(SCON.0):

接收完成标志。

当SUBF从RXD引脚接收完一个完整的数据帧时RI=1,CPU可以使用两种方式来处理接收的数据:

CPU采用查询RI来控制数据的读取。

JNBRI,$;如果RI≠1则等待

MOVA,SBUF;RI=1时,取SBUF中数据送A。

如果中断是开放的,则RI=1时会自动引发中断。

用户可以通过中断服务程序将SBUF中的数据取出送累加器A。

MOVA,SBUF;中断方式接收数据;

TI(SCON.1):

发送完成标志。

当CPU执行:

MOVSBUF,A指令后,便引发一次串行通讯的过程。

SBUF开始通过TXD向外按位发送数据。

当完成一帧数据的发送后,TI=1。

使用查询的方式对TI进行检测:

JNBTI,$;如果TI≠1则等待

MOVSBUF,A;TI=1时发送下一个数据

如果系统中断是开放的,则TI=1会自动引发中断。

用户可以通过中断服务程序向SBUF输送下一个数据:

MOVSBUF,A;在中断程序中发送下一个数据;

14.

15.

16.模式0的工作原理(发送)

单片机执行movsbuf,a指令的S6P2时,出现“写sbuf”信号:

1,打开总线三态门使累加器中的数据送到SBUF中;

2,使D型触发器置一,触发器的输出构成了SBUF的第9位;

3,启动“发送控制器”开始发送。

在“写SBUF信号”有效相隔一个机器周期后,“发送控制器”的SEND=1使RXD,TXD端的与门打开,使数据和移位脉冲输出。

在TXD端,每一个机器周期中发出一个同步脉冲,同时在SEND=1期间,每一个S6P2时控制器发出一个SHIFT移位信号将SBUF中的数据右移一次(同时D型触发器清零)。

这样:

每当SBUF中的数据右移(发送)一位时,SBUF的左端便移入1个“0”。

当SBIUF中的数据右移7次后,检零器的7个输入端全为“0”,向控制器发出一个信号:

通知控制器作最后一次移位,然后控制器的SEND=0停止发送数据和同步信号,TI被置位。

模式0的工作原理(接收)

在满足REN=1且RI=0的条件下(实际上是一条写SCON指令),就会引发一次接收过程。

在下一个机器周期的S6P2时刻,接收控制器将11111110写入移位寄存器。

在下一个周期的S1P1使RECEIVE=1从而使TXD端的与门打开。

同发送的过程类似:

在后面的每一个机器周期从TXD端发出同步移位脉冲,在每一个S5P2时刻对RXD线进行采样。

在S6P2时刻,控制器对寄存器进行移位,每左移一次右端就补进一位由RXD端输入的数据。

当从RXD端输入7位数据时,开始最右端的“0”被移到寄存器的最左端,寄存器向控制器发信号,通知控制器做最后一次接收,并将完整的8位数据装入SBUF中。

最后清RECEIVE,SCON中的RI置位,向CPU发中断申请。

17.

接收操作:

在REN=1且RI=0的条件下进行。

串行口的接收控制器对RXD线进行采样,其采样频率是接收时钟的16倍。

当连续8次采集到RXD线上为低电平时,检测电路便认定RXD线上有了“起始位”,在此后,便开始在每次第7、8、9三个脉冲时进行RXD采样,采取“三中取二”的原则来确定接收的数据(如图所示)。

当接收到停止位时,必须满足:

RI=0且SM2=0,才能把接收的数据送到SBUF中(停止位送SCON的RB8中,并使RI=1),否则数据丢失。

上面的条件意味着:

要向得到接收的数据,在接收前必须事先清零RI。

18.

模式2、3的发送过程类似于模式1,唯一的区别在于数据帧中数据是9位。

这样,在发送一帧数据时,CPU除了要把8位数据送SBUF外(movsbuf,a),还要事先将第9位数据送到SCON.TB8中SETBSCON.TB8或:

CLRSCON.TB8

RI=0是保证下一个数据的正常接收的重要条件。

每次当SBUF收到数据时,RI自动置一。

当取走数据时必须通过软件复位RI(指令CLRRI),否则外部发来的数据将丢失!

模式2、3的接收过程类似于模式1,不同的是:

模式1时,SCON中的RB8是接收到的停止位“1”;而模式2、3时,RB8是接收到的第9位。

19.关于SM2的设定

对于接收操作:

模式1:

SM2无用,令其=0即可。

此时接收数据条件是:

RI=0且REN=1。

单片机可以利用查询或中断方式为串口服务。

模式2、3的接收条件是:

(除了RI=0、REN=1外)

①当SM2=0时:

RI可以被激活(但不能引发中断);

②当SM2=1时:

只有接收到RB8=1时,RI不仅能激活,还能引发中断。

可见:

当SM2=1时,单片机是否能接收到数据取决于外部数据的第9位RB8。

这样外部可以通过第九位数据是“0”还是“1”来控制、决定单片机的接收状况。

在模式2、3中:

如何利用和设置SM2和RB8来控制接收?

①当数据是带奇偶效验位的9位数据时(效验位是RB8):

必须令SM2=0,这样才能保证所有数据的正确接收(无论RB8如何);

②在“多机通讯”时,所有的从机都将其SM2=1,这样作为主机在向从机发送数据/命令时,可以通过所发数据的第9位TB8(对于从机来说是RB8)来决定从机是否可以接收到此数据/命令(取决于RB8)。

即RB8=1时接收有效;RB8=0时接收无效。

所以,SM2也称“多机通讯位”,用于多机通讯。

奇偶效验:

一种防止串行通讯出错的方法。

串行口模式2、3时数据帧格式发送时:

将SCON中的TB8作为第9位数据发送;

接收时:

将接收来的第9位送到SCON中的RB8中。

20.奇偶校验:

收到的第9位RB8是发送方送来的奇偶校验位。

在这种情况下必须令SM2=0,否则接收的校验位RB8=0时,将影响数据的接收(因为RB8有时为“1”,而有时为“0”)。

21.主从式多机通讯原理

主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机之间不能直接通讯。

主机和从机的设置为模式2或3,其中主机的SM2=0,从机的SM2=1。

\

从机的SM2=1时,接收到的第九位数据RB8=1时,RI可以激活,如果RB8=0,则RI不能激活。

主机首先通过发送地址码来寻找从机(地址码的特征是第9位数据为“1”),所以所有的从机都能接收到主机发出的地址码(因为从机的RI=0,SM2=1,RB8=1),并使RI=1引发中断。

从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的SM2=0;而未被选中的从机仍保持SM2=1,并退出中断服务程序。

当主机找到从机后,开始向从机发数据、命令(其特征为第9位=0)。

由于从机SM2=0,所以尽管接收到的RB8=0,同样可以激活从机的RI,使其以查询的方式接收主机发出的数据或命令。

当主机与从机的通讯完成后,从机再将其SM2=1,并退出中断服务程序。

主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信息……。

22.多机通讯小结:

1,主机的SM2=0,从机的SM2=1;

2,主机向从机发送的地址码(第9位为“1”);

3,所有的从机(SM2=1、RB8=1、RI=0)都接收主机的地址进入中断服务程序。

在服务程序中比较、确认是否为被寻从机。

4,被寻从机将SM2清零,以保证能以查询的方式接收主机的数据、命令。

同时向主机返回地址供主机核实。

没有被选种的从机保持SM2=1并退出服务程序。

5,被寻中的从机以查询RI的方式与主机之间进行数据交换(注意:

因为SM2=0时,RI虽然能被激活,但不能引发中断),完成后,重新将SM2置1。

23.

24.如何设定波特率?

25.模式2、3应用举例

与模式1相比,模式2、3的主要特点:

1,9位数据的传送格式:

其中:

发送时第9位在TB8中,接收时第9位在RB8中。

2,SM2:

多机通讯位:

在模式0、1中:

设SM2=0,RI可以正常的激活并引发中断。

在模式2、3中:

①SM2=0时,RI可以被激活,但不能引发中断;

②SM2=1时,当RB8=1,RI可以激活且引发中断;

若RB8=0则不能激活RI,不能引发中断!

根据上面特点,模式2、3可以:

1,利用第9位数据来传送、接收数据的“奇偶效验位”(SM2=0)。

2,利用SM2、RB8实现多机通讯功能(SM2=1)。

多机通讯原理与SM2的设定

1,SM2:

多机通讯位的设定。

(在模式2、3时):

SM2=0(单机通讯模式):

RI能被激活,但不能引发中断。

SM2=1(多机通讯模式):

①若接收的第9位RB8=0,则不能激活RI,更不能引发中断;

②若RB8=1,RI能被激活且引发中断。

2,主机、从机设置为模式2或3。

其中:

主机的SM2=0(单机方式);从机的SM2=1(多机方式)。

3,主机发送的地址码的特征是第9位(TB8)=1;

而主机发送的数据、命令码的特征是TB8=0。

4,主机发送地址码寻找从机时,所有从机的RI都被激活RI=1且引发中断,进入中断服务程序(因为SM2=1且RB8=1)。

5,在从机的中断服务程序中,将接收到地址码与自己的地址进行比较:

被选中的从机将自己的SM2=0(单机模式),并向主机回送的地址码。

未被选中的从机保持SM2=1(多机模式),并退出中断服务程序。

6,主机得到从机返回的地址后,开始向该从机发数据、命令(其特征为第9位=0)。

由于选中的从机SM2=0,所以该从机RI仍可以被激活,但要用查询RI的方式与主机继续通讯。

而未选中的从机因SM2=1且RB8=0所以主机发出的命令和数据不会激活它们的RI。

7,当主机与从机的通讯完成后,该从机再将其SM2=1并退出中断服务程序。

主机重发下一个从机的地址(TB8=1),所有从机马上激活RI并进入中断对地址码判断……。

一:

主机程序(初始化部分)

ORG2000H

START:

MOVTMOD,#20H;定时器T1为模式2(8位自动重装)

MOVTH1,#0F4H

MOVTL1,#0F4H;波特率为1200(设外接6MHz晶体)

SETBTR1;启动T1

MOVSCON,#0D8H;串口为模式3,REN=1,SM2=0,TB8=1

MOVPCON,#00H;设PCON中的SMOD=0

MOVR0,#40H;发送数据块首地址送R0指针

MOVR1,#20H;接收数据块首地址送R1指针

MOVR2,#SLAVE;被寻从机地址送R2

MOVR3,#00H/#01H;主发、从收命令。

或主收、从发命令

MOVR4,#14H;发送数据块长度送R4(20)计数器

MOVR5,#14H;接收数据块长度送R5(20)计数器

ACALLMCOM;调用主机通讯子程序

SJMP$

二:

主机通讯子程序(MCOM)

ORG2100H

MCOM:

MOVA,R2;取从机地址

MOVSBUF,A

JNBRI,$;注意:

为什么判断RI而不是TI?

CLRRI

MOVA,SBUF;取从机的返回地址

XRLA,R2;核对两个地址

JZMTXD2;相符时,转MTXD2

MTXD1:

MOVSBUF,#0FFH;返回地址错误时,发送从机复位信号

SETBTB8;设定地址标志

SJMPMCOM;重发从机地址,所有从机重新判断地址

MTXD2:

CLRTB8;将TB8=0,准备发送命令

MOVSBUF,R3;送出命令

JNBRI,$;等待从机应答

CLRRI;从机应答后清标志

MOVA,SBUF;接收从机应答命令

JNBACC.7,MTXD3;命令无错时,则命令分类

SJMPMTXD1;命令错返回重新联络

MTXD3:

CJNER3,#00H,MRXD;从机发送主机接收时,转MRXD

JNBACC.0,MTXD1;从机接收时,若从机未准备好转回

MTXD4:

MOVSBUF,@R0;若从机准备好,则开始发送

JNBTI,$

CLRTI

INCR0

DJNZR4,MTXD4

RET

MRXD:

JNBACC.1,MTXD1;从机发送未准备好返回

MRXD1:

JNBRI,$;等待接收

CLRRI

MOVA,SBUF

INCR1;接收数据区指针加一

DJNZR5,MRXD1;未接收完则继续(R5接收数据计数器)

RET

END

三,从机主程序(初始化)

ORG0000H

LJMPSTART

ORG0023H

LJMP0100H

ORG0040H

START:

MOVTMOD,#20H;设定定时器T1为模式2

MOVTH1,#0F4H;设定波特率为1200

MOVTL1,#0F4H

SETBTR1;启动定时器T1

MOVSCON,#0F8H;设串口模式3,REN=1,SM2=1,TB8=1

MOVPCON,#00H

MOVR0,#20H;R0指向发送数据块首地址

MOVR1,#40H;R1指向接收数据块首址

MOVR2,#14H;R2赋发送数据块长度

MOVR3,#14H;R3赋接收数据块长度

SETBEA

SETBES;开中断

CLRRI;清标志RI准备接收数据

SJMP$;等待中断

四:

从机中断服务程序

ORG0100H

SINTS:

CLRRI;接收到地址后清RI

PUSHACC

PUSHPSW;保护现场

MOVA,SBUF;接收主机送来得从机地址

XRLA,#SLAVE;核实从机地址

JZSRXD1;若是本机地址转SRXD1

RETU:

POPPSW;返回主程序

POPACC;恢复现场

RETI;中断返回

SRXD1:

CLRSM2;SM2清零,单独接收主机数据/命令

MOVSBUF,#SLAVE;向主机发回从机地址

JNBRI,$;等待主机的命令

CLRRI;接收到主机命令后清RI

JNBRB8,SRXD2;若是命令(RB8=0)则转SRXD2继续

SJMPRETU;接收的不是命令时(RB8=1),返回

SRXD2:

MOVA,SBUF;将接收到的命令送A

CJNEA,#02H,NEXT;命令合法(A-02H)

NEXT:

JCSRXD3;若命令合法(A<02H)则继续

CLRTI;命令不合法则清TI准备发回ERR=1

MOVSBUF,#80H;发送ERR=1的状态字

SETBSM2;SM2重新置位

SJMPRETU;返回主程序

SRXD3:

JZSCHRX;若A=00H既主机发送从机接收转SCHRX

JBF0,STXD;若从机准备好(F0=1)时,转STXD

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1