860 likes | 1.03k Views
第 9 章 串行通信. 数据通讯 传输方式 同步通讯和异步通讯 波特率 : 表示每秒钟传送二进制代码的位数 , 单位 b/s. 9.1 串行通讯基本知识. 并行通讯. 串行通讯. 单向 ( 单工 ) 配置. 半双向 ( 半双工 ) 配置. 全双向 ( 全双工 ) 配置. 1 、并行通信和串行通信 通信的基本方式: 并行通信: 数据的各位同时送出。传送距离:小于 30 米。 串行通信: 数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米 ~ 几千公里。. 2 、串行通信 ( 1 )串行通信的数据传送方向。
E N D
数据通讯 传输方式 同步通讯和异步通讯 波特率:表示每秒钟传送二进制代码的位数,单位b/s 9.1 串行通讯基本知识 并行通讯 串行通讯 单向(单工)配置 半双向(半双工)配置 全双向(全双工)配置
1、并行通信和串行通信 通信的基本方式: 并行通信:数据的各位同时送出。传送距离:小于30米。 串行通信:数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米~几千公里。
2、串行通信 (1)串行通信的数据传送方向。 单工、半双工、全双工三种方式 (2)串行通信的工作方式 同步方式:数据按块传送,包括同步字符、数据块。 异步方式:数据按字符传送,每一个字符均按固定的 字符格式传送,又被称为帧,如图。包含字符的起始位、数据位、校验位、停止位四个部分。
9.2 MCS-51串行口及应用 从机 从机 主机 从机 从机 单片机系统中的串行接口及特点 • 串行通讯可以实现单片机与单片机、单片机与微机之间的数据交换。 • 串行通讯电路简单,实现远距离低成本的数据传输。缺点是传输速度慢。 • 在一些系统中, 采用串行通讯的形式将多微处理器连接起来,构成一个完整的多CPU控制系统。
串行(异步)通信应用示意图 MCS-51 TXD (甲) RXD RXD MCS-51 TXD (乙) 单片机甲、乙之间近距离的直接通讯 TXD RXD RS-232 或485 RS-232 或485 RXD TXD 单片机甲乙两地之间远距离通讯 PC机 COM1,COM2 TXD RXD RS-232 单片机与PC机之间的数据通讯
9.2.1 与串口有关的寄存器数据缓冲寄存器 SBUF 地址:99H • SBUF是用来存放发送和接收数据的寄存器, 对应两个独立的缓冲器。 • CPU写SBUF就是开始发送数据(MOV SBUF,A); CPU读SBUF就是读取接收到的数据到A (MOV A,SBUF)。 • 该结构在硬件设计上保证了51单片机串行口是一个可同时发送与接收的”全双工”串口。
SBUF硬件电路: 发送:执行指令MOV SBUF,A 接收:当检测到起始位电路自动启动接收。 MCS-51 RXD P3.0 CPU 接收SBUF 移位寄存器 内部总线 TXD P3.1 发送SBUF 移位寄存器
串行口控制寄存器SCON 地址:98H • SM0 SM1: 串行口工作模式选择位。
RI:完成一帧数据接收标志,应软件清零,接收完成RI=1并申请中断(如果中断开放,则引发中断);RI:完成一帧数据接收标志,应软件清零,接收完成RI=1并申请中断(如果中断开放,则引发中断); • TI:完成一帧数据发送标志,应软件清零,发送完成TI=1同时申请中断(如果中断开放,则引发中断); • RB8:在9位数据传送的模式2、3中,接收到的第9位数据; • TB8:在9位数据传送的模式2、3中,将要发送的第9位数据; • REN:允许接收位,REN=1时允许接收.由软件置位或清零。
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)用于多机通信。
通信双方不是同步工作的,数据交换由各自SBUF进行。CPU不参与通信过程,只能通过标志了解SBUF的发送、接收的状态,以便决定后续操作。通信双方不是同步工作的,数据交换由各自SBUF进行。CPU不参与通信过程,只能通过标志了解SBUF的发送、接收的状态,以便决定后续操作。 RI(SCON.0):接收完成标志。 ①当SUBF从RXD接收完一个完整的数据帧时,RI=1。如果串口中断是开放的,则RI=1时会自动引发中断。用户可以通过中断服务程序将SBUF中的数据取出送累加器A。 MOV A,SBUF——中断方式接收数据; ②也可以使用查询的方式对RI进行检测,如果RI=1则执行: MOV A,SBUF否则等待 ——查询方式接收数据。 如何使用RI,TI标志完成接收、发送?
TI (SCON.1):发送完成标志。 当CPU执行:MOV SBUF,A后,SBUF开始通过TXD向外发送数据。当完成一帧数据的发送后,TI=1。 ①如果系统中断是开放的,则TI=1会自动引发中断。用户可以通过中断服务程序向SBUF输送下一个数据: MOV SBUF, A ———中断方式发送数据; ②也可以使用查询的方式对TI进行检测,如果TI=1则执行: MOV SBUF , A。否则等待 ——查询方式发送。
使用查询RI、TI标志方式进行发送与接收N个数据使用查询RI、TI标志方式进行发送与接收N个数据 SETB SCON .REN CLR SCON .TI CLR SCON .RI 数据送累加器A 修改数据区指针 接收数据程序框图 NO RI=1? mov sbuf,a YES mov a,sbuf TI=1? NO A送数据区 修改数据指针 YES N个数据发送完? NO YES N个数据接收完? NO YES 发送数据的程序框图
PCON 地址:87H SMOD 波特率选择位 SMOD=1时,方式1,方式2,方式3的波特率加倍
模式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位,其帧格式如下模式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位,其帧格式如下 模式1以10位为一帧传输,设由1个起始位,8个数据位,1个停止位 模式2和模式3以11位为1帧传输,设有1个起始位,8个数据位,1个附加第9位和1个停止位 9.2.2 串行通信工作模式
串行口的模式0 • 特点:同步移位寄存器方式。波特率:固定为 fosc/12. RXD(P3.0):数据口线(发送和接收);先移数据的低位。 TXD(P3.1):移位脉冲输出端。 (注意:移位脉冲的频率就是模式0的波特率) • 主要功能:使用串行口扩展并行口, 理论上可以扩展n*8 位的并行口。 并行的数据(8位) MCS-51 RXD TXD 串行数据 Data 外部移位寄存器 cp 移位脉冲
51内部总线 模式0 电路框图 写SBUF P3.0 RXD D S Q CP SBUF 1 零检测器 S6P2 MOV SBUF,A START SHIFT 发送控制器 TXCLOCK TI SEND S6 串行口中断 P3.1 TXD 移位 时钟 START RI RECEIVE RX 接收控制器 SHIFT CLOCK 1 1 1 1 1 1 1 0 REN /RI P3.0 RXD 输入移位寄存器 装载SBUF SBUF 读SBUF 51内部总线
模式0的发送与接收 • 单片机执行mov sbuf,a指令启动“发送控制器”开始发送。完毕,TI被置位。 • 在满足REN=1且RI=0的条件下(实际上是一条写SCON指令),就会引发一次接收过程。完毕,RI置位,向CPU发中断申请。
模式0的时序信号(发送) 写SBUF SEND SHIFT RXD端数据 D0 D1 D2 D3 D4 D5 D6 D7 TXD端同步脉冲 TI中断标志 mov sbuf,a 指令从发送到结束的10个机器周期
模式0的时序信号(接收) 写SCON(RI=0) RI RECEIVE SHIFT 对RXD采样 TXD同步脉冲 RI中断标志
串行口模式1 • 特点:10位传输格式 (1个起始位+8个数据位+1个停止位); 用于通讯的异步方式; 可变波特率(定时器T1的溢出率来确定,所以在此种模式下,首先要对T1进行初始化以确定串行口的波特率)。 • 发送操作:在TI=0,执行mov sbuf ,a 指令后从TXD端开始发送数据。当发送完8位数据后自动的添加一个高电平的停止位,并将TI置位。
接收操作:在REN=1且RI=0的条件下进行。 串行口的接收控制器对RXD线进行采样,其采样频率是接收时钟的16倍。当连续8次采集到RXD线上为低电平时,检测电路便认定RXD线上有了“起始位”,在此后,便开始在每次第7 、 8 、9三个脉冲时进行RXD采样,采取“三中取二”的原则来确定接收的数据(如图所示)。 数据装载条件: 当接收到停止位时,必须满足:RI=0且SM2=0,才能把接收的数据送到SBUF中(停止位送SCON的RB8中,并使RI=1),否则数据丢失。 要想得到接收的数据,在接收前必须事先清零RI。
串行口模式1时数据帧格式及接收采样示意图 起始位 8位数据 停止位 7.8.9 当连续8次采集到低电 平时,便确认起始位到来 在每个第7,8,9个脉冲对RXD采样 并采用“以三取二”来确定采集的数据 对RXD线的数据以16倍速度采样
特点:模式2、3都是11位传输格式 (1个起始位+9个数据位+1个停止位),它们的不同之处是波特率。 波特率: 模式2:固定为fosc/64或fosc/32。 (具体由PCON中的SMOD位来确定)。 模式3:可变,由定时器T1的溢出波特率来确定。 串行口模式2、3 起始位 停止位 8+1位数据 第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,AMOV SBUF,A
模式2、3的接收过程也类似于模式1,不同的是:模式1时,SCON中的RB8是接收到的停止位(“1”);而模式2、3时,RB8是接收到的第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不能置位。
RI=0是保证SBUF空(每次取走数据时通过软件复位RI,如果没有取走数据则RI=1),保证接收到的数据不丢失。RI=0是保证SBUF空(每次取走数据时通过软件复位RI,如果没有取走数据则RI=1),保证接收到的数据不丢失。 利用后一个条件SM2和RB8来控制接收,可用于多机通信。 令SM2=1可以利用接收到的RB8控制接收是否有效。 即 RB8=1时接收有效;RB8=0时接收无效。 SM2也称“多机通讯使能位” 。 在没有多机通信的场合,RB8可用于奇偶效验,以防止串行通信出错。
发送时:将SCON中的TB8作为第9位数据发送; 接收时:将接收来的第9位送到SCON中的RB8中。 串行口模式2、3时数据帧格式 起始位 停止位 9位数据
奇偶校验:收到的第9位RB8是发送方送来的奇偶校验位。奇偶校验:收到的第9位RB8是发送方送来的奇偶校验位。 在这种情况下必须令SM2=0,否则接收的校验位RB8=0时,将影响数据的接收(因为RB8有时为“1”,而有时为“0”)。 当接收数据后,对 PSW.0(P标志)和 RB8位进行判断。检查结果是否与约定的相符合。 模式2、3的应用之一带奇偶校验位的数据传送
例如:发送、接收双方约定为奇校验(数据中1的个数为奇):例如:发送、接收双方约定为奇校验(数据中1的个数为奇): 则发送方的第9位要根据前8位数据来确定。 若发送的8位数据是:00011010,则TB8为0。 发送程序如下: : MOV C,P CPL C MOV TB8,C MOV SBUF,A : 接收时将 PSW.0(P标志)位与RB8进行“异或”,结果为1,说明校验结果正确。
利用模式2,3进行带奇校验的串行通讯程序流程图利用模式2,3进行带奇校验的串行通讯程序流程图 发送端程序(原始TI=0) 接收端程序(原始RI=0) 数据送累加器A N YES RI=1 ? PSW.P=1 ? Y NO MOV A,SBUF SET SCON.TB8 CLR SCON.TB8 NO PSW.P⊕RB8=1? MOV SBUF,A YES CLR SCON.RI 出错处理 TI=1 ? NO 数据送内存 YES CLR SCON.TI 使用“查询法”编制的发送、接收程序
如果系统采用多CPU结构,并且有一个做主机,其它为从机时,它们之间可以通过多机通信的方式进行数据交换。如:多路数据采集系统。如果系统采用多CPU结构,并且有一个做主机,其它为从机时,它们之间可以通过多机通信的方式进行数据交换。如:多路数据采集系统。 我们选一台单片机作为主机,专门负责接收从机传回的数据,并进行数据的后期处理(保存、打印和显示等); 而从机则完成对传感器的信号检测、A/D转换,最后将数据采用串行通讯的形式上传给主机。 模式2、3的应用之二多机通信
传统方式的多路数据采集系统 检测现场 传感器 1 机房 或 仪表室 传感器 2 接口 电路 单片机系统 或 微型计算机系统 传感器 3 传感器 4 引线 (模拟信号) 传感器 N
采用“智能传感器”组成的多路数据采集系统 主机 串行数据线(2条) RXD TXD TXD RXD 从机 1 从机 2 从机 3 从机 4 从机 N 从机做智能传感器
在模式2、3中, 1,SM2=0时:RB8=1或RB8=0都可以激活RI。 2,SM2=1时:RB8=1才能激活RI。 RB8=0时,RI不能激活。 多机通讯中SM2的设定
主机是通信的发起者,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机之间不能直接通讯。主机是通信的发起者,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机之间不能直接通讯。 主机和从机的串口设置为模式2或3,其中主机的SM2=0,从机的SM2=1。 第九位数据用来作为地址数据标识位, RB8=1时为地址帧, RB8=0时为数据帧。从机的SM2=1时,当收到的RB8=1(地址帧)时,RI可以激活;如果RB8=0(数据帧),则RI不能激活。 主从式多机通信原理
主机首先通过发送地址码来寻找从机(地址码的特征是第9位数据为“1”),所以所有的从机都能接收到主机发出的地址码(因为从机的RI=0,SM2=1,RB8=1),并使RI=1引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的SM2=0;而未被选中的从机仍保持SM2=1,并退出中断服务程序。主机首先通过发送地址码来寻找从机(地址码的特征是第9位数据为“1”),所以所有的从机都能接收到主机发出的地址码(因为从机的RI=0,SM2=1,RB8=1),并使RI=1引发中断。从机在中断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机将自己的SM2=0;而未被选中的从机仍保持SM2=1,并退出中断服务程序。 当主机找到从机后,开始向从机发数据、命令(其特征为第9位=0)。由于被选中的从机SM2=0,所以尽管接收到的RB8=0,同样可以激活从机的RI,使其以查询的方式接收主机发出的数据或命令。当主机与从机的通讯完成后,从机再将其SM2=1,并退出中断服务程序。主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信息 。 通信过程
在模式2、3中,可以实现较为特殊的通信方式,如带校验位的9位传送、多机通讯。注意:当SM2=0时,只能采用查询方式???在模式2、3中,可以实现较为特殊的通信方式,如带校验位的9位传送、多机通讯。注意:当SM2=0时,只能采用查询方式??? 模式2、3使用时要注意的问题
模式0的波特率=fosc/12 模式2的波特率= 模式1和模式3的波特率= 9.2.3波特率的设计
TXD 发送SBUF(99H) ÷12 fosc 输入移位寄存器 RXD 模式0波特率的产生
波特率及定时器T1的设定 • 在异步通信中,发送方与接收方是两个互相独立的系统,它们的系统时钟可以各不相同,此时确保通信正确的条件是: 1、要有相同的字符帧格式; 2、要有相同的波特率。 • MCS-51单片机的串行口四种模式其波特率各不相同。其中模式1、3的波特率就是由定时器T1的溢出率来决定的(PCON中的SMOD=1波特率加倍)。
如何设定波特率? • 在编制串行口通讯(模式1、3)程序时,在程序的初始化中,通过T1进行波特率的设定,既对T1进行初始化。 • T1初始化的主要任务是: 1、设置T1的工作方式为定时(C/T=0); 工作模式为模式2 :自动重装。 2、计算定时常数并分别送给TH1、TL1。 • 波特率计算公式: • T1溢出率:=(计数速率)/ [ 256-(TH1)] = (fosc/12) / [ 256-(TH1)]
设:fosc为系统时钟频率,TH1为定时器T1的初值,B为波特率。设: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晶振是为了产生精确的波特率。 根据波特率求定时器T1初值计算公式