VC 串口数据接收

VC 串口数据接收,第1张

你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。

以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。

#include<reg51.h>

#define uchar unsigned char

uchar buf[16],getptr,putptr

void uart_isr() interrupt 4

{

if(RI)

{

RI=0

buf[putptr]=SBUF

putptr++

putptr&=0x0f

}

}

main()

{

TMOD=0x20

SCON=0x50

TH1=TL1=0xfd

TR1=1

ES=1

EA=1

putptr=0

getptr=0

while(1)

{

if(getptr!=putptr) //取数指针和存数指针如果不等

{

SBUF=buf[getptr]

getptr++

getptr&=0x0f

while(!TI)

TI=0

}

}

}

波特率是115200并不是说串口就一直在接收和发送数据,10ms不一定能够接收到123个字符的,所以这个计算时间的方式是不对的。这里应该每隔10ms主动去读取一次串口缓冲区,而不管缓冲区存放了多少字节。

可以有很多方法,用线程或者定时器,间隔10ms就去读串口,读到数据之后自己怎么处理都行了。

PolicyPktRecv(unsigned char *buf, unsigned int uLen )

{

struct Data_t *data1

data1 = (struct Data_t *)buf

RotateSpeed[count] = data1->RotateRate

Electricity[count] = data1->Electricity

Acceleration[count] = data1->Acceleration

count++

}

其中count、RotateSpeed[]、Electricity[]、Acceleration[]分别是全局变量和数组。count初始化为0.


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

原文地址: http://outofmemory.cn/sjk/6660445.html

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

发表评论

登录后才能评论

评论列表(0条)

保存