RS485总线数据收发

一、实验目的

1、熟练使用Linux下io函数read、write和epoll等

2、熟练处理流式通信数据

3、理解485总线的冲突问题

二、RS485信号介绍

RS485总线有两条线信号线,能够传输一个逻辑信号。计算机标准的UART串口有RX、TX收发两条线,因此能够同时进行数据的接收和发送。而RS485只有一个逻辑信号,因此同一时刻只能有一个主体进行数据发送(因此叫做半双工通信串口)。

单片机板上使用了一颗MAX485芯片作为标准UART接口向485接口转换的接口芯片。

如下图所示,单片机串口数据发送脚与MAX485的DI脚相连接。在发送数据前,单片机会将DE脚置为高电平,此时A、B引脚信号为所发送的单片机串口数据。

如果多个单片机将DE脚置为高电平,则A、B信号线同时被多个单片机板的MAX485芯片驱动,则会造成数据收发错误甚至损坏芯片。因此,多个单片机对485总线操作的时间控制至关重要。

三、实验过程

1、向A单片机板下载下面的程序

AHasSecret.hex

向B单片机板下载下面的程序

B_Relay.hex

下载程序后,A板单片机将使用1200波特率约每300ms发送一次自身序列号,格式为

0xAA 0x55 4字节序列号

序列号:E8 F1 A3 5D

2、通过B板串口向RS485总线写入自己的学号,格式为

0xAA 0x55 十二位学号数字。

例如学号20220110203,应该通过串口发送以下数据

AA 55 02 00 02 02 00 01 01 01 00 02 00 03

3、A板单片机接收到学号后会每300m发送第一串密码,密码长度为4字节。请将解析出该串密码并在150ms内原样发回给串口(否则会造成总线的冲突)。STC单品机收到返回后会继续发送下一串密码,请继续解析出该串密码并在150ms内原样发回给串口。以此往复,将收到的最后一串密码记录下来。

例如,收到以下密码串

AA 55 00 00 00 00 00 C9 34 3F 5D

其中AA 55为前导串,最后4个字节是密码。请将密码原样发回给串口。

AA 55 C9 34 3F 5D

代码如下:

(咳咳:有的密码可能包含aa会造成错误得到0结果 所以这个代码大家再改改哈哈哈)

main.c:改成自己的学号

