找回密码
 立即注册
查看: 681|回复: 4

求请教!!STC32的IO口中断处理

[复制链接]

该用户从未签到

1

主题

2

回帖

25

积分

新手上路

积分
25
发表于 2023-6-28 11:17:26 | 显示全部楼层 |阅读模式
void main(void)
{
        //u8 key;
        CKCON =0x00;    //设置外部总线最快
        EAXFR = 1; //使能访问
        WTST  =0x00;  //设置代码等待参数
                                    //赋值为0.可将CPU执行程序的熟读设置为最快

        P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口    0000 1111 0x00        P0M1 |= 0x0F;   P0M0 |= 0x00;
        P0M1 |= 0x0F;   P0M0 |= 0x00;
    P1M1 = 0x00;   P1M0 = 0x00;   //
    P2M1 = 0x00;   P2M0 = 0x00;   //
        P2M1 |= 0xFC;   P2M0 |= 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;   //
    P4M1 = 0x00;   P4M0 = 0x00;   //
        P4M1 |= 0x60;   P4M0 |= 0x00;    //0110 0000
    P5M1 = 0x00;   P5M0 = 0x00;   //

        UART4_config(0);    //选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer4做波特率.
        
        P0IM0 |= 0xFF;            //高电平中断    0000 1111
        P0IM1 |= 0xFF;
        P0INTE |= 0xFF;        //使能P3口中断
        
        P2IM0 |= 0xFC;            //高电平中断    1111 1100
        P2IM1 |= 0xFC;
        P2INTE |= 0xFC;        //使能P2口中断
        
        P4IM0 |= 0x60;            //高电平中断    0110 0000
        P4IM1 |= 0x60;
        P4INTE |= 0x60;        //使能P4口中断
        
        EA=1;
      while(1);
}
//中断处理

void common_isr() interrupt 13
{
    u8 intf0;
    u8 intf2;
    u8 intf4;
    intf0 =  P0INTF ;
    intf2 =  P2INTF ;
    intf4 =  P4INTF;
   
    if(intf0)
    {
        P0INTF = 0x00;
        P2INTF = 0x00;
        P4INTF = 0x00;
        if(intf0 & 0x01)    //P00 -->fire1
        {
                    FIRE1_Flag = 1;
        }
        if(intf0 & 0x02)    //P01 -->fire2
        {
                    FIRE2_Flag = 1;
        }
        if(intf0 & 0x04)    //P02 -->fire3
        {
                FIRE3_Flag = 1;
        }
   }
}

//ISR.ASM
//将下面的代码保存到相同的ISR.ASM,然后将文件添加到项目中即可

CSEG AT 0133H ;P1 口中断入口地址
    JMP P0INT_ISR
CSEG AT 013BH ;P2 口中断入口地址
    JMP P2INT_ISR   
CSEG AT 014BH ;P4口中断入口地址   
    JMP P4INT_ISR

PXINT_ISR:
JMP 006BH ;借用 13 号中断的入口地址
END
  整个程序实现IO口的高电平中断,中断好像都没有进去,求请教一下!!



回复 送花

使用道具 举报

该用户从未签到

1

主题

2

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2023-6-28 11:30:55 | 显示全部楼层
//ISR.ASM
//将下面的代码保存到相同的ISR.ASM,然后将文件添加到项目中即可

CSEG AT 0133H ;P1 口中断入口地址
        JMP PXINT_ISR
CSEG AT 013BH ;P2 口中断入口地址
        JMP PXINT_ISR       
CSEG AT 014BH ;P4口中断入口地址       
        JMP PXINT_ISR

PXINT_ISR:
JMP 006BH ;借用 13 号中断的入口地址
END


这部分有错已经修改
回复 支持 反对 送花

使用道具 举报

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

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-6-29 10:22:43 | 显示全部楼层
    参考附件例程,设置P0口高电平中断,IO口中断函数里判断中断源翻转对应的P2口。
    在主循环里翻转P00,通过示波器可以看到,P00为高电平时,会不断产生中断反复触发P20翻转。
    P00为低电平时不产生中断,P20不再翻转。
    1.png

    IO口中断-高电平中断-STC32G.zip

    7.42 KB, 下载次数: 34

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    回帖

    25

    积分

    新手上路

    积分
    25
     楼主| 发表于 2023-7-3 16:38:30 | 显示全部楼层
    乘风飞扬 发表于 2023-6-29 10:22
    参考附件例程,设置P0口高电平中断,IO口中断函数里判断中断源翻转对应的P2口。
    在主循环里翻转P00,通过示 ...

    请问STC32可以同时检测同一端口的上升沿和下降沿吗
    下面是我的代码:
    P2IM0 = 0xff|0x3C;  //上升沿中断和下降沿中断                //0011 1100
                    P2IM1 = 0;
                    P2INTE = 0xff; //使能 P2 口中断
                    P2WKUE = 0xff; //使能 P2 口中断唤醒


            if(intf2)
            {
                    P2INTF = 0x00;
                    P2_IO_INTERRUPT=1;
                    if(flag == 0)  //默认是上升沿中断
                    {
                            flag = 1;
                            P2IM0 = 0x00;  //设置为下降沿中断
                      P2IM1 = 0;
                    }
                    else if(flag == 1)
                    {
                            flag =0;
                            P2IM0 = 0xff;  //设置为上升沿中断
                      P2IM1 = 0;                        
                    }

    检测一个开关的两种状态,开关默认关闭,打开和关闭各发送一个数据包
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2023-7-3 18:32:56 | 显示全部楼层
    IO口中断只支持以下四种模式:

    1.png

    可以在中断里进行切换。例如脚位是低电平时设置上升沿中断,脚位电平变高后触发上升沿中断,在中断里切换为下降沿产生中断,这样脚位电平变低时会再次触发中断。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-18 18:43 , Processed in 0.062535 second(s), 47 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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