Hilfe, was ist hier falsch (10-Zeilen-Code.)

Gast #608223
Lesenswert?
• ▲
▼
Steige gerade von 8252 auf AVR und von Assembler auf C um, habt also 
Verständnis. :D

Habe schon viel ausprobiert und einige Fehler gefunden, aber das Ding 
läuft trotzdem nicht. Es soll immer die LED leuchten wenn ich den Taster 
betätige.
1
#include <avr/io.h>
2

3
#define  led_1    PD6
4
#define button_1  PIND2
5

6
int main(void) {
7

8
  DDRD = 0xff;
9
  DDRD |= (1<<led_1);    //LED-Pin als Ausgang
10
  DDRD &= ~(1<<button_1);  //Taster-Pin als Eingang
11

12
    
13
  while(1) {
14
    if(button_1) {
15
      PORTD |= (1<<led_1);
16
    } else {
17
      PORTD &= ~(1<<led_1);
18
    }  
19
  }
20

21
  return 0;
22
}
Persönliche Seite #608224
Lesenswert?
• ▲
▼
naja.. man darf nicht einfach "if (button_1)" machen. Dieses PIND2 ist 
für den Compiler nur "2" ;) ist halt für den Programmierer leichter zu 
erkennen, was man damit vor 2-3 Jahren mal meinte.

Du musst mit diesem 2 (oder PIND2) das passende Bit im Input-Register 
maskieren.
So:
1
if(PIND & (1 <<button_1)) {
2
      PORTD |= (1<<led_1);
3
    } else {
4
      PORTD &= ~(1<<led_1);
5
    }

Bedeutet:
PIND (Eingänge) werden eingelesen und wird mit 0000 0100 maskiert (2x 
nach links geshiftete 1). Wenn 100 rauskommt, wars gesetz, wenn nicht, 
isses 0 gewesen. Dieses dritte Bit entspricht dann deinem Eingang.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren