Onderstaande code werkt alleen als ik de interrupt op RB0 aanspreek. Dan hoogt cntr met 1 op.

Alleen wanneer de interrupt niet optreedt zou ik graag zien dat de TIMER0 bij een overflow overflw met 1 ophoogt. Dit om de tijd (1x per seconde) uit te lezen.

Iemand een idee wat er fout is? Het lijkt erop dat alle "global" interrupts uit zijn....


//
// Counter
//

const unsigned char VersionString1[]="V1.00";
const unsigned char VersionString2[]="11/09/2011";


unsigned short BPM;
char txtBPM[7],txtCount[7],txtTimems[7];

unsigned long   cntr ;          // number of RB0 transition
unsigned int    ovrflw ;          // number of timer0 overflows
unsigned long   x ;
unsigned int    y ;

void main()
{
  TRISB = 0x0F;
  INTCON.INTE=1;
  INTCON.T0IF=1;
  INTCON.GIE=1;
  OPTION_REG.INTEDG=0;    // trigger external INT on falling edge
  //INTCON = 0b10110000 ;       //T0IF, INTF and GIE enabled

   UART1_Init(9600);                      // initialize USART module
                                         //  (8 bit, 9600 baud rate, no parity bit...)
   UART1_Write_Text("Demo program");
   Delay_ms(100);

   while (1) {

       UART1_Write_Text("[");
       //WordToStr(timems, txtTimems); // convert Timems to string
       IntToStr(cntr, txtBPM);       // convert BPM to string
       //IntToStr(CNTLOW*42+39, txtCount);       // convert BPM to string
       UART1_Write_Text(txtBPM);
       UART1_Write_text("]");                    // send data via USART
       UART1_Write_Text(";");
     }

}

void interrupt(void)
{
     if (INTCON.INTF)
     {
      cntr++ ;
      INTCON.INTF = 0;

     }
     
     else if(INTCON.T0IF){
            ovrflw++ ;                  // inc. overflow counter
            INTCON.T0IF = 0 ;
     }

     if (ovrflw > 19531)   {        // 2000000/ 4/ 256 = 19531 -- no prescaler
         INTCON.GIE = 0;
         x=cntr;
         cntr = 0 ;             // clear counters
         ovrflw = 0 ;
         INTCON = 0b10110000 ;

     }

}

Heb het gevonden....In datasheet blijkt dat ik de PIC verteld heb dat hij moet verwachten dat hij een externe puls krijgt op RA4/TOCK1 om te tellen. Hij doet het nu!

TRISB = 0x0F;
INTCON.INTE=1;
INTCON.T0IE=1; en niet INTCON.T0IF=1;
INTCON.GIE=1;

Zit nog een foutje in je code !.

Klopt!! Dit had ik al aangepast, maar toch bedankt. Moet echt even wennen aan de syntax en afkortingen voor de uControllers.