第八章 AT89C51串行通信及其应用
串行通信概述
并行通信和串行通信
异步通信和同步通信
单片机串行通信传输方式
串行数据通信的传输速率
AT89C51串行口
AT89C51串行口的结构
AT89C51串行口控制寄存器
AT89C51串行口的工作方式及波特率计算
串行通信协议
RS-232协议
RS-485/422A协议
串行通信的数据校验
串行通讯的应用
并行通信和串行通信
计算机与外界的信息交换称为通信,通常有并行和串行两种通信方法。
并行通信:所传送数据的各位同时发送或接收。
串行通信:所传送数据的各位按顺序一位一位地发送或接收。
异步通信和同步通信
串行通信的通信方式
异步通信
同步通信
1.异步通信的数据传送
异步通信数据传送按帧传输,一帧数据包含起始位、数据位、校验位和停止位。
传送用一个起始位表示字符的开始,用停止位表示字符的结束。
异步通信和同步通信
起始位:发送器是通过发送起始位而开始一个字符的传送。
数据位:串行通信中所要传送的数据内容。在数据位中,低位在前,高位在后。数
据位通常是8位。
校验位:用于对字符传送作正确性检查,因此校验位是可以省略的。
停止位:一个字符传送结束的标志,停止位在一帧数据的最后。停止位可能是1、
或2位,在实际应用中根据需要确定。
位时间:一个格式位的时间宽度。
帧(frame):从起始位开始到停止位结束的全部内容称之为一帧,帧是一个字符
的完整通信格式,因此也就把串行通信的字符格式称之为帧格式。
异步通信和同步通信
2.同步通信的数据传送
同步数据传送时,发送端和接收端必须使用同一时钟源才能保证它们之间的准确
同步,因此发送方除了传送数据外,还要同时传送时钟信号。
串行通信传输方式
串行通信的传输方式
单工制式
半双工制式
全双工制式
1.单工(Simplex)制式
串行通信传输方式
2.半双工(Half Duplex)制式
3.全双工(Full Duplex)制式
串行通信的传输速率
波特率bps(Bit per second)是数据传送的速率,其定义是每秒钟传
送的二进制数的位数。
波特率的倒数即为每位传输所需要的时间。则:
1波特率(Bit per second)=1位/秒(1 bit/s)
数据传送的速率是120字符/s,若每个字符为10位的二进制数,则
传送波特率为 1200 波特率。
例如:
AT89C51串行口的结构
AT89C51片内有一个全双工的串行通讯接口。
由发送缓冲寄存器SBUF、接收缓冲寄存器SBUF和移位寄存器三部分构成。
AT89C51串行口控制寄存器
1.串行数据缓冲寄存器SBUF
SBUF是串行数据缓冲寄存器。在逻辑上,SBUF只有一个,既表示发送寄存器,又
表示接收寄存器。它们有相同名字和单元地址,但它们不会出现冲突,因为在物理
上,SBUF有两个:一个只能被CPU读出数据(接收寄存器),一个只能被CPU写
入数据(发送寄存器)。
AT89C51串行口控制寄存器
2.串行控制寄存器SCON
它用于定义串行口的工作方式及实施接收和发送控制。
AT89C51串行口控制寄存器
SM0、SM1 工作方式 功能描述 波特率
0 0 方式0 8位移位寄存器 fosc/12
0 1 方式1 10位UART 可变
1 0 方式2 11位UART fosc/64或fosc/32
1 1 方式3 11位UART 可变
(1)SM0、SM1:串行口工作方式控制位,其定义如表8-2所示:
(2)SM2:多机通信控制位。
AT89C51串行口控制寄存器
(4)TB8:方式2和方式3中,要发送的第9位数据。
(5)RB8:方式2和方式3中,要接收的第9位数据。
(3)REN:允许接收位。
REN用于控制数据接收的允许和禁止,REN=1时,允许接收,
REN=0时,禁止接收。该位由软件置位或复位。
AT89C51串行口控制寄存器
(6)TI:发送中断标志位。
可寻址标志位。方式0时,发送完第8位数据后,该位由硬件置位;其它方
式下,在发送停止位之前由硬件置位,因此,TI=1表示帧发送结束,可由
软件查询TI位标志,也可以请求中断。TI必须由软件清0。
(7)RI:接收中断标志位。
可寻址标志位。方式0时,接收完第8位数据后,该位由硬件置位;在其他工
作方式下,当接收到停止位时,该位由硬件置位,RI=1表示帧接收完成,可
由软件查询RI位标志,也可以请求中断。RI必须由软件清0。
AT89C51串行口控制寄存器
3.电源管理寄存器PCON
AT89C51串行口工作方式及波特率
1.工作方式0
8位移位寄存器输入/输出方式。多用于外接移位寄存器以扩展I/O端口
AT89C51串行口工作方式及波特率
2.工作方式1
方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,
包括1个起始位0,8个数据位和1个停止位1。
输出:当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据
从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。
输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认
开始位0,就开始接收一帧数据。在方式1接收时,应先用软件清零RI和SM2标志。
AT89C51串行口工作方式及波特率
2.工作方式1
波特率计算:
SMOD是控制寄存器PCON中的一位控制位,其取值有0和1两种状态。
显然,当SMOD=0时,波特率= (定时器T1溢出率) /32,而当SMOD=1时,
波特率= (定时器T1溢出率) /16。
定时器的溢出率,就是指定时器一秒钟内的溢出次数。
AT89C51串行口工作方式及波特率
定时初值计算:
当定时/计数器T1用作波特率发生器时,通常选用定时初值自动重装的工
作方式2,从而避免了通过程序反复装入计数初值而引起的定时误差,使得波
特率更加稳定。
AT89C51串行口工作方式及波特率
例8-1:已知fosc=12MHz,SMOD=1,波特率=2400 bit/s,求串行方式1时
T1定时初值。并说明由此产生的实际波特率是否有误差,为什么?
解:根据
若fosc=,其余条件不变,则T1定时初值为:
AT89C51串行口工作方式及波特率
当时钟频率选用时,很容易获得标准的波特率,所以很多单片机
系统选用此数值的晶振。使用T1设置常用的波特率参见表8-4。
AT89C51串行口工作方式及波特率
例8-2:设89C51单片机串行口工作于方式1,已知fosc=,定时
器T1作为波特率发生器,要求波特率=2400bit/s,SMOD=1,开放中断,试编
写初始化程序。
根据题目要求,首先计算T1定时器的初值(可以直接利用例8-1的计
算过程)。然后利用TMOD寄存器,将T1设置为工作方式2(注意:这里是T1
的工作方式,而不是串行口的工作方式)。再将PCON寄存器的SMOD设置为1
,然后TH1寄存器加载E8H,最后启动T1,开放中断,即可产生2400bit/s的波
特率。
分析:分析:
AT89C51串行口工作方式及波特率
采用汇编语言程序设计:
MOV TMOD,#20H ; T1设置为工作方式2
MOV TL1,#0E8H ; T1定时器初值
MOV TH1,#0E8H ; T1定时器重装初值
MOV PCON,#80H ; SMOD设置为1
MOV SCON,#40H ; 串行口方式1
SETB TR1 ; T1启动
SETB ES ; 开串口中断
SETB EA ; 开总中断
AT89C51串行口工作方式及波特率
采用C51语言程序设计:
程序如下 :
void serial_init (void){
TMOD=0x20; // T1设置为工作方式2
TL1=0xE8; // T1定时器初值
TH1=0xE8; // T1定时器重装初值
PCON=0x80; // SMOD设置为1
SCON=0x40; // 串行口方式1
TR1=1; // T1启动
ES=1; // 开串口中断
EA=1; // 开总中断
}
AT89C51串行口工作方式及波特率
3.工作方式2
方式2为11位异步通信方式。其中,1个起始位(0),8个数据位(由
低位到高位),1个附加的第9位和1个停止位(1)。
发送数据时,第9位数据来自发送机SCON中的TB8,这可使用如下指令完成:
SETB TB8 ;TB8位置“1”
CLR TB8 ;TB8位置“0”
AT89C51串行口工作方式及波特率
3.工作方式2
方式2的波特率是固定的,而且有两种。
由此公式可知,当SMOD为0时,波特率为fosc/64,当SMOD为1时,波特
率为fosc/32。
AT89C51串行口工作方式及波特率
4.工作方式3
方式3和方式2除波特率不同外,其它性能完全相同。
AT89C51串行口工作方式及波特率
串行通信协议
RS-232协议
RS-232是目前被广泛使用的异步串行数字通信电气标准,由美国电子工
业协会EIA(Electronics Industry Association)于1962年公布,1969年最后修
订而成,RS(Recommended Standard)表明它是一种被推荐的标准。
1.RS-232协议简介
串行通信协议
串行通信协议
3.电气特性
RS-232协议规定最大的通信速度为20Kb/s,现在已经出现高达2Mb/s速
率的基于RS-232的通信系统。作为单片机系统,由于其处理能力有限,工作频
率不是很高,一般可实现的最高波特率在112Kb/s左右。
RS-232协议规定最长的通信距离是15m,目前市售的长线驱动器已经
可以将通信距离延长到数千米。
串行通信协议
4.TTL电平与RS-232电平的转换
EIA-RS-232C电平: 逻辑1 –3~-15v 逻辑0 +3~+15v
TTL电平: 逻辑1 +~+5v 逻辑0 0v~+
单电源电平转换芯片:MAXIM公司的MAX232芯片等。
串行通信协议
5.单片机通过RS-232与PC机组成点对点通信
例8-3:设89C51单片机串行口工作于方式1,已知fosc=,定时
器T1作为波特率发生器,要求波特率=9600bit/s,SMOD=0,若和PC机串口通
过RS-232总线连接,试编写串口接收字符中断子程序,接收到的字符存入40H
单元。
根据题目要求,编写串口接收字符中断子程序。(假设单片机的初
始化设置已经参照例8-2设置完成) 。
分析:分析:
ORG 0023H ; 串行口中断入口
LJMP SERIAL
SERIAL:JNB RI,SERIAL_RET ; 若无接收标志,则中断返回
MOV 40H,SBUF ; 接收到的字符存入40H单元
CLR RI ; 清除接收标志
SERIAL_RET:
RETI ; 中断子程序返回
采用汇编语言程序设计:
采用C51语言程序设计:
程序如下 :
unsigned char data rcv_data _at_ 0x40;
void serial(void) interrupt 4 using 2 { // 串行口中断
unsigned char c;
if (RI){
c = SBUF;
rcv_data = c;
RI=0;
}
}
串行通信协议
RS-485/422A协议
RS-422A通信标准是EIA(Electronic Industry Association)公布的“平
衡电压数字接口电路的电气特性”标准 。
RS-422A总线信号传输速率最大为10Mb/s;在此速率下电缆允许长度为
120m。
在单片机系统中要实现RS-485通信,中间必须插入一个电平和逻辑转换环节。
RS-485最大的优点在于它的多点总线互连功能 。
单片机与RS-485接口
规定: A与B压差高于200mV为逻辑1。
A与B压差低于200mV为逻辑0。
RS-485接口标准芯片:MAXIM公司的MAX485芯片等。
多单片机通过RS-485组成多点网络结构
串行通信协议
串行通信的数据效验
在设计通信协议时,应该考虑数据的纠错,为了防止错误所带来的影响,一
般在通信时采取数据校验的方法。
常用的数据校验方法有:
奇偶校验
累加和校验
循环冗余码校验(CRC校验)
串行通信协议
串行通讯的应用
例8-4:试以串行方式1设计一个双机通信系统。已知fosc=,波特率
=9600bit/s,SMOD=0。甲机发送的16个数据存在内部RAM 中,乙机接收后存在
内部RAM 中。
解:串行方式1的波特率取决于T1溢出率,首先计算T1定时初值,根据
将以上各值代入:
程序参见教材(略)。