接口与通信课程设计双机通信_第1页
接口与通信课程设计双机通信_第2页
接口与通信课程设计双机通信_第3页
接口与通信课程设计双机通信_第4页
接口与通信课程设计双机通信_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 合 肥 学 院课 程 设 计 报 告 题 目: 双PC通信系统设计 系 别: 电子信息与电气工程系 专 业: 通信工程 班 级: 10通信(1、2)班 学 号: 1005076041 1005076042 1005076037 姓 名: 曹晶涛 张黎雨 方高澎 导 师: 胡国华 成 绩: 论文题目 双PC机通信系统设计设计类型工程技术导师名称胡国华 学生名称曹晶涛 方高澎 张黎雨主要内容及目标设计一个两机通信系统,要求:1、用RS232C的零MODEM的连接法连好两机的连线;2、和DEBUG的O命令将一数发送到串行口(2F8H/3F8H),然后在另一台机上用I 命令读入串行口的内容。如果发送

2、的内容与接收的内容一致,说明两机已接好线,否则必须检查连线,直到两可通讯为止; 3、编一程序,将一台机的键盘输入的键值通过RS-232C口送到另一台机,并在CRT上显示键值; 4、编一程序,通过RS-232C口进行一台机到另一台机的文件复制。具有的设计条件根据设计要求提供相关的试验环境计划学生数及任务计划需要3人1人主要进行系统功能设计1人主要进行系统软件设计1人主要进行系统与硬件接口设计计划设计进程1.从接题开始收集资料、准备设计;2.第1周 画出设计系统框图,电路原理图,制定设计方案;3.第2周 系统调试和完善,同时编写设计报告参考文献1.阎石.数字电子技术基础第五版M.北京:高等教育出版

3、社,2006年5月: 3437 2.李雁翎.Visual Basic程序设计M.第二版北京:清华大学出版社,2007年9 月:816 3.张辉.Visual Basic串口通信及编程实例M.北京化学工业出版社,20114 月:2134 4.钱莉.电工电子技术实训M.北京:北京航空航天大学出版社,2010年1月:15015 通信技术综合课程设计任务书 目录一、设计目的与要求11.设计目的12设计要求1二、设计开发环境及所需器件2三. 设计概述2四、本设计涉及的主要串行口的有关硬件资料21此设计利用接口RS-232C来实现两机通讯。22零MODEM33线路控制寄存器(口地址3FBH/2FBH)34

4、可编程波特率发生器(3F9H,3F8H或2F9,2F8H)45线路状态寄存器(3FDH/2FDH)56中断允许寄存器(3F9H/2F9H,且DLAB0)57MODEM控制寄存器(3FCH/2FCH)588250内部寄存器端口地址及读写情况6五、程序结构说明与详细设计61程序结构的简单说明62程序代码的详细说明7六、功能演示131.数据发送132.数据接收133.文件发送144.文件接收14七、总结与体会15 双PC机通讯系统设计 摘要 本次课程设计的主要目的是了解PC机串行口的使用,掌握用编程方法控制两机通讯。设计的总体要求是实现两台机之间的传输字符、文件(包括文本文件、图形文件等)。首先需要

5、实现用RS232C的零MODEN连接法连好两机的连线,然后通过程序实现字符、文件等的传输。随着通信技术的提高,硬件设施的更新换代,通过串口实现两机通信已经逐步退出历史舞台,但是这个设计让我们了解到PC机串行口的使用,并且对编程控制加深了认识和了解关键词: PC机; 通信系统; RS-232; 串行口; 传输一、设计目的与要求1.设计目的(1)了解PC机串行口的使用;(2)掌握用编程方法控制两机通讯。2设计要求 总体设计要求:实现两台机之间的传输字符、文件(包括文本文件、图形文件等)。细节要求如下: (1)用RS232C的零MODEM的连接法连好两机的连线; (2)和DEBUG的O命令将一数发送

6、到串行口(2F8H/3F8H),然后在另一台机上用I 命令读入串行口的内容。如果发送的内容与接收的内容一致,说明两机已接好线,否则必须检查连线,直到两可通讯为止; (3)编一程序,将一台机的键盘输入的键值通过RS-232C口送到另一台机,并在CRT上显示键值; (4)编一程序,通过RS-232C口进行一台机到另一台机的文件复制。文件复制:A机上的文件copy到B机,用标准C(不能用VC或汇编)定义简单通信协议(通过RS-232C口进行一台机到另一台机的文件复制)。二、设计开发环境及所需器件PC机,RS-232C插座及连线三. 设计概述 本设计使用MSCcmm控件来实现所要求的通信功能。 MSC

