86
第9第 第第第第

第 9 章 串行通信

  • Upload
    marion

  • View
    103

  • Download
    0

Embed Size (px)

DESCRIPTION

第 9 章 串行通信. 数据通讯 传输方式 同步通讯和异步通讯 波特率 : 表示每秒钟传送二进制代码的位数 , 单位 b/s. 9.1 串行通讯基本知识. 并行通讯. 串行通讯. 单向 ( 单工 ) 配置. 半双向 ( 半双工 ) 配置. 全双向 ( 全双工 ) 配置. 1 、并行通信和串行通信 通信的基本方式: 并行通信: 数据的各位同时送出。传送距离:小于 30 米。 串行通信: 数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米 ~ 几千公里。. 2 、串行通信 ( 1 )串行通信的数据传送方向。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 9 章     串行通信

第 9 章 串行通信

Page 2: 第 9 章     串行通信

9.1 串行通讯基本知识

数据通讯

传输方式

同步通讯和异步通讯 波特率 : 表示每秒钟传送二进制代码的位数 , 单位 b/

s

并行通讯

串行通讯

单向 ( 单工 ) 配置

全双向 ( 全双工 ) 配置

半双向 ( 半双工 ) 配置

Page 3: 第 9 章     串行通信

1 、并行通信和串行通信通信的基本方式:并行通信:数据的各位同时送出。传送距离:小于 30 米。串行通信:数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米 ~ 几千公里。

Page 4: 第 9 章     串行通信

2 、串行通信( 1 )串行通信的数据传送方向。

单工、半双工、全双工三种方式( 2 )串行通信的工作方式

同步方式:数据按块传送,包括同步字符、数据块。 异步方式:数据按字符传送,每一个字符均按固定的 字符格式传送,又被称为帧,如图。包含字符的起始位、

数据位、校验位、停止位四个部分。

Page 5: 第 9 章     串行通信

异步通讯的一帧数据格式

Page 6: 第 9 章     串行通信

同步传送的数据格式

Page 7: 第 9 章     串行通信

单片机系统中的串行接口及特点串行通讯可以实现单片机与单片机、单片机与微机之间的数据交换。

串行通讯电路简单,实现远距离低成本的数据传输。缺点是传输速度慢。

在一些系统中 , 采用串行通讯的形式将多微处理器连接起来,构成一个完整的多 CPU 控制系统。

从机

从机

从机

从机

主机

9.2 MCS-51 串行口及应用

Page 8: 第 9 章     串行通信

串行(异步)通信应用示意图

MCS-51 TXD(甲) RXD

RXD MCS-51 TXD (乙)

TXDRXD

RXDTXD

RS-232或 485

RS-232或 485

TXDRXD RS-232

PC 机COM1,COM2

单片机甲、、乙之间近距离的直接通讯

单片机甲乙两地之间远距离通讯

单片机与 PC 机之间的数据通讯

Page 9: 第 9 章     串行通信

8051 串行口结构

Page 10: 第 9 章     串行通信

9.2.1 与串口有关的寄存器

数据缓冲寄存器 SBUF 地址: 99H

SBUF 是用来存放发送和接收数据的寄存器 , 对应两个独立的缓冲器。

CPU 写 SBUF 就是开始发送数据( MOV SBUF,A ) ;

CPU 读 SBUF 就是读取接收到的数据到 A

( MOV A,SBUF )。

该结构在硬件设计上保证了 51 单片机串行口是一个可同时发送与接收的”全双工”串口。

Page 11: 第 9 章     串行通信

接收 SBUF 移位寄存器

发送 SBUF 移位寄存器

内部总线 CPU

MCS-51RXD

P3.0

TXD

P3.1

SBUF 硬件电路:发送:执行指令 MOV SBUF,A

接收:当检测到起始位电路自动启动接收。

Page 12: 第 9 章     串行通信

串行口控制寄存器 SCON 地址 :98H

SM0 SM1: 串行口工作模式选择位。

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0 SM1 模式 功 能 波特率 0 0 0 同步移位寄存器模式 Fosc/12

0 1 1 8 位异步通信 UART 可变 1 0 2 9 位异步通信 UART Fosc/64 或 /

32

1 1 3 9 位异步通信 UART 可变

Page 13: 第 9 章     串行通信

RI : 完成一帧数据接收标志,应软件清零,接收完成 RI=1 并申请中断(如果中断开放,则引发中断);TI : 完成一帧数据发送标志 , 应软件清零,发送完成 TI=1 同时申请中断(如果中断开放,则引发中断);RB8: 在 9 位数据传送的模式 2 、 3 中 , 接收到的第 9 位数据;TB8: 在 9 位数据传送的模式 2 、 3 中 , 将要发送的第 9 位数据;REN: 允许接收位 ,REN=1 时允许接收 . 由软件置位或清零。

SM0 SM1 SM2 REN TB8 RB8 TI RI

Page 14: 第 9 章     串行通信

