智能仪器课程设计报告_第1页
智能仪器课程设计报告_第2页
智能仪器课程设计报告_第3页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

1、智能仪器设计课程设计报告采用RS 485标准的主从式多机系统设计学生姓名:号:*级:*任课教师:*成 绩:1、设计要求a)系统基本结构: 1个51系列单片机主机、 2个51 系列单片机从机(从机 1 和从机2)、采用 RS 485组成主从式多机系统;b)系统基本功能:在主机键盘上按“ 1 ”键,从机1的LED数码显示器上显 示“1”,此后从机1键盘上每按下1个数字键,主机LED数码显示器上能显示对 应的数字,当从机 1 键盘上按下“ 0”键时,此次通信结束,从机 1 键盘上再按下 任意数字键,主机不显示相应数字;在主机键盘上按“ 2 ”,从机2的LED数码显 示器上显示“ 2”,此后从机2键盘

2、上每按下1个数字键,主机LED数码显示器上 能显示对应的数字,当从机 2键盘上按下“ 0”键时,此次通信结束,从机 2键盘 上按下任意数字键后,主机不显示相应数字;c)选做:从机 1 和从机 2 可设计成相关物理量的测量系统,当主机呼叫从 机时,从机能把最新的测量值发给主机。2、方案论证(1)系统组成: 由三个 51 单片机构成主从通信系统(本组使用的芯片型号是 STC89C52 ,其功能是一致的),每个单片机搭配 LED 数码管显示器和键盘;通 信采用 RS-485 标准,可使用 MAX485 芯片作为通信收发器,单片机控制 MAX485 的使能端进行发送和接受逻辑控制;单主机多从机的通讯系

3、统需要区 分地址信息和数据信息,可利用 51 串口模式中的模式 2 进行通信,修改主机的 SCON.3 状态表明主机发送的是否是地址信息,修改某台从机的 SM2 状态来建 立和主机的唯一通信; 数据输入使用键盘输入, 数据显示可简单的使用数码管显 示。图1系统结构图(2)串口模式分析:51单片机串口的2/3模式下是作为11位异步通信用,8 位数据位后的第九位是可编程位 SC0N.3,主机可以对此位进行0或1赋值, 进行地址信息和数据信息的区分,通常赋为 1表示地址信息,为0表示数据信 息;51单片机的串行口控制寄存器 SCON的SM2位是专门用来使通信接口具 有识别功能的多机控制位,在串行口以

4、方式 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,故主机发送的地址信息

5、被所有从机收到,各从机 鉴别接收到的地址信息是否与本机地址相同(每个从机已规定其相应的地址)。对于接收到的地址与本机地址相符的从机,通过程序将其SM2置为0,这样主机之后发送的其他数据信息将被选中的从机接收到,主机与所选的从机之间通 信,主机可向从机发送命令数据或从机向主机发送相关的测量结果等。由于未选中的从机的SM2仍为1,故未选中的从机将不理会主机与选中从机之间传送的 数据信息(因为这些信息的第九位均为 0),直到主机发送新的地址帧为止。MAX485 芯片的使用:MAX485是MAXIM 公司推出的专门用于 RS-485标准通信的接口芯片,它是半双工工作的收发器,其典型工作电路如图2所示:

6、图2 MAX485 工作电路ROREDEDIn-il431-O其中管脚RE、DE是收发器的控制脚,根据 MAX485的逻辑功能表,RE、DE 都置为高电平,则发送器可工作,接收器不工作;RE、DE都置为低电平,则接收器可工作,发送器不工作(发送器和接收器无法同时工作),所以可用单片机的io 口使能RE、DE来实现半双工通信。51与MAX485的接口示意图如下:图3单片机与MAX485 连接示意图(3) 键盘设计:根据题意,主机由于只需使用到两个按键,所以主机的按键可使用独立式按键方式,即两个按键接入单片机的两个io 口,通过判断高低电平判断哪个键被按下;从机则需要使用矩阵式键盘,本组使用4 X

7、4的矩阵式键盘, 并用线反转法进行键值扫描。(4) 显示单元:由于需要显示的信息比较简单,所以可以简单的使用 LED数码 管来显示,本组使用的单片机开发板上集成了 4个数码管,共用一个译码器,可 以通过循环点亮的方式显示多个数字。3、硬件设计 主机和从机通过MAX485连接的电气图:h?mi!:d恤氏F3 IAI *n Wr? WalAEO 旳Z4bmmmr陀ia心w垃uFWPZb 啣M ERIm di:.喊 irtxupi工hamMi ai*3_Fii1ipi wpi L*niHI 9Id 11PifFOfflaJHP 95U Tlihrniz-T-T-壬土3 -FtxzWg r32K:2*

