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);会不会出现死循环;
while(1)
{
TI = 1;
puts("STC15F60S2单片机测试");
while(!TI);
TI = 0;
delay(50);//50ms延时
} 修正;添加延时函数
神农鼎 发表于 2024-4-15 07:33
工具里面的代码有看见; 现在讨论一下这个机制. 当void InterruptUART() interrupt 4函数中没有进行 TI位的判定; 在发送函数中while(!TI); 这样处理不当有BUG的原因是啥;看网络上面说的不是很明白 dabing0577 发表于 2024-4-15 08:11
工具里面的代码有看见; 现在讨论一下这个机制. 当void InterruptUART() interrupt 4函数中没有进行 TI位的 ...
一个是中断的方式处理标志位
一个是轮询的方式处理标志位 _奶咖君_ 发表于 2024-4-15 09:01
一个是中断的方式处理标志位
一个是轮询的方式处理标志位
那么按照楼主位代码会出现啥隐患呢 dabing0577 发表于 2024-4-15 15:30
那么按照楼主位代码会出现啥隐患呢
我能想到的,,,你没初始化串口就直接用了,,TI不会置位,,就卡死在while循环中了
别的就没遇见过啥问题,,
还有就是while这里会死等 浪费CPU
页:
[1]