|
是的,數(shù)據(jù)一般不為隨機(jī)數(shù)據(jù)流,如果是固定長度的數(shù)據(jù)流,比如,F(xiàn)A,AA,AA,AA,AA,FA,BB,BB,BB,BB,FA,CC,CC,CC,CC.那么在定義變量時候就固定數(shù)組長度,如【4】;
如果為隨機(jī)長度數(shù)據(jù)流,比如,......FA,AA,FA,BB,FA,CC,CC,CC,FA,DD,DD,DD,DD,DD.......那么在定義變量時候,不要定固定長度,為
unsigned char Re_buf[],counter=0,sign,len;//在文件頭定義串口數(shù)據(jù)組。 為不固定長度設(shè)置,counter為計(jì)數(shù)
void serial() interrupt 4 //中斷法
{
if(RI==1)//如果是接收中斷,進(jìn)行下面工作
{
RI=0;//中斷結(jié)束標(biāo)志位
Re_buf[counter]=SBUF;//串口接收到到的數(shù)據(jù)存放到數(shù)組中
if (counter==0 &&Re_buf[0] !=0xfa) return;//串口接收到0xFA,才開始執(zhí)行,否則返回。
counter++;//計(jì)數(shù)
if (Re_buf[counter]==0xfa&&counter !=0) //停止位和開始位相同,作為停止位的條件為計(jì)數(shù)不為0有效。不會和開始位沖突
{
len= counter;//len為收到有效數(shù)據(jù)的長度
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)
}
|
|