南太平洋飞鱼 发表于 2024-8-29 10:48:47

8H1K08外部中断0没有进入中断服务程序的问 | 已解决

以下是根据规格书中的例程编写的程序。发现无法进入到中断程序void INT0_Isr() interrupt 0中。有没有大神帮忙看一下这个是什么问题,谢谢!

u16 ac_cycle = 0;

void      Exti_init(void)
{

      P3M0 &= 0xFB;
      P3M1 &= 0xFB;
      IT0 = 0;                                                 //设置为上下沿中断
      EX0 = 1;
      EA = 1;
}

void INT0_Isr() interrupt 0
{

      ac_cycle = 3;

      
}

DebugLab 发表于 2024-8-29 12:12:51




#include "reg51.h"
#include "intrins.h"

sfr   P0M1    =   0x93;
sfr   P0M0    =   0x94;
sfr   P1M1    =   0x91;
sfr   P1M0    =   0x92;
sfr   P2M1    =   0x95;
sfr   P2M0    =   0x96;
sfr   P3M1    =   0xb1;
sfr   P3M0    =   0xb2;
sfr   P4M1    =   0xb3;
sfr   P4M0    =   0xb4;
sfr   P5M1    =   0xc9;
sfr   P5M0    =   0xca;

sbit    P10   =   P1^0;
sbit    P11   =   P1^1;
sbit    P32   =   P3^2;
sbit    P33   =   P3^3;

void INT0_Isr() interrupt 0
{
    if (P32)                                 //判断上升沿和下降沿
    {
      P10 = !P10;                           //测试端口
    }
    else
    {
      P11 = !P11;                           //测试端口
    }
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    IT0 = 0;                                    //使能INT0上升沿和下降沿中断
    EX0 = 1;                                    //使能INT0中断
    EA = 1;

    while (1);
}


南太平洋飞鱼 发表于 2024-8-29 14:00:35

可以帮忙看一下我的程序哪里需要修改吗?谢谢!

xtajmhfhn 发表于 2024-8-29 15:24:20

南太平洋飞鱼 发表于 2024-8-29 14:00
可以帮忙看一下我的程序哪里需要修改吗?谢谢!

从代码层面看不出哪里有什么问题,有没有用示波器确认下P32的波形?

南太平洋飞鱼 发表于 2024-8-29 17:28:23

xtajmhfhn 发表于 2024-8-29 15:24
从代码层面看不出哪里有什么问题,有没有用示波器确认下P32的波形?

用示波器看是有方波输入的

xtajmhfhn 发表于 2024-8-29 20:19:25

南太平洋飞鱼 发表于 2024-8-29 17:28
用示波器看是有方波输入的

方便的话,完整的工程发一份

Yim_Hom 发表于 2024-8-30 00:04:35

从程序看,你截取的外部中断初始化和中断函数没有问题。
但因为只有一部分,无法猜测你具体是如何触发外部中断的呢?
比如 ac_cycle = 0;进中断以后 ac_cycle = 3;,那是怎么进了中断的,最好是硬件连接和程序都来一份,大家帮你分析!

Yim_Hom 发表于 2024-8-30 00:14:40

看不到程序不能分析,你得自己看有没有触发外部中断,如果触发了再往下进行排查。

如果不方便发的话,以下是我自己写着玩的demo,你看看可以参考下。
先进行的是初始化


然后是具体的执行


最后附上中断函数





南太平洋飞鱼 发表于 2024-8-30 11:13:01

多谢大家的帮忙指正了!问题找到了,是STC的库函数和自己编写的函数有重合导致的。
页: [1]
查看完整版本: 8H1K08外部中断0没有进入中断服务程序的问 | 已解决