找回密码
 立即注册
查看: 154|回复: 8

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 2025-3-19 20:54:56 | 显示全部楼层 |阅读模式
测试IO口中断,分别测了P3.4和P3.5,倒是能进入中断服务程序里,只是在判断哪一个IO口时,即P3INTF寄存器都是相同的值0x03,所以无法判断是哪一个IO口引起的中断;
接着测试P3.2,获得的P3INTF值是0x03;
而测试P3.7时获得的P3INTF值是0x33。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 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;
  }
}
//以下汇编程序也已加入项目
/*
CSEG  AT  0143H  ;P3 口中断入口地址
  JMP  P3INT_ISR
P3INT_ISR:
  JMP  006BH
  END
*/
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 2025-3-19 21:01:07 | 显示全部楼层
以上程序测得是P3.2
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 2025-3-19 21:04:58 | 显示全部楼层
开始测是P34P34,失败了改P3.7,最后改P3.2,注释和判断没跟着改,只是看看P3INTF的值有没有对应说明书文档所述 的值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 2025-3-19 21:40:07 | 显示全部楼层
我在中断服务程序里加了一个LED,硬件仿真状态下全速运行功能是正常的。按P3,4按钮LED亮,按P3.5按钮,LED灭。
回到单步运行中断里还是测不到P3INTF值。不过没关系,运行程序正常就行。

点评

仿真仅供参考,具体以实际运行为准  详情 回复 发表于 2025-3-19 23:01
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 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;
  }
}

/*
CSEG  AT  0143H  ;P3 口中断入口地址
  JMP  P3INT_ISR
P3INT_ISR:
  JMP  006BH
  END
*/
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-19 23:01:38 | 显示全部楼层
xu__ch*** 发表于 2025-3-19 21:40
我在中断服务程序里加了一个LED,硬件仿真状态下全速运行功能是正常的。按P3,4按钮LED亮,按P3.5按钮,LED灭 ...

仿真仅供参考,具体以实际运行为准
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-19 23:04:36 | 显示全部楼层
还有建议直接用最新的AI8051U测试
老型号新增功能可能存在小瑕疵
截图202503192303564542.jpg

学习或设计新产品也建议用最新型号
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2025-04-06 00:03:37
已绑定手机

10

主题

45

回帖

222

积分

中级会员

积分
222
发表于 2025-3-20 12:03:05 | 显示全部楼层
Debu*** 发表于 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模式下的下降沿方式,项目测试一切正常。总算补救过来了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:20 , Processed in 0.181277 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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