Anfängerfrage Interrupt in C

Gast #1412772
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.
Gast #1412816
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.
Gast #1412821
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

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