求助大佬,为什么普通IO口中断设置受P_SW2寄存器的影响?
求助大佬,为什么普通IO口中断设置受P_SW2寄存器的影响?
源码如下:
void main(void)
{
EAXFR = 1; // ʹÄÜ·ÃÎÊ XFR
CKCON = 0x00; // ÉèÖÃÍⲿÊý¾Ý×ÜÏßËÙ¶ÈΪ×î¿ì
WTST = 0x00; // ÉèÖóÌÐò´úÂëµÈ´ý²ÎÊý£¬µÈ´ýʱ¼äΪ0¸öʱÖÓ£¬CPUÖ´ÐгÌÐòËÙ¶È×î¿ì
// P_SW2 |= 0x80;
CLKDIV = 0; //24MHzÖ÷Ƶ£¬·ÖƵÉèÖÃ
// P_SW2 &= 0x7F;
P0M0 = 0x00; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
P6M0 = 0x00; P6M1 = 0x00;
P7M0 = 0x20; P7M1 = 0x00;
P0IM1 = 0x00;P0IM0 = 0x00; // P0.0ÉèÖÃΪϽµÑØ´¥·¢
// P0IM1 = 0x00;P0IM0 = 0x01; // P0.0ÉèÖÃΪÉÏÉýÑØ´¥·¢
// P0IM1 = 0x01;P0IM0 = 0x00; // P0.0ÉèÖÃΪµÍµçƽ´¥·¢
// P0IM1 = 0x01;P0IM0 = 0x01; // P0.0ÉèÖÃΪ¸ßµçƽ´¥·¢
P0INTE = 0x01; // ʹÄÜP0.0¿ÚÖжÏ
EA = 1;
while(1)
{
其中的
// P_SW2 |= 0x80;
// P_SW2 &= 0x7F;
注释去掉之后,P0.0的端口中断就失效了,查了芯片手册,这样设置也没有发现有冲突呀,感觉有点奇怪,求了解的大佬指点,谢谢!
扩展的 XFR 要能被访问,要设置允许访问
打开允许访问后,不要关闭
IO中断寄存器是扩展寄存器,访问扩展寄存器必须要P_SW2的最高位为1才能访问。 梁工 发表于 2023-5-28 13:11
IO中断寄存器是扩展寄存器,访问扩展寄存器必须要P_SW2的最高位为1才能访问。 ...
老师您好,最近在学习STC32,按照网上的一些教程来不知道为何IO口的中断始终无法进入。
已经使用了KEIL中断号扩展工具,编译也没有发生错误。
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4716
代码整理到了这个贴上,属实困扰了许久,求助大佬能指点下
(另外不知道有没有不适用中断13号的IO中断例程?) 本帖最后由 梁工 于 2023-10-23 12:11 编辑
9DHans 发表于 2023-10-22 16:39
老师您好,最近在学习STC32,按照网上的一些教程来不知道为何IO口的中断始终无法进入。
已经使用了KEIL中 ...不需要借用13号中断的程序,直接使用对应的中断号。
/************* 功能说明 **************
请先别修改程序, 直接下载"Objects"里的"interrupt.hex"测试, 主频选择11.0592MHZ. 测试正常后再修改移植.
由于使用的中断号超过了31,所以KEIL C251编译器要拓展Keil的C代码中断号, 运行一下"拓展Keil的C代码中断号.exe"即可。
P0~P7所有IO中断测试程序.
P0.0~P0.7中断对应取反P1.0~P1.7输出指示。
P1.0~P1.7中断对应取反P0.0~P0.7输出指示。
P2.0~P2.7中断对应取反P4.0~P4.7输出指示。
P3.0~P3.7中断对应取反P4.0~P4.7输出指示。
P4.0~P4.7中断对应取反P2.0~P2.7输出指示。
P5.0~P5.7中断对应取反P4.0~P4.7输出指示。
P6.0~P6.7中断对应取反P7.0~P7.7输出指示。
P7.0~P7.7中断对应取反P6.0~P6.7输出指示。
由于IO有限, 本例子只设置了P0.0~P0.7和P2.0~P2.7的中断, 中断函数分别取反P1.0~P1.7和P4.0~P4.7来指示进入中断.
用户可以根据例子随意设置自己需要的IO中断.
主函数取反P3.3输出一个方波信号, 方便用户测试.
******************************************/
梁工 发表于 2023-10-23 12:10
不需要借用13号中断的程序,直接使用对应的中断号。
/************* 功能说明 ************ ...
谢谢梁老师~ 因为STC好多系列单片机是在传统80C51上升级了,扩展了好多功能,这些功能的使用要通过特殊功能寄存器来规定,传统单片机中内部特殊功能寄存器范围80H-FFH不够用,因此扩展了外部SFR,你要使用这一部分的SFR就要先允许开通这个区间后再用,也就用P_SW2 |= 0x80;来开通,显然P_SW2这个SFR肯定在内部80H-FFH范围内。
页:
[1]