51单片机通过串口实现数据的发送与接收程序

51单片机通过串口实现数据的发送与接收程序,第1张

串口裂滑收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。

一般来说,过程如下:

1,配置串口参数、波特率等,开启串口中断;

void Init_UART()

{

}

2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;

程序一般为:

void UART_ISR() interrupt x using y

{

串口中断搏弯处理函数

}

x - 单片机的C51中断号

y - 指定使用的当前工作寄肆银腊存器组号(0-3 PSW中的RS0,RS1组合)

3,主程序

int main(void)

{

Init_UART()

while(1)

{

//数据发送函数

}

}

#include

#include

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

#include

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)

}

}

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


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

原文地址:https://54852.com/yw/12562541.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存