SM2 : 多机通信使能位 .1 ,模式 0 、 1 时 : SM2 不用,应设为 0 。 2 ,模式 2 、 3 时 :

SM2=0 ,无论 RB8 如何, RI 都能被激活( RI=1 )。

若 SM2=1, 收到的第 9 位( RB8 ) =0 时 , 则 RI 不会被激活;若 SM2=1 且 RB8=1 时, RI 才能被激活 =1 并引发中断。在接收方式时:当 SM2=1 时,能否接收到数据取决于对方发送的第 9 位数据 RB8 ,可由发送方来控制接收方的数据接收。此种方式( SM2=1 )用于多机通信。

SM0 SM1 SM2 REN TB8 RB8 TI RI

Page 15: 第 9 章     串行通信

如何使用 RI , TI 标志完成接收、发送?

通信双方不是同步工作的,数据交换由各自 SBUF 进行。CPU 不参与通信过程,只能通过标志了解 SBUF 的发送、接收的状态,以便决定后续操作。

RI ( SCON.0) :接收完成标志。① 当 SUBF 从 RXD 接收完一个完整的数据帧时, RI=1 。如

果串口中断是开放的,则 RI=1 时会自动引发中断。用户可以通过中断服务程序将 SBUF 中的数据取出送累加器 A 。

MOV A,SBUF —— 中断方式接收数据;②也可以使用查询的方式对 RI 进行检测,如果 RI=1 则执行: MOV A,SBUF 否则等待 —— 查询方式接收数据。

Page 16: 第 9 章     串行通信

TI ( SCON.1): 发送完成标志。 当 CPU 执行: MOV SBUF,A 后, SBUF 开始通过

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

① 如果系统中断是开放的,则 TI=1 会自动引发中断。用户可以通过中断服务程序向 SBUF 输送下一个数据:

MOV SBUF, A ——— 中断方式发送数据;②也可以使用查询的方式对 TI 进行检测,如果 TI=1 则执行: MOV SBUF , A 。否则等待 —— 查询方式发送。

Page 17: 第 9 章     串行通信

使用查询 RI 、 TI 标志方式进行发送与接收 N 个数据

CLR SCON .TI

数据送累加器 A修改数据区指针

mov sbuf,a

TI=1?

N 个数据发送完?YES NO

YESNO

发送数据的程序框图

SETB SCON .REN

mov a , sbuf

RI=1?

N 个数据接收完?YES

NO

YES

NO

CLR SCON .RI

A 送数据区修改数据指针

接收数据程序框图

Page 18: 第 9 章     串行通信

PCON 地址: 87H

SMOD

波特率选择位 SMOD=1 时 , 方式 1, 方式 2, 方式 3的波特率加倍

Page 19: 第 9 章     串行通信

9.2.2 串行通信工作模式模式 0 以 8 位数据为一帧 , 不设起始位和停止位 , 先发送或接收最低位 , 其帧格式如下

模式 1 以 10 位为一帧传输 , 设由 1 个起始位 ,8 个数据位 ,1 个停止位

模式 2 和模式 3 以 11 位为 1 帧传输 , 设有 1 个起始位 ,8 个数据位 ,1 个附加第 9 位和 1 个停止位

…. D0 D1 D2 D3 D4 D5 D6 D7 …..

….. 起始

D0 D1 D2 D3 D4 D5 D6 D7 停止

…..

…. 起始

D0 D1 D2 D3 D4 D5 D6 D7 D8 停止

…..

Page 20: 第 9 章     串行通信

串行口的模式 0特点 : 同步移位寄存器方式。波特率:固定为 fosc/12. RXD(P3.0) :数据口线(发送和接收);先移数据的低位。

TXD(P3.1) :移位脉冲输出端。 (注意 : 移位脉冲的频率就是模式 0 的波特率)

主要功能 : 使用串行口扩展并行口, 理论上可以扩展 n*8 位的并行口。

MCS-51

RXDTXD

Data 外部移位寄存器cp

移位脉冲

串行数据

并行的数据 (8 位 )

Page 21: 第 9 章     串行通信

模式 0 电路框图51 内部总线

SBUF

零检测器

移位时钟

START SHIFT 发送控制器TXCLOCK TI SEND

D S QCP

START RI RECEIVERX 接收控制器 SHIFTCLOCK 1 1 1 1 1 1 1 0

输入移位寄存器

SBUF

51 内部总线

读 SBUF

写 SBUF

S6

串行口中断

P3.0RXD

P3.1TXD

装载 SBUF

REN/RI P3.0

RXD

MOV SBUF,A

1

S6P2

Page 22: 第 9 章     串行通信

模式 0 的发送与接收

单片机执行 mov sbuf,a 指令启动“发送控制器”开始发送。完毕, TI 被置位。

在满足 REN=1 且 RI=0 的条件下(实际上是一条写SCON 指令),就会引发一次接收过程。完毕, RI置位,向 CPU 发中断申请。

