多机通信和单片机与PC机通信.doc_第1页
多机通信和单片机与PC机通信.doc_第2页
多机通信和单片机与PC机通信.doc_第3页
多机通信和单片机与PC机通信.doc_第4页
多机通信和单片机与PC机通信.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

多机通信和单片机与pc机通信 一、系统概述随着单片机和微机技术的不断发展,由pc机和多台单片机构成的多机网络监控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,windows环境下后台微机在数据库管理上具有明显的优势,二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了向以网络为核心的分布式多点系统发展的趋势。在许多工业生产中,用计算机对生产过程实行实时监控,对下位单片机采集来的数据进行实时数据处理,以及控制信号的产生与传输等功能。在这种工业生产的特定环境下,计算机要与过程控制的实时信号相联系,因此要求计算机能实现对串行端口的直接操作。二、总体方案 2.1. 原理框图三、多机通信原理电路 四、系统虚拟仿真操作方法:先点击protues的开始按钮,在闭合与从机1或2通信时,在按下键盘,观察led,在闭合与pc通信开关时,右键点击pc选择virtual terminal选项观察结果。与从机1通信与从机2通信与pc机通信pc机通信的结果主机程序:org 0000hajmp mainfeature_code equ 22h ; 保存键值特征字节码key_val equ 23h ; 键值get_key0 equ 24h ;buf equ 25htemp equ 26hadder equ 27hslave equ 28hdta_or_com equ 29hvalue equ 30hstr1 equ 31hlcd_data equ 32horg 0080hmain:mov key_val, #0c0h ;键盘没键按下的时候送的初值call lcd1602 ;lcd1602初值化call init_lcd ;lcd1602初值化mov value,#80h ;数据指针定位到第一行第一列 clr p3.2 ;p3.2表示rs,rs=0,写命令call write_lcd ;调用写命令子程序mov dptr, #str7call printstring1 ;调用显示host communicate 的子程序mov value,#0c0h ;设置开显示,不显示光标clr p3.2 ;p3.2表示rs,rs=0,写命令call write_lcd ;调用写命令子程序mov dptr, #str2call printstring1 ;调用显示 with的子程序test:loop_1:mov a,p2 ;判断是与单片机1通信的是否开关按下anl a,#01hjnz loop_2 mov value,#0c6h ;数据指针定位到第一行第七列 clr p3.2 ;p3.2表示rs,rs=0,写命令call write_lcd ;调用写命令子程序mov dptr,#str3call printstring1 ;调用显示 1 的子程序loop_2:mov a,p2 ;判断是与p单片机2通信的是否开关按下anl a,#02hjnz loop_3 mov value,#0c6h ;数据指针定位到第一行第七列 clr p3.2 ;p3.2表示rs,rs=0,写命令call write_lcd ;调用写命令子程序mov dptr,#str4call printstring1 ;调用显示 2 的子程序loop_3:mov a,p2 ;判断是与pc机通信的是否开关按下anl a,#04hjnz loop_4 mov value,#0c6h ;数据指针定位到第一行第七列clr p3.2 ;p3.2表示rs,rs=0,写命令call write_lcd ;调用写命令子程序mov dptr,#str5call printstring1 ;调用显示 pc 的子程序loop_4:mov value,#0c6h clr p3.2call write_lcdmov dptr,#str6;call printstring1 ;没有与别的机子通信;test:call key_scan ;调用键盘扫描函数 call get_keymov buf,key_valmov temp,p2 ;通过p2口读要访问的从机地址anl temp,#0fhmov adder, temp ;call init ;串口初始化clr tisetb tb8mov sbuf,adder ;发送地址帧wt1:jnb ti,wt1 ;等待发送clr ti ;发送完毕ti清零call senddata ;发送数据mov a,p2anl a,#04hcjne a,#00h,pc2 mov slave,#03hpc1:mov a,slave;cjne a,#03h,pc2;setb p3.7clr p3.7 ;re=0mov r0, #0mov dptr, #strloop0:;mov sbuf, dptrmov a, r0movc a, a+dptrmov sbuf,awt3:jnb ti,wt3 ;等待发送clr ti ;发送完毕ti清零inc r0cjne a, #00h, loop0call delay_10mssetb sm2setb p3.7 ;re=1pc2:mov slave,#00hljmp testlcd1602:clr p3.2 ;rssetb p3.3 ;rwsetb p3.5 ;enmov p0,#0xff retinit_lcd:call delay1000us ;1500msmov value,#38h clr p3.2call write_lcdcall delay1000us ;500msmov value,#38h clr p3.2call write_lcdmov value,#01h clr p3.2call write_lcdmov value,#06h clr p3.2call write_lcdmov value,#0chclr p3.2call write_lcdretwrite_lcd:mov p0,value;mov rs,dta_or_comclr p3.3setb p3.5call delay1000us ;100msclr p3.5retprintstring1:mov r1,#00hloop9:mov a,r1 movc a, a+dptrmov value,asetb p3.2call write_lcdinc r1cjne a, #00h, loop9 retsenddata:;setb ticlr tb8mov sbuf,bufwt2:jnb ti,wt2clr tiret init:mov tmod,#20h ;定时器t1使用工作方式2mov tl1, #0fahmov th1, #0fahsetb tr1 ;开始计时mov scon,#0d0hmov pcon,#80h ;smod = 1setb p3.4 ;de ;max485使能端setb p3.7 ;reret;p1口矩阵键盘扫描;特征字节码保存在feature_code内存单元key_scan:mov p1, #0f0hmov a, p1anl a,#0f0hcjne a, #0f0h, next1ajmp key_scan_endnext1:lcall delay_10ms ; 延时去抖动mov p1, #0f0hmov a, p1anl a,#0f0hcjne a, #0f0h, next2 ;有键按下ajmp key_scan_endnext2:mov r0, #0fehmov r1, #4 ; 逐行扫描,一共4行loop:mov a, r0mov p1, amov a, p1anl a, #0f0hcjne a, #0f0h, next ; 此行无键扫按下,则扫描下一行ajmp next3next:orl a, #0fhcpl amov r2, a ; a临时保存到r2mov a, r0cpl aorl a, r2mov feature_code, a ; 返回特征字节码,为1的位即对应于行和列retnext3:mov a, r0rl a ; 行扫描码左移一位;orl a, #01hmov r0, a;dec r1djnz r1, loop ; 4行未扫描完 key_scan_end:mov feature_code, #00h ; 无键按下,返回特征字节码0ret;根据特征字节码求键值get_key:mov a, feature_code ; 取征字节码; 第一行row1_col1:cjne a, #11h, row1_col2mov key_val, #0c0h ; 1行1列,数字0retrow1_col2:cjne a, #21h, row1_col3mov key_val, #0f9h ; 1行2列,数字1retrow1_col3:cjne a, #41h, row1_col4mov key_val, #0a4h ; 1行3列,数字2retrow1_col4:cjne a, #81h, row2_col1mov key_val, #0b0h ; 1行4列,数字3ret;第二行row2_col1:cjne a, #12h, row2_col2mov key_val, #99h ; 2行1列,数字4retrow2_col2:cjne a, #22h, row2_col3mov key_val, #92h ; 2行2列,数字5retrow2_col3:cjne a, #42h, row2_col4mov key_val, #82h ; 2行3列,数字6retrow2_col4:cjne a, #82h, row3_col1mov key_val, #0f8h ; 2行4列,数字7ret;第三行row3_col1:cjne a, #14h, row3_col2mov key_val, #80h ; 3行1列,数字8retrow3_col2:cjne a, #24h, row3_col3mov key_val, #90h ; 3行2列,数字9retrow3_col3:cjne a, #44h, row3_col4mov key_val, #88h ; 3行3列,数字10retrow3_col4:cjne a, #84h, row4_col1mov key_val, #83h ; 3行4列,数字11ret;第四行row4_col1:cjne a, #18h, row4_col2mov key_val, #0c6h ; 4行1列,数字12retrow4_col2:cjne a, #28h, row4_col3mov key_val, #0a1h ; 4行2列,数字13retrow4_col3:cjne a, #48h, row4_col4mov key_val, #86h ; 4行3列,数字14retrow4_col4:cjne a, #88h, get_key_endmov key_val, #8eh ; 4行4列,数字15get_key_end:retdelay1500ms: ;误差 0us 1500ms mov r7,#7fhdl1: mov r6,#60hdl0: mov r5,#3ch djnz r5,$ djnz r6,dl0 djnz r7,dl1 retdelay500ms: mov r7,#17hdl2: mov r6,#98hdl3: mov r5,#46h djnz r5,$ djnz r6,dl3 djnz r7,dl2 retdelay1000us: ; 1ms mov r7,#01hdl11: mov r6,#8ehdl00: mov r5,#02h djnz r5,$ djnz r6,dl00 djnz r7,dl11 ret;延时10msdelay_10ms: mov r7,#01hdl7: mov r6,#26hdl8: mov r5,#82h djnz r5,$ djnz r6,dl8 djnz r7,dl7 retstr: db q, i, o, n, g, y, i, n, g,13, 10, 00hstr7: db h,o,s,t, ,c,o,m,m,u,n,i,c,a,t,e, ,w,i,t,h,13, 10, 00hstr2: db w,i,t,h,13, 10, 00hstr3: db 1, ,13, 10, 00hstr4: db 2, ,13, 10, 00hstr5: db p,c,13, 10, 00hstr6: db , ,13, 10, 00hend从机程序:org 0000hajmp maintemp equ 22hadder equ 23hbuf equ 24horg 0080hmain:mov temp,#0ffhmov a,p1;anl a,#0fhmov adder, a ; 获取本机地址setb p2.3 ;led 发光管不亮call init ;串口初始化loop: ;进入设备应答setb sm2 ;只接收地址帧loop1: ;如果接收到的地址帧不是本机地址,则继续等待mov a,tempcjne a,adder,recvajmp loop2recv:clr riwait:jnb ri,waitmov temp,sbufclr riajmp loop1loop2: clr sm2call recvdatamov a,tempjnz end1mov p0,bufclr p2.3call delay_10mssetb p2.3end1:ljmp loopinit:mov tmod,#20h ;定时器t1使用工作方式2mov tl1, #0fah mov th1, #0fahsetb tr1 ;开始计时mov scon,#0d0hmov pcon,#80h ;smod = 1clr p3.4 ;de,max485使能端retrecvdata:loop3:jnb ri,loop3jnb rb8,loop4mov temp,#0eehretloop4:mov a,sbufmov buf,aclr rimov temp,#00hret ;延时10msdelay_10ms: mov r7,#01hdl1: mov r6,#26hdl0: mov r5,#82h djnz r5,$ djnz r6,dl0 djnz r7,dl1 retend结束语虽然我做的系统是很小个,但圆满的完成整个系统也花了不少时间,最主要是是前期的准备阶段,刚接到课程设计题目时,我并没有马上就动手做实验,也许这因为自己追求完美和潘老师教学严谨的缘故吧,一开始我就复习单片机原理教材的单片机串行口、串行通信的基本概念,串行口的应用,串行口通信总线标准及接口电路,接着就预习微机控制原理的总线接口技术rs232、rs485、spi、ic总线,接着就看潘老师买给我们的单片机原理与应用仿真的单片机串行通信,再接着就是看潘老师给我们团队的一部分单片机书中的所有单片机串行通信,我很想把我的系统做的很完美,很认真的弄明白了关于串行通信的所有知识点,学习其实也是一种享受的过程,当投入到知识海洋的时候,有一种思维的逻辑递归的过程,我总是用联想的办法把刚要接触的知识,用已学过知识框架去学习,把刚学的知识跟学过的知识搭成一座桥梁,形成一个框架,而且我喜欢各科的知识点联系起来,比如在做pc机与单片机通信时,我想了很久实际生活中我有没有见到这样的设备,结果我想起来了,在医院做胸透、胃镜和肠镜时,用的就是pc机和单片通信,而且也用到了一门很重要的学科数据图像处理,当我刚想到这个设备是我们计算机系完成的,还蛮高兴的。当在做单片机与单片机通信时,我首先想到的是网络,也许是因为上学期刚上过网络课的缘故吧,我就想这样可以够成类似局域网的拓扑结构,便于一个部门或一个单位的管理,在工业中更是有发展前景,现在很人都在倡导实践,而我觉得理论知识还是占主导地位,只是老师教给我们的东西我们不懂得学以致用而已,如果

温馨提示

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

评论

0/150

提交评论