【实验日志】计算机串口使用与测量5
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相关推荐
- 计算机串口使用与测量
计算机串口使用与测量 3.1准备工作 这里由于直接下载好了VMWork Workstation 16 ,所以选择直接使用VMWork Workstation 16 . 3.2Linux操作系统平台 一 ...
- 串口使用及测量实验1
工程文件:https://github.com/A-Y-1/HNU 串口部分的实验和综合实验(RS485总线评分系统)我都是使用c或c++编写,结果不是很好(上课用老师的代码速通了,懒得改,直接一个字 ...
- 串口使用及测量实验2
工程文件:https://github.com/A-Y-1/HNU 和串口部分第一个实验一样用C写的,然后又和同学搞了一个C++的出来,但是还是比不过python的版本╮(╯▽╰)╭,仅供参考.(改改 ...
- 计算机组成原理实验load,计算机组成原理实验报告五
计算机组成原理实验报告五 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 4.9 积分 广东工业大学广东工业大学实验报告 计算机学院 计算机科学与技术 ...
- 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 ...
- 实验二 无线网络环境RSSI测量实验
无线网络技术教程第四版实验二 无线网络环境RSSI测量实验 目录 无线网络技术教程第四版实验二 无线网络环境RSSI测量实验 1 实验要求和目的 2 实验原理和背景 3 实验环境和软件 4 实验过程与 ...
- 计算机仿真实验单摆,计算机仿真实验用凯特摆测重力加速度.doc
计算机仿真实验 用凯特摆测重力加速度 实验目的 学习凯特摆的实验设计思想和技巧. 掌握一种比较精确的测量重力加速度的方法. 实验内容 仿真仪器调节: 测量和记录: 数据处理: 实验原理 设一质量为m的 ...
- 计算机仿真实验单摆,计算机仿真实验 用凯特摆测重力加速度
实验1 计算机仿真实验 用凯特摆测重力加速度 一. 实验目的 1. 学习凯特摆的实验设计思想和技巧. 2. 掌握一种比较精确的测量重力加速度的方法. 二. 实验内容 1. 仿真仪器调节: 2. 测量和 ...
- 密立根油滴实验的计算机仿真实验报告,密立根油滴实验的计算机仿真.docx
文档介绍: 密立根油滴实验的计算机仿真在物理学史上,确定电子的荷质比并进而测定电子电量,是一件极有意义的工作.美国著名的实验物理学家密立根从1907年开始,在总结前人实验的基础上,着手电子电荷量的测量 ...
最新文章
- 如何解决从数据库里面取出的时间晚了8个小时
- hybris impex里的小括号语法
- 计算机视觉中的多视图几何_基于深度学习的视觉三维重建研究总结
- Java实现图片压缩代码,图片大小转换
- 文字在图片上c语言,HTML让文字在图片上显示的几种方法
- Spring Cloud Eureka(一)搭建一个注册中心
- Java 中的抽象类和接口
- python基础教程百度云-python从入门到精通视频百度云盘下载
- 税友软件公司java面试_税友集团java面试题
- 4.16-4.22课题(拼团系统)进度汇报
- 厦门高职计算机专业,厦门高职,厦门高职学校,厦门高职学校哪个相对好一些 - IT教育频道...
- 提取过程_[论文荐读]石榴皮提取物对生猪肉饼品质的影响
- java怎么返回string_黄瓜Java-如何在下一步中使用返回的String?
- 八重州8900如何解锁_八重贵族怪胎之路
- txt文本换行(txt文本设置、wps替换换行)
- eclipse 2020版 安装与配置完美教程
- 微信小程序地图添加标记点
- 公司让微信加人有没有软件_没有人想要使用软件
- HTML中视频的压缩方式,快速将视频压缩到最小的技巧!
- 面试必问 | 聊聊MyBatis执行流程?