将SBUF中的数储存为数组
时间: 2024-03-05 15:52:07 浏览: 20
在C51单片机中,SBUF是用于串口通信的寄存器,接收到的数据可以通过SBUF寄存器来获取。要将SBUF中的数据存储到数组中,可以在串口中断服务程序中进行处理。
下面是一个示例代码,演示如何在串口中断服务程序中将SBUF中的数据存储到数组中:
```c
#include <8051.h>
#define BUFFER_SIZE 16
// 定义一个全局数组用于存储串口接收到的数据
unsigned char buffer[BUFFER_SIZE];
// 定义一个全局变量用于记录数组的下标
unsigned char index = 0;
void uart_isr() interrupt 4 {
if (RI) { // 如果接收到数据
buffer[index++] = SBUF; // 将数据存储到数组中
if (index >= BUFFER_SIZE) { // 如果数组已满
index = 0; // 重置下标
}
RI = 0; // 清除接收中断标志
}
if (TI) { // 如果发送数据完成
TI = 0; // 清除发送中断标志
}
}
void main() {
// 初始化串口
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ES = 1;
EA = 1;
// 主循环
while (1) {
// do something
}
}
```
在上面的代码中,定义了一个长度为16的数组 `buffer`,用于存储串口接收到的数据。在串口中断服务程序中,先判断接收标志 `RI` 是否为1,如果为1则表示接收到了数据,将数据存储到数组中,并将下标 `index` 加1。如果数组已满,则将下标重置为0。最后,清除接收中断标志 `RI`。
注意,如果要在主程序中使用数组中的数据,需要使用 `volatile` 关键字来声明数组,以确保编译器不会对数组进行优化。例如:
```c
volatile unsigned char buffer[BUFFER_SIZE];
```