找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1993|回复: 3
收起左侧

STC8单片机串口2中断后程序运行变慢

[复制链接]
ID:476652 发表于 2022-2-11 11:39 | 显示全部楼层 |阅读模式
各位大神,我在学校STC8A8K64S4A12单片机,用到串口2中断通信,
屏蔽掉中断程序时,其他程序运行速度很快,但一旦投入中断程序,且下载进去,程序进入串口2中断程序时,整个程序运行就变得很慢很慢了,
这是哪的问题啊?请有明白的大神指点指点!!感谢感谢!!
我用的串口2中断程序如下
void commIntProc(void) interrupt 8
{


  if (!S2RI) return;//S2RI串口2接收中断请求标志位
        S2CON &= ~S2RI;//S2RI不能位操作。复位串口2接收中断请求标志位
        //S2RI = 0;//这样操作错误。复位串口2接收中断请求标志位


        a3++;//显示累计进入中断的次数
        receTimeOut = 100;
        receBuf[receCount] = S2BUF;
                //S2CON=S2CON & 0xfe;//清零接收标志位S2RI
        receCount ++;
        receCount &= 0x1f;                // 最多只接收32个字节数据
}


为了能证实进入中断,我在中断程序里放了个a3++的指令(如上代码a3++;),a3值显示在OLED屏上,明显能看出这个a3在大幅度的变化。
可以确定程序进入了中断程序,而且频繁进入中断,导致a3不停的高速自加,所以屏才显示a3的数值大幅度变化的。
后来,我在后面加入了行清零指令,就是S2CON=S2CON & 0xfe;//清零接收标志位S2RI这行,但还是没有啥效果,
请有明白的大神指点指点!!感谢感谢!!
我的屏显示a3如下
51hei截图_20220211110929.jpg 51hei截图_20220211111137.jpg

OLED观察如下
as.gif



回复

使用道具 举报

ID:625730 发表于 2022-2-11 13:38 | 显示全部楼层
为什么会频繁进入串口接收中断?要检查一下其它代码。因为你的程序频繁执行中断函数,所以其它的功能运行就受到影响了。
回复

使用道具 举报

ID:161164 发表于 2022-2-11 14:45 | 显示全部楼层
void commIntProc(void) interrupt 8
{
  if (!S2RI) return;//S2RI串口2接收中断请求标志位
//下略。。。
}
S2RI在STC8.h里#define 为0x01(314行), 可以算是常数

当串口2有收到数据时, 串口2中断标志(SCON2位0)置位
进入串口2中断,if(!S2RI) => if(!0x01) => 永远为真-> return 跳出串口2中断
但是串口2标志(SCON2位0)没有被清零,立刻再次进入串口2中断
不断循环

修改方法在我的贴子中已经回答
但正被admin审查中


回复

使用道具 举报

ID:401564 发表于 2022-2-11 16:25 | 显示全部楼层
if (!S2RI) return;
这就是错的
串口2的中断标志位不能位寻址
只能用 if ((SCON2&S2RI)来进行判断
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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