找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1970|回复: 24
收起左侧

51单片机Uart与RGB兼容性问题

[复制链接]
ID:1092816 发表于 2023-9-19 11:40 | 显示全部楼层
串口数据接收部分位于UART_Routine()函数中的串口中断中。这意味着当该中断被触发时,会执行UART_Routine()函数来接收串口数据,并执行相应的动作。

问题1:
将RGB()函数放在主函数while(1)循环内部时,在执行RGB()函数期间,由于没有执行完毕,此时可能无法及时触发串口中断来接收指令。因此,指令所对应的动作无法被执行。你可以尝试在RGB()函数执行完毕后再进行串口指令的接收和执行。

问题2:
这可能是由于程序运行时使用了中断,同时存在几个中断源时,可能导致中断优先级出现问题。为了解决此问题,可以尝试:
1. 在主函数中加入全局变量flag并初始化为0。
2. 将RGB()函数移到主函数的while循环之外。
3. 主函数中加入一个条件语句判断,如果flag等于0,则执行RGB()函数;否则执行串口指令的接收和执行。

在RGB()函数执行期间,flag会被设置为非零值,避免概率性打断RGB灯执行对应指令的问题。当RGB()函数执行完毕后,flag会重新置零,再次执行串口指令的接收和执行。
回复

使用道具 举报

ID:1092816 发表于 2023-9-20 17:50 | 显示全部楼层
先排除硬件,如果单一模块运行没有问题,对于资源小的单片机,你要优化的是程序的架构,全部放while里不合适。你RGB里面的for也是耗CPU的,降低刷新频率试一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表