基于RS485总线的PC与多个单片机通信的C语言程序
利用RS-485通讯协议实现PC机与单片机的多点通讯

合肥学院毕业设计(论文)任务书课题类型:工程设计类,实验研究类,计算机软件设计类,电路设计类,其它类课题来源:科研,教研,预研,生产实践,其它类系主任教研室主任指导教师年月日年月日2007年11月1日利用RS-485通讯协议实现PC机与单片机的多点通讯摘要介绍一种RS-485接口芯片MAX485,利用此芯片可以很方便地实现PC机与单片机之间的串行通讯,同时给出PC机与单片机实现多点通讯的实例。
关键词 RS-485串行通讯多点通讯随着数据采集系统的广泛应用,通常由单片机构成的应用系统,如仪器仪表、智能设备等,都需要与PC机之间交换数据,实现与PC机之间的通讯功能,以充分发挥PC和单片机之间的功能互补,资源共享的优势。
以往常用的RS-232协议在很大程度上已不能满足设计的要求,如传输速率慢,传输距离短,传输信号易受外界的干扰等缺点。
本文介绍一种性能优越的RS-485接口芯片,以及如何利用此芯片实现单片机与PC机之间的远程通讯,并讨论将其功能进行扩充,实现PC机管理单片机阵列的功能。
1 RS-485协议简介及MAX485芯片介绍由于RS-232的种种缺点,新的串行通讯接口标准RS-449被制定出来,与之相对应的是RS-485的电气标准。
RS-485是美国电气工业联合会(EIA)制定的利用平衡双绞线作传输线的多点通讯标准。
它采用差分信号进行传输;最大传输距离可以达到1.2 km;最大可连接32个驱动器和收发器;接收器最小灵敏度可达±200 mV;最大传输速率可达2.5 Mb/s。
由此可见,RS-485协议正是针对远距离、高灵敏度、多点通讯制定的标准。
MAX485接口芯片是Maxim公司的一种RS-485芯片。
采用单一电源+5 V工作,额定电流为300 μA,采用半双工通讯方式。
它完成将TTL电平转换为RS-485电平的功能。
其引脚结构图如图1所示。
从图中可以看出,MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
基于485总线的PC机与多片单片机的通信毕业设计说明书

武汉工程大学邮电与信息工程学院毕业设计(论文)说明书论文题目 PC机与多台单片机之间的串行通信目录摘要 (Ⅱ)Abstract (Ⅲ)第一章绪论 (1)第二章课题实施方案 (2)第三章硬件电路设计 (5)3.1 80C51单片机结构及其串行通信原理 (5)3.2 串行接口及其差分转换电路 (17)3.3 Protel DXP 2004原理图设计 (20)第四章软件电路设计 (29)4.1 系统的通信协议 (29)4.2 C51编程实现PC机与单片机之间的串行通信 (29)4.3 Windows集成开发环境uVision2 (33)总结 (39)致谢 (41)参考文献 (42)摘要本文详细介绍了基于RS-485总线的PC机与多台单片机间的串行通信原理、实现方法和相应的通信硬件、软件设计。
该设计是由PC机与单片机组成的主从控制系统,其中PC机做为上位机对下位单片机是实现控制和监视功能。
它包括通信和控制两个功能模块。
单片机作为下位机在整个系统中属于从属地位,主要用来接收上位机的命令。
由于此通信的PC接口是RS232的9针接口,且下位机数目有限(32台)。
所以本设计采用了RS485总线以及RS232转RS485的协议芯片以满足长距离多机通信,本文讨论了总线接口转换、主从式通信协议设计方法,给出了采用中断式处理的通信过程流程图,并叙述了设计过程中必备的绘图软件Protel DXP的应用,以及编辑源代码软件keil uVision2的应用,实现了PC机对多个单片机组成采集终端的通信与管理。
关键词:PC机单片机RS-485 通信AbstractThe communication 、realized method and corresponding design of hardware and software between PC and multiple MCUs based on RS-485 is described in detai in the article. This design instroduces a pincipal and subordinate control system which is composed of PC and single chip. Divided from its function, it includes two parts: communication and control, in which PC is used as master, and MCUs is used as slave so as to receive the single order from the master.The bus interface conversion and the design of master-slave communication protocol is introduced and The program flowchart of communication with interrupt process is also given. In the process of design, the use of unnecessary painter software and code editor software is depicted so that realize the communication and administration between PC and multiple MCUs which composed collection terminal.Keywords: PC MCUs RS-485 communication第一章绪论单片机由于其具有控制功能强、设计灵活和性能价格比高的特点。
第26讲 RS-485在单片机多机通信中的应用设计

