是的,数据一般不为随机数据流,如果是固定长度的数据流,比如,FA,AA,AA,AA,AA,FA,BB,BB,BB,BB,FA,CC,CC,CC,CC.那么在定义变量时候就固定数组长度,如【4】;
如果为随机长度数据流,比如,......FA,AA,FA,BB,FA,CC,CC,CC,FA,DD,DD,DD,DD,DD.......那么在定义变量时候,不要定固定长度,为
unsigned char Re_buf[],counter=0,sign,len;//在文件头定义串口数据组。 为不固定长度设置,counter为计数
void serial() interrupt 4 //中断法
{
if(RI==1)//如果是接收中断,进行下面工作
{
RI=0;//中断结束标志位
Re_buf[counter]=SBUF;//串口接收到到的数据存放到数组中
if (counter==0 &&Re_buf[0] !=0xfa) return;//串口接收到0xFA,才开始执行,否则返回。
counter++;//计数
if (Re_buf[counter]==0xfa&&counter !=0) //停止位和开始位相同,作为停止位的条件为计数不为0有效。不会和开始位冲突
{
len= counter;//len为收到有效数据的长度
counter=0;//清零
sign=1;
}
}
}
main()
{
SCON = 0x50; // SCON: serail mode 1, 8-bit UART
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; // SMOD="1";
TH1 = 0xFA; // Baud:9600 fosc="11".0592MHz
TL1 = 0xFA;
IE |= 0x90; // 使能串行中断
TR1 = 1; // 启动TIMER1
EA = 1;
ES=1; //开串口中断
REN=1;
while(1)
}
|