RB0/INT interrupt not triggered

General discussion on mikroC.
Post Reply
Author
Message
royalmadhu
Posts: 4
Joined: 04 Feb 2011 15:16

RB0/INT interrupt not triggered

#1 Post by royalmadhu » 06 Feb 2011 19:02

RB0/INT interrupt not triggered
hi
i'm building a pulse counter...
i'm using the external interrupt on RB0 in 16F877A for counting the pulse...
i have also used the TMR0 interrupt in the same interrupt function....

but my variable which is count9 for counting the pulses does not get incremented at all....i'm kind of a newbie when it comes to PICs so can anyone of u friends help me for solving this problem?
I'm simulating the program in proteus...and i'm using a push button to simulate the pulses in that.I'm using mikroC as a compiler..
this is my code...

unsigned int count,count1,count2,count3,count4,count5,count6,co unt7,count8,count9;



void interrupt()
{
if(INTCON.INTF==1)
{
count9=count9+1;
if(count9==999)
{
count9=0;
}
INTCON.INTF=0;
}


if (INTCON.T0IF==1)
{

...
...//I have plenty of other lines here,,so i'm not puting those here..if u think the rest of the code is needed i'll post that
...
...
..
}

void main()
{
int a,b,c,d,k,m,n;
TRISB=0b01111111;
INTCON= 0b10110000;
OPTION_REG= 0b11000010;
TRISA=0b11111111 ;
ADCON1 = 7;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b111;
count1=count=0;
count7=count6=0;
count8=0;
COUNT9=0;
portc.f2=0;
portc.f0=0;

while(1)
{

...
...
..
}

royalmadhu
Posts: 4
Joined: 04 Feb 2011 15:16

Re: RB0/INT interrupt not triggered

#2 Post by royalmadhu » 06 Feb 2011 20:16

just to be clear this is the whole code


Code: Select all

unsigned int count,count1,count2,count3,count4,count5,count6,count7,count8;
 int count9=0;



void interrupt()
{
if(INTCON.INTF==1)
{
  porte.f2=1;
 count9++ ;

if(count9==999)
{

count9=0;
}
INTCON.INTF=0;
}




if (INTCON.T0IF==1)
 {
 /*if(portb.f0==1)
 {
 count9=count9+1;
if(count9==999)
{
count9=0;
}
 } */

 if((portb.f5==1)&&(portb.f3==0))
 {
 count6=count6+1;
 if (count6==100)
 {
 count6=0;
 count7++;
 if (count7==999)
 {
 count7=0;
 }
 }
 }

else if ((portb.f1==1) &&(portb.f4==0))
 {
 count4=0;
 count5=0;
count1=count1+1;

if (count1==300)
{
count1=0;
count=count++;
if (count ==10)
{
count=0;
}
}
}

else if((portb.f4==1)&&(portb.f1==0))
{
count4=0;
count5=0;
count2=count2+1;
if (count2==300)
{
count2=0;
count=count+10;
if(count==100)
{
count=0;
}
}
}
else if((portb.f1==1)&&(portb.f4==1))
{
count4=0;
count5=0;
count3=count3+1;
if (count3==300)
{
count3=0;
count=count+100;
if(count>9999)
{
count=0;
}
}
}

else
{
count4=count4+1;
if(count4==790)
{
count4=0;
count5=count5+1;
if(count5==9999)
{
count5=0;
}
}
}
if(count5>=count)
{
portb.f7=~portb.f7;
count5=0;
count4=0;
}
 if(count9>=count7)
{
porte.f1=1;
}
 else
 {
 porte.f0=0;
 }
}


INTCON.T0IF=0;
  //OPTION_REG.INTEDG=1;

}
void display(int,int,int,int)  ;
void display2(int,int,int);
void main()
{
int a,b,c,d,k,m,n;
 TRISB=0b01111111;
  //RBPU.f0 = 0b00000001;
INTCON= 0b10110000;
OPTION_REG= 0b11000010;
TRISA=0b11111111 ;
ADCON1 = 7;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b000;
count1=count=0;
count7=count6=0;
count4=0;
count8=0;
COUNT9=0;
portc.f2=0;
portc.f0=0;

while(1)
{

  if(portb.f2==1)
{
count4=0;
count5=0;
count2=0;
count1=0;
count=0;
}
if(portb.f6==1)
{
count7=0;
count6=0;
}
a=count5/1000;
b=((count%1000)/100);
c=(((count%1000)%100)/10);
d=((((count%1000)%100)%10)/1);
k=(count7/100);
n=((count7%100)/10 );
m=(((count7%100)%10)/1);
display(a,b,c,d);
display2(k,n,m);
}
}
void display2(int i,int j, int p)
{
if (i==0)
{
portc=0b00000010;
}
if (i==1)
{
portc=0b00010010;
}
if (i==2)
{
portc=0b00100010;
}
if (i==3)
{
portc=0b00110010;
}
if (i==4)
{
portc=0b01000010;
}
if (i==5)
{
portc=0b01010010;
}
if (i==6)
{
portc=0b01100010;
}
if (i==7)
{
portc=0b01110010;
}
if (i==8)
{
portc=0b10000010;
}
if (i==9)
{
portc=0b10010010;
}
if (j==0)
{
portc=0b00000100;
}
if (j==1)
{
portc=0b00010100;
}
if (j==2)
{
portc=0b00100100;
}
if (j==3)
{
portc=0b00110100;
}
if (j==4)
{
portc=0b01000100;
}
if (j==5)
{
portc=0b01010100;
}
if (j==6)
{
portc=0b01100100;
}
if (j==7)
{
portc=0b01110100;
}
if (j==8)
{
portc=0b10000100;
}
if (j==9)
{
portc=0b10010100;
}
if (p==0)
{
portc=0b00001000;
}
if (p==1)
{
portc=0b00011000;
}
if (p==2)
{
portc=0b00101000;
}
if (p==3)
{
portc=0b00111000;
}
if (p==4)
{
portc=0b01001000;
}
if (p==5)
{
portc=0b01011000;
}
if (p==6)
{
portc=0b01101000;
}
if (p==7)
{
portc=0b01111000;
}
if (p==8)
{
portc=0b10001000;
}
if (p==9)
{
portc=0b10011000;
}

}

void display(int x,int y,int z,int w)
{
if (x==0)
{
portd=0b00000001;
}
if (x==1)
{
portd=0b00010001;
}
if (x==2)
{
portd=0b00100001;
}
if (x==3)
{
portd=0b00110001;
}
if (x==4)
{
portd=0b01000001;
}
if (x==5)
{
portd=0b01010001;
}
if (x==6)
{
portd=0b01100001;
}
if (x==7)
{
portd=0b01110001;
}
if (x==8)
{
portd=0b10000001;
}
if (x==9)
{
portd=0b10010001;
}
if (y==0)
{
portd=0b00000010;
}
if (y==1)
{
portd=0b00010010;
}
if (y==2)
{
portd=0b00100010;
}
if (y==3)
{
portd=0b00110010;
}
if (y==4)
{
portd=0b01000010;
}
if (y==5)
{
portd=0b01010010;
}
if (y==6)
{
portd=0b01100010;
}
if (y==7)
{
portd=0b01110010;
}
if (y==8)
{
portd=0b10000010;
}
if (y==9)
{
portd=0b10010010;
}
if (z==0)
{
portd=0b00000100;
}
if (z==1)
{
portd=0b00010100;
}
if (z==2)
{
portd=0b00100100;
}
if (z==3)
{
portd=0b00110100;
}
if (z==4)
{
portd=0b01000100;
}
if (z==5)
{
portd=0b01010100;
}
if (z==6)
{
portd=0b01100100;
}
if (z==7)
{
portd=0b01110100;
}
if (z==8)
{
portd=0b10000100;
}
if (z==9)
{
portd=0b10010100;
}
if (w==0)
{
portd=0b00001000;
}
if (w==1)
{
portd=0b00011000;
}
if (w==2)
{
portd=0b00101000;
}
if (w==3)
{
portd=0b00111000;
}
if (w==4)
{
portd=0b01001000;
}
if (w==5)
{
portd=0b01011000;
}
if (w==6)
{
portd=0b01101000;
}
if (w==7)
{
portd=0b01111000;
}
if (w==8)
{
portd=0b10001000;
}
if (w==9)
{
portd=0b10011000;
}

}

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: RB0/INT interrupt not triggered

#3 Post by filip » 07 Feb 2011 09:57

Hi,

Please, take a look at this post :
http://www.mikroe.com/forum/viewtopic.p ... 7&p=138861

Regards,
Filip.

Post Reply

Return to “mikroC General”