总线技术实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《总线技术与应用》

实验报告

学院:

专业:

班级:

姓名:

学号:

课程名称:总线技术与应用

实验题目:RS485总线扩展实验指导教师:

班级:学号:学生姓名:

一、实验目的和任务

(1)学习RS485总线系统的连接方法

(2)掌握RS485总线系统应用层协议的设计方法

(3)任务:

①进行各节点ADC的数据周期读取;

②进行LED灯闪烁同步控制:在主机上通过按键(按向右键)切换LED等显示,

底层同步进行LED灯显示切换;

③进行数字温度模块的数据周期读取,通过主机上通过按键(按向上键)切换温

度在数码管显示;

④主机通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC

功能、温度功能);

⑤主机通过左、下、右按键选择从节点选择(A(2)、B(3)、C(4)),返回ADC

值或温度值;

⑥主机数码管第一个显示节点号(A(2)、B(3)、C(4)),后面显示电压值或温

度值;

⑦主机通过左、下、右按键选择从节点选择(A(2)、B(3)、C(4)),使LED闪

烁,数码显示第一个数字显示节点号(A(2)、B(3)、C(4)),其他三个数字显

示LED。

二、实验内容及原理

1、实验前准备

(1)安装好Keil工程软件;

(2)安装好USB/RS485转换器驱动;

(3)安装好串口调试助手;

2、RS485概述

RS485采用差分信号幅逻辑,+2V~+6V表示“0”,-6V~-2V表示“1”。RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。

起始位:为信号0,占1位;

数据位:可以使5、6、7、8位,传输室低位在先,高位在后;

校验位:1位奇偶校验码(可不选);

停止位:用信号1表示字节结束,可以是1位、1.5位或2位;

空闲位:为信号1;

由于RS485总线只定义了物理层与数据链路层的一部分,因此一般需要自定义应用层协议。应用层协议一般包括同步字节、地址信息、功能信息、数据信息、校验信息。

3、RS485总线协议

三、实验步骤及源代码

1、实验步骤

(1)连线:将5V/2A电源线与各节点基板连接好,并将J-link仿真器及USB接口线与试验箱CPU板与电脑连接好;

(2)按《实验平台使用说明》中“第3章标准程序验证”对实验基板进行验证;

(3)双击打开实验程序文件夹“..\4_实验程序\总线类扩展实验\RS485从节点(ADC+LED)v5\”中的Template.uvprojx,点击Build按钮,编译程序;编译成功后,从机基板

上电,点击Load按钮下载程序;(在下载前,需要在程序中对从机地址进行确认)(4)双击打开实验程序文件夹“..\4_实验程序\总线类扩展实验\RS485主节点通信程序_v5\\”中的Template.uvprojx,点击Build按钮,编译程序;编译成功后,主机基

板上电,点击Load按钮下载程序;(在下载前,需要在程序中对主机地址进行确

认)

(5)下载成功后,进入测试;

①主机通过向上键进行模式切换(共三种功能,顺序分别为LED显示功能、ADC

功能、温度功能);可以观察到4位LED数码管提示字符变化。

②进入温度功能,主机通过左、下、右按键选择从节点选择(A(2)、B(3)、C(4)),

返回ADC值或温度值。

③进入ADC测试功能,主机数码管第一个数字显示节点号(A(2)、B(3)、C(4)),

后面显示电压值或温度值。

④进入LED显示功能,主机通过左、下、右按键选择从节点选择(A(2)、B(3)、

C(4)),使LED灯闪烁,数码显示管第一个数字显示节点号(A(2)、B(3)、D

(4)),其他三个数字显示LED;

⑤在上述通讯过程中,使用USB/RS485转换器对实验过程进行记录,对实验数据

进行分析;

(6)扩展实验

①将通讯速率不断提高,看什么速率情况下通讯会失败?

提示:通过修改语句RS485_Init(9600);中的参数实现。

②试讨论协议中哪些字段不是必须的,对协议如何进行优化?

③在通讯速率为9600bps情况下,如果ADC读取周期为10ms能否正常通讯?

④能否设置两个主站,同时获取数据?

2、源代码

(1)RS485 从节点(ADC+LED)

#include "system.h"

#include "SysTick.h"

#include "led.h"

#include "usart.h"

#include "rs485.h"

#include "adc.h"

#include "ds18b20.h"

#include "TM1637.h"

#include "application.h"

/******************************************************************************* * 函数名: main

* 函数功能: 主函数

* 输入: 无

* 输出: 无

*******************************************************************************/ int main()

{

u8 ii=0;

u8 curMode;

u8 oldMode;

u8 loopCount;

float fValue;

for(ii=0;ii<3;ii++) //对初始化函数进行三遍初始化

{

SysTick_Init(168);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组分2组

LED_Init();

ADCx_Init();

//USART1_Init(9600);

RS485_Init(9600);

TM1637_Init();

while(DS18B20_Init())

{

TM1637_DispOneChar(TM1637_POS_1000,'E');

TM1637_DispOneChar(TM1637_POS_1000,'R');

TM1637_DispOneChar(TM1637_POS_1000,'0');

TM1637_DispOneChar(TM1637_POS_1000,'1');

delay_ms(500);

}

相关文档
最新文档