Christoph2
27.07.2007, 17:02
Hallo!
Ich habe vor 2 Tagen begonnen, mikrocontoller zu programmieren, und habe auch schon ein paar Programme geschrieben, die dann auch funktioniert haben (Led an, ports als ein- oder ausgang festlegen, blinklichter, ...)
Das war aber alles nur mit ausgängen, jetzt will ich auch mal eingänge probieren. Dazu habe ich dann folgendes programm geschrieben:
#include <avr/io.h>
#include <stdint.h>
#define F_CPU 3686400UL
#include <util/delay.h>
int main (void)
{ DDRB=0x00; // Port B als Eingang
PORTB=0xff; // Pull-ups auf Port B ein
DDRC=0xff; // Port C als Ausgang
PORTC=0x00; // Alle Pins auf Port C auf low
uint8_t taster;
while (1)
{ taster=PINB; // Zustände von Port B in Variable taster speichern
while (taster) // Wenn taster gedrückt
{ PORTC=0xff; // Port C (wo LED angeschlossen) ein
taster=PINB; // Abfragen ob taster gedrückt
}
while(taster==0) // Wenn Taster nicht gedrückt
{ PORTC=0x00; // Led aus
taster=PINB; // Abfragen ob taster gedrückt
}
}
return 0;
}
Die led hängt auf port c, der taster auf port b.
Die Led sollte leuchten, wenn ich den taster drücke.
wenn ich es auf dn AVR brenne, leuchtet die led einfach nur, egal ob ich drücke oder nicht.
Könnt ihr mir sagen was ich falsch mache?
Und kennt ihr ein tutorial, bei dem das programmieren anhand von beispielen erklärt wird, oder nur irgendeine homepage, wo es den quellcode von so einfachen programmen gibt?
Beim tutorial von microcontroller.net finde ich gibt es zu wenige (vollständige) beispiele.
Grüße,
Christoph
Ich habe vor 2 Tagen begonnen, mikrocontoller zu programmieren, und habe auch schon ein paar Programme geschrieben, die dann auch funktioniert haben (Led an, ports als ein- oder ausgang festlegen, blinklichter, ...)
Das war aber alles nur mit ausgängen, jetzt will ich auch mal eingänge probieren. Dazu habe ich dann folgendes programm geschrieben:
#include <avr/io.h>
#include <stdint.h>
#define F_CPU 3686400UL
#include <util/delay.h>
int main (void)
{ DDRB=0x00; // Port B als Eingang
PORTB=0xff; // Pull-ups auf Port B ein
DDRC=0xff; // Port C als Ausgang
PORTC=0x00; // Alle Pins auf Port C auf low
uint8_t taster;
while (1)
{ taster=PINB; // Zustände von Port B in Variable taster speichern
while (taster) // Wenn taster gedrückt
{ PORTC=0xff; // Port C (wo LED angeschlossen) ein
taster=PINB; // Abfragen ob taster gedrückt
}
while(taster==0) // Wenn Taster nicht gedrückt
{ PORTC=0x00; // Led aus
taster=PINB; // Abfragen ob taster gedrückt
}
}
return 0;
}
Die led hängt auf port c, der taster auf port b.
Die Led sollte leuchten, wenn ich den taster drücke.
wenn ich es auf dn AVR brenne, leuchtet die led einfach nur, egal ob ich drücke oder nicht.
Könnt ihr mir sagen was ich falsch mache?
Und kennt ihr ein tutorial, bei dem das programmieren anhand von beispielen erklärt wird, oder nur irgendeine homepage, wo es den quellcode von so einfachen programmen gibt?
Beim tutorial von microcontroller.net finde ich gibt es zu wenige (vollständige) beispiele.
Grüße,
Christoph