如何实现pc机上的com口通信

作者&投稿:印魏 (若有异议请与网页底部的电邮联系)
如何实现(电脑)PC机与单片机的串行通信~

硬件部分有二种情况
1、电脑带有原生串口,就是主板上带有串行口,这个情况就太好办了。用“串口调试助手”测试一下就可以用VB写程序了。电脑和单片机用232芯片进行接口转换。
2、电脑没有原生串口,就是主板上没有串行口,这个情况有点麻烦。要用USB转串口的模块,装好驱动后会在“设备管理器”中出现一个串口,直接当原生串口用就行了,而且经过USB转出来的串口一般都TTL电平的,也就是可以直接接单片机不用232芯片的。不过这也要看你用的是哪种模块了,具体的要看模块说明书。
最后要注意的是波特率和单片机晶振的选用,不知道你用的是什么型号的单片机。

软件部分,可以用简单的VB编写上位机软件,这方面网上有很多的代码。单片机部分只要按照普通的串行写程序就行了,测试时可以用“串口调试助手”这款软件,调试好后再写VB程序。
上述是我们做项目和产品的经验,希望对你有所帮助。

51 单片机 C语言?

网络上例程 多得很呢

去百度文库 搜 单片机 100 例 吧
有 proteus 仿真图、C语言源码 等等

狂晕中....给你linux代码,你就问windows,给你windows串口控制方式,你就问linux,I 服了 You。
区别很大,两个不同的操作系统,在应用串口上就有所不同,但大体上,还是有共同点,1、设置串口,2、打开串口,3、读写数据,4、异常处理,5、关闭串口
这一系列的控制逻辑都大体相同,只是在代码实现上有所不一样,毕竟两种操作系统内核结构就不一样,linux的串口设置属性是通过头文件#include <termios.h>的struct termios结构实现,而windows的串口属性是commprop结构设定,其他的读写串口,都有相应的读写文件函数,两种系统都是把串口当作一个设备文件来读写,所以这里就不难理解,为什么使用文件函数来处理串口。linux下可以使用标准C库函数来控制读写串口,windows下可以使用WINDOWS API函数来做串口读写,具体请参看《windows API 大全》以及下文给出的参考地址,也是有详细的说明

在PC机上实现COM口通信并不困难,可你得说清楚是什么操作系统,不同的操作系统,控制串口的区别是很大。
在Windows系统上操作串口可以使用三种方式:MSCOMM控件,WINDOWS API,第三方控件

WINDOWS API使用起来相对麻烦些,主要是在设置串口属性、查询读取方面及异常处理方面。这里简要说下控制串口步骤:
1.打开串口:
使用createfile()打开串口,createfile()将返回串口的句柄。
handle createfile(
lpctstr lpfilename, // pointer to name of the file
dword dwdesiredaccess, // access (read-write) mode
dword dwsharemode, // share mode
lpsecurity_attributes lpsecurityattributes, // pointer to security attributes
dword dwcreationdistribution, // how to create
dword dwflagsandattributes, // file attributes
handle htemplatefile // handle to file with attributes to copy
);
lpfilename: 指明串口制备,例:com1,com2
dwdesiredaccess: 指明串口存取方式,例:generic_read|generic_write
dwsharemode: 指明串口共享方式
lpsecurityattributes: 指明串口的安全属性结构,null为缺省安全属性
dwcreateiondistribution: 必须为open_existin
dwflagandattributes: 对串口唯一有意义的是file_flag_overlapped
htemplatefile: 必须为null
2.关闭串口:

closehandle(hcommdev);

3.设置缓冲区长度:

bool setupcomm(
handle hfile, // handle of communications device
dword dwinqueue, // size of input buffer
dword dwoutqueue // size of output buffer
);

4.commprop结构:

