找回密码
 立即注册
查看: 1363|回复: 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


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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

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

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

7.42 KB, 下载次数: 100

回复 支持 反对

使用道具 举报 送花

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;                        
                }

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

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

1.png

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:58 , Processed in 0.212155 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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