计算机接口与通信课程设计.DOC

上传人:天*** 文档编号:965136 上传时间:2018-11-09 格式:DOC 页数:9 大小:71KB
下载 相关 举报
计算机接口与通信课程设计.DOC_第1页
第1页 / 共9页
计算机接口与通信课程设计.DOC_第2页
第2页 / 共9页
计算机接口与通信课程设计.DOC_第3页
第3页 / 共9页
计算机接口与通信课程设计.DOC_第4页
第4页 / 共9页
计算机接口与通信课程设计.DOC_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、计算机接口与通信课程设计两机通信实验报告班级:2002 级计算机 6 班学号:200208014608姓名:黄晓彬任教老师:李之彦提交日期:2004 年 1 月 6 号一、设计目的及所需设备:了解 PC 机串行口的使用;所需设备为:PC 机,RS232 插座及连线;二、串行口的有关硬件资料1. 9 芯 RS232C 接口标准:(1) 引脚 1:CD,载体检测;(2) 引脚 2:RXD,接收数据;(3) 引脚 3:TXD,发送数据;(4) 引脚 4:DTR,终端准备好;(5) 引脚 5:信号地;(6) 引脚 6:DSR,MODEM 准备好;(7) 引脚 7:RTS,请求发送;(8) 引脚 8:C

2、TS,清除发送;(9) 引脚 9:RI,响铃指示;2.9 芯 RS232C 的零 MODEM 连接方法三、设计任务:a) 用 RS232 的零 MODEM 的连接法连好两机的连线;b) 用 DEBUG 的 O 命令将一数发送到串行口(2F8H/3F8H) ;然后在另一台机上用 I 命令读入串行口的内容。如果发送的内容与接收的内容一致,说明两机已经连好线,否则必须检查连线,直到两机可通信为止;c) 编一程序,将一台机的键盘输入的键值通过 RS232 口送到另一台机,并在 CRT 上显示键值;d) 编一程序,通过 RS232C 口进行一台机到另一台机的文件复制。e)四、设计思路:根据 RS232

3、串行口的电气特性和电平特性,还有 8250 串行口的发送P 2 RXD3 TXDC 7 RTS8 CTS机 5 GND6 DSR4 DTRTXD 3 PRXD 2RTS 7 CCTS 8GND 5 机DSR 6DTR 4接收原理,在程序开始时一定要先对 8250 进行初始化,设置相应的参数,使 8250 串行口工作在合理的工作状态。进行相关协议的设置既什么时候发送,什么时候接收,接收跟发送通过什么来进行响应,保证文件传送的正确性。在这里还要兼顾文件的传输速度问题,要是两台机都采用查询的话,传送速度肯定会比较慢,为了使速度能够有所提高,这里利用 8250的中断请求机制,在接收时用中断接收。最后就

4、是文件的结束问题。文本文件有文件结束符,但是其他文件就没有,或者说是结束符不知道具体是什么。为了能传送大部分的文件,这里采用设置缓冲区,确切的说是定义两个相同长度的数组,一个用于接收,一个用于发送。五、详细设计:a) 物理调试:首先接好线,使两台机通过 DEBUG 能够正常通信,为下面程序的调试消除物理故障原因。b) 程序的编制:首先:程序的初始化;设置 8250 的数据祯格式为 8 个数据位,一个停止位,没有奇偶校验,波特率为 115200,开 8250 中断允许接收中断。其次:编制中断服务程序。由于连接到 COM1,这里先保存原来 0C 中断向量的入口地址,然后修改 0C 中断向量的服务程

