liuxianshu 发表于 2024-5-24 09:50:49

I/O 口中断,进不了中断程序是哪里的问题

帮忙看看,我这样用的 IO 口中断,进不了中断程序是哪里的问题

//测试工作频率为 11.0592MHz
#include "stc8h.h"
#include "intrins.h"
void main()
{
P_SW2 |= 0x80; //使能访问 XFR,没有冲突不用关闭
   
P5M0 |=0x10;
P5M1 &= ~0x10;


      
P2M0 |=0xd0;
P2M1 &= ~0xd0;


P3M0 &= ~0xe0;
P3M1 |=0xe0;         
P4M0 &= ~0x1e;
P4M1 |=0x1e;
P5M0 &= ~0x02;
P5M1 |=0x02;      
      
P3IM0|= 0xa0; //P37,P35口上升沿中断
P3IM0&= 0x0a; //P36口下降沿中断
P3IM1   = 0x00;
P3INTE= 0x70; //使能 P3 口中断
      
P4IM0|=0x14; //P42.P44口上升沿中断
P4IM0&= ~0x0a; //P41,P43口下降沿中断
P4IM1   =0x00;
P4INTE |=0x1e; //使能 P4 口中断



P5IM0&= ~0x02; //P5口下降沿中断
P5IM1|=0x02;
P5INTE |=0x02; //使能 P5 口中断


EA = 1;
while (1);
}
//由于中断向量大于 31,在 KEIL 中无法直接编译
//必须借用第 13 号中断入口地址
void common_isr() interrupt 13
{
                unsigned char intf3,intf4,intf5;
      
          intf3 = P3INTF;//P3中断标志位
                intf4 = P4INTF;//P4中断标志位
          intf5 = P5INTF;//P5中断标志位
                if (intf3,intf4,intf5)
                {
                              P4INTF = 0x00;
////////////////////////////////////////////////////////
////////////////////第一组///////////////////////////////
//////////////////////////////////////////////////////////                              
                              if (intf4 & 0x08)//P4.3 口下降沿中断
                              {
                                  P27 = 0;//第一路供电控制
                              }
                              if (intf4 & 0x10)//P4.4 口上升沿中断
                              {
                                  P27 = 0;//第一路供电控制
                              }
////////////////////////////////////////////////////////
////////////////////第二组///////////////////////////////                           
/////////////////////////////////////////////////////////                              
                              if (intf4 & 0x02)//P4.1 口下降沿中断
                              {
                                  P54 = 0;//第二路供电控制
                              }
                              if (intf4 & 0x04)//P4.2 口上升沿中断
                              {      
                                        P54 = 0;//第二路供电控制
                              }
////////////////////////////////////////////////////////
////////////////////第三组///////////////////////////////
///////////////////////////////////////////////////////////
                              if (intf3 & 0x40)//P3.6 下降沿口中断
                              {
                                  P24 = 0;//第三路供电控制
                              }
                              if (intf3 & 0x80)//P3.7 上升沿口中断
                              {
                                  P24 = 0;//第三路供电控制
                              }
////////////////////////////////////////////////////////
////////////////////第四组///////////////////////////////
/////////////////////////////////////////////////////////
                              if (intf3 & 0x20)//P3.5 上升沿口中断
                              {
                                  P26 = 0;//第四路供电控制
                              }
                              if (intf5 & 0x02)//P5.1 下降沿口中断
                              {
                                  P26 = 0;//第四路供电控制
                              }
//////////////////////////////////////////////////////////
                }
}


电子DIY小家 发表于 2024-5-24 10:08:01

.asm文件写了吗

乘风飞扬 发表于 2024-5-24 10:12:21

参考这个帖子:
所有普通I/O口都支持的外部中断演示程序,STC8系列、STC32系列, 中断号37~44
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4731
(出处: 国芯技术交流网站)

liuxianshu 发表于 2024-5-24 10:41:16

.asm文件   没写

电子DIY小家 发表于 2024-5-24 10:47:58

liuxianshu 发表于 2024-5-24 10:41
.asm文件   没写

用的13号中断,要参考手册添加这文件的 ~


liuxianshu 发表于 2024-5-24 10:59:07

其他中断号    是不是就不用这段代码了,这段代码,直接复制进去就可以了吗

liuxianshu 发表于 2024-5-24 11:44:13

电子DIY小家 发表于 2024-5-24 10:47
用的13号中断,要参考手册添加这文件的 ~

只需要加这几行   就可以了吗

liuxianshu 发表于 2024-5-24 11:46:19

电子DIY小家 发表于 2024-5-24 10:47
用的13号中断,要参考手册添加这文件的 ~

CSEG AT 0133H ; //P1口中断入口地址,如果是其他端口,修改这个中断入口地址即可
JMP P1INT_ISR
P1INT_ISR:
JMP 006BH ;// 借用13号中断的中断入口地址
END

梁工 发表于 2024-5-24 13:09:44

编译器打了补丁就可以扩展超过31的中断号。
使用13号中断,要用ASM处理一下扩展中断的跳转。

liuxianshu 发表于 2024-5-24 13:44:25

扩展超过31的中断号
页: [1] 2 3
查看完整版本: I/O 口中断,进不了中断程序是哪里的问题