7、omm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Eventdriven)方法,一是查询法。四、本设计涉及的主要串行口的有关硬件资料 1此设计利用接口RS-232C来实

8、现两机通讯。 通过8250芯片来控制COM1和COM2端口来发送和接收数据。(在IBM-PC中,COM1与COM2都是RS-232C接口)9芯RS232C接口标准(1) 引脚1:CD,载体检测;(2) 引脚2:RXD,接收数据(3) 引脚3:TXD,发送数据;(4) 引脚4:DTR,中断准备好;(5) 引脚5:信号地;(6) 引脚6:DSR,MODEM准备好;(7) 引脚7:RTS,请求发送;(8) 引脚8:CTS,清除发送;(9) 引脚9:RI,响铃指示。 2零MODEM 当通信距离较近时,可以不需要MODEM,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。最简单的情况,在通信中

9、不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。以下是零MODEM的最简单接法。9芯RS232C的零MODEM的连接方法1 CD2 RXD P3 TXD 4 DTR C5 信号地6 DSR 机7 RTS8 CTS B9 RICD 1P RXD 2 TXD 3C DTR 4 信号地5机 DSR 6 RTS 7A CTS 8 RI 9 信号线引脚号信号线引脚号3线路控制寄存器(口地址3FBH/2FBH)D7D6D5D4D3D2D1D0字长选择位0字长选择位1停止位个数位奇偶校验允许位偶校验选择位跟随校验断线检测分频门闩位(DLAB)其中: D4

10、 D3 奇偶校验 D2 停止位 D1 D0 字长X 0 无校验 0 1 0 0 50 1 奇 1 1.5(字长为5位时) 0 1 61 1 偶 1 2(字长6,7,8位时) 1 0 7 1 1 8 4可编程波特率发生器(3F9H,3F8H或2F9,2F8H)DLAB=时,向3F9H2F9H(高八位),3F8H2F8H(低八位)写入16位数,即可对1.8432hz的时钟分频,得到串行口的波特率。公式为:波特率=1846200÷(分频值×16) 输入频率1.8432hz波特率分频器分频器60000HC0H120000H60H180000H40H200000H3AH240000H

11、30H360000H20H480000H18H720000H10H960000H0CH1920000H03H 5线路状态寄存器(3FDH/2FDH) D7D6D5D4D3D2D1D0 接收数据准备好(RDA)超时错奇偶校验错贞错线路中断发送保持寄存器空(TBE)发送移位寄存器空0 6中断允许寄存器(3F9H/2F9H,且DLAB0)D7D6D5D4D3D2D1D0允许接收寄存器好中断允许发送保持寄存 中断允许线路故障中断允许Modem中断00007MODEM控制寄存器(3FCH/2FCH)D7D6D5D4D3D2D1D0数据终端准备好(DTR)请求发送(RTS)OUT1OUT2返环000882

12、50内部寄存器端口地址及读写情况端口地址寄存器名称读写3F8H发送保持寄存器OUT3F8H接收数据寄存器IN3F8H波特率分频器OUT3F9H波特率分频器OUT3F9H中断允许寄存器OUT3FAH中断标识寄存器IN3FBH线路控制寄存器OUT3FCHMODEM控制寄存器OUT3FDH线路状态控制器IN3FEHMODEM状态寄存器IN五、程序结构说明与详细设计 1程序结构的简单说明 本程序由C语言实现,主程序实现寄存器端口的初始化和调用主菜单,以此进行发送与接收操作,包括字符和文件的发送与接收。它是通过查询方式来实现两机之间的通讯。(1) 发送数据初始化 发送字符或文件件继续 Y结束 N(2)

13、接收数据初始化 接收字符或文件件继续 Y结束 N2程序代码的详细说明代码如下:Unit1头文件:/-#ifndef Unit1H#define Unit1H/-#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <ExtCtrls.hpp>#include <ComCtrls.hpp>#include "MSCommLib_OCX.h"#include <O

14、leCtrls.hpp>/-class TfrmComm : public TForm_published:/ IDE-managed Components TGroupBox *GroupBox1; TPanel *Panel1; TPanel *Panel0; TPanel *Panel3; TMemo *mmoComm; TPanel *Panel4; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TComboBox *cmbByteSize; TComboBox *c

