找回密码
 立即注册
查看: 250|回复: 8

STC8H的外部中断2的开关控制

[复制链接]

该用户从未签到

3

主题

6

回帖

34

积分

新手上路

积分
34
发表于 2023-6-15 11:52:09 | 显示全部楼层 |阅读模式
用EX2做了按键用以启动电机旋转,按一次电机正反转一次,时间约3秒。进入中断后立即关闭中断,电机正反转旋转完成回位后再打开中断并清零中断标志,这个过程没有问题。问题是在电机旋转过程中,EX2明明是关闭了的,但在约1~2秒电机停转前再次按下这个外部中断2的按键,单片机仍能捕捉到这个操作并记录下来,这样导致在电机回位停转后又会再来一个正反转的循环。不知道这个问题是怎么导致的。电机回位停转时重打开EX2后也立即清0中断标志了,但仍然会再次进入电机正反转循环。。。何故?
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 07:59
  • 签到天数: 101 天

    [LV.6]常住居民II

    41

    主题

    1016

    回帖

    6971

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6971
    QQ
    发表于 2023-6-15 13:51:11 | 显示全部楼层
    看不到代码怎么写的,应该是代码的问题,建议如下修改:
    1.仔细检查中断的开关是否关闭,是不是关错了中断,再不然关闭总中断也可
    2.尝试在代码里增加电机运动结束标志位,如果电机没有运行结束,中断按键怎么按都不让他记录,这样就不会多次触发了。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 2023-6-15 15:36:36 | 显示全部楼层
    进中断后即执行
    INTCLKO &= 0xEF;
    关闭中断。电机回位后执行
    INTCLKO |= EX2;
    再开中断,如果不开中断,则按键确实不影响,说明中断确实关闭了,但是在开中断前执行按键,该次按键操作仍然会被记录并执行,不知道什么原因。总中断不能关闭,需要计时控制电机工作时间。谢谢。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 2023-6-15 16:34:01 | 显示全部楼层
    INTCLKO &= 0xEF;关中断的语句放中断外面。
    ---这样试过,放到主程序中断处理函数中,同样的问题复现。

    点评

    重新打开中断之前清空一下这个标志寄存器  详情 回复 发表于 2023-6-15 16:48
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:59
  • 签到天数: 101 天

    [LV.6]常住居民II

    41

    主题

    1016

    回帖

    6971

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6971
    QQ
    发表于 2023-6-15 16:48:00 | 显示全部楼层
    大灵通 发表于 2023-6-15 16:34
    INTCLKO &= 0xEF;关中断的语句放中断外面。
    ---这样试过,放到主程序中断处理函数中,同样的问题复现。 ...




    重新打开中断之前清空一下这个标志寄存器
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 2023-6-15 17:16:12 | 显示全部楼层
    AUXINTIF &= 0xEF;
    加上这句后问题解决了,但硬件自动清零应该不需要软件再清啊?这是个什么问题?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 2023-6-15 17:16:32 | 显示全部楼层
    AUXINTIF &= 0xEF;
    加上这句后问题解决了,但硬件自动清零应该不需要软件再清啊?这是个什么问题?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    6

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 2023-6-15 17:20:31 | 显示全部楼层
    大概明白了,虽然中断关闭了,但是产生了中断事件,所以在打开中断后会立即响应之前的中断事件请求。是这样理解吧?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-6-15 18:43:34 | 显示全部楼层
    这些标志位产生中断后,进入中断程序时硬件会自动清除
    但是如果没有开启中断,满足触发条件时仍然会设置中断标志,开启中断后就会进入中断并自动清除标志
    如果不希望出现一开启中断就进入中断函数的话,在开启中断前先手动清一下中断标志。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 07:35 , Processed in 0.095737 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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