返回本节
26.3RS-485在单片机多机通信中的应用设计
设计要求: 使用RS-485控制三个个单片机串行通信,要求主机按下不同的按键, 从机相应地进行工作。 系统分析: 使用RS-485控制三个个单片机串行通,需要3个MAX487; 与主机相连的单片机(发送命令),RE 和 DE 引脚接 +5V; 与从机相连的单片机(接收命令),RE 和 DE 引脚接 地。
返回本节
26.2RS-485接口标准简述
在RS-485传输信号前,先分解成正、负两条线路,到达接收端后,再将信 号相减还原成原来的信号。 原信号:(DT)=(D+)-(D-) 线路干扰: (D+)+Noise ,(D-)+Noise 接收合成: (DT)=[(D+)+Noise ] - [(D-)+Noise ] =(D+)-(D-) 最大传输速率:10Mb/s(传送15M) 最大传输距离:1200M(传输速率100Kb/s)
26.1RS-485特点 26.2RS-485接口标准简述 26.3RS-485在单片机多机通信中的应用设计
26.1RS-485特点
与RS-232相比: 抗干扰性能好; 传输距离远:1200M,加中继器传输距离无限.
返回本节
26.1RS-485特点
MAX481/MAX483/MAX485/MAX487-MAX491以及MAX1487: 是用于RS-485与RS-422通信的低功耗收发器,能够以最高 2.5Mbps 的数据速率发送并接收数据; MAX483、MAX487、MAX488以及MAX489:则用于最高 250kbps的数据速率。 MAX488-MAX491是全双工收发器; MAX481、MAX483、MAX485、MAX487以及MAX1487是半双 工收发器。 另外,MAX481、MAX483、MAX485、MAX487、MAX489、 MAX491以及MAX1487中包含驱动器使能(DE)与接收器使能 (RE)控制引脚,被禁用时,驱动器或接收器输出为高阻态。
利用MAX485实现PC机与单片机之间的串行通讯

利用MAX485实现PC机与单片机之间的串行通讯摘要介绍一种RS-485接口芯片MAX485,利用此芯片可以很方便地实现PC机与单片机之间的串行通讯,同时给出PC机与单片机实现多点通讯的实例。
关键词RS-485串行通讯多点通讯随着数据采集系统的广泛应用,通常由单片机构成的应用系统,如仪器仪表、智能设备等,都需要与PC机之间交换数据,实现与PC机之间的通讯功能,以充分发挥PC和单片机之间的功能互补,资源共享的优势。
以往常用的RS-232协议在很大程度上已不能满足设计的要求,如传输速率慢,传输距离短,传输信号易受外界的干扰等缺点。
本文介绍一种性能优越的RS-485接口芯片,以及如何利用此芯片实现单片机与PC机之间的远程通讯,并讨论将其功能进行扩充,实现PC机管理单片机阵列的功能。
1 RS-485协议简介及MAX485芯片介绍由于RS-232的种种缺点,新的串行通讯接口标准RS-449被制定出来,与之相对应的是RS-485的电气标准。
RS-485是美国电气工业联合会(EIA)制定的利用平衡双绞线作传输线的多点通讯标准。
它采用差分信号进行传输;最大传输距离可以达到1.2 km;最大可连接32个驱动器和收发器;接收器最小灵敏度可达±200 mV;最大传输速率可达2.5 Mb/s。
由此可见,RS -485协议正是针对远距离、高灵敏度、多点通讯制定的标准。
MAX485接口芯片是Maxim公司的一种RS-485芯片。
采用单一电源+5 V工作,额定电流为300 μA,采用半双工通讯方式。
它完成将TTL电平与RS-485电平转换的功能。
其引脚结构图如图1所示。
从图中可以看出,MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD 和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B 时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。
应用RS_485的PC与单片机通信研究

