2机通信,接口与通信课程设计.doc

上传人:土8路 文档编号:10378731 上传时间:2021-05-13 格式:DOC 页数:19 大小:119.50KB
返回 下载 相关 举报
2机通信,接口与通信课程设计.doc_第1页
第1页 / 共19页
2机通信,接口与通信课程设计.doc_第2页
第2页 / 共19页
2机通信,接口与通信课程设计.doc_第3页
第3页 / 共19页
2机通信,接口与通信课程设计.doc_第4页
第4页 / 共19页
2机通信,接口与通信课程设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《2机通信,接口与通信课程设计.doc》由会员分享,可在线阅读,更多相关《2机通信,接口与通信课程设计.doc(19页珍藏版)》请在三一文库上搜索。

1、一.原理介绍1设计目的:设计一套系统,要求能在两台计算机之间以中断方式和查询方式实现串行通信,数据可以采用ASCII字符方式和二进制方式传送。2、串行口的有关硬件资料和实现方法:(1)线路控制寄存器(口地址3FBH/2FBH)D7D6D5D4D3D2D1D0字长选择位0字长选择位1停止位个数位奇偶校验允许位偶校验选择位跟随校验断线检测分频门闩位(DLAB)其中: D4 D3 奇偶校验 D2 停止位 D1 D0 字长X 0 无校验 0 1 0 0 50 1 奇 1 1.5(字长为5位时) 0 1 61 1 偶 1 2(字长6,7,8位时) 1 0 7 1 1 8 (2)线路状态寄存器(3FDH/

2、2FDH) D7D6D5D4D3D2D1D0接收数据准备好(RDA超时错奇偶校验错贞错线路中断发送保持寄存器空(TBE)发送移位寄存器空0(3)中断允许寄存器(3F9H/2F9H,且DLAB0)D7D6D5D4D3D2D1D0允许接收寄存器好中断允许发送保持寄存 中断允许线路故障中断允许Modem中断0000(4)MODEM控制寄存器(3FCH/2FCH)D7D6D5D4D3D2D1D0数据终端准备好(DTR)请求发送(RTS)OUT1OUT2返环000(5)MODEM状态寄存器(3FEH/2FEH)D7D6D5D4D3D2D1D0CTS位发生改变DSR位发生改变收到震铃指示后沿线路信号测试清

3、除发送数据装置准备好震铃指示接收线路载波检测二.连接说明1、9芯RS-232C接口标准:1. 引脚1:CD,载体检测; 2. 引脚2:RXD,接收数据; 3. 引脚3:TXD,发送数据; 4. 引脚4:DTR,终端准备好; 5. 引脚5:信号地; 6. 引脚6:DSR,DODEM准备好; 7. 引脚7:RTS:请求发送; 8. 引脚8:CTS:清除发送; 9. 引脚9:RI:响玲指示;2、当通信距离较近时,可不需要Modem,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双

4、工异步串行通信。下面是零MODEM的最简单接法。 单接法(3线接法) 图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。 1 PC机A 2 3 4 5 6 7 8 912 PC机B34567893、设计所需的设备有IBM-PC机,RS-232C插座与连线。此设计是利用接口RS-232C来实现两机通讯。通过8250芯片来控制COM1和COM2端口来传输和接收数据。(在IBM-PC中,COM1与COM2都是RS-232C接口)。三.程序流程图程序说

5、明和源码主程序void main() char c; int key=1; while(key) clrscr(); printf(n); printf(tt 1.Send strings nn); printf(n); printf(tt 2.Receive strings nn); printf(n); printf(tt 3.Send file nn); printf(n); printf(tt 4.Receive file nn); printf(n); printf(tt 5.Exit nn); printf(nnttPlease choose :); scanf(%c,&c); s

6、witch(c) case 1: clrscr(); P8250(); sendChar(); break; case 2: clrscr(); P8250(); receiveChar(); break; case 3: clrscr(); P8250(); sendFile(); break; case 4: clrscr(); P8250(); receiveFile(); break; case 5: key=0; 程序运行界面:由截图中可看到有4个功能选项1、 发送字符串2、 接收字符串3、 发送文件4、 接收文件5、 退出程序初始化8250的程序段void P8250() outp

7、ortb(0x2FB,0x80); outportb(0x2F8,0x01); outportb(0x2F9,0x00); outportb(0x2FB,0x0B); outportb(0x2F9,0x00); outportb(0x2FC,0x03);发送字符,接收字符:void sendChar() /*发送字符*/ int key=1; char ch; printf(Input:); while(key) Lsend(); ch=getch(); printf(%c,ch); if(ch!=13) outportb(0x2F8,ch); else printf(nnttSend com

8、pleted!n); Lsend(); outportb(0x2F8,n); key=0; getch(); void receiveChar() /*接收字符*/ char ch; printf(ttnreceive string:); Lreceive(); ch=inportb(0x2F8); while(ch!=n) printf(%c,ch); Lreceive(); ch=inportb(0x2F8); printf(nttReceive complete! n); getch();发送之前查询发送寄存器是否为空, 输入字符不是回车符继续发送, 发送字符到发送寄存器发送之前查询发送

9、寄存器是否为空, 输入字符不是回车符继续发送, 发送字符到发送寄存器判断数据是否准备好?接收数据输入n?接收结束继续接收NYNY 返回检测寄存器是否为空?输入字符输入n继续发送停止发送YNYN返回发送文件和接收文件void sendFile()/*发送文件*/ FILE *fp; char bufSIZE; char ch; long length4; char filename20; long filesize; long size; int t,i=0; printf(nFile name:); scanf(%s,filename); for(t=0;t24; length1=filesi

10、ze24; length2=filesize24; length3=filesize24; Lsend(); for( i=0;iSIZE) fread(buf,SIZE,1,fp); for(i=0;i0) fread(buf,size,1,fp); for(i=0;i16KB?N发剩余文件发16KB发送完?Size-16kb或重发结束YN Y开始计算文件大小并获得发送握手标志以二进制方式打开文件, 获得文件大小, 发送等待, 发送开始字符,发送文件开始的握手信号, 首先 发送文件长度, 通过移位把32位的数据截成4个8位数据,发送文件长度大小给接收方, 发送等待, 发送文件的大小, 发送文

11、件长度结束, 接收等待, 如果接方创建文件失败,则返回一个信息给发送方, 接收等待, 开始发送文件,每发16k字节发一个字母当校验用, 把文件的16k字节读到缓存, 发送文件, 文件大小减少16k, 发送一个标志?用于检查接收方是否已经接收完16k字节, 接收等待, 如果对方发送回来提示效检字节错,则重发16k字节, 文件指针前移16k字节把剩余的不到16k的字节发送完, 关闭文件.void receiveFile()/*接收文件*/ int t,j=0; FILE *fp; char bufSIZE; char ch,w; char filepath20; char filename20;

12、long size; long length4; printf(nttDo you want to receive file:); for(t=0;t=0&ch=A&ch=z)|(ch=.) printf(%c,ch); printf(nttYes or No(y/n)? ); ch=getch(); if(ch!=Y & ch!=y) printf(nttRefuse the file translation); getch(); return; Lreceive(); Msign=inportb(0x2F8); while(Msign!=S) Lreceive(); Msign=inpor

13、tb(0x2F8); printf(nttGet the size of the file !n); for(j=0;j4;j+) Lreceive(); lengthj=inportb(0x2F8); length0= length024; length1= length116; length2= length2SIZE) printf(Receiving.); for(j=0;j0) for(j=0;j16KB?N接剩余文件接16KB接收完?Size-16kb或重接结束YN Y开始创建缓存接到发送标志,是否发送接收标志首先是是否接受文件选项,计算文件的大小,是否重命名,如果创建文件成功就发

14、送一个字符y给发送方,循环接收16k字节,接收文件数据,当接收到一个标志?时,表示已经接收完16k字节,把接收的数据写到文件中,发送等待,发送一个标志!用于答复发送方已经把16k数据写入了文件中,当没有接收到一个标志?时,表示需要重发刚才的16k字节,接收完剩下的不到16k的字节,写到文件中,接收完成六、心得体会 通过此次串口通信实验,使我掌握了用RS-232C的零MODEM连接法实现两机通讯的基本原理,熟悉了Intel8250的初始化方式和传送信息的方法。刚开始做的时候不知道从哪方面着手,将各个功能模块拼凑起来之后,问题相当的严重,之后很多问题都是自己查书和慢慢调试一点一滴解决,通过这次实验,使我对接口通信方面的开发和调试获益良多。 通过了这次的课程设计,使我对计算机的串行接口和收发信息有了比较深入的了解,增加了我对借口通讯的浓烈兴趣。尤其是通过编程对各芯片有了深刻的理解,逐步摸清各个寄存器的工作原理,再对其编程。调试时,发现各个功能都不够好,无论发送字符还是发送文件都时常出现错误,但通过不断的考虑修改最终搞好了。发掘了其中的乐趣,但其中还是有许多的不足,不尽人意的地方。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1