8串行通信
及串行接口技术
串行通信概述
89C51串行通信接口
串行接口技术
1.通信方式
计算机与外界(计算机与计算机之间、计算机与外
围设备之间)的信息交换称为通信。
并行通信
串行通信
串行通信概述
2
数据位:根据情况可取5位、6位、7
位或8位,低位在前高位在后。
2串行通信
(1)分类(按数据格式分)
异步通信
停止位:通常
可取1位、
位或2位,用于
向接收端表示
一帧字符信息
已发送完毕,
也为发送下一
帧字符作准备。
3
同步通信 *
在同步通信中,同步字符可以采用统一标准字符,也可
由用户约定。
在单同步字符帧结构中,同步字符常采用ASCII码中规定
的SYN(即16H)代码;
在双同步字符帧结构中,同步字符一般采用国际通用标
准代码EB90H。
4
(2)波特率(baud rate)
波特率是串行通信的重要指标,用于表征数据传输
的速度,定义为每秒钟传送二进制数码的位数(bit)
,单位是波特,即1波特=1bit/s(bps)。
【例】某异步通信的传输速率为7200字符帧/分钟,
每个字符帧的长度为10位。则传输速率为:
720010 位 60秒=1200bps
每位传输时间(位宽):
5
(3)串行通信的差错校验
奇偶校验
发送数据时,数据后尾随一位奇偶校验位(0或
1)。当设置为奇校验时,数据中1的个数与校验位1
的个数之和应为奇数;当设置为偶校验时,数据中1
的个数与校验位1的个数之和应为偶数。
接收时,接收方采用与发送方一样的差错校验方
法对接收到的数据进行校验。
和校验
发送方对发送的数据块求和,产生一个字节的校
验和,并将其尾随数据块发送;接收方将接收的数
据求和,将结果与发送方发送的“校验和”进行比
较以判断是否出错。 6
89C5189C51串行通信接口串行通信接口
一、串行通信及接口
1.结构:89C51内部有全双工的异步通讯串行口( UART );两
个独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),一个
用作发送,一个用作接收。发送缓冲器只能写入不能读出;接
收缓冲器只能读出不能写入,两者共用一个字节地址(99H)。
7
2.串行口控制寄存器SCON
用于串行通信的方式选择、接收和发送控制以及串行
口的状态标志指示。
SM0 SM1--串行口工作方式选择位
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0SM1 工作方式 功能描述 波特率
0 0
0 1
1 0
1 1
方式0
方式1
方式2
方式3
8位同步移位寄存器
10位UART
11位UART
11位UART
fosc/12
可变(定时器控制)
fosc/64、fosc/32
可变(定时器控制)
8
SM2:多机通信控制位 *
主要用于方式2和方式3。当串行口以方式2和方式3
接收数据时:
SM2=1,则只有在接收到的第9位数据(RB8)为1时才
将接收到的前8位数据送入SBUF,并置位RI产生中断请
求;否则将接收到的前8位数据丢弃。
SM2=0,则不论第9位数据是0还是1,都将前8位数据
装入SBUF中,并产生中断请求。在方式0,SM2必须为0。
REN:允许接收控制位
REN=0时禁止串行口接收。
REN=1时允许串行口接收。
该位由软件置位或复位。
9
TB8:发送数据位 *
在方式2或方式3时,TB8是发送数据的第9位,根据发送数据
的需要由软件置位或复位。
可作为奇偶校验位(单机通信)。
可在多机通信中作为发送地址帧或数据帧的标志位。多机通
信时,一般约定:发送地址帧时,设置TB8=1;发送数据帧时,
设置TB8=0。在方式0和方式1中,该位未用。
RB8:接收数据位 *
在方式2和方式3时,存放接收数据的第9位。
可以是约定的奇偶校验位。
可以是约定的地址/数据标志位,可根据RB8被置位的情况对
接收到的数据进行某种判断。在多机通信时,若RB8=1,说明
收到的数据为地址帧;RB8=0,说明收到的数据为数据帧。在
方式1下,若SM2=0,则RB8用于存放接收到的停止位方式;方
式0下,该位未用。 10
TI:发送中断标志位
用于指示一帧数据发送完否。
方式0下,发送电路发送完第8位数据时,TI由硬件置位。
其他方式下,TI在发送电路开始发送停止位时置位,这就
是说:TI在发送前必须由软件复位,发送完一帧后由硬件置
位。因此,CPU查询TI状态便可知一帧信息是否已发送完毕。
RI:接收中断标志位
用于指示一帧信息是否接收完。
在方式1下,RI在接收电路接收到第8位数据时由硬件置位。
在其他方式下,RI是在接收电路接收到停止位的中间位置
时置位的,RI也可供CPU查询,以决定CPU是否需要从SBUF中
提取接收到的字符或数据。RI也由软件复位。
11
3.电源控制寄存器PCON
SMOD--串行口波特率倍增位
PCON不可位寻址。可用下列指令设置
SMOD位:
ANL PCON,#7FH ;SMOD=0
ORL PCON,#80H ;SMOD=1
D7 D6 D5 D4 D3 D2 D1 D0
SMOD - - - GF1 GF0 PD IDL
12
4. 4. 串行通信工作方式串行通信工作方式
(1)串行工作方式0 *
工作原理
串行口作为同步移位寄存器使用;
以RXD()端作为数据移位的输入端和输出端;
TXD()端输出移位脉冲;
8位为一帧,不设起始位和停止位,低位在前,高位
在后;帧格式如下:
每个机器周期发送或接收一位,故波特率为fosc/12;
. . . D0 D1 D2 D3 D4 D5 D6 D7 . . .
13
发送时,只需将数据写入串行口缓冲寄存器SBUF,
即启动发送,串行口把8位数据以fosc/12的波特率从
RXD端送出(低位在前),发送完置中断标志TI为
“1”;
接收时,软件置REN=1时,串行口即开始从RXD端
以fosc/12波特率输入数据(低位在前),当接收到8
位数据时,置中断标志RI为“1”,用户可从SBUF
读数据。
应用
串行工作方式0常用于扩展I/O接口。
14
((22)串行工作方式)串行工作方式11
工作原理
串行口作为通用异步接收和发送器(UART)使用;
10位为一帧,帧格式如下:
定时器T1作为波特率发生器,通常选用方式2(自动
重装入初值方式)、定时、禁止中断;
. . 0 D0 D1 D2 D3 D4 D5 D6 D7 1 . .
起始位 停止位
15
波特率={T1溢出率}2SMOD/32
T1溢出周期=(256-初值)12/fosc
T1溢出率=fosc/[12 (256-初值)]
波特率=2SMOD fosc/[384 (256-初值)]
则定时器T1方式2的初值为:
初值=256- 2SMOD fosc/[384 波特率]
发送时,数据从引脚TXD输出,当数据写入串行口缓
冲寄存器SBUF,即启动发送,发送完一帧数据置中
断标志TI为“1”;
接收时,软件置REN=1时,串行口即开始采样RXD
端,当检测到起始位时开始接收一帧数据,接收到停
止位时置中断标志RI为“1”,用户可从SBUF读数据。
16
【例】 由内部RAM单元30H~4FH取出ASCII码数据,在
最高位上加奇偶校验位后由串行口输出,采用10位异步
通信,波特率为1200bit/s,fosc=。
解:由题意可知,应把串行口置为方式1;采用定时器
T1,以方式2工作,作波特率发生器,预置值
(TH1)=(TL1)=0E8H。
初值=256- 2SMOD fosc/[384 波特率]
=256-20 11059200/(384 1200)
=256-24
=0E8H
17
TX: MOV C,P ;设置奇校验位
CPL C
MOV ,C
MOV SBUF,A ;启动串行口发送
JNB TI,$ ;等待发送完
CLR TI ;清TI标志,允许再发送
RET
MOV TMOD,#20H ;设T1为模式2
MOV TL1,#0E8H ;装入时间常数
MOV TH1,#0E8H
SETB TR1 ;启动定时器T1
MOV SCON,#40H ;设串行口为方式1
MOV R0,#30H ;发送数据首地址
MOV R7,#32 ;发送个数
LOOP: MOV A,@R0 ;发送数据送累加器A
LCALL TX ;调发送子程序
INC R0 ;指向下一步个地址
DJNZ R7,LOOP
……
18
工作原理
串行口作为通用异步接收和发送器(UART)使用;
11位为一帧,帧格式如下:
可编程位(第9数据位)D8由软件置“1”或清“0”
,可作检验位,也可作它用。发送方发送时将TB8装
入D8,接收方接收时将D8装入RB8;
波特率=2SMOD fosc/64
. . 0 D0 D1 D2 D3 D4 D5 D6 D7 D8 1 .
.
起始位 停止位
((33)串行工作方式)串行工作方式2 *2 *
19
((44)串行工作方式)串行工作方式3 *3 *
工作原理
串行工作方式3的波特率与方式1相同;其他功能
与方式2完全相同。
20
二、二、 89C51串行通信应用
1.双机串行通信技术
如果两个8031应用系统相距很近,将它们的串行口
直接相连,即可实现双机通信。
AT89S51 AT89S51
()
() ()
()
21
【例】 双机通信
22
ORG 0000H ;发送端程序
LJMP MAIN
ORG 0030H
MAIN:MOV TMOD,#20H ;设T1为模式2
MOV TL1,#0FDH
MOV TH1,#0FDH ;波特率9600
ANL PCON,#7FH ;SMOD=0
SETB TR1 ;启动定时器T1
MOV SCON,#40H ;设串行口为方式1
MOV A,#0FEH
L1:MOV SBUF,A ;发送数据
JNB TI,$ ;发送完?
CLR TI
LCALL D1S ;延时1秒
RL A
SJMP L1 23
ORG 0000H ;接收端程序
LJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H
MOV TMOD,#20H
MOV TL1,#0FDH
MOV TH1,#0FDH ;波特率9600
ANL PCON,#7FH ;SMOD=0
SETB TR1
MOV SCON,#50H ;串口方式1,允许接收
L2: JNB RI,$ ;接收到数据?
CLR RI
MOV A,SBUF
MOV P1,A
SJMP L2
24
相互转换
•232C接口采用EIA电平(负逻辑)
–“0” 电平为+3V~+15V
–“1”电平为-3V~-15V
–实际常用±12V或±15V
标准TTL电平(正逻辑)
“1”电平:+~+5V
“0”电平:0V~
2.单片机与PC机的通信
为了增加通信距离,减少通道及电源干扰,可以在通信
线路上采取光电隔离的方法,利用RS-232C、RS-422或
RS485标准进行双机通信。
25
MAX232 :+5V供电,RS-232驱动器/接收器
单片机
TXD
RXD
PC机
RXD
TXD
DB-9
()
()
(2
)
(3
)
(5
)
26
PC端软件:串口调试工具(可显示从串口接收的数据)
显示窗口
通信协议设置
27
• 串行接口器件与单片机接口时需要的I/O口线很少
(仅需1~4条),极大地简化了器件间的连接,进而
提高了可靠性。串行接口器件体积小,因而占用电路
板的空间小,仅为并行接口器件的10%,明显减少了
电路板空间和成本。
• 串行接口工作电压宽、抗干扰能力强、功耗低、数
据不易丢失。
• 串行扩展技术在IC卡、智能仪器仪表以及分布式控
制系统等领域得到了广泛的应用。
串行接口技术
28
一、 1-Wire(单总线)接口
单总线(1-Wire bus)是由DALLAS 公司推出的外围串行扩展
总线。它只有一条数据输入/输出线DQ,总线上的所有器件都挂
在DQ上,电源也可通过这条信号线供给,称为单总线技术。1-
Wire器件按照串行协议进行供电和数据通信。
优势:
• 通过单线接口提供器件控制及操作
• 每个器件具有全球唯一的工厂光刻ID (64位ROM)
• 通过单总线供电(“寄生电源”)
• 可挂接多点:单一总线可挂接多个器件 (长度≤200M)
29
DS18B20
— Programmable Resolution 1-Wire Digital Thermometer
30
• Unique 1-Wire Interface Requires Only One Port Pin for Communication
• Each Device has a Unique 64-Bit Serial Code Stored in an On-Board ROM
• Multidrop Capability Simplifies Distributed Temperature-Sensing Applications
• Requires No External Components
• Can Be Powered from Data Line; Power Supply Range is to
• Measures Temperatures from -55°C to +125°C (-67°F to +257°F)
±°C Accuracy from -10°C to +85°C
• Thermometer Resolution is User Selectable from 9 to 12 Bits
• Converts Temperature to 12-Bit Digital Word in 750ms (Max)
• User-Definable Nonvolatile (NV) Alarm Settings
• Alarm Search Command Identifies and Addresses Devices Whose Temperature
is Outside Programmed Limits (Temperature Alarm Condition)
• Available in 8-Pin SO (150 mils), 8-Pin µSOP, and 3-Pin TO-92 Packages
• Software Compatible with the DS1822
• Applications Include Thermostatic Controls, Industrial Systems, Consumer
Products, Thermometers, or Any Thermally Sensitive System
31
典型应用
•测温范围:-55℃ ~ +125℃;(9/12位二进制码表示)
•测温精度:±℃ (-10℃~+85℃);
•用户自设定温度报警上下限,其值是非易失性的
•测温距离:≤200M;
32
封装及引脚
33
温度寄存器
34
温度— 数字量关系
小数整数负温度为补码表示 35
存储器
36
配置寄存器
37
DS18B20操作
38
串行接口技术-1-Wire总线
39
串行接口技术-1-Wire总线
40
操作时序
DALLAS公司为单总线的寻址及数据的传送提供了严格
的时序规范,具体内容可查阅数据手册。
主机发复位脉冲 接收器件“存在”脉
冲
41
串行接口技术-1-Wire总线
写
“0”
写
“1”
读
“1”
读
“0”
42
串行接口技术-1-Wire总线
43
【例】温度传感器DS18B20的DQ与相连。
下列为读温度和转换程序。
(
)
44
;---------------------------------------------------------------------------
;**DS18B20读温度子程序;12位分辨率,MSB存入65H,LSB存入64H
;转换为BCD码存入6FH(符号位,FFH负,00H正),6EH(百位)
;6DH(十位),6CH(个位),6BH(小数)
;---------------------------------------------------------------------------
RD_TEMP:SETB
LCALL RST1820 ;读温度之前必须先复位
JB F0,YES ;查看标志位看18B20是否存在,1为存在,0为不存在
RET ;不存在则返回
YES:MOV A,#0CCH ;存在则开始读温度,跳过ROM匹配
LCALL WRB ;调写子程序
MOV A,#44H ;发出温度转换命令
LCALL WRB ;调写子程序
MOV B,#150
WT:LCALL DISP
DJNZ B,WT ;等待AD转换完成,现在分辨率为12位,温度最大转换时间为
750MS
LCALL RST1820 ;读温前需要复位
MOV A,#0CCH ;跳过ROM匹配
LCALL WRB
MOV A,#0BEH ;发读温度命令
LCALL WRB
LCALL RD2B ;将温度数据读回
LCALL BTOD ;将温度值转换为BCD码
RET
45
;18B20复位子程序
;18B20复位需要将数据位拉低500us;18B20收到信号后要等待16-60us,然后发出60-240us的低脉冲
RST1820:SETB
NOP
CLR
MOV R6,#3
RST0:MOV R7,#105 ;设一个537us延时
DJNZ R7,$
DJNZ R6,RST0
SETB ;拉高数据线,等待回应
NOP
NOP
NOP
MOV R6,#23
RST1:JNB ,RST2 ;延时延时50us等待18B20回应,若返回低脉冲则说明18B20存在
DJNZ R6 ,RST1
LJMP RST3 ;经过反应时间而没检测到18B20的存在,则跳转去清零标志位
RST2:SETB F0 ;检测到18B20存在,置1标志位
LJMP RST4
RST3:CLR F0 ;没检测到18B20,清零标志位
LJMP RST5
RST4:MOV R6,#111 ;延时240us,确定回应信号已发完
DJNZ R6,$
RST5:SETB
RET
46
;---------------------------------------------------------
----------
;写18B20子程序
;---------------------------------------------------------
----------
WRB:MOV R6,#8 ;写计数寄存器,一共有8位数据
CLR C
WRB1:CLR
MOV R7,#6 ;设一个延时
DJNZ R7,$
RRC A ;右循环,先输出低位
MOV ,C
MOV R7,#23 ;设延时50us
DJNZ R7,$
SETB
NOP
NOP
DJNZ R6,WRB1 ;判断是否完成数据传送
SETB ;完成传送拉高数据位
RET
47
;--------------------------------------------------------
;从18B20中读出温度数据子程序,存入65H,64H
;--------------------------------------------------------
RD2B:MOV R5,#2 ;设读回数据个数指针
MOV R0,#64H ;把温度数据低位存入64H
RD2B0:MOV R6,#8 ;设数据长度指针
RD2B1:CLR C
SETB
NOP
NOP
CLR
NOP
NOP
NOP
SETB
MOV R7,#9
DJNZ R7,$
MOV C,
MOV R7,#23
DJNZ R7,$
RRC A
DJNZ R6,RD2B1
MOV @R0,A
INC R0 ;高位存入65H
DJNZ R5,RD2B0
RET
48
;--------------------------------------------------------
;将温度数据转换为BCD码子程序
;--------------------------------------------------------
BTOD:MOV A,65H
JNB ,PLUS ;判断正负
CPL A
MOV 67H,A
MOV A,64H
CPL A
ADD A,#01H
MOV 66H,A
MOV A,67H
ADDC A,#00H
MOV 67H,A ;若为负数,求绝对值存入67H,66H
MOV 6FH,#0FFH ;置负数标志
SJMP BTOD0
PLUS:MOV 6FH,#00H ;置正数标志
MOV 67H,65H
MOV 66H,64H
49
BTOD0:MOV A,66H
ANL A,#0FH
MOV DPTR,#POINT
MOVC A,@A+DPTR
MOV 6BH,A
MOV A,66H
ANL A,#0F0H
SWAP A
MOV 63H,A
MOV A,67H
ANL A,#07H
SWAP A
ORL A,63H
MOV B,#100
DIV AB
MOV 6EH,A
MOV A,#10
XCH A,B
DIV AB
MOV 6DH,A
MOV 6CH,B
RET
POINT:DB 00H,01H,01H,02H,02H,03H,04H,04H,05H,06H,06H,07H,07H,08H,09H,09H50
SPI(Serial Periperal Interface)是Motorola公司推
出的同步串行外设接口,允许单片机与多个厂家生产的
带有该接口的设备直接连接,以串行方式交换信息。
使用4条线:串行时钟SCK,主器件输入/从器件输
出数据线MISO(简称SO),主器件输出/从器件输入
数据线MOSI(简称SI)和从器件选择线(CS)。
SPI的典型应用是单主系统。该系统只有一台主器件,
从器件通常是外围接口器件,如存储器、I/O接口、
A/D、D/A、键盘、日历/时钟和显示驱动等。
二、 SPI总线接口简介
51
典型应用
时序
主
从 从 从
主器件与从器件的SCK、MISO、MOSI都是同名端相连
52
只有两条信号线,一条是数据线SDA,另一条是时钟线SCL,
所有连接到I2C总线上器件的数据线都接到SDA线上,各器件的时
钟线均接到SCL线上。标准I2C普通模式,数据的传输速率为
100kb/s,高速模式可达400kb/s。
三、I2C总线接口
典型应用
53
24C02 引脚
54
I2C总线协议
55
56
57
虚拟方式应用
89C51单片机没有I2C接口,用I/O口结合软件实现。
58
起始信号S
START: SETB ;SDA=1
SETB ;SCL=1
NOP
NOP
NOP
CLR ;SDA=0
NOP
NOP
NOP
CLR ;SCL=0
RET
59
停止信号S
STOP: CLR ;SDA=0
SETB ;SCL=1
NOP
NOP
NOP
SETB ;SDA=1
NOP
NOP
NOP
CLR
CLR
RET
60
发送1字节数据子程序
S1BYTE:MOV R6,#08H ;8位数据长度送入R6中
WLP:RLC A ;A左移,发送位进入C
MOV ,C ;将发送位送入SDA引脚
SETB ;SCL=1,使SDA引脚上的数据有效
NOP
NOP
CLR ;SDA线上数据变化
DJNZ R6,WLP
RET
61
接收1字节数据子程序
R1BYTE:MOV R6,#08H ;8位数据长度送入R6中
RLP:SETB ;置SDA数据线为输入方式
SETB ;SCL=1,使SDA数据线上的数据有效
MOV C, ;读入SDA引脚状态
MOV A,R2
RLC A ;将C读入A
MOV R2,A ;将A存入R2
CLR ;SCL=0,继续接收数据
DJNZ R6,RLP
RET
62