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?各有什么影响? 展开
{
SBUF=Dat;
while(TI==0)
{;}
TI=0;
}
按以上说法,应该TI=1才对,可是TI=0程序可运行,这里到底应该=1还是=0?各有什么影响? 展开
1个回答
展开全部
你所说的 I/O脚,与TI没有任何关系。
TI是发送标志位,是在内部寄存器SCON中的一位。
再说:while(TI==0); 这样写就行,不要另加一对大括号,这是循环语句,条件是当TI=0时就循环等待,就是当SBUF,即串口正在发送数据时,TI=0,当发送结束了,TI=1,那就结束循环了,向下执行了,再TI=0,是为了下一次的再发送。
所以,这里的TI,是发送数据是否结束的标志位,与外部引脚I/O没有一点关系。
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,才能再发送下一次的。
你试验也只是试验一次,你试验发送多次再看看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询