51单片机串口工作方式0 外接74LS164的问题,TI=0还是TI=1?

有种说法说:“将数据载入SUBF之后,时钟脉冲和数据就会自动出现在单片机的I/O端口,程序不需要对I/O口再进行干预。但由于51单片机是准双向I/O,在使用串口通信时,不... 有种说法说:“将数据载入SUBF之后,时钟脉冲和数据就会自动出现在单片机的I/O端口,程序不需要对I/O口再进行干预。但由于51单片机是准双向I/O,在使用串口通信时,不能将I/O置0。所以在发送数据前,应对I/O口置1进行初始化,以保障单片机对串口的操控。”
{
SBUF=Dat;
while(TI==0)
{;}
TI=0;
}
按以上说法,应该TI=1才对,可是TI=0程序可运行,这里到底应该=1还是=0?各有什么影响?
展开
 我来答
lycdl
高粉答主

2017-02-05 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4915万
展开全部
你所说的 I/O脚,与TI没有任何关系。
TI是发送标志位,是在内部寄存器SCON中的一位。
再说:while(TI==0); 这样写就行,不要另加一对大括号,这是循环语句,条件是当TI=0时就循环等待,就是当SBUF,即串口正在发送数据时,TI=0,当发送结束了,TI=1,那就结束循环了,向下执行了,再TI=0,是为了下一次的再发送。
所以,这里的TI,是发送数据是否结束的标志位,与外部引脚I/O没有一点关系。
追问
先谢谢!我试验了,TI=0 ;   TI=1;甚至取消TI语句 都一样,程序都能运行,不知正确的应该是怎样的?
追答
那是因为你只发送一次,所以,TI=0和TI=1是没有区别的。
但实际上是不能只发送一次的,要发送很多次的,就必须是TI=0,才能再发送下一次的。
你试验也只是试验一次,你试验发送多次再看看。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式