5、序入口地址,在程序开始时改写,在关闭串口时再把原来的中断服务程序入口地址写回。具体编制中断接收服务程序,在有中断时,把送来的一个字符写如临时数组中,等到数组满时写文件,一直到文件结束,这里要判断文件如何结束。因为是用 fread 把文件读出来,这个函数返回读出的字符个数,把一次读出的字符个数放在数组的第一位,后面才是要真正发送的文件字符。前面 N 次肯定能够读出所要读出的字符个数,但最后一次读出的字符个数就一般会小于所设置的读出值。在接收那里就是根据每块发来的字符长度来判断文件是否结束的。还有,因为考虑到传字符跟传文件的一些不同,在要开始传时发一个符号进行区别。再次:查询发送程序段的编制。先从

6、文件里读出一定长度的字符,接着查看 8250 线路状态寄存器的发送保持寄存器的状态,只要它是空就把数组里的字符一个个发送出去,每发完一个字符接着发第二个时都查询,只要为空才发送,否则等待,知道为空。最后:程序的其他部分设计。包括界面设计和流程设计。这里省略。六、源程序:#include#include#include#include#include#include#include#include#include#define BUFFMAX 100 /*缓冲区大小*/void Init(void); /*函数和变量声明*/void enableports(void);void disablep

7、orts(void);void interrupt far receive(void);void (interrupt *receive_mode)();char BuffinBUFFMAX;char BuffoutBUFFMAX;int start=0,fstart=0,comp=0,in=0,count=0;int flag=0,key=0,ckey=0,fkey=0,end=0;struct time t1,t2;FILE *fin,*fout;void enableports(void) /*开 8250 串行口*/unsigned char B;receive_mode=getvec

8、t(0x0c); /*取原来中断服务程序的入口地址*/disable(); /*关中断*/outportb(0x3fc,0x0b); /*输出控制字给 8250MODEM 控制寄存器*/outportb(0x3f9,0x01); /*允许接收中断*/B=inportb(0x21) /*开放 8259IRQ4 中断允许位*/outportb(0x21,B);setvect(0x0c,receive); /*把中断接收服务程序的入口地址填入中断向量表*/enable();void interrupt far receive(void) /*中断接收服务程序*/char ch;ch = inport

