找回密码
 立即注册
查看: 478|回复: 6

求助大佬,为什么普通IO口中断设置受P_SW2寄存器的影响?

[复制链接]
  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    8

    主题

    9

    回帖

    206

    积分

    中级会员

    积分
    206
    发表于 2023-5-28 12:10:21 | 显示全部楼层 |阅读模式

    求助大佬,为什么普通IO口中断设置受P_SW2寄存器的影响?

    源码如下:

    void main(void)
    {
                    EAXFR = 1;                                                                         // ʹÄÜ·ÃÎÊ XFR
                    CKCON = 0x00;                                                         // ÉèÖÃÍⲿÊý¾Ý×ÜÏßËÙ¶ÈΪ×î¿ì
                    WTST = 0x00;                                                                // ÉèÖóÌÐò´úÂëµÈ´ý²ÎÊý£¬µÈ´ýʱ¼äΪ0¸öʱÖÓ£¬CPUÖ´ÐгÌÐòËÙ¶È×î¿ì

    //    P_SW2 |= 0x80;
        CLKDIV = 0;                                //24MHzÖ÷Ƶ£¬·ÖƵÉèÖÃ
    //    P_SW2 &= 0x7F;

              P0M0 = 0x00;    P0M1 = 0x00;
        P1M0 = 0x00;    P1M1 = 0x00;
        P2M0 = 0x00;    P2M1 = 0x00;
        P3M0 = 0x00;    P3M1 = 0x00;
        P4M0 = 0x00;    P4M1 = 0x00;
        P5M0 = 0x00;    P5M1 = 0x00;
        P6M0 = 0x00;    P6M1 = 0x00;
        P7M0 = 0x20;    P7M1 = 0x00;

                    P0IM1 = 0x00;P0IM0 = 0x00;        // P0.0ÉèÖÃΪϽµÑØ´¥·¢
    //        P0IM1 = 0x00;P0IM0 = 0x01;        // P0.0ÉèÖÃΪÉÏÉýÑØ´¥·¢
    //        P0IM1 = 0x01;P0IM0 = 0x00;        // P0.0ÉèÖÃΪµÍµçƽ´¥·¢
    //        P0IM1 = 0x01;P0IM0 = 0x01;        // P0.0ÉèÖÃΪ¸ßµçƽ´¥·¢

                    P0INTE = 0x01;                                                        // ʹÄÜP0.0¿ÚÖжÏ
                    EA = 1;       

            while(1)
            {

    其中的
    //    P_SW2 |= 0x80;
    //    P_SW2 &= 0x7F;
    注释去掉之后,P0.0的端口中断就失效了,查了芯片手册,这样设置也没有发现有冲突呀,感觉有点奇怪,求了解的大佬指点,谢谢!
    回复 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9496

    回帖

    1万

    积分

    管理员

    积分
    14067
    发表于 2023-5-28 12:15:27 | 显示全部楼层
    扩展的 XFR 要能被访问,要设置允许访问
    1.png

    打开允许访问后,不要关闭
    回复 支持 1 反对 0 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3042

    回帖

    6857

    积分

    超级版主

    积分
    6857
    发表于 2023-5-28 13:11:53 | 显示全部楼层
    IO中断寄存器是扩展寄存器,访问扩展寄存器必须要P_SW2的最高位为1才能访问。
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
    发表于 2023-10-22 16:39:50 | 显示全部楼层
    梁工 发表于 2023-5-28 13:11
    IO中断寄存器是扩展寄存器,访问扩展寄存器必须要P_SW2的最高位为1才能访问。 ...

    老师您好,最近在学习STC32,按照网上的一些教程来不知道为何IO口的中断始终无法进入。
    已经使用了KEIL中断号扩展工具,编译也没有发生错误。
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4716
    代码整理到了这个贴上,属实困扰了许久,求助大佬能指点下
    (另外不知道有没有不适用中断13号的IO中断例程?)

    点评

    /************* 功能说明 ************** 请先别修改程序, 直接下载"Objects"里的"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植. 由于使用的中断号超过了31,所以KEIL C251编译器要拓展Keil的C代  详情 回复 发表于 2023-10-23 12:10
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    3042

    回帖

    6857

    积分

    超级版主

    积分
    6857
    发表于 2023-10-23 12:10:08 | 显示全部楼层
    本帖最后由 梁工 于 2023-10-23 12:11 编辑
    9DHans 发表于 2023-10-22 16:39
    老师您好,最近在学习STC32,按照网上的一些教程来不知道为何IO口的中断始终无法进入。
    已经使用了KEIL中 ...
    不需要借用13号中断的程序,直接使用对应的中断号。

    /*************        功能说明        **************

    请先别修改程序, 直接下载"Objects"里的"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
    由于使用的中断号超过了31,所以KEIL C251编译器要拓展Keil的C代码中断号, 运行一下"拓展Keil的C代码中断号.exe"即可。

    P0~P7所有IO中断测试程序.
    P0.0~P0.7中断对应取反P1.0~P1.7输出指示。
    P1.0~P1.7中断对应取反P0.0~P0.7输出指示。
    P2.0~P2.7中断对应取反P4.0~P4.7输出指示。
    P3.0~P3.7中断对应取反P4.0~P4.7输出指示。
    P4.0~P4.7中断对应取反P2.0~P2.7输出指示。
    P5.0~P5.7中断对应取反P4.0~P4.7输出指示。
    P6.0~P6.7中断对应取反P7.0~P7.7输出指示。
    P7.0~P7.7中断对应取反P6.0~P6.7输出指示。

    由于IO有限, 本例子只设置了P0.0~P0.7和P2.0~P2.7的中断, 中断函数分别取反P1.0~P1.7和P4.0~P4.7来指示进入中断.
    用户可以根据例子随意设置自己需要的IO中断.
    主函数取反P3.3输出一个方波信号, 方便用户测试.

    ******************************************/

    STC32-外部中断相关程序.rar (57.1 KB, 下载次数: 16)



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-30 20:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3

    主题

    9

    回帖

    83

    积分

    注册会员

    积分
    83
    发表于 2023-10-23 12:49:52 | 显示全部楼层
    梁工 发表于 2023-10-23 12:10
    不需要借用13号中断的程序,直接使用对应的中断号。

    /*************        功能说明        ************ ...

    谢谢梁老师~
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 98 天

    [LV.6]常住居民II

    10

    主题

    46

    回帖

    620

    积分

    高级会员

    积分
    620
    发表于 2023-10-27 10:40:54 | 显示全部楼层
    因为STC好多系列单片机是在传统80C51上升级了,扩展了好多功能,这些功能的使用要通过特殊功能寄存器来规定,传统单片机中内部特殊功能寄存器范围80H-FFH不够用,因此扩展了外部SFR,你要使用这一部分的SFR就要先允许开通这个区间后再用,也就用P_SW2 |= 0x80;来开通,显然P_SW2这个SFR肯定在内部80H-FFH范围内。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 18:29 , Processed in 1.248818 second(s), 56 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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