Hi Anna,

tut mir leid - nun artet das bei mir in experimenteller Softwareentwicklung aus (kann meinen m16 nicht finden *grrrrrrrr* - und der m168 hat andere Registernamen, dann hätten wir hier noch mehr Konfusion). Daher - nochmal ungetestet, aber ohne Fehler compiliert. Ausserdem hat Jens recht - was wollen wir machen? Ich verstehe das so, es soll in einem bestimmbaren, zeitlichen Abstand einfach die LED auf PC1 getoggelt werden.

Hier der code:
Code:
#include <stdlib.h> 
                                 
#include <avr/interrupt.h> 
                                 
#define MCU = AVR_ATmega16
// #define F_CPU  20000000         // Quarz 20 Mhz-CPU
#define F_CPU  16000000         // Quarz 16 Mhz-CPU
                                 
volatile uint16_t Izeit_1;			// Timervariable

// ================================================================================
void Timer0_init(void)                  
{        
    TCCR0 |= (1<<WGM01) | (1<<CS01);              
    OCR0   = 125;                        
    TIMSK |= (1<<OCIE0);      
}      
// ================================================================================


// ================================================================================
// ================================================================================
                        
ISR(TIMER0_COMP_vect)           // Vektor 7 
{ 
    if (Izeit_1 <= 60000)       //Timer bis 60 000 - 3 sec Datenerfassung möglich 
      Izeit_1 ++;               //  war: alle drei Sekunden wird 60000 erreicht 
                                //  und Izeit_1 bleibt in der uint16-Grenze 
    else 
    {    
        Izeit_1 = 0;            // ansonsten: Rückstellen auf Null 
        PORTC &= ~(1<<PC1);     // Port PC1 ausschalten
// Hallo Anna: der Port wird hier bei Izeit_1 = 0 ausgeschaltet
    }      
          
}          
// ================================================================================

int main(void) 
{ 
//uint16 Izeit_1   = 0; 
  Timer0_init(); 
  DDRC |= 0xff; 
  PORTC=0x00; 




//####### Grundlegende Initialisierungen der Hardware, Portdefinition -------------
//Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
                         
  DDRC  = 0b00000010;   // PC0 .. 7, NUR Ausgang PC1 aktiv
  PORTC = 0b00000000;   // Anmerkung: die binäre Codierung der Ports hat den
                        //   Vorteil, dass man/ich gleich sehe, "was los ist".
                        //   So kann ich es mir eben besser vorstellen als in hex.
//####### So werden Ausgänge geschaltet -------------------------------------------
//  PORTC |=  (1<<PC1);         // Port PC1 einschalten
//  PORTC &= ~(1<<PC1);         // Port PC1 ausschalten
//  PORTC ^=  (1<<PC1);         // Port PC1 toggeln
// ###>>> BEACHTE: die Pins zählen von 0 bis 7, PC1 ist also der ZWEITE PortPin



  cli(); 
  Izeit_1 = 0; 
  sei(); 

  while(1) 
  { 
    if (Izeit_1 == 5000) 
    { 
      PORTC |=  (1<<PC1);       // Port PC1 einschalten
// Hallo Anna: der Port wird hier bei Izeit_1 = 5000 eingeschaltet
    }  
  } 
}
Zitat Zitat von McJenso
... es fehlen bei euch beiden noch die geschweiften Klammern ...
Ohhh - das ist - bei einem einzigen Statement nach dem "if" soweit ich weiß ANSI-konform.

Edit 23:20: Mein verlorener mega16 ließ mir keine Ruhe. Und als ich ihn gefunden hatte ist mir auch der Fehler aufgefallen. Nun ist der Code ok - und auf meinem fabrikfrischen mega16 läuft er mit 16MHz-Quark auf der RNControl: die LED auf PC1 blinkt.
###>>> Code korrigiert!
Sorry für die ungenaue Bearbeitung.