|
小弟剛剛開始學習單片機,在學習串口通信的時候遇到一個問題,下面是我的程序(有很詳細的注釋!!麻煩各位大神!)void Init();
int flag=0;
int dat[10];//dat是緩沖區,用于保存接收到的數據
int i=0;
int cout=0;//cout是計數器,用于表示當前還有幾個已經接收的數據未輸出
void main(){
Init();
SBUF=flag;//輸出flag來表示初始化成功
while(1){
if(cout!=0){ //如果cout不等于0,表示還有數據需要輸出,輸出數據,并將cout-1
SBUF=dat[--i];
cout--;
while(TI==0);
TI=0;
}
}
}
void Init(){//初始化函數
SCON=0x50;
PCON=0x80;
TMOD=0X20;
TH1=0xFD;
EA=1;
ES=1;
REN=1;
TR1=1;
}
void TIME0() interrupt 4{//接收中斷部分,接收到數據就進入中斷,將數據存入dat緩沖區中,并將cout+1
dat[i++]=SBUF;
RI=0;
cout++;
}
測試結果如下,每次第二次輸出的結果都會莫名的丟失一個數據! 如圖中的ready變成了rady! 我進行了很多次測試,唯獨偏偏第第二次的輸出結果會少第二個字符,其他后面的都沒有任何問題!這是怎么回事呢??
|
|