求大神。。。。。。如何用数组一次提取多个串口数据。。
时间:10-02
整理:3721RD
点击:
代码如下,想将串口2获取的数据(11个数据一包)保存到Re_buf数组中。纠结好久了。求大神
#include<stc12C5A60S2.h>
#define S2RI 0x01 //串口2接收中断请求标志位
#define S2TI 0x02 //串口2发送中断请求标志位
unsigned char flag1,flag2,temp1,b,temp2,c;
extern char Re_buf[11];
/****************串行口初始化函数****************/
void InitUART(void)
{
TMOD = 0x20; //定时器1工作在方式2 8位自动重装
SCON = 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收
TH1 = 0xFD; //定时器1初值
TL1 = TH1;
TR1 = 1; //定时器1开始计数
EA =1; //开总中断
ES =1; //开串口1中断
S2CON = 0x50; //串口2工作在方式1 10位异步收发 S2REN=1允许接收
BRT = 0xFD; //独立波特率发生器初值
AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数
IE2 =0x01; //开串口2中断 ES2=1
}
/****************串行口1发送****************/
void UART_1SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI); //若TI=0,在此等待
TI = 0;
}
/*****************主函数******************/
void main(void)
{
int i=0;
b=0xAA;
c=0xCC;
InitUART(); //串行口初始化
while(1)
{
if(flag2==1)
{
flag2=0;
if(Re_buf[0]==0x55) //检查帧头
{
}
}
}
}
/************串行口2中断处理函数*************/
void UART_2Interrupt(void) interrupt 8
{
int i=0;
for(i=0;i<10;i++)
{
if(S2CON&S2RI)
{
Re_buf=S2BUF;
S2CON&=~S2RI;
}
}
flag2=1;
}
#include<stc12C5A60S2.h>
#define S2RI 0x01 //串口2接收中断请求标志位
#define S2TI 0x02 //串口2发送中断请求标志位
unsigned char flag1,flag2,temp1,b,temp2,c;
extern char Re_buf[11];
/****************串行口初始化函数****************/
void InitUART(void)
{
TMOD = 0x20; //定时器1工作在方式2 8位自动重装
SCON = 0x50; //串口1工作在方式1 10位异步收发 REN=1允许接收
TH1 = 0xFD; //定时器1初值
TL1 = TH1;
TR1 = 1; //定时器1开始计数
EA =1; //开总中断
ES =1; //开串口1中断
S2CON = 0x50; //串口2工作在方式1 10位异步收发 S2REN=1允许接收
BRT = 0xFD; //独立波特率发生器初值
AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数
IE2 =0x01; //开串口2中断 ES2=1
}
/****************串行口1发送****************/
void UART_1SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI); //若TI=0,在此等待
TI = 0;
}
/*****************主函数******************/
void main(void)
{
int i=0;
b=0xAA;
c=0xCC;
InitUART(); //串行口初始化
while(1)
{
if(flag2==1)
{
flag2=0;
if(Re_buf[0]==0x55) //检查帧头
{
}
}
}
}
/************串行口2中断处理函数*************/
void UART_2Interrupt(void) interrupt 8
{
int i=0;
for(i=0;i<10;i++)
{
if(S2CON&S2RI)
{
Re_buf=S2BUF;
S2CON&=~S2RI;
}
}
flag2=1;
}
求大神啊。QAQ
话说你放一个数据进数组,你数组下标不自增的?怎么可能放进去。你是11个数据还是11位?char类型数组一个元素只能放8位。
用指针,指向数组第一个元素,每读到一个数据指针++。
int i = 0;
void UART_2Interrupt(void) interrupt 8
{
if(S2CON&S2RI)
{
Re_buf[i++]=S2BUF;
if(i >= 数组最大长度)
{
i = 数组最大长度 - 1;
}
S2CON&=~S2RI;
}
}