没有收到啊,换个邮箱再发一遍吧,谢谢你coolunix,一定给分
[email protected]

解决方案 »

  1.   

    http://www.csdn.net/develop/read_article.asp?id=11215
      

  2.   

    劳驾给我也发一份吧,[email protected],随后给分。
      

  3.   

    用C语言编写简单的接口程序
    在通信中,为了保证运行安全可靠,标准的串行口必须具有许多握手信号和状态信息。这是因为通信的各个计算机CPU速度不一样(这会导致?错帧敚?以及发送机发送数据速度比接收机接 收速度快(这会导致?过冲敚?为解决这个问题,我们采用一个简单的握手信号,即发送机每次仅发送半个字节(低4位)的数据,而另外半个字节(高4位)则用来传送信息。我们可以对信息位(高4位)进行如下简单的编码: 
    0H: 发送的是新的半个字节数据 
    1H: 重新发送上次传送错误的数据 
    2H: 文件名结束 
    3H: 文件结束 
    这样,每当发送机发送一个字节以后,就等待接受机发回送信号,这回送信号就是发送机发送过来的那个字节。发送机接收到回送信号后,把它与刚发送的字节相比较,如果相同,就发送新的半个字节,否则就重新发送。新数据与旧数据通过信息位来区分。下面就是我用C语言编写控制串行口的程序。以一个发送文件的程序为例,介绍一下用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 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); 
    / * 接 收 一 个 字 节 */main(argc,argv)
       int argc;
       char *argv[];
    {
       if(argc<2){                                  
          printf(“Please input R(receive) 
                  or S(sent) parametre:");
          exit(1);
       }
       InitPort(PORT,231);
       if(argv[1]==‘S') 
    / * 检 查 选 择 的 有 效 性 */
          SendFile(argv[2]);
       else if(argv[1]==‘R')
          ReceiveFile();
       else{
          printf(“Error parament.Please input again.");
          exit(1);
       }
    }void SendFile(fname)
       char *fname;
    {
       FILE *fp;
       int ch,s;
       if(!(fp=fopen(fname,“rb"))){
          printf(“Can't open the file.\n");
          exit(1);
       }
       SendFileName(fname);
       do{
         ch=(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);
       Send(s);
       fclose(fp);
    }void Send(s)
       int s;
    {
       int G;
       SendPort(PORT,s);
       G=ReadPort(PORT); / * 等 待 握 手 信 号 */
       if(s!=G)
          s=s +16;
       do{
          SendPort(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;
    / * 取 文 件 名 中 一 个 字 节 的 低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 fname[15];
       GetFileName(fname);
       printf(“Receiving file %s.\n",fname);
       remove(fname);
       if(!(fp=fopen(fname,“wb"))){
          printf(“Can't open output file.\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(“\nTransmit 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){
          do{
           *G=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);
       do{
          G3=Receive(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 REGS 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;
    }