Sida 1 av 1

väcka PIC från SLEEP-mode med INT0

Postat: 23 mars 2007, 13:55:57
av ankan
INT0 och Timer1 interrupt är aktiverade.

PICen är en 16F88 som ligger och sover mestadels. Men som vaknar när timer1 slår runt och gör avbrott. Dock vaknar den inte när jag gör interrupt med INT0.
Däremot så ser den när den har vaknat av Timer1 att den har fått ett avbrott på INT0.

Vad är det som gör så att det inte vaknar på INT0 men Timer1?

Kod: Markera allt

void interrupt() {

  if (PIR1.TMR1IF) {
    if(counter>=tidslucka)
      action=GET_TEMP;
    else {
      counter++;
    }
    PIR1.TMR1IF = 0;                     // clear TMR1IF
  }
  
  if (INTCON.F1) {
     action = LEARN;
     INTCON.F1 = 0;
  }
}

void init() {

  OSCCON = 0x60;                           // 4 Mhz
  ANSEL  = 0x00;
  TRISA  = 0xFE;
  PORTA  = 0x00;

  T1CON = 0x0F;
  PIR1.TMR1IF = 0;            // clear TMR1IF
  PIE1.TMR1IE = 1;                // enable interrupts
  INTCON = 0xC0;

  Usart_Init(19200);
  
  counter=1;
  tidslucka=2;

}

Postat: 23 mars 2007, 14:05:43
av sodjan
Var är sleep instruktioner ?

> INTCON.F1 = 0;

I databladet heter den INTCON.INT0IF, men den kanske har
ett annat namn i ditt verktyg...

Postat: 23 mars 2007, 14:06:23
av ankan
Hade missat en bit på INTCON.

När jag ändå har startat en tråd. Varför fungerar inte

if (INTCON.INT0IF) men if (INTCON.F1) och if (PIR1.TMR1IF) fungerar. Kör MikroC.

Postat: 23 mars 2007, 14:08:52
av ankan
Sleep-anropen sker i main eftersom man ska ju ha så lite som möjligt i interrupt.

F1 betyer bit 1 i MikroC men av någon anledning fungerar det inte med INT0IF vilket borde vara standard.

Postat: 23 mars 2007, 14:10:11
av sodjan
Tja, det beror väl på vad den som skrev MikroC valde att kalla dom.
Varför man skulle välja något *annat* namn än det som Microchip
har valt, förstår jag dock inte...

Sen misstänker jag att "F1" är en generell definition för "bit 1", alltså
med samma värde som INT0IF borde ha om den fanns/finns.

Postat: 23 mars 2007, 14:17:14
av ankan
Du har så rätt så. Det vardet jag menade.

Postat: 23 mars 2007, 14:20:56
av sodjan
> Hade missat en bit på INTCON.

Jaha, och ?
Vaknar den nu ?

Postat: 23 mars 2007, 14:26:14
av ankan
Ja nu vaknar den som den ska. Har man inte enablat INT0 vilket jag trodde jag hade gjort så händer det inte så mycket.