可使用getcommproperties()取得commprop结构,commprop结构中记载了系统支持的各项设置。
typedef struct _commprop { // cmmp
word wpacketlength; // packet size, in bytes
word wpacketversion; // packet version
dword dwservicemask; // services implemented
dword dwreserved1; // reserved
dword dwmaxtxqueue; // max tx bufsize, in bytes
dword dwmaxrxqueue; // max rx bufsize, in bytes
dword dwmaxbaud; // max baud rate, in bps
dword dwprovsubtype; // specific provider type
dword dwprovcapabilities; // capabilities supported
dword dwsettableparams; // changeable parameters
dword dwsettablebaud; // allowable baud rates
word wsettabledata; // allowable byte sizes
word wsettablestopparity; // stop bits/parity allowed
dword dwcurrenttxqueue; // tx buffer size, in bytes
dword dwcurrentrxqueue; // rx buffer size, in bytes
dword dwprovspec1; // provider-specific data
dword dwprovspec2; // provider-specific data
wchar wcprovchar[1]; // provider-specific data
} commprop;
dwmaxbaud:
baud_075 75 bps
baud_110 110 bps
baud_134_5 134.5 bps
baud_150 150 bps
baud_300 300 bps
baud_600 600 bps
baud_1200 1200 bps
baud_1800 1800 bps
baud_2400 2400 bps
baud_4800 4800 bps
baud_7200 7200 bps
baud_9600 9600 bps
baud_14400 14400 bps
baud_19200 19200 bps
baud_38400 38400 bps
baud_56k 56k bps
baud_57600 57600 bps
baud_115200 115200 bps
baud_128k 128k bps
baud_user programmable baud rates available
dwprovsubtype:
pst_fax 传真设备
pst_lat lat协议
pst_modem 调制解调器设备
pst_network_bridge 未指定的网桥
pst_parallelport 并口
pst_rs232 rs-232口
pst_rs422 rs-422口
pst_rs423 rs-432口
pst_rs449 rs-449口
pst_scanner 扫描仪设备
pst_tcpip_telnet tcp/ip telnet协议
pst_unspecified 未指定
pst_x25 x.25标准
dwprovcapabilities
pcf_16bitmode 支持特殊的16位模式
pcf_dtrdsr 支持dtr(数据终端就绪)/dsr(数据设备就绪)
pcf_inttimeouts 支持区间超时
pcf_parity_check 支持奇偶校验
pcf_rlsd 支持rlsd(接收线信号检测)
pcf_rtscts 支持rts(请求发送)/cts(清除发送)
pcf_setxchar 支持可设置的xon/xoff
pcf_specialchars 支持特殊字符
pcf_totaltimeouts 支持总(占用时间)超时
pcf_xonxoff 支持xon/xoff流控制
标准rs-232和window支持除pcf_16bitmode和pcf_specialchar外的所有功能
dwsettableparams
sp_baud 可配置波特率
sp_databits 可配置数据位个数
sp_handshaking 可配置握手(流控制)
sp_parity 可配置奇偶校验模式
sp_parity_check 可配置奇偶校验允许/禁止
sp_rlsd 可配置rlsd(接收信号检测)
sp_stopbits 可配置停止位个数
标准rs-232和window支持以上所有功能
wsettabledata
databits_5 5个数据位
databits_6 6个数据位
databits_7 7个数据位
databits_8 8个数据位
databits_16 16个数据位
databits_16x 通过串行硬件线路的特殊宽度路径
windows 95支持16的所有设置

5.dcb结构:

