是的,數據一般不為隨機數據流,如果是固定長度的數據流,比如,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)
}
|