




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能仪器设计课程设计报告―――采用RS485标准的主从式多机系统设计学生姓名:王**学号:*********班级:********任课教师:***成绩:设计要求a)系统根本构造:1个51系列单片机主机、2个51系列单片机从机〔从机1和从机2〕、采用RS485组成主从式多机系统;b)系统根本功能:在主机键盘上按“1〞键,从机1的LED数码显示器上显示“1〞,此后从机1键盘上每按下1个数字键,主机LED数码显示器上能显示对应的数字,当从机1键盘上按下“0〞键时,此次通信完毕,从机1键盘上再按下任意数字键,主机不显示相应数字;在主机键盘上按“2〞,从机2的LED数码显示器上显示“2〞,此后从机2键盘上每按下1个数字键,主机LED数码显示器上能显示对应的数字,当从机2键盘上按下“0〞键时,此次通信完毕,从机2键盘上按下任意数字键后,主机不显示相应数字;c)选做:从机1和从机2可设计成相关物理量的测量系统,当主机呼叫从机时,从机能把最新的测量值发给主机。方案论证系统组成:由三个51单片机构成主从通信系统〔本组使用的芯片型号是STC89C52,其功能是一致的〕,每个单片机搭配LED数码管显示器和键盘;通信采用RS-485标准,可使用MAX485芯片作为通信收发器,单片机控制MAX485的使能端进展发送和承受逻辑控制;单主机多从机的通讯系统需要区分地址信息和数据信息,可利用51串口模式中的模式2进展通信,修改主机的SCON.3状态说明主机发送的是否是地址信息,修改某台从机的SM2状态来建立和主机的唯一通信;数据输入使用键盘输入,数据显示可简单的使用数码管显示。图SEQ图\*ARABIC1系统构造图〔2〕串口模式分析:51单片机串口的2/3模式下是作为11位异步通信用,8位数据位后的第九位是可编程位SCON.3,主机可以对此位进展0或1赋值,进展地址信息和数据信息的区分,通常赋为1表示地址信息,为0表示数据信息;51单片机的串行口控制存放器SCON的SM2位是专门用来使通信接口具有识别功能的多机控制位,在串行口以方式2/3接收时,假设SM2=1,此时出现两种情况:第一,接收到的第九位为1〔单片机接收时可编程位进入SCON.2〕,则前8位数据装入SBUF,并置RI为1,产生中断标志;第二,接收到的第九位为0,则不产生中断标志,接收信息被弃。假设SM2=0,则接收到的第九位无论为0还是1,RI均为1,产生中断标志,接收到的前8位数据装入SBUF。所以多机通信可按下述过程进展:①参与通信的所有从机的SM2位置1,即从机处于只接收地址帧的状态;②主机发送一帧地址信息,包括8位地址及第九位地址/数据标志位〔该位应为1,表示该帧信息的前8位为地址〕;③由于从机的SM2位已置1,故主机发送的地址信息被所有从机收到,各从机鉴别接收到的地址信息是否与本机地址一样〔每个从机已规定其相应的地址〕。对于接收到的地址与本机地址相符的从机,通过程序将其SM2置为0,这样主机之后发送的其他数据信息将被选中的从机接收到,主机与所选的从机之间通信,主机可向从机发送命令数据或从机向主机发送相关的测量结果等。由于未选中的从机的SM2仍为1,故未选中的从机将不理会主机与选中从机之间传送的数据信息〔因为这些信息的第九位均为0〕,直到主机发送新的地址帧为止。MAX485芯片的使用:MAX485是MAXIM公司推出的专门用于RS-485标准通信的接口芯片,它是半双工工作的收发器,其典型工作电路如图2所示:图SEQ图\*ARABIC2MAX485工作电路其中管脚、DE是收发器的控制脚,根据MAX485的逻辑功能表,、DE都置为高电平,则发送器可工作,接收器不工作;、DE都置为低电平,则接收器可工作,发送器不工作〔发送器和接收器无法同时工作〕,所以可用单片机的io口使能、DE来实现半双工通信。51与MAX485的接口示意图如下:图SEQ图\*ARABIC3单片机与MAX485连接示意图〔3〕键盘设计:根据题意,主机由于只需使用到两个按键,所以主机的按键可使用独立式按键方式,即两个按键接入单片机的两个io口,通过判断上下电平判断哪个键被按下;从机则需要使用矩阵式键盘,本组使用4×4的矩阵式键盘,并用线反转法进展键值扫描。显示单元:由于需要显示的信息比拟简单,所以可以简单的使用LED数码管来显示,本组使用的单片机开发板上集成了4个数码管,共用一个译码器,可以通过循环点亮的方式显示多个数字。硬件设计①主机和从机通过MAX485连接的电气图:图SEQ图\*ARABIC4主机和从机通过MAX485连接的电气图②主机和按键、数码管的连接图③从机和键盘、数码管的连接图图SEQ图\*ARABIC5主机和按键、数码管的连接图图SEQ图\*ARABIC6从机和键盘、数码管的连接图软件设计①led数码管显示子程序:单片机开发板上的LED数码管是共阳极连接方式,数码管的a-h脚分别连到P0.0-P0.7,四个LED的控制角分别接到P2.0-P2.3;在数码管上需要显示的数字或字符的共阳极代码如下:显示内容共阳极代码显示内容共阳极代码显示内容共阳极代码显示内容共阳极代码显示内容共阳极代码0C0H3B0H682H96FHdA1H1F9H499H7F8HE79H2A4H592H880HNC8H程序代码:#defineucharunsignedcharsbitP2_0=P2^0;//用来点亮数码管1sbitP2_1=P2^1;//用来点亮数码管2sbitP2_2=P2^2;//用来点亮数码管3sbitP2_3=P2^3;//用来点亮数码管4ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//液晶查询表voiddisplay_1(unsignedintnumber);voiddisplay_2(unsignedintnumber);voiddisplay_3(unsignedintnumber);voiddisplay_4(unsignedintnumber);函数名:voiddisplay_1参数:(unsignedintnumber)作用:根据输入的数字点亮显示数码管1voiddisplay_1(unsignedintnumber){P0=table[number];P2_0=0;函数名:voiddisplay_2参数:(unsignedintnumber)作用:根据输入的数字点亮显示数码管2voiddisplay_2(unsignedintnumber){P0=table[number];P2_1=0;函数名:voiddisplay_3参数:(unsignedintnumber)作用:根据输入的数字点亮显示数码管3voiddisplay_3(unsignedintnumber){P0=table[number];P2_2=0;函数名:voiddisplay_4参数:(unsignedintnumber)作用:根据输入的数字点亮显示数码管4voiddisplay_4(unsignedintnumber){P0=table[number];P2_3=0;②键盘扫描子程序使用线反转法扫描键盘,矩阵键盘的1-4行接入P1.7-P1.4,1-4列接入P1.3-P1.0,同时P1.3-P1.0接上拉电阻,线反转法的步骤:1、将列线作为输出线,行线作为输入线,置输出线全部为0,此时行线中呈低电平0的为按键所在行,如果全部都不是0,则没有按键按下;2、将第一步反过来,即将行线作为输出线,列线作为输入线,置输出线全部为0,此时列线中呈低电平0的为按键所在列,至此便确定了按键的位置,可根据行列参数查询实现写好的键值表,获取键值。线反转法扫键流程图:图SEQ图\*ARABIC7键盘子程序流程图扫描键盘子程序代码:#include<stdio.h>inthang;//定义行号intlie;//定义列号unsignedintKey_Val=1;//保存键值unsignedintkeymap[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};//设置键盘逻辑键值 intKeyScan();//扫键子函数voidDelay();//延时key_Val对应键值列:[p13][p12][p11][p10]行:[p17]→1(1)2(2)3(3)4(A)[p16]→5(4)6(5)7(6)8(B)[p15]→9(7)10(8)11(9)12(C)[p14]→13(*)14(0)15(#)16(D)voidDelay()//延时子函数longi;for(i=1000;i>0;i--);intKeyScan()//扫键子函数P1=0xF0;//列输出全0;if((P1&0xF0)!=0xF0)//扫描行,如果不全为0,则进入switch(P1)//获得行号case0x70:hang=1; break;case0xB0:hang=2; break;case0xD0:hang=3; break;case0xE0:hang=4; break;default: break;Delay();//延时去抖动P1=0x0F;//行输出全0if((P1&0x0F)!=0x0F)//扫描列,如果不全为0,则确认按键按下switch(P1)//获得列号case0x07:lie=1; break;case0x0B:lie=2; break;case0x0D:lie=3; break;case0x0E:lie=4; break;default: break;return1;//扫描到按键按下,则返回1elsereturn0;//未扫描到按键按下,返回0③主机程序:在主机主程序中首先进展串口的配置,需要将串口置为模式3;然后程序一直循环查询是否有按键按下〔K1或K2〕,如果有按键按下,则进入与从机通信的子程序。主机主程序流程图:图SEQ图\*ARABIC8主机主程序流程图主机与从机通信的子程序是主机程序的最关键局部,负责主机与从机建立联系、数据通信和终止连接的任务。以按下按键K1为例,按下K1表示应与从机1通信,程序进入通信子程序,首先主机向所有从机发送从机1的地址“0x01〞,然后主机等待从机1的回应〔从机1收到请求会发回本机的地址信号0x01作为回应〕,接收到回应则继续进展通信;然后主机一直处于接收状态,循环接收从机发送的数据,并将数据通过数码管显示,直到接收到数据0,则退出子程序;注意由于单片机外接MAX485进展通信,所以在发送或接收前需要改变控制脚、DE改变MAX485的收发状态。图SEQ图\*ARABIC9主机与子程序通信流程图主机程序代码://主机程序#include<reg51.h>#include<string.h>#include<ye_jing_xian_shi.h>sbitRE=P3^2; //MAX485的控制脚RE和DEsbitDE=P3^3; //发送时置高,接收时置地unsignedchartemp=0xff;sbitKEY2=P2^5; ////延时1ms函数voiddelay_1ms(unsignedintt)unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);//串口初始化函数voidserial_init()TMOD=0x20;//定时器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率为9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//开启定时器TI=0;RI=0;//向指定从机地址发送数据//和从机通信voidADDR_data(unsignedaddr)intj=0;while(temp!=addr)//主机等待从机返回其地址作为应答信号RE=1; //发送状态DE=1;TI=0;//发送从机地址TB8=1;//发送地址帧SBUF=addr;while(!TI);TI=0;RE=0; //接收状态DE=0;RI=0; //接收从机应答信号while(!RI);temp=SBUF;//从时机发送自己的地址作为回应RI=0;}//选通从机后跳出循环display_1(addr);//接通后在数码管上显示1或2//主机循环接收从机发过来的数字信号并在数码管上显示,直到接收到0do{RE=0; //接收状态DE=0;RI=0;while(!RI);temp=SBUF;RI=0;display_1(temp);//在数码管上显示数字}while(temp!=0);//接收到0,表示此次通信完毕,数码管闪烁表示for(j=0;j<50;j++)display_1(addr); delay_1ms(10); P2_0=1; P0=0x86; P2_1=0; delay_1ms(10);P2_1=1; P0=0xc8; P2_2=0; delay_1ms(10); P2_2=1; P0=0xa1; P2_3=0; delay_1ms(10); P2_3=1;voidmain()RE=1;DE=1;//初始为发送状态serial_init();while(1)if(KEY1==0)delay_1ms(5);//消抖if(KEY1==0)while(!KEY1);ADDR_data(0x01);if(KEY2==0)delay_1ms(5);if(KEY2==0)while(!KEY2);ADDR_data(0x02);RE=1;DE=1;//重置为发送状态④从机程序:从机首先进展串口初始化,然后处于循环接收状态,即等待主机的请求,如果接收缓存区有数据,判断是否等于本机地址,等于则说明有主机请求,则再向主机发送本机地址作为回应;然后从机进入读键子程序,循环读出键值并将键值发送到主机,直到有0键按下,从机将0发送后退出子程序,即完毕此次通信,重新开场主循环。注意由于单片机外接MAX485进展通信,所以在发送或接收前需要改变控制脚、DE改变MAX485的收发状态。从机主程序流程图:图SEQ图\*ARABIC10从机程序流程图从机程序代码〔从机1〕://从机1程序#include<reg51.h>#include<string.h>#include<ye_jing_xian_shi.h>#include<jian_pan.h>#defineaddr0x01//从机2的地址sbitRE=P3^2; //MAX485的控制脚RE和DEsbitDE=P3^3; //发送时置高,接收时置地unsignedcharaa=0xff;//主机与从机之间通信标志//延时1ms函数voiddelay_1ms(unsignedintt)unsignedintx,y;for(x=t;x>0;x--)for(y=110;y>0;y--);//串口初始化函数voidserial_init()TMOD=0x20;//定时器1工作于方式2TH1=0xfd;TL1=0xfd;//波特率为9600PCON=0;SCON=0xd0;//串口工作于方式3TR1=1;//开启定时器TI=0;RI=0;voidmain()unsignedintKey;unsignedintj;RE=0;DE=0;//初始为接收状态serial_init();while(1)SM2=1;//接收地址帧while(aa!=addr)//从机等待主机请求自己的地址RE=0; //接收状态DE=0;RI=0;while(!RI);aa=SBUF;RI=0;RE=1; //发送状态DE=1;TI=0;//一旦被请求,从机返回自己地址作为应答,等待接收数据TB8=0;SB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《繁星春水》读书心得体会
- 企业门头制作合同范本
- 医用设备运输合同范例
- 俱乐部短期合同范本
- 个人购地合同范本
- 冰箱维修合同范本
- 出租证件合同范本
- 天津工人用工合同范本
- 单位借调合同范本
- 个人车辆寄售合同范本
- 《绿色建筑设计原理》课件
- 中医馆装修合同范本
- 学习与科技的融合主题班会
- 《直播销售》课件-项目一 认识直播与直播销售
- 2025年南京科技职业学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 2025-2030年中国航空配餐行业市场发展现状及投资前景规划研究报告
- 新课标背景下的跨学科学习内涵、设置逻辑与实践原则
- 母婴分离产妇的护理
- 2025年全国高考体育单招政治时事填空练习50题(含答案)
- 2025教科版一年级科学下册教学计划
- 人教版高一上学期数学(必修一)期末考试卷(附答案)
评论
0/150
提交评论