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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.