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

上传人:宝路 文档编号:22277050 上传时间:2017-11-26 格式:DOC 页数:6 大小:44.82KB
返回 下载 相关 举报
用C语言编写简单的接口程序_第1页
第1页 / 共6页
用C语言编写简单的接口程序_第2页
第2页 / 共6页
用C语言编写简单的接口程序_第3页
第3页 / 共6页
用C语言编写简单的接口程序_第4页
第4页 / 共6页
用C语言编写简单的接口程序_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《用C语言编写简单的接口程序》由会员分享,可在线阅读,更多相关《用C语言编写简单的接口程序(6页珍藏版)》请在金锄头文库上搜索。

1、用 C 语言编写简单的接口程序北京理工大学(100081)张俊在通信中,为了保证运行安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通信的各个计算机 CPU 速度不一样(这会导致? 错帧敚?以及发送机发送数据速度比接收机接 收速度快(这会导致? 过冲敚 ?为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)进行如下简单的编码:0H: 发送的是新的半个字节数据1H: 重新发送上次传送错误的数据2H: 文件名结束3H: 文件结束这样,每当发送机发送一个字节以后,就等待接受机发回送信号

2、,这回送信号就是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通过信息位来区分。下面就是我用 C 语言编写控制串行口的程序。以一个发送文件的程序为例,介绍一下用 C 语言实现对接口的 控制。源 程 序 为:include “dos.hinclude “stdlib.hinclude “stdio.hdefine PORT 0void SendFile(char fname); / 发 送 文 件 /void Send(int s); / 发 送 一 个 字 节 /void SendFileName(cha

3、r fname);/ 发 送 文 件 名 /void ReceiveFile();/ 接 收 文 件 /void GetFileName(char f);/ 接 收 文 件 名 /void InitPort(int port,unsigned char para); / 初 始 化 端 口 /void SendPort(int port,char c);/ 端 口 发 送 /int ReadPort(int port);/ 读 端 口 字 节 /int CheckState(int port); / 检 查 端 口 状 态 /int Receive(int port,int G); / 接 收

4、 一 个 字 节 /main(argc,argv)int argc;char argv;if(argc2) printf(“Please input R(receive) or S(sent) parametre:);exit(1);InitPort(PORT,231);if(argv1=S) / 检 查 选 择 的 有 效 性 /SendFile(argv2);else if(argv1=R)ReceiveFile();elseprintf(“Error parament.Please input again.);exit(1);void SendFile(fname)char fname;

5、FILE fp;int ch,s;if(!(fp=fopen(fname,“rb)printf(“Cant open the file.n);exit(1);SendFileName(fname);doch=(int)getc(fp);if(ferror(fp)printf(“Error reading file.n);break;s=ch 16;/ 取 文 件 中 一 个 字 节 的 低4 位 /Send(s);s=ch/16; / 取 文 件 中 一 个 字 节 的 高4 位 /Send(s); while(!feof(fp);s=46; / 发 送 文 件 结 束 信 息 /Send(s

6、);Send(s);fclose(fp);void Send(s)int s;int G;SendPort(PORT,s);G=ReadPort(PORT); / 等 待 握 手 信 号 /if(s!=G)s=s 16;doSendPort(PORT,s);G=ReadPort(PORT); / 等 待 握 手 信 号 /while(s!=G);void SendFileName(fname)char fname;int s,ch;printf(“Now transmit the file.Please wait.);while( fname)ch=(int)fname ;s=ch 16;/

7、取 文 件 名 中 一 个 字 节 的 低4 位 /Send(s);s=ch/16;Send(s); / 取 文 件 名 中 一 个 字 节 的 低4 位 /s=32;/ 发 送 文 件 名 结 束 标 志 /Send(s);Send(s);void ReceiveFile()FILE fp;char ch;int G1,G2,G3; char fname15;GetFileName(fname);printf(“Receiving file s.n,fname);remove(fname);if(!(fp=fopen(fname,“wb)printf(“Cant open output fi

8、le.n);exit(1);/循环为检测每次接受的数据是否为新数据,如果不是,则用此次接收的数据覆盖上次接收的数据/G1=ReadPort(PORT); G2=Receive(PORT, G1);do G3=Receive(PORT, G2);ch=(char)(G1 16 G2 16);/ 恢 复 分 开 的 数 据,组 合 高4 位 和 低4 位 / putc(ch,fp);if(ferror(fp)printf(“nError writing file.);exit(1);G2=Receive(PORT, G3);G1=G3;while(G1/16!=48);printf(“nTrans

9、mit finished.);fclose(fp);int Receive(port,G)int port, G;int GM;SendPort(port, G);GM=ReadPort(port);if(GM/16=0)return GM;else if(GM/16=1)doG=GM;SendPort(port,GM);GM=ReadPort(port);while(GM/16=1); return GM;void GetFileName(f)char f;int G1,G2,G3;char ch;G1=ReadPort(PORT);G2=ReadPort(PORT);doG3=Receiv

10、e(PORT, G3);ch=(char)(G1 16 G2/16);f=ch;f ;G2=Receive(PORT, G3);G1=G3;while(G1/16!=32);printf(“File name transmit finished.n);void InitPort(port,para)int port;unsigned char para;union REGS reg;reg.x.dx=port;reg.h.ah=0;reg.h.al=para;int86(0x14, reg, reg);void SendPort(port,c)int port;char c;union REG

11、S reg;reg.x.dx=port;reg.h.al=c;reg.h.ah=1;int86(0x14, reg, reg);if(reg.h.ah 128)printf(“nSend mistakes!);exit(1); int ReadPort(port)int port;union REGS reg;while(!(CheckState(port) 256)if(kbhit() / 如 端 口 长 期无 数 据 可 人 为 终 止 等 待 /printf(“Press any key to exit.);getch();exit(1);reg.x.dx=port;reg.h.ah=2;int86(0x14, reg, reg);if(reg.h.ah 128)printf(“nRead mistake!);exit(1);return reg.h.al;int CheckState(port)int port;union REGS reg;reg.x.dx=port;reg.h.ah=3;int86(0x14, reg, reg);return reg.x.ax;以上程序可传送各种格式的文件,也有一定的自动 纠错能力,但对于异常情况的处理能力比较弱,读者 可以自己改进。

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

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号