typedef struct _dcb {// dcb
dword dcblength; // sizeof(dcb)
dword baudrate; // current baud rate
指定当前的波特率
dword fbinary: 1; // binary mode, no eof check
指定是否允许二进制模式,
windows 95中必须为true
dword fparity: 1; // enable parity checking
指定奇偶校验是否允许
dword foutxctsflow:1; // cts output flow control
指定cts是否用于检测发送控制。
当为true是cts为off,发送将被挂起。
dword foutxdsrflow:1; // dsr output flow control
指定cts是否用于检测发送控制。
当为true是cts为off,发送将被挂起。
dword fdtrcontrol:2; // dtr flow control type
dtr_control_disable值将dtr置为off, dtr_control_enable值将dtr置为on, dtr_control_handshake允许dtr"握手",dword fdsrsensitivity:1; // dsr sensitivity 当该值为true时dsr为off时接收的字节被忽略
dword ftxcontinueonxoff:1; // xoff continues tx
指定当接收缓冲区已满,并且驱动程序已经发
送出xoffchar字符时发送是否停止。
true时,在接收缓冲区接收到缓冲区已满的字节xofflim且驱动程序已经发送出xoffchar字符中止接收字节之后,发送继续进行。
false时,在接收缓冲区接收到代表缓冲区已空的字节xonchar且驱动程序已经发送出恢复发送的xonchar之后,发送继续进行。
dword foutx: 1; // xon/xoff out flow control
true时,接收到xoffchar之后便停止发送
接收到xonchar之后将重新开始
dword finx: 1; // xon/xoff in flow control
true时,接收缓冲区接收到代表缓冲区满的xofflim之后,xoffchar发送出去
接收缓冲区接收到代表缓冲区空的xonlim之后,xonchar发送出去
dword ferrorchar: 1; // enable error replacement
该值为true且fparity为true时,用errorchar 成员指定的字符代替奇偶校验错误的接收字符
dword fnull: 1; // enable null stripping
true时,接收时去掉空(0值)字节
dword frtscontrol:2; // rts flow control
rts_control_disable时,rts置为off
rts_control_enable时, rts置为on
rts_control_handshake时,
当接收缓冲区小于半满时rts为on
当接收缓冲区超过四分之三满时rts为off
rts_control_toggle时,
当接收缓冲区仍有剩余字节时rts为on ,否则缺省为off
dword fabortonerror:1; // abort reads/writes on error
true时,有错误发生时中止读和写操作
dword fdummy2:17; // reserved
未使用
word wreserved; // not currently used
未使用,必须为0
word xonlim; // transmit xon threshold
指定在xon字符发送这前接收缓冲区中可允许的最小字节数
word xofflim; // transmit xoff threshold
指定在xoff字符发送这前接收缓冲区中可允许的最小字节数
byte bytesize; // number of bits/byte, 4-8
指定端口当前使用的数据位
byte parity; // 0-4=no,odd,even,mark,space
指定端口当前使用的奇偶校验方法,可能为:
evenparity,markparity,noparity,oddparity
byte stopbits; // 0,1,2 = 1, 1.5, 2
指定端口当前使用的停止位数,可能为:
onestopbit,one5stopbits,twostopbits
char xonchar; // tx and rx xon character
指定用于发送和接收字符xon的值
char xoffchar; // tx and rx xoff character
指定用于发送和接收字符xoff值
char errorchar; // error replacement character
本字符用来代替接收到的奇偶校验发生错误时的值
char eofchar; // end of input character
当没有使用二进制模式时,本字符可用来指示数据的结束
char evtchar; // received event character
当接收到此字符时,会产生一个事件
word wreserved1; // reserved; do not use 未使用
} dcb;

6.改变端口设置

使用如下的两个方法
bool getcommstate(hcomm,&dcb);
bool setcommstate(hcomm,&dcb);

7.改变普通设置

buildcommdcb(szsettings,&dcb);
szsettings的格式:baud parity data stop
例: "baud=96 parity=n data=8 stop=1"
简写:"96;,n,8,1"
szsettings 的有效值
baud:
11 or 110 = 110 bps
15 or 150 = 150 bps
30 or 300 = 300 bps
60 or 600 = 600 bps
12 or 1200 = 1200 bps
24 or 2400 = 2400 bps
48 or 4800 = 4800 bps
96 or 9600 = 9600 bps
19 or 19200= 19200bps
parity:
n=none
e=even
o=odd
m=mark
s=space
data:
5,6,7,8
stopbit
1,1.5,2

