版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面就是用C语言编写控制串行口的程序。#include "dos.h"#include "stdlib.h"#include "stdio.h"#define PORT 0void SendFile(char *fname); /* 发送文件*/void Send(int s); /*发送一个字节*/void SendFileName(char *fname); /*发送文件名*/void
2、 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
3、port); /*检查端口状态*/int Receive(int port,int *G); /*接收一个字节*/main(int argc,char *argv)if(argc<2)printf("Please input R(receive) or S(sent) parametre:");exit(1);InitPort(PORT,231);if(*argv1=''''S'''')
4、 /*检查选择的有效性*/SendFile(argv2);else if(*argv1=''''R'''')ReceiveFile();elseprintf("Error parament.Please input again.");exit(1);void SendFile(char *fname)FILE *fp;int ch,s;if(fp=fopen(fname,"rb")=NULL)print
5、f("Can''''t 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; /*发送文件结束信
6、息*/Send(s);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 fil
7、e.Please wait.");while(*fname)ch=(int)fname+;s=ch%16; /*取文件名中一个字节的低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
8、 file %s.n",fname);remove(fname);if(fp=fopen(fname,"wb")=NULL)printf("Can''''t open output file.n");exit(1);/*循环为检测每次接受的数据是否为新数据,如果不是,*/*则用此次接收的数据覆盖上次接收的数据*/G1=ReadPort(PORT);G2=Receive(PORT,&G1);do G3=Receive(PORT,&G2);c
9、h=(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("nTransmit finished.");fclose(fp);int Receive(port,G)int port,*G;int GM;SendPort(port,*G
10、);GM=ReadPort(port);if(GM/16=0)return GM;else if(GM/16=1)do*G=GM;SendPort(port,GM);GM=ReadPort(port);while(GM/16=1);return GM;void GetFileName(char *f)int G1,G2,G3;char ch;G1=ReadPort(PORT);G2=ReadPort(PORT);doG3=Receive(PORT,&G3);ch=(char)(G1%16+G2/16);*f=ch;*
11、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,®,®);void SendPort(por
12、t,c)int port;char c;union REGS reg;reg.x.dx=port;reg.h.al=c;reg.h.ah=1;int86(0x14,®,®);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,®,®);if(reg.h.ah&128)printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 33419-2016环氧乙烷灭菌生物指示物检验方法》
- 2025年湖北十堰东风高级中学自主招生物理试题真题
- 2026届高三生物二轮复习课件:大单元2 细胞的生存需要能量和营养物质 限时练7 植物对特殊环境的适应性
- 7 两件宝【从基到通】一年级上册语文统编版
- 医疗数据安全投入效益评估模型
- 医疗数据安全应急演练的流程标准化研究
- 医疗数据安全存储的多层加密策略
- 胸外科出科课件
- 5G-A工业智能化应用项目教程 课件(6)5G-A NR核心网
- 【9化第三次月考】亳州市蒙城县2025-2026学年九年级上学期第三次月考化学试题
- 锅炉房施工进度管理表模板
- 2025年天水村文书考试题及答案
- 课程顾问的年终工作总结
- 仪表设备点检员综合考核试卷及答案
- 公交车站设施维护管理规范
- 木门工程售后方案(3篇)
- 2025至2030中国淡竹叶行业发展分析及产业运行态势及投资规划深度研究报告
- 挂名监事免责协议书模板
- 宁波职高高一数学试卷
- 2025-2026学年苏教版(2024)小学数学二年级上册(全册)教学设计(附目录P226)
- 分布式光伏电站运维管理与考核体系
评论
0/150
提交评论