Also der gepostede Code erweckt garantiert nur den Eindruck das alles funktioniert, auch mit PIND == 0xff als while Bedingung. In wirklichkeit rennt der Controller jedes mal in einen Rest sobald PIND == 0xff nicht mehr erfüllt ist. Das ist hochgradiger Pfusch
Programme die innerhalb von main keine while(1) Schleife enthalten, sind meistens böse.
Was du machen möchtest, sollte man so realisieren.
Code:
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRB |= 0xff;
DDRD |= 0x00;
while(1){
if(PIND == 0x00){
PORTB &= ~0xff;
_delay_ms(1000);
PORTB |= 0xff;
_delay_ms(1000);
}
}
return 0; //Diese Zeile darf niemals ausgeführt werden! Ansonsten -> undefiniert, meist Reset
}
Lesezeichen