用C语言编写简单的接口程序.doc

用C语言编写简单的接口程序.doc

ID:51710349

大小:47.45 KB

页数:6页

时间:2020-03-15

用C语言编写简单的接口程序.doc_第1页
用C语言编写简单的接口程序.doc_第2页
用C语言编写简单的接口程序.doc_第3页
用C语言编写简单的接口程序.doc_第4页
用C语言编写简单的接口程序.doc_第5页
资源描述:

《用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);}/*循环为检测每次接受的数据是否为新数据,如果

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。