C51 串口 TI发送中断标志位的问题? 30

为什么,发送过程中TI是置0的?TI不就是没有发出中断请求吗,没有中断请求,单片机怎么响应并执行“串口发送”这个动作?小白求助前辈们... 为什么,发送过程中TI是置0的?TI不就是没有发出中断请求吗,没有中断请求,单片机怎么响应并执行“串口发送”这个动作?
小白求助前辈们
展开
 我来答
我爱柒
2023-06-08
知道答主
回答量:4
采纳率:0%
帮助的人:1293
展开全部
在串口通信中,TI(Transmit Interrupt)是用于指示串口发送缓冲区是否为空的标志位。当串口发送缓冲区为空时,TI被置为1,表示可以发送新的数据;当串口发送缓冲区不为空时,TI被置为0,表示不能发送新的数据。

在发送数据时,如果数据已经完全发送出去,即发送缓冲区为空,那么TI会被置为1,表示可以发送新的数据。此时,如果单片机检测到TI为1,就会产生一个中断请求,通知单片机可以继续进行下一次串口发送操作。

需要注意的是,TI标志位只用于指示串口发送缓冲区是否为空,而不能直接用于控制串口发送操作。因此,即使TI被置为0,单片机也可以执行串口发送操作。这是因为串口发送操作需要等待数据完全发送出去后才能继续进行下一次发送。因此,即使TI被置为0,只要数据没有完全发送出去,单片机仍然可以继续执行串口发送操作。
无畏无知者

2020-04-13 · TA获得超过4.5万个赞
知道大有可为答主
回答量:2.1万
采纳率:86%
帮助的人:5190万
展开全部

就是说发送寄存器空的时候,TI=1,通过硬件自动设置;

当然在开始发送前,发送寄存器肯定是空的,所以在发起传送前,先把TI=0(由软件完成);

然后  ES=1;   //开串口中断

那么当 SBUF= A 时,立即自动地执行发送

所以在中断例程里要如下的固定语句

void USART_ISR() interrupt 4 

{ 

     if(RI) { RI=0; ...... ; }

    if(TI) { TI=0; ...... ; } 

} 

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式