当前位置: 代码迷 >> 嵌入开发 >> pic18f452编程INT0中断有关问题 为什么小弟我只能进一次中断 大侠能帮小弟我看看吗
  详细解决方案

pic18f452编程INT0中断有关问题 为什么小弟我只能进一次中断 大侠能帮小弟我看看吗

热度:9111   发布时间:2013-02-26 00:00:00.0
求助pic18f452编程INT0中断问题 为什么我只能进一次中断 大侠能帮我看看吗
  我是一个单片机初学者, 设计一个可变频率的方波。
INT0中断使a的值增加,我第一次按button还可以增加,后来就不会中断了,不知道为什么;附程序:

#include<p18f452.h>
#include<delays.h>
/********************
中断向量及中断服务函数申明
**********************/
void ADDa (void);
#pragma code inter_vector=0x08
void inter_vector (void)
{ _asm goto ADDa _endasm}
#pragma code

volatile  int a=100;


rom near char lookup[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c
};  

rom near char lookup1[]=
{0x03,0x02,0x01,0x00};


/***************************
引脚配置
***************************/
void PORT_Init (void)
{ADCON1=0X6F;
 TRISC=0;
 TRISD=0;
 TRISB=0x01;
 TRISE=0;
 PORTEbits.RE0=0;


/*****************************
TMR0设置
******************************/
void TMR1_Init (void)
{T0CONbits.TMR0ON=0;
 T0CONbits.T08BIT=0;
 T0CONbits.T0CS=0;
 TMR0H=(65536-1/2/(a)*10^6)/256;
 TMR0L=(65536-1/2/(a)*10^6)%256;
 T0CONbits.TMR0ON=1;
}

/**********************************
INT0和INT1中断设置
*********************************/
void INT0_1 (void)
{INTCONbits.GIE=1;
 RCONbits.IPEN=1;
 INTCONbits.INT0IE=1;
 INTCONbits.INT0IF=0;
 INTCON3bits.INT1IE=1;
 INTCON2bits.INTEDG0=0;
 INTCON2bits.RBPU=0;
}

/*********************************
中断服务函数
**********************************/
void ADDa (void)
{ a=a+1;
  
 INTCONbits.INT0IF=0;
 while(PORTBbits.RB0==0);
 
 
}

/********************
主函数 显示 
***********************/
void main (void)
{ PORT_Init();
  INT0_1();
  TMR1_Init(); 
while (1)
{int count=0;
 int c; 
 int b=a;
 if(INTCONbits.TMR0IF==1)
   {INTCONbits.TMR0IF=0;
    TMR0H=(65536-a*1000000/2)/256;//计数初始化
    TMR0L=(65536-a*1000000/2)%256;
    if(PORTEbits.RE0==0)  //电平翻转
    PORTEbits.RE0=1;
    else PORTEbits.RE0=0;
  }
 for(;count<=3;) //选通数码管
  {PORTD=lookup1[count];
   c=b%10;                     //显示频率
   b=b/10;
   PORTC=lookup[c];
   Delay1KTCYx(20);
   count++;
  }
}    
}    



------解决方案--------------------------------------------------------
 我忘了#pragma interrupt ADDa了 真是惭愧,看来要好好看书