www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage Interrupt in C


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche schon seit längere Zeit den Overflow des Timer0 in gang zu 
bringen doch es funktioniert einfach nicht. Hier mal mein kleiner Code:
#include <avr/io.h>
#define F_CPU 4000000UL     
#include <util/delay.h>      
#include <avr/interrupt.h>


unsigned int z;

ISR(TIMER0_OVF_vect)
{
z=z+1;
}

void main()
{

  DDRB = 0x0FF;
  TCCR0=0x005;
  TIMSK|=(1<<TOIE0);
  sei();
  
    while(1)
       {
       if (z>=40)
         {
         PORTB ^= ( 1 << PB0 );
        _delay_ms(50);
        }
      }
}


Die Led am Portb.0 will einfach nicht blinken egal was ich mache.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuchs mal mit
volatile unsigned int z;

Auch das gcc-Tutorial ist ein guter Anfang.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile...

und schreib das
>   TCCR0=0x005;
vernünftig...

Autor: Andreas W. (geier99)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probier mal:

volatile unsigned int z;

Autor: Cyrill J. (Firma: Uni) (kyrel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was heißt denn bitte

DDRB = 0x0FF;   und
TCCR0=0x005;
???

Versuchs mal mit DDRB = 0xFF, ohne eine vorangehende Null, genauso mit 
dem anderen Register TCCR0.

Schöne Grüße

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke jetzt glabt es, ich muss wirklich noch viel lernen :-)

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vor allem, tutorials zu lesen...

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cyrill J. schrieb:
> Versuchs mal mit DDRB = 0xFF, ohne eine vorangehende Null, genauso mit
> dem anderen Register TCCR0.

Das macht keinen Unterschied.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, aber es ist leserlicher, weil die Register auch 16bit breit sind

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja :P

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>nein, aber es ist leserlicher, weil die Register auch 16bit breit sind

Welche? Und was ist leserlicher?
TCCR hat genauso wie DDR eine Breite von 8 Bit.
Einzig das TCCNT hat 16 Bits Breite, wenn es sich um einen 16Bit-Timer 
handelt.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm ist toll.

Port B0 soll togeln für z>=40, also 40,41,42,43....

...10001,10002,10003,.....


..65000,65001,...

..65534,65535

erst bei 0 macht es eine Pause, aber nur bis 39.

Wie oft soll der Interrupt eigentlich das Delay(50)
unterbrechen?

avr

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.