請教一個簡單的串口發送問題,無關的語句沒有寫。
unsigned char i;
unsigned char a[9]={1,2,3,4,5,6,7,8,9};
SCON=0X40;
TMOD=0X20;
TH1=0xfd;//@11.0592MHz,波特率9600
TL1=0xfd;
delay();
TR1=1;//啟動發送
for(i=0;i<9;i++)
{ SBUF=a[ i][ i];
while(TI==0)//開始檢測TI是否為零,表示未完成發送,等待,直到為1,跳出while循環
;//這2行抄教材的,感覺不太對,因為沒有發送完成時,TI也為0
TI=0; if(i==8)
TR1=0;
}
問題1:第一次循環,i=0,將數組的第一個元素賦值給SBUF,開始發送,然后等待發送完成,i++,進行第二次for循環。最后一次for循環,關閉計時器停止發送,整個程序作用是發送一遍01~09給計算機串口助手。現在是不停的發送01~09,i==8的語句不起作用,請問是為什么???
問題2:SBUF未賦值前內容未定,是否應該先賦值,再啟動定時器,還是像上述程序一樣先啟動后賦值也可以?
|