8H4K32TL, 普通I/O-P2.5 外部中断,要怎配置样才能进入中断函数
请教厂家:用Datasheet上面的例程也进步了中断函数。
现在用P2.5作为外部中断,有5.1K上拉电阻,接地如通过按键或者镊子短接时产生中断信号,不知道怎么样才能进入中断函数。
测试代码如下:代码能编译通过,就是进步了中断函数,按照手册上的例子(不能复制,需要一个字符一个字符的键盘敲入。差评)
#include "STC8H.h"
#include "intrins.h"
sbit LED0 = P4^0; // 定义LED连接的引脚
sbit LED2 = P4^2; // 定义LED连接的引脚
//#define PINIPL (*(unsigned char volatile xdata *)0xfD60)
// #define PINIPH (*(unsigned char volatile xdata *)0xfD61)
sbit EXTI_PIN = P2^5;// 定义外部中断引脚P2.5
void INT_Init() {
P2M1 &= ~0x20;// 设置P2.5为准双向模式(00)
P2M0 &= ~0x20;
IT1 = 1; // 设置INT1为下降沿触发(TCON.2)
EX1 = 1; // 允许INT1中断(IE.2)
EA = 1; // 开启总中断
// 设置INT1为优先级1(IPH.1=0, IP.1=1)
///PX1 = 1;
// PX1H = 0;
}
void main()
{
INT_Init();
while(1); // 主循环保持空转
}
// INT1中断服务函数(中断号2) 试过Datasheet上的借用13号中断向量的方式也是不行
void INT1_ISR() interrupt 2 {
if(!EXTI_PIN) { // 确认引脚状态
LED0 = ~LED0; // 示例:翻转P5.5引脚状态
}
IE1 = 0; // 清除中断标志(TCON.3)
}
期待厂家在数据手册上能直接给可以用的Demo,这个芯片资源太多,学习使用需要耗费大量时间和精力。谢谢 INT1是P33
P25没有外部中断,但有IO中断
新增功能寄存器位于XFR,初始化要打开EAXFR
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
初始化先打开EAXFR:
代码:
P_SW2|=0x80;(8位、32位)
EAXFR=1;(32位)
因传统8051的SFR地址空间有限,新增的SFR位于xdata区域(XSFR),必须先打开EAXFR才能访问
XSFR和XDATA共用地址,只有访问62.5K以上的XDATA时才需要关闭EAXFR
现有型号,只要不是扩展了片外64K SRAM(外接并口SRAM芯片),初始化时果断先打开EAXFR,并且不需要再关闭,不要犹豫!
IO中断程序(值按需要修改,不需要的可以注释掉或删除):
//PxINT
// P0INTE=0x00;
// P1INTE=0x00;
// P2INTE=0x00;
// P3INTE=0x00;
// P4INTE=0x00;
// P5INTE=0x00;
// P6INTE=0x00;
// P7INTE=0x00;
// P0IM0=0x00;
// P0IM1=0x00;
// P1IM0=0x00;
// P1IM1=0x00;
// P2IM0=0x00;
// P2IM1=0x00;
// P3IM0=0x00;
// P3IM1=0x00;
// P4IM0=0x00;
// P4IM1=0x00;
// P5IM0=0x00;
// P5IM1=0x00;
// P6IM0=0x00;
// P6IM1=0x00;
// P7IM0=0x00;
// P7IM1=0x00;
// P0WKUE=0x00;
// P1WKUE=0x00;
// P2WKUE=0x00;
// P3WKUE=0x00;
// P4WKUE=0x00;
// P5WKUE=0x00;
// P6WKUE=0x00;
// P7WKUE=0x00;//void P0INT_ISR(void) interrupt P0INT_VECTOR
//{
// if(P0INTF&0x01)
// {
// P0INTF&=~0x01;
// }
// if(P0INTF&0x02)
// {
// P0INTF&=~0x02;
// }
// if(P0INTF&0x04)
// {
// P0INTF&=~0x04;
// }
// if(P0INTF&0x08)
// {
// P0INTF&=~0x08;
// }
// if(P0INTF&0x10)
// {
// P0INTF&=~0x10;
// }
// if(P0INTF&0x20)
// {
// P0INTF&=~0x20;
// }
// if(P0INTF&0x40)
// {
// P0INTF&=~0x40;
// }
// if(P0INTF&0x80)
// {
// P0INTF&=~0x80;
// }
//}
//void P1INT_ISR(void) interrupt P1INT_VECTOR
//{
// if(P1INTF&0x01)
// {
// P1INTF&=~0x01;
// }
// if(P1INTF&0x02)
// {
// P1INTF&=~0x02;
// }
// if(P1INTF&0x04)
// {
// P1INTF&=~0x04;
// }
// if(P1INTF&0x08)
// {
// P1INTF&=~0x08;
// }
// if(P1INTF&0x10)
// {
// P1INTF&=~0x10;
// }
// if(P1INTF&0x20)
// {
// P1INTF&=~0x20;
// }
// if(P1INTF&0x40)
// {
// P1INTF&=~0x40;
// }
// if(P1INTF&0x80)
// {
// P1INTF&=~0x80;
// }
//}
//void P2INT_ISR(void) interrupt P2INT_VECTOR
//{
// if(P2INTF&0x01)
// {
// P2INTF&=~0x01;
// }
// if(P2INTF&0x02)
// {
// P2INTF&=~0x02;
// }
// if(P2INTF&0x04)
// {
// P2INTF&=~0x04;
// }
// if(P2INTF&0x08)
// {
// P2INTF&=~0x08;
// }
// if(P2INTF&0x10)
// {
// P2INTF&=~0x10;
// }
// if(P2INTF&0x20)
// {
// P2INTF&=~0x20;
// }
// if(P2INTF&0x40)
// {
// P2INTF&=~0x40;
// }
// if(P2INTF&0x80)
// {
// P2INTF&=~0x80;
// }
//}
//void P3INT_ISR(void) interrupt P3INT_VECTOR
//{
// if(P3INTF&0x01)
// {
// P3INTF&=~0x01;
// }
// if(P3INTF&0x02)
// {
// P3INTF&=~0x02;
// }
// if(P3INTF&0x04)
// {
// P3INTF&=~0x04;
// }
// if(P3INTF&0x08)
// {
// P3INTF&=~0x08;
// }
// if(P3INTF&0x10)
// {
// P3INTF&=~0x10;
// }
// if(P3INTF&0x20)
// {
// P3INTF&=~0x20;
// }
// if(P3INTF&0x40)
// {
// P3INTF&=~0x40;
// }
// if(P3INTF&0x80)
// {
// P3INTF&=~0x80;
// }
//}
//void P4INT_ISR(void) interrupt P4INT_VECTOR
//{
// if(P4INTF&0x01)
// {
// P4INTF&=~0x01;
// }
// if(P4INTF&0x02)
// {
// P4INTF&=~0x02;
// }
// if(P4INTF&0x04)
// {
// P4INTF&=~0x04;
// }
// if(P4INTF&0x08)
// {
// P4INTF&=~0x08;
// }
// if(P4INTF&0x10)
// {
// P4INTF&=~0x10;
// }
// if(P4INTF&0x20)
// {
// P4INTF&=~0x20;
// }
// if(P4INTF&0x40)
// {
// P4INTF&=~0x40;
// }
// if(P4INTF&0x80)
// {
// P4INTF&=~0x80;
// }
//}
//void P5INT_ISR(void) interrupt P5INT_VECTOR
//{
// if(P5INTF&0x01)
// {
// P5INTF&=~0x01;
// }
// if(P5INTF&0x02)
// {
// P5INTF&=~0x02;
// }
// if(P5INTF&0x04)
// {
// P5INTF&=~0x04;
// }
// if(P5INTF&0x08)
// {
// P5INTF&=~0x08;
// }
// if(P5INTF&0x10)
// {
// P5INTF&=~0x10;
// }
// if(P5INTF&0x20)
// {
// P5INTF&=~0x20;
// }
// if(P5INTF&0x40)
// {
// P5INTF&=~0x40;
// }
// if(P5INTF&0x80)
// {
// P5INTF&=~0x80;
// }
//}
//void P6INT_ISR(void) interrupt P6INT_VECTOR
//{
// if(P6INTF&0x01)
// {
// P6INTF&=~0x01;
// }
// if(P6INTF&0x02)
// {
// P6INTF&=~0x02;
// }
// if(P6INTF&0x04)
// {
// P6INTF&=~0x04;
// }
// if(P6INTF&0x08)
// {
// P6INTF&=~0x08;
// }
// if(P6INTF&0x10)
// {
// P6INTF&=~0x10;
// }
// if(P6INTF&0x20)
// {
// P6INTF&=~0x20;
// }
// if(P6INTF&0x40)
// {
// P6INTF&=~0x40;
// }
// if(P6INTF&0x80)
// {
// P6INTF&=~0x80;
// }
//}
//void P7INT_ISR(void) interrupt P7INT_VECTOR
//{
// if(P7INTF&0x01)
// {
// P7INTF&=~0x01;
// }
// if(P7INTF&0x02)
// {
// P7INTF&=~0x02;
// }
// if(P7INTF&0x04)
// {
// P7INTF&=~0x04;
// }
// if(P7INTF&0x08)
// {
// P7INTF&=~0x08;
// }
// if(P7INTF&0x10)
// {
// P7INTF&=~0x10;
// }
// if(P7INTF&0x20)
// {
// P7INTF&=~0x20;
// }
// if(P7INTF&0x40)
// {
// P7INTF&=~0x40;
// }
// if(P7INTF&0x80)
// {
// P7INTF&=~0x80;
// }
//}
现在建议 应用用强大的 AiCube-ISP-V6.95Y 来图形化配置,程序自动生成
深圳国芯人工智能有限公司-工具软件
学习了:
现有型号,只要不是扩展了片外64K SRAM(外接并口SRAM芯片),
初始化时果断先打开EAXFR,并且不需要再关闭,不要犹豫
页:
[1]