PC机与单片机的通讯技术
第二章 单片机串行通信概述
目录
个人计算机中的串行接口
串行通信的基本概念
串行通信的接口标准
单片机中的串行口
单片机中的串行口
串行口的结构和控制
80C51内部有一个可编程全双工串行通信接口。该部件不仅能
同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。
图 80C51串行口结构框图
发送
SBUF
(99H)
接收
SBUF
(99H)
同
步
时
钟
门电路
发送控制器
接收控制器
输入移位寄存器
串
行
口
控
制
寄
存
器
(98H)
内
部
总
线
≥1串行口中
断
TI
RI
TXD(
)
RXD(
)
单片机中的串行口
串行口的结构和控制
2. 串行控制寄存器SCON
串行控制寄存器SCON用于设置串行口的工作方式、
监视串行口的工作状态、控制发送与接收的状态等。它是
一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。
其格式如图所示。
单片机中的串行口
串行口的结构和控制
SM0 SM1:串行口工作方式选择位。其状态组合所对应
的工作方式如表所示。
单片机中的串行口
串行口的结构和控制
SM2:多机通信控制器位。在方式0中,SM2必须设成0。在方
式1中,当处于接收状态时,若SM2=1,则只有接收到有效的
停止位“1”时,RI才能被激活成“1”(产生中断请求)。在
方式2和方式3中,若SM2=0,串行口以单机发送或接收方式工
作,TI和RI以正常方式被激活并产生中断请求;若SM2=1,
RB8=1时,RI被激活并产生中断请求。
REN:串行接受允许控制位。该位由软件置位或复位。当
REN=1,允许接收;当REN=0,禁止接收。
单片机中的串行口
串行口的结构和控制
TB8:方式2和方式3中要发送的第9位数据。该位由软
件置位或复位。在方式2和方式3时,TB8是发送的第9
位数据。在多机通信中,以TB8位的状态表示主机发
送的是地址还是数据:TB8=1表示地址,TB8=0表示数
据。TB8还可用作奇偶校验位。
RB8:接收数据第9位。在方式2和方式3时,RB8存放
接收到的第9位数据。RB8也可用作奇偶校验位。在方
式1中,若SM2=0,则RB8是接收到的停止位。在方式0
中,该位未用。
单片机中的串行口
串行口的结构和控制
TI:发送中断标志位。TI=1,表示已结束一帧数据发送,可
由软件查询TI位标志,也可以向CPU申请中断。
注意:TI在任何工作方式下都必须由软件清0。
RI:接收中断标志位。RI=1,表示一帧数据接收结束。可
由软件查询RI位标志,也可以向CPU申请中断。
注意:RI在任何工作方式下也都必须由软件清0。
在AT89C51中,串行发送中断TI和接收中断RI的中断入
口地址是同是0023H,因此在中断程序中必须由软件查询
TI和RI的状态才能确定究竟是接收还是发送中断,进而作出
相应的处理。单片机复位时,SCON所有位均清0。
单片机中的串行口
串行口的结构和控制
3、电源控制寄存器PCON
PCON:串行口波特率倍增位。在工作方式1~工
作方式3时,若SMOD=1,则串行口波特率增加一倍。
若SMOD=0,波特率不加倍。系统复位时,SMOD=0。
单片机中的串行口
串行口的工作方式
80C51串行通信共有4种工作方式,它们分别是方式0、
方式1、方式2和方式3,由串行控制寄存器SCON中的
SM0 SM1决定,如表所示。
单片机中的串行口
串行口的工作方式
一、方式0
方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行
输入或输出口。数据由RXD()引脚输入或输出,同步移位脉冲由
TXD()引脚输出。发送和接收均为8位数据,低位在先,高位在后。
波特率固定为fosc/12。
(1)发送:TI=0时,将一个数据写入串行口发送缓
冲器SBUF时,8位数据由低位到高位从RXD引脚送
出,TXD发送同步脉冲。发送完后,由硬件置位TI。
(2)接收:RI=0,REN=1时启动接收,数据从
RXD输入,TXD输出同步脉冲。8位数据接收完,
由硬件置位RI。
单片机中的串行口
串行口的工作方式
1、方式0 发送
2、方式0 接收
单片机中的串行口
串行口的工作方式
二、方式1
方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据
接收引脚,传送一帧数据的格式如图所示。
其中1位起始位,8位数据位,1位停止位。
单片机中的串行口
串行口的工作方式
二、方式1
(1) 数据发送
当TI=0时,执行“MOV SBUF,A”指令后开始发送,
由硬件自动加入起始位和停止位,构成一帧数据,然后
由TXD端串行输出。发送完后,TXD输出线维持在“1”
状态下,并将SCON中的TI置1,表示一帧数据发送完毕。
单片机中的串行口
串行口的工作方式
二、方式1
(2) 数据接收
RI=0,REN=1时,接收电路以波特率的16倍速度采样
RXD引脚,如出现由“1”变“0”跳变,认为有数据正在发送。
在接收到第9位数据(即停止位)时,必须同时满足以下两个
条件:RI=0和SM2=0或接收到的停止位为“1”,才把接收到的数据
存入SBUF中,停止位送RB8,同时置位RI。若上述条件不满足,
接收到的数据不装入SBUF被舍弃。在方式1下,SM2应设定为0。
单片机中的串行口
串行口的工作方式
三、方式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的溢出率决定。
单片机中的串行口
串行口的工作方式
1、方式2和方式3发送
发送开始时,先把起始位0输出到TXD引脚,然后发送移位
寄存器的输出位(D0)到TXD引脚。每一个移位脉冲都使输出
移位寄存器的各位右移一位,并由TXD引脚输出。
第一次移位时,停止位“1”移入输出移位寄存器的第9位上
,以后每次移位,左边都移入1。当停止位移至输出位时,左边
其余位全为1,检测电路检测到这一条件时,使控制电路进行最
后一次移位,并置TI=1,向CPU请求中断。
单片机中的串行口
串行口的工作方式
2、方式2和方式3输入
接收时,数据从右边移入输入移位寄存器,在起始位0移
到最左边时,控制电路进行最后一次移位。当RI=0,且
SM2=0(或接收到的第9位数据为1)时,接收到的数据装
入接收缓冲器SBUF和RB8(接收数据的第9位),置RI=1
,向CPU请求中断。如果条件不满足,则数据丢失,且不置
位RI,继续搜索RXD引脚的负跳变。
单片机中的串行口
波特率的计算与串行口初始化
1、波特率的计算
⑴方式0的波特率是固定的:
波特率=fosc/12
⑵方式2波特率取决于SMOD
波特率=2SMOD/32× T1的溢出率
方式2波特率=2SMOD/64× fosc
SMOD=0时,波特率=fosc/64,
SMOD=1时,波特率=fosc/32
⑶方式1、3波特率取决于T1的溢出率
SMOD=0时,波特率= T1的溢出率/32,SMOD=1
时,波特率= T1的溢出率/16
单片机中的串行口
波特率的计算与串行口初始化
1、波特率的计算
T1T1的溢出率的溢出率==计数速度计数速度//((22KK--初值)初值)
KK为定时器为定时器T1T1的位数的位数
T1T1为定时器时:为定时器时:
T1T1的溢出率的溢出率=fosc/[ 12×=fosc/[ 12×((22KK--初值)初值)]]
工作于方式工作于方式11、、33时波特率:时波特率:
波特率波特率=2=2SMODSMOD/32×T1/32×T1的溢出率的溢出率
= 2= 2SMOD SMOD / 32/ 32 ×× fosc/[12×fosc/[12×((256-256-初值)初值)]]
单片机中的串行口
波特率的计算与串行口初始化
1、波特率的计算
在单片机的应用中,常用的晶振频率为:12MHz和
。所以,选用的波特率也相对固定。常用的串行
口波特率以及各参数的关系如表所示。
单片机中的串行口
波特率的计算与串行口初始化
2、串行口的初始化
串行口工作之前,应对其进行初始化,主要是设置产生
波特率的定时器1、串行口控制和中断控制。具体步骤如下:
确定T1的工作方式(编程TMOD寄存器);
计算T1的初值,装载TH1、TL1;
启动T1(编程TCON中的TR1位);
确定串行口控制(编程SCON寄存器);
串行口在中断方式工作时,要进行中断设置(编程IE、IP
寄存器)。
单片机中的串行口
4种方式比较:
方
式
波 特 率 传 送 位 数 发送
端
接收
端
用 途
0 1/12 fosc
(固定不变)
8(数据) RXD RXD 接移位寄
存器,扩
充并口
1 2
SMOD/32 T
1
溢出率
10(起始位、8位数据
位、 停止位)
TXD RXD 单机通讯
2 2
SMOD/64 fosc 11(第9位为1:地址;
为0:数据)
TXD RXD 多机通讯
3 2
SMOD/32 T
1
溢出率
11位
(同方式2)
TXD RXD 多机通讯
单片机中的串行口
例子 将89C51单片机的TXD接RXD,实现单片机串行口数据自发自收,
并将接收的数据通过P1口输出到发光二极管显示。系统时钟频率
为,自发自收的波特率为2400bps。编写程序:要
求单片机串行口工作在方式1,从TXD发送数据到0x55H,从
RXD将该数据读回,并送P1口通过8个发光二极管显示。
单片机中的串行口
#include<>
#define uchar unsigned char
#define uint unsigned int
main(){
uchar i=0x55; uint j=0;
TMOD=0x20; //设置定时器1工作在模式2
TL1=0xF4; TH1=0xF4; //设置定时器1初值
PCON=0x00;
SCON=0x50; //选择工作方式1,使能收发功能
TR1=1; //启动定时器1
while(1) {
SBUF=i; //发送数据
while(! TI); //等待发送数据返回
RI=0; //软件将标志位RI清0
TI=0; //将标志位TI清0
i=SBUF; //读取接收数据
P1=i; //送入P1口显示
i=~i; //将发送数取反
for(j=0;j<12500;j++);}}
单片机中的串行口
小 结
① 用于串行口通信控制的主要寄存器是SCON,可以设定4
种工作方式、接收允许、发送/接收标志、2个可编程位、1
个多机通讯位。
② 串行通信方式0,主要用于单片机I/O接口的扩展,在数
据的输入和输出控制中,RXD作为数据线,TXD输出同步时
钟脉冲。而且,在方式0下,以8位数据为一帧,不设起始
位和停止位,先发送或接收最低位。
③ 方式1的数据帧格式是10位,其中,一个起始位,8个数
据位和一个停止位。发送时由SBUF = counter启动发送过
程;发送完成后由硬件TI置位;接收时只要接收位REN=1即
可启动接收过程,接收后由硬件TI置位,数据存入SBUF。
单片机中的串行口
小 结
④ 方式2和方式3的数据帧格式是11位,包括一个起始
位,8个数据位,一个可编程位,一个停止位。方式2和
方式3主要用于多机主从式通信。
单片机中的串行口
多机通信
双机通信时,两台单片机地位是平等的,此
时,两台单片机的串行口均可工作于方式1。多
机通信是指一台主机和多台从机之间的通信。而
在多机通信中,有主机和从机之分,多机通信时,
主机发送的信息可以传送到各个从机,而各从机
发送的信息只能被主机接收,其中的主要问题是
怎样识别地址和怎样维持主机与指定从机之间的
通信。
单片机中的串行口
多机通信
1. 多机通信连接电路
在串行方式2或方式3条件下,可实现一台
主机和多台从机之间的通信,其连接电路如图
所示。
图 多机通信连接图
TXD RXD TXD RXD TXD RXD
89C2051 89C2051 89C2051
从机1 从机2 从机n
TXD
RXD
89C51
主机
…
单片机中的串行口
多机通信
2. 多机通信原理
多机通信时,主机向从机发送的信息分为地址
帧和数据帧两类,以第9位可编程TB8作区分标志,
TB8=0,表示数据;TB8=1,表示地址。多机通信充
分利用了89C51串行控制寄存器SCON中的多机通信
控制位SM2的特性。当SM2=1时,CPU接收的前8位
数据是否送入SBUF取决于接收的第9位RB8的状态:
若RB8=1,将接收到的前8位数据送入SBUF,并置位
RI产生中断请求;
单片机中的串行口
多机通信
RB8=0,则接收到的前8位数据丢弃。即当从机
SM2=1时,从机只能接收主机发送的地址帧
(RB8=1),对数据帧(RB8=0)不予理睬。当从机
SM2=0时,从机可接收主机发送的所有信息。
通信开始时,主机首先发送地址帧。由于各
从机的SM2=1和RB8=1,所以各从机均分别发出
串行接收中断请求,通过串行中断服务程序来判
断主机发送的地址与本从机地址是否相符。如果
相符,则把自身的SM2清0,以准备接收随后传
单片机中的串行口
多机通信
送来的数据帧。其余从机由于地址不符,则仍
保持SM2=1状态,因而不能接收主机传送来的数
据帧。这就是多机通信中主、从机一对一的通信
情况。这种通信只能在主、从机之间进行,如果
想在两个从机之间进行通信,则要通过主机作中
介才能实现。
单片机中的串行口
多机通信
3. 多机通信过程
(1) 主、从机工作于方式2或方式3,主机置 SM2=0
,REN=1;从机置SM2=1,REN=1。
(2) 主机置位TB8=1,向从机发送寻址地址帧,各
从机因满足接收条件(SM2=1,RB8=1),从而接收
到主机发来的地址,并与本机地址进行比较。
(3) 地址一致的从机(被寻址机)将SM2清0,并向
主机返回地址,供主机核对。地址不一致的从
机(未被寻址机)保持SM2=1。
单片机中的串行口
多机通信
(4) 主机核对返回的地址,若与此前发出的地址一
致则准备发送数据;若不一致则返回(2)重新发
送地址帧。
(5) 主机向从机发送数据,此时主机的TB8=0,只
有被选中的那台从机能接收到该数据。其他从
机则舍弃该数据。
(6) 本次通信结束后,从机重新置SM2=1,等待
下次通信。
单片机中的串行口
多机通信
开始
设置启动T1
串口方式3,SM2=0
REN=1,TB8=1
R0置30H(首址)
R1置01H(从机地址)
调发送子程序
停机
其他功能
主程序框图
TRAN
发送地址
接收从机地址
发送
返回
发送子程序框图
地址相同?
N
Y