单片机向PC发送字符串问题

程序开始是
uchar idata trdata1[] = { 'W','E','L','C','O','M','E',' ','T','O',' ','C','H','I','N','A','!',0x0d,0x0a,0x00};//字符串

uchar i =0

然后中断函数中
{ uchar Tcv = 0;
if(RI) { ...}

else {
TI = 0;
Tcv = trdata1[i]; //取来待发字符
if (Tcv != 0) {SBUF = Tcv; i++;}//不是0就发送
}
}

我想问的问题是(集中在串口中断那里)
1)当发送的时候,单片机不是一次发送一帧字符么,为什么还要用 i 变量逐个去发送?
2)另外,当Tcv =‘W',判断if后, SBUF='W’,i=1,那么是不是不断执行if语句?

正因为一次发送一帧数据,所以必须要用 i 来计数,以从数组中取数用于发送。注释很明白呀,不是到结尾就会不断地取数发送,当然进一次中断只能发送一个字节,因为发送时TI=0,发送结束后TI才置1,进入中断服务程序。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-18

    数据都是一个一个字节发送的,一帧数据只是每个字节之间时间间隔很短而已。

    Tcv=‘w’后知道 tcv==0,才停止发送。数组的最后的值0x00是停止条件。

第2个回答  2014-03-18
因为你发送的是一个字串,用数组定义的,即trdata1[],这样在发送时是一次发送一个符的,这个字符就是第i个数,所以,必须用变量 i 来选数组Tcv = trdata1[i]; 你这程序就是这么写的呀,怎么自己倒不明白呢。
第一次发送是,i=0,即Tcv = trdata1[0]=‘W’,发送后i++,i 才等于1的,为什么不会执行if语句呢,if 语句的判断条件是if (Tcv != 0) ,字符串不为0就发送,与i是多少没有关系呀。本回答被网友采纳
第3个回答  2014-03-18
1,串口通信每次只能发送一个字符,不是一个字符串!!
2,那个if语句就是判断是否可以发送字符,如果可以,看看是否有字符要发送,是的话就发送了。
第4个回答  2014-03-18
1)单片机一次只能发送一个字符,发送完了才能发送下一个字符
2)每次进入发送中断都会那个if语句
相似回答