特意再次按你的条件测试了,没有问题。
用的是STC技术支持提供的5个外中断同时应用的程序,INT0~INT4的中断对应分别取反P1.0~P1.4输出,INT0~INT4均设为准双向口输入,然后从INT2或/和INT3输入信号1KHz~100KHz,INT2、INT3中断正常,但INT0均无中断产生。进一步,将信号单个或同时加到INT1~INT4,则INT1~INT4中断正常,但INT0不会出现中断。
你可以向SYC技术支持索要这个测试程序例子,例子中有源码和编译好的HEX文件,直接下载测试,源码我贴在下面:
#include "..\..\STC8Hxxx.h"
/************* 功能说明 **************
请先别修改程序, 直接下载"ex-interrupt.hex"测试.
测试5个外中断INT0~INT4同时使用.
INT0(P3.2)配置为上升/下降沿触发, 从INT0(P3.2)输入脉冲, INT0中断取反P1.0输出相同频率的脉冲. (也可配置为下降沿触发, P1.0输出一半频率的脉冲.)
INT1(P3.3)配置为上升/下降沿触发, 从INT1(P3.3)输入脉冲, INT1中断取反P1.1输出相同频率的脉冲. (也可配置为下降沿触发, P1.1输出一半频率的脉冲.)
INT2(P3.6)固定为下降沿触发, 从INT2(P3.6)输入脉冲, INT2中断取反P1.2输出一半频率的脉冲.
INT3(P3.7)固定为下降沿触发, 从INT3(P3.7)输入脉冲, INT3中断取反P1.3输出一半频率的脉冲.
INT4(P3.0)固定为下降沿触发, 从INT4(P3.0)输入脉冲, INT4中断取反P1.4输出一半频率的脉冲.
******************************************/
/**********************************************/
void main(void)
{
P1M1 = 0;
P1M0 = 0;
P3M1 = 0;
P3M0 = 0;
AUXINTIF &= ~INT4IF; /* 清除外中断4标志位 */
AUXINTIF &= ~INT3IF; /* 清除外中断3标志位 */
AUXINTIF &= ~INT2IF; /* 清除外中断2标志位 */
IE1 = 0; /* 清除外中断1标志位 */
IE0 = 0; /* 清除外中断0标志位 */
EX0 = 1; //允许INT0中断
// PX0 = 1; //高优先级中断
IT0 = 0; //上升,下降沿中断
// IT0 = 1; //下降沿中断
EX1 = 1; //允许INT1中断
// PX1 = 1; //高优先级中断
IT1 = 0; //默认 上升,下降沿中断
// IT1 = 1; //下降沿中断
INT_CLKO |= (1 << 4); //允许INT2中断, 固定为下降沿低优先级中断
INT_CLKO |= (1 << 5); //允许INT3中断, 固定为下降沿低优先级中断
INT_CLKO |= (1 << 6); //允许INT4中断, 固定为下降沿低优先级中断
EA = 1;
while (1)
{
}
}
/********************* INT0中断函数 *************************/
void Ext_INT0 (void) interrupt 0
{
P10 = ~P10;
}
/********************* INT1中断函数 *************************/
void Ext_INT1 (void) interrupt 2
{
P11 = ~P11;
}
/********************* INT2中断函数 *************************/
void Ext_INT2 (void) interrupt 10
{
P12 = ~P12;
}
/********************* INT3中断函数 *************************/
void Ext_INT3 (void) interrupt 11
{
P13 = ~P13;
}
/********************* INT4中断函数 *************************/
void Ext_INT4 (void) interrupt 16
{
P14 = ~P14;
}
|