9、b(0x3f8);if(ckey=2) /*接收字符*/if(ch!=!)Buffinin+=ch;else flag=2;ckey=0;start=0;if(fkey=2) /*接收文件*/*putchar(ch);*/Buffinin+ = ch;if(in=Buffin0+1)in = 0;fwrite(if(int)Buffin0BUFFMAX-1)flag = 1;fkey=0;start=0;fclose(fin);if(start=0)if(ch=#)ckey=1; /*首先区分是传字符还是传文件*/if(ch=$)fkey=1;start=1;outportb(0x20,0x2

10、0);void disableports(void) /*关闭 8250 串行口*/disable();outportb(0x3f9,0x00); /*关闭 8250 接收中断*/outportb(0x3fc,0x00); /*关闭 8250MODEM 寄存器*/outportb(0x21,inportb(0x21) /*屏蔽 8259IRQ4*/enable(); /*开中断 */setvect(0x0c,receive_mode); /*把原来系统的中断服务程序地址填回 */void Init(void) /*8250 初始化*/outportb(0x3fb,0x80); /*设置除数寄存

11、器*/ outportb(0x3f8,0x01);outportb(0x3f9,0);outportb(0x3fb,0x07); /*设置数据祯格式*/outportb(0x3fc,0x0b);void main() /*主函数*/char chr,choi; int choise,i=1,length,delay=1;char lifename20;do printf(“*n“);printf(“ select the function for the com1:n“);printf(“ com for receive: Enter 1 n“);printf(“ com for send:

12、Enter 2 n“);printf(“ quit : Enter any other key!n“);printf(“*n“);scanf(“%d“,if(choise=1) /*接收部分*/Init();enableports();while(!kbhit()if(fkey=1)printf(“n Do you want to save?n“);fkey=2;if(ckey=1)ckey=2;if(flag=2)printf(“The string received is: n “);for(i=0;iin;i+)printf(“%c“,Buffini);in=0;flag=0;chr=g

13、etch();if(chr=y|chr=Y)printf(“nEnter name for the file you want to save!n“);scanf(“%s“,lifename);if(fin=fopen(lifename,“wb“)=NULL)printf(“open error!“);outportb(0x3f8,y);printf(“Now is conmunicating.n“);while(!kbhit()if(flag=1)printf(“n File has received!n“);flag=0;getch();printf(“n*n“);printf(“ Ent

14、er c to continue conmunicate;n“);printf(“ Enter q to quit!;n“);printf(“*n“); disableports();chr=getchar();while(chr!=qchr=getchar();if(chr=c)clrscr();if(choise=2) /*发送部分*/Init();clrscr();printf(“=n“);printf(“ c: to send charactar;n“);printf(“ f: to send file;n“);printf(“=n“);choi=getch();printf(“%c“

15、,choi);if(choi=c|choi=f)if(choi=c) /*发送字符*/outportb(0x3f8,#); /*发送协议的字符开始符,接收不显示 */chr=getch();while(chr!=e)if(inportb(0x3fd)printf(“%c“,chr);count+;chr=getch(); outport(0x3f8,!);printf(“n %d bytes have been sended!n“,count);count=0;getch();if(choi=f) /*发送文件*/ printf(“nEnter the name of the file you

16、 want to send!n“);scanf(“%s“,lifename);outportb(0x3f8,$); /*发送协议文件开始符*/while(!inportb(0x3f8)chr=inportb(0x3f8);if(chr=y)if(fout=fopen(lifename,“rb“)=NULL)printf(“cannot open this filen“);exit(0);printf(“Now is conmunicating.n“);gettime(doBuffout0=fread( /*发送程序块*/for(i=0;i=Buffout0;i+)delay=1;while(d

17、elay=1)if(inportb(0x3fd)printf(“%c“,Buffouti);delay=0; while(Buffout0=99); /*判断文件是否结束*/gettime(fclose(fout);printf(“n The file has been sended!n“);printf(“ The time for transmiting is : %d:%dn“,t2.ti_min-t1.ti_min,t2.ti_sec-t1.ti_sec);else printf(“The computer you want to conmunicate refuses!n“);pri

18、ntf(“*n“);printf(“ Enter c to continue conmunicate;n“);printf(“ Enter q to quit!;n“);printf(“*n“);chr=getchar();while(chr!=qchr=getchar();if(chr=c)clrscr();start=0,fstart=0,comp=0,in=0,count=0;flag=0,key=0,ckey=0,fkey=0,end=0;while(chr=c);七、可执行程序运行说明:程序开始时已经初始化了 8250,只要选择将该操作端口设置为接收还是为发送。若为发送,则还要选择是

19、发送字符还是发送文件,发送文件时要输入所要发送文件的路径即文件名。若为接收文件,也要输入接收文件的存放路径和文件名。这里有提示你什么时候输入相应的文件名。在进行完一次操作后,可选择继续,也可选择推出;选择继续时,可重新选择端口功能。可以传送的文件类型有:TXT,JPG,MP3,DOC,WAV ,RM ,WMA 等。传送速度为 10K 左右。总的来说,程序的运行界面比较友好,操作也比较简单。八、设计体会与心得:从开始焊线,到编程,再到测试,这个过程遇到了不少问题。最开始在编传字符时是一个个接收,接收一个输出一个,但到后来要传文件时,就遇到了问题,经过了再三考虑,决定接收字符时是遇到协议定义的结束符才把全部输入内容显示出来,接收文件是接满一块写一块。在写中断接收程序时遇到的问题最多。在服务程序里设置太多条件语句的话,里面的执行就会跟预想的不一样,所以后来逐渐减少服务程序里面的条件语句和其它语句,使它达到最简。通过这次的设计,使我更进一步认识中断服务程序的应用及其编制,更加深的体会到所编制程序的扩展性的重要性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。