单片机串口通信485modbus_第1页
单片机串口通信485modbus_第2页
单片机串口通信485modbus_第3页
单片机串口通信485modbus_第4页
单片机串口通信485modbus_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./项目七单片机通信实践知识目标:1.了解UART<UniversalAsynchronousReceive/Transmitter通用异步收发器。2.了解MAX232通信原理及标准的通信协议。3.了解MODBUS通信协议标准2.采用通信芯片MAX485,及多机通信原理。技能目标:1,根据数据格式的协议,数据交换的协议要求硬件连接,实现串行通讯的硬环境。2.MCU与PC机及多个单片机的硬件连接方法3.应用PROTEUS仿真工具软件绘制硬件连接图4.使用KeilC完成程序的编写和调试5.使用最小系统板实现硬件调试任务一基于RS232的点对点通信任务提出通过MAX232直接应用UART<UniversalAsynchronousReceive/Transmitter通用异步收发器,实现单片机与单片机,或单片机与PC微机之间数据传送。知识准备7.1.1串行与并行通信在实际工作中,计算机与外部设备之间常常要进行信息交换,计算机与计算机之间也要交换信息,所有这些信息交换可称为通信。在我们前面所学的知识中所涉及的数据传送都是采用并行方式,如单片机与存储器,的数据传送,存储器与存储器的数据传送,单片机与并行打印机之间的数据传送,CPU处理数据以8位数据并行方式同时一次传送一字节的数据,这样的传送方式要求用8条数据线和若于条控制信号线,传送距离较近。当计算机与计算机之间的距离较远时过多的电缆使这种方式不够经济。串行通信是用一位数据线传送数据,只用几条电缆线作控制信号线,串行通信适合远距离数据传送,处于两地的计算机之间采用串行通信就非常的经济,当然串行通信要求通信双方具有相同的数据转换格式,规定的时间控制,相等的逻辑电路,通一的通信协议。7.1.1.1串行与并行通信基本概念1.串行通信与并行通信通信方式有两种:并行通信和串行通信。通常是根据信息传送的距离决定采用哪种通信方式,如果距离小于30cm则可采用并行通信方式,当距离大于30cm时则要采用通信方式。并行通信方式是指数据的各位同时进行传送的通信方式,其优点是传送速度高,缺点是数据有多少位,就需要多少根数据传送线,单片机与外部设备之间的数据传送属于并行通信图7-1-1〔a所示为AT89C51系列单片机与外部设备间的8位数据并行通信的连接方法,并行通信方式在位数多、传送距离远的情况下就不太合适了。串行通信间数据是一位一位按顺序传送的通信方式,图7-1-1〔b所示为单片机与外部设备间的串行通信连接方式,可以看出最单间的串行连接只需三条线,因此利用电话线就可作为传输线,这样大大降低了成本,特别适用于远距离通信;串行通信的缺点是传送速度较低。假设并行传送N位数据所需时间为T,那么串行传送的时间至少为NT,实际上总是大于NT的。图7-1-1两种通信方式连接2.单工、半双工和全双工串行通信的传送方式通常有3种:⑴单向<或单工>,只允许数据向一个方向传送;⑵半双向〔或半双工,允许数据向两个方向中的任一方向传送,但每次只能有一个站点发送;⑶全双向〔或全双工,允许同时双向传送数据,全双工配置是一对单向配置,它要求两端的通信设置具有完整和独立的发送和接收能力。7.1.1.2单片机串行口发送与接受数据1.串行通信协议串行通信协议是通信双方为保证通信成功而制定的一系列约定。包括数据格式定义和数据位定义等。通信双方必须遵守统一的通信协议,串行通信协议包括同步协议的异步协议两种。异步串行通信协议规定了字符的传送格式和字符传送的波特率。51系列单片机串行行口数据的发送的数据的接受采用异步通信方式,在MCU内部有一个UART<UniversalAsynchronousReceive/Transmitter通用异步收发器。在异步通信中数据是一帧一帧〔包括一个字符代码或一字节数据传送的,每一帧的数据格式如图7-1-2所示。图7-1-2串行异步通信的数据格式在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位和停止位。首先是一个起始位〔0,起始位信号只占用一位,用来通知接收设备一个待接收的字符开始到达,线路上在不传送字符时应保持为1。接收端不断检测线的状态,若连续为1以后又测到一个0,就知道发来一个新的字符,应马上准备接收,字符的起始位还被用作同步接收端的的时钟,以保证以后的接收能正确进行。然后是5—8位数据位〔规定低位在前,高位在后,它可以是5位<D0—D4>、7位或8位〔D0—D7。其次是奇偶校验位〔该位可省略,但在字符中也可以规定不用奇偶校验位,则这一位就可省去。民可和这一位〔0/1来确定这一帧中的字符代表代表的性质〔地址/数据等。最后是停止位〔1,用来表征字符的结束,它一定是高电位〔逻辑1。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已传送完毕,同时也为接收下一个字符作好准备,只要再接收藏夹0,就是新字符。2.波特率通信线上传送的所有位信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定,而传送速度是以每秒多少个二进制位来衡量的,这个速度叫波特率。波特率是串行通信中的一个重要指标,它反映了对传输通道的要求。波特率越高,要求传输通道的频带越宽。一般异步通信的波特率为50—9600b/s7.1.1.3单片机串行口控制寄存器1.串行口控制寄存器SCONSCON是串行口控制和状态寄存器,其格式如下:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI.SM0、SM1:串行口工作方式控制位,具体工作方式见表。表7-1-1串行口工作方式控制SMOSM1工作方式说明波特串00方式0同步移位寄存器fosc/1201方式110位异步收发由定时器控制10方式211位异步收发fosc/32或fosc/6411方式311位异步收发由定时器控制.SM2:多机通信控制位<方式2,3>。1一只有接收到第9位<RB8>为1,RI才置位。0一接收到字符N就置位。.REN:串行口接收允许位。1一允许串行口接收。0一禁止串行口接收。.TB8:方式2和方式3时,为发送的第9位数据,也可以作奇偶校验位。.RB8:方式2和方式3时,为接收到的第9位数据;方式1时,为接收到的停止位.TI:发送中断标志。由硬件置位,必须由软件清0。.RI:接收中断标志。由硬件置位,必须由软件清0。2.电源控制寄存器PCONPCON的第7位SMOD是与串行口的波特率设置有关的选择位。D7D6D5D4D3D2D1D0SMODGF1GF0PDIDL.SMOD:串行口波特率加倍位。1——方式1,3波特率=定时器1溢出率/16;方式2波特率为fosc/32;·0——方式1,3波特率=定时器1溢出率/32;方式2波特率为fosc/64。.GF0、GF1:两个通用标志位。.PD、IDL:CHMOS器件的低功耗控制位。7.1.1.4串行口工作模式及波特率设置1.串行通信的工作方式⑴方式0方式0为移位寄存器输入/输出方式。串行数据通过RXD输入/输出,TXD则用于输出移位时钟脉冲。方式0时,收发的数据为8位,低位在前。波特率固定为fosc/12,其中fosc为单片机外接晶振频率。数据发送是以写SBUF寄存器的指令开始的,8位输出结束时TI被置位。方式0接收是在REN=1和RI=0同时满足时开始的。接收的数据装入SBUF中,结束时RI被置位。移位寄存器方式在用最小的硬件扩展接口时很有用。串行口外接一片移位寄存器74LSl64可构成输出接口电路;串行口外接一片移位寄存器74LSl65可构成输入接口电路。在典型1MHz时钟,8位加载大约用10us。任何数目的移位寄存器可串接用于输出和输入,通过一系列的SBUF的写和读。若移位时的波动不重要或移位寄存器中包含并行加载锁存,这可构成非常经济的I/O扩展小系统。移位寄存器方式的第二种用法是用于两个单片机之间的通信。与通常波特率9600相比,以1MHz通信能力对短距离通信很吸引人。⑵方式1方式1是10位异步通信方式,1位起始位<0>,8位数据位和1位停止位<1>。其中的起始位和停止位在发送时是自动插入的。任何一条以SBUF为目的寄存器的指令都启动一次发送,发送的条件是TI=0,发送完置位TI。方式1接收的前提条件是SCON中的REN为1,同时以下两个条件都满足,本次接收有效,将其装入SBUF和RB8位。否则放弃接收结果。两个条件是:1>RI=0;2>SM2=0或接收到的停止位为1。方式1的波特率是可变的,波特率可由以下计算公式计算得到:方式1波特率=2SMOD·<定时器1的溢出率>/32其中的SMOD为PCON的最高位。定时器1的方式0,1,2,都可以使用,其溢出率为定时时间的倒数值。⑶方式2和方式3这两种方式都是11位异步接收/发送方式,它们的操作过程完全一样,所不同的是波特率:方式2波特率=×〔振荡器频率fosc方式3波特率同方式1<定时器1作波特率发生器>。方式2和方式3的发送起始于任何一条"写SBUF"指令。当第9位数据<TB8>输出之后,置位TI。方式2和方式3的前提条件也是REN为1。在第9位数据接收到后,如果下列条件同时满足:1>RI=0;2>SM2=0或接收到的第9位为1则将已接收的数据装入SBUF和RB8,并置位RI;如果条件不满足,则接收无效。51系列单片机串行口的不同寻常的特征是包括第九位方式。这允许在串行口通信增加的第九位用于标志特殊字节的接收。对简单网络,第九位方案允许接收单片机仅当字节具有一个第九位时才能被中断。用这种方法,发送器可以广播一个字节让第九位为高作为"每个人请注意"字节。字节可以为节点地址,地址相同的节点可以打开接收接下来的字符。所接续字节<第九位为低>不能引起其它单片机中断,因为未送它们的地址。用这种方式。一个单片机可以和大量的其它单片机对话而不打扰不寻址的单片机。这种系统必须工作在严格的主从方式,由软件进行取舍安排。2.通信波特率设置在异步通信中,收、发双方各用自己的的时钟源,要保证捕捉到的信号正确,最好采用较高频率的时钟,一般选择时钟频率比波特率16倍或64倍,若时钟频率等于波特率,则频率稍有偏差便会产生接收错误。各方式波特率的取值方法如下:⑴方式0状态:当软件设置SCON的SM0、SM1为"00"时串行通信则以方式0工作,串行通信工作在同步移位寄存器方式下。其波特率固定为<1/12>×fosc。⑵方式1状态:当软件设置SCON的SM0、SM1为"01"时串行通信则以方式1工作,串行通信的波特率由定时器T1的溢出率获得:串行通信方式1波特率=×〔定时器/计数器1的溢出率定时器/计数器1的溢出率定义为:单位时间〔秒内定时器/计数器回0溢出的次数,即定时器/计数器1的溢出率=定时器/计数器1的溢出次数/秒。定时器/计数器1的溢出率=<次/秒>当T1工作于方式2其初始值为:初值N=256-⑶串行通信方式2波特率=×〔振荡器频率通常情况下,使用单片机的串行口时,选用的晶振比较固定6MHz,12MHz,11.0592MHz。常用于和微机的通信;选用的波特率也相对固定。串行口常用的波特率及相应的设置见表7-1-1串行口常用波特率表。表7-1-1串行口常用波特率串行口工作方式波特率Fosc=6MHzFosc=12MHzFosc=11.0592MHzSMODTMODTH1SMODTMODTH1SMODTMODTH1方式01MHzXXX方式2375k187.5k1XX1XX0XX方式1或方式362.5k020FFH19.2k120FDH9.6k020FDH4.8k120F3H020FAH2.4k020FFH120F3H020F4H1.2k120E6H020E6H020E8H600120CCH020CCH020D0H300020CCH02098H020A0H137.51201DH0201DH0202EH11002072H010FEEBH010FEFFH7.1.1.5单片机之间的通信波特率查询表51系列单片机内部集成有一个功能很强的全双工串行通信口,属UART方式。设有2个互相独立的接收、发送缓冲器,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以用一个地址码〔99H。两个缓冲器统称串行通信特殊功能寄存器SBUF。51系列单片机的串行通信根据应用可分为双机通信和多机通信两种,又可分为单片机与单片机间的通信和单片机与微机通信。1.单片机双机通信技术如果两个AT89S52系列单片机相距很近距离的机间通信可使用UART的TTL电平,可将它们的串行端口直接相连〔TXD—RXD,RXD—TXD,GND—GND—GND,即可实现双机通信。2.单片机与微机通信为了增加通信距离,减少通道及电源干扰,可采用RS-232C或RS-422、RS-485标准进行双机通信。RS-232是串行数据接口标准,最初都是美国EIA〔电子工业联合会制订并发布的,1969年公布的通信协议。国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率,标准波特率系列为110、300、600、1200、4800、9600和19200。在通信为保证通信正确,必须通信双方必须同一波特率。RS-232-C标准:RS-232-C标准对逻辑电平的各种信号线的功能作了规定,即信号电平标准和控制信号线的定义。RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平不兼容,逻辑"1"=-3V~-15V逻辑"0"=+3V~+15V与TTL电平不一样可用TTL/EIA转换器进行转换。RS232接口芯片实现了TTL标准和RS-232-C标准之间的电平转换。使用驱动芯片<MAX232或1488/1489>可接成RS232C和通用微机进行通信。任务实施7.1.2通信系统设计应用MCU内部的增强型全双工UART功能,实现智能开发板与智能开发板的通讯,可以用智能开发板上的4个键每个键发送一串不同的字符串,另一个智能开发板接收字符串,并显示。实现与PC机通讯。将从智能开发板键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符〔0-F显示到实验机的数码管上。1.单片机与微机通信的接口电路设计利用微机配置的异步通信适配器,可以很方便地完成微系列与AT89C51单片机的数据通信。微机与单片机的连接是零调制3线经济型,这是进行全双工通信所必须的最少数目的线路。由于AT89C52单片机输入、输出电平为TTL电平,而微机配置的RS-232C标准串行接口二的电气规范不一致,因此,要完成微机与单片机的数据通信,必须进行电平转换。现在采用MAX232单芯片实现AT89C51单片机与微机的RS-232标准接口通信电路。MAX232芯片的接口连接如图7-1-2所示。图7-1-3MAX232接口芯片连接图2.单片机与PC微机通信接口硬件连接:<PC端口是9针插口单片机板上是9针插头<RS232>1脚DCD1脚2脚发出数据<RXD>3脚T1OUT3脚接受数据<TXD>2脚R1IN4脚DRT4脚5脚GND5脚地〔GND6脚DSR7脚RTS8脚CTS9脚RI现从MAX232芯片中两路发送接收中任选一路作为接口,应注意发送、接收的引脚要对应。实现与PC机通讯。将从智能开发板键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符〔1-8显示到单片机的数码管上。3.单片机和单片机通信连接单片机与单片机通信连接如图7-1-4所示,P3.0<RXD>-P3.1<TXD>、P3.1<TXD>-P3.0<RXD>、GND-GND。要注意的是这样的连接不能远距离。P3.1〔TXDP3.0〔RXDP3.1〔TXDP3.0〔RXDGND2#单片机P3.0〔RXDP3.1〔TXDGND1#单片机图示7-1-4单片机与单片机通信连接图4.通信程序设计流程图通信程序中在使用串行口之前,应对它进行编程初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下:⑴确定定时器1的工作方式——编程TMOD寄存器;⑵计算定时器1的初值——装载TH1、TL1;⑶启动定时器1——编程TCON中的TR1位;⑷确定串行口的控制——编程SCON和PCON;⑸串行口在中断方式工作时,须开CPU和源中断——编程IE寄存器。图7-1-5通信程序设计流程图5.编程举例⑴汇编程序例子ORG 30HSTART: MOV SP,#60H MOV SCON,#01010000B;设定串行方式: ;8位异步,允许接收 MOV TMOD,#20H ;设定计数器1为模式2 ORL PCON,#10000000B;波特率加倍 MOV TH1,#0FDH ;设定波特率为9600 MOV TL1,#0FDH SETB TR1 ;计数器1开始计时AGAIN: JNB RI,$ ;等待接收完成 CLR RI ;清接收标志 MOV A,SBUF ;接收数据送缓冲区 MOV SBUF,A ;发送收到的数据 JNB TI,$ ;等待发送完成 CLR TI ;清发送标志 SJMP AGAIN END⑵C51初始化串口程序i=0;//初值flag=0x00;//aa=0xfe;//位码初值TMOD=0x20;//方式寄存器初值TH1=0xfd;TL1=0xfd;PCON=0x00;TR1=1;SCON=0x50;⑶单片机串行口发送程序,每发送一串字符"MCS—51"后延时一段时间重复发送,和微机相接后,微机运行BASIC程序即可在屏幕上显示接收到的字符串,此程序证明单片机串行口发送正常。程序tetr.c如下:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintucharidatatrdata[10]={‘M’,’C’,’S’,’-’,’5’,’1’,0x0d,0x0a,0x00};main<>{uchari;uintj;TMOD=0x20;/*设置9600波特串的定时器1方式*/TL1=0xfd;TH1=0xfd;/*设置初始值SCON=0xd8;PCON=0x00;/*设置串行口方式*/TR1=1;/*起动定时器1while<1>{i=0;while<trdata[i]!=0x00>{/*发送字符串*/SBUF=trdata[i];while<TI==0>;TI=0;i++;}for<j=0;j<12500;j++;/*延时*/}}⑷单片机串行口发送/接收程序,每接收到字节即刻发送出去;和微机相接后微机键人的字符回显在屏幕上,此程序证明单片机串行口发送/接收都正常。可先用此程序测试,若不正常,再使用单独的发送程序测试以判断是单片机串行口发送还是接收不正常。程序trrev.c如下:#include<reg51.h>voidmain<void>{unsignedchara;TMOD=0x20;/*在11.0592MHz下,设置串行口9600波特率,方式3*/TL1=oxfd;TH1=0xfd;SCON=0xd8;PCON=0x00;TR1=1;while<1>{while<RI==0>:RI=0;a=SBUF;/*接收到的字节,立即发送出去*/SBUF=a;while<TI==0>;TI=0;}}7.1.3系统仿真1.在PROTEUS中画好通信电路原理图如图7-1-6所示。图7-1-6在PROTEUS中绘制智能系统通信原理图2.在KEIL或WF中编写单片机C51通讯程序。编好后调试产生HEX文件。3.在PROTEUS中链接HEX文件并仿真调试。4.PROTEUS仿真调试功能正确后,在最小系统板的扩展部分按照PROTEUS中的电路原理图安装并焊接。5.利用EasyISP在线下载软件将HEX文件烧入51系列单片机芯片中写入电路图中的单片机,实现用单片机通讯。7.1.4安装与调试1.硬件安装⑴单片机与单片机间通信线连接,在硬件连线时要注意2、3脚对换,但用购买的串口线不用对换。⑵单片机与单片机间通信线通信线不易太长,最好小于50CM。⑶在焊接时要注意断开5V电源,焊接时间不要太长,如果太长会使焊盘脱落。2.系统调试单片机的串行口主要用于和通用微机的通信、单片机间的通信和主从结构的分布式控制系统机间通信。串行口通信常使用缓冲区。单片机和通用微机进行通信时,要求使用的波特率、传送的位数等相同。要能够进行数据传送也必须首先测试双方是否可以可靠通信。可在微机和单片机上各编制非常短小的程序,具体可分成微机串行口发送接收程序、单片机串行口发送程序和单片机串行口发送接收程序。这三个程序能运行通过,即可证明串行口工作正常。通信程序接收程序尽量采用中断程序,通信中断函数不要太长,会影响接收数据。微机串行口发送接收程序设置串行口为波特率9600、8位数据、1位停止位、无奇偶校验的简单设置。从键盘接收的字符可从串行口发送出去,从串行口接收的字符在屏幕上显示。通过让串行口发送线和接收线短接可测试微机串行口,通过让串行口和单片机系统相接,使用此程序可进一步测试单片机的串行通信状况。具体程序用VB编制,简单易懂。直接输入即可运行。思考与练习:用中断方式数据接收程序的练习。任务二基于RS485的点对多点通信任务提出:MAX485芯片与51系列单片机的仿硬件连接,PC机与多个站点智能单机的硬件连接,通信程序的编写,熟悉Keil、伟福、AEDK系列实验机开发工具。VB程序学习。实现任务如图7-2-1:图7-2-1多机机通信原理图如上图PC通过RS232与485转换接口与多个站点的智能机相连接,每个站点有一MAX485连接一个温度传感DS18B20。可将每个站点的温度传送到PC微机屏幕显示。知识准备:7.2.1点对多点通信7.2.1.1基于RS485的芯片1.MAX485芯片介绍在工业控制及测量领域较为常用的网络之一就是物理层采用MAX485通信接口所组成的工控设备网络。这种通信接口可以十分方便地将许多设备组成一个控制网络。从目前解决单片机之间中长距离通信的诸多方案分析来看,MAX485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。MAX485是芯片接口的一种类型,MAX485接口芯片是Maxim公司的一种RS-485芯片。采用单一电源+5V工作,额定电流为300μA,采用半双工通讯方式。它完成将TTL电平转换为RS-485电平的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。可以串行口取电,可以驱动max232与max485实现通信。没加负载时电压有5.16V,加负载后降制3V左右。MAX485的特性、封装及特性300μA低静态电流共模输入电压范围为-7V到+12V三态输出30ns传输延迟时间,5ns的的沿变化时间半双工模式5V电源总线最大允许负载32个收发器2,5Mbps数据传输速率过流保护、过热保护±15kVESD保护MAX485的框图与电路图图7-2-2MAX485引脚〔管脚图及工作电路7.2.1.2通信方式⑴微机和智能仪器间基于RS485总线的主从方式点对多点通信,各为主/从属设备,被呼叫到时响应,或主发;主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。⑵微机和智能仪器可作为主从设备,主从设备中建立了主设备查询和从设备回应消息的格式;在通信接收过程中如果发生一错误,或从设备不能执行其命令,从设备将建立一错误命令并把它作为回应发送出去。尽管网络通信方法是"对等"。如果一设备发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当主设备接收到一消息,它将建立一从设备回应格式并返回给发送的控制器⑶通讯方式全兼容,采用异步通信,起始位1位,数据位8位,停止位1位,无校验。数据传输速率为1.2kbps、2.4kbps、4.8kbps、9.6kbps、19.2kbps。7.2.1.3MODBUS协议的基本格式在协议中建立了主设备查询的格式,和从设备回应消息格式。协议的基本格式如表7-2-1,其格式如下:表7-2.1MODBUS协议的基本格式注解表序号12345678字节数11111N21格式SOIADR特征码长度查询/回应信息CRC16EOI基本格式的注解见表7-2-1。SOI为起始位标志〔STARTOFINFORMATION当值为F1H时为主发标志,值为F3H时为响应标志;ADR是信息帧的第一字节<8位>设备地址描述,在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备〔1-254,0为广播地址、255保留通讯,从0到255。它表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。当从机回送信息时,相当的地址码表明该信息来自于何处。特征码是设备特征描述代码;长度是该整条指令的总字节数〔包括起始位标志、结束码;查询/回应是控制标识码,也称功能码:查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。CRC16是冗余循环码包含2个字节,即16位二进制。CRC码由发送设备计算,放置于发送信息〔SOI、ADR、特征码、长度、命令、的尾部。接收信息的设备再重新计算接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。主机或从机可用校验码进行判别接收信息是否出错。有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传送过程中出错的信息不起作用。这样增加了系统的安全和效率。EOI为结束码当值为F2H是为主发结束,值为F4H时为响应结束。7.2.1.4单片机与计算机的通信PC机通过串行口〔COM1或COM2来实现与通信MCU之间的通信。由于PC机的COM口输入/输出的是RS-232电平,往往只能用于实现单点通信,且传送距离有限,为了对其进行扩展,我们采用RS-232/RS-485接口转换器,将其转换为RS-485电平,从而通过RS-485总线实现与16个通信MCU之间的通信。由于单片机的通用同步/异步收发器〔USART采用TTL电平,与标准RS-485电平不匹配,我们采用MAXIM公司生产的MAX485芯片将其转换为RS-485标准电平,通过RS-485总线实现与PC机的对接。MAX485通讯程序与MAX232通讯程序在本质上是一样的,只是MAX485通讯程序需要加上通讯方向控制。下面通信程序,调试通过,晶振为外部11.0592M,MAX485的DE和RE短接连PC0口,图7-2-3单片机与MAX485连接图任务分析:分析1:硬件设计如下图7-2-4有多个智能开发板每个开发板上安装DS18B20温度传感器并显示当前检测温度值,板上的MAX485和RS232与485转换接口与PC机连接。在PC微机上用VB建立一界面显示多个智能板上所测的温度。图7-2-4智能温度检测系统分析2:编制VB界面,在VB软件中编制界面如下图7-2-6智能温度检测系统VB界面任务实施:1.准备⑴微机⑵二个智能开发板极,二个DS18B20,二个MAX485⑶一个RS232—485转接口2.实施过程⑴在PROTEUS中画好电路原理图并完成硬件设计按照原理图正确焊接线路,用万用表简单测试线路是否有短路开路现象。⑵在KEIL或WF中编写多机通讯程序。编好后调试产生HEX文件。利用STC-ISP在线下载软件将HEX文件烧入51系列单片机芯片中⑶VB界面下设计多个窗口,通信接收,编写VB程序,根据各站的数据显示在指定指定窗口。⑷系统调试⑸实现多机通讯,在PC机上VB界面显示温度值,然后用数码管显示出通信信息用C语言编写程序。注意事项:各智能系统站的上的MAX485输出A端连接在一起,B端连接在一起,一个工程项目的完成要经过长时间的调试才能成功,本任务的完成有一定的难度,技术性较强。思考与练习:1.根据MX485与单片机的连接图和微机的连接图,制作硬件。2.编制温度检测通信发送接收C51程序,编译通过并用ISP下载到单片机中。3.在VB界面下编制数据检测及显示程序知识拓展:1.VB界面程序设计PublicfsStrAsStringPublicsqm$Publicsqm1$DimzhAsByte'''''''''''''''''''''''''''''''''''''''使用命令按钮控件'关闭通信端口'结束系统''''''''''''''''''''''''''''''''''''''PrivateSubCmdExit_Click<>Comm1.PortOpen=FalseEndEndSub'''''''''''''''''''''''''''''''''''''''使用命令按钮控件'使用Input属性读取串行端口的传入值'并将结果显示在Label控制的Caption属性里''''''''''''''''''''''''''''''''''''''PrivateSubCmdReceive_Click<>Dimbuf$buf=Trim<Comm1.Input>IfLen<buf>=0ThenlblReceive.Caption="Empty"ElselblReceive.Caption=bufEndIfEndSub'''''''''''''''''''''''''''''''''''''''使用命令按钮控件'使用Output属性将用户欲发送的字符串送出''''''''''''''''''''''''''''''''''''''PrivateSubCmdSend_Click<>Comm1.Output=Trim<txtSend.Text>EndSub'''''''''''''''''''''''''''''''''''''''MSComm的OnComm事件程序'由CommEvent属性值的不同,将各别的程序代码写入'相关的子程序中'在此例中,只要RThresold中的设置字符数到达时'便会使得CommEvent属性值变成comEvReceive'因此接收的子程序便被执行''''''''''''''''''''''''''''''''''''''PrivateSubComm1_OnComm<>Dimbuf$SelectCaseComm1.CommEvent'借着取代底下每一个case语句来处理每个事件与错误'事件'CasecomEvCD'CD线的状态发生变化.'CasecomEvCTS'CTS线的状态发生变化.'CasecomEvDSR'DSR线的状态发生变化.CasecomEvRing'RingIndicator变化.CasecomEvReceive'收到RThreshold#ofbuf=buf+Trim<Comm1.Input>sqm=sqm+bufCasecomEvSend'传输缓冲区有Sthreshold个字符'EndSelectEndSub'''''''''''''''''''''''''''''''''''''''使用命令按钮控件'将接收区的显示范围清空''''''''''''''''''''''''''''''''''''''PrivateSubCommand1_Click<>lblReceive.Caption=""EndSub'''''''''''''''''''''''''''''''''''''''窗体的加载事件'打开串行通信端口,参数亦可在打开之前先行指定,'指定完后,再打开该通信端口''''''''''''''''''''''''''''''''''''''PrivateSubForm_Load<>Comm1.PortOpen=Truezh="0"EndSubSubSJCL<>EndSubPrivateSubTimer1_Timer<>Timer1.Enabled=Falsezh=zh+1'站号记数器Ifzh>"4"Thenzh="0"Elsezh="0"+zhfsStr=zh'"F2"&zh&"FD"Label2.Caption=fsStrComm1.Output=fsStrTimer2.Enabled=TrueEndIfTimer1.Enabled=TrueEndSubPrivateSubTimer2_Timer<>'处理数据DimswzlAsIntegerDimsiAsIntegerDimqhAsStringDimxqlsAsStringDimwdzAsIntegerKS:Label4.Caption=sqmxqls=Trim<sqm>swzl=1'F2<起始标志>,X<站号>,XXXXX<温度值>,FD〔结束标志swzl=InStr<xqls,"F2">'搜索"FFF2"出现的位置swz1=swz1+2sqm=Mid<xqls,swz1>'取出"F2"开始的字符wdz=Val<Mid<sqm,3,5>>Ifwdz<>0ThenForsi=1To4qh=Mid<sqm,si,1>SelectCaseqhCase"1"Text1.Text=wdzCase"2"Text2.Text=wdzCase"3"Text3.Text=wdzCase"4"Text4.Text=wdzEndSelectNextsisqm=""EndIfTimer2.Enabled=FalseTimer1.Enabled=TrueEndSubPrivateSubtxtSend_Change<>EndSub2.智能仪器程序#include<reg52.h>#include<INTRINS.h>unsignedcharcode;displaycode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x9c,0xc6,0xf};unsignedcharcodedotcode[32]={0,3,6,9,12,16,19,2225,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,94,97};unsignedchardisplaycount;unsignedchardisplaybuf[8]={16,16,16,16,12,11,16,16};unsignedchartimecount,aa=0xfe,n;unsignedcharreaddata[8],dd;sbitDQ=P1^0;sbitCON_485=P1^1;bitsflag;bitreflag1,reflag2,reflag3,reflag4,reflag5,reflag6,reflag7,reflag8;//接收标志voidfsdata<>;void delay_50us<unsignedchar_50us>;voidSerial_int<void>interrupt4using2//串行中断接收{ ES=0; RI=0;dd=SBUF;if<dd==0x32>{reflag6=1;}ES=1;}voidfsdata<>ES=0;CON_485=1;REN=0;TI=0;for<n=30;n>0;n-->; SBUF=0x46;//发送ACK0x06while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=0x32;//发送ACK0x06 while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=0x32;//发送ACK0x06 while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=displaybuf[0x01]&0x0f|0x30;//发送ACK0x06 while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=displaybuf[0x00]&0x0f|0x30;//发送ACK0x06 while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=0x46;//发送ACK0x06 while<TI==0>;TI=0;for<n=30;n>0;n-->;SBUF=0x44;//发送ACK0x06 while<TI==0>; CON_485=0; REN=1; ES=1;}bitresetpulse<void>{unsignedchari;DQ=0;for<i=255;i>0;i-->;DQ=1;for<i=60;i>0;i-->;return<DQ>;for<i=200;i>0;i-->;}voidwritecommandtods18b20<unsignedcharcommand>{unsignedchari;unsignedcharj;for<i=0;i<8;i++>{if<<command&0x01>==0>{DQ=0;for<j=35;j>0;j-->;DQ=1;}else{DQ=0;for<j=2;j>0;j-->;DQ=1;for<j=33;j>0;j-->;}command=_cror_<command,1>;}}unsignedcharreaddatafromds18b20<void>{unsignedchari;unsignedcharj;unsignedchartemp;temp=0;for<i=0;i<8;i++>{temp=_cror_<temp,1>;DQ=0;_nop_<>;_nop_<>;DQ=1;for<j=10;j>0;j-->;if<DQ==1>{temp=temp|0x80;}else{temp=temp|0x00;}for<j=200;j>0;j-->;}return<temp>;}voidmain<void>{TMOD=0x21;TH0=<65536-2000>/256;TL0=<65536-2000>%256;PCON=0x00; SCON=0x50; //Mode1,8-bitUART,enablereceiptionIP=0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论