本章分为三节,主要介绍:
6.2 80C51的串行口
6.1 计算机串行通信基础
6.3 单片机串行口应用举例
6.1 计算机串行通信基础
?随着多微机系统的广泛应用和计算机网络技
术的普及,计算机的通信功能愈来愈显得重要。
计算机通信 是指计算机与外部设备或计算机与
计算机之间的信息交换 。
?通信有 并行通信 和 串行通信 两种方式。在多
微机系统以及现代测控系统中信息的交换多采
用串行通信方式。
?计算机通信 是将计算机技术和通信技术的相结合,
完成计算机与外部设备或计算机与计算机之间的信
息交换 。可以 分为两大类:并行通信与串行通信。
?并行通信 通常是将数据字节的各位用多条数据线同
时进行传送 。
接
收
设
备
发
送
设
备
询 问
应 答
1
0
1
0
1
1
0
0
8 位 同 时 传 送
并行通信 控制简单、传输速度快;由于传输线较多,长距离
传送时成本高且接收方的各位同时接收存在困难。
串行通信 是将数据字节分成一位一位的形
式在一条传输线上逐个地传送。
串行通信的特点,传输线少,长距离传送时
成本低,且可以利用电话网等现成的设备,
但数据的传送控制比并行通信复杂。
接
收
设
备
发
送
设
备
8 位 顺 次 传 送
D 0
D 7
6.1.1 串行通信的基本概念
一、异步通信与同步通信
1、异步通信
异步通信 是指通信的 发送与接收设备使用各自的时钟
控制数据的发送和接收过程。为使双方的收发协调,要求
发送和接收设备的时钟尽可能一致。
1 1 1 0 0 1 1 0
0
1 0 1 0 0 1 0 0
1
发
送
设
备
接
收
设
备
1 0 1 0 0 1 0 0
0 1
1 1 1 0 0 1 1 0
0 1
间 隙 任 意
异步通信是 以字符(构成的帧)为
单位进行传输,字符与字符之间的间
隙(时间间隔)是任意的,但每个字
符中的各位是以固定的时间传送的,
即 字符之间是异步的 (字符之间不一
定有“位间隔”的整数倍的关系),
但 同一字符内的各位是同步的 (各位
之间的距离均为“位间隔”的整数
倍)。
异步通信的数据格式,
停
止
位
数 据 位
校
验
位
起
始
位
L S B M S B
空
闲
下 一 字 符
起 始 位
空
闲
一 个 字 符 帧
异步通信的特点,不要求收发双方时钟的
严格一致,实现容易,设备开销较小,但
每个字符要附加 2~ 3位用于起止位,各帧
之间还有间隔,因此传输效率不高。
2、同步通信
同步通信时要建立发送方时钟对接收方时钟的直接控制,
使双方达到完全同步。此时,传输数据的位之间的距离均
为“位间隔”的整数倍,同时传送的字符间不留间隙,即
保持位同步 关系,也保持字符同步 关系。发送方对接收方
的同步可以通过两种方法实现。
计
算
机
乙
计
算
机
甲
0 1 1 0 1
数 据
时 钟
计
算
机
乙
计
算
机
甲
0 1 1 0 1
数 据
时 钟
数 据 + 时 钟
外同步 自同步
面向字符的同步格式,
此时,传送的数据和控制信息都必须由规定的字符集
(如 ASCII码)中的字符所组成。图中 帧头为 1个或 2个同
步字符 SYN( ASCII码为 16H)。 SOH为序始 字符
( ASCII码为 01H),表示标题的开始,标题 中包含源地
址、目标地址和路由指示等信息。 STX为文始 字符
( ASCII码为 02H),表示传送的数据块开始。 数据块 是
传送的正文内容,由多个字符组成。数据块后面是 组终
字符 ETB( ASCII码为 17H)或 文终字符 ETX( ASCII码
为 03H)。然后是 校验码 。 典型的面向字符的同步规程
如 IBM的二进制同步规程 BSC。
S Y N S Y N S O H S T X E T B / E T X
块 校 验
标 题 数 据 块
面向位的同步格式,
此时,将数据块看作数据流,并用序列 01111110作为开始
和结束标志。为了避免在数据流中出现序列 01111110时引起
的混乱,发送方总是在其发送的数据流中每出现 5个连续的 1
就插入一个附加的 0;接收方则每检测到 5个连续的 1并且其后
有一个 0时,就删除该 0。
典型的面向位的同步协议如 ISO的高级数据链路控制规程
HDLC和 IBM的同步数据链路控制规程 SDLC。
同步通信的特点 是以特定的位组合,01111110”作为帧的
开始和结束标志,所传输的一帧数据可以是任意位。所以传
输的效率较高,但实现的硬件设备比异步通信复杂。
8 位 8 位 8 位 8 位1 6 位≥ 0 位
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0校 验 场信 息 场
控 制 场地 址 场
二、串行通信的传输方向
1、单工
单工 是指数据传输仅能沿 一个方向,不能实现反向传输。
2、半双工
半双工 是指数据传输可以沿 两个方向,但需要分时进行。
3、全双工
全双工 是指数据可以 同时进行双向 传输。
接 收发 送
时 间 1
时 间 2
发 送
接 收 发 送
接 收
发 送
接 收 发 送
接 收
单工 半双工 全双工
三、信号的调制与解调
利用调制器( Modulator) 把数字信号转换成
模拟信号,然后送到通信线路上去,再由解调器
( Demodulator)把从通信线路上收到的 模拟信
号转换成数字信号 。由于通信是双向的,调制器
和解调器合并在一个装置中,这就是调制解调器
MODEM。
D C E
D T E
电 话 网
D C E
D T E
R S - 2 3 2 C R S - 2 3 2 C
四、串行通信的错误校验
1,奇偶校验
在发送数据时,数据位尾随的 1位为奇偶校验位( 1或 0)。奇
校验时,数据中,1”的个数与校验位,1”的个数之和应为奇
数;偶校验时,数据中,1”的个数与校验位,1”的个数之和
应为偶数。接收字符时,对,1”的个数进行校验,若发现不
一致,则说明传输数据过程中出现了差错。
3,循环冗余校验
这种校验是通过某种数学运算实现有效信息与校验位之间的
循环校验,常用于对磁盘信息的传输、存储区的完整性校验
等。这种校验方法纠错能力强,广泛应用于同步通信中。
2,代码和校验
代码和校验是发送方将所发数据块求和(或各字节异或),
产生一个字节的校验字符(校验和)附加到数据块末尾。接
收方接收数据同时对数据块(除校验字节外)求和(或各字
节异或),将所得的结果与发送方的“校验和”进行比较,
相符则无差错,否则即认为传送过程中出现了差错。
五、传输速率与传输距离
1、传输速率
比特率 是 每秒钟传输二进制代码的位数,单位是:
位/秒( bps)。如每秒钟传送 240个字符,而每个
字符格式包含 10位 (1个起始位,1个停止位,8个数
据位 ),这时的比特率为:
10位 × 240个 /秒 = 2400 bps
波特率 表示 每秒钟调制信号变化的次数,单位是:
波特( Baud)。
波特率和比特率不总是相同的,对于将数字信号
1或 0直接用两种不同电压表示的所谓基带传输,比
特率和波特率是相同的。 所以,我们也经常用波特
率表示数据的传输速率。
2、传输距离与传输速率的关系
串行接口或终端直接传送串行信息位流的
最大距离与传输速率及传输线的电气特性有
关。当传输线使用每 0.3m(约 1英尺)有
50PF电容的非平衡屏蔽双绞线时,传输距离
随传输速率的增加而减小。当比特率超过
1000 bps 时,最大传输距离迅速下降,如
9600 bps 时最大距离下降到只有 76m(约
250英尺)。
6.1.2 串行通信接口标准
一,RS-232C接口
RS-232C是 EIA(美国电子工业协会) 1969年修订 RS-
232C标准。 RS-232C定义了数据终端设备( DTE)与数据
通信设备( DCE)之间的物理接口标准。
1、机械特性
RS-232C接口规定使用 25针连接器,连接器的尺寸及每个
插针的排列位置都有明确的定义。(阳头)
96
51
2 5
1 4
1 31
2、功能特性
4、过程特性
过程特性规定了信号之间的时序关系,以便正
确地接收和发送数据 。
远程通信连接
计
算
机
计
算
机
M
O
D
E
M
M
O
D
E
M
T X D
R X D
R T S
T X D
R X D
R T S
D S R
电 话 线
D S R
近程通信连接
计
算
机
乙
计
算
机
甲
T X D T X D
R X D
R X D
计
算
机
乙
计
算
机
甲
T X D T X D
R X D
R X D
4
5
6
2 0
4
5
6
2 0
5,RS-232C电平与 TTL电平转换驱动电路1
2
3
4
5
6
8
9
1 0
1 1
1 2
1 3
7
+ 1 2 V
- 1 2 V
R S 2 3 2
电 平
T T L
电 平
1
2
4
5
8
9
1 0
1 1
1 2
1 3
7
+ 5 V
T T L
电 平
R S 2 3 2
电 平
1 4
6
3
M C 1 4 8 8
M C 1 4 8 9
1
2
3
4
5
6
8
9
1 0
1 1
1 2
1 3
7
+ 1 2 V
- 1 2 V
T T L
电 平
1
2
4
5
8
9
1 0
1 1
1 2
1 3
7
+ 5 V
1 4
6
3
T T L
电 平
R S 2 3 2
电 平
地
M C 1 4 8 8
M C 1 4 8 9
6、采用 RS-232C接口存在的问题
1,传输距离短,传输速率低
RS-232C总线标准受电容允许值的约束,使用时传输距离
一般不要超过 15米(线路条件好时也不超过几十米)。最高传
送速率为 20Kbps。
2,有电平偏移
RS-232C总线标准要求收发双方共地。通信距离较大时,
收发双方的地电位差别较大,在信号地上将有比较大的地电流
并产生压降。
3,抗干扰能力差
RS-232C在电平转换时采用单端输入输出,在传输过程中
当干扰和噪声混在正常的信号中。为了提高信噪比,RS-232C
总线标准不得不采用比较大的电压摆幅。
二, RS-422A接口
RS-422A输出驱动器为双端平衡驱动器 。如果其中一条
线为逻辑,1”状态,另一条线就为逻辑,0”,比采用单端不
平衡驱动对电压的放大倍数大一倍。 差分电路 能从地线干扰
中拾取有效信号,差分接收器可以分辨 200mV以上电位差。
若传输过程中混入了干扰和噪声,由于差分放大器的作用,
可使干扰和噪声相互抵消。因此可以避免或大大减弱地线干
扰和电磁干扰的影响。 RS-422A传输速率( 90Kbps)时,
传输距离可达 1200米。
S N 7 5 1 7 4
S N 7 5 1 7 5
S N 7 5 1 7 4S N 7 5 1 7 5
电 平
T T L
电 平
T T L
双 向 需 4 条 线
+ 5 V
+ 5 V
三, RS-485接口
RS-485是 RS-422A的变型,RS-422A用于全双工,而
RS-485则用于半双工。 RS-485是一种 多发送器 标准,在通
信线路上最多可以使用 32 对差分驱动器 /接收器。如果在一个
网络中连接的设备超过 32个,还可以使用中继器。
RS-485的信号传输采用两线间的电压来表示逻辑 1和逻辑
0。由于发送方需要 两根传输线,接收方也需要两根传输线。
传输线采用差动信道,所以它的干扰抑制性极好,又因为它
的阻抗低,无接地问题,所以 传输距离可达 1200米,传输速
率可达 1Mbps。
电 平
T T L
电 平
T T L
双 向 仅 需 2 条 线
RS-485是一点对多点的通信接口,一般
采用 双绞线 的结构。普通的 PC机一般不带
RS485接口,因此要使用 RS-232C/RS-485转
换器。对于单片机可以通过芯片 MAX485来
完成 TTL/RS-485的电平转换。在计算机和单
片机组成的 RS-485通信系统中,下位机由单
片机系统组成,上位机为普通的 PC机,负责
监视下位机的运行状态,并对其状态信息进
行集中处理,以图文方式显示下位机的工作
状态以及工业现场被控设备的工作状况。系
统中各节点(包括上位机)的识别是通过设
置不同的站地址来实现的。
6.2 80C51的串行口
有两个物理上独立的接收、发送缓冲器 SBUF,它们占
用同一地址 99H ;接收器是双缓冲结构 ;发送缓冲器,因
为发送时 CPU是主动的,不会产生重叠错误。
6.2.1 80C51串行口的结构
≥ 1
S B U F
发 送 控 制 器
接 收 控 制 器
移 位 寄 存 器
控 制 门
T I
R I
A
T X D
R X D
去 串 口 中 断
S M O D
0
1
T H 1 T L 1
÷ 2
÷ 1 6
S B U F
T 1 溢 出 率
SCON 是一个特殊功能寄存器,用以设定串行口的工
作方式、接收 /发送控制以及设置状态标志:
6.2.2 80C51串行口的控制寄存器
SM0和 SM1为工作方式选择位,可选择四种工作方式:
● SM2,多机通信控制位,主要用于方式 2和方式 3。
当 接收机的 SM2=1时可以利用收到的 RB8来控制是否
激活 RI( RB8= 0时不激活 RI,收到的信息丢弃;
RB8= 1时收到的数据进入 SBUF,并激活 RI,进而在
中断服务中将数据从 SBUF读走)。 当 SM2=0时,不
论收到的 RB8为 0和 1,均可以使收到的数据进入
SBUF,并激活 RI(即此时 RB8不具有控制 RI激活的
功能)。通过控制 SM2,可以实现多机通信。
在方式 0时,SM2必须是 0。在方式 1时,若 SM2=1,
则只有接收到有效停止位时,RI才置 1。
● REN,允许串行接收位 。由软件置 REN=1,则启动
串行口接收数据;若软件置 REN=0,则禁止接收。
● TB8,在方式 2或方式 3中,是发送数据的
第九位,可以用软件规定其作用。可以用作
数据的奇偶校验位,或在多机通信中,作为
地址帧 /数据帧的标志位。
在方式 0和方式 1中,该位未用。
● RB8,在方式 2或方式 3中,是接收到数据
的第九位,作为奇偶校验位或地址帧 /数据帧
的标志位。在方式 1时,若 SM2=0,则 RB8
是接收到的停止位。
● TI,发送中断标志位 。在方式 0时,当串行
发送第 8位数据结束时,或在其它方式,串
行发送停止位的开始时,由内部硬件使 TI置 1,
向 CPU发中断申请。在中断服务程序中,必
须用软件将其清 0,取消此中断申请。
● RI,接收中断标志位 。在方式 0时,当串
行接收第 8位数据结束时,或在其它方式,
串行接收停止位的中间时,由内部硬件使 RI
置 1,向 CPU发中断申请。也必须在中断服
务程序中,用软件将其清 0,取消此中断申
请。
PCON中只有一位 SMOD与串行口工作有关,
SMOD( PCON.7) 波特率倍增位。在串行口方式 1、
方式 2、方式 3时,波特率与 SMOD有关,当 SMOD=1时,
波特率提高一倍。复位时,SMOD=0。
6.2.3 80C51串行口的工作方式
一、方式 0
方式 0时,串行口为同步移位寄存器的输入输出方式。主
要用于扩展并行输入或输出口。数据由 RXD( P3.0)引脚
输入或输出,同步移位脉冲由 TXD( P3.1)引脚输出。发
送和接收均为 8位数据,低位在先,高位在后。波特率固定
为 fosc/12。
1、方式 0输出
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
写 入 S B U F
R X D ( 数 据 )
T X D ( 移 位 脉 冲 )
T I ( 中 断 标 志 )
2、方式 0输入
R E N = 1
R X D ( 数 据 输 入 )
T X D ( 移 位 脉 冲 )
R I = 0
D 0 D 1 D 2 D 3
D 4
D 5 D 6 D 7
方式 0接收和发送电路
7 4 L S 1 6 4
R X D
T X D
P 1, 0
8 0 C 5 1
C L RC L K
A
B
G N D
7 4 L S 1 6 5
R X D
T X D
P 1, 0
8 0 C 5 1
S / LC L K
Q
G N D
二、方式 1
方式 1是 10位数据的异步通信口。 TXD为数据发送引脚,
RXD为数据接收引脚,传送一帧数据的格式如图所示。其中 1
位起始位,8位数据位,1位停止位。
停
止
位
数 据 位 8 位
起
始
位
L S B M S B
空
闲
空
闲
D 0
D 7
1 帧 共 1 0 位
1、方式 1输出
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
写 入 S B U F
停 止 位
T X D
T I ( 中 断 标 志 )
起 始
2、方式 1输入
用软件置 REN为 1时,接收器以所选择波特率的 16倍速率采
样 RXD引脚电平,检测到 RXD引脚输入电平发生负跳变时,则
说明起始位有效,将其移入输入移位寄存器,并开始接收这一
帧信息的其余位。接收过程中,数据从输入移位寄存器右边移
入,起始位移至输入移位寄存器最左边时,控制电路进行最后
一次移位。当 RI=0,且 SM2=0(或接收到的停止位为 1)时,
将接收到的 9位数据的前 8位数据装入接收 SBUF,第 9位(停
止位)进入 RB8,并置 RI=1,向 CPU请求中断。
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
停 止 位
R X D
R I ( 中 断 标 志 )
起 始
位 采 样 脉 冲
三、方式 2和方式 3
方式 2或方式 3时为 11位数据的异步通信口。 TXD为数据发
送引脚,RXD为数据接收引脚 。
方式 2和方式 3时起始位 1位,数据 9位(含 1位附加的第 9位,
发送时为 SCON中的 TB8,接收时为 RB8),停止位 1位,一
帧数据为 11位。方式 2的波特率固定为晶振频率的 1/64或 1/32,
方式 3的波特率由定时器 T1的溢出率决定。
停
止
位
数 据 位 9位
起
始
位
LSB MSB
空
闲
空
闲
D0
D7
1帧 共 11位
RB8/TB8
1、方式 2和方式 3输出
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
写 入 S B U F
停 止 位
T X D
T I ( 中 断 标 志 )
起 始
T B 8
发送开始时,先把起始位 0输出到 TXD引脚,然后发送移
位寄存器的输出位( D0)到 TXD引脚。每一个移位脉冲都
使输出移位寄存器的各位右移一位,并由 TXD引脚输出。
第一次移位时,停止位,1”移入输出移位寄存器的第 9位
上,以后每次移位,左边都移入 0。当停止位移至输出位时,
左边其余位全为 0,检测电路检测到这一条件时,使控制电
路进行最后一次移位,并置 TI=1,向 CPU请求中断。
2、方式 2和方式 3输入
接收时,数据从右边移入输入移位寄存器,在起
始位 0移到最左边时,控制电路进行最后一次移位。
当 RI=0,且 SM2=0(或接收到的第 9位数据为 1)时,
接收到的数据装入接收缓冲器 SBUF和 RB8(接收数
据的第 9位),置 RI=1,向 CPU请求中断。如果条件
不满足,则数据丢失,且不置位 RI,继续搜索 RXD
引脚的负跳变。
R I ( 中 断 标 志 )
位 采 样 脉 冲
D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7
停 止 位
R X D
起 始
R B 8
四、波特率的计算
在串行通信中,收发双方对发送或接收数据的
速率要有约定。通过软件可对单片机串行口编程为
四种工作方式,其中方式 0和方式 2的波特率是固
定的,而方式 1和方式 3的波特率是可变的,由定
时器 T1的溢出率来决定。
串行口的四种工作方式对应 三种波特率 。由于
输入的移位时钟的来源不同,所以,各种方式的波
特率计算公式也不相同。
方式 0的波特率 = fosc/12
方式 2的波特率 =( 2SMOD/64) · fosc
方式 1的波特率 =( 2SMOD/32) ·( T1溢出率)
方式 3的波特率 =( 2SMOD/32) ·( T1溢出率)
当 T1作为波特率发生器时,最典型的用法是使 T1工作在自动再装入
的 8位定时器方式(即方式 2,且 TCON的 TR1=1,以启动定时器)。这
时溢出率取决于 TH1中的计数值。
T1 溢出率 = fosc /{12× [256 -( TH1) ]}
在单片机的应用中,常用的晶振频率为,12MHz和 11.0592MHz。所
以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系
如表所示。
串行口工作之前,应对其进行初始化,主
要是设置产生波特率的定时器 1、串行口控
制和中断控制。具体步骤如下:
?确定 T1的工作方式 (编程 TMOD寄存器);
?计算 T1的初值,装载 TH1,TL1;
?启动 T1(编程 TCON中的 TR1位);
?确定 串行口控制 (编程 SCON寄存器);
串行口在中断方式工作时,要进行中断设置
(编程 IE,IP寄存器)。
6.3 单片机串行口应用举例
在计算机分布式测控系统中,经常要利用
串行通信方式进行数据传输。 80C51单片机的
串行口为计算机间的通信提供了极为便利的条
件。利用单片机的串行口还可以方便地扩展键
盘和显示器,对于简单的应用非常便利。这里
仅介绍单片机串行口在通信方面的应用,关于
键盘和显示器的扩展将在下一章介绍。
6.3.1 单片机与单片机的通信
一、点对点的通信
1、硬件连接
R 2 I N
T 2 O U T
T X D
R X D
M A X 2 3 2 A
T 1 I N
G N D
R 2 O U T
T 1 O U T
8 0 C 5 1
T X D
R X D
8 0 C 5 1
G N D
R 1 I N
T 2 O U T
M A X 2 3 2 A
G N D
R 2 I N
R 1 O U T
系 统 1 系 统 2
T 2 I N
二、应用程序
设 置 波 特 率
启 动 定 时 器 T 1
开 始
设 置 串 口 工 作 方 式
2 号 机 允 许 发 送?
N
发 送, E 1, 联 络 信 号
指 针 初 始 化
校 验 和 清 0
发 送 1 个 数 据 字 节
求 校 验 和
数 据 块 发 送 完 毕?
N
Y
Y
发 送 校 验 和
2 号 机 接 收 正 确?
N
Y
返 回
设 置 波 特 率
启 动 定 时 器 T 1
开 始
设 置 串 口 工 作 方 式
1 号 机 请 求 发 送?
N
等 待 1 号 机 联 络
指 针 初 始 化
校 验 和 清 0
接 收 1 个 数 据 字 节
求 校 验 和
数 据 块 接 收 完 毕?
N
Y
Y
比 较 校 验 和
2 号 机 接 收 正 确?
N
Y
返 回
发 送 应 答 信 号
发 送 出 错 标 志
设 1号机是发送方,2号机是接收方。 当 1号机 发送时,先
发送一个,E1”联络信号,2号机收到后回答一个,E2”应答信
号,表示同意接收。当 1号机收到应答信号,E2”后,开始发
送数据,每发送一个数据字节都要计算“校验和”,假定数据
块长度为 16个字节,起始地址为 40H,一个数据块发送完毕后
立即发送“校验和”。 2号机接收数据 并转存到数据缓冲区,
起始地址也为 40H,每接收到一个数据字节便计算一次“校验
和”,当收到一个数据块后,再接收 1号机发来的“校验和”,
并将它与 2号机求出的校验和进行比较。若两者相等,说明接
收正确,2号机回答 00H;若两者不相等,说明接收不正确,2
号机回答 0FFH,请求重发。 1号机接到 00H后结束发送 。若收
到的答复非零,则重新发送数据一次。双方约定采用 串行口方
式 1进行通信,一帧信息为 10位,其中有 1个起始位,8个数据
位和一个停止位;波特率为 2400波特,T1工作在定时器方式 2,
振荡频率选用 11.0592MHZ,查表可得 TH1=TL1=0F4H,
PCON寄存器的 SMOD位为 0。
发送程序清单如下:
ASTART,CLR EA
MOV TMOD,#20H ;定时器 1置为方式 2
MOV TH1,#0F4H ;装载定时器初值,波特率 2400
MOV TL1,#0F4H
MOV PCON,#00H
SETB TR1 ;启动定时器
MOV SCON,#50H ;设定串口方式 1,且准备接收应答信号
ALOOP1,MOV SBUF,#0E1H ;发联络信号
JNB TI,$ ;等待一帧发送完毕
CLR TI ;允许再发送
JNB RI,$ ;等待 2号机的应答信号
CLR RI ;允许再接收
MOV A,SBUF ; 2号机应答后,读至 A
XRL A,#0E2H ;判断 2号机是否准备完毕
JNZ ALOOP1 ; 2号机未准备好,继续联络
ALOOP2,MOV R0,#40H ; 2号机准备好,设定数据块地址指针初值
MOV R7,#10H ;设定数据块长度初值
MOV R6,#00H ;清校验和单元
ALOOP3,MOV SBUF,@R0 ;发送一个数据字节
MOV A,R6
ADD A,@R0 ;求校验和
MOV R6,A ;保存校验和
INC R0
JNB TI,$
CLR TI
DJNZ R7,ALOOP3 ;整个数据块是否发送完毕
MOV SBUF,R6 ;发送校验和
JNB TI,$
CLR TI
JNB RI,$ ;等待 2号机的应答信号
CLR RI
MOV A,SBUF ; 2号机应答,读至 A
JNZ ALOOP2 ; 2号机应答“错误”,转重新发送
RET ; 2号机应答“正确”,返回
接收程序清单如下:
BSTART,CLR EA
MOV TMOD,#20H
MOV TH1,#0F4H
MOV TL1,#0F4H
MOV PCON,#00H
SETB TR1
MOV SCON,#50H ;设定串口方式 1,且准备接收
BLOOP1,JNB RI,$ ;等待 1号机的联络信号
CLR RI
MOV A,SBUF ;收到 1号机信号
XRL A,#0E1H ;判是否为 1号机联络信号
JNZ BLOOP1 ;不是 1号机联络信号,再等待
MOV SBUF,#0E2H ;是 1号机联络信号,发应答信号
JNB TI,$
CLR TI
MOV R0,#40H ;设定数据块地址指针初值
MOV R7,#10H ;设定数据块长度初值
MOV R6,#00H ;清校验和单元
BLOOP2,JNB RI,$
CLR RI
MOV A,SBUF
MOV @R0,A ;接收数据转储
INC R0
ADD A,R6 ;求校验和
MOV R6,A
DJNZ R7,BLOOP2 ;判数据块是否接收完毕
JNB RI,$ ;完毕,接收 1号机发来的校验和
CLR RI
MOV A,SBUF
XRL A,R6 ;比较校验和
JZ END1 ;校验和相等,跳至发正确标志
MOV SBUF,#0FFH ;校验和不相等,发错误标志
JNB TI,$ ;转重新接收
CLR TI
END1,MOV SBUF,#00H
RET
二、多机通信
1、硬件连接
单片机构成的多机系统常采用总线型主从式结构。所谓主从
式,即在数个单片机中,有一个是主机,其余的是从机,从机
要服从主机的调度、支配。 80C31单片机的串行口方式 2和方
式 3适于这种主从式的通信结构。当然采用不同的通信标准时,
还需进行相应的电平转换,有时还要对信号进行光电隔离。在
实际的多机应用系统中,常采用 RS-485串行标准总线进行数
据传输。
T X D
R X D
主 机
T X DR X D
1 号 从 机
T X DR X D
2 号 从 机
T X DR X D
N 号 从 机
? ?
2、通信协议
?所有从机的 SM2位置 1,处于接收地址帧状态。
?主机发送一地址帧,其中 8位是地址,第 9位为地址 /
数据的区分标志,该位置 1表示该帧为地址帧。
?所有从机收到地址帧后,都将接收的地址与本机的
地址比较。对于地址相符的从机,使自己的 SM2位置
0(以接收主机随后发来的数据帧),并把本站地址
发回主机作为应答;对于地址不符的从机,仍保持
SM2=1,对主机随后发来的数据帧不予理睬。
?从机发送数据结束后,要发送一帧校验和,并置第 9
位( TB8)为 1,作为从机数据传送结束的标志。
?主机接收数据时先判断数据接收标志( RB8),若
RB8=1,表示数据传送结束,并比较此帧校验和,若
正确则回送正确信号 00H,此信号命令该从机复位
(即重新等待地址帧);若校验和出错,则发送
0FFH,命令该从机重发数据。若接收帧的 RB8=0,
则存数据到缓冲区,并准备接收下帧信息。
?主机收到从机应答地址后,确认地址是否相符,如
果地址不符,发复位信号(数据帧中 TB8=1);如果
地址相符,则清 TB8,开始发送数据。
?从机收到复位命令后回到监听地址状态( SM2=1)。
否则开始接收数据和命令。
3、应用程序
?主机发送的地址联络信号为,00H,01H,02H, … … (即从机设备地
址),地址 FFH为命令各从机复位,即恢复 SM2=1。
?主机命令编码为,01H,主机命令从机接收数据; 02H,主机命令从机发
送数据。其它都按 02H对待。
RRDY=1:表示从机准备好接收。
TRDY=1:表示从机准备好发送。
ERR=1,表示从机接收的命令是非法的。
程序分为主机程序和从机程序。约定一次传递数据为 16
个字节,以 01H地址的从机为例 。