第8卷 第1期 2008年1月167121819(2008)120236203 科 学 技 术 与 工 程Science Technol ogy and Engineering Vol .8 No .1 Jan .2008Ζ 2008 Sci .Tech .Engng .应用RS 2485的PC 与单片机通信研究毕 博 王春平 孙书鹰(军械工程学院光学与电子工程系,石家庄050003)摘 要 目前在工业控制领域中,RS 2485已成为一种重要的通信手段。
结合实际介绍了PC 与单片机间进行RS 2485串行通信的一般原理及常用芯片选择,并对通信过程中可能出现的问题进行了讨论,最后给出了相应的解决方案。
关键词 RS 2485 单片机 串行通信中图法分类号 TP393.03; 文献标志码 A2007年9月4日收到第一作者简介:毕 博(1982—),男,汉族,吉林通化人,军械工程学院硕士研究生,研究方向:通信与信息系统。
随着计算机在工业领域的广泛应用,局域控制网络也深入应用到各行各业中。
目前,在很多分布式数据采集和控制系统中,都采用主从式结构模式,即以PC 机为主体,分布在现场的各个单片机系统为从机组成的系统结构。
单片机与微机之间采用RS 2232通信是比较常见的一种通信方式,一般微机上配有专门为RS 2232通信设置的串行口COM1,因此实现起来较为方便。
但由于RS 2232采用共模传输方式,只能实现十余米的短距离通信,且抗干扰能力不理想,无法满足工业上现场数据较远距离和高速率传输的要求。
与RS 2232通信相比,RS 2485属远距离通信,其通信距离可达千余米,且由于RS 2485采用差模信号的传输方式,共模干扰对其影响很小,所以RS 2485可以实现远距离、稳定且准确的数据传输。
由于普通微机本身并不具备专用的RS 2485通信口,并且RS 2485和RS 2232的工作电平不同,工作方式和控制机理也有差别,所以要利用现有的COM1串口来实现RS 2485通信,还需对系统的软件和硬件进行相应的设计。
基于RS485总线技术的PC机与单片机多机通讯设计

(单片机发送数据命令 ) ,然后打开 r. txt文件 ,接收 的 10帧数据存放在 r. txt中 ,同时计算累加和. 接收 数据完成后 ,再接收单片机发送的累加校验和 ,把接 收累加校验和与 PC 机计算的累加和相比较 ,如相 同则发回 59H (“Y”的 ASCⅡ码 ) ,结束本次接收 ;否 则发送 4EH (“N ”的 ASCⅡ码 ) ,重新接收数据.
始化顺序如下 :
PC机发送一组数据子程序流程图如图 4 ( a).
(1)向 通 信 线 路 控 制 寄 存 器 LCR ( 2FBH ) 送 首先发送从机单片机的地址码 ,然后接收从机单片
80H ,即寻址波特率除数寄存器.
机回送的地址码 ,如相符则发控制命令字给从机. 控
(2)向两个波特率除数锁存器 (LSB 和 M SB )送 制命令字为 00H (单片机接收数据命令 )以及 01H
器 , R6作累加和寄存器用.
2. 1 通讯协议约定
2. 2 单片机通讯程序设计
● 系统中允许接有 64台从机 ,它们的地址分
串行口选择工作方式 1,其波特率由定时器 T1
别为 00 - 3FH.
的溢出率与 SMOD 位同时控制. 定时器 T1 则选操
● 地址 FFH 是对所有从机都起作用的一条 作模式 2, SMOD = 0波特率不增倍 ,单片机的振荡频
其它为非法命令.
发送该下位机的地址 ,此时所有下位机均中断响应 ,
● 每次收发数据块的长度为 10个字节.
比较总线上的地址是否与本机地址相符 ,如不符则
● 波特率设计为 2400 b / s,数据格式用 8 位 退出中断程序 ,相符则发回地址. 当地址为 FFH 时 ,
C++RS-485通讯示例

C++RS-485通讯⽰例RS-485是⼀种半双⼯的通信协议,经常⽤于⼯业控制模块间的通信,因其传输距离远,不容易出错的特点,应⽤⼴泛。
此为windows下⽰例,linux需做相应修改。
#pragma once#include <windows.h>#include <stdio.h>#include <stdlib.h>class Net485{public:Net485(long baud_rate, wchar_t* port_name);bool send(BYTE data[], int length);protected:void set_up_serial_port(long baud);private:HANDLE serial_port;};#include "Net485.h"#include <iostream>Net485::Net485(long baud_rate, wchar_t* port_name){const wchar_t name[8] = L"COM4";serial_port = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);if (serial_port == INVALID_HANDLE_VALUE){fprintf(stderr, "Error opening portn");CloseHandle(serial_port);}else{set_up_serial_port(baud_rate);}}bool Net485::send(BYTE data[],int length){if (serial_port == INVALID_HANDLE_VALUE){printf("发送失败::INVALID_HANDLE_VALUE");return false;}DWORD dwTx = 0;BOOL ret = FALSE;DWORD dwLength = length;Sleep(10);if (dwLength > 0){ret = WriteFile(serial_port, data, dwLength, &dwTx, NULL);if (ret == FALSE){printf("发送失败");return false;}}return true;}void Net485::set_up_serial_port(long baud){DCB properties;// 设置读写缓冲区GetCommState(serial_port, &properties);switch (baud){case1200:properties.BaudRate = CBR_1200;break;case2400:properties.BaudRate = CBR_2400;break;case4800:properties.BaudRate = CBR_4800;break;case9600:properties.BaudRate = CBR_9600;break;case14400:properties.BaudRate = CBR_14400;break;case19200:properties.BaudRate = CBR_19200;break;case38400:properties.BaudRate = CBR_38400;break;default:fprintf(stderr, "Invalid baud rate: %ldn", baud);exit(0);break;}properties.Parity = NOPARITY;properties.ByteSize = 8;properties.StopBits = ONESTOPBIT;SetCommState(serial_port, &properties);//在读写串⼝前,⽤ PurgeComm 函数清空缓冲区PurgeComm(serial_port, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_TXABORT | PURGE_TXABORT); return;}使⽤⽰例/// 485PLC通信Net485* net = new Net485(9600,L"COM4");BYTE data[2];data[0] = 0x01;if (info.th == 1) {data[1] = 0x11;}else {data[1] = 0x12;}net->send(data,sizeof(data));。
485通讯协议程序怎么写(51单片机的485通信程序案例)

