请教一个简单的串口发送问题,无关的语句没有写。
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未赋值前内容未定,是否应该先赋值,再启动定时器,还是像上述程序一样先启动后赋值也可以?
|