STC串口发送卡住,卡在while(!TI)

代码有时会卡在while(!TI)处,导致看门狗超时单片机重启。原因是在判断“!TI”前进了串口中断,TI清零了,然后再判断“!TI”,导致为真,卡在#1处,进而看门狗超时单片机重启。
在这里插入图片描述

void uart_byte_send(uint8_t dat8)
{
	TI = 0; 
	SBUF = dat8;
	while(!TI); 		//#1
	TI = 0; 
}

void uart_interrupt_receive(void) interrupt 4
{ 
	if(RI==1)
	{
		RI=0;
		//用户代码
	}
	if(TI==1)		//#2
	{
		TI=0;
	}
}

解决方法,修改如下:

void uart_byte_send(uint8_t dat8)
{
	ES=0;		//关闭串口中断
	TI = 0; 
	SBUF = dat8;
	while(!TI); 		//#1
	TI = 0; 
	ES=1;		//打开串口中断
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 10:08:01       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 10:08:01       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 10:08:01       4 阅读
  4. Python语言-面向对象

    2024-07-10 10:08:01       4 阅读

热门阅读

  1. 【PyTorch单点知识】自动求导机制的原理与实践

    2024-07-10 10:08:01       11 阅读
  2. 大数据平台之Hive Metastore

    2024-07-10 10:08:01       8 阅读
  3. 《框架封装 · Redis 事件监听》

    2024-07-10 10:08:01       7 阅读
  4. Knife4j的原理及应用详解(四)

    2024-07-10 10:08:01       9 阅读
  5. Stable Diffusion 深入浅出,一看就会

    2024-07-10 10:08:01       10 阅读
  6. Oracle 动态编译数据库对象

    2024-07-10 10:08:01       10 阅读
  7. 从“技术驱动”向“应用驱动”

    2024-07-10 10:08:01       10 阅读
  8. HTML(30)——动画

    2024-07-10 10:08:01       8 阅读