找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机进入中断服务函数后关闭中断开关的疑问

[复制链接]
跳转到指定楼层
楼主
ID:98195 发表于 2025-5-26 12:52 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用51单片机做一个小物件,初始化设置外部中断0为下降沿触发,响应中断后关闭中断开关EX0=0,同时记录中断次数EX0_Cnt++,开始定时器0开关TR0=1,延时200毫秒(防止小于200毫秒时间内再次造成中断)后,关闭定时器0开关TR0=0,打开外部中断0开关EX0=1.程序如下所示,不知道是哪里出了问题,外部中断次数EX0_Cnt显示不正确。
void INT0_Isr() interrupt 0
{
    EX0 = 1;    //关闭外部中断0
    TR0 = 1;     //打开定时器0
    EX0_Cnt++;   //记录中断次数加1
}

void Timer0_Isr() interrupt 1
{
    Timer0_Cnt++;
    if(Timer0_Cnt>200)
    {
        Timer0_Cnt  = 0;
        EX0 = 1;
        TR0 = 0;
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1136941 发表于 2025-5-26 16:19 | 只看该作者
void INT0_Isr() interrupt 0
{
    EX0 = 1;    //关闭外部中断0
    TR0 = 1;     //打开定时器0
    EX0_Cnt++;   //记录中断次数加1
}
外部中断关闭了吗?
回复

使用道具 举报

板凳
ID:98195 发表于 2025-5-26 17:16 来自触屏版 | 只看该作者
太阳雨ZW 发表于 2025-5-26 16:19
void INT0_Isr() interrupt 0
{
    EX0 = 1;    //关闭外部中断0

要进两次外部中断了才能关闭
(EX0_Cnt自增2次)
回复

使用道具 举报

地板
ID:1109793 发表于 2025-5-26 18:46 | 只看该作者
对啊,关闭不是EX0 = 0吗?
回复

使用道具 举报

5#
ID:879809 发表于 2025-5-26 19:29 | 只看该作者
外部中断是哪里来的?你认为的中断次数不等于实际的中断次数,要用示波器单次触发抓波形才能确认。
回复

使用道具 举报

6#
ID:712097 发表于 2025-5-26 20:17 | 只看该作者
还要做软件或硬件防抖。
回复

使用道具 举报

7#
ID:278457 发表于 2025-5-27 02:02 | 只看该作者
你怎么没有把总中断打开呢?
回复

使用道具 举报

8#
ID:230500 发表于 2025-5-27 07:33 | 只看该作者
EX0 = 1;    //关闭外部中断0
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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