-
Code:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 3686400UL /*Quarz mit 3.6864 Mhz */
#endif
#include <util/delay.h> /* definiert _delay_ms() */
/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(100);
if ( ! (*port & (1 << pin)) )
{
/* Anwender hat Zeit zum Loslassen des Tasters gegebn */
_delay_ms(100);
return 1;
}
}
return 0;
}
int main(void)
{
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang (Taster) */
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand Aktivieren */
if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 Gedrückt */
{
PORTD = PIND ^ ( 1 << PD7 ); /* LED an PinD7 an bzw ausschalten */
}
PORTB = (1<<PB4);
return 0;
}
Jops so macht das auch für meine (inzwischen) bescheidenen C Kenntnisse MEHR sinn.
Aber: Die Sim mag immer noch nich. Ich mein es müsste ja zumindest PB4 immer auf 1 sein oder
-
du kannst ja zeile für zeile durch den code durchgehen. Die Port-Register werden ja alle angezeigt...
/mfg plusminus
-
Hey
sollte nich zumindest DDRA komplett auf High (also schwarze kästchen) und Bit0 udn 1 bei PINA auch auf High ;)?
Bild hier
-
Zu dem Zeitpunkt noch nicht, das gelbe Pfeilchen (=aktuelle Position) steht ja noch GANZ am Anfang...
/mfg plusminus
-
wieder was gelernt, aber warum tut sich da dann nichts?
-
drück mal F11, oder Debug -> Step in oder so ähnlich ...
MfG Volker
PS:darauf wartend, das der 'Sekunden'kleber fest wird......
-
Alt+F5 und die hütte rennt
muchos grazias!