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 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.
Lesezeichen