Page 23: 第 9 章     串行通信

模式 0 的时序信号(发送)S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6

写 SBUF

SEND

D1D0 D2 D3 D4 D5 D6 D7RXD 端数据

SHIFT

TXD 端同步脉冲

TI 中断标志

mov sbuf,a 指令从发送到结束的 10 个机器周期

Page 24: 第 9 章     串行通信

模式 0 的时序信号(接收)S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6 S1~S6

写 SCON ( RI=0 )

RECEIVE

SHIFT

RI

对 RXD 采样

TXD 同步脉冲

RI 中断标志

Page 25: 第 9 章     串行通信

串行口模式 1

特点 :10 位传输格式 (1 个起始位 +8 个数据位 +1 个停止位 ) ; 用于通讯的异步方式; 可变波特率(定时器 T1 的溢出率来确定 , 所以在此种模式下 , 首先要对 T1 进行初始化以确定串行口的波特率)。

发送操作:在 TI=0 ,执行 mov sbuf ,a 指令后从 TXD 端开始发送数据。当发送完 8 位数据后自动的添加一个高电平的停止位,并将 TI 置位。

Page 26: 第 9 章     串行通信

接收操作:在 REN=1 且 RI=0 的条件下进行。 串行口的接收控制器对 RXD 线进行采样,其采样频率是

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

数据装载条件:当接收到停止位时,必须满足: RI=0 且 SM2=0 ,

才能把接收的数据送到 SBUF 中(停止位送 SCON 的 RB8 中,并使 RI=1 ),否则数据丢失。 要想得到接收的数据,在接收前必须事先清零 RI。

Page 27: 第 9 章     串行通信

串行口模式 1 时数据帧格式及接收采样示意图

D0 D1 D2 D3 D4 D5 D6 D7

起始位 8 位数据 停止位

对 RXD 线的数据以 16 倍速度采样

当连续 8 次采集到低电平时,便确认起始位到来

在每个第 7,8,9 个脉冲对 RXD 采样并采用“以三取二”来确定采集的数据

7.8.9

Page 28: 第 9 章     串行通信

串行口模式 1 时序图

Page 29: 第 9 章     串行通信

串行口模式 2 、 3

特点 : 模式 2 、 3 都是 11位传输格式 ( 1 个起始位 +9 个数据位 +1 个停止位 ) ,它们的不同之处是波特率。

波特率 : 模式 2 :固定为 fosc/64 或 fosc/32 。 ( 具体由 PCON 中的 SMOD 位来确定)。

模式 3 :可变,由定时器 T1 的溢出波特率来确定。

D0 D1 D2 D3 D4 D5 D6 D7 D8

起始位 8+1 位数据 停止位

第 9 位

Page 30: 第 9 章     串行通信

模式 2 、 3 的发送过程类似于模式 1 ,唯一的区别在于数据帧中数据是 9位。这样,在发送一帧数据时, CPU除了要把 8 位数据送 SBUF 外( mov sbuf,a), 还要事先将第 9 位数据送到 SCON.TB8 中。如:第 9 位( TB8 ) =1 时, SETB SCON.TB8 若第 9 位( TB8 ) =0 时: CLR SCON.TB8

例如: SETB SCON.TB8 或: CLR SCON.TB8 MOV SBUF,A MOV SBUF,A

SM0 SM1 SM2 REN TB8 RB8 TI RI

Page 31: 第 9 章     串行通信

模式 2 、 3 的接收过程也类似于模式 1 ,不同的是:模式 1时, SCON 中的 RB8 是接收到的停止位(“ 1” );而模式 2 、 3 时, RB8 是接收到的第 9 位。

在模式 1 ,接收操作只有在 RI=0, 且 REN=1 时数据可以接收。而模式 2 、 3 的接收装载条件是:

a ) RI=0 且 SM2=0 (与 RB8 的状态无关); 或: b ) RI=0 且 RB8=1 ( SM2=1 时)。 只有满足 a )或满足b )的条件时 , 接收到的数据才能送到

SBUF ,并使 RI=1 激活,否则接收无效且 RI 不能置位。

Page 32: 第 9 章     串行通信

RI=0 是保证 SBUF 空(每次取走数据时通过软件复位 RI ,如果没有取走数据则 RI=1 ),保证接收到的数据不丢失。

利用后一个条件 SM2 和 RB8 来控制接收,可用于多机通信。 令 SM2=1 可以利用接收到的 RB8 控制接收是否有效。

即 RB8=1 时接收有效; RB8=0 时接收无效。 SM2 也称“多机通讯使能位” 。

在没有多机通信的场合, RB8 可用于奇偶效验,以防止串行通信出错。

Page 33: 第 9 章     串行通信

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

发送时:将 SCON 中的 TB8 作为第 9 位数据发送;接收时:将接收来的第 9 位送到 SCON 中的 RB8 中。

D0 D1 D2 D3 D4 D5 D6 D7 D8

