dabing0577 发表于 2024-4-14 22:22:02

STC15F2K60S2发送代码请教

void main()
{
      UARTInit(); //串口初始化
      while(1)
      {
                TI = 1;
                puts("STC15F60S2单片机测试");
                while(!TI);
                TI = 0;
      }      
}

/* UART中断服务函数 */
void InterruptUART() interrupt 4
{
    EA = 0;
    if(RI)
    {
      RI = 0;
      RxdByte = SBUF;
      SBUF = RxdByte;//接收到的数据又直接发回
    }
    EA = 1;
}



这段简单代码,while(!TI);会不会出现死循环;



dabing0577 发表于 2024-4-14 22:24:12

        while(1)
        {
               TI = 1;
                puts("STC15F60S2单片机测试");
                while(!TI);
                TI = 0;

                delay(50);//50ms延时
        }        修正;添加延时函数

神农鼎 发表于 2024-4-15 07:33:51


dabing0577 发表于 2024-4-15 08:11:59

神农鼎 发表于 2024-4-15 07:33

工具里面的代码有看见; 现在讨论一下这个机制. 当void InterruptUART() interrupt 4函数中没有进行 TI位的判定;   在发送函数中while(!TI);   这样处理不当有BUG的原因是啥;看网络上面说的不是很明白

_奶咖君_ 发表于 2024-4-15 09:01:37

dabing0577 发表于 2024-4-15 08:11
工具里面的代码有看见; 现在讨论一下这个机制. 当void InterruptUART() interrupt 4函数中没有进行 TI位的 ...

一个是中断的方式处理标志位
一个是轮询的方式处理标志位

dabing0577 发表于 2024-4-15 15:30:13

_奶咖君_ 发表于 2024-4-15 09:01
一个是中断的方式处理标志位
一个是轮询的方式处理标志位

那么按照楼主位代码会出现啥隐患呢

_奶咖君_ 发表于 2024-4-15 16:22:01

dabing0577 发表于 2024-4-15 15:30
那么按照楼主位代码会出现啥隐患呢

我能想到的,,,你没初始化串口就直接用了,,TI不会置位,,就卡死在while循环中了
别的就没遇见过啥问题,,
还有就是while这里会死等 浪费CPU
页: [1]
查看完整版本: STC15F2K60S2发送代码请教