欢迎来到天天文库
浏览记录
ID:51710349
大小:47.45 KB
页数:6页
时间:2020-03-15
《用C语言编写简单的接口程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、用C语言编写简单的接口程序北京理工大学(100081)张俊在通信中,为了保证运行安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通信的各个计算机CPU速度不一样(这会导致?错帧敚?以及发送机发送数据速度比接收机接收速度快(这会导致?过冲敚?为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)进行如下简单的编码:0H:发送的是新的半个字节数据1H:重新发送上次传送错误的数据2H:文件名结束3H:文件结束这样,每
2、当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通过信息位来区分。下面就是我用C语言编写控制串行口的程序。以一个发送文件的程序为例,介绍一下用C语言实现对接口的控制。源程序为:#include“dos.h"#include“stdlib.h"#include“stdio.h"#definePORT0voidSendFile(charfname);/*发送文件*/voidSe
3、nd(ints);/*发送一个字节*/voidSendFileName(charfname);/*发送文件名*/voidReceiveFile();/*接收文件*/voidGetFileName(charf);/*接收文件名*/voidInitPort(intport,unsignedcharpara);/*初始化端口*/voidSendPort(intport,charc);/*端口发送*/intReadPort(intport);/*读端口字节*/intCheckState(intport);/*检查端口状态*/int
4、Receive(intport,intG);/*接收一个字节*/main(argc,argv)intargc;char*argv[];{if(argc<2){printf(“PleaseinputR(receive)orS(sent)parametre:");exit(1);}InitPort(PORT,231);if(argv[1]==‘S')/*检查选择的有效性*/SendFile(argv[2]);elseif(argv[1]==‘R')ReceiveFile();else{printf(“Errorparament
5、.Pleaseinputagain.");exit(1);}}voidSendFile(fname)char*fname;{FILE*fp;intch,s;if(!(fp=fopen(fname,“rb"))){printf(“Can'topenthefile.");exit(1);}SendFileName(fname);do{ch=(int)getc(fp);if(ferror(fp)){printf(“Errorreadingfile.");break;}s=ch%16;/*取文件中一个字节的低4位*/Sen
6、d(s);s=ch/16;/*取文件中一个字节的高4位*/Send(s);}while(!feof(fp));s=46;/*发送文件结束信息*/Send(s);Send(s);fclose(fp);}voidSend(s)ints;{intG;SendPort(PORT,s);G=ReadPort(PORT);/*等待握手信号*/if(s!=G)s=s+16;do{SendPort(PORT,s);G=ReadPort(PORT);/*等待握手信号*/}while(s!=G);}voidSendFileName(fname
7、)char*fname;{ints,ch;printf(“Nowtransmitthefile.Pleasewait...");while(*fname){ch=(int)fname++;s=ch%16;/*取文件名中一个字节的低4位*/Send(s);s=ch/16;Send(s);/*取文件名中一个字节的低4位*/}s=32;/*发送文件名结束标志*/Send(s);Send(s);}voidReceiveFile(){FILE*fp;charch;intG1,G2,G3;charfname[15];GetFileNa
8、me(fname);printf(“Receivingfile%s.",fname);remove(fname);if(!(fp=fopen(fname,“wb"))){printf(“Can'topenoutputfile.");exit(1);}/*循环为检测每次接受的数据是否为新数据,如果
此文档下载收益归作者所有