单片机UART串行接口.ppt

上传人:jun****875 文档编号:7632520 上传时间:2020-03-23 格式:PPT 页数:92 大小:480KB
返回 下载 相关 举报
单片机UART串行接口.ppt_第1页
第1页 / 共92页
单片机UART串行接口.ppt_第2页
第2页 / 共92页
单片机UART串行接口.ppt_第3页
第3页 / 共92页
点击查看更多>>
资源描述
1 第七章UART串行接口 串行通信是CPU与外界交换信息的一种基本通信方式 为了实现串行通信 绝大多数单片机都配置了UART串行接口 2 7 1串行通信概述 计算机与外界的信息交换称为通信 基本的通信方式有两种 并行通信 parallelcommunication 所传送数据的各位同时发送或接收 串行通信 serialcommunication 所传送数据的各位按顺序一位一位地发送或接收 3 在并行通信中 一个并行数据占多少位二进制数 就要多少根传输线 这种方式的特点是通信速度快 但传输线多 价格较贵 适合近距离传输 串行通信仅需1 2根传输线 故在长距离传输数据时比较经济 但由于它每次只能传送1位 所以传送速度较慢 4 图7 1基本通信方式图示 5 7 1 1同步通信和异步通信方式 串行通信分同步和异步两种方式 6 1 异步通信ASYNC 在异步通信中数据或字符是逐帧 frame 传送的 帧定义为一个字符的完整的通信格式 通常也称为帧格式 最常见的帧格式一般是先用一个起始位 0 表示字符的开始 然后是5 8位数据 规定低位在前 高位在后 其后是奇偶校验位 最后是停止位 用以表示字符的结束 停止位可以是1位 1 5位 2位 不同的计算机规定有所不同 从起始位开始到停止位结束就构成完整的1帧 7 起始位 通信线上没有数据传送时 为高电平 逻辑1 当要发送数据时 首先发1个低电平信号 逻辑0 此信号称为 起始位 表示开始传输1帧数据 数据位 起始位之后的位即数据位 数据位可以是5 6 7或8位 不同计算机的规定不同 上图的数据位为8位 一般从最低位开始传送 最高位在最后 8 奇偶校验位 数据位之后的位为奇偶校验位 有的方式具有 此位可用于判别字符传送的正确性 其有3种可能的选择 即奇 偶 无校验 用户可根据需要选择 在有的格式中 该位可省略 在80C51单片机中 此位还可以用来确定该帧字符信息的性质 地址或数据 停止位 校验位后为停止位 用于表示1帧结束 用高电平 逻辑1 表示 停止位可以是1 1 5或2位 不同计算机的规定有所不同 9 异步通信的主要特点如下 进行串行通信的单片机的时钟相互独立 其时钟频率可以不相同 在通信时不要求有同步时钟信号 由于异步通信是逐帧进行传输的 各位之间的时间间隔应该相同 所以必须保证2个单片机之间有相同的传送波特率 如果传送波特率不同 则时间间隔不同 当误差超过5 时 就不能正常进行通信 由于信息传输可以是随时不间断地进行的 因而帧与帧之间的时间间隔可以是不固定的 间隙处为高电平 10 由于异步通信每传送一帧有固定格式 通信双方只需按约定的帧格式来发送和接收数据 所以硬件结构比同步通信方式简单 此外 它还能利用校验位检测错误 所以这种通信方式应用较广泛 在单片机中主要是采用异步通信方式 11 2 同步通信SYNC 在同步通信中 数据或字符开始处是用一同步字符来指示 一般约定为l 2个字符 以实现发送端和接收端同步 一旦检测到约定同步字符 下面就连续 顺序地发送和接收数据 12 由于同步通信数据块传送时去掉了每个数字都必须具有的字符开始和结束的标志 且它一次可以发送一个数据段 多个数据 因此 其速度高于异步通信 但这种方式要求接收和发送时钟严格保持同步 在通信时通常要求有同步时钟信号 对硬件结构要求较高 由于这种方式易于进行串行外围扩展 所以目前很多型号的单片机都增加了串行同步通信接口 如目前已得到广泛应用的I2C串行总线和SPI串行接口等 13 7 1 2串行通信的数据传送速率 传送速率是指数据传送的速度 用b s或bps 比特 秒 表示 称为比特率 在二进制的情况下 比特率与波特率数值相等 因而在单片机的串行通信中 常称为波特率 假如数据传送的速率为120个字符每秒 每个字符由1个起始位 8个数据位和1个停止位组成 则其传送波特率为 10b 120 s 1200b s 1200波特每一位的传送时间即为波特率的倒数 14 异步通信的数据传送速率一般为50b s 100kb s 常用于计算机到CRT终端 以及双机或多机之间的通信等 15 7 1 3串行通信的方式 在串行通信中 数据是在两机之间传送的 按照数据传送方向 串行通信可分为单工 Simplex 制式 半双工 halfduplex 制式和全双工 fullduplex 制式 16 图7 2串行通信方式示意图 1 单工制式在单工制式下 数据在甲机和乙机之间只允许单方向传送 两机之间只需1条数据线 17 2 半双工制式在半双工制式下 数据在甲机和乙机之间允许双方向传送 但它们之间只有一个通信回路 接收和发送不能同时进行 只能分时发送和接收 即甲机发送 乙机接收 或者乙机发送 甲机接收 因而两机之间只需1条数据线 18 3 全双工制式在全双工制式下 甲 乙两机之间数据的发送和接收可以同时进行 称为 全双工传送 全双工形式的串行通信必须使用2条数据线 不管哪种形式的串行通信 在两机之间均应有公共地线 19 信号的调制与解调 当异步通信的距离在15m之内时 计算机之间可以直接进行通信 而当传输距离较远时 通常是用电话线传送 由于电话线频带不够宽 再加上远距离传输时信号不可避免地衰减 因而使信号发生明显的畸变 在发送时要用调制器 modulator 把数字信号转换为模拟信号 并加以放大再传送 这个过程叫做调制 在接收时 再用解调器 demodulator 检测此模拟信号 并把它转换成数字信号再送入计算机接口 这个过程即解调 20 7 1 4通信协议 通信协议是指在计算机之间进行数据传输时的一些约定 包括通信方式 波特率 命令码的约定等 为保证计算机之间能准确 可靠地通信 相互之间必须遵循统一的通信协议 在通信之前一定要先设置好通信协议 21 7 280C51串行口简介 80C51的串行口是一个可编程的全双工串行通信接口 通过软件编程它可以作通用异步接收和发送器UART UniversalAsynchronousReceiver Transmitter 用 也可作同步移位寄存器用 其帧格式可有8位 10位和11位 并能设置各种波特率 使用灵活方便 22 7 2 1串行口结构与工作原理 80C51串行口主要由接收与发送缓冲寄存器SBUF 输入移位寄存器以及串行控制寄存器SCON等组成 波特率发生器可以利用定时器T1或T2控制发送和接收的速率 SCON用于存放串行口的控制和状态信息 发送数据缓冲寄存器SBUF用于存放准备发送出去的数据 接收数据缓冲寄存器SBUF用于接收由外部输入到输入移位寄存器中的数据 80C51串行口正是通过对上述专用寄存器的设置 检测与读取来管理串行通信的 23 图7 3串行口结构框图 24 在进行串行通信时 外界数据通过引脚RXD P3 0 输入 输入数据首先逐位进入输入移位寄存器 由串行数据转换为并行数据 然后再送入接收寄存器 在接收寄存器中采用了双缓冲结构 以避免在接收到第2帧数据前 CPU未及时响应接收寄存器前一帧的中断请求 没把前一帧数据读走 而造成2帧数据重叠的错误 在发送时 串行数据通过引脚TXD P3 1 输出 由于CPU是主动的 因此不会产生写重叠问题 一般不需要双缓冲器结构 要发送的数据通过发送控制器控制逻辑门电路逐位输出 25 7 2 2串行口寄存器 与串行口工作有关的寄存器共有6个 分别是串行口控制寄存器SCON 接收与发送缓冲寄存器SBUF 电源控制寄存器PCON 中断允许控制寄存器IE 中断优先级寄存器IP 26 1 串行口控制寄存器SCON 串行口控制寄存器SCON用于串行通信的方式选择 接收和发送控制 并可反映串行口的工作状态 27 SCON 7和SCON 6位SM0和SM1 串行方式选择位表7 1串行口工作方式选择 28 SCON 5位SM2 多机通信控制位 在方式2和方式3中 SM2主要用于进行多机通信控制 当串行口以方式2或方式3接收时 如果SM2 1 允许多机通信 且接收到第9位RB8为0时 则RI不置1不接收主机发来的数据 如果SM2 1 且RB8为1 则RI置1 产生中断请求 将接收到的8位数据送入SBUF 当SM2 0时 不论RB8为0还是1 都将收到的8位数据送入SBUF 并产生中断 在方式1中 当处于接收状态时 若SM2 1 则只有接收到有效的停止位时 RI才置1 在方式0中 SM2应置0 29 SCON 4位REN 允许串行接收位 REN 1时 允许接收 REN O时 禁止接收 由软件置位或清除 30 SCON 3位TB8 发送数据的第9位 D8 在方式2或方式3中 根据需要由软件置位或复位 双机通信时 它可约定作奇偶校验位 在多机通信中 可作为区别地址帧或数据帧的标识位 一般由指令设定地址帧时 设TB8为1 而设定数据帧时 设TB8为0 方式0和方式1中没用该位 31 SCON 2位RB8 接收数据的第9位 D8 在方式2或方式3中 RB8的状态与TB8相呼应 如可以是约定的奇偶校验位 也可以是约定的地址 数据标识位 例如 当SM2 1时 如果RB8为0 则说明收到的是数据帧 32 SCON 1位TI 发送中断标志位 在方式0中 发送完8位数据后 由硬件置位 在其他方式中 在发送停止位之初由硬件置位 TI 1时 可申请中断 也可供软件查询用 在任何方式中 都必须由软件来清除TI SCON 0位RI 接收中断标志位 在方式0中 接收完8位数据后 由硬件置位 在其他方式中 在接收停止位的中间 由硬件置位 RI 1时 可申请中断 也可供软件查询用 在任何方式中 都必须由软件清除RI 33 SCON的低2位与中断有关 SCON的地址为98H 可以位寻址 复位时 SCON的所有位均清0 34 2 数据缓冲寄存器SBUF 数据缓冲寄存器SBUF实际上是2个寄存器 发送数据缓冲寄存器和接收数据缓冲寄存器 接收与发送缓冲寄存器SBUF采用同一个地址代码99H 其寄存器名亦同样为SBUF CPU通过不同的操作命令 区别这2个寄存器 所以不会因为地址代码相同而产生错误 当CPU发出写SBUF命令时 即向发送缓冲寄存器中装载新的信息 同时启动数据串行发送 当CPU发出读SBUF命令时 即读接收缓冲寄存器的内容 35 3 电源控制寄存器PCON 电源控制寄存器PCON主要用于电源控制 PCON的最高位SMOD是串行口的波特率倍增位 当SMOD为1时 波特率加倍 当SMOD为O时 波特率不变 36 4 中断允许控制寄存器IE 中断允许控制寄存器IE用于控制与管理单片机的中断系统 IE的ES位用于控制串行口的中断 当ES O时 禁止串行口中断 当ES 1时 允许串行口中断 37 5 中断优先级寄存器IP 中断优先级寄存器IP用于管理单片机中各中断源中断优先级 IP的PS位用于设置串行口中断的优先级 当PS 0时 串行口中断为低优先级 当PS 1时 串行口中断为高优先级 38 7 2 380C51的帧格式 80C51串行口通过编程可设置四种工作方式及三种帧格式 39 方式0以8位数据为一帧 不设起始位和停止位 先发送或接收最低位 方式1以10位为一帧传输 设有1个起始位 0 8个数据位和1个停止位 1 40 方式2和3以11位为一帧传输 设有1个起始位 0 8个数据位 1个可编程位 第9数据位 D8和1个停止位 1 可编程位D8由软件置 1 或清 0 该位可作检验位 也可作它用 41 7 2 4波特率的设置 在串行通信前 首先要设置收 发双方对发送或接收的数据传送速率 即波特率 通过软件对80C51串行口编程可设定4种工作方式 这4种方式波特率的计算方法不同 方式0和方式2的波特率是固定的 而方式1和方式3的波特率是可变的 由定时器T1或T2 AT89S52 的溢出率控制 42 1 方式0和方式2的波特率 方式0中 每个机器周期发送或接收1位数据 且不受SMOD的影响 方式2的波特率取决于PCON中SMOD之值 当SMOD 0时 波特率为fosc的1 64 若SMOD 1 则波特率为fosc的1 32 即 43 2 方式1和方式3的波特率 80C51串行口方式1和方式3的波特率由定时器T1的溢出率与SMOD的值决定 即 T1溢出率取决于计数速率和定时器的预置值 计数速率与TMOD寄存器中C T的状态有关 当C T 0时 计数速率 fosc 12 当C T 1时 计数速率取决于外部输入时钟频率 44 当定时器T1作波特率发生器使用时 通常是选用自动重装载方式 即方式2 设计数初值为X 那么每过 256 X 个机器周期 定时器1就会产生一次溢出 为了避免因溢出而产生不必要的中断 此时应禁止T1中断 溢出周期为 溢出率为溢出周期之倒数 所以 则定时器T1方式2的初始值为 45 表7 2定时器T1的常用波特率 46 例1 已知80C51单片机时钟振荡频率为11 0592MHz选用定时器T1工作方式2作波特率发生器 波特率为2400波特 求时间常数 解 设波特率控制位SMOD 0 定时器T1的时间常数为 所以TH1 TL1 F4H 47 由于上述公式包含除法 所以当晶振频率与波特率不同时 计算值有时会有一定误差 例如 如果晶振频率为12MHz 波特率要求为2400 在SMOD 0时 TH1 F3H 波特率的实际计算值为2404 误差为0 11 但如果2个单片机的波特率相同 例如均为2404 则不会影响通信 如果2个单片机的波特率误差超过2 5 则可能会引起通信错误 48 AT89S52单片机的定时器T2也可作为波特率发生器 49 7 3串行通信工作方式 通过软件编程可使串行通信有4种工作方式 50 7 3 1方式0 在方式0下 串行口作同步移位寄存器用 以8位数据为1帧 先发送或接收最低位 每个机器周期发送或接收一位 故其波特率是固定的 为fosc 12 串行数据由RXD P3 0 端输入或输出 同步移位脉冲由TXD P3 1 端送出 这种方式常用于扩展I O口 采用不同的指令实现输入或输出 51 1 发送当执行 MOVSBUF A 指令时 CPU将1字节的数据写入发送缓冲寄存器SBUF 99H 串行口即把8位数据以fosc 12的波特率从RXD端送出 低位在前 发送完成后 置中断标志位TI为1 如要继续发送应将TI清0 52 2 接收由于REN是串行口允许接收控制位 因此在准备接收时 首先要用软件置REN为1 使其允许接收 然后 执行 MOVA SBUF 指令 CPU即开始从RXD端以fosc 12波特率输入数据 低位在前 当接收到8位数据时 置中断标志RI为1 读取数据后 一定要将RI清0 53 串行控制寄存器中 TB8和RB8位在方式0中未用 每当发送或接收完8位数据时 由硬件将发送中断TI或接收中断RI标志置位 不管是中断方式还是查询方式 都不会清除TI或RI标志 必须用软件清0 在方式0中 SM2位必须为0 54 图7 3串行口结构框图 55 7 3 2方式1 在方式1下 串行口为10位通用异步接口 发送或接收1帧数据 包括1位起始位 0 8位数据位和1位停止位 1 其传送波特率可调 56 1 发送当执行 MOVSBUF A 指令时 CPU将1字节的数据写入发送缓冲寄存器SBUF 99H 就启动发送器发送 数据从引脚TXD P3 1 端输出 当发送完1帧数据后 TI标志置1 在中断方式下将申请中断 通知CPU可以发送下一个数据 如要继续发送 必须将TI清0 57 图7 3串行口结构框图 58 2 接收接收时 先使REN置1 使串行口处于允许接收状态 RI标志为0 串行口采样引脚RXD P3 0 当采样到1至0的跳变时 确认是起始位 0 就开始接收1帧数据 当停止位到来时 RB8位置1 同时 中断标志位RI也置1 在中断方式下将申请中断 通知CPU从SBUF取走接收到的1个数据 不管是中断方式 还是查询方式 都不会清除TI或RI标志 必须用软件清0 59 7 3 3方式2和方式3 方式2和方式3均为11位异步通信方式 只是波特率的设置方法不同 其余完全相同 这两种方式发送或接收1帧的信息包括1位起始位 0 8位数据位 1位可编程位和1位停止位 1 其信息传送波特率与SMOD有关 60 1 发送发送前 首先根据通信协议由软件设置TB8 如作奇偶校验位或地址 数据标识位 然后 将要发送的数据写入SBUF即可启动发送器 发送过程是由执行任何一条以SBUF作为目的寄存器的指令而启动的 写SBUF指令 把8位数据装入SBUF 同时 串行口还自动把TB8装到发送移位寄存器的第9位数据位置上 并通知发送控制器要求进行一次发送 然后即从TXD P3 1 端输出1帧数据 61 图7 3串行口结构框图 62 2 接收在接收时 先置位REN为1 使串行口处于允许接收状态 同时还要将RI清0 在满足这个条件的前提下 再根据SM2的状态 因为SM2是方式2和方式3的多机通信控制位 和所接收到的RB8的状态 才能决定此串行口在信息到来后是否会使RI置1 如果RI置1 在中断方式下将申请中断 接收数据 当SM2 0时 不管RB8为0还是为1 RI都置1 此串行口将接收发来的信息 当SM2 1 且RB8为1时 表示在多机通信情况下 接收的信息为地址帧 此时RI置1 串行口将接收发来的地址 当SM2 1 且RB8为0时 表示接收的信息为数据帧 但不是发给本从机的 此时RI不置1 因而SBUF中所接收的数据帧将丢失 63 在方式2和方式3下 同样不管是中断方式 还是查询方式 都不会清除TI或RI标志 在发送和接收之后 也都必须用软件清TI和RI位 64 7 3 4多机通信 80C51的方式2和方式3有一个专门的应用领域 即多机通信 这一功能使它可以方便地应用于集散式分布系统中 这种系统采用一台主机和多台从机 图7 4多机通信连接图 65 多机通信的实现 主要靠主 从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位 D8 在编程前 首先要给各从机定义地址编号 如分别为00H 01H 02H 当主机想发送一数据块给几个从机中的一个时 它首先送出一个地址字节 以辨认从机 地址字节和数据字节可用第9数据位 TB8 来区别 地址为1 数据为0 所以 在主机发送地址帧时 地址 数据标识位TB8应设置为 1 以表示是地址帧 如 MOVSCON 0D8H 设串行口为方式3 TB8置 1 准备发地址 66 此时 所有的从机初始化时均置SM2 1 使它们只处于接收地址帧的状态 如 MOVSCON 0F0H 置串行口为方式3 SM2 1 允许接收当从机接收到从主机发来的信息后 第9位RB8若为 1 则置位中断标志RI 并在中断后判断主机送来的地址与本从机地址是否相符 若相符 则被寻址的从机就清除其SM2标志 即SM2 0 准备接收即将从主机送来的数据帧 未被选中的从机仍保持SM2 1 67 当主机发送数据帧时 应置TB8 0 此时 虽然各从机都能接收到 但由于TB8 0 所以只有SM2 0的那个被寻址的从机才能接收到数据 那些未被选中的从机将不理睬进入到串行口的数据字节 继续进行它们自己的工作 直到一个新的地址字节到来 这样就实现了主机控制的主从机之间的通信 综上所述 通信只能在主从机之间进行 从机之间的通信只有经主机才能实现 68 多机之间的通信过程可归纳如下 1 主 从机均初始化为方式2或方式3 置SM2 1 允许中断 2 主机置TB8 1 发送要寻址的从机地址 3 所有从机均接收主机发送的地址 并进行地址比较 4 被寻址的从机确认地址后 置本机SM2 0 向主机返回地址 供主机核对 5 核对无误后 主机向被寻址的从机发送命令 通知从机接收或发送数据 6 通信只能在主 从机之间进行 两个从机之间的通信需通过主机作中介 7 本次通信结束后 主 从机重置SM2 1 主机可再对其他从机寻址 69 在实际应用中 因为单片机功能有限 因而在较大的测控系统中 常常把单片机应用系统作为前端机 下位机或从机 直接用于控制对象的数据采集与控制 而把PC机作为中央处理机 上位机或主机 用于数据处理和对下位机的监控管理 它们之间的信息交换主要是采用串行通信 此时单片机可直接利用其串行接口 而PC机可利用其配备的8250或8251 16450等可编程串行接口芯片 实现单片机与PC机串行通信的关键是在通信协议的约定上要一致 例如 应设定相同的波特率及帧格式等 在正式工作之前 双方应先互发联络信号 以确保通信收发数据的准确性 70 7 4串行口应用举例 本节将介绍串行口在作I O扩展及一般异步通信和多机通信中的应用原理及实例 71 7 4 1用串行口扩展I O口 串行口的方式0主要用于扩展并行I O口 此处将给出实用线路和简单的控制指令 72 例7 1用并行输入8位移位寄存器74HC165扩展16位并行输入口 编程实现从16位扩展口读入20字节数据 并把它们转存到内部RAM的50H 63H中 图7 5利用串行口扩展输入口 73 解 在此采用74HC165与单片机相连实现I O口扩展 是利用80C51的3根口线扩展为16根输入口线的实用电路 其由2块74HC165串接而成 74HC165是并入串出移位寄存器 也可选用其他同样功能的CMOS器件 图中 CK为时钟脉冲输入端 D0 D7为并行输入端 SIN QH分别为数据的输入 输出端 前级的数据输出端QH与后级的信号输入端SIN相连 S L 0时 允许并行置入数据 S L 1时 允许串行移位 74 MOVR7 20 设置读入字节数MOVR0 50H 设片内RAM指针SETBF0 设置读入字节奇偶数标志RCV0 CLRP1 0 允许并行置入数据SETBP1 0 允许串行移位RCV1 MOVSCON 10H 设串行口方式0并启动接收JNBRI 等待接收一帧数据CLRRI 清接收中断标志MOVA SBUF 取缓冲器数据MOV R0 AINCR0CPLF0JBF0 RCV2 判是否接收完偶数帧 接收完则DECR7重新并行置入SJMPRCV1 否则再接收一帧RCV2 DJNZR7 RCV0 判是否已读入预定的字节数 对读入数据进行处理 75 程序中F0用来作读入字节数的奇偶性标志 由于每次由扩展口并行置入到移位寄存器的是2个字节数据 置入1次 串行口应接收2帧数据 故已接收的数据字节数为奇数时F0 0 不再并行置入数据就直接启动接收过程 否则F0 1 在启动接收过程前 应该先在外部移位寄存器中置入新的数据 76 例7 2 用2片8位串入并出移位寄存器74HC164作扩展输出口 编程使这16个发光二极管交替为间隔点亮状态 循环交替时间为2s 图7 6利用串行口扩展输出接口 77 74HC164是串行输入 并行输出移位寄存器 Q0 Q7为并行输出端 A B为串行输入端 CLR为清除端 零电平时 使74HC164输出清 0 CK为时钟脉冲输入端 在CK脉冲的上升沿作用下实现移位 在CK 0 CLR 1时 74HC164保持原来数据状态 由于74HC164无并行输出控制端 在串行输入过程中其输出端的状态会不断变化 故在某些使用场合 在74HC164与输出装置之间还应加上输出可控的缓冲级 如74HC244 以便在串行输入过程结束后再输出 图中的输出装置是16位发光二极管 由于74HC164在低电平输出时允许通过的电流可达8mA 故不需再加驱动电路 78 ST MOVSCON 00H 设串行口为方式0MOVA 55H 二极管间隔点亮初值LP2 MOVR0 2 输出口字节数CLRP1 0 对74HC164清0SETBP1 0 允许数据串行移位LP1 MOVSBUF A 启动串行口发送JNBTI 等待1帧发送结束CLRTI 清串行口发送中断标志位DJNZR0 LP1 判断预定字节数发送完否LCALLDEL2s 调延时2s子程序 略 CPLA 交替点亮二极管SJMPLP2 循环显示 79 从理论上讲 74HC164或74HC165可以无限地串级上去 进一步扩展输入 输出并行口 但这种扩展方法 输入 输出的速度不高 移位时钟频率为fosc 12 若fosc 12MHz 则每移1位需1 s 80 7 4 2用串行口进行异步通信 图7 7双机异步通信连接图 81 例7 3 编程把甲机片内RAM的60H 7FH单元中的数据块从串行口输出 定义在工作方式3下发送 TB8用作奇偶校验位 采用定时器T1方式2作波特率发生器 波特率为4800 fosc 11 0592MHz 定时器初始预置值TH1 TL1 0FAH 编程使乙机从甲机接收32个字节数据块 并存入片外1000H 101FH单元 接收过程中要求判奇偶校验标志RB8 若出错 则置F0标志为1 若正确则置F0标志为0 然后返回 82 解 编写发送子程序如下 MOVTMOD 20H 设置定时器T1为方式2MOVTL1 0FAH 设预置值MOVTH1 0FAHSETBTR1 启动定时器T1MOVSCON 0C0H 设置串行口为方式3MOVPCON 00H SMOD 0MOVR0 60H 设数据决指针MOVR7 20H 设数据长度20HTRS MOVA R0 取数据送至AMOVC PMOVTB8 C 奇偶位P送至TB8MOVSBUF A 数据送至SBUF 启动发送WAIT JNBTI 判1帧是否发送完CLRTIINCR0 更新数据单元DJNZR7 TRS 循环发送至结束RET 返回 83 在进行双机通信时 两机应用相同的工作方式和波特率 因而接收子程序编程如下 MOVTMOD 20H 设置定时器T1为方式2MOVTL1 0FAH 设预置值MOVTH1 0FAHSETBTR1 启动定时器T1MOVSCON 0C0H 设置串行口为方式3MOVPCON 00H SMOD 0MOVDPTR 1000H 设置数据块指针MOVR7 20H 设数据块长度SETBREN 允许接收WAIT JNBRI 判断1帧是否接收完CLRRIMOVA SBUF 读入1帧数据JNBPSW 0 PZ 奇偶位P为0 则转JNBRB8 ERR P 1 RB8 0 则出错SJMPYES 二者全为1 则正确 84 PZ JBRB8 ERR 二者全为0 则正确 P 0 RB8 1 则出错YES MOVX DPTR A 正确 存放数据INCDPTR 修改地址指针DJNZR7 WAIT 判断数据块接收完否CLRPSW 5 接收正确 且接收完 清F0标志RET 返回ERR SETBPSW 5 出错 则置F0标志为1RET 返回上例是在方式3下进行收发 用奇偶位进行校验 85 86 在方式1下进行双机通信 用累加和进行校验的方法 例7 4 设甲机发送乙机接收 波特率为2400波特 两机晶振均为6MHz 要求甲机将外部数据存储器4000H 40FFH单元的内容向乙机发送 在发送数据之前将数据块长度发送给乙机 发送完256B后 向乙机发送一个累加校验和 乙机接收甲机发送的数据 并写入以300H为首址的外部数据存储器中 首先接收数据长度 接着接收数据 当接收完256B后 接收校验码 进行累加和校验 数据传送结束时 向甲机发送一个状态字节 表示传送是正确或出错 87 解 因波特率已指定为2400波特 首先需要确定定时初值和SMOD的值 此时若取SMOD 0 则X 249 49 249 误差较大 取SMOD l 则X 242 98 243 F3H 误差较小 发送程序作如下约定 定时器T1按方式2工作 计数初值为F3H SMOD 1 串行口按方式1工作 允许接收 R6设为数据块长度寄存器 R5设为累加和寄存器 88 1 甲机发送程序清单TRT MOVTMOD 20H 设定时器T1工作在方式2MOVTH1 0F3H 设定时器T1的初值MOVTL1 0F3HSETBTR1 启动定时器T1MOVSCON 50H 串行口初始化为方式1 允许接收MOVPCON 80H SMOD 1RPT MOVDPTR 4000HMOVR6 00H 长度寄存器初始化 长度为256字节MOVR5 00H 校验和寄存器初始化MOVSBUF R6 发送长度JNBTI 等待发送CLRTI 89 L1 MOVXA DPTR 读取数据MOVSBUF A 发送数据ADDA R5 形成累加和送至R5MOVR5 AINCDPTR 修改地址指针JNBTI 等待发送CLRTIDJNZR6 L1 判断是否发送完256个数据MOVSBUF R5 发校验码MOVR5 00HJNBTI CLRTIJNBRI 等乙机回答CLRRIMOVA SBUFJZL8 发送正确则返回AJMPRPT 发送有错则重发L8 RET 90 2 乙机接收程序清单 接收程序的通信约定同发送程序 RSU MOVTMOD 20H T1初始化MOVTH1 0F3HMOVTL1 0F3HSETBTR1MOVSCON 50HMOVPCON 80HRPT MOVDPTR 300HJNBRI CLRRIMOVA SBUF 接收发送长度MOVR6 AMOVR5 00H 累加和寄存器清 0 91 WTD JNBRI CLRRIMOVA SBUF 接收数据MOVX DPTR A 存储数据INCDPTR 修改地址指针ADDA R5MOVR5 ADJNZR6 WTD 未接收完 继续JNBRI 接收校验码CLRRIMOVA SBUFXRLA R5 比较校验码MOVR5 00HJZL6 正确则转至L6 92 MOVSBUF 0FFH 出错送0FFHJNBTI CLRTIAJMPRPT 重新接收L6 MOVSBUF 00H 正确回送00HJNBTI 发送完返回CLRTIRET
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!