RS232组网通信实验_第1页
RS232组网通信实验_第2页
RS232组网通信实验_第3页
RS232组网通信实验_第4页
RS232组网通信实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验一RS-232组网通信实验pc及其兼容工控机的异步通讯接IIPC及其兼容工控机都有两个异步通讯接II:COM1和COM2,其关键部件是通用异步收发器(UART)INS8250。INS8250的内部有10个寄存器,分别用于通讯参数的设置、线路及MODEM的控制与状态查询、数据收发及中断管理等。要在中断方式卞收发数据,必须对INS8250的寄存器直接操作,各寄存器名称及其相应的端II地址列于表lo奇存器名称COM1奇存器地址COM2奇存器地址发送保持奇存器(THR)3FBH2F8H接收缓冲寄存器(RBR)3F8H2F8H除数侦存器低字节(DLL)3F8H2F8H除数赖存器亦字节(DLM)3F9H2F9H中断允许襦存SS(IER)3F9H2F9H中断掠识寄存器(IIR)3FAH2FAH线路控创寄存器(LCR)3FBH2FBHMODEM控制奇存«(MCR)3FCH2FCH线路状玄寄存器(LSR)3FDH2FDH表1各奇存器名称及其相应的端口地址由表1可知:THR、RBR和DLL占用同一个端丨1地址3F8H(2F8H),IER和DLM也占用同一个端II地址3F9H(2F9H),对它们进行访问时,如果设置LCR的最高位为1,访问的是除数寄存器;如呆设置LCR的最高位为0,则访问的是THR、RBR和IER。而THR是只写寄存器,RBR是只读寄存器,在LCR的最高位设置为0时,对端II地址3F8H(2FSH)的写入操作访问的是THR,读出操作访问的是表1各奇存器名称及其相应的端口地址硬件连接方式:将2台PC机的COM1/COM2串行通信II通过9针D型接II3线连接。INS8250有关寄存器的设置串行II的初始化主要是对INS8250的有关寄存器进行设置,以确定通讯的数据格式、波特率、中断的触发方式等。确定数据格式数据格式是通过设置线路控制寄存器(LCR)来确定的,LCR的定义如下:JDLABSBSPEPSPEN'STBwsuWSLO|其中:WSL1、WSL0用于选择每个发送或接收的串行字符的位数,分别设置这两位为00、01、10、11时,对应的字长依次是5位、6位、7位、8位;STE用于确定停止位的位数,STB=0时使用1位停止位,STB=1时,如果WSL1、WSL0设置为00,使用1.5位停止位,其它情况下使用2位停止位;PEN用于选择是否允许奇偶校验,PEN=0时,不进行奇偶校验,PEN=1时有奇偶校验:此时,EPS选择校验方式,EPS=0时是奇校验,EPS=1时是偶校验;SP用于选择是否在奇偶校验位和停止位之间插入奇偶标志位,SP=O时不插入,SP=1时插入1位奇偶标志位,偶校验时插一个0,奇校验时插入一个1;SE是设置间断控制位,SB=1时输出数据强迫为0,SB=0时可进行正常的数据收发:DLAB是除数寄存器访问位,DLAB=1时访问除数寄存器,DLAB=0时访问THR、RBR和IER°设置波特率INS8250内部包含一个可编程的波特率发生器,它允许用1〜65535的任意除数对1.8432MHz的输入频率进行分频,分频后的信号即波特率发生器的输出频率,而波特率是波特率发生器输出频率的1/16。由此可知,除数=1843200/(波特率xl6)o16位的除数应在初始化时写入除数锁存器。中断机制的引发INS8250可由4个事件中的任一个来引发一个中断,这4个事件依此是:接收数据有效:发送保持寄存器空;接收数据出错;MO-DEM状态改变。通过IER的bitO〜b”3可依次设置它们是否被允许,某位为1时相应的事件允许引发一个中断,为0时禁止。INS8250通过INTRPT引脚的高电平向系统发出中断请求,为了使INS8250能够向系统发中断,MCR的第三位必须置1。PC使用8259中断控制器,它可以管理来自外设的8个各自独立的中断请求信号IRQ0〜IRQ7,其中IRQ4和IRQ3分别用于COM1和COM2的中断申请。8259内部有一个中断屏蔽寄存器(IMR),端口地址为21H,它的bitO〜bit7分别对应IRQ0-IRQ7,通过设置其中的某一位为0以允许与其对应的中断请求。(三) 程序设计要点在程序设计时,应该考虑以下问题:设置中断向量,以保证CPU执行中断服务程序时有一个正确的入II地址。可使用C语言的库函数setvect()和getvec©对中断向量进行设置和读取。中断服务程序什么时候结束,CPU无法知道,8259中断控制器也无法知道,必须通过指令通知8259中断控制器。对于PC机,这条指令就是向端II地址20H写入一个命令字20H。为保证通讯的可靠性以及不耽误CPU响应其它中断,中断服务程序应尽量短,一些费时的操作如数据存盘等应放在中断服务程序以外。在把一个数据写入发送保持寄存器(THR)之前,必须检查线路状态寄存器LSR,以保证发送保持寄存器为空。初始化中断系统时,应该关闭中断,初始化完成后再开放。可使用C语言的库函数disable。和enableQ来完成。(四) 推荐程序调实方式:在1台PC机上安装具有如下界面的软件工具一一“串【I调实助手”(图1),在另一台PC机上分别调实发送和接收程序;②在2台PC机上联合调实完整的发送/接收程序。(五)推荐基础程序1一一TurboC语言程序程序说明:本程序是通过硬件中断方式完成RS-232接收与发送串行通信的。使用COM1进行通信时,产生的硬件中断号为IQR4,对应的中断向量为OCHo数据的接收采用环形列队的方法,由函数inponb()来完成。该程序运行后,用户可由其他设备向本机的COM1串行II发送数据,你可以看到在屏幕的一个窗「I中显示到接收的字符串;数据发送程序参数的设置由函数pon_Hiit()来完成,数据发送由函数outpoi-tb()来完成。参考书:徐金梧,杨德斌,徐科.TuiboC实用人全。机械工业出版社.1996年.563-566尹彥芝.C语言常用算法与子程序.清华人学出版社.1993年.239-241袁征,杨仁树,严建新.C语言编程技巧程序集•电子工业出版社・1993年.233-234接收数据子程序如下:/*通过中断方式由RS-232接收数据♦/iiiclude<stdlib.h>inch】de<dos.h>mclude<piocess.h>iiiclude<conio.h>iiiclude<bios.h>iiiclude<ct}?pe.h>iiiclude<stdio.h>iiiclude<fcntl.h>#defineBUFFLEN10800#defineBUFFMAX900voidInit(void);voidcheck(unsignedcharstates);voidenablepoits(void);voiddisableports(void);voidmtenuptforasyiicint(void);voidmtenupt(*asyncvect)(void);voidputb(unsignedcharch);unsignedcharinchaLflag=0;unsignedcharBuffei[BUFFLEN];intbuffhi=O;intbuffout=0;inti=0ji=0;unsignedchartemp_buffer[BUFFMAX];unsignedcharch,flag;/*开放串行「1中断*/voidenablepoits(void){unsignedcharB;asyncvect=genrect(0x0c);disable();mportb(0x3fB);mportb(0x3fe);mportb(0x3fb);mportb(0x3fa);outpoitb(0x3fc.0x08|0x0b);outpoitb(0x3f^.0x01);B=mpoitb(0x2l)&0xef;outpoitb(0x21,B);set\Tect(OxOc,asvncint);enableQ;}严中断服务程序*/voidintemiptfarasvncint(void)iunsignedcharch;ch=inportb(0x3f8);fhg=l;putb(ch);outpoitb(0x20,0x20);}/*关闭串行口中断*/voiddisableports(void)idisableQ;oi】tportb(0x3仅0x00);outpoitb(0x3fc.0x00);outpoitb(0x21,inportb(0x21)&0xl0);enableQ;set\Tect(0x0c,asyncvect);}/*对COMI串行I1有关参数的初始化*/voidInitQoutportb(0x3fb,0x80);outportb(0x3f8、OxOc);outportb(0x3f9,0x00);outpoitb(0x3fb,0x1f);outportb(0x3fc,0x08|0x0b);outportb(0x3f9,0x01);}voidcheck(unsignedcharstates){wlule((mponb(0x3fd)&stat亡s)==0);}voidputb(unsignedchaich){inttemp=0:if(++ii>BUFFMAX)ii=O;temp=buffin;if(++buffin=BUFFLEN)buffiii=O;if(buffhi!=buffout)Buffer[buffui]=ch;elsebuffin=temp;temp_buffer[ii]=ch;}/*从数据端口3F8H中读取相应的数据*/unsignedchaigetb(void){if(buffout?=buffhi){if(-H-buffbut=BUFFLEN)buffbut=O;return(BufIei[bufibut]);}elserenirn(Oxff);}niainQ{clrscrO;/*绘制数据接收窗门*/window(3,2,41,10);textcolor(O);textbackground(3);clrscrQ;gotoxy(3,2);cprmtf(HReceivefromCOM!gotoxy(34);cpiintfC9600bps,8bit,2stopxven'di");gotoxy(3.6);textcolor(223);cprmtf^'Tressanykeycountiune!getchQ;window(45,2,79,22);textbackground(1);textcolor(14);clrscrQ;enablepons();clrscrQ;for(;;){if(flag==l){ch=getb();pnntf(”%c”,c町;flag=O;}if(kbhit()!=O){exit(l);disablepoilsO;}}发送数据程序如下:/*通过中断方式向RS-232发送数据*/mclude,,dos.h,'includeHstdlib.h"#mcludenprocess.hnmcludeHcomo.hHmcludeHbios.hHmcludeHctype.hH#include,,fcntl.hn#includeHstdio.hn#definePORT0/*对COMI串行I1有关参数的初始化*/voidport_Hut(port,code)mtport;unsignedcharcode;voidpoitJnitQ;umonREGSr;r.x.dx=poit;r.h.ah=O;r.h.al=code;mt86(0xl4,&R&Q;}chara;inti=0;cli-sci-O;/*绘制数据发送窗口*/window(3,2,41,10);textcolor(O);textbackgiound(3);cliscrQ;gotoxv(3,2);cpnntff'TransferfromCOMl:\nj;gotoxv(354);cprintf(”9600bps,8bit,2stop,even\nH);gotoxv(3,6);cpriiitf(npress*keyforescape\nH);gotoxv(3,8);textcolor(223);cpriiitf(npressanykeytostait\iin);getch();window(45279,22);textbackgiound(1);textcolor(14);pon_imt(PORT,255);while(i!=l)ia=getcheQ;/*由键盘输入数据*/if(a='*,)break;elseoutpoitb(0x3fB.a);/*发送数据*/