起始位 9 位数据 停止位

SM0 SM1 SM2 REN TB8 RB8 TI RI

Page 34: 第 9 章     串行通信

串行口模式 2 和模式 3 时序图

Page 35: 第 9 章     串行通信

模式 2 、 3 的应用之一带奇偶校验位的数据传送

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

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

当接收数据后,对 PSW.0 ( P 标志)和 RB8 位进行判断。检查结果是否与约定的相符合。

Page 36: 第 9 章     串行通信

例如:发送、接收双方约定为奇校验 ( 数据中 1 的个数为奇): 则发送方的第 9 位要根据前 8 位数据来确定。 若发送的 8 位数据是: 00011010 ,则 TB8 为 0 。

发送程序如下::MOV C,PCPL CMOV TB8,CMOV SBUF,A:

接收时将 PSW.0 ( P 标志)位与 RB8 进行“异或”,结果为 1 ,说明校验结果正确。

Page 37: 第 9 章     串行通信

利用模式 2,3 进行带奇校验的串行通讯程序流程图

数据送累加器 A

PSW.P=1 ?

SET SCON.TB8 CLR SCON.TB8

MOV SBUF,A

TI=1 ?

CLR SCON.TI

YES

NO

NO

YES

发送端程序(原始 TI=0 )

使用“查询法”编制的发送、接收程序

RI=1 ?

MOV A,SBUF

PSW.P RB8=1?⊕

出错处理CLR SCON.RI

YES

NO

接收端程序(原始 RI=0 )

N

Y

数据送内存

Page 38: 第 9 章     串行通信

模式 2 、 3 的应用之二多机通信

如果系统采用多 CPU 结构,并且有一个做主机,其它为从机时,它们之间可以通过多机通信的方式进行数据交换。如:多路数据采集系统。

我们选一台单片机作为主机,专门负责接收从机传回的数据,并进行数据的后期处理(保存、打印和显示等);

而从机则完成对传感器的信号检测、 A/D 转换,最后将数据采用串行通讯的形式上传给主机。

Page 39: 第 9 章     串行通信

传统方式的多路数据采集系统

单片机系统或

微型计算机系统

传感器 1

传感器 2

传感器 3

传感器 4

传感器 N

接口电路

引线(模拟信号)

机房 或 仪表室

检测现场

Page 40: 第 9 章     串行通信

采用“智能传感器”组成的多路数据采集系统

主机

从机 N从机 4从机 3从机 2从机 1

串行数据线( 2 条)RXD TXD

TXD RXD

从机做智能传感器

Page 41: 第 9 章     串行通信

多机通讯中 SM2 的设定在模式 2 、 3 中,

1 , SM2=0 时: RB8=1 或 RB8=0 都可以激活 RI 。

2 , SM2=1 时: RB8=1 才能激活 RI 。 RB8=0 时, RI 不能激活。

Page 42: 第 9 章     串行通信

主从式多机通信原理

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

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

第九位数据用来作为地址数据标识位, RB8=1 时为地址帧, RB8=0 时为数据帧。从机的 SM2=1 时,当收到的RB8=1 (地址帧)时, RI 可以激活;如果 RB8=0 (数据帧),则 RI 不能激活。

Page 43: 第 9 章     串行通信

主机首先通过发送地址码来寻找从机(地址码的特征是第9 位数据为“ 1” ),所以所有的从机都能接收到主机发出的地址码(因为从机的 RI=0 , SM2=1,RB8=1 ),并使 RI=1 引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的 SM2=0 ;而未被选中的从机仍保持 SM2=1 ,并退出中断服务程序。

当主机找到从机后,开始向从机发数据、命令(其特征为第 9 位 =0 )。由于被选中的从机 SM2=0 ,所以尽管接收到的 RB8=0 ,同样可以激活从机的 RI ,使其以查询的方式接收主机发出的数据或命令。当主机与从机的通讯完成后,从机再将其 SM2=1 ,并退出中断服务程序。主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信息 。

通信过程

Page 44: 第 9 章     串行通信

模式 2 、 3 使用时要注意的问题在模式 2 、 3 中,可以实现较为特殊的通信方式,如带校验位的 9 位传送、多机通讯。注意:当 SM2=0时,只能采用查询方式???

功能 SM2 第 9 位 工作方式带校验位的 9

位数传送 SM2=0 校验位 以查询( RI )的方式接收数据

多机通讯

主机 SM2=0

地址码: TB8=1

数据、命令时 =0以查询的方式工作

从机 SM2=1

未选中时 SM2 不变 以中断的方式接收地址选中后 SM2=0 以查询的方式与主机通讯

Page 45: 第 9 章     串行通信

9.2.3 波特率的设计模式 0 的波特率 =fosc/12

模式 2 的波特率 =

模式 1 和模式 3 的波特率 =

OSC

SMOD

f64