15、mbStopBits; TComboBox *cmbParity; TButton *btnOpen; TButton *btnSend; TButton *btnClose; TLabel *Label6; TEdit *edtSendText; TStatusBar *statusbar1; TMSComm *Comm; TComboBox *cmbCommName; TTimer *Timer1; TButton *Button1; TButton *Button2; TComboBox *edtBaudRate; void _fastcall FormCreate(TObject *S

16、ender); void _fastcall btnOpenClick(TObject *Sender); void _fastcall btnCloseClick(TObject *Sender); void _fastcall btnSendClick(TObject *Sender); void _fastcall cmbParityChange(TObject *Sender); void _fastcall Button1Click(TObject *Sender); void _fastcall Button2Click(TObject *Sender); void _fastca

17、ll CommComm(TObject *Sender);private: / User declarationspublic:/ User declarations AnsiString baudrate, datasize, stopbits,parity ; _fastcall TfrmComm(TComponent* Owner);/-extern PACKAGE TfrmComm *frmComm;/-#endifProject1.cpp:/-#include <vcl.h>#pragma hdrstop#include "Unit1.h"/-#pra

18、gma package(smart_init)#pragma link "MSCommLib_OCX"#pragma resource "*.dfm"TfrmComm *frmComm;/-_fastcall TfrmComm:TfrmComm(TComponent* Owner) : TForm(Owner)/-void _fastcall TfrmComm:FormCreate(TObject *Sender) /初始化各按键值 cmbCommName->ItemIndex=0; edtBaudRate->Text="9600&

19、quot; cmbByteSize->ItemIndex=3; cmbStopBits->ItemIndex=0; cmbParity->ItemIndex=0;/-void _fastcall TfrmComm:btnOpenClick(TObject *Sender) /打开端口 bool a=true;/a为真打开“发送”和“关闭”按钮,为否则不打开 if(Comm->PortOpen!=true) Comm->CommPort=cmbCommName->ItemIndex+1; baudrate=StrToInt(edtBaudRate->Te

20、xt); datasize=StrToInt(cmbByteSize->Text); stopbits=StrToInt(cmbStopBits->Text); Comm->Settings=baudrate+","+parity+","+datasize+","+stopbits; /设置串口的属性波特率、奇偶校验、数据位和、停止位。 try Comm->PortOpen=true; /打开串口 catch(.) a=false; ShowMessage("打开串口有错误!"); if(a

21、=true) btnOpen->Enabled=False; btnSend->Enabled=True; btnClose->Enabled=True; statusbar1->SimpleText="端口已打开" else btnOpen->Enabled=True; btnSend->Enabled=False; btnClose->Enabled=False; statusbar1->SimpleText="端口打开错误" /-void _fastcall TfrmComm:btnCloseClic

22、k(TObject *Sender) /关闭端口 if(Comm->PortOpen!=false) Comm->PortOpen=false; statusbar1->SimpleText="端口已关闭" btnOpen->Enabled=True; btnSend->Enabled=False; btnClose->Enabled=False; /-void _fastcall TfrmComm:btnSendClick(TObject *Sender) /发送数据 Comm->Output=StringToOleStr(edt

23、SendText->Text); mmoComm->Lines->Add("已发送:"+edtSendText->Text); edtSendText->Text=""/-void _fastcall TfrmComm:cmbParityChange(TObject *Sender) if(cmbParity->ItemIndex=0)parity="n" if(cmbParity->ItemIndex=1)parity="o" if(cmbParity->ItemI

24、ndex=2)parity="e" if(cmbParity->ItemIndex=3)parity="m" if(cmbParity->ItemIndex=4)parity="s"/-void _fastcall TfrmComm:Button1Click(TObject *Sender) mmoComm->Lines->Clear(); /-void _fastcall TfrmComm:Button2Click(TObject *Sender) edtSendText->Text="&qu

25、ot; /-void _fastcall TfrmComm:CommComm(TObject *Sender) AnsiString str; /声明一个AnsiString类型的变量 OleVariant s; /声明一个用于接收数据的OleVariant变量。 if(Comm->CommEvent=comEvReceive) / 接收缓冲区中是否收到Rthreshold个字符。 if(Comm->InBufferCount)/ 是否有字符驻留在接收缓冲区等待被取出 s=Comm->Input;/接收数据 str=s.AsType(varString); /把接收到的OleVariant变量转换成AnsiString类型 mmoComm->Lines->Add("已收到:"+str);/把接收到的数据显示在mmoComm中。 六、功能演示1.数据发送2.数据接收3.文件发送4.文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论