8、asiu i F3LAZL 旳3耐 F3fiXZ“L阳沖p?rnK gWFkfl IF母吃如J 叫MFdPILTI2Pl翊気 毗2irnrPITPi.車F5.MUPiF?*TIPE円3廂PHfirjii nik-u1z:UA7e2*13*14ISVIA*?吟 FZStMT圧Z2 ?! P上W PflAK炖耳匸nJUTXL_P?JPr. ?冲 iMjjyiifjMiiiS-B-JTJfe:图4主机和从机通过 MAX485 连接的电气图 主机和按键、数码管的连接图KT&dl-WOi FIWW -am FlUKa MBZMgK!MFTW晋F7J* M霍*Ji*WPi.inb哼仲鼻 m/rciiru

9、FlJ*叭rfTTII AFl LF*11nyrtWl.Ml-肝Mllm 从机和键盘、数码管的连接图图5主机和按键、数码管的连接图-凶日 一 - 13可3 B回“ IDPCIHonPkE4 4-&R3E-VP?UWf?Dit cm*f:Ht-3jQirl咗测鼻:=科 I*iJJSMimqQiiin lipaET3IW*町s?Tnifcr图6从机和键盘、数码管的连接图4、软件设计 led数码管显示子程序:单片机开发板上的LED数码管是共阳极连接方式,数码管的a-h脚分别连到,四个LED的控制角分别接到P2.0-P2.3 ;在数码管上需要显示的数字或字符的共阳极代码如下:显示内容共阳极代码显示内容

10、共阳极代码显示内容共阳极代码显示内容共阳极代码显示内容共阳极代码0C0H3B0H682H96FHdA1H1F9H499H7F8HE79H2A4H592H880HNC8H程序代码:#defi ne uchar un sig ned charsbit P2_0 = P2A0; /sbit P2_1 = P2A1; /sbit P2_2 = P2A2; /sbit P2_3 = P2A3; /用来点亮数码管1用来点亮数码管2用来点亮数码管3用来点亮数码管4uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ;/液晶查询

11、表void display_1( un sig ned int nu mber);void display_2( un sig ned int nu mber);void display_3( un sig ned int nu mber);void display_4(unsigned int number);/*函数名: void display_1参数: (unsigned int number)作用:根据输入的数字点亮显示数码管 1*/void display_1(unsigned int number) P0=tablenumber;P2_0 = 0;/*函数名: void disp

12、lay_2参数: (unsigned int number) 作用:根据输入的数字点亮显示数码管 2 */ void display_2(unsigned int number) P0=tablenumber;P2_1 = 0;/*函数名: void display_3参数: (unsigned int number)作用:根据输入的数字点亮显示数码管 3*/void display_3(unsigned int number) P0=tablenumber;P2_2 = 0;/*函数名: void display_4参数: (unsigned int number)作用:根据输入的数字点亮显

13、示数码管 4*/void display_4(unsigned int number) P0=tablenumber;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 的为按键 所在列,至此便确定了按键的位

14、置, 可根据行列参数查询实现写好的键值表, 获取键值。线反转法扫键流程图:r幵祐记录刮号跟菲行斥拓列壬堂词谨值表得到禪-自图7键盘子程序流程图扫描键盘子程序代码:#in cludeint hang;/定义行号in t lie; / 定义列号un sig ned int Key_Val=1; 保存键值设置键盘逻辑键unsignedint keymap = 1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0;值int KeySca n();扫键子函数void Delay(); / 延时*key_Val 对应键值列:p13p12p11p10JJJJ行:p171(1)2(2)3(3)4(A

