找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2592|回复: 6
打印 上一主题 下一主题
收起左侧

STC8H单片机串口中断和外部中断冲突

[复制链接]
跳转到指定楼层
楼主
ID:612392 发表于 2022-5-9 19:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在写一个单片机程序,使用INT0将单片机从掉电模式唤醒,上升下降沿均可唤醒。
当P32为低电平时,P1.0输出高电平,置高一个标志位,再用串口发送一个char(这里用0XAA代替)。
程序运行的时候,触发INT0时,程序就卡在UartSendByte(0XAA)这句,上位机能收到发出来的0XAA,但就不执行后面的语句了,卡住了。
把UartSendByte(0XAA)这行语句去掉,运行就正常。
中断优先级没改过,默认的中断优先级。是不是因为当前程序在INT0的中断程序里,不会响应其它中断?如果把串口中断优先级改得比INT0高是不是就OK了?

void INT0_Isr() interrupt 0
{
        if(!P32)
        {
                P10=1;                                //AFE wake up
                PoweronFlag=1;
                //UartSendByte(0XAA);
        }
}

以下是UartSendByte()及串口中断程序,都是直接copy STC手册的
void UartSendByte(uchar dat)
{
        while(UartBusy);
        UartBusy=1;
        SBUF=dat;        
}

void Uart1_Isr() interrupt 4
{
        while(TI)                                                
        {
                TI=0;
                UartBusy=0;
        }

}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301191 发表于 2022-5-9 21:57 | 只看该作者
顶一下
回复

使用道具 举报

板凳
ID:624769 发表于 2022-5-9 22:10 | 只看该作者
要么:在 main 函数中增加   PS = 1;
要么:把你的        //UartSendByte(0XAA);     改成:  SBUF = 0xAA;
回复

使用道具 举报

地板
ID:390416 发表于 2022-5-9 22:35 | 只看该作者
串口 别写死了,单片机发送到串口助手,以及串口助手显示到LCD1602 http://www.51hei.com/bbs/dpj-214747-1.html
回复

使用道具 举报

5#
ID:401564 发表于 2022-5-10 13:58 | 只看该作者
虽然你的代码只有一点,但却很乱
UartBusy这个要在启动的时候先清除,不然就会一直卡在那不动了
你这个中断不需要设置什么的了,默认的就行
串口只会被打断而已,外部中断完成之后,中断控制权还是会交给串口的
不应该在,外部中断中发送串口
当你串口发送一半的时候,外部中断被触发,进入中断,又发送一次串口,你这觉得这很乱吗?
1,串口发送要在主程序中发送
2,外部中断触发之后,也就是按键按下,不是马上发送,而进入中断之后,设置一个标志位,表示按键按下了,这个标志要在串口发送完成之后再清除
不然的话,按键抖动,就会产生串口不断的发送数据比如这样
void Int0_isr() interrupt 0        //外部中断0
{       
if(!P32)        {
key_press=1;                          //按下按键
key_100ms=100;//可以用做一些延时之类的,比如这个是100mS,串口发送完成之后,100mS再次按键是无用的
}
        IE0=0;
}


key_press在串口发送之后再清除,
回复

使用道具 举报

6#
ID:1091094 发表于 2023-8-10 20:57 | 只看该作者
这个和STC的89c51有什么区别吗  我用的外部中断加串口也是不怎么稳定  好像冲突了
回复

使用道具 举报

7#
ID:195496 发表于 2023-8-11 09:05 | 只看该作者
思路不清晰,不要在中断中判断管脚,在主程序中判断后,写个标志,中断判断标志后,清除标志,发送数据。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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