Ⅰ windows下怎么用c语言读取串口里的数据

Windows下的语言读取串口的数据,可以通过USB的一些特定连接。

Ⅱ 如何用C语言写一个读、写串口的程序

大致过程就是

配置串口通信,包括串口号、波特率、校验位、停止位这些信息;
打开串口,和打开文件一样,在Linux下是这样,Windows下没试过,估计也差不多;
发送数据,即写串口,就跟写文件类似;
读取串口,用read就行。
具体的函数和配置参数可以参考一些别人的代码

Ⅲ 请教一个C语言读串口问题

串口也是文件。可以用自己用API封装一个串口类,网上也有做好的可以下载。

Ⅳ C语言变成实现串口收发数据

首先是把数据发送出去,发送数据协议是自己定义的,一个数据头个字节,20个字节数据位,2个字节CRC校验位,每个数据共24字节的数据。

//设定读超时


TimeOuts.ReadIntervalTimeout = 1000;


TimeOuts.ReadTotalTimeoutMultiplier = 500;


TimeOuts.ReadTotalTimeoutConstant = 5000;


//设定写超时


TimeOuts.WriteTotalTimeoutMultiplier = 500;


TimeOuts.WriteTotalTimeoutConstant = 2000;


SetCommTimeouts(hCom1, &TimeOuts);//设置超时


DCB dcb1;


GetCommState(hCom1, &dcb1);


dcb1.BaudRate = 115200;//波特率为9600


dcb1.ByteSize = 8;//每个字节有8位


dcb1.Parity = NOPARITY;//无奇偶校验位


dcb1.StopBits = TWOSTOPBITS;//两个停止位


//dcb1.fParity = FALSE;


//dcb1.fNull = FALSE;


SetCommState(hCom1, &dcb1);


DWORD wCount=8;//读取的字节数

fclose(fp1);


}


CloseHandle(hCom1);


}

最后就是将发送的数据和接收的数据放到TXT文件里进行了比对,完全没有问题。

Ⅳ 用C语言读取串口数据

调用输入输出的函数,它的参数大概是端口地址和缓冲区(好像是哈,TC2.0里是有的,好像是input,其它版本的C也应该有类似的函数)——跟windows里面的deviceiocontrol()很类似的,
调用它就可以啦
当然你要先把串口设置好,比如波特率之类的

Ⅵ 请教c语言读串口,并作图的全过程

用C语言的话,那应该是Visual C吧,VC是使用C++的,但是兼容C。注意使用VC建立回工程时应选择MFC。

但是个人认为你说的这个功答能,用VB就很容易实现,0基础也能很快做出来,有图有真相,我自己0基础自学了两三天就做出了,就是你要的功能。

资料的话,直接下载“VB6.0企业完整版”,安装完成以后再下载“VB6.0MSDN”,这个MSDN就是VB的官方帮助文件,体积不大,大约10几M,里面提供所有函数的使用方法,也提供点作图,串口读取数据,发送数据、串口参数设置等详细的代码例子,你可以直接一小块一小块的粘贴过来,拼凑成你自己的大程序。

学习资料有MSDN就完全够用了

Ⅶ c语言串口怎么样实现一有数据就读取读取

有中断吗?
有的话可以把读数据放在中断里面,然后存到一个buffer中,需要的时候去读
没有的话,只能不停的尝试去读,读到为止

Ⅷ 怎样在WINDOWS下用C语言编写串口接收数据程序

#include <stdio.h>
#include <Windows.h>
int main(void)
{
FILE *fp;
char temp;
char buf[100];
if((fp = fopen("com3","r")) == NULL)
puts("this way doesn't work!\n");
else
puts("this way works!\n");
while(1)
{
temp = 0;
fscanf(fp,"%c",&temp);
if(temp != 0)
putchar(temp);
else
Sleep(100);
}
fclose(fp);
return 0;
}

以前弄的,好久没看了,不知到对不对。
还有下面这段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

#include <Windows.h>
#include <stdio.h>
HANDLE hCom;
int main(void)
{
hCom=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL);
if(hCom==(HANDLE)-1)
{
printf("打开COM失败!\n");
return FALSE;
}
else
{
printf("COM打开成功!\n");
}
SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts); //设置超时
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600; //波特率为9600
dcb.ByteSize=8; //每个字节有8位
dcb.Parity=NOPARITY; //无奇偶校验位
dcb.StopBits=ONE5STOPBITS; //两个停止位
SetCommState(hCom,&dcb);
DWORD wCount;//读取的字节数
BOOL bReadStat;
while(1)
{
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清空缓冲区
char str[9]={0};
printf("%s\n",str);
bReadStat=ReadFile(hCom,str,9,&wCount,NULL);
if(!bReadStat)
{
printf("读串口失败!");
return FALSE;
}
else
{
str[8]='\0';
printf("%s\n",str);
}
Sleep(100);
}
}

以上两段代码是一年前弄的,我记得可以用,你试试。

Ⅸ windows下C语言怎么对串口进行读写操作

windows下对串口的操作可以通过WindowsAPI进行,也可以通过Linux下的read什么的直接操作,但是这种情况需要了解电路结构,比较麻烦,第三种有第三方提供的库,但是大多数针对C++,所以可能比较难找到顺手的第三方库.
那么,接下来就见要介绍一下串口通信用WindowsAPI通信的方式.

我们会发现,在文件名的位置填上"comX" X表示com口号,超过十的com口号需要另外的书写方式,这里不说了,因为网上一抓一大把,接下来,我们要对串口进行一系列的明确设置,这里就用到了一个结构体DCB结构,是专门用来描述一个com口的工作方式的,由于次结构体有28个成员,非常多,而且大部分的设置都是全世界通用的,所以,我们偷个懒,在打开一个com口之后,建立DCB结构体,接下来调用一个函数GetCommState用这个函数把现在com口的数据都写到DCB里,这样,比较通用的com口设置就已经弄好了,我们一般情况下只需要改一下DCB的波特率就好了,改好后马上用SetCommState把刚改好的结构体再写回去,这样串口就设置好了,现在还有点麻烦,串口设置好了,我们要它干什么呢?废话,读写数据呗,嘟~~~~~~可不能用fwrite和fread因为这个com口句柄不是文件句柄,是内核句柄,要用ReadFile和WriteFile来进行读写,又出麻烦了,我们怎么知道单片机什么时候发数据过来,就算我们知道,计算机什么时候知道啊?所以,一般的情况下,用ReadFile一直在哪检查,又是麻烦,通常情况下,一个com口的ReadFile设置是阻塞函数,影响编程啊!!!!!!

怎么办,很简单,你不阻塞吗,打通你呗,我们再建立里一个结构体COMMTIMEOUTS这个结构体描述里一个com口的相关超时设置,我们用GetCommTimeouts把数据读回来,具体的设置方法在网上也有,但是要注意,有一个MAXDWORD用它来设置读间隔超时设置就可以使ReadFile向kbhit()函数一样完全非阻塞了.
经过一些列的设置,事实上,现在已经可以通信了,要是有人觉得缓存不舒服,用SetupComm函数来重设缓存大小,对于传输速度比较快的通信,要把缓存设置的大些.