Hallo.. Ich bin halt anfänger und kenne mich nicht so gut mit dem sache(meine deutsche sprache ist auch nicht so toll bitte um verständnes) ich benutze Atmage8 folgnede program soll dem LED auf PORTB 10 mal blinken lassen ,falls ich dem 5v von dem PC0 wegnehme es funktoniert aber nicht wenn ich dem programm auf dem Atmega 8 programiere dann blinkt dem LED auf PORTB 10 mal und dann reagiert nicht mehr #include <avr/io.h> #include <stdint.h> #include <avr/io.h> #include <util/delay.h> int main (void) { DDRD = 0X03; PORTD = 0x00; DDRB = 0xff; // (3) PORTB = 0x03; DDRC = 0X00; PORTC = 0x00; // (4) while(1) { if (PC0 <((1024.0/5.0)*3)) { for(int n = 0; n < 10; ++n) { // PORTD ^= ( 1 << PD1 ); // _delay_ms(500); PORTD ^= ( 1 << PD1 ); _delay_ms(500); } } return 0; } }
Einrückungen beeindrucken den (C-)Compiler überhaupt nicht. Der guckt nur nach { und der dazugehörigen }. Und da hapert es scheinbar.
Abfragen des Pins: if ( !(PINC & (1<<PINC0)) ) setzten und umsetzten des Ausgangs: PORTD != ( 1 << PD1 ); _delay_ms(500); PORTD &= ~( 1 << PD1 ); _delay_ms(500); steht alles hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Hallo, du sprichst davon an PORTB ne LED blinken zu lassen und wurstelst in deinem Code an PORTD rum ! Was denn nun ? PORTD ist bei dir Eingang (0x00) das kann ja gar nicht gehen. Gruß
jo verschrieben es heißt: PORTD |= ( 1 << PD1 ); nicht mit "!" sondern mit "|"
Die Zeile if (PC0 <((1024.0/5.0)*3)) macht auch keinen Sinn, da PC0 eine Konstante ist und damit die Prüfung entweder stets erfüllt ist, oder eben nicht.... Hier ist sie immer erfüllt, da PC0==0 ist.. Achja und dein return 0; steht in der while-Schleife, damit ist es keine Endlosschleife (die sie wohl sein sollte....).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.