RS232串口通信实验报告
RS232串口通讯
实验九 RS232串口通讯应用一、实验目的串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如可以很直观地把红外遥控器键值的数据码显示在电脑上等。
本次实验目的:1、通过实际硬件连接及软件编程完成 51单片机和PC机之间的串口通讯,从而加深对异步串行通信接口的基本结构、工作原理等串行通信基本概念的理解;2、了解RS-232C电平规定与TTL电平规定的不同,及采用专用芯片MAX232实现两者之间电平转换的连接电路。
二、实验设备51单片机实验板、PC机、串口连接线、串口调试软件、Keil软件、连接导线等。
三、实验原理及内容51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,在此采用专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
采用三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
图1 串口通讯的硬件电路连接为了能够在电脑端看到单片机发出的数据,必须借助一个WINDOWS软件进行观察,这里利用一个免费的电脑串口调试软件(这是一个绿色的软件,无需安装,可以直接在当前位置运行这个软件)。
软件界面如下图,1先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。
串口选择为COM1,当然51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源,这时只要按下K1一次,在串口调试助手软件的接收区界面中就会增加一个“AF”字符,表示单片机向电脑发送“AF”字符成功。
RS232串口通信实验
RS232串口通信实验一、认识RS232单片机的串行口是非常有用的,通过他我们可以把单片机系统的数据传回电脑处理或者接受电脑传过来的数据而进行相应的动作,在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。
RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口. 它是在1970年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准.而工业控制的RS-232口一般只使用RXD,TXD,GND三条线.在讨论RS-232C接口标准的内容之前,先说明两点:首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。
因此这个标准的制定,并未考虑计算机系统的应用要求。
但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。
显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。
有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。
其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。
由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。
(1)RS232(DB9)的接口说明1 DCD 载波检测2 RXD 接收数据3 TXD 发送数据4 DTR 数据终端准备好5 SG 信号地6 DSR 数据准备好7 RTS 请求发送8 CTS 允许发送9 RI 振铃提示(2)接口的电气特性在RS-232-C中任何一条信号线的电压均为负逻辑关系。
RS232接口实验
RS232接口实验一、实验原理和电路说明数据通信设备与外部进行信息交换时,一般是通过数据接口进行。
在数据接口中主要是传输两类信息:(1)数据;(2)时钟。
有时也只有数据信息而没有时钟信息,这时时钟信息将由接收端从接收数据流中提取出来。
数据接口的设计取决于应用场合。
复杂的接口包括物理层、链路层等,简单的只包括物理层:即物理结构与信号方式的定义(信号的传输方式)。
在信号传输方式方面,目前可选的种类很多:TTL、RS232、RS422、V35、ECL等。
信号传输方式的选择与信号的速率、传输距离、抗干扰性能等有关。
对于低速、近距离信号的传输采用TTL方式,对于一般较高速率、距离较近时可选用RS232方式。
随着距离的增加、信号速率的提高可采用RS422、V35等信号方式,对于很高的信号速率通常采用ECL信号接口方式。
RS232是电气设备之间常用的串行数据接口标准之一。
RS232电气接口具有以下特点:RS232是一种不平衡接口,信号源开路电压小于25V,负载阻抗3000到700 0Ω,负载电容小于2500pF。
在接口端电压低于–3V时确定为1,接口电压高于3V时确定为数据0。
RS232电路采用接口专用集成芯片MAX232,其内部含两个独立的收发通道。
终端A模块的功能电原理框图如图8.2.1所示。
在该模块中,测试点的安排如下:1、TPF01(TPG01):RS232接收数据(RS232→—TTL)2、TPF02(TPG02):TTL接收数据(RS232→—TTL)3、TPF03(TPG03):TTL发送数据(TTL→—RS232)4、TPF04(TPG04):RS232发送数据(TTL→—RS232)注:括弧内为终端B模块内测试点。
其余测试点安排在JH02连接头的外部自环接头上。
自环连接头的制作见图8.2.2。
TPF02TPF03TPF01TPF04① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨⑩JF01 UF01发送数据接收数据图8.2.1 同步接口模块电原理框图RS232TTL1 3 5 7 92 4 6 8 10图8.2.2 RS232接口自环连接测二、实验仪器1、 Z H5001通信原理综合实验系统 一台2、 20MHz 双踪示波器一台三、实验目的1、 熟悉RS232接口的基本特性和应用;四、实验内容异步数据接口B调制器解调器信道TPG03收数据自环m 序列输入图8.2.3 终端接口测试系统连接示意图TTL RS232异步数据接口ATPG02发数据TPF03收数据准备工作:为便于引入观测信号,将来自解调器的数据送往RS232端口进行测试,测试系统连接参见图8.2.3所示。
计算机网络实验RS232串口通信程序的编写
计算机网络实验RS232串口通信程序的编写RS232是一种常见的串行通信接口,用于在计算机和其他外部设备之间传输数据。
它广泛应用于各种设备和应用程序,如串口调试工具、点阵打印机等。
本文将介绍如何编写一个基本的RS232串口通信程序。
我们将使用C 语言和Linux操作系统来演示。
在开始编写程序之前,我们需要了解一些RS232串口的基本概念和通信协议。
RS232串口由发送线(TX)、接收线(RX)、控制线(如RTS、CTS、DTR和DSR)等组成。
通信时,发送方将数据从TX线发送到接收方的RX线,然后接收方通过RX线接收数据。
以下是一个简单的RS232串口通信程序示例:```c#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <termios.h>#include <unistd.h>int maiint fd = open("/dev/ttyS0", O_RDWR , O_NOCTTY); // 打开串口设备if (fd == -1)perror("打开串口失败");exit(1);}struct termios options;tcgetattr(fd, &options); // 获取当前串口设置//设置波特率为9600cfsetispeed(&options, B9600);cfsetospeed(&options, B9600);//设置数据位为8位,无奇偶校验,停止位为1位options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag ,= CS8;//更新串口设置tcsetattr(fd, TCSANOW, &options);char buffer[255];while (1)ssize_t len = read(fd, buffer, sizeof(buffer)); // 从串口读取数据if (len == -1)perror("读取串口失败");exit(1);}printf("接收到数据:%.*s\n", len, buffer);ssize_t nwrite = write(fd, buffer, len); // 向串口写入数据if (nwrite == -1)perror("写入串口失败");exit(1);}}close(fd);return 0;```该程序首先打开串口设备`/dev/ttyS0`,如果打开失败则会输出错误信息并退出。
RS232串口通信实验
RS232串口通信实验一.实验目的利用单片机的TXD、RXD 口,使用户学会单片机串行口的使用。
二.实验设备及器件IBM PC 机一台DP-51PROC 单片机综合仿真实验仪一台(本实验不需要导线)三.实验内容1.编写一段程序,利用单片机的串行口向PC 机发送0X55。
2.编写一段程序,接收PC 机串行口发送的0X55(ASCII 码为字母U),在单片机接收到0X55 的时候返回一个0X41(ASCII 码为字母A)。
在PC 机一端,以接收到0X41(ASCII 码为字母A)为完成。
四.实验要求深刻理解MAX232芯片的作用,学会使用单片机的的串行口,如果有时间用户可以做一下单片机之间的串行通讯。
五.实验步骤1.用串口线连接PC 机和DP-51PROC 单片机综合仿真实验仪。
图3.18RS232 串行口电路图2.编写一段程序,利用单片机的串行口发送0X55,波特率为9600 Bps。
(该程序不能在DP-51PROC 上进行仿真,所以只能下载,下载的操作可以参考本书的2.6 节)3.程序下载运行后可以在PC 的接收软件上看见接收到“UUUUUUU…”。
4.编写一段程序,在单片机接收到0X55(…U‟)的时候返回一个0X41(…A‟)。
在PC 机一端,以接收到0X41(…A‟)为完成,波特率为9600 Bps。
(该程序不能在DP-51PROC 上进行仿真,所以只能下载,下载的操作可以参考本书的2.6 节)。
5.下载程序运行后,先从PC 机发送一个0X55(…A‟),这时可以在PC 的接收软件看见接收到“A”。
六.实验预习要求阅读本书的2.6 节内容,理解硬件结构,还可以先把程序编好,然后在Keil C51环境下进行软件仿真。
还要学会PC 机上的的串口调试软件的使用(DPFLASH 也内嵌七.实验参考程序程序1:ORG 0000HLJMP MainORG 00F0HMain:MOV SP,#60H ;给堆栈指针赋初值MOV TMOD,#20H ;设置T1 为方式2 MOV TH1,#0FDH ;设置波特率为9600 MOV TL1,#0FDHMOV SCON,#50H ;设置串口位方式1 MOV PCON,#00HSETB TR1 ;定时器1 开始计数Mainloop:MOV SBUF,#55H ;开始发送SENDWT:JBC TI,MainloopAJMP SENDWT;End程序2:ORG 0000HLJMP MainORG 00F0HMain:MOV SP,#60H ;给堆栈指针赋初值MOV TMOD,#20H ;设置T1 为方式2 MOV TH1,#0FDH ;设置波特率为9600 MOV TL1,#0FDHMOV SCON,#50H ;设置串口位方式1 MOV PCON,#00HSETB TR1 ;定时器1 开始计数REC:JBC RI,SENDWTAJMP RECSENDWT:MOV A,SBUFCLR RICJNE A,#55H,RECMOV SBUF,#41H ;开始发送AJMP $;End(1)请用户思考一下,如果是单片机与单片机之间进行串行口通讯应如何进行。
关于串口的实验报告
关于串口的实验报告1. 实验目的本实验的目的是通过学习并实践串口通信的基本原理和方法,加深对串口通信的理解,掌握串口通信的使用技巧和开发工具。
同时,了解串口通信在实际应用中的重要性和应用场景。
2. 实验原理串口是一种用于计算机与外部设备之间进行数据通信的接口标准。
在计算机中,串口通常通过RS-232或RS-485等标准来实现。
串口通信采用的是异步通信方式,即接收方和发送方的时钟不同步,通过发送和接收的数据包中的控制信息来实现数据的传输。
串口通信的基本原理如下:- 串口通信通过一个物理接口连接计算机和外部设备。
- 通信数据被分为一个个字节进行传输,每个字节由一定的控制信息和实际数据组成。
- 发送方通过发送字节的方式将数据发送给接收方。
- 接收方通过接收字节的方式将数据接收并进行处理。
3. 实验步骤步骤一:准备实验环境为了进行串口通信的实验,我们需要准备以下工具和设备:- 一台计算机- 一个串口转USB转换器- 一个外部设备(如Arduino、传感器等)步骤二:安装串口驱动程序在开始实验之前,我们需要安装串口转USB转换器所需的驱动程序。
驱动程序的安装方式因不同的设备而有所差异,一般可以通过官方网站下载并按照说明进行安装。
步骤三:编写串口通信程序根据所使用的编程语言和开发工具,编写一个简单的串口通信程序。
该程序应包括以下功能:- 打开指定的串口端口- 配置串口的波特率、数据位、停止位等参数- 循环读取串口接收缓冲区中的数据,并进行处理- 将需要发送的数据写入串口发送缓冲区步骤四:测试串口通信将串口转USB转换器插入计算机,并将外部设备连接至串口转USB转换器。
运行编写好的串口通信程序,并观察实验结果。
测试串口通信的方法可以有很多,可以通过发送和接收数据包来验证通信是否正常。
步骤五:总结与分析根据实验结果,总结并分析串口通信的性能和应用场景。
可以考虑以下问题:- 串口通信在哪些领域得到了广泛应用?- 串口通信有哪些特点和优势?- 在实际应用中,串口通信可能遇到哪些常见问题,如何解决?4. 实验结论通过本实验,我们了解了串口通信的基本原理和实际应用方法。
【VIP专享】RS232串口通信实验报告
6.培养学生观察、思考、对比及分析综合的能力。过程与方法1.通过观察蚯蚓教的学实难验点,线培形养动观物察和能环力节和动实物验的能主力要;特2征.通。过教对学观方察法到与的教现学象手分段析观与察讨法论、,实对验线法形、动分物组和讨环论节法动教特学征准的备概多括媒,体继课续件培、养活分蚯析蚓、、归硬纳纸、板综、合平的面思玻维璃能、力镊。子情、感烧态杯度、价水值教观1和.通过学理解的蛔1虫.过观适1、察于程3观阅 六蛔寄.内列察读 、虫生出蚯材 让标容生3根常蚓料 学本教活.了 据见身: 生,师的2、解 问的体巩鸟 总看活形作 用蛔 题线的固类 结雌动态业 手虫 自形练与 本雄学、三: 摸对 学动状习人 节蛔生结4、、收 一人 后物和同类 课虫活构请一蚯集 摸体 回并颜步关 重的动、学、蚓鸟 蚯的 答归色学系 点形教生生让在类 蚓危 问纳。习从 并状学理列学平的害 题线蚯四线人 归、意特出四生面体以形蚓、形类 纳大图点常、五观玻存 表及动的鸟请动文 本小引以见引、察璃现 ,预物身类 3学物明 节有言及的、导巩蚯上状 是防的体之生和历 课什根蚯环怎学固蚓和, 干感主是所列环史 学么据蚓节二样生练引牛鸟 燥染要否以举节揭 到不上适动、区回习导皮类 还的特分分蚯动晓 的同节于物让分答。学纸减 是方征节布蚓物起 一,课穴并学蚯课生上少 湿法。?广的教, 些体所居归在生蚓前回运的 润;4泛益学鸟色生纳.靠物完的问答动原 的4蛔,处目类 习和活环.近在成前题蚯的因 ?了虫以。标就 生体的节身其实端并蚓快及 触解寄上知同 物表内特动体结验和总利的慢我 摸蚯生适识人 学有容点物前构并后结用生一国 蚯蚓在于与类 的什,的端中思端线问活样的 蚓人飞技有 基么引进主的的考?形题环吗十 体生行能着 本特出要几变以动,境?大 节活的1密 方征本“特节化下物.让并为珍 近习会形理切 法。课生征有以问的小学引什稀 腹性态解的 。2课物。什游题主.结生出么鸟 面和起结蛔关观题体么戏:要利明蚯?类 处适哪构虫系察:的特的特用确蚓等 ,于些特适。蛔章形殊形征板,这资 是穴疾点于可虫我态结式。书生种料 光居病是寄的们结构,五小物典, 滑生?重生鸟内学构,学、结的型以 还活5要生类部习与.其习巩鸟结的爱 是如原活生结了功颜消固类构线鸟 粗形何因的存构腔能色化练适特形护 糙态预之结的,肠相是系习于点动鸟 ?、防一构现你动适否统。飞都物为结蛔。和状认物应与的行是。主构虫课生却为和”其结的与题、病本理不蛔扁的他构特环以生?8特乐虫形观部特8征境小理三页点观的动位点梳相组等、这;,哪物教相,理适为方引些2鸟,育同师.知应单面导鸟掌类结了;?生识的位学你握日构解2互.。办特生认线益特了通动手征观识形减点它过,抄;察吗动少是们理生报5蛔?物,与的解.参一了虫它和有寄主蛔与份解结们环些生要虫其。蚯构都节已生特对中爱蚓。会动经活征人培鸟与飞物灭相。类养护人吗的绝适这造兴鸟类?主或应节成趣的为要濒的课情关什特临?就危感系么征灭来害教;?;绝学,育,习使。我比学们它生可们理以更解做高养些等成什的良么两好。类卫动生物习。惯根的据重学要生意回义答;的3.情通况过,了给解出蚯课蚓课与题人。类回的答关:系线,形进动行物生和命环科节学动价环值节观动的物教一育、。根教据学蛔重虫点病1.引蛔出虫蛔适虫于这寄种生典生型活的线结形构动和物生。理二特、点设;置2.问蚯题蚓让的学生生活思习考性预和习适。于穴居生活的形态、结构、生理等方面的特征;3.线形动物和环节动物的主要特征。
RS232串口通信实验
R S232串口通信实验(总7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--实验名称:RS-232串口通信实验实验目的:利用单片机的TXD、RXD口,学会单片机串行口的使用。
实验原理:1、51单片机内置全双工异步串行口,共有4种工作方式,电原理图如下:2、串行通信的编程:(1)串行口控制寄存器SCON(2)SM0、SM1—串行口工作方式选择位SM0 SM1 方式功能说明0 0 0 同步移位寄存器方式(用于扩展I/O口)0 1 1 8位异步收发,波特率可变(由定时器控制)1 02 9位异步收发,波特率为fosc/64或fosc/321 1 3 9位异步收发,波特率可变(由定时器控制)(3)REN—允许串行接收位该控制为由软件置“1”或清“0”。
REN=1 允许串行口接收数据。
REN=0 禁止串行口接收数据。
(4)TB8—发送的第9位数据方式2和3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,也可作为其他标志。
(例:在多机通讯中,可以标注传输内容为地址或数据) RB8—接收到的第9位数据方式2和3时,RB8存放接收到的第9位数据。
在方式1,如果SM2=0,RB8是接收到的停止位。
在方式0,不使用RB8。
(5)TI——发送中断标志位方式0时,串行发送第8位数据结束时由硬件置“1”,其它工作方式,串行口发送停止位的开始时置“1”。
TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。
CPU响应中断后, 向SBUF写入要发送的下一帧数据。
TI必须由软件清0。
RI——接收中断标志位方式0时,接收完第8位数据时,RI由硬件置1。
其它工作方式,串行接收到停止位时,该位置“1”。
RI=1,表示一帧数据接收完毕,并申请中断, CPU从接收SBUF取走数据。
该位状态也可软件查询。
RI必须由软件清“0”。
(6)特殊功能寄存器PCONSMOD:波特率倍增位方式0,波特率=fosc/12方式2,波特率= fosc*2SMOD/64方式1、3,波特率=定时器T1的溢出频率*2SMOD/643、多机通讯:主机传输的信息包括地址+数据,每个从机根据自己的地址来判断是否参与通讯SM2 —多机通信控制位用于方式2或方式3中的多机通信控制。
串口传输实验报告
串口传输实验报告篇一:RS232串口通信实验报告RS232串口通信实验报告学号:学院:电子信息学院班级:08031102 姓名:张泽宇康启萌余建军时间:XX年11月13日学校:西北工业大学 XX301966 XX301950 XX301961一.实验题目:设计一个简单的基于串口通信的信息发送和接受界面二.实验目的:1.熟悉并掌握RS232串口标准及原理。
2.实现PC机通过RS232串口进行数据的收发。
3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。
三.实验内容程序代码:P// PC1PC2Dlg.cpp : implementation file//#include "stdafx.h"#include "PC1PC2.h"#include "PC1PC2Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////// ///////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPC1PC2Dlg dialogCPC1PC2Dlg::CPC1PC2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CPC1PC2Dlg::IDD, pParent){//{{AFX_DATA_INIT(CPC1PC2Dlg)m_send = _T("");m_receive = _T("");m_bt = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CPC1PC2Dlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CPC1PC2Dlg)DDX_Control(pDX, IDC_MSCOMM1, m_Comm);DDX_Text(pDX, IDC_EDIT1, m_send);DDX_Text(pDX, IDC_EDIT2, m_receive);DDX_CBString(pDX, IDC_COMBO1, m_bt);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPC1PC2Dlg, CDialog) //{{AFX_MSG_MAP(CPC1PC2Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////// //////////////////////////// CPC1PC2Dlg message handlersBOOL CPC1PC2Dlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);// Set big iconSetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_Comm.SetCommPort(1);//选择COM1m_Comm.SetInputMode(1); //输入方式为二进制方式m_Comm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件// CString str;// str="9600,n,8,1";// m_Comm.SetSettings(str);m_Comm.SetPortOpen(TRUE);//打开串口return TRUE; // return TRUE unless you set the focus to a control}void CPC1PC2Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize buttonto your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CPC1PC2Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);篇二:串口传输实验报告基于单片机的RS232和RS485总线的数据传输张裕卓 XX班摘要本设计是基于单片机的RS232和RS485总线的数据传输实验设计。
单片机串口通信实验报告
单片机串口通信实验报告篇一:串行口通信实验单片机实验报告实验六串行口通信实验一、实验内容实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。
本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。
二、实验目的掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。
三、实验原理51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。
进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。
为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。
单片机串行接口有两个控制寄存器:SCON和PCON。
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。
由软件置位串行控制寄存器(SCON)的REN 位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。
待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。
单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。
在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。
WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。
如果用户要进行串行通信,可以调用WINDOWS的API应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。
串口通信实验报告
串口通信实验报告摘要本实验旨在通过串口通信实现两个设备之间的数据传输。
通过使用串口通信协议,我们能够在不同设备之间进行双向数据传输,实现设备之间的数据交互。
本文将介绍串口通信的基本原理、实验设备和步骤、实验结果以及讨论与总结。
一、引言串口通信是一种常用的通信方式,它被广泛应用于计算机、嵌入式系统、智能设备等领域。
串口通信通过连接计算机或其他设备的串口接口,实现设备之间的数据交换。
串口通信具有传输速度快、稳定可靠、易于实现等优点,因此在实际应用中得到了广泛的应用。
二、实验设备和步骤1. 实验设备本实验使用以下设备进行串口通信实验:- 一台计算机- 一块开发板或者单片机- 两根串口线- 软件串口调试助手2. 实验步骤(1)连接串口线首先,将一根串口线的一个端口连接到计算机的串口接口,另一个端口连接到开发板或者单片机的串口接口。
然后,将另一根串口线的一个端口连接到计算机的另一个串口接口,另一个端口连接到开发板或者单片机的另一个串口接口。
(2)设置串口参数打开软件串口调试助手,在设置界面中选择正确的串口号和波特率,并设置其他参数,如数据位、停止位、奇偶校验等。
(3)发送和接收数据在软件串口调试助手的发送界面中输入要发送的数据,并点击发送按钮。
然后,在接收界面中即可看到接收到的数据。
三、实验结果本实验通过串口通信成功地实现了数据的发送和接收。
在软件串口调试助手的发送界面中,我们输入了一段文本,并成功发送到开发板或者单片机。
在接收界面中,我们成功接收到了从开发板或者单片机发送过来的数据,并正确显示在接收界面上。
四、讨论与总结通过本次实验,我们深入了解了串口通信的基本原理和实验步骤。
串口通信具有不同的参数设置,需要根据实际情况进行调整。
同时,在实际应用中,应注意串口接口的连接问题,确保连接正确、稳定。
另外,在数据传输过程中,也需要注意数据的格式和校验问题,以保证数据的准确性。
在今后的学习和实践中,我们可以进一步探索串口通信的应用领域。
串口发送显示实验报告(3篇)
第1篇一、实验目的1. 了解串口通信的基本原理和流程。
2. 掌握使用串口发送数据的基本方法。
3. 学习如何通过串口接收并显示接收到的数据。
二、实验原理串口通信是指通过串行接口进行数据传输的一种通信方式。
在计算机系统中,串口通常用于连接外部设备,如打印机、鼠标、键盘等。
串口通信的原理是将数据按位依次发送,每发送一位数据后需要一定的延迟,以保证数据的正确传输。
串口发送显示实验主要涉及以下几个方面:1. 串口初始化:设置串口的波特率、数据位、停止位和校验位等参数。
2. 发送数据:通过串口发送指定的数据。
3. 接收数据:通过串口接收发送端发送的数据。
4. 显示数据:将接收到的数据在屏幕上显示出来。
三、实验环境1. 硬件环境:计算机、串口设备(如打印机、鼠标等)、串口线。
2. 软件环境:操作系统(如Windows、Linux等)、串口通信软件(如PuTTY、串口助手等)。
四、实验步骤1. 连接串口设备:将串口设备通过串口线连接到计算机的串口。
2. 初始化串口:打开串口通信软件,选择正确的串口和波特率,并设置其他参数。
3. 发送数据:在软件中输入要发送的数据,然后点击发送按钮。
4. 接收数据:在软件中观察接收到的数据,确认数据是否正确。
5. 显示数据:在软件中设置数据显示格式,将接收到的数据在屏幕上显示出来。
6. 实验结果分析:根据实验结果,分析串口发送显示实验的原理和步骤。
五、实验结果与分析1. 实验结果:在实验过程中,成功实现了串口发送和显示数据的功能。
2. 实验分析:(1)串口初始化:通过设置串口参数,确保数据能够正确传输。
(2)发送数据:在软件中输入要发送的数据,并通过串口发送出去。
(3)接收数据:通过串口接收发送端发送的数据,并显示在屏幕上。
(4)显示数据:在软件中设置数据显示格式,将接收到的数据在屏幕上清晰显示。
六、实验总结通过本次实验,我们了解了串口通信的基本原理和流程,掌握了使用串口发送数据的基本方法,并学习了如何通过串口接收并显示接收到的数据。
RS232串口通信实验
实验名称:RS-232串口通信实验实验目的:利用单片机的TXD、RXD口,学会单片机串行口的使用。
实验原理:1、51单片机内置全双工异步串行口,共有4种工作方式,电原理图如下:2、串行通信的编程:(1)串行口控制寄存器SCON(2)SM0、SM1—串行口工作方式选择位SM0 SM1 方式功能说明0 0 0 同步移位寄存器方式(用于扩展I/O口)0 1 1 8位异步收发,波特率可变(由定时器控制)1 02 9位异步收发,波特率为fosc/64或fosc/321 1 3 9位异步收发,波特率可变(由定时器控制)(3)REN—允许串行接收位该控制为由软件置“1”或清“0”。
REN=1 允许串行口接收数据。
REN=0 禁止串行口接收数据。
(4)TB8—发送的第9位数据方式2和3时,TB8是要发送的第9位数据,可作为奇偶校验位使用,也可作为其他标志。
(例:在多机通讯中,可以标注传输内容为地址或数据)RB8—接收到的第9位数据方式2和3时,RB8存放接收到的第9位数据。
在方式1,如果SM2=0,RB8是接收到的停止位。
在方式0,不使用RB8。
(5)TI——发送中断标志位方式0时,串行发送第8位数据结束时由硬件置“1”,其它工作方式,串行口发送停止位的开始时置“1”。
TI=1,表示一帧数据发送结束,可供软件查询,也可申请中断。
CPU响应中断后, 向SBUF写入要发送的下一帧数据。
TI必须由软件清0。
RI——接收中断标志位方式0时,接收完第8位数据时,RI由硬件置1。
其它工作方式,串行接收到停止位时,该位置“1”。
RI=1,表示一帧数据接收完毕,并申请中断, CPU从接收SBUF取走数据。
该位状态也可软件查询。
RI必须由软件清“0”。
(6)特殊功能寄存器PCONSMOD:波特率倍增位方式0,波特率=fosc/12方式2,波特率= fosc*2SMOD/64方式1、3,波特率=定时器T1的溢出频率*2SMOD/643、多机通讯:主机传输的信息包括地址+数据,每个从机根据自己的地址来判断是否参与通讯SM2 —多机通信控制位用于方式2或方式3中的多机通信控制。
基于RS232串口通信实验
实验报告基于RS232串口通信实验一、实验目的1.通过串口实现单片机与PC机的数据通信。
2.了解下位机与上位机通讯过程。
二、实验内容使用串口实现单片机与PC机的数据通信。
要求按下单片机系统板上中断INT0时,单片机向PC机发送0-9这十个数字,并用“串口调试助手”接收显示。
在“串口调试助手”上发送0-9中任何一个数字时,单片机用8个发光二极管显示对应的ASCII码值。
三、实验环境1、编程软件keil2、仿真软件proteus四、实验原理单片机与PC机之间通信原理图如图1所示。
S3键接P3.2,作为外部中断INT0输入端,当S3按下,产生中断,执行中断程序发送0-9这十个数字,在PC机上接收并显示。
图1 单片机与PC机之间通信五、实验过程1、实现实验要求#include<reg51.h>unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//7段数码管共阳极0-9unsigned char shu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //0—9的ASCLL码unsigned char a,i=0; //定义变量void main(){ ES=EX0=EA=1; //开启中断IT0=1; //使得外部方式0为边沿触发TMOD=0x20; //T1定时器工作方式2SCON=0X50; //使用串行接口方式一TH1=0XFD; //设置T1的初始值,使得波特率为9600 TL1=0XFD;TR1=1; //启动T1定时器P0=0xff; //给P0 赋值while(1); //主程序死循环}void intr1() interrupt 0 //外部中断0{ ES=0; //关闭串口中断for (i=0;i<10;i++) //循环发送0-9{SBUF=shu[i]; //传送0-9的ASCLL码while(!TI); //等待发送TI=0; //发送标志位置0}ES=1; //打开串口中断}void intr() interrupt 4 //串口中断{a=SBUF-'0'; //将ASCLL码转化为字符型P0=tab[a]; //给P0口赋值RI=0; //接收标志位置0}2、仿真图六、实验结论这次试验被卡住了,其实程序并不怎么难写,第一个写出来,第二个就没问题,主要就是仿真不行,首先就是不知怎么用上虚拟串口,后用上VSPR后,多连接了RS232,其实虚拟串口就是一个RS232,无需再加。
rs232串口通信实验报告
计算机网络实验————实现RS232串口通信程序及MODBUS协议的编程一.实验目的:1.熟悉并掌握RS232串口标准及原理。
2.实现PC机通过RS232串口进行数据的收发。
3.掌握MODBUS协议。
4. 掌握MODBUS协议编程的编写二、实验设备PC机一台,RS232串口通信线(9针)一条,跳线一个(一台PC实验时,将其中的2和3短接)三、实验内容界面内容:(1)打开串口与关闭串口按钮(2)信息发送区:信息编辑区,发送信息按钮(3)信息接受区:信息显示区,接收信息按钮四、实验原理rs-232-c :RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(ecommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。
它规定连接电缆和机械、电气特性、信号功能及传送过程。
常用物理标准还有有EIA�RS-232-C、EIA�RS-422-A、EIA�RS-423A、EIA�RS-485。
这里只介绍EIA�RS-232-C(简称232,RS232)。
例如,目前在IBM PC机上的COM1、COM2接口,就是RS-232C接口。
RS232原理如图1-3。
图1 RS232接口电缆和引脚外观图2 RS232 引脚定义(DB9)RS232接口硬件握手方式1 概述在现代的各种实时监控系统和通信系统中,在Windows 9X/NT下利用VC++对RS-232串口编程是常用的手段。
Windows 9X/NT是抢先式的多任务操作系统,程序对CPU的占用时间由系统决定。
多任务指的是系统可以同时运行多个进程,每个进程又可以同时执行多个线程。
进程是应用程序的运行实例,拥有自己的地址空间。
实验九 RS232通信实验
实验九RS232通信实验
一、实验目的
1.了解8051串行口的工作原理以及发送的方式。
2.了解PC机通讯的基本要求。
二、实验说明
8051串行口经RS232电平转换后,与PC机串行口相连。
PC机使用串口调试应用程序V2.2.exe,实现上位机与下位机的通讯。
本实验使用查询法接收和发送资料。
上位机发出指定字符,下位机收到后返回原字符。
波特率设为4800。
三、实验内容及步骤
注:次实验要用PC机的两个串口,一个用于仿真器通信,另一个串口用于实验8051通讯,若PC只有一个串口,可以把实验程序烧录到单片机(不用在线仿真)运行(串口用232平行线)。
1)安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
2)实验箱上的CON2和PC的其中一个串行口相连,J1的P1.0,P1.1打在左边,D18的四只短路冒在右边。
3)在所建的Project文件中添加“8051通信(任意口).ASM”,编译无误后,全速运行程序。
4)打开串口调试V2.2.exe 应用程序,选择下列属性:(注意选择通信串口)
波特率——4800数据位——8
奇偶校验——无停止位——1
在V2.2.exe‘发送的字符/数据’区输入一个字符/数据,点击手动发送或自动发送,接收区收到相同的字符/数据。
5)可把源程序编译成可执行文件,烧录到89C51芯片中。
四、实验参考程序:
见附件:实验指导参考程序。
实验二 RS232串口通信实验
实验二RS-232串口通信实验
一实验目的
(1)熟悉RS-232接口电路的作用与电路组成;
(2)掌握计算机间利用串口进行通信的连接方法;
(3)掌握串口通信软件的使用方法。
二实验所需材料
本实验要求使用:
◆UTP类电缆
◆两个RJ-45连接器
◆两个DB-9串口改RJ-45口连接器
◆两台计算机
◆一把网络压线钳
◆一把电缆剥线钳
◆一台电缆测试仪
三实验步骤
1、每两人一组,在老师指导下,根据下面的线序关系排列线序对;
一端:
2
3、使用压线钳将两端压紧。
4、使用测试仪测试连通性。
5、将两个DB-9连接器分别固定在两台计算机的串口(COM1)上。
6、将做好的线缆两端分别接入固定好的两个DB-9连接器的RJ-45端口上。
7、使用串口通讯软件测试,验证能否通讯。
四、实验总结
1.制作网线,选定一节双绞线,用剥线钳剥去两端的皮,按线序关系排列线序对,将两端分别插入水晶头中,用压线钳压好。
2.用测试仪测试网线的连通性。
3.将两个DB-9串口改RJ-45口连接器分别插入两台PC机的DB—9串口种,再用网线插入连接器的RJ-45口中,连接两台电脑。
4.用软件测试连接的状况。
一开始显示的界面
5.选择发送的文件,点击“打开”即可接收到。
6.接收文件的一端,显示文件内容。
RS232串口通信控制器实验报告
摘要本实验报告为RS232串口通信控制器。
实验设计了基于VHDL描述的RS232串口通信控制器,通过串口调试工具实现PC和CPLD互发和接收数据。
完成的功能包括实现收发一帧10个bit、波特率为9600的串口通信控制器,CPLD接收数据后可译码显示在7段数码管上。
实验的重心放在了RS232串口通信控制器发送模块和接收模块的设计,采用了自顶向下的思路进行设计,系统的核心为有限状态机。
报告中给出了完整的设计思路和过程,并将系统分模块进行了详细的设计,给出了VHDL语言描述。
完成了状态机和核心模块以及系统整体的仿真验证。
最终下载到实验板上测试通过。
关键词:RS232;VHDL;串口通信;状态机第一部分任务要求 (4)1.1课题要求 (4)1.2设计目标 (4)第二部分系统设计 (5)2.1设计思路........................................................................................错误!未定义书签。
2.2系统结构设计 (5)2.2.1系统结构框图 (5)2.2.2系统逻辑功能划分 (5)2.2.3层次模块划分 (6)2.2.4模块设计图 (8)2.2.5发送模块设计 (9)2.2.6接收模块设计 (10)2.2.7分频模块设计 (11)2.2.8按键防抖模块设计 (11)2.2.9译码显示模块设计 (11)2.3系统硬件语言描述 (12)2.3.1VHDL描述思路 (12)2.3.2总体电路的描述 (12)2.3.3分块电路的描述 (13)2.4系统仿真验证 (20)第三部分结果与分析 (22)3.1实现功能说明 (22)3.2器件资源分析 (22)3.3故障和问题分析 (24)第四部分总结与结论 (25)4.1实验结论 (25)4.2总结体会 (25)第五部分附录部分 (26)5.1元器件和仪表清单 (26)5.2VHDL源代码 (26)5.3电路图 (37)5.4参考文献 (38)第一部分任务要求1.1课题要求设计并实现一个可以和PC机通过RS232协议进行通信的串口通信控制器。
RS232发送实验
EDA实验单元14Rs232发送实验1.要求在FreeDev FPGA开发板上完成一个Rs232发送控制模块。
通信协议:波特率9600,8位数据,1位停止位。
每次按下按钮SW1~SW4发送对应的字符A、B、C、D。
2.分析由于波特率为9600的一个信息位所需要的时间为1/9600秒(104uS),也就是每隔104uS发送一个数据。
由基准时钟模块产生一个104uS的时间,当要发送数据时,串行数据发送控制器把数据总线上的内容加上开始位和结束位,然后进行移位发送。
FreeDev开发板使用50MHz晶振,要求波特率为9600的计数周期为(1/9600)/(1/50000000)=5208。
FreeDev开发提供了串口电路如下图:测试时我们把代码中的TX0连接到标号TXD0上实现串行信号输出。
3.程序设计文件名:send.v。
module send(CLK,TX0,SW); //9600BPS,8位数据,1位停止位input CLK;input [3:0] SW;output TX0;reg txd_reg; //发送寄存器reg [15:0] count; //分频系数控制(9600bps=11.0592MHz/1152)reg [3:0] bitcnt_reg; //发送数据位计数器reg bit_start; //位开始标志reg [7:0] uart_buf; //发送数据缓冲区wire change_flag; //用户输入变化wire [7:0]key_send;always @(posedge CLK)beginif (count<15'd5208)begincount=count+1;bit_start=0;endelsebegincount=0;bit_start=1;endendassign key_send={4'b1111,SW[3:0]}; // 4个按钮拼接成8位always @(key_send)begincase (key_send)8'b11111110 : uart_buf=8'd65;//发送A8'b11111101 : uart_buf=8'd66;//发送B8'b11111011 : uart_buf=8'd67;//发送C8'b11110111 : uart_buf=8'd68;//发送D8'b11101111 : uart_buf=8'd69;//发送E8'b11011111 : uart_buf=8'd70;//发送F8'b10111111 : uart_buf=8'd71;//发送G8'b01111111 : uart_buf=8'd72;//发送Hdefault : uart_buf=8'd73;//发送Iendcaseendalways @(posedge bit_start)beginif (bitcnt_reg<=4'd9)bitcnt_reg=bitcnt_reg+1;elsebitcnt_reg=0;if(uart_buf != 8'd73)begincase (bitcnt_reg)4'h0 : txd_reg=0 ;4'h1 : txd_reg=uart_buf[0] ;4'h2 : txd_reg=uart_buf[1] ;4'h3 : txd_reg=uart_buf[2] ;4'h4 : txd_reg=uart_buf[3] ;4'h5 : txd_reg=uart_buf[4] ;4'h6 : txd_reg=uart_buf[5] ;4'h7 : txd_reg=uart_buf[6] ;4'h8 : txd_reg=uart_buf[7] ;4'h9 : txd_reg=1 ;default : txd_reg=1 ;endcaseendendassign TX0=txd_reg;endmodule4.实验方法注意:在Quartus II创建工程的详细图示请参考EDA实验单元1《点亮LED 灯》部分,本范例不再赘述。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RS232串口通信实验报告学院:电子信息学院班级:08031102姓名:张泽宇康启萌余建军学号:2011301966 2011301950 2011301961时间:2014年11月13日学校:西北工业大学一.实验题目:设计一个简单的基于串口通信的信息发送和接受界面二.实验目的:1.熟悉并掌握RS232串口标准及原理。
2.实现PC机通过RS232串口进行数据的收发。
3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。
三.实验内容程序代码:P// PC1PC2Dlg.cpp : implementation file//#include "stdafx.h"#include "PC1PC2.h"#include "PC1PC2Dlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif//////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPC1PC2Dlg dialogCPC1PC2Dlg::CPC1PC2Dlg(CWnd* pParent /*=NULL*/): CDialog(CPC1PC2Dlg::IDD, pParent){//{{AFX_DATA_INIT(CPC1PC2Dlg)m_send = _T("");m_receive = _T("");m_bt = _T("");//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CPC1PC2Dlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CPC1PC2Dlg)DDX_Control(pDX, IDC_MSCOMM1, m_Comm);DDX_Text(pDX, IDC_EDIT1, m_send);DDX_Text(pDX, IDC_EDIT2, m_receive);DDX_CBString(pDX, IDC_COMBO1, m_bt);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPC1PC2Dlg, CDialog)//{{AFX_MSG_MAP(CPC1PC2Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPC1PC2Dlg message handlersBOOL CPC1PC2Dlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herem_Comm.SetCommPort(1); //选择COM1m_Comm.SetInputMode(1); //输入方式为二进制方式m_Comm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件// CString str;// str="9600,n,8,1";// m_Comm.SetSettings(str);m_Comm.SetPortOpen(TRUE);//打开串口return TRUE; // return TRUE unless you set the focus to a control}void CPC1PC2Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CPC1PC2Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CPC1PC2Dlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}//把字符通过串口发送出去void CPC1PC2Dlg::OnButton1(){// TODO: Add your control notification handler code hereUpdateData(TRUE); //读编辑框内容if(strlen(m_send)==0)MessageBox("发送的数据不能为空!","提示",MB_OK);else{m_Comm.SetOutput(COleV ariant(m_send));Sleep(100);}}BEGIN_EVENTSINK_MAP(CPC1PC2Dlg, CDialog)//{{AFX_EVENTSINK_MAP(CPC1PC2Dlg)ON_EVENT(CPC1PC2Dlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)//}}AFX_EVENTSINK_MAPEND_EVENTSINK_MAP()void CPC1PC2Dlg::OnOnCommMscomm1(){// TODO: Add your control notification handler code hereV ARIANT data;COleSafeArray data2;CByteArray datatemp;CString strtemp,buffer;LONG len,i;BYTE Inbyte[2048],temp;UpdateData(TRUE); //读编辑框内容if(m_Comm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符{data=m_Comm.GetInput(); //读缓冲区data2=data; //V ARIANT型变量转换为ColeSafeArray型变量len=data2.GetOneDimSize(); ////得到有效数据长度if(len>0){for(i=0;i<len;i++)data2.GetElement(&i,Inbyte+i);//转换为BYTE型数组for(i=0;i<len;i++) //将数组转换为Cstring型变量{temp=*(char*)(Inbyte+i); //字符型strtemp.Format("%c",temp); //将字符送入临时变量strtemp存放buffer+=strtemp; //将字符串送入临时变量buffer中存放}}m_receive=m_receive+buffer+" ";}UpdateData(FALSE); //更新编辑框内容// MessageBox("gegnxin","提示",MB_OK);}void CPC1PC2Dlg::OnButtonSet(){// TODO: Add your control notification handler code hereUpdateData(TRUE);CString str;str.Format("%s,n,8,1",m_bt);m_Comm.SetSettings(str);}void CPC1PC2Dlg::OnButton2(){// TODO: Add your control notification handler code hereGetDlgItem(IDC_EDIT2)->SetWindowText(_T(""));}四.实验过程:(1)将9针RS232串口通信线与PC机串口连接,并用跳线将RS232串口通信线另一端2(RXD)和3(TXD)短接。