8.commconfig结构:

typedef struct _comm_config {
dword dwsize;
word wversion;
word wreserved;
dcb dcb;
dword dwprovidersubtype;
dword dwprovideroffset;
dword dwprovidersize;
wchar wcproviderdata[1];
} commconfig, *lpcommconfig;
可方便的使用bool commconfigdialog(
lptstr lpszname,
hwnd hwnd,
lpcommconfig lpcc);
来设置串行口。

9.超时设置:

可通过commtimeouts结构设置超时,
typedef struct _commtimeouts {
dword readintervaltimeout;

原文参考《VC实现串口通信例程》 作者:阮帮秋
http://www.mp3sea.net/Visual-C/2007-3-22/VC-ShiXianChuanKouTongShenLiChengZuoZhe-RuanBangQiu-bbjm10723.htm

下次记得把问题一次提出来。即便是帮你找资料,也方便一些。


用C语言实现16进制转化为10进制?
C语言程序中,十进制和十六进制实际是互通的。十六进制数由数字0~9、字母A~F(或a~f)组成。把十六进制数按权展开、相加即得十进制数。现实中十六进制数和十进制数不可以直接相加,如是在电脑上的话是可以的,何种进制数在电脑上都是以二进制的形式表示的,在电脑编写程序时是可以相加的。十进制数...

C语言指什么语言?与英语有何区别?
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言...

Lua嵌入C\/C++,比直接使用C\/C++有何优势呢?
lua本身就是用标准C编写的,它的优点是小巧和灵活,而且又是动态语言,是解释执行的,所以适合用在游戏和一些嵌入式环境里。至于你上面所说的动态弱类型,垃圾收集,函数式编程,闭包等等,需要你至少读完一本lua书籍(Programming in Lua)才能有个大概的了解,这些概念都不是一蹴而就的,需要不断的积累...

用vc6.0 c语言编写一道题实现输入六个数输出最小数
include"stdio.h"void main(){ float a[6];int i,j;float temp;printf("请输入6个数");for(i=0;i<6;i++){ scanf("%f",&a[i]);} for(i=0;i<5;i++)\/\/冒泡排序 { for(j=i+1;j<6;j++){ if(a[i]>a[j]){ temp=a[i];a[i]=a[j];a[j]=temp;} } } printf...

C中,Reserve函数有何作用?如何实现这个函数
设置字符串的能力有很大的数量至少为一个指定的次数。include <string> include <iostream> int main( ){ using namespace std;string str1 ("Hello world");cout << "The original string str1 is: " << str1 << endl;basic_string <char>::size_type sizeStr1, sizerStr1;sizeStr1 = ...

请问看C源程序从何下手
12、网络程序设计,只要有相当C语言能力,越高越好,不需要C++(有的话更好),在Linux环境下,学习socket就可以,书方面看UNIX或LINUX网络程序设计都可以,置顶帖子里的UNIX网络程序设计是我看过的最好的。这方面的资料最好从网上下载,不过书店也有的卖,要根据自己的实际情况来,我好象看到书店有一本...

电脑中的CPU代表什么
CPU 翻译过来就是中央处理器,是电脑上最终要的部分,相当于人的大脑,主要起计算和控制的功能。CPU是英语“Central Processing Unit\/中央处理器”的缩写,CPU一般由逻辑运算单元、控制单元和存储单元组成。在逻辑运算和控制单元中包括一些寄存器,这些寄存器用于CPU在处理数据过程中数据的暂时保存, 其实我们在买CPU时,并不...

对于cpu的介绍
但是,CeleronⅡ的外频仍然只有66MHz,这在很大程度上限制了其性能的发挥。 AMD K6-Ⅲ AMD于1999年2月推出了代号为“Sharptooth”(利齿)的K6-Ⅲ,它是该公司最后一款支持Super 7架构和CPGA封装形式的CPU,采用0.25微米制造工艺、内核面积是135平方毫米,集成了2130万个晶体管,工作电压为2.2V\/2.4V。 相对于K6-2...

c语言如 何实现 C++private成员
无法实现,因为对类(或者C语言结构)成员的访问控制是C++独有的特性,这些关键字的合法性是在编译过程检测的,由编译器进行支持。

C语言实现如下程序
用matlab、mathematics之类的软件能轻易实现的何必费劲用C?如果只是练手,你可以通过:1、假定x范围从0到10000,用给定的函数计算每个点的坐标 2、换算到windows坐标系下px、py值 3、在屏幕上打点(每个点、或者直线)

东兴市18019794608: 两台电脑间,COM口如何通信? -
项查丹香: class PortConnect { private static SerialPort port = new SerialPort(); string recvStr = ""; ////// 串口发送接收数据 ////// 串口名 /// 波特率 /// 发送的数据 ///public string SendAndReceiveData(string PortName, int BaudRate, string SendData) { port ...

东兴市18019794608: 电脑com口怎么重置 - 电脑com口怎么更改
项查丹香: 1. 电脑com口怎么更改准备好交换机、配置线(配置线一般都通用,但某些品牌的交换机不一定通用)、Com口转USB线(如果电脑上有Com口则不需要),在电脑上装...

东兴市18019794608: PC机之间采用串口通信 -
项查丹香: 使用“超级终端”可以通过串口进行通讯. ============================================= 1.首先确定你机柜里的电脑(为方便我们称其为A电脑)是否安装了“超级终端”程序,该程序Win98默认安装,位置基本上应该在开始菜单 ...

东兴市18019794608: 怎么实现AT89C52单片机之间的串行通信 -
项查丹香: 首先要看pc机有没有串口,即是电脑上的com口,这是rs232口,有的话,就很方便.单片机的rxd,txd两个脚就是串行通信的引脚,用一片max232,或max202,把rxd,txd两脚接到max232上,组成一个rs232接口电路,max232的rxd,txd接到db9头...

东兴市18019794608: 如何通过串行接口(COM)连接两台计算机? -
项查丹香: 串行接口 微型计算机主机与外部设备的连接,基本上使用了两类接口;串行接口与并行接口. 并行接口是指数据的各位同时进行传送,其特点是传输速度快,但当传输距离较远、位数又多时,导致了通信线路复杂且成本提高.串行通...

东兴市18019794608: 同台电脑上的两个串口不相连,两者如何通信? -
项查丹香: 同台的两个COM口必须用数据线连接,其中主要是: 2-3 3-2 5-5 必须连接,方能进行串口通信调试.

东兴市18019794608: 用电脑COM口作通信接口的时候需要对COM口进行设置吗,怎样设置 -
项查丹香: 右键我的电脑、管理、设备、端口、选中端口属性里

东兴市18019794608: 两个com端口如何通讯?c#实现 -
项查丹香: using System.IO.Ports; 使用里面的SerialPort 类即可实现串口通信.在调试的时候最好使用虚拟串口工具,据我所知现在的电脑都没有提供串口的了.

东兴市18019794608: windows7 下如何通过consle线配置交换机、路由器? -
项查丹香: 1.通过console口连接管理,一般首次配置设备网络设备需要用该种方法,缺点是每次配置都必须直连设备. 2.通过telnet远程配置,大多情况都使用这种方法,在任何地方都可以配置,但前提是网络连通,要有IP地址和开始telnet. 配置一台Cisco...

东兴市18019794608: 如何用VB的MScomm打开两端口(如COM2和3),并实现通信? -
项查丹香: 用以下代码检查你机器有几个COM口,那些COM口可用,那些不存在,Option Explicit Dim a As Integer Private Sub Command1_Click() On Error GoTo uerror For a = 1 To 4 MSComm1.CommPort = a MSComm1.PortOpen = True '当...

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网