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

如何用C语言写一个读、写串口的程序?,第1张

大致过程就是

配置串口通信,包括串口号、波特率圆谨、校验位、橘滑基停止位这些信息;

打开串口,和打开文件一样,在Linux下是这样,Windows下没试过,估计也差不多;

发送数据,即写串口,就跟写文件类似;

读取串口,让困用read就行。

具体的函数和配置参数可以参考一些别人的代码。

1  、Windows   API通信函数方法 。与通信有关的Windows   API函数共有26个,但主要有关的有: CreateFile()   用   “comn”(n为串口号)作为文件名就可以打开串口。 ReadFile()   读串口。

2、WriteFile()   写串口。 CloseHandle()   关闭串口句柄。初始化时应注意CreateFile()函数中串口共享方式应设为0,串口为不可共享设备,其它与一般文件读写类似。以下给出API实现的源代码。

3、利用端口函数直接 *** 作 。这种方式主要是采用两个端口函数_inp(),   _outp()实现对串口的读写,其中读端口函数的原型为: int   _inp(unsigned   shot   port) 。该族坦巧函数从端口读取一个字节,端口号为0~65535。 写端口的函数原型为: nt   _outp(unsigned   shot   port,   int   databyte) 。

4、  MSComm控件 。MSComm控件是微软开发的专用通信控件,封装了串口的所有功能,使用很方便,但在实际应用中要小心对其属性进行配置。下面详细说明该类应用方法。 

串行端口的本质功能是作兆键为CPU和串行设备间的编码转换器。当数据从信则 CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。

在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。

应用程序要使用串口进行通信,必须在使用之前向 *** 作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

#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)

}

}

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12561860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存