lucky 发表于 2012-8-20 16:26:56

PIC12F1822 I/O边沿中断进不了

//定义配置位
__CONFIG (FCMEN_OFF &FOSC_INTOSC&WDTE_OFF&PWRTE_OFF &MCLRE_ON &CP_OFF&CPD_OFF );//配置字
__CONFIG (WRT_OFF &PLLEN_OFF);//配置字
void delay_ms(unsigned long ms)
{
unsigned long i;
for(i=0;i<=ms;i++)
;
}
volatile bit RA2InterruptStatus;//RA2中断标志
volatile bit RA4InterruptStatus;//RA4中断标志
void interrupt Edge(void)//电平边沿中断
{
if(IOCIF)//判断电平变化中断
{
   // IOCIF=1; //清除中断标志
   
   if (IOCAF&0x04)//判断RA2口中断
   {
      IOCAF&=~(1<<2);//清除电平变化标志寄存器
      RA2InterruptStatus=1;
      RA4InterruptStatus=0;
   }
    if(IOCAF&0x10)//判断RA4口中断
   {
      IOCAF&=~(1<<4);//清除电平变化标志寄存器
      RA2InterruptStatus=0;
      RA4InterruptStatus=1;
   }
   
   
}
   
}

void main(void)
{
OSCCON=0x67;//内部4MHZ时钟
ANSELA=0;//
CM1CON0=0;//关闭比较器
TRISA&=~(1<<5);//蜂鸣器端口输出
PORTA|=1<<5;//关闭蜂鸣器
TRISA|=(1<<2)|(1<<4);//RA2、RA4设置输入
WPUA=0;//禁能上拉
OPTION_REG=0XA0;
    IOCIE=1;//允许电平变化中断
IOCAN2=1;//设置RA2为下降沿中断
IOCAP4=1;//设置RA4为上升沿中断
IOCAF=0;//清除中断标志
GIE=1;//开放总中断
while(1)
{

       if(RA2InterruptStatus)
   {
   PORTA|=1<<5;
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   PORTA&=~(1<<5);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   }
if(RA4InterruptStatus)
   {
   
    PORTA|=1<<5;
   
   }
   /* PORTA|=1<<5;
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   PORTA&=~(1<<5);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);
   delay_ms(5000);*/
}


}

不能进入中断,请问是哪里出现的问题。

eva 发表于 2012-8-20 16:27:19

你使能内部弱上拉看看,还有单步调试是不支持响应外部中断的
页: [1]
查看完整版本: PIC12F1822 I/O边沿中断进不了