2

)1T(32

2SMOD

溢出速率

Page 46: 第 9 章     串行通信

fosc ÷12

发送 SBUF(99H)

TXD

输入移位寄存器 RXD

模式 0 波特率的产生

Page 47: 第 9 章     串行通信
Page 48: 第 9 章     串行通信

波特率及定时器 T1 的设定

在异步通信中,发送方与接收方是两个互相独立的系统,它们的系统时钟可以各不相同 , 此时确保通信正确的条件是:

1 、要有相同的字符帧格式; 2 、要有相同的波特率。

MCS-51 单片机的串行口四种模式其波特率各不相同。其中模式 1 、 3 的波特率就是由定时器 T1 的溢出率来决定的( PCON 中的 SMOD=1 波特率加倍)。

Page 49: 第 9 章     串行通信

如何设定波特率?

在编制串行口通讯(模式 1 、 3 )程序时,在程序的初始化中,通过 T1 进行波特率的设定,既对 T1 进行初始化。

T1 初始化的主要任务是: 1 、设置 T1 的工作方式为定时( C/T=0 ); 工作模式为模式 2 :自动重装。 2 、计算定时常数并分别送给 TH1 、 TL1 。

波特率计算公式:

T1 溢出率: = (计数速率) / [ 256- ( TH1 ) ]

= (fosc/12) / [ 256- ( TH1 ) ]

溢出率)( 132

2T

SMOD

Page 50: 第 9 章     串行通信

根据波特率求定时器 T1 初值计算公式设: fosc 为系统时钟频率, TH1 为定时器 T1 的初值, B 为波特

率。可以推出初值: TH1=256-[ fosc/ ( 384B ) ] ; ( SMOD=0 时)

或: TH1=256-[ fosc/ ( 192B ) ] ; ( SMOD=1 时)

【举例】设系统时钟为 11.059MHz ,要求波特率为 1200Hz ,求TH1 。

【解】设: SMOD=0 ,用上述公式TH1=256-[11.059MHz / ( 384X1200 ) ]=232=0E8H

注意: 1 、根据波特率计算定时器初值会存在一定的误差。 2 、选用 11.0592MHz 晶振是为了产生精确的波特率。

Page 51: 第 9 章     串行通信

9.2.4 串行口的应用在编制串行通信程序时,通信双方必须保证:

1 、相同的“波特率” ; 2 、相同的“字符帧格式”格式。

若采用 1 和 3 模式,则波特率可变且由定时器 T1来作波特率发生器,所以根据波特率计算 T1 的初值,是串口程序初始化任务之一。

在通信过程中,对标志( RI 、 TI )的判断是控制通信全过程的关键环节。

Page 52: 第 9 章     串行通信

串行口模式 0 的应用——扩展并行接口

P3.0

P3.1

P1.0

D1D2 74LS164CP

CLR(STB)

5V

TXD

RXD

P3.0

P3.1

P1.0

P1.1

Q 74LS165CP P/S

5V

TXD

RXD

外接串入 - 并出或并入 - 串出器件可实现 I/O 的扩展

Page 53: 第 9 章     串行通信

74LS164 ( 串人 / 并出 )

Page 54: 第 9 章     串行通信

74LS165( 并入 / 串出 )

Page 55: 第 9 章     串行通信

例9-2 :8031 串行口外接 CD4049 或 164 串

入 - 并出移位寄存器扩展 8 位并行口 ,8 位并行口的每位都接一个发光二极管 , 要求发光二极管从左到右以一定延迟轮流显示 , 并不断循环 . 电路参见 P195 图 9-17

P3.0

P3.1

P1.0

D1D2 74LS164CP

CLR(STB)

5V

TXD

RXD

Page 56: 第 9 章     串行通信

例 9-2 程序ORG 0023H

AJMP SBR ; 转中断服务ORG 2000H

MOV SCON #00H

MOV A,#80H ;最左一位 LED 先亮CLR P1.0 ; 关闭并行输出MOV SBUF,A

LOOP: SJMP $

SBR: SETB P1.0 ;启动并行输出ACALL DELAY

CLR TI

RR A

CLR P1.0

MOV SBUF,A

RETI

Page 57: 第 9 章     串行通信

例9-3 :用 8051 串行口外加移位寄存器 CD4014( 或 16

5,166) 扩展 8 位输入口 , 输入数据由 8 个开关提供 ,另有一个开关 K提供联络信号 , 当 K=0 时 , 表示要求输入数据 , 输入的 8 位为开关量 , 提供逻辑模拟子程序的输入信号 .

电路参见 P196 图 9-18

Page 58: 第 9 章     串行通信

用 8051 串行口外接 74LS165 移位寄存器扩展 8 位输入口 ,

输入数据由 8 个开关提供 , 另有一个开关 K 提供联络信号。电路示意如图 所示。当开关 K 合上时 , 表示要求输入数据。输入 8 位开关量 , 处理不同的程序。

Page 59: 第 9 章     串行通信

程序如下 :

START: JB P1.0, $ ; 开关 K 未合上 , 等待

SETB P1.1 ; 165 并行输入数据

CLR P1.1 ; 开始串行移位

MOV SCON, # 10H ; 串行口模式 0 并启动接收

JNB RI, $ ; 查询 RI

CLR RI ; 查询结束 , 清 RI

MOV A, SBUF ; 输入数据

; 根据 A 处理不同任务

SJMP START ; 准备下一次接收。 …

Page 60: 第 9 章     串行通信

P3.0

P3.1

P1.0

D1D2 74LS164CP

CLR(STB)

5V

TXD

RXD

P3.0

P3.1

P1.0

P1.1

Q 74LS165CP P/S

5V

TXD

RXD

Page 61: 第 9 章     串行通信

例 9-3 程序START: MOV SCON,#10H ;模式 0 ,允许接收

JB P1.1,$ ;开关 K 未闭合,等待

SETB P1.0 ;并行置入数据CLR P1.0 ;开始串行移位JNB RI,$

CLR RI

MOV A,SBUF

ACALL LOGSIM ;进行逻辑模拟SJMP START

Page 62: 第 9 章     串行通信

串行口模式 1 的发送和接收

例9-4 : 8031 串行口按双工方式收发 AS

CII 码 , 最高位用来作奇偶校验位 , 采用奇检验模式 , 要求传送的波特率为 1200b/s. 编写有关通讯程序 .

已知: fosc=6MHz

Page 63: 第 9 章     串行通信

例 9-4: MOV TMOD,#20HMOV TL1,#0F3HMOV TH1,#0F3HSETB TR1MOV SCON,#50HMOV R0,#20HMOV R1,#40HACLALL SOUTSETB ESSETB EA

LOOP: SJMP $;Interrupt server

ORG 0023HAJMP SBR1ORG 0100H

SBR1: JNB RI,SENDACALL SINSJMP NEXT

SEND: ACALL SOUTNEXT: RETI

Page 64: 第 9 章     串行通信

SOUT: CLR TI

MOV A,@R0

MOV C,P

CPL C

MOV ACC.7

INC R0

MOV SBUF,A

RET

SIN: CLR RI

MOV A,SBUF

MOV C,P

CPL C ; 没有检查奇偶校验是否正确

ANL A,#7FH

MOV @R1,A

INC R1

RET

Page 65: 第 9 章     串行通信

例9-5 :采用查询方式由串行口发送带奇偶校验位的

数据块ASCII 码、 32 字节1200b/s fosc=11.059MHZ

例9-6:采用查询方式由串行口接收带奇偶校验位的

数据块,要求同上。

Page 66: 第 9 章     串行通信

例 9-5 : MOV TMOD,#20HMOV TL1,#0E8HMOV TH1,#0E8H ;波特率的设定SETB TR1MOV SCON,#01000000BMOV R0,#20H ;数据块起始地址MOV R7,#32

LOOP: MOV A,@R0ACALL SP_OUTJNB P,ERROR ;发送程序该判断

可不要?INC R0DJNZ R7,LOOP

SP_OUT: MOV C,PCPL C ;奇校验MOV ACC.7,CMOV SBUF,A ;发送数据JNB TI,$CLR TIRET

Page 67: 第 9 章     串行通信

MOV TMOD,#20H

MOV TL1,#0E8H

MOV TH1,#0E8H

SETB TR1

MOV SCON,#01010000B

MOV R0,#20H

MOV R7,#32

LOOP:ACALL SP_IN

JC ERROR

MOV @R0,A

INC R0

DJNZ R7,LOOP

接收子程:SP_IN: JNB RI,$

CLR RI MOV A,SBUF MOV C,P CPL C ANL A,#7FH RET

ERROR: ( 略 )

例 9-6 :

Page 68: 第 9 章     串行通信

串行口模式 2 、模式 3 的发送和接收

例9-8: 用第 9 个数据位作奇偶校验位 , 编写串行口模式 2 的发送程序

例9-9: 用第 9 个数据位作奇偶校验位 , 编写串行口模式 2 的接收程序

Page 69: 第 9 章     串行通信

例 9-8: TRT: MOV SCON,#80HMOV PCON,#80HMOV R0,#50H ;首地址MOV R7,#10H ;长度

LOOP:MOV A,@R0MOV C,PSW.0MOV TB8,C ; 偶校验MOV SBUF,A

WAIT: JBC TI,CONTSJMP WAIT

CONT:INC R0DJNZ R7,LOOPRET

Page 70: 第 9 章     串行通信

例 9-9: RRR: MOV SCON,#90HMOV PCON,#80H

LOOP: JBC RI,RECEIVSJMP LOOP

RECIEV:MOV A,SBUFJB PSW.0,ONEJB RB8,ERRSJMP RIGHT

ONE: JNB RB8,ERR;?

RIGHT:ERR:

Page 71: 第 9 章     串行通信

思考:多机通信中第 9 位不能用于校验,应采用何种校验方式?

如累加和校验① 累加和:对所有要发送的数据在发送的同时进行累加。取

其累加和的低 8 位(大于 255 的舍去),即单字节。

② 发送方在发送完所有数据后,将单字节的累加和也发出。

③ 接收方在接收数据时,对接收到的每一个数据也进行累加操作。数据接收完成后,将自行计算的累加和与最后收到的发送方送来的发送累加和进行比较。如果两个累加和一致,则认为数据传送正确。

Page 72: 第 9 章     串行通信

应用举例:使用模式 3 进行多机通讯

主机

从机 N从机 4从机 3从机 2从机 1

串行数据线( 2 条)

主机可以与所有从机通讯,而从机之间不能通讯。

Page 73: 第 9 章     串行通信

多机通讯中主机与从机之间的控制、状态信息

主机的控制命令: 00H 主机发送,从机接收; (控制从机的操作) 01H 主机接收,从机发送。

从机状态字:从机向主机发送的用于表征从机工作状态的信息(如下图)。

ERR ····· TRDY RRDY

0 :合法命令 0 :发送未就绪 0 :接收未就绪1 :非法命令 1 :发送就绪 1 :接收就绪

从机返回的状态字

Page 74: 第 9 章     串行通信

主机程序框图

T1 为定时 , 模式 2

B=1200 ,启动 T1

设串口为模式 3REN=1,SM2=0

TB8=1

设定程序数据:R0 ~ R5

停机

MCOMMU

从机应答?

地址相符?

发送命令字 (TB8=0)

从机应答?

命令正确?

命令分类

从机接收就绪? 从机发送就绪?

RET

命令从机复位发 FFH

N

N

Y

YN

N Y

Y

N N

Y Y

接收发送

调用 MCOMMU接收数据块发送数据块

发送从机地址

Page 75: 第 9 章     串行通信

一:主机程序(初始化部分)ORG 2000H

START:MOV TMOD,#20H ; 定时器 T1 为模式 2 ( 8 位自动重装)MOV TH1,#0F4H

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

SETB TR1 ; 启动 T1

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

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

MOV R0,#40H ; 发送数据块首地址送 R0 指针MOV R1,#20H ; 接收数据块首地址送 R1 指针MOV R2,#SLAVE ; 被寻从机地址送 R2

MOV R3,#00H ; 主发、从收命令。或主收、从发命令 /#01H

MOV R4,#14H ; 发送数据块长度送 R4 ( 20 )计数器MOV R5,#14H ; 接收数据块长度送 R5 ( 20 )计数器ACALL MCOM ; 调用主机通讯子程序SJMP $

Page 76: 第 9 章     串行通信

二 : 主机通讯子程序( MCOM )ORG 2100H

MCOM: MOV A,R2 ; 取从机地址MOV SBUF,AJNB RI,$ ; 注意:为什么判断 RI 而不是 TI ?CLR RIMOV A,SBUF ; 取从机的返回地址XRL A,R2 ; 核对两个地址JZ MTXD2 ; 相符时,转 MTXD2

MTXD1:MOV SBUF,#0FFH ; 返回地址错误时,发送从机复位信号SETB TB8 ; 设定地址标志SJMP MCOM ; 重发从机地址,所有从机重新判断

地址MTXD2:CLR TB8 ; 将 TB8=0, 准备发送命令

MOV SBUF,R3 ; 送出命令JNB RI,$ ; 等待从机应答CLR RI ; 从机应答后清标志MOV A,SBUF ; 接收从机应答命令JNB ACC.7,MTXD3 ; 命令无错时,则命令分类SJMP MTXD1 ; 命令错返回重新联络

Page 77: 第 9 章     串行通信

MTXD3:CJNE R3,#00H,MRXD ; 从机发送主机接收时,转 MRXDJNB ACC.0,MTXD1 ; 从机接收时,若从机未准备好转回

MTXD4:MOV SBUF,@R0 ; 若从机准备好,则开始发送JNB TI,$CLR TIINC R0DJNZ R4,MTXD4RET

MRXD: JNB ACC.1,MTXD1 ; 从机发送未准备好返回MRXD1:JNB RI,$ ; 等待接收

CLR RIMOV A,SBUFINC R1 ; 接收数据区指针加一DJNZ R5,MRXD1 ; 未接收完则继续( R5 接收数据计数

器)RETEND

ERR 从机返回的状态字 TRDY RRDY

0 :合法命令 0 :发送未就绪 0 :接收未就绪1 :非法命令 1 :发送就绪 1 :接收就绪

Page 78: 第 9 章     串行通信

从机主程序框图

T1 为定时 , 模式 2

B=1200 ,启动 T1

设串口为模式 3REN=1,SM2=1

TB8=1

设定程序参数:R0 ~ R3

开串行口中断

动态停机等待主机发送地址码

保护现场

接收地址符合本机?

向主机回送本机地址

接收下一字符

是命令吗?

命令分类

本机发送准备就绪? 本机接收准备就绪?

发 TRDY=1 状态字 发 RRDY=1 状态字

发送数据 接收数据

发送完? 接收完?

恢复现场返回

NNY Y

发送命令 接收命令

非法命令

送 TRDY=0 送 RRDY=0

NN

N

Y

中断服务程序

N

Y

接收 FFH时

Page 79: 第 9 章     串行通信

ORG 0000HLJMP STARTORG 0023HLJMP 0100HORG 0040H

START:MOV TMOD,#20H ; 设定定时器 T1 为模式 2MOV TH1,#0F4H ; 设定波特率为 1200MOV TL1,#0F4HSETB TR1 ; 启动定时器 T1MOV SCON,#0F8H ; 设串口模式 3 , REN=1,SM2=1,T

B8=1MOV PCON,#00HMOV R0,#20H ;R0 指向发送数据块首地址MOV R1,#40H ;R1 指向接收数据块首址MOV R2,#14H ;R2 赋发送数据块长度MOV R3,#14H ;R3 赋接收数据块长度SETB EASETB ES ; 开中断CLR RI ;清标志 RI 准备接收数据SJMP $ ; 等待中断

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

Page 80: 第 9 章     串行通信

四:从机中断服务程序

ORG 0100HSINTS: CLR RI ; 接收到地址后清 RI

PUSH ACCPUSH PSW ; 保护现场MOV A,SBUF ; 接收主机送来得从机地址XRL A,#SLAVE ; 核实从机地址JZ SRXD1 ; 若是本机地址转 SRXD1

RETU: POP PSW ; 返回主程序POP ACC ; 恢复现场RETI ; 中断返回

SRXD1:CLR SM2 ;SM2 清零,单独接收主机数据 / 命令MOV SBUF,# SLAVE ; 向主机发回从机地址JNB RI,$ ; 等待主机的命令CLR RI ; 接收到主机命令后清 RIJNB RB8,SRXD2 ; 若是命令( RB8=0 )则转 SRXD2 继

续SJMP RETU ; 接收的不是命令时( RB8=1 ),返

Page 81: 第 9 章     串行通信

SRXD2:MOV A,SBUF ; 将接收到的命令送 A

CJNE A,#02H,NEXT ; 命令合法( A-02H )NEXT: JC SRXD3 ; 若命令合法( A<02H )则继续

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

MOV SBUF,#80H ; 发送 ERR=1 的状态字SETB SM2 ;SM2 重新置位SJMP RETU ; 返回主程序

SRXD3:JZ SCHRX ; 若 A=00H 既主机发送从机接收转 SCH

RX

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

MOV SBUF,#00H ; 未准备好时,向主机发回 TRXD=0 信息SETB SM2

SJMP RETU ; 返回主程序

Page 82: 第 9 章     串行通信

STXD: MOV SBUF,#02H ; 向主机发送 TRDY=1 的状态字JNB TI,$ ; 等待发送完毕CLR TI ; 发送完毕后清标志 TI

LOOP1:MOV SBUF,@R0 ; 开始发送数据块JNB TI,$

CLR TI

INC R0

DJNZ R2,LOOP1

SETB SM2 ;数据块发送完毕SJMP RETU ; 返回主程序

SCHRX:JB PSW.1,SRXD ; 本机接收就绪转 SRXD ( PSW.1: 标志)MOV SBUF,#00H ; 接收未准备好时,向主机发 RRDY=0

SETB SM2

SJMP RETU ; 返回主程序

Page 83: 第 9 章     串行通信

SRXD: MOV SBUF,# 01H ; 向主机发送 RRDY=1 状态字LOOP2:JNB RI,$ ; 等待接收数据块,开始接收数据块

CLR RI

MOV @R1,SBUF

INC R1

DJNZ R3,LOOP2

SETB SM2 ;数据块接收完毕SJMP RETU ;返回主程序END

思考:主从通信程序采用的是全双工还是半双工方式?

Page 84: 第 9 章     串行通信

小结: 四种模式的接收、发送条件

模式 发送条件 接收条件 接收方式 主要应用

0 TI=0 RI=0,REN=1 查询、中断 同步移位 , 系统扩并口

1 TI=0 RI=0,REN=1 查询、中断 8 位数据异步传送

2 、 3 TI=0

RI=0, REN=1 , SM

2=0

查询(无中断)

8 位数据 + 奇偶位的异步收发 UART

RI=0, REN=1 ,

SM2=1

若 RB8=0 时接收无效;

若 RB8=1 时引发中断。

8 位数据 + 控制位的异步收发 UART

Page 85: 第 9 章     串行通信

9.3 RS-232C 标准接口总线和串行通讯硬件设计

+3V~15V: 逻辑 0

-3V~-15V: 逻辑 1

传输距离: < 20m

Page 86: 第 9 章     串行通信

作业

P 234

4 , 5 , 7 , 8