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;
}
#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
可以帮忙看一下我的程序哪里需要修改吗?谢谢!
从代码层面看不出哪里有什么问题,有没有用示波器确认下P32的波形? xtajmhfhn 发表于 2024-8-29 15:24
从代码层面看不出哪里有什么问题,有没有用示波器确认下P32的波形?
用示波器看是有方波输入的 南太平洋飞鱼 发表于 2024-8-29 17:28
用示波器看是有方波输入的
方便的话,完整的工程发一份 从程序看,你截取的外部中断初始化和中断函数没有问题。
但因为只有一部分,无法猜测你具体是如何触发外部中断的呢?
比如 ac_cycle = 0;进中断以后 ac_cycle = 3;,那是怎么进了中断的,最好是硬件连接和程序都来一份,大家帮你分析!
看不到程序不能分析,你得自己看有没有触发外部中断,如果触发了再往下进行排查。
如果不方便发的话,以下是我自己写着玩的demo,你看看可以参考下。
先进行的是初始化
然后是具体的执行
最后附上中断函数
多谢大家的帮忙指正了!问题找到了,是STC的库函数和自己编写的函数有重合导致的。
页:
[1]