#include <stdio.h>
#include "com.h"int main(void)
{unsigned char tmp[15] = {0}; //用于存放读取出来的数据的缓冲区int rl; //读取数据的长度(单位:字节)int i;fd = openSerial("/dev/ttyUSB0"); //打开串口,ttyUSB0是串口文件if(fd < 0){printf("open com fail!\n");return 0;}EpollInit(fd); //初始化终端事件触发函数epoll,设置要监听的事件及相关参数等unsigned char sno[14] = {0XAA, 0X55, 0X02, 0X00, 0X02, 0X00, 0X00, 0X08, 0X00, 0X04, 0X00, 0X02, 0X02, 0X04}; //这里改为自己的学号unsigned char passwd[6] = {0XAA, 0X55};int n=0;unsigned s[100] = {0};const char* errstr = "error!";write(fd,sno,14);while(1){rl = ComRead(tmp,1);//读取13个字节放到缓存//打印读到的数据int j;s[n++] = tmp[0];if(tmp[0]==0xaa&&n>=8){for(j=0;j<4;j++)passwd[5-j]=s[n-j-2]; //根据aa55前四位从后往前确定密码for(j=0; j<6; j++)printf(" %02x",passwd[j]);printf("\n\n");write(fd,passwd,6);n=0;}}close(epid);close(fd);return 0;}

com.c:(波特率设为1200)

编译:

查看并修改代码:

修改权限sudo chmod 777 /dev/ttyUSB0

或以管理员身份运行 sudo ./main

等待密码不变。

4、将学号、序列号、最后一串密码发送到课程后台。上送命令语法为

curl "132.232.98.70:6363/check485Secret?id=学号&v=序列号&s=密码"

后台返回的数字表示该密码的编号,返回DUP表示该序列号已经被其它同学使用,请更换电路板重新取得密码。

密码:EC F3 A1 5D

返回256,到达了密码的最大次数。

【实验日志】计算机串口使用与测量5相关推荐

  1. 计算机串口使用与测量

    计算机串口使用与测量 3.1准备工作 这里由于直接下载好了VMWork Workstation 16 ,所以选择直接使用VMWork Workstation 16 . 3.2Linux操作系统平台 一 ...

  2. 串口使用及测量实验1

    工程文件:https://github.com/A-Y-1/HNU 串口部分的实验和综合实验(RS485总线评分系统)我都是使用c或c++编写,结果不是很好(上课用老师的代码速通了,懒得改,直接一个字 ...

  3. 串口使用及测量实验2

    工程文件:https://github.com/A-Y-1/HNU 和串口部分第一个实验一样用C写的,然后又和同学搞了一个C++的出来,但是还是比不过python的版本╮(╯▽╰)╭,仅供参考.(改改 ...

  4. 计算机组成原理实验load,计算机组成原理实验报告五

    计算机组成原理实验报告五 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 4.9 积分 广东工业大学广东工业大学实验报告 计算机学院 计算机科学与技术 ...

  5. djcpth计算机实验报告,计算机组成原理实验

    时间:2019-05-15 03:31:36 作者:admin ALU设计 module ALU(ALU_OP,AB_SW,F_LED_SW,LED); input[2:0] ALU_OP,AB_SW ...

  6. 实验二 无线网络环境RSSI测量实验

    无线网络技术教程第四版实验二 无线网络环境RSSI测量实验 目录 无线网络技术教程第四版实验二 无线网络环境RSSI测量实验 1 实验要求和目的 2 实验原理和背景 3 实验环境和软件 4 实验过程与 ...

  7. 计算机仿真实验单摆,计算机仿真实验用凯特摆测重力加速度.doc

    计算机仿真实验 用凯特摆测重力加速度 实验目的 学习凯特摆的实验设计思想和技巧. 掌握一种比较精确的测量重力加速度的方法. 实验内容 仿真仪器调节: 测量和记录: 数据处理: 实验原理 设一质量为m的 ...

  8. 计算机仿真实验单摆,计算机仿真实验 用凯特摆测重力加速度

    实验1 计算机仿真实验 用凯特摆测重力加速度 一. 实验目的 1. 学习凯特摆的实验设计思想和技巧. 2. 掌握一种比较精确的测量重力加速度的方法. 二. 实验内容 1. 仿真仪器调节: 2. 测量和 ...

  9. 密立根油滴实验的计算机仿真实验报告,密立根油滴实验的计算机仿真.docx

    文档介绍: 密立根油滴实验的计算机仿真在物理学史上,确定电子的荷质比并进而测定电子电量,是一件极有意义的工作.美国著名的实验物理学家密立根从1907年开始,在总结前人实验的基础上,着手电子电荷量的测量 ...

最新文章

  1. 如何解决从数据库里面取出的时间晚了8个小时
  2. hybris impex里的小括号语法
  3. 计算机视觉中的多视图几何_基于深度学习的视觉三维重建研究总结
  4. Java实现图片压缩代码,图片大小转换
  5. 文字在图片上c语言,HTML让文字在图片上显示的几种方法
  6. Spring Cloud Eureka(一)搭建一个注册中心
  7. Java 中的抽象类和接口
  8. python基础教程百度云-python从入门到精通视频百度云盘下载
  9. 税友软件公司java面试_税友集团java面试题
  10. 4.16-4.22课题(拼团系统)进度汇报
  11. 厦门高职计算机专业,厦门高职,厦门高职学校,厦门高职学校哪个相对好一些 - IT教育频道...
  12. 提取过程_[论文荐读]石榴皮提取物对生猪肉饼品质的影响
  13. java怎么返回string_黄瓜Java-如何在下一步中使用返回的String?
  14. 八重州8900如何解锁_八重贵族怪胎之路
  15. txt文本换行(txt文本设置、wps替换换行)
  16. eclipse 2020版 安装与配置完美教程
  17. 微信小程序地图添加标记点
  18. 公司让微信加人有没有软件_没有人想要使用软件
  19. HTML中视频的压缩方式,快速将视频压缩到最小的技巧!
  20. 面试必问 | 聊聊MyBatis执行流程?

热门文章

  1. Scrapy 小白自学笔记
  2. 【伪类与伪元素】用CSS伪元素(以:before为例)插入图片
  3. 推荐一款免费的AI绘图软件,可生成二次元画作和3D模型
  4. web中医药——杏林春暖传世著作(内容展示页面)(html+css)
  5. Redis 是什么?
  6. SAP中设定初始物料状态的应用技巧
  7. sqlserver 人名_SqlServer书上:使用游标输出学生姓名、选修课程名称和期末考试成绩...
  8. NetGear 路由器任意执行漏洞
  9. Android 设备获取物理唯一标识码
  10. 由网店扩张看全网电子商务前景