项目八单片机双机通信设计.ppt

上传人:za****8 文档编号:7234494 上传时间:2020-03-16 格式:PPT 页数:40 大小:3.35MB
返回 下载 相关 举报
项目八单片机双机通信设计.ppt_第1页
第1页 / 共40页
项目八单片机双机通信设计.ppt_第2页
第2页 / 共40页
项目八单片机双机通信设计.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
单片机C语言应用技术与实践 讲课稿 项目8单片机双机通信系统设计 知识目标 1 单片机串行通信基础知识 2 单片机与上位机通信基础知识3 VB基础知识 能力目标 1 能根据设计任务要求编制程序流程图 2 会绘制单片机双机通信电路原理图 3 会用keilC51软件对源程序进行编译调试及与protues软件联调 实现电路仿真 并行通信与串行通信 并行通信 所传送数据的各个位同时发送或接收 相同时钟速率下 并行通信速度较快 适合高速本地通信 串行通信 所传送的数据的各个位按顺序一位一位的发送或接收 串行通信连线少 连接可靠 适合远距离通信 同步串口与异步串口 同步串口具有至少1根时钟线 1 2根数据线的串行通讯方式 利用时钟沿对齐数据 所以此种通讯较为可靠 可以实现很高的通讯速率 1Mbps以上 可达Gbps级别 SPI IIC IIS都属于同步串口 异步串口无专门的时钟线 只有1 2根数据线 收发双发依据事先约定好的位速率确定各个数据位的时间位置 所以此种通讯方式可靠性相对差一些 速率在1Mbps以下 双线的异步串口最常见的是UART 以及衍生出的RS232 RS485等 美信公司的1 WIRE总线属于1根线的异步串口 温度传感器DS18B20就使用了此种总线接口 同步通信与异步通信 1 同步通讯异步通信的概念同步和异步都属于串行数据传送方式 但二者的传送格式有所不同 同步方式的一帧内含有很多数据位 而异步方式一帧内只含有几个数据位 如果要传送一大堆数据 同步方式只给这串数据进行一次外包装 即添加 头帧 尾帧 校验 帧 而异步方式在传送这串数据时则要对数据的每一个字节分别加以包装 即添加 头 位 尾 位和校验 显然在相同的数据传输波特率下 同步方式比异步方式的传送速度快 但同步方式要求收发双方在整个事件传送过程中始终保持严格同步 这将增加硬件上的难度 而异步通信只要求每帧 字节 的传送中短时间保持同步即可 实现起来要容易得多 同步 异步数据通信格式 同步传送的数据格式 异步通信数据帧格式 通信方向 单工传送如果某种通信接口只能发送或者接收 这种单向传送的方法称为单工传送 通信方向 半双工传送数据在两机之间双向传送 此种方式称为双工传送 收发不能同时进行 只能分时接收或发送 称为半双工传送 通信方向 全双工传送两机之间的发送和接收可以同时进行 称为全双工传送 MCS51的UART 数据格式每字节10位 1位起始位 8位数据 1位停止位 按照约定好的速率 一位一位的发送与接收 举例 串口发送二进制数0b11101010波特率每秒传送的位数 单位bps 9600bps 每个码元时间宽度为 1 9600 S MCS51的UART 管脚定义与硬件连接TXD 发送脚 与P3 1复用RXD 接收脚 与P3 0复用当UART正常工作时 P3 0和P3 1不能作为普通IO口使用2个UART互联通信时 需要交叉连接 任务1单片机双机通信设计 串行接口的结构 1 数据缓冲寄存器SBUF两个SBUF 一个用于发送 只写 一个用于接收 只读 映象地址均为99H 2 数据发送与接收控制发送控制器在波特率作用下 将发送SBUF中的数据由并到串 一位位地传输到发送端口 接收控制器在波特率作用下 将接收接收端口的数据由串到并 存入接收SBUF中 串行接口的结构 MCS51的UART 电平转换电路PC机的串口是RS232电平标准 15V 0 15V 1 而显然MCS51的UART是5V TTL电平标准 因此需要加上电平转换电路 方可实现与PC机串口的通讯 知识链接 二 MAX232基础知识1 MAX232简介该产品是由德州仪器公司 TI 推出的一款兼容RS232标准的芯片 由于电脑串口rs232电平是 10v 10v 而一般的单片机应用系统的信号电压是ttl电平0 5v max232就是用来进行电平转换的 该器件包含两个驱动器 两个接收器和一个电压发生器电路提供TIA EIA 232 F电平 该器件符合TIA EIA 232 F标准 每一个接收器将TIA EIA 232 F电平转换成5 VTTL CMOS电平 每一个发送器将TTL CMOS电平转换成TIA EIA 232 F电平 2 主要特点 1 单 5V电源工作 2 两个驱动器及两个接收器 3 30V输入电平 4 低电源电流 典型值是8mA 任务2单片机与PC通信 2 1提出任务功能为利用键盘在PC机中输入一个6字节 12位的0 9 A F 的二进制数 然后用鼠标点击通信命令按钮 PC机就将此二进制数发给单片机 单片机收到此数后再原样发回 PC机收到后显示在窗体上 试验者可通过肉眼比较发送和接收的两个数据 检验通信是否成功 2 2分析任务1 硬件电路设计PC机的某个串行口通过电缆线与RS232收发器MAX232的232电平端口三线交叉连接 如图8 8所示 MAX232的逻辑电平端口与单片机的串行口相连 PC机RS232的9针连接器的4脚和6脚 7脚和8脚不用连接 图8 8PC机与单片机的通信接口电路框图 PC机与单片机的通信接口电路框图 任务1单片机双机通信设计 3 接收数据部分在程序中 接收一个字节的过程如下 检测RI位 如果接收到数据 则RI位被硬件置1 如果TI为0 则继续等待 RI 1 表示已接收到一个字节 此时 可以将SBUF中的内容读入缓冲区 将RI软件清0 准备接收下一字节 程序中 使用get string 发送数据 当检测到 0 字符时 表示已接收到完整的字符串 函数返回 MCS51的UART USB转串口电路对于新款的台式机以及笔记本电脑等没有串口的电脑 也可以用USB转串口的芯片 给电脑扩展出一个串口用于与单片机通信 UART相关的寄存器 UART的控制寄存器SCONSM0 SM1 串行口操作方式选择位 SM2 允许方式2和3的多机通信使能位 REN 允许串行接收位 TB8 方式2和3中要发送的第9位数据 RB8 方式2和3中已接收到的第9位数据 TI RI 发送 接收中断标志 UART相关的寄存器 UART的四种工作模式SCON的SM0 SM1 串行口操作方式选择位 两个选择位对应于四种状态 所以串行口能以四种方式工作 UART相关的寄存器 UART的中断标志位TI与RISCON的TI 发送中断标志 在方式0中当串行发送完第8位数据时由硬件置位 在其他方式中 在发送停止位的开始时由硬件置位 当TI 1时 申请中断 CPU响应中断后 可以发送下一帧数据 在任何方式中 该位都必须由软件清0 SCON的RI 接收中断标志 在方式0中串行接收到第8位结束时由硬件置位 在其他方式中 在接收到停止位的中间时刻由硬件置位 RI 1时申请中断 要求CPU取走数据 在任何工作方式中 该位必须由软件清0 在系统复位时 SCON中的所有位都被清0 UART相关的寄存器 PCON与波特率控制PCON PCON是一个特殊功能寄存器 如下图所示 没有位寻址功能 字节地址为87H SMOD 其中D7位 SMOD 为波特率选择位 其他均无意义 复位时的SMOD值为0 可用MOVPCON 80H或MOV87H 80H指令使该位置1 当SMOD 1时 在串行口方式1 2或3情况下 波特率提高一倍 UART的波特率设置 定时器1 定时器2与波特率控制方式1和3的波特率由定时器1或定时器2的溢出率所决定 通常设定相应定时器工作于自动重装模式 当定时器1作波特率发生器时 波特率由下式确定 波特率 定时器1溢出率 n定时器1初值 256 Fosc n 12 波特率 式中 n为32或16 取决于特殊功能寄存器PCON中的SMOD位的状态 若SMOD 0 则n 32 若SMOD 1 则n 16 Fosc为单片机晶振频率 当定时器2作波特率发生器时 波特率由下式确定 波特率 定时器2溢出率 12 32定时器2初值 65536 Fosc 32 波特率 UART方式1 UART的工作模式1串行口工作于方式1时 被控制为波特率可变的8位异步通信接口 传送一帧信息为10位 即1位起始位 0 8位数据位 低位在先 和1位停止位 1 数据位由TXD发送 由RXD接收 波特率是可变的 取决于定时器1或2的溢出速率 UART使用步骤 设置串口工作模式 SCON的SM0 0 SM1 1使其工作于模式1 REN 1使能接收 根据波特率计算公式设置波特率 注意 需要使定时器工作于自动重装模式 使用定时器2可以达到较高的波特率 波特率是否需要倍速 如果使用定时器1做波特率发生器且倍速后方能满足波特率要求 则需要PCON 0 x80 PCON不影响定时器2产生的波特率 串口中断 一般来讲串口发送均会采用查询模式 串口接收较多采用中断模式 ES 1可以打开串口中断 随后要EA 1打开全局中断 注意 要写好中断服务函数 而且MCS51的串口收发中断共用 因此中断服务函数中需要判断TI与RI的值 中断向量标号是4 向SBUF写入数据启动串口发送 读SBUF可以取出接收到的数据 概念讲解 波特率 每秒钟传输二进制代码的位数 1波特 1位 秒单位 bps 如每秒钟传送240个字符 每个字符格式含10位 则波特率为10位 240个 秒 2400bps 波特率 方式1 方式3 2SMOD 32 T1溢出率 说明 单片机与单片机 单片机与计算机 计算机与计算机之间串口通讯都是用串口方式1 定时器工作方式为方式2T1溢出率就是T1定时器溢出的频率 只要计算出T1定时器每溢出一次所需的时间T 那么T的倒数就是它的溢出率 T1溢出率 fosc 12 256 TH1 串口通讯在串口方式1下 波特率为9600bps 系统频率11 0592M 求TL1 TH1装入的数值是多少 0 xfd 任务1串口方式1编程与实现 题目 在上位机上用串口调试助手发送一个字符X 单片机收到字符后返回给上位机 IGETX 串口波特率设为9600ps 初始化 1 确定T1的工作方式 编程TMOD寄存器 2 计算T1的初值 装载TH1 TL1 3 启动T1 编程TCON中得TR1位 4 确定串口工作方式 SCON寄存器 5 串口在中断方式时 要进行中断 IE IP的设置 任务1单片机双机通信设计 题目 甲机通过串口控制乙机LED闪烁 甲机的K1键可通过串口分别控制乙机的LED1 LED2的闪烁 同时闪烁 同时关闭 程序编写 知识链接 任务1单片机双机通信设计 单片机之间双向通讯 甲机的K1按键可通过串口分别控制乙机的LED1 LED2的点亮 全亮 全灭 乙机按键可向甲机发送数字 甲机接收地数字会显示在其P0端口的数码管上 知识链接 任务1单片机双机通信设计 1 1提出任务单片机甲向单片机乙发送 READY 字符串 然后等待接收 如果接收到乙机发送的 OK 字符串 则蜂鸣器响 否则就不响 1 2分析任务1 硬件电路设计电路组成如图8 1所示 这里选择具有内部ROM的AT89S51单片机 如果PROTEUS软件中没有AT89S51单片机 就选用AT89c51单片机 两块单片机串口相接 即甲机的P3 0接乙机的P3 1 甲机的P3 1接乙机的P3 0 也就是说甲机的发送端接乙机的接收端 甲机的接收端接乙机的发送端 甲机的P1 0接蜂鸣器 当甲机的P1 0管脚输出高电平时 蜂鸣器就响 输出低电平时 蜂鸣器不响 任务1单片机双机通信设计 图8 1双机通信原理图 右边是甲机 左边是乙机 任务1单片机双机通信设计 使用查询方式 实现双机串口异步通信 所谓的查询方式 是指通过查看中断标志位RI和TI来接受和发送数据 在这种方式下 当串口发送完数据或接收到数据时 仅仅置位相应的标志位而不会以任何其它的形式通知主程序 主程序只能通过定时查询发现标志位的状态改变 从而作出响应的处理 注意 在查询方式中 标志位的位置由硬件完成 而标志位的清除需要软件进行处理 首先由甲机发送 READY 字符串 然后等待接收 如果接收到乙机发送的 OK 字符串 则蜂鸣器响 否则就不响 总程序流程图如图 甲机流程图 任务1单片机双机通信设计 数据的接收和发送均使用查询方式 程序大致分为3个部分 初始化部分 发送数据部分 接受数据部分 1 系统初始化部分系统初始化部分应完成如下方面的工作 关闭所有中断 设置串口工作模式 设置串口为接收允许状态 设置串行口通信波特率 其它数据初始化 任务1单片机双机通信设计 串口使用工作方式1 其波特率可以是软件设置的 波特率的设置是通过改变定时器T1的溢出率来控制 设定单片机为如下环境 单片机外接晶振频率为11 0592Hz 定时器T1工作在工作模式2 既自动装入初值8位定时器 波特率选择位SWOD置为1 设置通信波特率为9600bit s 按照上述条件 定时器T1的初值N应设为 N 256 2smod 晶振频率 波特率 32 12 256 21 11 0592 106 9600 32 12 250 FAH 任务1单片机双机通信设计 2 发送数据部分在程序中 发送一个字节的过程如下 将数据传送至SBUF 检测TI位 如果数据传送完毕 则TI位被硬件置1 如果TI为0 则继续等待 TI 1 表示发送完成 此时需要将TI软件清0 然后继续发送下一个字符 程序中 使用put string 发送数据 当检测到 0 字符时 表示到达发送字符串结尾 停止数据发送 任务1单片机双机通信设计 include include define SEND STRING READY 发送的字符串 define RECV STRING OK 接收的字符串 define MAX LEN 16 数据最大长度voidput string unsignedchar str 串口发送字符串voidget string unsignedchar str 串口接收字符串voidBeep 蜂鸣表示成功接收到返回信号 voidmain charbuf MAX LEN 系统初始化 TMOD 0 x20 定时器T1使用工作方式2TH1 250 设置初值TL1 250 TR1 1 开始计时PCON 0 x80 SMOD 1SCON 0 x50 工作方式1 波特率9600bit s 允许接收EA 0 关闭全部中断strcpy buf SEND STRING 设置发送字符串 程序代码如下 甲机 任务1单片机双机通信设计 发送数据 put string buf buf 0 0 清空缓冲区 接收数据 while strcmp buf RECV STRING 0 get string buf beep while 1 反复循环 子函数 发送字符 参数str为待发送子符串 voidput string unsignedchar str do SBUF str while TI 等待数据发送完毕TI 0 清发送标志位str 发送下一数据 while str 1 0 发送至字符串结尾则停止 任务1单片机双机通信设计 接收字符串 参数str指向保存接收子符串缓冲区 voidget string unsignedchar str unsignedcharcount 0 str 0 清缓冲区do while RI 等待数据接收 str SBUF 保存接收到的数据RI 0 清接收标志位str 准备接收下一数据 count if count MAX LEN 如果接收数据超过缓冲区范围 则只接收部分字符 str 1 0 break while str 1 0 接收至字符串结尾则停止 任务1单片机双机通信设计 include defineucharunsignedcharmain uchartemp datmsg 6 TMOD 0 x20 设置波特率为19 2kb sPCON 0 x80 TH1 0 xfd TL1 0 xfd TR1 1 启动定时器1SCON 0 x50 设置串行口为10位异步收发 且允许 接收while 1 for temp 0 temp 6 temp 连续接收6个 字节 while RI 0 RI 0 datmsg temp SBUF for temp 0 temp 6 temp 连续发送6个 字节 SBUF datmsg temp while TI 0 TI 0 单片机C51程序
展开阅读全文
相关资源
相关搜索

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


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

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


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