面就是用C語言編寫控制串行口的程序_第1頁
面就是用C語言編寫控制串行口的程序_第2頁
面就是用C語言編寫控制串行口的程序_第3頁
面就是用C語言編寫控制串行口的程序_第4頁
面就是用C語言編寫控制串行口的程序_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、面就是用C語言編寫控制串行口的程序。#include "dos.h"#include "stdlib.h"#include "stdio.h"#define PORT 0void SendFile(char *fname); /* 發(fā)送文件*/void Send(int s); /*發(fā)送一個字節(jié)*/void SendFileName(char *fname); /*發(fā)送文件名*/void

2、 ReceiveFile(); /*接收文件*/void GetFileName(char *f); /*接收文件名*/void InitPort(int port,unsigned char para); /*初始化端口*/void SendPort(int port,char c); /*端口發(fā)送*/int ReadPort(int port); /*讀端口字節(jié)*/int CheckState(int 

3、port); /*檢查端口狀態(tài)*/int Receive(int port,int *G); /*接收一個字節(jié)*/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; /*取文件中一個字節(jié)的低4位*/Send(s);s=ch/16; /*取文件中一個字節(jié)的高4位*/Send(s);while(!feof(fp);s=46; /*發(fā)送文件結(jié)束信

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; /*取文件名中一個字節(jié)的低4位*/Send(s);s=ch/16;Send(s); /*取文件名中一個字節(jié)的低4位*/s=32; /*發(fā)送文件名結(jié)束標(biāo)志*/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);/*循環(huán)為檢測每次接受的數(shù)據(jù)是否為新數(shù)據(jù),如果不是,*/*則用此次接收的數(shù)據(jù)覆蓋上次接收的數(shù)據(jù)*/G1=ReadPort(PORT);G2=Receive(PORT,&G1);do G3=Receive(PORT,&G2);c

9、h=(char)(G1%16+G2*16);/*恢復(fù)分開的數(shù)據(jù),組合高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()/*如端口長期無數(shù)據(jù)可人為終止等待*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論