nkgdream 发表于 2025-2-28 13:51:07

AI8051U卡中断

我在使用8051u的时候遇到一个问题代码里开启全部中断,定时器0123全部启用,定时器2用于串口发送数据,定时器0,1都开10ms中断中断目前没放代码,定时器3里运行差比和计算只有+—*/运算外加PID均为整数运算和浮点数运算+ADC采集定时器间隔10ms,单片机跑着跑就会导致中断卡死,将官方数学库lib移除即可解决问题,math头文件也加了,但是后面不知道为什么移除lib也无法解决中断卡死的问题,希望各位大佬帮忙,

YangY 发表于 2025-2-28 13:56:50

6

nkgdream 发表于 2025-2-28 14:23:52

附上代码

nkgdream 发表于 2025-2-28 14:31:52

下载进去中断不会马上开死要运行一会之后会随机卡死

DebugLab 发表于 2025-2-28 14:43:43

打开的中断必须要有中断函数
主频接近极限频率要正确配置IAP_TPS
使用数学库不要使用REMOVEUNUSED

nkgdream 发表于 2025-2-28 14:47:46

我三个中断都有中断函数,至于你说“主频接近极限频率要正确配置IAP_TPS”具体应该怎么操作“使用数学库不要使用REMOVEUNUSED”修改了没作用

nkgdream 发表于 2025-2-28 14:49:57

设置了IAP_TPS=40;

nkgdream 发表于 2025-2-28 14:53:07

你说的方案我都试过了并没有解决我的问题

王昱顺 发表于 2025-2-28 17:03:09

nkgdream 发表于 2025-2-28 14:53
你说的方案我都试过了并没有解决我的问题

问题很简单,通过屏蔽部分代码来逐渐定位就可以定位到了

原因是串口中断函数中没有对接收标志位清零,并且初始化代码中,对RXD配置为了高阻输入状态,此时端口电平不定,极其容易受到外部干扰造成电平信号波动。
如果接收到外部的低电平信号,则会导致S4RI产生一个中断标志,而在中断函数中又未对这个标志进行清零处理,所以就会导致反复的进入串口4中断

添加这段代码后解决问题



程序中的IO口配置
使用小程序解析后为此状态:




以下是修改好后验证通过的工程文件:


页: [1]
查看完整版本: AI8051U卡中断