485通讯协议程序怎么写(51单片机的485通信程序案例)
RS-485总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优点。
RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检测到低达200mv的电压,可靠通信的传输距离可达数千米。
使用RS-485总线组网,只需一对双绞线就可实现多系统联网构成分布式系统、设备简单、价格低廉、通信距离长。
51单片机的485通信程序
#ifndef __485_C__ #define __485_C__
#include 《reg51.h》
#include 《string.h》
#define unsigned char uchar
#define unsigned int uint
/* 通信命令*/
#define __ACTIVE_ 0x01 // 主机询问从机是否存在
#define __GETDATA_ 0x02 // 主机发送读设备请求
#define __OK_ 0x03 // 从机应答
#define __STATUS_ 0x04 // 从机发送设备状态信息
#define __MAXSIZE 0x08 // 缓冲区长度
#define __ERRLEN 12 // 任何通信帧长度超过12则表示出错
uchar dbuf[__MAXSIZE]; // 该缓冲区用于保存设备状态信息
uchar dev; // 该字节用于保存本机设备号
sbit M_DE = P1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PC方面:可以用MSCOMM控件先发一个字符表示接收地址,后延迟1ms,(注意PC端在485通讯在字符发送过程中一定要加延迟,这是我多次测试的总结,如果是用调试助手的话,他内部代码已经加过延迟了,就不必考虑这个问题)再发控制指令,初学者建议直接用调试助手
单片机方面:首先对接收数据进行核对,如果不是本地地址,放弃,如果是本地地址,在检测命令是否正确,如果正确,做出处理后返回PC本地地址并发送命令
{
while(RI==0);
RI=0;
if(SBUF==0x01) //发送指令
{
MAX485_DIR=1; //开发送
SBUF=AddressID;
while(TI==0);
TI=0;
SBUF=0x6f; //发送o
while(TI==0);
TI=0;
SBUF=0x6b; //发送k
MAX485_DIR=0; //开接收
sbit MAX485_DIR=P3^7;
main()
{
//****************通讯设置
SCON = 0xF0; //REN=1允许串行接受状态,串口工作模式3,SM2=1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
IP=0x10; //串口优先级高
}
if(SBUF==0x00) //收
{
//这里怎么处理就看你自己要怎么做了,你没要求,我也不好怎么写,就自己写吧
}
}
}
程序调试通过,可以直接套用
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无(11.0592)
TH1 = 0xf4;//fa// //baud*2 /*波特率4800、数据位8、停止位1。效验位无(11.0592M)
TL1 = 0xf4;
TR1 = 1; //开启定时器1
EA = 1; //开总中断
ES = 1; //开串口中断
RS485E=0; // RS5485E=0为接收状态RS5485E=1为发送状态
while(1);
}
void counter4(void) interrupt 4 using 2 //串口中断
{
while(RI==0);
RI=0;
if(SBUF==AddressID)
我举个例子教你怎么玩多站通讯,下面是我已经通过测试的一个程序
#include <reg51.h> //选用晶振11.0592MHz
#include <absacc.h>
#define DATA51 DBYTE[0x80] //80H存数据
#define AddressID 0x31 //本机地址1
sbit RS485E=P3^7; //定义485的使能脚// RS5485E=0为接收状态RS5485E=1为发送状态