推荐基础程序2—一VisualC语言程序程序说明:本实验是在MicrosoftVisualC卄6.0编程坏境卜,利用MSComm控件编程实现两台计算机之间通过串II对话的界面。在该界面中,一台计算机在发送对话框内写入需发送的文本,点击发送按钮后,对方计算机点击接收按钮接收此文本,并在接收对话框内显示出来。编程参考步骤:打开MicrosoftVisualC++6.0编程界面,选择FILE菜单下的New子菜单,在弹出的对话框Projects属性页内选择MFCAppWizaid(ext)项。填上项目名称,并写好存储位置。点击OK按钮。弹出对话框如图2所示:选择Dialogbased单选框。选择Fmish按钮。弹出对话框如图3所示:选择OK按钮。在ResourceView树型视图内,双击Dialog文件夹,找到对话框,使用控件编辑对话框如图4所示:修改对话框中各控件的属性,并生成所需的变量类型和函数。MSComm控件国的选择方法:选择Project菜单〉AddToProject子菜单>ComponentsAndControls子菜单后,在弹出的对话框中选择ActiveXcontrols文件夹,然后选择MicrosoftCommumcationsControlversion6.0即可。1FCApplxxird-Stepl 團Whaitypeofapplicationwouldyouliketocreate?SingledocumentM询iple(kiojfrwnlsDialogbasedCDialogbasedWbailanguagewouldyonlikeyourtesourcesS?|中文冲国)|APPWZCHS・DLL|<flackHext> Cancel<flackHext> Cancel编制程序代码:在.cpp文件各函数的相应位置编制所需通信程序,编译链接生成可执行文件。在两台计算机之间通话验证编制程序的正确性。在BOOLCTestconiDlg::OnIiiitDialogO中添加如下代码。m_nisconuii.SetConmiPort(l);/*选择串丨I1*/if(!m_mscomm.G

温馨提示

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

评论

0/150

提交评论