串口接收数据怎样存储在数组中

2025年03月12日 21:18
有2个网友回答
网友(1):

可以加一个整数索引,对加入的数据长度进行标识。更好的是对这个数据进行扩展,变成一个堆栈,对其进行操作。

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
#include
#include
#define byte unsigned char
byte queue_buf[20], idx = 0;

void push(byte n) //当串口每接收一个数据,就用push添加一个数据
{
if (idx < 20)
queue_buf[idx++] = n;
}

byte pop()
{
byte ret = 0;
if (idx-- > 0)
{
ret = queue_buf[0];
memcpy(queue_buf, &queue_buf[1], idx);
}
return ret;
}

byte size()
{
return idx;
}

byte clear()
{
memset(queue_buf, 0, 20);
idx = 0;
}

网友(2):

你用一个数组变量(也就是开辟一个接收缓冲区)就OK了如:
#include
#define uchar unsigned char
uchar buf[16],num;
void ser_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[num]=SBUF;
num++;
num&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
while(1);
}