15、)p16f5(4)6(5)7(6)8(B)p15f9(7)10(8)11(9)12(C)p14f13(*)14(0)15(#)16(D)*void Delay()/ 延时子函数long i;for(i=1000;i0;i-);int KeyScan()/ 扫键子函数P1=0xF0;/ 列输出全 0 ;if(P1&0xF0)!=0xF0)/ 扫描行,如果不全为 0 ,则进入switch(P1)/ 获得行号case 0x70:hang=1;break;case 0xB0:hang=2;break;case 0xD0:hang=3;break;case 0xE0:hang=4;break;defau

16、lt:break;Delay();/ 延时去抖动P1=0x0F;/ 行输出全 0if(P1&0x0F)!=0x0F)/ 扫描列,如果不全为 0 ,则确认按键按下 switch(P1)/ 获得列号case 0x07:lie=1;break;case 0x0B:lie=2;break;case 0x0D:lie=3;break;case 0x0E:lie=4;break;default:break;return 1;/ 扫描到按键按下,则返回 1elsereturn 0;/ 未扫描到按键按下,返回 0 主机程序:在主机主程序中首先进行串口的配置,需要将串口置为模式 3 ;然后程序 直循环查询是否有

17、按键按下(K1或K2),如果有按键按下,则进入与从机通信 的子程序。主机主程序流程图:执行与腻札?連 低子程妄funE子程辛图8主机主程序流程图主机与从机通信的子程序是主机程序的最关键部分,负责主机与从机建立联系、数据通信和终止连接的任务。以按下按键 K1为例,按下K1表示应与从机 1通信,程序进入通信子程序,首先主机向所有从机发送从机1的地址“0x01 ” 然后主机等待从机1的回应(从机1收到请求会发回本机的地址信号 0x01作为 回应),接收到回应则继续进行通信;然后主机一直处于接收状态,循环接收从 机发送的数据,并将数据通过数码管显示,直到接收到数据0,则退出子程序;注意由于单片机外接M

18、AX485进行通信,所以在发送或接收前需要改变控制脚RE、DE改变MAX485的收发状态Li_i RE . id 111 01 远鋼2冷4站丑.巧摆应狀走蒂霰临到的a拥 在檢昏管上显示計軒菅县示 END-畫示r图9主机与子程序通信流程图主机程序代码:/主机程序#in clude#in clude#in cludesbit RE = P3A2;/MAX485 的控制脚RE和DEsbit DE = P3A3;II发送时置高,接收时置地unsigned char temp=0xff;sbit KEY1=P2A4; IIP2.4,P2.5 是两个按键sbit KEY2=P2A5; IIII 延时 1m

19、s 函数void delay_1ms(unsigned int t)unsigned int x,y;for(x=t;x0;x-)for(y=110;y0;y-);II 串口初始化函数void serial_init()TMOD=0x20; II 定时器 1 工作于方式 2TH1=0xfd;TL1=0xfd; II 波特率为 9600PCON=0;SCON=0xd0; II 串口工作于方式 3TR1=1; II 开启定时器TI=0;RI=0;/ 向指定从机地址发送数据/ 和从机通信void ADDR_data(unsigned addr)int j=0;while(temp!=addr) /

20、主机等待从机返回其地址作为应答信号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/ 主机循环接收从机发过来的数字信号并在数码管上显示,直到接收到 0doRE=0; / 接收状态DE=0;RI=0;while(!RI);temp=SBUF;RI=0;display_1(te

21、mp);/ 在数码管上显示数字while(temp!=0);/ 接收到 0,表示此次通信结束 ,数码管闪烁表示for(j=0;j50;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;void main()RE=1;DE=1;/ 初始为发送状态serial_init();while(1)if(KEY1=0)delay_

22、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发送后退出子程序,即结束此次通信, 重新开始主循环。注意由于单片机外接 M

23、AX485进行通信,所以在发送或接收 前需要改变控制脚RE、DE改变MAX485的收发状态。从机主程序流程图:从机程序代码(从机 1 ):/ 从机 1 程序#include#include#include#include#define addr 0x01/ 从机 2 的地址sbit RE = P3A2;/MAX485的控制脚 RE 和 DEsbit DE =卩3人3;/发送时置高,接收时置地unsigned char aa=0xff;/ 主机与从机之间通信标志/ 延时 1ms 函数void delay_1ms(unsigned int t)unsigned int x,y;for(x=t;x0

24、;x-)for(y=110;y0;y-);/ 串口初始化函数void serial_init()TMOD=0x20; / 定时器 1 工作于方式 2 TH1=0xfd;TL1=0xfd; / 波特率为 9600PCON=0;SCON=0xd0; / 串口工作于方式 3TR1=1; / 开启定时器TI=0;RI=0;void main()unsigned int Key;unsigned int j;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; /

温馨提示

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

评论

0/150

提交评论