串行通信概念及51系列单片机的串行口问题.ppt

上传人:sh****n 文档编号:7439549 上传时间:2020-03-21 格式:PPT 页数:84 大小:1.07MB
返回 下载 相关 举报
串行通信概念及51系列单片机的串行口问题.ppt_第1页
第1页 / 共84页
串行通信概念及51系列单片机的串行口问题.ppt_第2页
第2页 / 共84页
串行通信概念及51系列单片机的串行口问题.ppt_第3页
第3页 / 共84页
点击查看更多>>
资源描述
本节主要介绍串行通信概念及51系列单片机的串行口问题 将具体介绍以下内容 计算机串行通信基础 基本概念 标准接口 51单片机串行口 串行口结构 串行口的控制寄存器 串行口的工作方式 应用举例 6 3串行通信口 6 3 1数据通信概述 随着多微机系统的广泛应用和计算机网络技术的普及 计算机的通信功能愈来愈显得重要 通信的目的 实现计算机与外部设备或计算机与计算机之间的信息交换 通信的方式 并行通信和串行通信两种方式 PS 在多微机系统以及现代测控系统中信息的交换多采用串行通信方式 一 数据通信方式 计算机通信是将计算机技术和通信技术的相结合 完成计算机与外部设备或计算机与计算机之间的信息交换 可以分为两大类 并行通信与串行通信 1 并行通信通常是将数据字节的各位用多条数据线同时进行传送 优点 控制简单 传输速度快 缺点 由于传输线较多 长距离传送时成本高且接收方的各位同时接收存在困难 优点 传输线少 长距离传送时成本低 且可以利用电话网等现成的设备 缺点 数据的传送控制比并行通信复杂 2 串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送 二 异步通信与同步通信1 异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程 为使双方的收发协调 要求发送和接收设备的时钟尽可能一致 异步串行通信的帧格式 异步通信的特点 异步串行通信是以字符为单位的间歇传输形式 传送时按字符进行包装 在数据位之外要增添起始位 奇偶校验位 停止位 不要求收发双方时钟的严格一致 实现容易 设备开销较小 但每个字符要附加2 3位用于起止位 各帧之间还有间隔 因此传输效率不高 五 串行通信的错误校验1 奇偶校验在发送数据时 数据位尾随的1位为奇偶校验位 1或0 奇校验时 数据中 1 的个数与校验位 1 的个数之和应为奇数 偶校验时 数据中 1 的个数与校验位 1 的个数之和应为偶数 接收字符时 对 1 的个数进行校验 若发现不一致 则说明传输数据过程中出现了差错 2 代码和校验代码和校验是发送方将所发数据块求和 或各字节异或 产生一个字节的校验字符 校验和 附加到数据块末尾 接收方接收数据同时对数据块 除校验字节外 求和 或各字节异或 将所得的结果与发送方的 校验和 进行比较 相符则无差错 否则即认为传送过程中出现了差错 3 循环冗余校验这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验 常用于对磁盘信息的传输 存储区的完整性校验等 这种校验方法纠错能力强 广泛应用于同步通信中 串行通信的传输速率与传输距离1 传输速率传输速率是用来说明数据传送的快慢 在串行通信中 用波特率来表示数据传送的快慢 波特率是指串行通信中 单位时间传送的二进制位数 单位为bps 例 如每秒钟传送240个字符 而每个字符格式包含10位 1个起始位 1个停止位 8个数据位 这时的波特率为 10位 240个 秒 2400bps 位 秒 2 传输距离与传输速率的关系串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关 当比特率超过1000bps时 最大传输距离迅速下降 如9600bps时最大距离下降到只有76m 约250英尺 同步通信 SynchronousCommunication 是按数据块传送的 把要传送的字符顺序地连接起来 组成数据块 在数据块的前面加上特殊的同步字符 作为数据块的起始符号 在数据块后面加上校验字符 用于校验通信中的错误 2 同步通信 三 串行通信的传输方式1 单工单工是指数据传输仅能沿一个方向 不能实现反向传输 2 半双工半双工是指数据传输可以沿两个方向 但需要分时进行 3 全双工全双工是指数据可以同时进行双向传输 4 串行通信的信号传输 1 通信线路的连接方式 信号的调制与解调 利用调制器 Modulator 把数字信号转换成模拟信号 然后送到通信线路上去 再由解调器 Demodulator 把从通信线路上收到的模拟信号转换成数字信号 由于通信是双向的 调制器和解调器合并在一个装置中 这就是调制解调器MODEM DataCommunicationsEquipment 数据通信设备 它在DTE和传输线路之间提供信号变换和编码功能 并负责建立 保持和释放链路的连接 如Modem DataTerminalEquipment 数据终端设备 2 串行通信总线标准及其接口 UART 能够完成异步通信的硬件电路即通用异步接收器 发送器 UniversalAsychronousReceiver Transmitter USRT 能够完成同步通信的硬件电路即通用同步接收器 发送器 UniversalSychronousReceiver Transmitter USART 既能完成异步通信又能完成同步通信的硬件电路 UniversalSychronousAsychronousReceiver Transmitter 三类异步串行通信接口 RS 232接口 RS 449 RS 422和RS 485接口以及20mA电流环 RS 232接口标准 RS是RecommendedStandard的缩写 代表推赠标准 五 串行通信的错误校验1 奇偶校验在发送数据时 数据位尾随的1位为奇偶校验位 1或0 奇校验时 数据中 1 的个数与校验位 1 的个数之和应为奇数 偶校验时 数据中 1 的个数与校验位 1 的个数之和应为偶数 接收字符时 对 1 的个数进行校验 若发现不一致 则说明传输数据过程中出现了差错 2 代码和校验代码和校验是发送方将所发数据块求和 或各字节异或 产生一个字节的校验字符 校验和 附加到数据块末尾 接收方接收数据同时对数据块 除校验字节外 求和 或各字节异或 将所得的结果与发送方的 校验和 进行比较 相符则无差错 否则即认为传送过程中出现了差错 3 循环冗余校验这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验 常用于对磁盘信息的传输 存储区的完整性校验等 这种校验方法纠错能力强 广泛应用于同步通信中 六 串行通信的传输速率与传输距离1 传输速率传输速率是用来说明数据传送的快慢 在串行通信中 用波特率来表示数据传送的快慢 波特率是指串行通信中 单位时间传送的二进制位数 单位为bps 例 如每秒钟传送240个字符 而每个字符格式包含10位 1个起始位 1个停止位 8个数据位 这时的波特率为 10位 240个 秒 2400bps 位 秒 2 传输距离与传输速率的关系串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关 当比特率超过1000bps时 最大传输距离迅速下降 如9600bps时最大距离下降到只有76m 约250英尺 串行通信接口标准一 RS 232C接口RS 232C是EIA ElectronicIndustryAssociation美国电子工业协会 1969年修订RS 232C标准 RS 232C定义了数据终端设备 DTE 与数据通信设备 DCE 之间的物理接口标准 1 机械特性RS 232C接口规定使用25针连接器 连接器的尺寸及每个插针的排列位置都有明确的定义 2 功能特性 表6 3RS 232C串口引脚定义表 3 过程特性过程特性规定了信号之间的时序关系 以便正确地接收和发送数据 远程通信连接 近程通信连接 4 RS 232C的其它规定 RS 232C是一种电压型总线标准 以不同的电压表示逻辑值 3V 15V表示逻辑 1 3V 15V表示逻辑 0 标准数据传送速率有50 75 110 150 300 600 1200 2400 4800 9600 19200波特等 5 采用RS 232C接口存在的问题1 传输距离短 传输速率低RS 232C总线标准受电容允许值的约束 使用时传输距离一般不要超过15米 线路条件好时也不超过几十米 最高传送速率为20Kbps 2 有电平偏移RS 232C总线标准要求收发双方共地 通信距离较大时 收发双方的地电位差别较大 在信号地上将有比较大的地电流并产生压降 3 抗干扰能力差RS 232C在电平转换时采用单端输入输出 在传输过程中当干扰和噪声混在正常的信号中 为了提高信噪比 RS 232C总线标准不得不采用比较大的电压摆幅 6 3 280C51的串行口 180C51串行口的结构 CPU内部 MCS 51单片机串行口主要由发送数据寄存器 发送控制器 输出控制门 接收数据寄存器 接收控制器 输入移位寄存器等组成 从用户使用的角度 它由三个特殊功能寄存器组成 发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF 串行口数据寄存器 串行口控制寄存器SCON和电源控制寄存器PCON 1 SCON 可位寻址的串行口控制寄存器 用以设定串行口的工作方式 接收 发送控制以及设置状态标志 280C51串行口寄存器 SM0和SM1为工作方式选择位 可选择四种工作方式 SM2 多机通信控制位 REN 允许接收控制位 当REN 1 则允许接收 当REN 0 则禁止接收 TB8 发送数据的第9位 RB8 接收数据的第9位 TI 发送中断标志位 RI 接收中断标志位 SM2 多机通信控制位 主要用于方式2和方式3 当接收机的SM2 1时可以利用收到的RB8来控制是否激活RI RB8 0时不激活RI 收到的信息丢弃 RB8 1时收到的数据进入SBUF 并激活RI 进而在中断服务中将数据从SBUF读走 当SM2 0时 不论收到的RB8为0和1 均可以使收到的数据进入SBUF 并激活RI 即此时RB8不具有控制RI激活的功能 通过控制SM2 可以实现多机通信 在方式0时 SM2必须是0 在方式1时 若SM2 1 则只有接收到有效停止位时 RI才置1 REN 允许串行接收位 由软件置REN 1 则启动串行口接收数据 若软件置REN 0 则禁止接收 TB8 在方式2或方式3中 是发送数据的第九位 可以用软件规定其作用 可以用作数据的奇偶校验位 或在多机通信中 作为地址帧 数据帧的标志位 在方式0和方式1中 该位未用 RB8 在方式2或方式3中 是接收到数据的第九位 作为奇偶校验位或地址帧 数据帧的标志位 在方式1时 若SM2 0 则RB8是接收到的停止位 TI 发送中断标志位 在方式0时 当串行发送第8位数据结束时 或在其它方式 串行发送停止位的开始时 由内部硬件使TI置1 向CPU发中断申请 在中断服务程序中 必须用软件将其清0 取消此中断申请 RI 接收中断标志位 在方式0时 当串行接收第8位数据结束时 或在其它方式 串行接收停止位的中间时 由内部硬件使RI置1 向CPU发中断申请 也必须在中断服务程序中 用软件将其清0 取消此中断申请 2 PCON电源控制寄存器 SMOD PCON 7 波特率倍增位 在串行口方式1 方式2 方式3时 波特率与SMOD有关 当SMOD 1时 波特率提高一倍 复位时 SMOD 0 3 IE中断允许控制寄存器 EA 中断允许总控制位 ES 串行中断允许控制位 4 IP中断优先级控制寄存器 PS 串行中断优先级设定位 6 3 380C51串行口的工作方式 一 方式0方式0时 串行口为同步移位寄存器的输入输出方式 主要用于扩展并行输入或输出口 数据由RXD P3 0 引脚输入或输出 同步移位脉冲由TXD P3 1 引脚输出 发送和接收均为8位数据 低位在先 高位在后 波特率固定为fosc 12 1 方式0发送过程 在TI 0时 当CPU执行一条向SBUF写数据的指令时 如MOVSBUF A 就启动发送过程 经过一个机器周期 写入发送数据寄存器中的数据按低位在前 高位在后从RXD依次发送出去 同步时钟从TXD送出 8位数据 一帧 发送完毕后 由硬件使发送中断标志TI置位 向CPU申请中断 2 方式0接收过程 在RI 0的条件下 将REN SCON 4 置 1 就启动一次接收过程 串行数据通过RXD接收 同步移位脉冲通过TXD输出 在移位脉冲的控制下 RXD上的串行数据依次移入移位寄存器 当8位数据 一帧 全部移入移位寄存器后 接收控制器发出 装载SBUF 信号 将8位数据并行送入接收数据缓冲器SBUF中 同时 由硬件使接收中断标志RI置位 向CPU申请中断 常用于串行通讯 除发 收8位数据外 还在D0位前有一个起始位 0 在D7位后有一个停止位 1 方式1工作时 发送端自动添加一个起始位和一个停止位 接收端自动去掉一个起始位和一个停止位 二 方式1 8位UART 1 8 1位 波特率可变 波特率可变 用定时器T1作波特率发生器 公式 波特率 2SMOD 32 T1的溢出率 波特率 2SMOD 32 T1的溢出率 溢出率 T1溢出的频繁程度即 T1溢出一次所需时间的倒数 T1溢出时间 256 X 12 fosc 初值X 2n 2SMOD fosc32 波特率 12 波特率 2SMOD fosc32 12 256 X 其中 X是定时器初值 例用T1工作于方式2来产生波特率1200 已知晶振频率 6MHz 要求出T1的初值 初值X 28 20 6 10632 1200 12 256 256 13 02 6 106460800 243 0F3H 三 方式2和方式3方式2或方式3时为11位数据的异步通信口 TXD为数据发送引脚 RXD为数据接收引脚 方式2和方式3时起始位1位 数据9位 含1位附加的第9位 发送时为SCON中的TB8 接收时为RB8 停止位1位 一帧数据为11位 方式2的波特率固定为晶振频率的1 64或1 32 方式3的波特率由定时器T1的溢出率决定 1 方式2和方式3输出 发送开始时 先把起始位0输出到TXD引脚 然后发送移位寄存器的输出位 D0 到TXD引脚 每一个移位脉冲都使输出移位寄存器的各位右移一位 并由TXD引脚输出 第一次移位时 停止位 1 移入输出移位寄存器的第9位上 以后每次移位 左边都移入0 当停止位移至输出位时 左边其余位全为0 检测电路检测到这一条件时 使控制电路进行最后一次移位 并置TI 1 向CPU请求中断 2 方式2和方式3输入 接收时 数据从右边移入输入移位寄存器 在起始位0移到最左边时 控制电路进行最后一次移位 当RI 0 且SM2 0 或接收到的第9位数据为1 时 接收到的数据装入接收缓冲器SBUF和RB8 接收数据的第9位 置RI 1 向CPU请求中断 如果条件不满足 则数据丢失 且不置位RI 继续搜索RXD引脚的负跳变 6 3 4串行口的编程及应用 一 串行口的初始化编程 1 串行口控制寄存器SCON位的确定 根据工作方式确定SM0 SM1位 对于方式2和方式3还要确定SM2位 如果是接收端 则置允许接收位REN为1 如果方式2和方式3发送数据 则应将发送数据的第9位写入TB8中 2 设置波特率 对于方式0 不需要对波特率进行设置 对于方式2 设置波特率仅须对PCON中的SMOD位进行设置 对于方式1和方式3 设置波特率不仅须对PCON中的SMOD位进行设置 还要对定时 计数器T1进行设置 这时定时 计数器T1一般工作于方式2 8位可重置方式 初值可由下面公式求得 由于 波特率 2SMOD T1的溢出率 32则 T1的溢出率 波特率 32 2SMOD而T1工作于方式2的溢出率又可由下式表示 T1的溢出率 fosc 12 256 初值 所以 T1的初值 256 fosc 2SMOD 12 波特率 32 二 串行口的应用 通常用于三种情况 利用方式0扩展并行I O口 利用方式1实现点对点的双机通信 利用方式2或方式3实现多机通信 1 利用方式0扩展并行I O口 MCS 51单片机的串行口在方式0时 当外接一个串入并出的移位寄存器 就可以扩展并行输出口 当外接一个并入串出的移位寄存器时 就可以扩展并行输入口 例6 3 1用单片机的串行口外接并入串出和串入并出的芯片 输入一组8位的开关信息 使其控制一组8位的发光二极管 发光二极管的状态对应开关的状态 1时 允许串行移位 0时 允许并行读入按键 汇编语言程序ORG0000HAJMPMAINORG0100HMAIN MOVSCON 10H REN 1 RI 0 SM0 0 SM1 0 串行口工作在方式0 且启动 接收过程LOOP CLRP1 0 S L 0 允许并行读入按键到74LS165SETBP1 0 S L 1 允许串行移位CLRRI 启动接收JNBRI 若RI 0 8位数据未接收完 等待MOVA SBUF 若RI 1 8位数据接收完 读入ACLRTI 清发送标志 准备发送MOVSBUF A 启动发送 输出数据位0 将点亮对应LED 输出数据位1 LED不亮JNBTI 8位数据未发送完 等待SJMPLOOP 8位数据发送完 循环END C语言程序 includeSbitP1 0 P1 0 Voidmain unsignedchariSCON 0 x10 While 1 P1 0 0 P1 0 1 RI 0 While RI i SBUF TI 0 SBUF i While TI 补充例1 用8051单片机的串行口外接串入并出的芯片74LS164扩展并行输出口控制一组发光二极管 使发光二极管从左至右延时轮流显示 分析 74LS164是一块8位的串入并出的芯片 带有一个控制端STB 当STB 0时 打开串行输入控制门 在时钟信号CLK的控制下 数据从串行输入端DATA一个时钟周期一位依次输入 当STB 1 打开并行输出控制门 74LS164中的8位数据并行输出 使用时 8051串行口工作于方式0 8051的TXD接74LS164的CLK RXD接DATA STB用P1 0控制 8位并行输出端接8个发光二极管 如图所示 汇编程序 ORG0000HLJMPMAINORG0100HMAIN MOVSCON 00HMOVA 01HCLRP1 0START MOVSBUF ALOOP JNBTI LOOPSETBP1 0ACALLDELAYCLRTIRLACLRP1 0SJMPSTART DELAY MOVR7 05HLOOP2 MOVR6 0FFHLOOP1 DJNZR6 LOOP1DJNZR7 LOOP2RETEND 解 设串行口采用查询方式 显示的延时依靠调用延时子程序来实现 程序如下 C语言程序 includevoidmain unsignedchari j SCON 0 x00 串口工作于方式0 发送数据j 0 x01 while 1 SBUF j while TI TI 0 for i 0 i 254 i 延时j 1 if j 0 x00 j 0 x01 补充例2 用8051单片机的串行口外接并入串出的芯片CD4094扩展并行输入口 输入一组开关的信息 CD4094是一块8位的并入串出的芯片 带有一个控制端P S 当P S 1时 8位并行数据置入到内部的寄存器 当P S 0时 在时钟信号CLK的控制下 内部寄存器的内容按低位在前从QB串行输出端依次输出 使用时 8051串行口工作于方式0 8051的TXD接CD4094的CLK RXD接QB P S用P1 0控制 另外 用P1 1控制8并行数据的置入 如图所示 串行口方式0数据的接收 用SCON寄存器中的REN位来控制 采用查询RI的方式来判断数据是否输入 程序如下 汇编程序 ORG0000HLJMPMAINORG0100HMAIN SETBP1 1START JBP1 1 STARTSETBP1 0 从并口读入数据CLRP1 0 启动串口在时钟作用下传输数据MOVSCON 10H 设定串口方式0LOOP JNBRI LOOP 等待串口数据传输完成CLRRIMOVA SBUFRET C语言程序 include 包含特殊功能寄存器库sbitP1 0 P1 0 sbitP1 1 P1 1 voidmain unsignedchari P1 1 1 while P1 1 1 P1 0 1 P1 0 0 SCON 0 x10 while RI RI 0 i SBUF 2 单片机的双机通信使用中断方式时 单片机串行通信程序的编程要点如下 选择正确的控制字 以保证串行口功能的初始化 即设置寄存器SCON的内容 选择合适的波特率 主要指设置定时器1的工作方式和时间常数 即设定TMOD和TH1 TL1寄存器的内容 启动定时器1 使用SETBTR1指令 开放串行口中断 使用SETBES指令 开放总的中断 使用SETBEA指令 编制串行中断服务程序 在串行中断服务程序中要设置清除中断标志标志指令 例6 3 2假定甲 乙两台单片机 以方式1进行串行数据通信 其波特率为1200 晶振频率为11 0592MHz 甲机发送 发送数据在外部RAM以ADDRA为首址共128字节的单元中 乙机接收 把接收到的128字节的数据 顺序存放在以ADDRB为首址的外部RAM中 解 计算定时器1的计数初值 X 256 256 24 232 0E8H式中取位SMOD 0 则应使PCON 00H 甲机汇编语言发送程序如下 ORG0000HLJMPMAINA 跳至主程序入口ORG0023HAJMPSER T1A 转至串行中断服务程序 ORG0100HMAINA MOVSP 60H 设置堆栈指针MOVSCON 40H 串行口置工作方式1MOVTMOD 20H 定时器1为工作方式2MOVTL1 0E8H 定时器1计数初值MOVTH1 0E8H 计数重装值MOVPCON 00H 波特率不倍增SETBTR1 启动定时器1SETBEA 中断总允许SETBES 串行口开中断MOVDPTR ADDRA 发送数据的首地址 ADDRA送DPTRMOVR0 00H 传送字节数初值MOVXA DPTR 取第一个发送字节MOVSBUF A 启动串行口发送SJMP 等待中断 ORG0200HSER T1A CLRTI 将中断标志清零CJNER0 7FH LOOPA 判断128B是否发送 完 若没完 则转LOOPA 继续取下一发送数据CLRES 全部发送完毕 禁止串行口中断AJMPENDA 转中断返回LOOPA INCR0 字节数加1INCDPTR 地址指针加1MOVXA DPTR 取发送数据MOVSBUF A 启动串行口ENDA RETI 中断返回END 甲机对应的C语言发送程序如下 include 包含8051单片机的寄存器定义头文件 unsignedcharxdataADDRA 128 在外部RAM区定义128个单元 unsignedcharnum 0 声明计数变量 unsignedchar p 定义p为指针 voidmain void 主程序 SCON 0 x40 置串行口工作方式1 TMOD 0 x20 定时器1为工作方式2 PCON 0 x00 SMOD 0 TL1 0 xe8 置计数初值 TH1 0 xe8 计数重装值 TR1 1 启动定时器1 EA 1 开中断 ES 1 串行口开中断 p ADDRA 设置发送数据缓冲器区指针 SBUF p 发送第一个数据 while 1 等待中断 voidSer T1A void interrupt4 中断号4是串行中断 TI 0 清发送中断标志 num 计数变量加1 if num 0 x7F ES 0 判断是否发送完 若已完 则关中断 else 否则 修改指针 发送下一个数据 p SBUF p ORG0000HLJMPMAINB 转主程序ORG0023HAJMPSER T1B 转串行口中断服务程序 ORG0100HMAINB MOVSP 60H 设置堆栈指针MOVSCON 50H 串行口置工作方式1 允许接收MOVTMOD 20H 定时器1为工作方式2MOVPCON 00H 波特率不倍增MOVTL1 0E8H 设置计数初值MOVTH1 0E8H 计数重装值SETBTR1 启动定时器1SETBEA 开中断SETBES 串行口开中断MOVDPTR ADDRB 数据缓冲区首地址送DPTRMOVR0 00H 置传送字节数初值SJMP 等待中断 中断服务程序SER T1B CLRRI 清接收中断标志MOVA SBUF 取接收的数据MOVX DPTR A 接收的数据送缓冲区CJNER0 7FH LOOPB 判别接收完没有 若没有 转LOOPB 继续接收CLRES 若接收完 则关串行口中断LJMPENDBLOOPB INCR0 计数指针加1INCDPTR 地址指针加1ENDB RETI 中断返回END 乙机对应的C语言程序如下 includeunsignedcharxdataADDRB 128 unsignedcharnum 0 声明计数变量 unsignedchar p 定义p为指针 voidmain void 主程序 SCON 0 x50 置串行口工作方式1 允许接收 TMOD 0 x20 定时器1为工作方式2 PCON 0 x00 SMOD 0 TL1 0 xe8 置计数初值 TH1 0 xe8 计数重装值 TR1 1 启动定时器1 EA 1 开中断 ES 1 串行口开中断 p ADDRB 设置接收数据缓冲器区指针 while 1 等待中断 voidSer T1B void interrupt4 中断号4是串行中断 RI 0 清接收中断标志 num 计数变量加1 if num 128 ES 0 判断是否接收完 若已完 则关中断 else 否则 接收数据 修改指针 p SBUFp 例6 3 3设有A B两台单片机当A机开始发送时 先送一个 AA 信号 B机收到后回答一个 BB 表示同意接收 当A机收到 BB 后 开始发送数据 每发送一次求 校验和 假定数据块长度为16个字节 数据缓冲区为BUF 数据块发送完后马上发送 校验和 B机接收数据并将其转储到数据缓冲区BUF 每接收到一个数据便计算一次 校验和 当收齐一个数据块后 再接收A机发来的校验和 并将它与B机求出的校验和进行比较 若两者相等 说明接收正确 B机回答00H 若两者不等 说明接收不正确 B机回答0FFH 请求重发 A机收到00H的回答后 结束发送 若收到的答复非零 则将数据再重发一次 双方约定的传输速率为2400bps 晶振频率为12MHz T1工作在定时器模式2 SMOD 0 A机汇编语言程序如下 ORG0000HLJMPMAINAORG0100HMAINA CLREA 禁止中断MOVSCON 50H 串行口置工作方式1 允许接收MOVTMOD 20H 定时器1为工作方式2MOVPCON 00H 波特率不倍增MOVTL1 0F3H 设置计数初值MOVTH1 0F3H 计数重装值SETBTR1 启动定时器1 TLP1 MOVSBUF 0AAH 发联络信号 AAH JNBTI 等待一帧发送完毕CLRTI 允许再发送JNBRI 等待B机的应答信号CLRRI 允许再接收MOVA SBUF B机应答后读到A机XRLA 0BBH 判断B机是否准备好JNZTLP1 B机未准备好 继续联络TLP2 MOVDPTR BUF B机准备好 设定缓冲 区BUF地址指针初值MOVR7 10H 设定数据块长度初值MOVR0 00H 清校验和单元 TLP3 MOVXA DPTRMOVSBUF A 发送一个数据字节ADDA R0 求校验和MOVR0 A 保存校验和INCDPTRJNBTI 未发送完一个字节等待CLRTIDJNZR7 TLP3 整个数据块未发送完转TLP3MOVSBUF R0 发送校验和JNBTI CLRTIJNBRI 等待B机的应答信号CLRRIMOVA SBUF B机应答读到AXRLA 00H 判断B机是否正确接收JNZTLP2 B机应答错误 重新发送RET B机应答正确 返回 B机汇编语言程序如下 ORG0000HLJMPMAINBORG0100HMAINB CLREA 禁止中断MOVSCON 50H 串行口置工作方式1 允许接收MOVTMOD 20H 定时器1为工作方式2MOVPCON 00H 波特率不倍增MOVTL1 0F3H 设置计数初值MOVTH1 0F3H 计数重装值SETBTR1 启动定时器1RLP1 JNBRI 等待A机的联络信号CLRRI 允许再接收MOVA SBUF 收到A机信号XRLA 0AAH 判断是否A机联络信号JNZRLP1 不是A机联络信号 继续等待MOVSBUF 0BBH 是A机联络信号 发准备好信号JNBTI 未发送完一帧等待CLRTI 允许再发送MOVDPTR BUF 设定缓冲区BUF地址指针初值MOVR7 10H 设定数据块长度初值MOVR0 00H 清校验和单元 RLP2 JNBRI 等待接收数据CLRRI 允许再接收MOVA SBUF 收到数据MOVX DPTR A 存储数据INCDPTRADDA R0 求校验和MOVR0 ADJNZR7 RLP2 数据未接收完毕转RLP2JNBRI 完毕 接收B机发来的校验和CLRRIMOVA SBUFXRLA R0 比较校验和JZENDB 校验和相等 跳至发正确标志MOVSBUF 0FFH 校验和不相等 发错误标志JNBTI CLRTIAJMPRLP2 转重新接收ENDB MOVSBUF 00H 发正确标志RET 补充例3 用汇编语言编程通过串行实现将甲机的片内RAM中30H 3FH单元的内容传送到乙机的片内RAM的40H 4FH单元中 分析 甲 乙两机都选择方式1 8位异步通信方式 最高位用作奇偶校验 波特率为1200bps 甲机发送 乙机接收 因此甲机的串口控制字SCON为40H 乙机的串口控制字SCON为50H 由于选择的是方式1 波特率由定时 计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定 则须对定时 计数器T1初始化 设SMOD 0 甲 乙两机的振荡频率为12MHZ 由于波特率为1200 定时 计数器T1选择为方式2 则初值为 初值 256 fosc 2SMOD 12 波特率 32 256 12000000 12 1200 32 230 E6H根据要求定时 计数器T1的方式控制字TMOD为20H 甲机的发送程序 TSTART MOVTMOD 20HMOVTL1 0E6HMOVTH1 0E6HMOVPCON 00HMOVSCON 40HMOVR0 30HMOVR7 10HSETBTR1LOOP MOVA R0 MOVSBUF AWAIT JNBTI WAITCLRTIINCR0DJINZR7 LOOPRET 乙机接收程序 RSTART MOVTMOD 20HMOVTL1 0E6HMOVTH1 0E6HMOVPCON 00HMOVR0 40HMOVR7 10HSETBTR1 启动定时器1LOOP MOVSCON 50HWAIT JNBRI WAITMOVA SBUFMOV R0 AINCR0DJNZR7 LOOPRET 3 多机通信 通过MCS 51单片机串行口能够实现一台主机与多台从机进行通信 主机和从机之间能够相互发送和接收信息 但从机与从机之间不能相互通信 MCS 51单片机串行口的方式2和方式3是9位异步通信 发送信息时 发送数据的第9位由TB8取得 接收信息的第9位放于RB8中 而接收是否有效要受SM2位影响 当SM2 0时 无论接收的RB8位是0还是1 接收都有效 RI都置1 当SM2 1时 只有接收的RB8位等于1时 接收才有效 RI才置1 利用这个特性便可以实现多机通信 多机通信时 主机每一次都向从机传送两个字节信息 先传送从机的地址信息 再传送数据信息 处理时 地址信息的TB8位设为1 数据信息的TB8位设为0 多机通信过程如下 1 所有从机的SM2位开始都置为1 都能够接收主机送来的地址 2 主机发送一帧地址信息 包含8位的从机地址 TB8置1 表示发送的为地址帧 3 由于所有从机的SM2位都为1 从机都能接收主机发送来的地址 从机接收到主机送来的地址后与本机的地址相比较 如接收的地址与本机的地址相同 则使SM0位为0 准备接收主机送来的数据 如果不同 则不作处理 4 主机发送数据 发送数据时TB8置为0 表示为数据帧 5 对于从机 由于主机发送的第9位TB8为0 那么只有SM2位为0的从机可以接收主机送来的数据 这样就实现主机从多台从机选择一台从机进行通信了 例4 要求设计一个一台主机 255台从机的多机通信的系统 1 硬件线路图如下图 2 软件设计 通信协议通信时 为了处理方便 通信双方应制定相应的协议 在本例中主 从机串行口都设为方式3 波特率为1200bps PCON中的SMOD位都取0 设fosc为12MHZ 根据例5 7定时 计数器T1的方式控制字为20H 初值为E6H 主机的SM2位设为0 从机的SM2开始设为1 从机地址从00H FEH 另外还制定如下几条简单的协议 主机发送的控制命令 00H 要求从机接收数据 TB8 0 01H 要求从机发送数据 TB8 0 FFH 命令所有从机的SM2位置1 准备接收主机送来的地址 TB8 1 从机发给主机状态字格式如图 其中 ERR 1 表示从机接收到非法命令 TRDY 1 表示从机发送准备就绪 RRDY 1 表示从机接收准备就绪 主机的通信程序流程 从机采用中断处理 主程序中对串口初始化 中断系统初始化 中断服务程序中实现信息的接收与发送 从机中断服务程序流程见图 主程序略 主机的通信程序设计设发送 接收数据块长度为16字节 这里仅编写主机发16个字节到01号从机的程序和主机从02号从机接收16个字节的程序 略 从机的通信程序设计从机接收 发送数据块长度为16字节 所有的从机的程序相同 只是不同的从机的本机号SLAVE不一样 略 作业 P17616 17 18 19
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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