51单片机执行完串口发送指令SBUF=Data; CPU是不是一直在发送数据位,此时CPU是不是被占用了?

int Data;
SBUF=Data;
while(!TI);
while(!TI);这一句是在执行完上一条指令后立即进行还是等数据发送完后才进行?
假如SBUF=Data;执行,到发送完毕TI置位有一段时间,这段时间我们人为放大以便说明。问题就是单片机CPU是在执行一位一位的串口发送;
还是由另一个独立单元(类似于定时器)在执行串口发送,而单片机CPU已经在等待while(!TI);

首先你的Data类型有问题,如果是int型数据,应该分高、低字节发送(Data/256和Data%256)。while指令是跟着上一条立即执行的,发送完TI会置1,跳出while往下执行。
你补充说的后一种是对的,CPU只是在等着TI置位,数据发送由硬件完成。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-17
不是你理解的这样的。往SBUF里装入数据后,单片机的串口会自动发送,不需要CPU干预的。
CPU往SBUF里送完数后就执行while指令,等待硬件串口发送完毕的标志置一。
第2个回答  2011-04-17
CPU是在发送没问题,但是不要忘了单片机是有前后台系统的,比如一个程序中带有定时器,那么主程序执行的时候单片机也同时在不停的计数,这是互不干涉的,所以本人认为CPU此时并未被完全占用,while(!TI);是紧跟着执行的。
第3个回答  2011-04-17
串口发送是一位位发的,没发完继续发。while(!TI)是在那等待发完,机器对TI置“1”。追问

这个发送时由CPU进行的吗?
也就是说发送完毕了,机器自动对TI置1,然后CPU再执行while(!TI)

不知是不是这样理解?

追答

是,TI=1后 执行 while(!TI)后,就走了。while(!TI)是TI=0时在这里等待。

相似回答