基于51单片机MAX487实现RS485多机通信protues仿真
硬件设计
(末尾附文件)
代码设计
#include<reg51.h>
#include<string.h>
#include "lcd.h"
#define _SUCC_ 0x0f//数据传送成功
#define _ERR_ 0xf0//数据传送失败
unsigned char aa=0xff;//主机与从机之间通信标志
unsigned char temp=0xff;
unsigned char Buff[20];//数据缓冲区
unsigned char recive[6]; //用于保存从机发送的数据
sbit KEY1=P1^3;
sbit KEY2=P1^2;
sbit KEY3=P1^1;
sbit KEY4=P1^0;
sbit KEY5=P3^2;
sbit KEY6=P3^3;//sbit KEY5=P1^4;
//sbit KEY6=P1^5;
//延时1ms函数
void delay_1ms(unsigned int i)
{unsigned int x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);
}
//串口初始化函数
void init()
{TMOD=0x20; //定时器1工作于方式2TH1=0xfd; TL1=0xfd; //波特率为9600PCON=0;SCON=0xd0; //串口工作于方式3TR1=1; //开启定时器TI=0;RI=0;
}//发送数据函数
void SEND_data(unsigned char *Buff)
{unsigned char i,lenth,check;lenth=strlen(Buff); //计算数据长度check=lenth;TI=0; //发送数据长度TB8=0; //发送数据帧SBUF=lenth;while(!TI);TI=0;for(i=0;i<lenth;i++) //发送数据{check=check^Buff[i];TB8=0;SBUF=Buff[i]; while(!TI);TI=0;}TB8=0; //发送校验字节SBUF=check; while(!TI);TI=0;
}//接收数据函数
unsigned char RECE_data(unsigned char *Buff)
{unsigned char i;unsigned char lenth;unsigned char check;RI=0; //接收数据长度while(!RI);if(RB8==1){RI = 0; return 0xfe; //若接收到地址帧,则返回0xfe}lenth=SBUF;RI=0; check=lenth;for(i=0;i<lenth;i++) //接收数据{while(!RI);if(RB8==1) //若接收到地址帧,则返回0xfereturn 0xfe;Buff[i]=SBUF; check=check^(Buff[i]);RI=0;}while(!RI); //接收校验字节if(RB8==1) //若接收到地址帧,则返回0xfereturn 0xfe;temp=SBUF;RI=0;check=temp^check; //将从主机接收到的校验码与自己计算的校验码比对if(check!=0) //校验码不一致,表明数据接收错误,向主机发送错误信号,函数返回0xff{TI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;}TI=0; //校验码一致,表明数据接收正确,向主机发送成功信号,函数返回0x00TB8=0;SBUF=_SUCC_; while(!TI);TI=0;return 0;
} //发送从机地址
void ADDR_data(unsigned addr)
{while(temp!=addr) //主机等待从机返回其地址作为应答信号{TI=0; //发送从机地址TB8=1; //发送地址帧SBUF=addr;while(!TI);TI=0; RI=0;while(!RI);temp=SBUF;RI=0;}
}void keyscan(){if(KEY1==0){LcdWriteCom(0x01); //清屏delay_1ms(5);if(KEY1==0){while(!KEY1);ADDR_data(0x01);//发送从机地址temp=_ERR_; //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xfe};SEND_data(Buff);//发送数据RI=0;while(!RI);temp=SBUF;RI=0;}SM2=0; //接收数据帧aa=0xff; //从机接收数据,并将数据保存到数据缓冲区while(aa==0xff){aa=RECE_data(Buff);P0 = 0xff;}P0 = 0xfe;recive[0] = Buff[0];recive[1] = Buff[1];recive[2] = Buff[2];}}if(KEY2==0){LcdWriteCom(0x01); //清屏delay_1ms(5);if(KEY2==0){while(!KEY2);ADDR_data(0x01);temp=_ERR_; //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xff};SEND_data(Buff);RI=0;while(!RI); RI=0;temp=SBUF;}}}if(KEY3==0){LcdWriteCom(0x01); //清屏delay_1ms(5);if(KEY3==0){while(!KEY3);ADDR_data(0x02);temp=_ERR_; //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xfe};SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;}SM2=0; //接收数据帧aa=0xff; //从机接收数据,并将数据保存到数据缓冲区while(aa==0xff){aa=RECE_data(Buff);P0 = 0xff;}P0 = 0xfe;/*recive[3] = Buff[0];recive[4] = Buff[1];recive[5] = Buff[2];*/recive[0] = Buff[0];recive[1] = Buff[1];recive[2] = Buff[2];}}if(KEY4==0){LcdWriteCom(0x01); //清屏delay_1ms(5);if(KEY4==0){while(!KEY4);ADDR_data(0x02);temp=_ERR_; //主机等待从机数据接收成功信号while(temp!=_SUCC_){unsigned char Buff[]={0xff};SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;}}}
链接:https://pan.baidu.com/s/1O6FYzpRDkedPM2ZW6Uivuw
提取码:5jpj
基于51单片机MAX487实现RS485多机通信protues仿真相关推荐
- 基于51单片机的产品数量自动计量系统protues仿真
硬件设计 (末尾附文件) 代码设计 ///************************************************************************* ///** ...
- 【043】基于51单片机的篮球比赛积分计时系统Proteus仿真
一.压缩包资料内容 (1).基于51单片机的篮球比赛积分计时系统proteus仿真设计一份: (2).基于51单片机的篮球比赛积分计时系统proteus仿真设计keli源代码一份: (3).基于51单 ...
- 【038】基于51单片机的土壤湿度自动浇花系统Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的土壤湿度自动浇花系统proteus仿真设计一份: (2).基于51单片机的土壤湿度自动浇花系统proteus仿真设计keli源代码一份: (3).基于51单 ...
- 基于51单片机HX711的电子秤称重计价proteus仿真程序设计
设计要求 1.利用压力传感器检测重量信号,经放大和A/D转换,送单片机进行处理,并在液晶屏上显示出被称重量值: 2.最小显示单位为1克: 3.量程超过报警值蜂鸣器报警 资料下载地址:基于51单片机HX ...
- 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告)
本设计: 基于51单片机轮胎胎压监测系统-压力传感器(仿真+程序+报告) Proteus仿真版本:proteus7.8 程序编译器:keil 4 编程语言:C语言 编号C0018 ----本设计分享下 ...
- 基于51单片机的简易电容值测量仪proteus仿真设计
51单片机简易电感测量仪仿真设计( proteus仿真+程序+讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0039 51单片机简 ...
- 基于51单片机的智能超声波四轮遥控小车proteus仿真
硬件设计 下边讲一下遥控小车,同样是基于51单片机,利用超声波进行测距,利用蓝牙模块实现遥控(仿真里边没有蓝牙,所以采用的是RS485通信模拟) 仿真图: 由LCD1602作为显示器,具有蜂鸣器报警, ...
- 基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)
编号:29 基于51单片机的数字电压表(ADC0832) 功能描述: 本设计由51单片机最小系统+ADC0832模块+两路模拟量输入模块+液晶1602显示模块 1.主控制器是AT89C82单片机 2. ...
- 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)
按键1:加(手动开启窗帘 按键2:减(手动关闭窗帘) 按键3:进入定时模式开启时间和光控阈值数值大小的开启 按键4:进入当前时间的设置(年.月.日.时.分的设置) 按键5:切换模式(在手动模式.定时模 ...
最新文章
- Xenapp安装后手动更改XML Service端口,以便使用不同于 IIS 的端口
- JavaScript 浮点数陷阱及解法
- python中__name__的使用
- 【Java 笔记】 java 格式化输出
- EntityFramework Core 2.0执行原始查询如何防止SQL注入?
- hadooprbac_rbac权限管理系统的学习
- 计算机一级重点知识,计算机一级MSOffice考试重点:数制的基本概念
- linux set命令例子,学习一个 Linux 命令:declare/typeset 命令
- 多个线程交替打印ABC,打印10次
- Python初学16——程序设计方法学
- 操作系统课设实验五---Nachos文件系统扩展
- QQ音乐下载qmc0/3批量转MP3工具
- msn 邮箱服务器,MSN邮箱的POP怎么设置?
- intel hd3000 本 在 64位 ubuntu10.04 下 液晶亮度无法调节 的解决之道(亲测)
- 【路径规划】基于粒子群算法实现机器人栅格地图路径规划matlab源码
- php mysql好学吗_零基础小白PHP开发好学吗
- 4k视频写入速度要求_4K视频要用什么卡?极速专业存储卡盘点
- 有关直方图的常用操作
- 大疆 android 简书,实测大疆智图与CC(Smart3D)三维建模、正射拼图对比
- 西游记中孙悟空成佛后地位比观世音菩萨高吗?
热门文章
- 强力推荐各位攻城狮查看,收藏IT职业技能图谱(全套13张)
- 2017年全球大数据产业报告之海外篇(第六集)
- Android修行手册 - RatingBar全解
- 玩弄互联网的寒潮,有必要吗?
- 长生生物收到深交所重大违法强制退市决定,2019首支退市股!...
- python调用vbs脚本_使用python创建的参数执行vbs文件
- java坦克大战总体功能设计_Java编程:坦克大战游戏的设计
- 武汉最牛批的互联网基本都在这了!
- 一台计算机连接两个投影,如何实现多台电脑连接一台投影仪并快速切换
- 用git拉取微信小程序项目到本地运行(简单实用)