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


von Gast (Gast)


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:
1
#include <avr/io.h>
2
#define F_CPU 4000000UL     
3
#include <util/delay.h>      
4
#include <avr/interrupt.h>
5
6
7
unsigned int z;
8
9
ISR(TIMER0_OVF_vect)
10
{
11
z=z+1;
12
}
13
14
void main()
15
{
16
17
  DDRB = 0x0FF;
18
  TCCR0=0x005;
19
  TIMSK|=(1<<TOIE0);
20
  sei();
21
  
22
    while(1)
23
       {
24
       if (z>=40)
25
         {
26
         PORTB ^= ( 1 << PB0 );
27
        _delay_ms(50);
28
        }
29
      }
30
}

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

von Benjamin S. (recycler)


Lesenswert?

versuchs mal mit
1
volatile unsigned int z;

Auch das gcc-Tutorial ist ein guter Anfang.

von Justus S. (jussa)


Lesenswert?

volatile...

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

von Andreas W. (geier99)


Lesenswert?

probier mal:

volatile unsigned int z;

von Cyrill J. (Firma: Uni) (kyrel)


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

von Gast (Gast)


Lesenswert?

Danke jetzt glabt es, ich muss wirklich noch viel lernen :-)

von Benjamin S. (recycler)


Lesenswert?

vor allem, tutorials zu lesen...

von Uhu U. (uhu)


Lesenswert?

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

Das macht keinen Unterschied.

von Benjamin S. (recycler)


Lesenswert?

nein, aber es ist leserlicher, weil die Register auch 16bit breit sind

von Benjamin S. (recycler)


Lesenswert?

ja :P

von STK500-Besitzer (Gast)


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.

von avr (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.