串行通信和并行通信的详解.ppt_第1页
串行通信和并行通信的详解.ppt_第2页
串行通信和并行通信的详解.ppt_第3页
串行通信和并行通信的详解.ppt_第4页
串行通信和并行通信的详解.ppt_第5页
已阅读5页,还剩362页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 367 第八章数据通信本章学习目标了解通信的有关概念掌握串行通信和并行通信的原理掌握常见串行接口 RS232 RS485 SPI I2C 的原理及应用方法掌握单片机并行接口的扩展方法 2 367 8 1通信的有关概念 通信 计算机的CPU与外部设备之间 以及计算机和计算机之间的信息交换 通信分类 并行通信和串行通信 3 367 并行通信以字节 Byte 或字节的倍数为传输单位一次传送一个或一个以上字节的数据 数据的各位同时进行传送适合于外部设备与微机之间进行近距离 大量和快速的信息交换 计算机的各个总线传输数据时就是以并行方式进行的 并行通信的特点就是传输速度快 但当距离较远 位数较多时 通信线路复杂且成本高 4 367 串行通信通信双方使用一根或两根数据信号线相连 同一时刻 数据在一根数据信号线上一位一位地顺序传送 每一位数据都占据一个固定的时间长度 与并行通信相比 串行通信的优点是传输线少 成本低 适合远距离传送及易于扩展 缺点是速度慢 传输时间长等 如计算机上常用的COM设备 USB设备和网络通信等设备都采用串行通信 5 367 一 串行通信的相关概念1 串行通信的分类 1 按照串行数据的同步方式分类按照串行数据的同步方式 串行通信可以分为同步通信和异步通信两类 6 367 1 异步通信在异步通信 AsynchronousCommunication 方式中 接收器和发送器使用各自的时钟 它们的工作是非同步的 在异步传送中 每一个字符要用起始位和停止位作为字符开始和结束的标志 以字符为单位一个个地发送和接收 7 367 典型的异步通信格式如图所示 图8 1异步通信的格式 8 367 异步传送时 每个字符的组成格式首先用一个起始位表示字符的开始 后面紧跟着的是字符的数据字 数据字通常是7位或8位数据 低位在前 高位在后 在数据字中可根据需要加入奇偶校验位 最后是停止位 其长度可以是一位或两位 串行传送的数据字加上成帧信号的起始位和停止位就形成了一个串行传送的帧 起始位用逻辑 0 低电平表示 停止位用逻辑 1 高电平表示 9 367 图a所示为数据字为7位的ASCII码 第8位是奇偶校验位 加上起始位 停止位 一个字符帧由10位组成 形成帧信号后 字符便一个一个地进行传送 10 367 在异步传送中 字符间隔不固定 在停止位后可以加空闲位 空闲位用高电平表示 用于等待发送 这样 接收和发送可以随时进行 不受时间的限制 图b为有空闲位的情况 11 367 在异步数据传送中 通信双方必须约定好两项事宜 字符格式 包括字符的编码形式 奇偶校验以及起始位和停止位的规定 通信速率 通信速率通常使用比特率来表示 比特率是数字信号的传输速率 它用单位时间内传输的二进制代码的有效位 bit 数来表示 其单位为每秒比特数bit s bps 每秒千比特数 Kbps 或每秒兆比特数 Mbps 来表示 12 367 波特率与比特率波特率指数据信号对载波的调制速率 它用单位时间内载波调制状态改变次数来表示 其单位为波特 Baud 波特率与比特率的关系是比特率 波特率 单个调制状态对应的二进制位数 在信息传输通道中 携带数据信息的信号单元叫码元 每秒钟通过信道传输的码元数称为码元传输速率 简称波特率 波特率是传输通道频宽的指标 13 367 例如 数据传送速率为120字符 秒 这个速率可以称为波特率 而每一个字符为10位 则其传送的比特率为10 120 1200位 秒 1200比特 在后面的描述中 为了适应习惯用法 将比特率和波特率统一使用波特率来表示 14 367 2 同步通信同步通信 SynchronousCommunication 是一种连续串行传送数据的通信方式 一次通信只传送一帧信息 这里的信息帧和异步通信中的字符帧不同 通常含有若干个数据字符 根据控制规程 数据格式分为面向字符及面向比特两种 15 367 面向字符型的数据格式面向字符型的同步通信数据格式可采用单同步 双同步和外同步三种数据格式 如图所示 图8 2面向字符型同步通信数据格式 16 367 单同步 双同步单同步和双同步均由同步字符 数据字符和校验字符CRC等三部分组成 单同步是指在传送数据之前先传送一个同步字符 SYNC 双同步则先传送两个同步字符 SYNC 17 367 外同步外同步通信的数据格式中没有同步字符 而是用一条专用控制线来传送同步字符 使接收端及发送端实现同步 当每一帧信息结束时均用两个字节的循环控制码CRC为结束 18 367 面向比特型的数据格式根据同步数据链路控制规程 SDLC 面向比特型的数据每帧由六个部分组成 第一部分是开始标志 7EH 第二部分是一个字节的地址场 第三部分是一个字节的控制场 第四部分是需要传送的数据 数据都是位 bit 的集合 第五部分是两个字节的循环控制玛CRC 最后部分又是 7EH 作为结束标志 19 367 面向比特型的数据格式如图所示 注意 在SDLC规程中不允许在数据段和CRC段中出现六个 1 否则会误认为是结束标志 要求在发送端进行检验 当连续出现五个 1 时 则立即插入一个 0 到接收端要将这个插入的 0 去掉 恢复原来的数据 保证通信的正常进行 图8 3面向比特型同步通信数据格式 20 367 同步通信优缺点数据传输速率较高 通常可达56000bps或更高 适用于传送信息量大 传送速率高的系统中 缺点是要求发送时钟和接收时钟保持严格同步 故发送时钟除应和发送波特率保持一致外 还要求把它同时传送到接收端去 21 367 2 按照数据的传送方向分类按照数据传送方向 串行通信可分为单工 半双工和全双工三种方式 22 367 图a为单工通信方式 Simplex A为发送站 B为接收站 数据只能能由A发至B 而不能由B传送到A 单工通信类似无线电广播 电台发送信号 收音机接收信号 收音机永远不能发送信号 23 367 图b为半双工通信方式 HalfDuplex 数据可以从A发送到B 也可以由B发送到A 不过 由于使用一根线连接 发送和接收不可能同时进行 同一时间只能作一个方向的传送 其传送方向由收发控制开关K来控制 半双工通信方式类似对讲机 某时刻A发送B接收 另一时刻B发送A接收 双方不能同时进行发送和接收 24 367 图c为全双工通信方式 FullDuplex 在这种方式中 分别用2根独立的传输线来连接发送方和接收方 A B既可同时发送 又可同时接收 全双工通信工方式类似电话机 双方可以同时进行数据的发送和接收 25 367 图所示为主从多终端通信方式 A可以向多个终端 B C D 发出信息 在A允许的条件下 可以控制管理B C D等在不同的时间向A发出信息 根据数据传送的方向又分为多终端半双工通信和多终端全双工通信 26 367 2 串行接口作用 串行通信中的数据是一位一位依次传送的 而计算机中数据是并行传送的 因此 发送端必须把并行数据变成串行才能传送 接收端接收到的串行数据又需要变换成并行数据才可以送给计算机 上述并 串或串 并的转换既可以用软件实现 也可用硬件实现 由于用软件实现会使CPU的负担增加 目前往往用硬件 串行接口 完成这种转换 27 367 串行接口通过系统总线和CPU相连 如图所示 图8 6CPU与串行接口的连接 28 367 串行接口主要由4部分组成数据输入寄存器 在输入过程中 串行数据一位一位地从传输线进入串行接口的接收移位寄存器 经过串入并出电路的转换 当接收完一个字符之后 数据就从接收移位寄存器传送到数据输入缓冲器 等待CPU读取 数据输出寄存器 当CPU输出数据时 先送到数据输出缓冲器 然后 数据由输出寄存器传到发送移位寄存器 经过并入串出电路转换一位一位地通过输出传输线送到外设 29 367 串行接口主要由4部分组成状态寄存器 状态寄存器用来存放外设运行的状态信息 CPU通过访问这个寄存器来了解某个外设的状态 进而控制外设的工作 以便与外设进行数据交换 控制寄存器 串行接口中有一个控制寄存器 CPU对外设设置的工作方式命令 操作命令都存放在控制寄存器中 通过控制寄存器控制外设运行 30 367 串行接口基本工作原理串行发送时 CPU通过数据总线把8位并行数据送到数据输出寄存器 然后送给并行输入 串行输出移位寄存器 并在发送时钟和发送控制电路控制下通过串行数据输出端一位一位串行发送出去 起始位和停止位是由串行接口在发送时自动添加上去的 串行接口发送完一帧后产生中断请求 CPU响应后可以把下一个字符送到发送数据缓冲器 31 367 串行接口基本工作原理串行接收时 串行接口监视串行数据输入端 并在检测到有一个低电平 起始位 时就开始一个新的字符接收过程 串行接口每接收到一位二进制数据位后就使接收移位寄存器 即串行输入并行输出寄存器 左移一次 连续接收到一个字符后将其并行传送到数据输入寄存器 并产生中断促使CPU从中取走所接收的字符 32 367 常见的串行接口芯片称为通用异步接收器 发送器UART UniversalAsynchronousReceiver Transmitter 其内部结构如图8 7所示 图8 7硬件UART的结构 33 367 UART中3种出错标志 奇偶错误 Parityerror 为了检测传送中可能发生的错误 UART在发送时会检查每个要传送的字符中的 1 的个数 自动在奇偶校验位上添加 1 或 0 使得 1 的总和 包括奇偶校验位 在偶校验时为偶数 奇校验时为奇数 UART在接收时会检查字符中的每一位 包括奇偶校验位 计算其 1 的总和是否符合奇偶检验的要求 以确定是否发生传送错误 34 367 UART中3种出错标志 帧错误 Frameerror 表示字符格式不符合规定 虽然接收端和发送端的时钟没有直接的联系 但是因为接收端总是在每个字符的起始位处进行一次重新定位 因此 必须要保证每次采样都对应一个数据位 如果接收时钟和发送时钟的频率相差太大 引起在起始位之后刚采样几次就造成错位时 会出现采样造成的接收错误 如果遇到这种情况 就会出现停止位 按规定应为高电平 为低电平 此情况下 未必每个停止位都是低电平 从而引起信息帧格式错误 帧错误标志FE置位 35 367 UART中3种出错标志 溢出 丢失 错误 Overrunerror UART是一种双缓冲器结构 UART接收端在接收到第一个字符后便放入接收数据缓冲器 然后就继续从RXD线上接收第二个字符 并等待CPU从接收数据缓冲器中取走第一个字符 如果CPU很忙 一直没有机会取走第一个字符 以致接收到的第二字符进入接收数据缓冲器而造成第一个字符被丢失 于是产生了溢出错误 UART自动使溢出错误标志OE置位 36 367 二 并行通信中的相关概念1 并行接口定义 实现并行通信的接口电路分类 输入并行接口 输出并行接口和输入 输出并行接口 并行通信以同步方式传输 其特点是 传输速度快 硬件开销大 适合近距离传输 37 367 并行接口传输信息状态信息 状态信息表示外设当前所处的工作状态 例如 准备好信号 READY 1表示输入接口已经准备好 可以和CPU交换数据 忙信号 BUSY 1表示接口正在传输信息 CPU需要等待 控制信息 控制信息是由CPU发出的 用于控制外设接口的工作方式以及外设的启动和复位等 数据信息 CPU与并行接口交换的主要内容 38 367 一个典型的并行接口与CPU 外设连接图如图所示 图8 8典型并行接口电路图 39 367 2 并行接口电路组成输入缓冲寄存器 输入数据缓冲器主要功能是负责接收设备送来的数据 CPU通过读操作指令IN执行读操作 从输入数据缓冲器读取数据 输出缓冲寄存器 输出数据缓冲器主要功能是负责接收CPU送来的数据 如果设备处于空闲状态 则从输出数据缓冲器取走数据 接口通知CPU进行下一次输出操作 40 367 2 并行接口电路组成状态寄存器 状态寄存器用来存放外设运行状态信息 CPU通过访问状态寄存器来了解外设状态 进而控制外设的工作 控制寄存器 并行接口中有一个控制寄存器 CPU对外设设置的工作方式命令 操作命令都存放在控制寄存器中 通过控制寄存器控制外设的运行 数据信息 CPU与并行接口交换的主要内容 41 367 3 并行通信接口的基本输入 输出工作过程 1 输入过程外设首先将并行传输的数据放到外设与接口之间的数据总线上 并使 数据输入准备好 状态选通信号有效 该选通信号使数据输入到接口的输入数据缓冲器内 当数据写入输入数据缓冲器后 接口使 数据输入应答 信号有效 作为对外设输入的响应 外设收到此信号后 便撤销输入数据和 数据输入准备好 信号 42 367 数据到达接口后 接口在状态寄存器中设置 输入准备好 状态位 以便CPU进行查询 接口也可以在此时向CPU发送中断请求 表示数据已输入到接口 CPU既可以用查询程序方式 也可以用程序中断方式来读取接口中的数据 CPU从输入缓冲器中读取数据后 接口自动清除状态寄存器中 输入准备好 状态位 并使数据总线处于高阻状态 至此 一个数据的传送结束 43 367 2 输出过程当外设从接口取走数据后 接口就会将状态寄存器中 输出准备好 状态位置1 表示CPU当前可以向接口输出数据 这个状态位可供CPU进行查询 接口此时也可以向CPU发中断请求 CPU既可以用查询程序方式 也可以用程序中断方式向接口输出数据 当CPU将数据送到输出缓冲器后 接口自动清除 输出准备好 状态位 并将数据送往外设的数据线上 同时 接口将给外设发送 启动信号 来启动外设接收数据 44 367 外设被启动后 开始接收数据 并向接口发 数据输出应答 信号 接口收到此信号 便将状态寄存器中的 输出准备好 状态位置1 以便CPU输出下一个数据 45 367 8 2串行接口 一 单片机的串行接口STC15F2K60S2单片机具有2个采用UART工作方式的全双工串行通信接口 串口1和串口2 每个串口由2个数据缓冲器 1个移位寄存器 1个串行控制寄存器和一个波特率发生器等组成 46 367 每个串口的数据缓冲器由串行接收缓冲器和发送缓冲器构成 它们在物理上是独立的 既可以接收数据也可以发送数据 还可以同时发送和接收数据 接收缓冲器只能读出 不能写入 而发送缓冲器则只能写入 不能读出 它们共用一个地址号 串口1的接收缓冲器和发送缓冲器共用一个地址号 99H 串口2的接收缓冲器和发送缓冲器共用一个地址号 9BH 47 367 STC15F2K60S2的串行口既可以用于串行异步通信 也可以构成同步移位寄存器 如果在串行口的输入 输出引脚上加上电平转换器 可以方便地构成标准的RS 232接口 STC15F2K60S2单片机的串行口有4种工作方式 有的工作方式的波特率是可变的 用户用软件编程的方法在串行控制寄存器中写入相应的控制字节 即可改变串行口的波特率和工作方式 48 367 1 串行接口的寄存器与串行接口1相关的寄存器有 CON PCON AUXR SBUF TMOD TL1 TH1 TCON IE IP CLK DIV P SW2 SADEN和SADDR 与串行接口2相关的寄存器有 S2CON S2BUF T2H T2L AUXR IE2 IP2和AUXR1 49 367 1 串口1控制寄存器SCONSCON 地址为98H 复位值为00H 用于确定串口1的操作方式和控制串口1的某些功能 也可用于发送和接收第9个数据位 TB8 RB8 并设有接收和发送中断标志 RI及TI 位 SCON各位的定义如下 50 367 1 SM0 FE PCON寄存器中的SMOD0 1时 该位用于帧错误检测 当检测到一个无效停止位时 FE置1 它必须由软件清零 PCON寄存器中的SMOD0 0时 SM0 FE位和SM1一起指定串行通信的工作方式 如下表 表中SYSclk为振荡器频率 51 367 表8 1串行通信的工作方式 52 367 2 SM2 多机通信控制位 多机通信时单片机工作于方式2或方式3 SM2位是进行主 从多机通信的控制位 当进行主从式通信时 开始各个从机都应置SM2 1 主机发出的第一帧信息是地址帧信息 数据帧的第9数据位为1 此时各个从机接收到地址帧信息后都能产生中断 并进入各自的中断服务程序 53 367 只有被寻址的从机 地址与从主机发出的地址号相符 在中断服务程序中使SM2 0 为从机接收主机发出的数据帧信息 第9数据位为0 作准备 而其他从机仍然维持SM2 1 对主机以后发出的数据帧信息 将不会产生中断申请 从而不会接收后续的数据帧信息 在方式1时 如SM2 1 则只有在接收到有效停止位时才能激发中断标志 RI 1 如没有接收到有效停止位 则RI仍然为0 如果使用方式0 则SM2应为0 54 367 3 REN 允许接收控制位 1 允许串行口接收数据 0 禁止串行口接收数据 55 367 4 TB8在方式2和3时 它是要发送的第9个数据位 按需要由软件进行置位或清零 该位可用作数据的奇偶校验位 或在多机通信中用作地址帧 数据帧的标志位 5 RB8在方式2和3时 它是接收到的第9位数据 作为奇偶检验位或地址帧 数据帧标志位 在方式1时 若SM2 0 则RB8是接收到的停止位 在方式0时 不使用RB8 56 367 6 TI 发送中断标志位 在方式0时 当串行发送数据字第8位结束时由内部硬件置位 向CPU申请发送中断 CPU响应中断后 必须用软件清零 在其他方式时 在停止位开始发送时由硬件置位 同样 必须用软件清零 57 367 7 RI 接收中断标志位 在方式0时 当串行接收到第8位结束时由内部硬件置位 在其他方式时 RI在接收到停止位的中间时刻由硬件置位 例外情况见SM2说明 RI也必须用软件清0 58 367 TI与RI使用时需注意当一帧数据发送完成时 发送中断标志TI被置位 接着发生串口中断 进入串口中断服务程序 但CPU事先并不能分辨是TI还是RI的中断请求 因此 必须在中断服务程序中用位测试指令加以判别 两个中断标志位TI及RI均不能自动复位 必须在中断服务程序中使用清中断标志位指令 撤销中断请求状态 否则原先的中断标志位状态又将表示有中断请求 59 367 2 串口2控制寄存器S2CON寄存器S2CON 地址为9AH 复位值为00H 用于确定串口2的操作方式和控制串口2的某些功能 也可用于发送和接收第9个数据位 S2TB8 S2RB8 并设有接收和发送中断标志 S2RI及S2TI 位 S2CON各位的定义如下 60 367 其中 S2SM0用于指定串口2的工作方式 如表所示当T2x12 1时 定时器2的溢出率 SYSclk 65536 RL TH2 RL TL2 当T2x12 0时 定时器2的溢出率 SYSclk 12 65536 RL TH2 RL TL2 式中RL TH2是T2H的重装载寄存器 RL TL2是T2L的重装载寄存器 61 367 3 掉电控制寄存器PCONPCON 地址为87H 复位值为30H 中的SMOD用于设置方式1 方式2和方式3的波特率是否加倍 各位的定义如下 62 367 SMOD 串行口波特率系数控制位 复位时 SMOD 0 1 使方式1 方式2和方式3的波特率加倍 0 各工作方式的波特率不加倍 63 367 SMOD0 帧错误检测有效控制 复位时 SMOD0 0 1 SCON寄存器中的SM0 FE位用于FE 帧错误检测 功能 0 SCON寄存器中的SM0 FE位用于SM0功能 和SM1一起指定串行通信的工作方式 64 367 4 辅助寄存器AUXR辅助寄存器AUXR 地址为8EH 复位值为01H 各位的定义如下 65 367 1 UART M0 x6 串行口模式0的通信速度设置位 0 UART串口模式0的速度是传统12T的8051速度 12分频 1 UART串口模式0的速度是传统12T的8051的6倍 2分频 66 367 2 S1S2 串口1波特率发生器选择位 0 选择定时器1作为串口1波特率发生器 1 选择定时器2作为串口1波特率发生器 67 367 注意 对于具有串口2的STC15F2K60S2单片机 串口2只能使用独立波特率发生器作为波特率发生器 不能够选择定时器1作为波特率发生器 串口1可以选择定时器1作为波特率发生器 也可以选择独立波特率发生器作为波特率发生器 68 367 5 定时器2寄存器定时器2时间常数寄存器T2H和T2L 地址分别为0D6H和0D7H 复位值为00H 用于保存重装时间常数 从而作为波特率发生器使用 可以配合辅助寄存器AUXR中的T2R T2 C 和T2x12位进行时间常数的确定 69 367 6 从机地址控制寄存器为了方便多机通信 STC15F2K60S2单片机设置了从机地址控制寄存器SADEN和SADDR SADEN是从机地址掩模寄存器 地址为B9H 复位值为00H SADDR是从机地址寄存器 地址为A9H 复位值为00H 70 367 主机可以用从机地址来选择性的访问从机 可以用广播的方式来寻址所有的从机 从机的地址由SADDR和SADEN寄存器定义 从机地址是由SADDR设定的8位数据 如果SADEN中相应的位置0 则SADDR中对应的位无效 只有当SADEN中的相应位为1 SADDR中的数据才有效 也就是说 SADEN寄存器使能串口的自动地址识别功能 当SADEN中的某位被置为1 那么SADDR寄存器中的相应位会与接收到的数据进行比较 如果SADEN n被设为0 那么系统会忽略对该位的比较 如果SADEN为全0 那么对于所有的地址帧系统都会产生中断 71 367 7 数据缓冲器数据缓冲器用于保存要发送的数据或者从串口接收到的数据 串口1的数据缓冲器是SBUF 串口2的数据缓冲器是S2BUF 对于串口1 当一个字符接收完毕 移位寄存器中的数据字节装入串行接收数据缓冲器SBUF中 其第9位则装入SCON寄存器的RB8位 如果SM2使得已接收的数据无效 则RB8位和SBUF缓冲器中的内容不变 72 367 对于串口2 当一个字符接收完毕 移位寄存器中的数据字节装入串行接收数据缓冲器S2BUF中 其第9位则装入S2CON寄存器的S2RB8位 如果S2SM2使得已接收的数据无效 则S2RB8位和S2BUF缓冲器中的内容不变 无论对于串口1还是串口2 发送缓冲器只能写入 不能读出 接收缓冲器只能读出 不能写入 因此 串口1的两个缓冲器共用一个地址号 99H 串口2的两个缓冲器共用一个地址号 9BH 73 367 8 串口1的中继广播方式设置CLK DIV寄存器中的Tx Rx位用于串口1的中继广播方式设置 0 串口1为正常工作方式1 串口1为中继广播方式 即将RxD端口输入的电平状态实时输出在TxD外部管脚上 74 367 2 串行接口的工作方式STC15F2K60S2单片机的串行口1有4种工作方式 通过设置SCON寄存器的SM0和SM1进行选择 现分别加以介绍 方式0 移位寄存器方式方式1 8位可变波特率方式方式2 9位固定波特率方式方式3 9位可变波特率方式 75 367 1 方式0 移位寄存器方式方式0为半双工方式 又称为同步移位寄存器输出方式 在这种方式下 TXD引脚输出同步移位时钟 RXD用于发送和接收串行数据 串行口输出端可直接与移位寄存器相连 也可用作扩展I O口或外接同步输入输出设备 该方式下的数据帧为8位 低位在先 高位在后 没有起始位和停止位 76 367 发送过程当CPU将数据写入到发送缓冲区SBUF时 串行口即把8位二进制数以SYSclk 12或SYSclk 2 由UART M0 x6确定是12分频还是2分频 的波特率由RXD引脚输出 SYSclk为系统工作时钟 同时由TXD引脚输出同步移位脉冲 字符发送完毕 置中断标志TI为1 当写SBUF信号有效后 相隔一个时钟 发送控制端有效 允许RxD发送数据 同时允许TxD输出同步移位脉冲 一帧数据 8位 发送完毕时 各控制端均恢复原状态 只有TI保持高电平 呈中断申请状态 在再次发送数据前 必须用软件将TI清0 77 367 接收过程控制字除方式0外 还应置允许接收控制位REN 1 并清除RI中断标志 接收过程启动后 RXD为数据输入端 TXD为同步信号输出端 串行接收的波特率为SYSclk 12或SYSclk 2 由UART M0 x6确定是12分频还是2分频 接收完8位数据后重新置RI 1 当再次接收时 必须通过软件将RI清0 78 367 工作于方式0使用时需注意必须使SCON控制字的SM2位为0 从而不影响TB8和RB8位 在该方式下 波特率仅取决于系统时钟 无需使用定时器控制 以中断方式传送数据时 CPU响应中断并不会自动清除TI RI标志 在中断服务程序中必须由指令清零 如CLRTI及CLRRI 79 367 a 串行口1方式0功能结构图 80 367 b 串行口1方式0时序图 81 367 1 串口1的UART方式 方式1 8位可变波特率方式方式1提供异步全双工通信 适合于点到点的通信 每个数据帧长度为10位 1个起始位 低电平 8个数据位和1个停止位 高电平 传输的数据位首先是起始位 然后是8位数据 低位在前 最后一位是停止位 起始位和停止位是在发送时自动插入的 接收时 停止位进入SCON的RB8位 82 367 a 串行口1方式1功能结构图 83 367 发送过程发送数据时 数据由串行发送端TxD输出 当单片机执行一条写SBUF的指令时 就启动串行通信的发送 写SBUF信号还把1装入发送移位寄存器的第9位 并通知TX控制器开始发送 发送各位的定时时间由16分频计数器同步 移位寄存器将数据不断右移送TxD端口发送 在数据的左边不断移入0作补充 当数据的最高位移到移位寄存器的输出位置 紧跟其后的是第9位 1 在它的左边各位全为 0 这个状态条件 使TX控制器作最后一次移位输出 然后使允许发送信号 SEND 失效 完成一帧信息的发送 并置位中断请求位TI 即TI 1 向CPU请求中断处理 84 367 接收过程当软件置位接收允许标志位REN 即REN 1时 接收器便以选定波特率的16分频的速率采样串行接收端口RxD 当检测到RxD端口从1 0的负跳变时就启动接收器准备接收数据 并立即复位16分频计数器 将1FFH值装入移位寄存器 复位16分频计数器的目的是使它与输入位时间同步 85 367 16分频计数器的16个状态是将每位的接收时间均为16等份 在每位时间的7 8 9状态由检测器对RxD端口进行采样 经 三中取二 后的值作为本次所接收的值 即3次采样至少2次相同的值 以此消除干扰影响 提高可靠性 在起始位 如果接收到的值不为0 低电平 则起始位无效 复位接收电路 并重新检测1 0的跳变 如果接收到的起始位有效 则将它输入移位寄存器 并接收本帧的其余信息 86 367 接收的数据从接收移位寄存器的右边移入 已装入的1FFH向左边移出 当起始位0移到移位寄存器的最左边时 使RX控制器作最后一次移位 完成一帧的接收 若同时满足以下两个条件 RI 0 SM2 0或接收到的停止位为1 则接收到的数据有效 数据载入SBUF 停止位进入RB8 置位RI 向CPU请求中断 若上述两条件不能同时满足 则接收到的数据作废并丢失 无论条件满足与否 接收器重新检测RxD端口上的1 0的跳变 继续下一帧的接收 接收有效 在响应中断后 必须由软件将RI清0 通常情况下 串行口工作于方式1时 SM2设置为0 87 367 串行通信方式1的波特率是可变的 波特率由定时器1或定时器2的溢出率决定 定时 计数器的溢出率定义为 单位时间 秒 内定时器 计数器溢出的次数串行口1用定时器1作为波特率发生器且定时器1工作于模式0 16位自动重装模式 时 波特率 定时器1的溢出率 4 注意 此时波特率与SMOD无关 88 367 当定时器1工作于模式0 16位自动重装模式 且T1x12 0时定时器1的溢出率 SYSclk 12 65536 RL TH1 RL TL1 此时 串口1的波特率 SYSclk 12 65536 RL TH1 RL TL1 4 89 367 当串行口1用定时器1作为波特率发生器且定时器1工作于模式2 8位自动重装模式 时波特率 定时器1的溢出率 当定时器1工作于模式2 8位自动重装模式 且T1x12 0时定时器1的溢出率 SYSclk 12 256 TH1 此时 串口1的波特率 SYSclk 12 256 TH1 90 367 当定时器1工作于模式2且T1x12 1时定时器1的溢出率 SYSclk 256 TH1 此时 串口1的波特率 SYSclk 256 TH1 当T2x12 0时定时器2的溢出率 SYSclk 12 65536 RL TH2 RL TL2 此时 串口1的波特率 SYSclk 12 65536 RL TH2 RL TL2 4当T2x12 1时 定时器2的溢出率 SYSclk 65536 RL TH2 RL TL2 此时 串口1的波特率 SYSclk 65536 RL TH2 RL TL2 4 其中 RL TH2是TH2的自动重装寄存器 RL TL2是TL2的自动重装寄存器 91 367 定时器1工作于模式0 16位自动重装模式 且T1x12 1时定时器1的溢出率 SYSclk 65536 RL TH1 RL TL1 此时 串口1的波特率 SYSclk 65536 RL TH1 RL TL1 4 其中 RL TH1是TH1的自动重装载寄存器 RL TL1是TL1的自动重装载寄存器 92 367 方式1的发送 接收工作波形图如图所示 b 串行口1方式1时序图 93 367 串口方式2 9位固定波特率方式方式2提供异步全双工通信 适合于固定波特率的多机通信 每个数据字节长度为11位 1个起始位 8个数据位 低位在前 1个可编程的第9位 TB8 RB8 和1个停止位 与方式1相比 每帧增加了一个第9位 发送时 第9位数据由TB8确定 可以置位也可以清0 接收时 第9位进入RB8位 94 367 方式2的波特率为 串行通信方式2波特率 SYSclk为系统工作时钟频率PCON寄存器中的SMOD为波特率加倍位当SMOD 1时 波特率为SYSclk 32 当SMOD 0时 波特率为SYSclk 64 95 367 a 串行通信方式2的功能结构示意图 96 367 b 串行通信方式2的接收 发送时序图 97 367 2 串口2的工作方式0串行数据通过RXD2 P1 2 RXD2 P4 2 接收和发送 TXD2 P1 3 TXD2 P4 3 输出同步移位时钟 发送接收的是8位数据 低位在先 波特率固定在Fosc 12 串口2的模式0操作和串口1的模式0操作方式相同 98 367 当接收器接收完一帧信息后必须同时满足下列条件 RI 0SM2 0或者SM2 1 并且接收到的第9数据位RB8 1当上述两条件同时满足时 才将接收到的移位寄存器的数据装入SBUF和RB8中 并置位RI 向CPU请求中断处理 如果上述条件有一个不满足 则刚接收到移位寄存器中的数据无效而丢失 也不置位RI 无论上述条件满足与否 接收器又重新开始检测RxD输入端口的跳变信息 接收下一帧的输入信息 99 367 在方式2中 接收到的停止位与SBUF RB8和RI无关 通过软件对SCON中的SM2 TB8的设置以及通信协议的约定 为多机通信提供了方便 100 367 串口方式3 9位可变波特率方式该方式也适合于多机通信 方式3的每个数据字节长度为11位 1个起始位 8个数据位 低位在前 1个可编程的第9位 TB8 RB8 和1个停止位 发送时 第9位数据由TB8确定 可以置位也可以清0 接收时 第9位数据进入RB8位 方式3和方式1一样 其波特率可通过软件对定时器 计数器1或定时器2的设置进行波特率的选择 是可变的 101 367 a 工作方式3的功能结构 102 367 b 工作方式3的数据接收 发送时序图 103 367 发送过程CPU执行数据写入发送缓冲区SBUF的指令即可启动发送 如MOVSBUF A 串行口自动将发送缓冲区中的内容送入发送移位寄存器 发送移位寄存器先发送一个起始位 接着按程序设定每个字符的代码 先低位后高位 数据字加上奇偶校验位或可控位 方式2 3中即为程序设定的TB8位的值 再发送停止位 从而完成一帧的发送 串行数据均由TXD端输出 发送完毕 将发送中断标志位TI置1 以供查询及向CPU申请中断之用 CPU的响应中断后必须在中断服务程序中使TI清0 104 367 接收过程接收数据由RXD输入 串行口以所选定波特率的16倍速率采样RXD端状态 当RXD端电平由1到0跳变时 就启动接收器 串行口按程序规定的格式接收一帧代码 并把此码的数据位拼成并行码送入接收缓冲寄存器中 在方式1时 把停止位送入RB8 在方式2 3时 把程控的第9位数据送入RB8 等待CPU取走 为保证可靠无误 对每一数据位进行连续3次采样 取3次采样中至少两次相同的值 接收完毕 置接收中断标志RI 1 CPU的响应中断后必须在中断服务程序中使RI清0 105 367 当接收器接收完一帧信息后必须同时满足下列条件 RI 0SM2 0或者SM2 1 并且接收到的第9数据位RB8 1 当上述两条件同时满足时 才将接收到的移位寄存器的数据装入SBUF和RB8中 并置位RI 向CPU请求中断处理 如果上述条件有一个不满足 则刚接收到移位寄存器中的数据无效而丢失 也不置位RI 无论上述条件满足与否 接收器又重新开始检测RxD输入端口的跳变信息 接收下一帧的输入信息 106 367 在方式3中 接收到的停止位与SBUF RB8和RI无关 通过软件对SCON中的SM2 TB8的设置以及通信协议的约定 为多机通信提供了方便 107 367 几种常用的典型帧格式 图8 13串行通信典型帧格式 108 367 总结在实际应用中 应根据实际需要选择串行口的工作方式 由于方式1和方式3的波特率可以通过定时器1控制 通信波特率的设定比较灵活 因此 方式1和方式3使用较多 其中 方式1常用于点对点通信的情况 而方式3常用语多机通信的情况 109 367 串行口工作方式一览表 110 367 方式1与方式2 3的区别方式1中 数据字是8位异步通信接口 串行口发送 接收共10位信息 第0位为起始位 1 8位是数据位 最后是停止位 方式2 3中 数据字为9位的异步通信接口 1位起始位 8位数据位 第9位是可程控位 1 或 0 最后是停止位 共有11位信息 方式1 3的波特率是可变的 其波特率取决于定时器1的溢出率或BRT的溢出率和特殊功能寄存器PCON中的SMOD位的值 111 367 方式1 3的波特率 2SMOD 定时器1的溢出率或BRT的溢出率 32方式2的波特率 2SMOD 振荡器频率 64由上述公式可以看出 PCON寄存器中的SMOD是 1 还是 0 决定波特率是否加倍 112 367 在方式2和方式3中还可通过控制TB8位的方法 使其传送中附加的第9位数据可以作为多机通信中的地址 数据标志位 或作为数据的奇偶校验位 若以TB8位作为奇偶校验位 在数据写入SBUF之前 先将数据的奇偶位写入TB8 113 367 可以使用下面的代码实现通信的偶校验 假设要发送的数据保存在R2中 MOVA R2 取数据MOVC PMOVTB8 CMOVSBUF A 数据写入到发送缓冲器 启动发送器 114 367 编写接收程序时 均应使REN 1 允许串行接收 只有在最后的移位脉冲产生并同时满足下列条件时 接收数据才会装入SBUF和RB8并置位RI 对于方式1 SM2 0或接收到的停止位 1 对方式2 3 SM2 0或接收到的第九个数据 1 115 367 2 串口2的UART方式 方式010位数据通过TXD2 P1 0 TXD2 P46 发送 通过TxD2 P1 1 TxD2 2 P4 7 发送 一帧数据包含一个起始位 0 8个数据位和一个停止位 1 接收时 停止位进入特殊功能寄存器S2CON的S2RB8位 波特率由独立波特率发生器BRT的溢出率决定 116 367 当T2工作在1T模式 T2x12 1 时T2的溢出率 SYSclk 65536 RL TH2 RL TL2 此时 串行口2的波特率 SYSclk 65536 RL TH2 RL TL2 4当T2工作在12T模式 T2x12 0 时T2的溢出率 SYSclk 12 65536 RL TH2 RL TL2 此时 串行口2的波特率 SYSclk 12 65536 RL TH2 RL TL2 4其中 RL TH2是T2H的重装载寄存器 RL TL2是T2L的重装载寄存器 117 367 方式111位数据通过TxD2 P1 1 TxD2 2 P4 7 发送 通过RxD2 P1 0 RxD2 2 P4 6 接收 一帧数据包含一个起始位 0 8个数据位 一个可编程的第9位和一个停止位 1 发送时 第9位数据由特殊功能寄存器S2CON的S2TB8位确定 接收时 第9位数据进入特殊功能寄存器S2CON的S2RB8位 波特率的计算方法与方式0相同 在此略 118 367 3 多处理机通信以使用串口1为例 说明多机通信的过程 串行口控制寄存器SCON中的SM2位为方式2和方式3工作时进行多机通信的控制位 这种多机通信方式一般为 一台主机 多台从机 系统 主机发送的信息可被各从机接收 而从机只能对主机发送信息 从机间互相不能直接通信 119 367 典型的多机通信结构图如图所示 图8 14多机通信系统示意图 120 367 多机系统设置需注意多机系统中 从机串行口必须在方式2或方式3下工作 应使SM2及REN控制位置 1 从而使从机先处于只能接收地址帧信息 第9数据位为1 的状态 当从机接收到主机发出的地址帧信息后 串行口可向CPU申请中断 121 367 多机系统通信过程当主机和某一从机通信时 主机应先发出一帧包含某从机地址的信息给各从机 TB8 1 当各从机接收到主机发出的地址帧信息后 自动将第9数据位状态 1 送到SCON控制寄存器的RB8位 并将中断标志RI置1 产生中断 各CPU响应中断后均进入中断服务程序 在服务程序中把主机送来的地址号与本从机的地址号相比较 122 367 若地址相等 则使本机的SM2置 0 为接收主机接着发送来的数据帧 第9数据位为0 作准备 而地址号不符的其他从机仍然维持SM2 1的状态 对主机以后发出的数据帧信息不予理睬 不产生中断标志RI 直到与主机发出的地址信息相符后 才可接收以后的数据信息 从而实现了主从一对一通信 主机在发送完呼叫地址帧后 TB8 1 接着发送一连串的数据帧 TB8 0 123 367 当主机要和另一个从机通信时 则再发呼叫地址帧 TB8 1 呼叫其他从机 原先被寻址的从机经分析得知主机在呼叫其他从机时 恢复其SM2 1 对其后主机发送的数据帧不予理睬 使用串行口2进行多机通信的方法与此类似 仅把SCON中的SM2 REN TB8和RB8换成对应的S2CON中的S2SM2 S2REN S2TB8和S2RB8即可 124 367 4 波特率的设定 1 串行口1的波特率设定方式0的波特率当UART M0 x6 0时 波特率为SYSclk 12 当UART M0 x6 1时 波特率为SYSclk 2 方式2的波特率当SMOD 0时 波特率为SYSclk 64 当SMOD 1时 为SYSclk 32 方式1和3的波特率串行口1工作于方式1和3时 波特率是可变的 可以通过编程改变定时器1的溢出率或者定时器2的溢出率来确定波特率 125 367 编程时应注意当定时器作为波特率发生器使用时 应禁止定时器产生中断 ET1 0或者ET2 0 典型用法是定时器1工作在自动再装入时间常数的定时方式2 设置完成后 启动定时器1 TR1 1或T2R 1 STC15F2K60S2单片机是 一个时钟周期 的8051单片机 选用定时器1作为波特率发生器时 应注意时钟分频的设置与波特率之间的关系 1T模式下的波特率时相同条件下12T模式的12倍 126 367 总结波特率的计算方法 串行口1用定时器1作为波特率发生器时 且定时器1工作于模式0 16位自动重装模式 作为波特率发生器时波特率 定时器1的溢出率 4 SYSclk 12n 65536 RL TH1 RL TL1 4 其中 12T模式时 T1x12 0 n 1 1T模式时 T1x12 1 n 0 下同 RL TH1是TH1的自动重装载寄存器 RL TL1是TL1的自动重装载寄存器 注意 此时波特率与SMOD无关 127 367 当串行口1用定时器1作为波特率发生器且定时器1工作于模式2 8位自动重装模式 时波特率 定时器1的溢出率 SYSclk 12n 256 TH1 128 367 定时器2只有一种工作方式 即16位自动重装方式 因此使用定时器2作为波特率发生器时 串口1的波特率为 串口1的波特率 SYSclk 12n 65536 RL TH2 RL TL2 4 其中 RL TH2是TH2的自动重装寄存器 RL TL2是TL2的自动重装寄存器 在实际应用中 一般选用串行方式1或串行方式3 此时 波特率的设置 关键在于定时器 计数器1和定时器2的溢出率的计算 129 367 2 串行口2波特率的设定对于串行口2 只能通过编程改变定时器2的溢出率来确定波特率 串行口2只有两种工作方式 S2SM0 0为方式0 的8位数据位的UART工作方式 S2SM0 1为方式1 9位数据位的UART工作方式 它们的波特率计算方法相同 都是如下公式所示 串行口2的波特率 SYSclk 12n 65536 RL TH2 RL TL2 4 130 367 常用的串行口波特率 系统时钟以及定时器1 工作于方式2时 重装时间常数之间的关系如表8 4所示 可以直接从表中查得所需设置的时间常数 定时器1工作于方式0时以及使用定时器T2作为波特率发生器时的重装时间常数 可根据计算公式自行计算 131 367 5 串行接口通信应用举例下面分别说明STC15F2K60S2单片机使用串口1和串口2的串行通信程序编程要点 在编程应用中 虽然可以采用查询方式进行通信 但是 为了有效进行实时任务处理 一般采用中断方式进行串行通信 1 串口1的编程要点1 设置串口的工作模式设置SCON寄存器的内容 若要串口接收 需将其中的REN位置1 132 367 2 设置正确的波特率 使用定时器1作为波特率发生器时 需要设置定时器1的工作方式和时间常数 设定TMOD和TH1 TL1寄存器的内容 启动定时器1 置位TR1 使用定时器2作为波特率发生器时 需要设置定时器2寄存器和相应的位 包括 定时器2自动重装寄存器T2H和T2L T2 C 位 T2x12位 SMOD位 启动T2 置位T2R T2开始计数 133 367 3 设置串口的中断优先级 设置PS寄存器的内容 也可以不设置 取默认值 设置相应的中断控制位 ES和EA 4 如要串口1发送 将数据送入SBUF 5 编制串行中断服务程序 在中断服务程序中要有清除中断标志指令 将TI和RI清0 134 367 2 串口2的编程要点1 设置串口2的工作模式设置S2CON寄存器中的S2SM0位 如要串口2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论