xu__changhua 发表于 2025-3-19 20:54:56

8A8K64D4,I/O口 中断测试没能获得想要的结果(已解决)

测试IO口中断,分别测了P3.4和P3.5,倒是能进入中断服务程序里,只是在判断哪一个IO口时,即P3INTF寄存器都是相同的值0x03,所以无法判断是哪一个IO口引起的中断;
接着测试P3.2,获得的P3INTF值是0x03;
而测试P3.7时获得的P3INTF值是0x33。

xu__changhua 发表于 2025-3-19 21:00:25

//程序如下
#include "STC8A8K64D4.h"
void main()
{
        P_SW2 = 0X80;
        P3M0=0;P3M1=0;
        P3PU |= 0x04;
P3IM0 = 0x00;//低电平或下降沿中断
P3IM1 = 0x04;//P34&P35低电平中断
P3INTE = 0x04; //使能P34/P35口中断 P3WKUE |= 0X04;//使能P34/P35掉电唤醒
EA = 1;
while (1);
}

void P34P35_isr() interrupt 13
{
        unsigned char intf;
        intf = P3INTF;
if (P3INTF & 0x10)//P3.4 口中断
{
                P3INTF = 0;
}
if (P3INTF & 0x20)//P3.5 口中断
{
                P3INTF = 0;
}
}
//以下汇编程序也已加入项目
/*
CSEGAT0143H;P3 口中断入口地址
JMPP3INT_ISR
P3INT_ISR:
JMP006BH
END
*/

xu__changhua 发表于 2025-3-19 21:01:07

以上程序测得是P3.2

xu__changhua 发表于 2025-3-19 21:04:58

开始测是P34P34,失败了改P3.7,最后改P3.2,注释和判断没跟着改,只是看看P3INTF的值有没有对应说明书文档所述 的值

xu__changhua 发表于 2025-3-19 21:40:07

我在中断服务程序里加了一个LED,硬件仿真状态下全速运行功能是正常的。按P3,4按钮LED亮,按P3.5按钮,LED灭。
回到单步运行中断里还是测不到P3INTF值。不过没关系,运行程序正常就行。

xu__changhua 发表于 2025-3-19 21:41:18

//程序:
#include "STC8A8K64D4.h"
void main()
{
        P1M0=P1M1=0;
        P3M0=P3M1=0;
        P_SW2 = 0X80;
        P3PU |= 0x30;
P3IM0 = 0x00;//低电平或下降沿中断
P3IM1 = 0x30;//P34&P35低电平中断
P3INTE = 0x30; //使能P34/P35口中断 //P3WKUE |= 0X30;//使能P34/P35掉电唤醒
        P3INTF = 0;
EA = 1;
while (1);
}

void P34P35_isr() interrupt 13
{
        unsigned char intf;
        intf = P3INTF;
if (P3INTF & 0x10)//P3.4 口中断
{
                P3INTF = 0;
                P17 = 0;
}
if (P3INTF & 0x20)//P3.5 口中断
{
                P3INTF = 0;
                P17 = 1;
}
}

/*
CSEGAT0143H;P3 口中断入口地址
JMPP3INT_ISR
P3INT_ISR:
JMP006BH
END
*/

DebugLab 发表于 2025-3-19 23:01:38

xu__changhua 发表于 2025-3-19 21:40
我在中断服务程序里加了一个LED,硬件仿真状态下全速运行功能是正常的。按P3,4按钮LED亮,按P3.5按钮,LED灭 ...

仿真仅供参考,具体以实际运行为准

DebugLab 发表于 2025-3-19 23:04:36

还有建议直接用最新的AI8051U测试
老型号新增功能可能存在小瑕疵


学习或设计新产品也建议用最新型号

xu__changhua 发表于 2025-3-20 12:03:05

DebugLab 发表于 2025-3-19 23:01
仿真仅供参考,具体以实际运行为准

谢谢提醒。
项目原定于用P3.4和P3.5工作于Timer0和Timer1的仿外部中断(TH0TL0TH1TL1均0FFH)但设计考虑不周,当时没考虑到Timer2、3、4的中断优先级总是0,随着项目深入,就只好用Timer0做定时器了,P3.4不能仿外中断了,但电路板已经做好,才考虑用P3.4和P3.5做IO口中断。现在P3.4P3.5IO口中断工作于PD模式下的下降沿方式,项目测试一切正常。总算补救过来了。
页: [1]
查看完整版本: 8A8K64D4,I/O口 中断测试没能获得想要的结果(已解决)