完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
当按下按键后,有几率导致程序卡死在串口发送的while(ti==0)中。
void Send_Data_To_UART0 (UINT8 c) { TI = 0; SBUF = c; while(TI==0); } 按键中断中没有程序修改TI的值,串口中断的优先级为3,管脚中断的优先级为2,还有个定时器中断的优先级为1.不知道具体是什么样的原因导致程序卡死在串口发送的判断语句中,要怎么样才能解决呢? |
|
相关推荐
1个回答
|
|
|
可能是由于按键中断触发时,会打断串口发送,导致TI一直为0,从而造成死循环。可以在按键中断服务函数中添加一个状态位,标识是否正在发送数据,也就是当程序发送数据时将状态位设为1,发送完成后重置为0。在发送数据时,可以在while循环中添加对该状态位的判断,如果为1,则跳过while循环等待TI被置为1,否则执行while循环等待。这样就可以避免死循环的情况发生。需要注意的是,由于状态位的修改是在中断服务函数中进行的,因此需要使用volatile修饰符来保证数据的可靠性。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1020浏览 1评论
1849浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1359浏览 1评论
1851浏览 0评论
1177浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:09 , Processed in 0.619095 second(s), Total 46, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
414