




已阅读5页,还剩236页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 3 15 1 第7章89C51串行口及串行通信技术 本书前几章涉及的数据传送都是采用并行方式 如89C51与存储器 存储器与存储器 89C51与并行打印机之间的通信 89C51处理8位数据 若以并行传送方式一次传送一个字节的数据 至少需要8条数据线 2020 3 15 2 当89C51与打印机连接时 除8条数据线外 还需要状态 应答等控制线 一些微机系统 如IBM PC系列机 由于磁盘机 CRT 打印机与主机系统的距离有限 所以 使用多条电缆线以提高数据传送速度还是合算的 但是 计算机之间 计算机与其终端之间的距离有时非常远 此时 电缆线过多是不经济的 第7章89C51串行口及串行通信技术 2020 3 15 3 串行通信只用一位数据线传送数据的位信号 即使加上几条通信联络线 也用不了很多电缆线 因此 串行通信适合远距离数据传送 当然 串行通信要求有转换数据格式 时间控制等逻辑电路 这些电路目前已被集成在大规模集成电路中 称为可编程串行通信控制器 使用很方便 第7章89C51串行口及串行通信技术 2020 3 15 4 第七章89C51串行口及串行通信技术 本章将介绍89C51串行口的结构及应用 PC机与89C51间的双机通信 一台PC机控制多台89C51前沿机的分布式系统 以及通信接口电路和软件设计 并给出设计实例 包括接口电路 程序框图 主程序和接收 发送子程序 2020 3 15 5 第七章89C51串行口及串行通信技术 7 1串行通信基本知识7 2串行口及应用7 389C51与89C51点对点异步通信7 489C51与PC机间通信7 5思考题与习题 返回 2020 3 15 6 7 1串行通信基本知识 7 1 1数据通信7 1 2串行通信的传输方式7 1 3异步通信和同步通信7 1 4串行通信的过程及通信协议 返回 2020 3 15 7 7 1 1数据通信 在实际工作中 计算机的CPU与外部设备之间常常要进行信息交换 一台计算机与其他计算机之间也往往要交换信息 所有这些信息交换均可称为通信 通信方式有两种 即并行通信和串行通信 通常根据信息传送的距离决定采用哪种通信方式 返回 2020 3 15 8 7 1 1数据通信 例如 在IBM PC机与外部设备 如打印机等 通信时 如果距离小于30m 可采用并行通信方式 当距离大于30m时 则要采用串行通信方式 89C51单片机具有并行和串行二种基本通信方式 返回 2020 3 15 9 7 1 1数据通信 并行通信 是指数据的各位同时进行传送 发送或接收 的通信方式 P148图7 1 a 优点 是传送速度快 缺点 是数据有多少位 就需要多少根传送线 例 89C51单片机与打印机之间的数据传送就属于并行通信 返回 2020 3 15 10 7 1 1数据通信 图7 1 a 所示为89C51与外设间8位数据并行通信的连接方法 并行通信在位数多 传送距离又远时就不太合适了 串行通信 指数据是一位一位按顺序传送的通信方式 它的突出优点 是只需一对传输线 利用电话线就可作为传输线 这样就大大降低了传送成本 特别适用于远距离通信 返回 2020 3 15 11 7 1 1数据通信 其缺点 是传送速度较低 假设并行传送N位数据所需时间位T 那么串行传送的时间至少为NT 实际上总是大于NT的 图7 1 b 所示为串行通信方式的连接方法 返回 图7 1数据通信方式 2020 3 15 13 7 1 2串行通信的传输方式 串行通信的传送方式通常有三种 单向 或单工 配置 只允许数据向一个方向传送 半双向 或半双工 配置 允许数据向两个方向中的任一方向传送 但每次只能有一个站点发送 全双向 全双工 配置 允许同时双向传送数据 因此 全双工配置是一对单向配置 它要求两端的通信设备都具有完整和独立的发送和接受能力 P146图7 2所示为串行通信中的数据传送方式 返回 图7 2串行通信中的数据传送方式 2020 3 15 15 7 1 3异步通信和同步通信 串行通信有两种基本通信方式 即异步通信和同步通信 1 异步通信在异步通信中 数据是一帧一帧 包括一个字符代码或一字节数据 传送的 每一帧的数据格式如P149图7 3所示 返回 图7 3异步通信数据格式 2020 3 15 17 1 异步通信 在帧格式中 一个字符由四个部分组成 起始位 数据位 奇偶校验位和停止位 首先是一个起始位 0 然后是5 8位数据位 规定低位在前 高位在后 接下来是奇偶校验位 可省略 最后是停止位 1 返回 2020 3 15 18 1 异步通信 起始位 0 信号只占用一位 用来通知接收设备一个待接收的字符开始到达 线路上在不传送字符时应保持为1 接收端不断检测线路的状态 若连续为1以后又测到一个0 就知道发来一个新字符 应马上准备接收 字符的起始位还被用作同步接收端的时钟 以保证以后的接收能正确进行 起始位后面紧接着是数据位 它可以是5位 D0 D4 6位 7位或8位 D0 D7 返回 2020 3 15 19 1 异步通信 奇偶校验 D8 只占一位 但在字符中也可以规定不用奇偶校验位 则这一位就可省去 也可用这一位 1 0 来确定这一帧中的字符所代表信息的性质 地址 数据等 停止位用来表征字符的结束 它一定是高电位 逻辑1 停止位可以是1位 1 5位或2位 接收端收到停止位后 知道上一字符已传送完毕 同时 也为接收下一个字符做好准备 只要再接收到0 就是新的字符的起始位 若停止位以后不是紧接着传送下一个字符 则使线路电平保持为高电平 逻辑1 返回 2020 3 15 20 P149图7 3 a 表示一个字符紧接一个字符传送的情况 上一个字符的停止位和下一个字符的起始位是紧邻的 P149图7 3 b 则是两个字符间有空闲位的情况 空闲位为1 线路处于等待状态 存在空闲位正是异步通信的特征之一 例如 规定用ASCII编码 字符为七位 加一个奇偶校验位 一个起始位 一个停止位 则一帧共十位 1 异步通信 返回 2020 3 15 21 2 同步通信 同步通信中 在数据开始传送前用同步字符来指示 常约定1个 2个 并由时钟来实现发送端和接收端同步 即检测到规定的同步字符后 下面就连续按顺序传送数据 直到通信告一段落 同步传送时 字符与字符之间没有间隙 也不用起始位和停止位 仅在数据块开始时用同步字符SYNC来指示 其数据格式如P150图7 4所示 返回 图7 4异步通信数据格式 2020 3 15 23 2 同步通信 同步字符的插入可以是单同步字符方式或双同步字符方式 如P150图7 4所示 然后是连续的数据块 同步字符可以由用户约定 当然也可以采用ASCII码中规定的SYNC代码 即16H 按同步方式通信时 先发送同步字符 接收方检测到同步字符后 即准备接收数据 返回 2020 3 15 24 2 同步通信 在同步传送时 要求用时钟来实现发送端与接收端之间的同步 为了保证接收正确无误 发送方除了传送数据外 还要同时传送时钟信号 同步传送可以提高传输速率 达56kb s或更高 但硬件比较复杂 返回 2020 3 15 25 3 波特率 Baudrate 波特率 即数据传送速率 表示每秒钟传送二进制代码的位数 它的单位是b s 波特率对于CPU与外界的通信是很重要的 假设 数据传送速率是120字符 s 而每个字符格式包含1个代码位 1个起始位 1个终止位 8个数据位 这时 传送的波特率为 10b 字符 120字符 s 1200b s 返回 2020 3 15 26 3 波特率 Baudrate 每一位代码的传送时间Td为波特率的倒数 Td 1b 1200b s 1 0 833ms异步通信的传送速率在50b s 19200b s之间 常用于计算机到终端机和打印机之间的通信 直通电报以及无线电通信的数据发送等 返回 2020 3 15 27 7 1 4串行通信的过程及通信协议 1 串 并转换与设备同步两个通信设备在串行线路上成功地实现通信必须解决两个问题 一是串 并转换 即如何把要发送的并行数据串行化 把接收的串行数据并行化 二是设备同步 即同步发送设备与接收设备的工作节拍 以确保发送数据在接收端被正确读出 返回 2020 3 15 28 1 串 并转换与设备同步 1 串 并转换串行通信 是将计算机内部的并行数据转换成串行数据 将其通过一根通信线传送 并将接收的串行数据再转换成并行数据送到计算机中 返回 2020 3 15 29 1 串 并转换与设备同步 在计算机串行发送数据之前 计算机内部的并行数据被送入移位寄存器并一位一位地输出 将并行数据转换成串行数据 如P151图7 5所示 在接收数据时 来自通信线路的串行数据被压入移位寄存器 满8位后并行送到计算机内部 如P151图7 6所示 在串行通信控制电路中 串 并 并 串转换逻辑被集成在串行异步通信控制器芯片中 89C51单片机的串行口和IBM PC相同 返回 图7 5发送时的并 串转换 图7 6接收时的串 并转换 2020 3 15 32 2 设备同步 进行串行通信的两台设备必须同步工作才能有效地检测通信线路上的信号变化 从而采样传送数据脉冲 设备同步对通信双方有两个共同要求 一是通信双方必须采用统一的编码方法 二是通信双方必须能产生相同的传送速率 返回 2020 3 15 33 2 设备同步 采用统一的编码方法确定了一个字符二进制表示值的位发送顺序和位串长度 当然还包括统一的逻辑电平规定 即电平信号高低与逻辑1和逻辑0的固定对应关系 通信双方只有产生相同的传送速率 才能确保设备同步 这就要求发送设备和接收设备采用相同频率的时钟 发送设备在统一的时钟脉冲上发出数据 接收设备才能正确检测出与时钟脉冲同步的数据信息 返回 2020 3 15 34 2 串行通信协议 通信协议 是对数据传送方式的规定 包括数据格式定义和数据位定义等 通信双方必须遵守统一的通信协议 串行通信协议包括同步协议和异步协议两种 在此只讨论异步串行通信协议和异步串性协议规定的字符数据的传送格式 返回 2020 3 15 35 2 串行通信协议 1 起始位通信线上没有数据被传送时处于逻辑1状态 当发送设备要发送一个字符数据时 首先发出一个逻辑0信号 这个逻辑低电平就是起始位 起始位通过通信线传向接收设备 接收设备检测到这个逻辑低电平后 就开始准备接收数据位信号 起始位所起的作用就是设备同步 通信双方必须在传送数据位前协调同步 返回 2020 3 15 36 2 串行通信协议 2 数据位当接收设备收到起始位后 紧接着就会收到数据位 数据位的个数可以是5 6 7或8 IBM PC中经常采用7位或8位数据传送 89C51串行口采用8位或9位数据传送 这些数据位被接收到移位寄存器中 构成传送数据字符 在字符数据传送过程中 数据位从最低有效位开始发送 依次顺序在接收设备中被转换为并行数据 返回 2020 3 15 37 2 串行通信协议 3 奇偶校验位数据位发送完之后 可以发送奇偶校验位 奇偶校验用于有限差错检测 通信双方需约定已知的奇偶校验方式 如果选择偶校验 那么组成数据位和奇偶位的逻辑1的个数必须是偶数 如果选择奇校验 那么逻辑1的个数必须是奇数 返回 2020 3 15 38 2 串行通信协议 4 停止位约定在奇偶位或数据位 当无奇偶校验时 之后发送的是停止位 停止位是一个字符数据的结束标志 可以是1位 1 5位或2位的高电平 接收设备收到停止位之后 通信线路上便又恢复逻辑1状态 直至下一个字符数据的起始位到来 返回 2020 3 15 39 2 串行通信协议 5 波特率设置通信线上传送的所有位信号都保持一致的信号持续时间 每一位的信号持续时间都由数据传送速度确定 而传送速度是以每秒多少个二进制位来衡量的 这个速度叫波特率 如果数据以300个二进制位每秒在通信线上传送 那么传送速度为300波特 通常记为300b s 返回 2020 3 15 40 2 串行通信协议 6 挂钩 握手 信号约定 见本章7 4节实例 返回 2020 3 15 41 7 2串行口及应用 89C51单片机除具有4个8位并行口外 还具有串行接口 此串行接口是一个全双工串行通信接口 即能同时进行串行发送和接收数据 它可以作UATR 通用异步接收和发送器 用 也可以作同步移位寄存器用 使用串行接口可以实现89C51单片机系统之间点对点的单机通信和89C51与系统机 如IBM PC机等 的单机或多机通信 返回 2020 3 15 42 7 2串行口及应用 7 2 189C51串行口7 2 289C51串行口的工作方式及应用 返回 2020 3 15 43 7 2 189C51串行口 1 结构2 串行口控制字及控制寄存器3 串行通信工作方式4 波特率设计 返回 2020 3 15 44 1 结构 89C51通过引脚RXD P3 0 串行数据接收端 和引脚TXD P3 1 串行数据发送端 与外界进行通信 其内部结构简化示意图如P153图7 7所示 图中有两个物理独立的接收 发送缓冲器SBUF 它们占用同一地址99H 可同时发送 接收数据 发送缓冲器只能写入 不能读出 接收缓冲器只能读出 不能写入 返回 2020 3 15 45 1 结构 串行发送与接收的速率与移位时钟同步 89C51用定时器T1作为串行通信的波特率发生器 T1溢出率经2分频 或不分频 后又经16分频作为串行发送或接收的移位脉冲 移位脉冲的速率即是波特率 返回 图7 7串行口内部结构示意简图 2020 3 15 47 1 结构 从图中可看出 接收器是双缓冲结构 在前一个字节被从接收缓冲器SBUF读出之前 第二个字节即开始被接收 串行输入至移位寄存器 但是 在第二个字节接收完毕而前一个字节CPU未读取时 会丢失前一个字节 串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的 当向SBUF发 写 命令时 执行 MOVSBUF A 指令 即是向发送缓冲器SBUF装载并开始由TXD引脚向外发送一帧数据 发送完便使发送中断标志位TI 1 返回 2020 3 15 48 1 结构 在满足串行口接收中断标志位RI SCON 0 0的条件下 置允许接收位REN SCON 4 1就会接收一帧数据进入移位寄存器 并装载到接收SBUF中 同时使RI 1 当发读SBUF命令时 执行 MOVA SBUF 命令 便由接收缓冲器 SBUF 取出信息通过89C51内部总线送CPU 对于发送缓冲器 因为发送时CPU是主动的 不会产生重叠错误 一般不需要用双缓冲器结构来保持最大传送速率 返回 2020 3 15 49 2 串行口控制字及控制寄存器 89C51串行口是可编程接口 对它初始化编程只用两个控制字分别写入特殊功能寄存器SCON 98H 和电源控制寄存器PCON 87H 中即可 1 SCON 98H 89C51串行通信的方式选择 接收和发送控制以及串行口的状态标志等均由特殊功能寄存器SCON控制和指示 其控制字格式如P154图7 8所示 返回 图7 8串行口控制寄存器SCON 2020 3 15 51 2 串行口控制字及控制寄存器 SM0和SM1 SCON 7 SCON 6 串行口工作方式选择位 两个选择位对应4种通信方式 如P154表7 1所示 其中 fosc是振荡频率 2020 3 15 52 2 串行口控制字及控制寄存器 SM2 SCON 5 多机通信控制位 主要用于方式2和方式3 若置SM2 1 则允许多机通信 当一片89C51 主机 与多片89C51 从机 通信时 所有从机的SM2位都置1 主机首先发送的一帧数据为地址 即从机机号 其中第9位为1 所有的从机接收到数据后 将其中第9位装入RB8中 返回 2020 3 15 53 2 串行口控制字及控制寄存器 各个从机根据收到的第9位数据 RB8中 的值来决定从机可否再接收主机的信息 若 RB8 0 说明是数据帧 则使接收中断标志位RI 0 信息丢失 若 RB8 1 说明是地址帧 数据装入SBUF并置RI 1 中断所有从机 被寻址的目标从机清除SM2以接收主机发来的一帧数据 其他从机仍然保持SM2 1 返回 2020 3 15 54 2 串行口控制字及控制寄存器 若SM2 0 即不属于多机通信情况 则接收一贞数据后 不管第九位数据是0还是1 都制RI 1 接收到的数据装入SBUF 根据SM2这个功能 可实现多个89C51应用系统的串行通信 在方式1时 若SM2 1 则只有接收到有效停止位时 RI才制1 以便接收下一贞数据 在方式0时 SM2必须是0 返回 2020 3 15 55 2 串行口控制字及控制寄存器 REN SCON 4 允许接收控制位 由软件置1或清0 只有当REN 1时才允许接收 相当于串行接收的开关 若REN 0 则禁止接收 在串行通信接收控制过程中 如果满足RI 0和REN 1 允许接收 的条件 就允许接收 一帧数据就装载入接收SBUF中 返回 2020 3 15 56 2 串行口控制字及控制寄存器 TB8 SCON 3 发送数据的第9位 D8 装入TB8中 在方式2或方式3中 根据发送数据的需要由软件置位或复位 在许多通信协议中可用作奇偶校验位 也可在多机通信中作为发送地址帧或数据帧的标志位 对于后者 TB8 1 说明该帧数据为地址 TB8 0 说明该帧数据为数据字节 在方式0或方式1中 该为未用 返回 2020 3 15 57 2 串行口控制字及控制寄存器 RB8 SCON 2 接收数据的第9位 在方式2或方式3中 接收到的第9位数据放在RB8位 它或是约定的奇 偶校验位 或是约定的地址 数据标识位 在方式2和方式3多机通信中 若SM2 1 如果RB8 1 说明收到的数据为地址帧 在方式1中 若SM2 0 即不是多机通信情况 RB8中存放的是已接收到的停止位 在方式0中 该位未用 返回 2020 3 15 58 2 串行口控制字及控制寄存器 TI SCON 1 发送中断标志 在一帧数据发送完时被置位 在方式0串行发送第8位结束或其他方式串行发送到停止位的开始时由硬件置位 可用软件查询 它同时也申请中断 TI置位意味着向CPU提供 发送缓冲器SBUF已空 的信息 CPU可以准备发送下一帧数据 串行口发送中断被响应后 TI不会自动清0 必须由软件清0 返回 2020 3 15 59 2 串行口控制字及控制寄存器 RI SCON 0 接收中断标志 在节收到一帧有效数据后由硬件置位 在方式0中 第8位数据发送结束时 由硬件置位 在其他三种方式中 当接收到停止位中间时由硬件置位 RI 1 申请中断 表示一帧数据接收结束 并已装入接收SBUF中 要求CPU取走数据 CPU响应中断 取走数据 RI也必须由软件清0 清除中断申请 并准备接收下一帧数据 返回 2020 3 15 60 2 串行口控制字及控制寄存器 串行发送中断标志TI和接收中断标志RI是同一个中断源 CPU事先不知道是发送中断TI还是接收中断RI产生的中断请求 所以 在全双工通信时 必须由软件来判别 复位时 SCON所有位均清0 返回 2020 3 15 61 2 串行口控制字及控制寄存器 2 PCON 87H 电源控制寄存器PCON中只有SMOD位与串行口工作有关 如图7 9所示 图7 9电源控制寄存器PCON 2020 3 15 62 2 串行口控制字及控制寄存器 SMOD PCON 7 波特率倍增位 在串行口方式1 方式2和方式3时 波特率和SMOD成正比 亦即当SMOD 1时 波特率提高一倍 复位时 SMOD 0 返回 2020 3 15 63 3 串行通信工作方式 根据实际需要 89C51串行口可设置4种工作方式 可有8位 10位或11位帧格式 方式0 以8位数据为一帧 不设起始位和停止位 先发送或接收最低位 其帧格式如下 返回 2020 3 15 64 3 串行通信工作方式 方式1 以10位为一帧传输 设有1个起始位 0 8个数据位和1个停止位 1 其帧格式为 返回 2020 3 15 65 3 串行通信工作方式 方式2和方式3 以11位为1帧传输 设有1个起始位 0 8个数据位 1个附加第9位和1个停止位 1 其帧格式为 附加第9位 D8 由软件置1或清0 发送时在TB8中 接收时送RB8中 返回 2020 3 15 66 3 串行通信工作方式 1 串行口方式0方式0为同步移位寄存器输入 输出方式 常用于扩展I O口 串行数据通过RXD输入或输出 而TXD用于输出移位时钟 作为外接部件的同步信号 图7 10 a 为发送电路 图7 11 a 为接收电路 这种方式不适用于两个89C51之间的直接数据通信 但可以通过外接移位寄存器来实现单片机的接口扩展 返回 图7 10方式0发送电路及时序 图7 11方式0接收电路及时序 2020 3 15 69 3 串行通信工作方式 例 74LS164可用于扩展并行输出口 74LS165可用于扩展输入口 在这种方式下 收 发的数据为8位 低位在前 无起始位 奇偶校验位及停止位 波特率是固定的 返回 2020 3 15 70 3 串行通信工作方式 发送过程中 当执行一条将数据写入发送缓冲器SBUF 99H 的指令时 串行口把SBUF中8位数据以fosc 12的波特率从RXD P3 0 端输出 发送完毕置中断标志TI 1 方式0发送时序如图7 10 b 所示 返回 2020 3 15 71 3 串行通信工作方式 写SBUF指令在S6P1处产生一个正脉冲 在下一个机器周期的S6P2处数据的最低位输出到RXD P3 0 脚上 再在下一个机器周期的S3 S4 S5输出移位时钟为低电平 而在S6级下一个机器周期的S1 S2为高电平 就这样讲8位数据由低位至高位一位一位顺序通过RXD线输出 并在TXD脚上输出fosc 12的移位时钟 在 写SBUF 有效后的第10个机器周期的S1P1将发送中断标志TI置位 图中 74LS164是TTL 串入并出 移位寄存器 返回 2020 3 15 72 3 串行通信工作方式 接收时 用软件置REN 1 同时 RI 0 即开始接收 接收时序如图7 11 b 所示 当使SCON中的REN 1 RI 0 时 产生一个正脉冲 在下一个机器周期的S3P1 S5P2 从TXD P3 1 脚上输出低电平的移位时钟 在此机器周期的S5P2对P3 0脚采样 并在本机器周期的S6P2通过串行口内的输入移位寄存器将采样值移位接收 在同一个机器的S6P1到下一个机器周期的S2P2 输出移位时钟为高电平 返回 2020 3 15 73 3 串行通信工作方式 于是 将数据字节从低位至高位一位一位地接收下来并装入SBUF中 在启动接收过程 即写SCON 清RI位 将SCON中的RI清0之后的第10个机器周期的S1P1 RI被置位 这一帧数据接收完毕 可进行下一帧接收 图7 11 b 中 74LS165是TTL 并入串出 移位寄存器 QH端为74LS165的串行输出端 经P3 0输入至89C51 返回 2020 3 15 74 3 串行通信工作方式 2 串行口方式1方式1真正用于串行发送或接收 为10位通用异步接口 TXD与RXD分别用于发送与接收数据 收发一帧数据的格式为1位起始位 8位数据位 低位在前 1位停止位 共10位 在接收时 停止位进入SCON的RB8 此方式的传送波特率可调 串行口方式1的发送和接收时序如图7 12 a 和 b 所示 返回 图7 12方式1发送和接收时序 2020 3 15 76 3 串行通信工作方式 方式1发送时 数据从引脚TXD P3 1 端输出 当执行数据写入发送缓冲器SBUF的命令时 就启动了发送器开始发送 发送时的定时信号 也就是发送移位时钟 TX时钟 是由定时器T1 见图7 7 送来的溢出信号经过16分频或32分频 取决于SMOD的值 而得到的 TX时钟就是发送波特率 返回 2020 3 15 77 3 串行通信工作方式 可见 方式1的波特率是可变的 发送开始的同时 SEND变为有效 将起始位向TXD输出 此后每经过一个TX时钟周期 16分频计数器溢出一次为一个时钟周期 因此 TX时钟频率由波特率决定 产生一个移位脉冲 并由TXD输出一个数据位 8位数据位全部发送完后 置为位TI 并申请中断置TXD为1作为停止位 再经一个时钟周期 SEND失效 返回 2020 3 15 78 3 串行通信工作方式 方式1接收时 数据从引脚RXD P3 0 端输入 接收是在SCON寄存器中REN位置1的前提下 并检测到起始位 RXD上检测到1 0的跳变 即起始位 而开始的 返回 2020 3 15 79 3 串行通信工作方式 接收时 定时信号有两种 如图7 12 b 所示 一种是接收移位时钟 RX时钟 它的频率和传送波特率相同 也是由定时器T1的溢出信号经过16或32分频而得到的 另一种是位检测器采样脉冲 它的频率是RX时钟的16倍 亦即在一位数据期间有16位检测器采样脉冲 为完成检测 以16倍于波特率的速率对RXD进行采样 返回 2020 3 15 80 3 串行通信工作方式 为了接受准确无误 在正式接受数据之前 还必须判定这个1 0跳变是否是干扰引起的 为此 在这位中间 即一位时间分成16等份 在第7 第8及第9等份 连续对RXD采样三次 取其中两次相同的值进行判断 这样能较好地消除干扰的影响 当确认是真正的起始位 0 后 就开始接受一帧数据 当一帧数据接受完毕后 必须同时满足以下两个条件 这次接受才真正有效 返回 2020 3 15 81 3 串行通信工作方式 RI 0 即上一帧数据接收完成时 RI 1发出的中断请求已被响应 SBUF中数据已被取走 由软件使RI 0 以便提供 接收SBUF已空 的信息 SM2 0或收到的停止位为1 方式1时 停止位进入RB8 则将接收到的数据装入串行口的SBUF和RB8 RB8装入停止位 并置位RI 如果不满足 接收到的数据不能装入SBUF 这意味着该帧信息将会丢失 返回 2020 3 15 82 3 串行通信工作方式 注意 在整个接收过程中 保证REN 1是一个先决条件 只有当REN 1时 才能对RXD进行检测 返回 2020 3 15 83 3 串行通信工作方式 3 串行口方式2和方式3串行口工作在方式2和方式3均为每帧11位异步通信格式 由TXD和RXD发送与接收 两种方式操作是完全一样的 所不同的只是波特率 返回 2020 3 15 84 3 串行通信工作方式 每帧11位 即1位起始位 8位数据位 低位在前 1位可编程的第9数据位和1位停止位 发送时 第9数据位 TB8 可以设置为1或0 也可将奇偶位装入TB8 从而进行奇偶校验 接收时 第9数据位进入SCON的RB8 方式2和方式3的发送 接收时序如图7 13所示 其操作与方式1类似 返回 图7 13方式2 方式3发送和接收时序 2020 3 15 86 3 串行通信工作方式 发送前 先根据通信协议由软件设置TB8 如作奇偶校验位或地址 数据标志位 然后将要发送的数据写入SBUF 即可启动发送过程 串行口能自动把TB8取出 并装入到第9位数据位的位置 再逐一发送出去 发送完毕 使TI 1 返回 2020 3 15 87 3 串行通信工作方式 接收时 使SCON中的REN 1 允许接收 当检测到RXD P3 0 端有1 0的跳变 起始位 时 开始接收9位数据 送入移位寄存器 9位 当满足RI 0且SM2 0 或接收到的第9位数据为1时 前8位数据送入SBUF 附加的第9位数据送入SCON中的RB8 置RI为1 否则 这次接收无效 也不置位RI 返回 2020 3 15 88 4 波特率设计 在串行通信中 收发双方对发送或接收的数据速率有一定的约定 通过软件对89C51串行口编程可约定四种工作方式 其中 方式0和方式2的波特率是固定的 而方式1和方式3的波特率是可变的 由定时器T1的溢出率来决定 串行口的四种工作方式对应着三种波特率 由于输入的移位时钟来源不同 因此 各种方式的波特率计算公式也不同 返回 2020 3 15 89 4 波特率设计 1 方式0的波特率由P161图7 14可见 方式0时 发送或接收一位数据的移位时钟脉冲由S6 即第6个状态周期 第12个节拍 给出 即每个机器周期产生一个移位时钟 发送或接收一位数据 因此 波特率固定为振荡频率的1 12 并不受PCON寄存器中SMOD位的影响 返回 2020 3 15 90 4 波特率设计 图7 14串行口方式0波特率的产生 返回 2020 3 15 91 4 波特率设计 方式0波特率 fosc 12注意 符号 表示左面的表达式只是引用右面表达式的数值 即右面的表达式是提供了一种计算的方法 返回 2020 3 15 92 4 波特率设计 2 方式2的波特率串行口方式2波特率的产生与方式0不同 即输入的时钟源不同 其时钟输入部分入图7 15所示 控制接收与发送的移位时钟由振荡频率fosc的第二节拍P2时钟 即fosc 2 给出 所以 方式2波特率取决于PCON中SMOD位的值 SMOD 0时 波特率为fosc的1 64 SMOD 1时 波特率为fosc的1 32 即方式2波特率 2SMOD 64 fosc 返回 2020 3 15 93 4 波特率设计 图7 15串行口方式2波特率的产生 返回 2020 3 15 94 4 波特率设计 3 方式1和方式3的波特率方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定 如图7 16所示 因此 89C51串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD值同时决定 即 方式1 方式3波特率 T1溢出率 n 返回 2020 3 15 95 4 波特率设计 返回 图7 16串行口方式1 方式3波特率的产生 2020 3 15 96 4 波特率设计 当SMOD 0时 n 32 SMOD 1时 n 16 所以 可用下式确定方式1和方式3的波特率 方式1 方式3波特率 2SMOD 32 T1溢出速率 其中 T1溢出速率取决于T1的计数速率 计数速率 fosc 12 和T1预置的处置 若定时器T1采用模式1时 波特率公式如下 串行方式1 方式3波特率 2SMOD 32 fosc 12 216 初值 返回 2020 3 15 97 4 波特率设计 P163表7 2列出了串行口方式1 方式3常用波特率及其初值 定时器T1用作波特率发生器时 通常选用定时器模式2 自动重装初值定时器 比较实用 要设置定时器T1为定时方式 使C T 0 让T1计数内部振荡脉冲 即计数速率为fosc 12 注意应禁止T1中断 以免溢出而产生不必要的中断 先设定TH1和TL1定时即输初值为X 那么每过 28 X 个机器周期 定时器T1就会产生一次溢出 返回 2020 3 15 98 表7 2常用波特率与其他参数选取关系 2020 3 15 99 4 波特率设计 因此 T1溢出速率为T1溢出速率 fosc 12 28 X 于是 可得出定时器T1模式2的初始值X 返回 2020 3 15 100 4 波特率设计 例7 1 89C51单片机时钟振荡频率为11 0592MHz 选用定时器T1工作模式2作为波特率发生器 波特率为2400b s 求初值 解 设置波特率控制为 SMOD 0所以 TH1 TL1 F4H 返回 2020 3 15 101 4 波特率设计 系统晶体振荡频率选为11 0592MHz就是为了使初值为整数 从而产生精确的波特率 如果串行通信选用很低的波特率 可将定时器T1置于模式0或模式1 即13位或16位定时方式 但在这种情况下 T1溢出时 需要中断服务程序重装初值 中断响应时间和执行指令时间会使波特率产生一定的误差 可用改变初值的办法加以调整 返回 2020 3 15 102 7 2 289C51串行口的工作方式及应用 如前所述 89C51串行口的工作主要受串行口控制寄存器SCON的控制 另外 也和电源控制寄存器PCON有些关系 SCON寄存器用来控制串行口的工作方式 还有一些其他的控制作用 89C51单片机串行口的四种工作方式传送的数据位数叙述如下 返回 2020 3 15 103 7 2 289C51串行口的工作方式及应用 方式0 移位寄存器输入 输出方式 串行数据通过RXD线输入或输出 而TXD线专用于输出时钟脉冲给外部移位寄存器 方式0可用来同步输出或接收8位数据 最低位首先输出 波特率固定为fosc 12 其中 fosc为单片机的时钟频率 返回 2020 3 15 104 7 2 289C51串行口的工作方式及应用 方式1 10位异步接收 发送方式 一帧数据包括1位起始位 0 8位数据位和1位停止位 1 串行接口电路在发送时能自动插入起始位和停止位 在接收时 停止位进入特殊功能寄存器SCON的RB8位 方式1的传送波特率是可变的 可通过改变内部定时器的定时值来改变波特率 方式2 11位异步接收 发送方式 除了1位起始位 8位数据位 1位停止位之外 还可以插入第9位数据位 方式3 同方式2 只是波特率可变 返回 2020 3 15 105 1 串行口方式0的应用 89C51单片机串行口基本上是异步通信接口 但在方式0时是同步操作 外接串入 并出或并入 串出器件 可实现I O的扩展 串行口方式0的数据传送可以采用中断方式 也可以采用查询方式 无论哪种方式 都要借助于TI或RI标志 返回 2020 3 15 106 1 串行口方式0的应用 在串行口发送时 或者靠TI置位后引起中断申请 在中断服务程序中发送下一组数据 或者通过查询TI的值 只要TI为0就继续查询 直到TI为1后结束查询 进入下一个字符的发送 在串行口接收时 由RI引起中断或对RI查询来决定何时接收下一个字符 无论采用什么方式 在开始串行通信前 都要先对SCON寄存器初始化 进行工作方式的设置 在方式0中 SCON寄存器的初始化只是简单地把00H送入SCON就可以了 返回 2020 3 15 107 1 串行口方式0的应用 例7 2 用89C51串行口外接164串入 并出移位寄存器扩展8位并行口 8位并行口的每位都接一个发光二极管 要求发光二极管从左到右以一定延迟轮流显示 并不断循环 设发光二极管为共阴极接法 如P165图7 17所示 解 设数据串行发送采用中断方式 显示的延迟通过调用延迟程序DELAY来实现 返回 2020 3 15 108 1 串行口方式0的应用 图7 17串入并出电路 返回 2020 3 15 109 1 串行口方式0的应用 程序清单 ORG0023H 串行口中断入口AJMPSBR 转入串行口中断服务程序ORG2000H 主程序起始地址MOVSCON 00H 串行口方式0初始化MOVA 88H 最左一位发光二极管先亮CLRP1 0 关闭并行输出MOVSBUF A 开始串行输出 返回 2020 3 15 110 1 串行口方式0的应用 LOOP SJMP 等待中断SBR SETBP1 0 启动并行输出ACALLDELAY 显示延迟一段时间CLRTI 清发送中断标志RRA 准备右边一位显示CLRP1 0 关闭并行输出MOVSBUF A 再一次串行输出RETI 中断返回 返回 2020 3 15 111 1 串行口方式0的应用 用方式0外加移位寄存器来扩展8位输出口时 要求移位寄存器带有输出控制 否则串行移位过程也会反映到并行输出口 另外 输出口最好再接一个寄存器或锁存器 以免在输出门关闭使 STB 0 输出又发生变化 返回 2020 3 15 112 1 串行口方式0的应用 用方式0加上并入 串出移位寄存器可扩展一个8位并行输入口 移位寄存器必须带有预置 移位的控制端 由单片机的一个输出端子加以控制 以实现先由8位输入口置数到移位寄存器 然后再串行移位从单片机的串行口输入到接收缓冲器 最后再读入到CPU中 返回 2020 3 15 113 1 串行口方式0的应用 例7 3 用89C51串行口外加移位寄存器165或166扩展8位输入口 输入数据由8个开关提供 另有一个开关K提供联络信号 当K 0时 表示要求输入数据 输入的8位为开关量 提供逻辑模拟子程序的输入信号 如P165图7 18所示 返回 2020 3 15 114 1 串行口方式0的应用 图7 18并入串出电路 返回 2020 3 15 115 1 串行口方式0的应用 解 串行口方式0的接收要用SCON寄存器中的REN位作为开关来控制 因此 初值化时 除了设置工作方式之外 还要使REN位为1 其余各位仍然为0 对RI采用查询方式来编写程序 当然 先要查询开关K是否闭合 程序清单 返回 2020 3 15 116 1 串行口方式0的应用 START MOVSCON 10H 串行口方式0初始化JBP1 1 开关K未闭合 等待SETBP1 0 P S 1 并行置入数据CLRP1 0 P S 0 开始串行移位JNBRI 查询RICLRRI 查询结束 清RIMOVA SBUF 读数据到累加器ACALLLOGSIM 进行逻辑模拟SJMPSTART 准备下一次模拟 返回 2020 3 15 117 2 串行口方式1的发送和接收 例7 4 89C51串行口按双工方式收发ASCII字符 最高位用来作奇偶校验位 采用奇校验方式 要求传送的波特率为1200b s 编写有关的通信程序 返回 2020 3 15 118 2 串行口方式1的发送和接收 解 7位ASCII码加1位奇校验共8位数据 故可采用串行口方式1 89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时 P 1 如果直接把P的值放入ASCII码的最高位 恰好成了偶校验 与要求不符 因此 要把P的值取反以后放入ASCII码最高位 才是要求的奇校验 返回 2020 3 15 119 2 串行口方式1的发送和接收 双工通信要求收 发能同时进行 实际上 收 发操作主要是在串行接口进行 CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器 数据传送用中断方式进行 响应中断以后 通过检测是RI置位还是TI置位来决定CPU是进行发送操作还是接收操作 返回 2020 3 15 120 2 串行口方式1的发送和接收 发送和接收都通过调用子程序来完成 设 发送数据区的首地址为20H 接收数据区的首地址为40H fosc为6MHz 通过查波特率初值 P163表7 2 可知定时器的初装值为F3H 定时器T1采用工作模式2 可以避免计数溢出后用软件重装定时初值的工作 返回 2020 3 15 121 2 串行口方式1的发送和接收 程序清单 主程序MOVTMOD 20H 定时器1设为模式2MOVTL1 0F3H 定时器初值MOVTH1 0F3H 8位重装值SETBTR1 启动定时器1MOVSCON 50H 设置为方式1 REN 1 返回 2020 3 15 122 2 串行口方式1的发送和接收 程序清单 主程序MOVR0 20H 发送数据区首址MOVR1 40H 接收数据取首址ACALLSOUT 先输出一个字符SETBESSETBEASJMP 等待中断 返回 2020 3 15 123 2 串行口方式1的发送和接收 中断服务程序ORG0023H 串行口中断入口AJMPSBR1 转至中断服务程序ORG0100HSBR1 JNBRI SEND TI 1 为发送中断ACALLSIN RI 1 为接收中断SJMPNEXT 转至统一的出口SEND ACALLSOUT 调用发送子程序NEXT RETI 中断返回 返回 2020 3 15 124 2 串行口方式1的发送和接收 发送子程序SOUT CLRTIMOVA R0 取发送数据到AMOVC P 奇偶标识赋予CCPLC 奇校验INCR0 修改发送数据指针MOVSBUF A 发送ASCII码RET 返回 返回 2020 3 15 125 2 串行口方式1的发送和接收 接收子程序SIN CLRRIMOVA SBUF 读出接收缓冲区内容MOVC P 取出校验位CPLC 奇校验ANLA 7FH 删去校验位MOV R1 A 读入接收缓冲区INCRI 修改接收数据指针RET 返回 返回 2020 3 15 126 2 串行口方式1的发送和接收 若在主程序中已初始化REN 1 则允许接收 以上程序基本上具备了全双工通信的能力 但不能说很完善 例如 再接收子程序中 虽然检验了奇偶校验位 但没有进行出错处理 另外 发送和接收数据区的范围都很有限 也不能满足实际需要 但有了一个基本的框架之后 逐渐完善还是可以做到的 返回 2020 3 15 127 2 串行口方式1的发送和接收 例7 5 采用查询方式由串行口发送带奇偶校验位的数据块 解 本例由内部RAM单元20H 3FH取出ASCII码数据 在最高位上加奇偶校验位后由串行口发出 采用8位异步通信方式 波特率为1200b s fosc 11 059MHz 由要求可知 应把串行口设置为方式1 采用定时器1模式2作为波特率发生器 预置值 TH1 0E8H 返回 2020 3 15 128 2 串行口方式1的发送和接收 程序清单 主程序 MOVTMOD 20H 设置定时器1为模式2MOVTL1 0E8H 初值 波特率为1200b sMOVTH1 0E8HSETBTR1 启动T1运行MOVSCON 01000000B 设置串行口为方式1MOVR0 20HMOVR7 32 数据块长度 返回 2020 3 15 129 2 串行口方式1的发送和接收 LOOP MOVA R0ACALLSP OUTJNBP ERROR 传输出错处理 由SP OUT中 CPLC 结果决定INCR0DJNZR7 LOOP 返回 2020 3 15 130 2 串行口方式1的发送和接收 串行口发送子程序 奇校验 SP OUT MOVC PSW 0 设置奇校验位 校验位P 1为奇校验CPLC 奇校验 无此指令位偶校验 MOVACC 7 C ACC 7补0或1MOVSBUF A 启动串行口发送过程CLRTI 清TI标志 允许在发送RETERROR 略 返回 2020 3 15 131 2 串行口方式1的发送和接收 例7 6 由串行口接收带奇偶校验位的数据块 解 采用查询方式 本例与上例相呼应 接收器把接收到的32B数据存放在20H 3FH单元内 波特率同上 若奇校验出错则置进位位为1 程序清单 返回 2020 3 15 132 2 串行口方式1的发送和接收 主程序 MOVSCON 01010000B 设串口方式1 允许接收MOVTMOD 20H 设置定时器T1为模式2MOVTL1 0E8H 初值 波特率为1200b sMOVTH1 0E8HSETBTR1 启动T1运行MOVR0 20HMOVR7 32 数据块长度 返回 2020 3 15 133 2 串行口方式1的发送和接收 LOOP ACALLSP IN 调接收一帧子程序JCERROR 由SP IN中 CPLC 结果决定MOV R0 A 存放接收的数据INCR0DJNZR7 LOOP 返回 2020 3 15 134 2 串行口方式1的发送和接收 接收一帧子程序 SP IN JNBRI RI由硬件置位CLRRI 软件清除RIMOVA SBUFMOVC P 检查奇校验位CPLC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人旅游培训知识课件
- 统编版五年级语文上册1-8单元知识小结
- 实际问题与二次函数(考点专项训练)-2025-2026学年人教版九年级数学上册(解析版)
- 铁及其化合物(讲)-2023年高考化学一轮复习(原卷版)
- 填空题60题(一)-2023-2024学年小升初数学复习分类汇编(北师大版)
- 数轴与动点行程问题-小升初奥数思维之典型应用题讲义
- 期末专项训练:课外阅读(二)-2023-2024学年六年级语文上册统编版(含答案)
- 人教版八年级英语下册专项练:阅读还原(含答案)
- 酯化反应的类型
- 主题班会【抗战胜利80周年纪念】-少年知来路更向远方
- 2025至2030中国组网专线行业市场发展现状及发展趋势与投资前景预测报告
- DB37∕T 4726-2024 轻烃生产企业安全生产风险管控和隐患排查治理体系建设实施指南
- 净化空调系统培训
- cpk通俗培训课件
- 进货检验培训
- 洗涤反洗律管理制度
- 儿科护士PICU进修工作汇报
- 《物流信息技术与应用》教学课件
- 地理●浙江卷丨2023年6月浙江省普通高校招生选考科目考试地理试卷及答案
- 预备党员考试试题及答案2025
- 财务大数据基础(高翠莲)全套教案课件
评论
0/150
提交评论