Da gehen mir langsam die Ideen aus...
Mit dem WDT hab ich noch nicht gearbeitet, evtl schlägt er zu, bevor du in main() ankommst. In diesem Falle musst du das WDT-Disable früh machen, also vor der Initialisierung und bevor du nach main kommst.
Einige kleine Änderungen, die aber nicht groß was zur Sache tun. Aber man weiß ja nie![]()
Ist jetzt ein 7-stelliges Lauflicht und die 8. LED blinkt.
Code:#include <avr/io.h> #include <avr/wdt.h> #include <avr/signal.h> #include <avr/interrupt.h> #define F_CPU 8000000 #define INTS_PER_SECOND 1 #define PRESCALE 256 void wait(void); volatile uint8_t wasinterrupted = 0; main() { wdt_disable(); DDRC = 0xff; PORTC = 0xbf; TCCR1A = 0; TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10); OCR1A = (uint16_t) ((uint32_t)F_CPU*INTS_PER_SECOND/PRESCALE); TIFR = (1<<OCF1A); TIMSK = (1<<OCIE1A); sei(); while(1) { PORTC ^= 0x41; wait(); PORTC ^= 3<<0; wait(); PORTC ^= 3<<1; wait(); PORTC ^= 3<<2; wait(); PORTC ^= 3<<3; wait(); PORTC ^= 3<<4; wait(); PORTC ^= 3<<5; wait(); } } void wait() { wasinterrupted = 0; while (!wasinterrupted); } SIGNAL(SIG_OUTPUT_COMPARE1A) { wasinterrupted = 1; PORTC ^= 0x80; }







Zitieren

Lesezeichen