TIMER0_COMPA_vect

Gast #2169299
Lesenswert?

Hi Leute, ich hab vor kurzem mit dem Programmieren von AVR µC 
angefangen.
Im Augenblick habe ich einen mega644p und versuche einen einfachen Timer 
zum Laufen zu bringen. Dazu habe ich folgendes Script verwendet. 
Arbeiten tue ich mit dem AVR Studio 5


//*************************************************************

#include <avr/io.h>
#include <avr/interrupt.h>

//Variablen für die Zeit
volatile unsigned int  millisekunden;
volatile unsigned int sekunde;
volatile unsigned int minute;
volatile unsigned int stunde;

int main(void)
{
DDRB = 0xff;
  // Timer 0 konfigurieren
  TCCR0 = (1<<WGM01); // CTC Modus
  TCCR0 |= (1<<CS01); // Prescaler 8
  // ((1000000/8)/1000) = 125
  OCR0 = 125-1;

  // Compare Interrupt erlauben
  TIMSK |= (1<<OCIE0);

  // Global Interrupts aktivieren
  sei();

  while(1)
  {
    /*Hier kann die aktuelle Zeit
      ausgeben werden*/
  }
}

/*
Der Compare Interrupt Handler
wird aufgerufen, wenn
TCNT0 = OCR0A = 125-1
ist (125 Schritte), d.h. genau alle 1 ms
*/

  ISR (TIMER0_COMP_vect)
  {

      millisekunden++;
      if(millisekunden == 16000)
      {
        sekunde++;
        millisekunden = 0;
        }

    sekunde++;
    if(sekunde == 60)
        {
         minute++;
          sekunde = 0;
        }

    stunde++;
        if(minute == 1)
        {
    PORTB |= (1<<PB0);
        }

    if(minute == 1)
        {
        PORTB &= ~(1<<PB0);
        }

    }
}


//************************************************


Die Zeile: // Compare Interrupt erlauben
  TIMSK |= (1<<OCIE0);

habe ich durch: TIMER0_COMPA_vect |= (1<<OCIE0A);

ersetzt. Jetzt erhalte ich dauernd die Fehlermeldung:

Error  1  '__vector_16' undeclared (first use in this function) 
C:\Dokumente und Einstellungen\*******\timetest.c


Was mach ich blos falsch?

lg HeyHey
#2169438
Lesenswert?

Justus Skorps schrieb:
> warum machst du so einen Quark?

Gute Frage.

Das ist schon mal fast richtig.
>TIMSK |= (1<<OCIE0);

und so ganz richtig.
>TIMSK0 |= (1<<OCIE0);

Und das ist völliger Stuss:
> habe ich durch: TIMER0_COMPA_vect |= (1<<OCIE0A);

>OCR0 = 125-1;
Ein Register OCR0 gibt es nicht, sondern OCR0A und OCR0B

und entsprechend die ISR
>ISR (TIMER0_COMP_vect) so nicht!

sondern ISR(TIMER0_COMPA_vect) für Register OCR0A.


mfg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren