基于RS485总线的PC与多个单片机通信的C语言程序
利用RS-485通讯协议实现PC机与单片机的多点通讯
![利用RS-485通讯协议实现PC机与单片机的多点通讯](https://img.taocdn.com/s3/m/c7a59bdca58da0116c174995.png)
合肥学院毕业设计(论文)任务书课题类型:工程设计类,实验研究类,计算机软件设计类,电路设计类,其它类课题来源:科研,教研,预研,生产实践,其它类系主任教研室主任指导教师年月日年月日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机与多片单片机的通信毕业设计说明书
![基于485总线的PC机与多片单片机的通信毕业设计说明书](https://img.taocdn.com/s3/m/6539bfd789eb172ded63b721.png)
武汉工程大学邮电与信息工程学院毕业设计(论文)说明书论文题目 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讲 RS-485在单片机多机通信中的应用设计](https://img.taocdn.com/s3/m/4766761fc5da50e2524d7f34.png)
返回本节
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机与单片机之间的串行通讯](https://img.taocdn.com/s3/m/57f38c4e852458fb770b5622.png)
利用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与单片机通信研究
![应用RS_485的PC与单片机通信研究](https://img.taocdn.com/s3/m/3b1d4f51f01dc281e53af0c0.png)
第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机与单片机多机通讯设计
![基于RS485总线技术的PC机与单片机多机通讯设计](https://img.taocdn.com/s3/m/c296fcbdfd0a79563c1e725e.png)
(单片机发送数据命令 ) ,然后打开 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通讯示例](https://img.taocdn.com/s3/m/f0cb6e65a517866fb84ae45c3b3567ec102ddca7.png)
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通信程序案例)](https://img.taocdn.com/s3/m/c732165b6c85ec3a87c2c55f.png)
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。
485通信程序实例
![485通信程序实例](https://img.taocdn.com/s3/m/9afdfac56137ee06eff918f0.png)
bdata uchar Repeater_Address _at_ 0x26; //中继器地址
sbit RA_0 = Repeater_Address^0;
sbit PaOData4 = PaOData^4;
sbit PaOData5 = PaOData^5;
sbit PaOData6 = PaOData^6;
sbit PaOData7 = PaOData^7;
s; //收到上位机对下位机的广播信号(时间、日期)
sbit Com1Data_Sent = Status2^5; //串口1已发送一字节
sbit tem_bit = Status2^6; //临时位变量
sbit Com1_Finished = Status2^7; //串口1数据已接收完毕
bdata uchar Status3 _at_ 0x22; //中继器状态标志
sbit Alarm_Over = Status3^0; //掉电时下位机侧传来的报警数据结束
sbit RA_7 = Repeater_Address^7;
bdata uchar Repeater_Status _at_ 0x27; //中继器状态标志位
sbit DHead_Arrived = Repeater_Status^0;
uchar data R_P_Data_Buf1 _at_ 0x33; //Com2读数据缓冲区指针1
uchar data W_P_Data_Buf2 _at_ 0x34; //并口写数据缓冲区指针2
uchar data R_P_Data_Buf2 _at_ 0x35; //并口读数据缓冲区指针2
基于RS485总线的PC机与多单片机系统的串行通信
![基于RS485总线的PC机与多单片机系统的串行通信](https://img.taocdn.com/s3/m/08ad6f649b6648d7c1c74678.png)
4 结束语运用形态学基本运算(膨胀、腐蚀)及其联合运算(开、闭)不需额外增加专门的去噪运算,在运用开、闭运算修整工件时只要选用比噪声大的结构元素即可去除噪声。
修整工件时,只要选择合适的结构元素,即可去除突刺、填补缺陷,从而达到平滑轮廓、快速识别工件的目的。
而进行边缘检测时,只需对工件进行膨胀(或腐蚀)处理后与原图片相减即可得到边缘轮廓线。
综上所述,运用形态学运算进行工件识别预处理,其算法简单、易于实现,提高了整体识别速度。
参考文献:[1] 吴敏金.图像形态学[M ].上海:上海科学技术文献出版社,1991.[2] 飞思科技产品研发中心.Matlab6.5辅助图像处理[M ].北京:电子工业出版社,2003.[3] 谢根全.工件表面质量缺陷的计算机自动识别[J ].机械与电子,2001,(4):51-52.[4] 姚 远,王广雄,张田文.基于模糊细胞神经网络的彩色图像形态学重构[J ].计算机学报,1999,22(7):727-732.[5] 李 林,高 政.一种新颖的灰度形态学算子[J ].计算机辅助设计与图形学学报,2001,13(9):820-823.[6] 王家文,曹 宇.Matlab6.5图形图像处理[M ].北京:国防工业出版社,2004.作者简介:张金萍 (1977-),女,河南尉氏人,东北大学机械工程与自动化学院博士研究生,研究方向为机电一体化;刘 杰 (1944-),男,辽宁昌图人,东北大学机械工程与自动化学院教授,博士研究生导师,研究方向为振动利用与控制、机电一体化。
基于RS485总线的PC 机与多单片机系统的串行通信林 颖,罗金炎,刘 骄,陈 忠,李伟光(华南理工大学,广东广州510640)Serial Communication Based on RS485Bus between PC and Multisinglechip SystemL IN Ying ,L U O Jinyan ,L IU Jiao ,CHEN Zhong ,L I Wei gu ang(South China University of Technology ,Guangzhou 510640,China ) 摘要:根据所开发的电子产品故障维修实验系统的要求,提出了一套基于RS485总线的PC 机与多单片机系统间的串行通信协议,已成功应用于故障维修实验系统中。
PC机与单片机RS485通信系统的设计
![PC机与单片机RS485通信系统的设计](https://img.taocdn.com/s3/m/693eba3a482fb4daa58d4b78.png)
PC机与单片机RS485通信系统的设计【摘要】本文介绍了利用Visual Basic 6.0开发工具和Atmle89S52单片机进行通信,探讨在VB环境下来实现PC机与单片机之间的数据传输方式,着重介绍通过max485芯片实现PC机与单片机之间的通信以及单片机串口通信的实现方法。
【关键词】单片机;485通讯;MSComm控件1.引言随着计算机技术特别是单片机技术的发展,在各种单片机应用系统的设计中,常常遇到计算机与外界的信息交换问题。
目前,许多检测仪表、在线分析仪、工控机等均采用RS485方式通过串口与上位机进行通信,用户通过串行通信可以实现实时监控远程设备的工作情况,对设备运行参数进行优化,通过指令反馈控制仪器的运行情况,从而实现生产节能与质量控制。
鉴于PC机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下。
在本文中采用的是MAX485芯片实现RS485方式通信。
PC机与单片机一般采用应答方式,当PC机控制多个单片机终端时,PC机发送一个地址帧选中一个终端,再对选中的终端进行一对一的通信,实现这种通信方式需要对发送帧的格式和单片机端的相应寄存器进行设置。
2.系统组成介绍本系统由1台PC机作为上位机,多个89S52单片机为核心作为系统终端,通过RS485总线结构将PC机和各个终端机连接起来。
PC机通过RS232/485转换器连接到485总线,单片机通过MAX485芯片模块连接到485总线上,实现与PC机的通信,PC机通过查询方式与各个终端通信,完成监测、控制等功能。
各个终端接受主控机指令,完成就地调整、控制、测量以及信息回传等工作。
3.通信过程与通信协议由于MAX485通讯是一种半双工通讯,发送和接收共用同一物理信道。
在任意时刻只允许一台单机处于发送状态。
因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。
基于RS485总线的单片机多机通信软件设计
![基于RS485总线的单片机多机通信软件设计](https://img.taocdn.com/s3/m/9b1d814c767f5acfa1c7cd0b.png)
陈新 忠
Ch n Xi z o g e nhn
( 安 导 航技 术 研 究 所 西
西安
706) 1 0 8
(  ̄nN a iain Te h oo y R sa c n t u e Xi n 1 0 8 xi vg t c n lg e e s h I z i t ・ .7 0 6 o  ̄
行 故 障检测 和故 障定位 ,通 信 软件 的 主要 功能是 接 收
( )主机 重发 次数 : 超过 4次 ,超过后 , 通信 3 不 判
失败 。
2 3 通信 过程 .
一
主机 的命令 并将 检测 的结果 回送 主机 。 从 机通 信软 件由 2部 分组 成 :串行 中断 服务 程序
数据 个数 :表示 主机 要蒺写 的字节个 数 ,一字 节
二 进 制数 。 校 验 和 :两 字 节 二 进 制 数 ,是 将 从 机 地 址 码 、命
令 和 数据按 字节从 头依 次相 加 , 生成 两字 节 的校 验和 。
( )从 机 应 答 的 一 般 格 式 ( 图 3 9 如 )
摘
要
介 绍 了一 种 基 于 R 4 5甚践 的 单 片机 多机 通信 系统 , 重 点 介 绍 了其通 信 体 议 和 通 信 软 件 的 设 计 方 法 。 S8
R 4 5总 线 S8 通 信 协议 软 件 谩 计
关键 词
在多机通 信领 域 .由于单 片机 具有 灵活高 效 的多 机通 信功能和价 格优 势 ,应用越 来越 广 泛 ,但 由于单
议 和通信软件 的设 计方 法 。
】 系 统 结 构
( )帧校验 方式 :数 据和 ( 节 ) 7 2字
( )主 机 询 问 的 一 般 格 式 见 图 2 8 :
c语言 485通信源程序
![c语言 485通信源程序](https://img.taocdn.com/s3/m/5a40fab8c77da26925c5b08a.png)
// This flag is set on USART1 Receiver buffer overflow
bit rx_buffer_overflow1;
// USART1 Receiver interrupt service routine
volatile bit comm_flg=false;
bit comm_flg1=true;
uchar comm_state=0;
uchar comm_over;
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
char status,data;
uchar i;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer1[rx_rd_index1]=data;
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
if (++rx_counter1 == RX_BUFFER_SIZE1)
uchar rx_process_buffer1[160];
uchar rx_process_counter1;
#if RX_BUFFER_SIZE1<256
unsigned char rx_rd_index1,rx_counter1;
#else
unsigned int rx_rd_index1,rx_counter1;
c语言 485通信源程序 #definerxb8 #definetxb8 #defineupe #defineovr #definefe #defineudre #definerxc #defineframing_error (1<<fe) #define parity_error (1<<upe) #define data_overrun (1<<ovr) #define data_register_empty (1<<udre) #define rx_complete (1<<rxc) usart1receiver buffer #define rx_buffer_size1 128 uchar rx_buffer1[rx_buffer_size1]; uchar rx_process_buffer1[160]; uchar rx_process_counter1; rx_buffer_size1<256unsigned char rx_rd_index1,rx_counter1; #else unsigned int rx_rd_index1,rx_counter1; #endif usart1receiver buffer overflow bit rx_buffer_overflow1; usart1receiver interrupt service routine volatile bit comm_flg=false; bit comm_flg1=true; uchar comm_state=0; uchar comm_over; interrupt [usart0_rxc] void usart0_rx_isr(void) charstatus,data; uchar status=ucsr0a;data=udr0; rx_buffer_size1)rx_rd_index1=0; rx_counter1=0;rx_buffer_overflow1=1; comm_over=250;if(rx_counter1==2) elseif((rx_counter1>=13)&&(rx_counter1==rx_buffer1[7]+10)) if(comm_state!=0){comm_flg1=true;}else for(i=0;i<rx_counter1;i++)rx_proces
rs485通信程序
![rs485通信程序](https://img.taocdn.com/s3/m/f67f1082804d2b160a4ec030.png)
r s485通信程序(总6页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March#ifndef __485_C__#define __485_C__#include <>#include <>#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^0; // 驱动器使能,1有效sbit M_RE = P1^1; // 接收器使能,0有效void get_status(); // 调用该函数获得设备状态信息,函数代码未给出void send_data(uchar type, uchar len, uchar *buf); // 发送数据帧bit recv_cmd(uchar *type); // 接收主机命令,主机请求仅包含命令信息void send_byte(uchar da); // 该函数发送一帧数据中的一个字节,由send_data()函数调用void main(){uchar type;uchar len;/* 系统初始化 */P1 = 0xff; // 读取本机设备号dev = (P1>>2);TMOD = 0x20; // 定时器T1使用工作方式2TH1 = 250; // 设置初值TL1 = 250;TR1 = 1; // 开始计时PCON = 0x80; // SMOD = 1SCON = 0x50; // 工作方式1,波特率9600bps,允许接收ES = 0; // 关闭串口中断IT0 = 0; //外部中断0使用电平触发模式EX0 = 1; // 开启外部中断0EA = 1; // 开启中断/* 主程序流程 */while(1) // 主循环{if(recv_cmd(&type) == 0) // 发生帧错误或帧地址与本机地址不符,丢弃当前帧后返回continue;switch(type){case __ACTIVE_: // 主机询问从机是否存在send_data(__OK_, 0, dbuf); // 发送应答信息,这里buf的内容并未用到break;case __GETDATA_:len = strlen(dbuf);send_data(__STATUS_, len, dbuf); // 发送设备状态信息break;default:break; // 命令类型错误,丢弃当前帧后返回}}}void READSTATUS() interrupt 0 using 1 // 产生外部中断0时表示设备状态发生改变,该函数使用寄存器组1{get_status(); // 获得设备状态信息,并将其存入dbuf指向的存储区,数据最后一字节置0表示数据结束}/* 该函数接收一帧数据并进行检测,无论该帧是否错误,函数均会返回* 函数参数type保存接收到的命令字* 当接收到数据帧错误或其地址位不为0时(非主机发送帧),函数返回0,反之返回1 */bit recv_cmd(uchar *type){bit db = 0; // 当接收到的上一个字节为0xdb时,该位置位bit c0 = 0; // 当接收到的上一个字节为0xc0时,该位置位uchar data_buf[__ERRLEN]; // 保存接收到的帧uchar tmp;uchar ecc = 0;uchar i;M_DE = 0; // 置发送禁止,接收允许M_RE =/* 接收一帧数据 */i = 0;while(!c0) // 循环直至帧接收完毕{RI = 0;while(!RI);tmp = SBUF;RI = 0;if(db == 1) // 接收到的上一个字节为0xdb {switch(tmp){case 0xdd:data_buf[i] = 0xdb; // 0xdbdd表示0xdb ecc = ecc^0xdb;db = 0;break;case 0xdcdata_buf[i] = 0xc0; // 0xdbdc表示0xc0 ecc = ecc^0xc0;db = 0;break;defaultreturn 0; // 帧错误,返回}i++;}switch(tmp) // 正常情况{case 0xc0: // 帧结束c0 = 1;break;case 0xdb: // 检测到转义字符db = 1;break;default: // 普通数据data_buf[i] = tmp; // 保存数据ecc = ecc^tmp; // 计算校验字节i++;}if(i == __ERRLEN) // 帧超长,错误,返回 return}/* 判断帧是否错误 */if(i<4) // 帧过短,错误,返回return 0;if(ecc != 0) // 校验错误,返回return 0;if(data_buf[0] != dev) // 非访问本机命令,错误,返回return 0;*type = data_buf[1]; // 获得命令字return 1; // 函数成功返回}/* 该函数发送一帧数据帧,参数type为命令字、len为数据长度、buf为要发送的数据内容 */void send_data(uchar type, uchar len, uchar *buf){uchar i;uchar ecc = 0; // 该字节用于保存校验字节M_DE = 1; // 置发送允许,接收禁止M_RE = 1;send_byte(dev); // 发送本机地址ecc = dev;send_byte(type); // 发送命令字ecc = ecc^type;send_byte(len); // 发送长度ecc = ecc^len;for(i=0; i<len; i++) // 发送数据{send_byte(*buf);ecc = ecc^(*buf);buf++;}send_byte(ecc); // 发送校验字节TI = 0; // 发送帧结束标志SBUF = 0xc0;while(!TI);TI = 0;}/* 该函数发送一个数据字节,若该字节为0xdb,则发送0xdbdd,若该字节为0xc0则,发送0xdbdc */void send_byte(ucharda){switch(da){case 0xdb: // 字节为0xdb,发送0xdbdd TI = 0;SBUF = 0xdb;while(!TI);TI = 0;SBUF = 0xdd;while(!TI)TI = 0;break;case 0xc0: // 字节为0xc0,发送0xdbdc TI = 0;SBUF = 0xdb;while(!TI);TI = 0;SBUF = 0xdc;while(!TI)TI = 0;break;default: // 普通数据则直接发送TI = 0;SBUF = da;while(!TI);TI = 0;}}#endif。
(完整word版)单片机与PC机RS-485串行通信设计
![(完整word版)单片机与PC机RS-485串行通信设计](https://img.taocdn.com/s3/m/39082595ddccda38366baf25.png)
沈阳航空航天大学课程设计(论文)题目单片机与PC机RS-485的串行通信设计班级学号学生姓名指导教师目录0 前言 (1)1 总体方案设计 (1)2 硬件电路设计 (2)2.1 AT89C51单片机 (2)2.2 时钟电路 (3)2.3 按键复位电路 (4)2。
4 MAX485转换芯片 (4)2.5 PC机RS—485 通信的接口电路 (5)3 软件设计 (6)4 调试分析 (8)5 结论及进一步设想 (8)参考文献 (8)课设体会 (9)附录1 电路原理图 (10)附录2 程序清单 (11)单片机与PC机RS-485串行通讯设计摘要:本文提出了一种PC机与单片机进行串行通信的方案,该方案通过PC机的RS232串口、485总线实现与51单片机的串口通信,PC机送出的信号进行电平转换后送到485总线,单片机则接受MAX485芯片转换得到的信号,从而进行串行通信。
该系统的特点是电路设计简单可行、通信稳定、实用性强。
关键词:PC机;单片机;串口通信;MAX485芯片;0前言在计算机测控领域经常会采用一台PC 机与一个或多个单片机组成小型的测控网络,这种测控系统充分发挥了单片机功能强, 抗干扰性能好, 温度适应范围宽,面向控制的优点,同时又可以利用计算机弥补单片机在数据处理和交互性等方面的不足。
在测控系统中一般是以PC 机作为主控机,采用串行通讯定时扫描以单片机为核心的智能控制器(从机)以便采集数据或发送信号。
PC机的串口一般采用RS-232的总线标准,但由于RS—232接口标准发布较早,难免有不足之处,主要体现在以下四点:1、接口信号的电平值较高,已损坏接口电路芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接;2、传送速率较低,在异步传送时,波特率为20Kbps;3、接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱;4、传输距离有限,最大传输距离标准为50英尺,实际上也只能用在50m左右。
面向RS485协议配置应用的单片机与PC机之间的通信
![面向RS485协议配置应用的单片机与PC机之间的通信](https://img.taocdn.com/s3/m/f07405e7524de518964b7db6.png)
文章编号:16732095X (2009)022*******面向RS 485协议配置应用的单片机与PC 机之间的通信陈在平,杜金利(天津理工大学自动化学院,天津300384)摘 要:本文主要完成了对RS485协议的配置问题.现今工业现场设备广泛应用RS485通信协议,而RS485串行通信协议具有一定的开放性,即并不统一,不同的RS485设备具有不同的串行通信协议,若将完成RS485总线桥的转换必然需要转换单元能够适应不同的RS485设备的协议,本文总线桥转换单元采用AT89S52单片机作为配置的主控制器,上位机利用图形化编程软件Lab V I E W 完成上位机通信软件的编写,将所需要配置的串行通信协议信息在上位机界面中输入,通过上位机软件与转换单元的MCU 通信,将配置信息通过RS232接口发送给转换单元,供单元在初始化RS485设备时调用.经过系统调试,转换单元与PC 机能够实现良好的通信,并能够成功配置RS485通信协议.关键词:RS485;Lab V I E W;RS232通信;单片机中图分类号:TP368.1 文献标识码:AComm un i ca ti on between si n gle 2ch i p m i crocon troller andPC for conf i gura ti on the RS485protocolCHEN Zai 2p ing,DU J in 2li(School of Eleetrical Engineering,Tianjin University of Technol ogy,Tianjin 300384,China )Abstract:The paper has mainly accomp lished configuring the RS485p r ot ocol .The RS485p r ot ocol nowadays is app lied t o the industry l ocale mostly,but RS485p r ot ocol is open,not accordant,that is a different RS485device has a different p r ot ocol .So it requests the conversi on cell t o adap t t o different RS4585deviceswith non 2accordant p r ot ocol .The paper uses single 2chi p m i 2cr ocontr oller AT89S52as main contr oller,and graphics p r ogra mmer s oft w are Lab V I E W as internet app licati ons design t ool .The serial communicati on p r ot ocolmessages are inputted via Lab V I E W by RS232,and are sent t o the conversi on cell f or trans 2ferred by cell during in initializing the RS485devices .After the debugging system,conversi on cell can communicate with PC greatly,and can configuratie RS485p r ot ocol successfully .Key words:RS232communicati on;single 2chi p m icr ocontr oller;serial communicati on;p r ot ocol configurati on 在现代工业自动化生产中,工业现场智能设备广泛应用RS485通信协议进行通信,随着先进的现场总线及工业以太网的出现及逐渐广泛的应用,各种基于RS485的总线桥不断出现,但是RS485串行通信的协议并不是统一的,不同的设备根据其数据信息及性能,其通信协议并不统一,例如:数据位、通信波特率、停止位、校验位等都有可能不一样,所以实现对RS485设备的协议自由匹配显得尤为重要,并具有重要的意义.1 串行通信协议简介串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制位移动的.它的优点是只需一对传输线进行传送信息,因此其成本低,适用于远距离通信;它的缺点是传送速度低.串行通信有异步通信和同步通信两种基本通信方式.同步通信适用于传送速度高的情况,其硬件复收稿日期:2008210230.第一作者:陈在平(1950— ),男,教授,硕士生导师.第25卷 第2期2009年4月天 津 理 工 大 学 学 报J O URNAL O F T I ANJ I N UN I VERS I T Y O F TECHNOLO GY Vol .25No .2Ap r .2009杂.而异步通信应用于传送速度在50到19200波特率之间.是比较常用的传送方式.在异步通信中,数据是一帧一帧传送的,每一串行帧的数据格式由一位起始位,5~8位的数据位,一位奇偶校验位(可省略)和一位停止位四部分组成.在串行通信中,发送方和接收方要约定具体的数据格式和波特率(通信协议).RS485通信协议即为串行通信协议,其数据帧的格式并不统一.2 硬件设计系统总体功能框图如图1所示:图1 系统总体功能框图F i g .1 The collecti v ity functi on由图1可知,本文所做的主要工作是单片机通过RS232接口与PC 机进行通信,PC 机将RS485设备所需要的协议通过RS232接口发送给单片机,由单片机初始化其串口以适应RS485设备的通信协议.本系统采用AT89S52单片机作为主控制器,利用MAX232芯片作为RS232协议转换芯片[1],与PC 机进行通信.如图2所示:图2 RS232接口电路F i g .2 RS232i n terface c i rcu it3 软件设计3.1 需要配置的RS 485协议信息在串行通信中,数据位,停止位,奇偶校验位,波特率是不尽相同的,数据位为5~8位,停止位为1、1.5、2位;奇偶校验位为无、奇校验、偶校验;波特率常用的为1200~62500kbp s .3.2 单片机软件设计在系统启动开始的时候,由于加电的冲击等原因,单片机并未处于稳定状态,所以先延时一段时间,待单片机稳定以后再进行初始化等后续工作.下位机程序总体流程图如图3所示.当PC 机向下位机转换单元发送开始信号时,下位机转换单元便进入中断子程序进行数据的接收处理.中断处理子程序如图4所示.进入中断子程序之后,先关闭串口中断,采用查询方式接收PC 机发送给本地的RS485的配置信息.配置信息主要有四个数据,在本地创建一数组来接收配置信息并存储到存储器中.3.3 上位机软件设计在PC 机端采用图形化编程软件LabV I E W 编写上位机软件.LabV I E W 采用数据流编程方式,程序框图中节点之间的数据流向决定了程序的执行顺序.・97・2009年4月 陈在平,等:面向RS485协议配置应用的单片机与PC 机之间的通信Lab V I E W 提供很多外观与传统仪器类似的控件,可用来方便的创建用户界面每个控件对应程序框图中的一个对象,当数据"流向"该控件时,控件就会根据自己的特性以一定的方式显示数据[224].上位机应用程序流程图如图5所示.图5 上位机应用程序流程图F i g .5 The appli ca ti on program flow chart of PC5 系统实验调试本系统经过调试,系统能够稳定可靠的运行,通过上位机可以有效的给下位机发送配置信息,成功配置RS485协议信息.在编写上位机软件时,要添加串行通信协议变量的局部变量将其加载到上位机配置成功显示子程序中才能够正确显示配置成功信息及协议内容.图6给出了基于图形化编程软件Lab 2V I E W 编写的PC 机端应用程序的配置界面.图6 应用程序界面F i g .6 The appli ca ti on program i n terface6 结 论RS485的通信协议尽管有一些差异,但是通过在PC 机端编写协议配置应用软件,通过串口与下位机本地控制端进行通信,可以比较方便的完成对本地控制端的串行通信口的协议的配置以适应RS485设备的通信协议,使本地控制端与不同的RS485设备能够实现有效的通信,只要每次在应用RS485设备之前进行协议信息配置便可与该RS485设备进行配置,即可以使转换模块灵活的与不同的RS485设备进行通信,具有一定的通用性.参 考 文 献:[1] 郭宏亮,PC 机与AT89C51单片机的串行通信接口设计[J ].平原大学学报,2007(6):326.[2] 马 伟,麦云飞.基于MCS -51与Lab V I E W 的数据采集系统[J ].工业控制计算机,2007(9):325.[3] 肖金壮,张 伟,基于Lab V I E W 的单片机温度测控系统设计[J ].微计算机信息,2007(29):527.[4] 黄章华,陆华忠.基于Lab V I E W 和单片机的步进电机控制系统设计[J ].现代电子技术,2007(17):426.・08・ 天 津 理 工 大 学 学 报 第25卷 第2期。
- 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为发送状态