论文百事通 设为主页 会员登录 |  免费注册
代写论文 代发表论文 定制论文 毕业设计定制 期刊目录 黄金会员  
加入收藏 设为首页 |  收藏本站
首页 | 计算机 | 建筑工程 | 医药学 | 经济类 | 文学 | 英语 | 其它类别论文 | 计算机毕业设计 | 课程设计 | 毕业系统演示 | 投稿中心 | 下载中心 | 留言板
  查找论文

两台pc机之间的通讯-接口与通讯课程设计

作者:论文百事通  来源:lwbst.com    【2006-09-19】    编辑:Admin
  1. 设计任务
    1. 用RS-232C的零MODEM的连接法连好两机的连线;
    2. 用DOS的MODE命令设置好两机的通讯格式,两机的通讯必须一致;
    3. 和DEBUG的O命令将一数发送到串行口(2F8H-3F8H),然后在另一台机上用I 命令读入串行口的内容。如果发送的内容与接收的内容一致,说明两机已接好线,否则必须检查连线,直到两可通讯为止;
    4. 编一程序,将一台机的键盘输入的键值通过RS-232C口送到另一台机,并在CRT上显示键值;
    5. 编一程序,通过RS-232C口进行一台机到另一台机的文件复制。
  2. 基本实现方法

1.此设计是利用接口RS-232C来实现两机通讯。通过8250芯片来控制COM1和COM2端口来传输和接收数据。(在IBM-PC中,COM1与COM2都是RS-232C接口)
2.9芯RS-232C接口标准如下:

  1. 引脚1:CD,载体检测;
  2. 引脚2:RXD,接收数据;
  3. 引脚3:TXD,发送数据;
  4. 引脚4:DTR,终端准备好;
  5. 引脚5:信号地;
  6. 引脚6:DSR,DODEM准备好;
  7. 引脚7:RTS:请求发送;
  8. 引脚8:CTS:清除发送;
  9. 引脚9:RI:响玲指示;

3.当通信距离较近时,可不需要Modem,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。下面是零MODEM的最简单接法。

  1. 最简单接法(3线接法)

图中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。

4.设计所需的设备有IBM-PC机,RS-232C插座与连线。

 

  1. 程序结构说明(最后附源程序与注解)
    1. 程序说明

此程序由C语言实现,一个主程序中实现了发送与接收的功能,其中包括字符和文件
的发送与接收。它是通过查询方式来实现两机之间的通讯,COM1端口来发送数据,COM2来接收数据。

    程序主要流程
    a.发送数据

    两机通讯4 

    b.接收数据

    初始化COM2


    两机通讯5 

     


     5.心得体会 ......
     6.参考资料

    1.现代计算机接口技术  洪志全、洪学海 电子工业出版社
    2.C高级实用程序设计  王士元  清华大学出版社

    附录:源程序与注解

    #include <sys\stat.h>
    #include <string.h>
    #include <fcntl.h>
    #include <io.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <dos.h>
    #include <CONIO.H>

    #define COM1 0x2f8
    #define COM2 0x2f8

    void SendCh() {
    unsigned char status;
    int i,c;
    int flag=1;
    outportb(COM1+1,0x00);
    outportb(COM1+1,0x40);
    outportb(COM1+1,0xcf);
    outportb(COM1+1,0x37);

    printf("Input a character:");
    while(flag) {
    c=getch();
    putchar(c);
    if (c==27) flag=0;
    for (i=0;i<=1000;i++);
    do {
    status=inportb(0x2f9);
    status=status & 0x01;
    }while (status==0);
    outportb(COM1,c);
    }
    printf("complete\n");
    }

     

    void goon()
    {
    printf("Press any key to continue...\n");
    while (!kbhit()) ;
    getch();
    }

    void ReceiveCh() {
    int i;
    char ch=0;
    unsigned char status;
    outportb(COM2+1,0xAA);
    outportb(COM2+1,0x50);
    outportb(COM2+1,0xcf);
    outportb(COM2+1,0x14);
    printf("Receiving ...\n");
    while(ch!=27) {
    for (i=0;i<=1000;i++);
    do {
    status=inportb(COM2+5);
    status=status & 0x01;
    }while (status==0);
    ch=inportb(COM2);
    printf("%c",ch);
    }
    }

    void Receivefile() {
    FILE *fp;
    int handle;
    int flag=1;
    char c;
    int i;
    unsigned char status;
    char fname[]="receive.txt";
    outportb(COM2+1,0xAA);
    outportb(COM2+1,0x50);
    outportb(COM2+1,0xcf);
    outportb(COM2+1,0x14);

    handle=creat(fname, S_IREAD|S_IWRITE);
    if(handle==-1) {
    printf("Creat file Faild.\n");
    exit(0);
    }

    if((fp=fopen(fname,"w"))==NULL) {
    printf("Open file Faild.\n");
    exit(0);
    }

    printf("Receiving file(rename:receive.txt)...\n\n");
    while(flag) {
    do {
    status=inportb(COM2+5);
    status=status & 0x01;
    }while (status==0);
    c=inportb(COM2);
    for (i=0;i<=1000;i++);
    if(c==27) {
    fclose(fp);
    flag=0;
    printf("%c",c);
    break;
    }
    printf("%c",c);
    fputc(c,fp);
    }

    close(handle);
    printf("\n\n ok \n");

    }

    void main(){
    char ch=0;
    while(ch!='3')
    { printf("\n");
    printf("1.send!\n");
    printf("2.recieve!\n");
    printf(“3.quit!\n”);
    printf("Enter your choice :");
    ch=getchar();
    getchar();
    switch(ch)
    {
    case'1': send();break;
    case'2':recieve();break;
    case'3':break;
    default: printf("Error!!!\n");
    }
    }
    }

  本课程设计包含完整源程序、可执行程序、设计文档。

 上一篇:用C语言实现进程调度-操作系统课程设计
 下一篇:推销员旅行问题求解|人工智能课程设计
本文版权归本站所有,欢迎转载。转载该文章时,请注明“来源:论文百事通 Http://www.lwbst.com”。
 
Copyright (C) 2008 Lwbst.com, All Rights Reserved 版权所有 论文百事通