UND- Verkenüpfung

Gast #99807
Bin Anfänger in Sachen Microcontroller programmieren. Möchte wissen wie
ich eine Und-Verknüpfung erstellen kann. Habe zwei Taster an PD0, PD1
und eine LED PB0. Möchte jetzt ein Programm schreiben, das mir die  LED
zum Leuchten bringt, wenn beide Taster gedrückt sind ansonsten soll es
aus bleiben. Hier mal der Code den ich bis jetzt habe:

#include<avr/io.h>
int main(void)
{
  int a=0;
  outp (0x01,DDRB);//LED
  outp (0x00,DDRD);//TASTER
  for(;;)
  {
    if (bit_is_set(PIND, PIND0)) //T1 gedrückt wird
    {
  if (bit_is_set(PIND, PIND0)) //T2 gedrückt wird
  sbi (PortB, 0);
    }
    cbi (PORTB, 0); //cbi aus
    }
}

Vielleicht erkennt ja jemand meinen Fehler.
Gast #99809
Hi

#include<avr/io.h>
int main(void)
{
                //int a=0;
  DDRB = 0x01;  //outp (0x01,DDRB);//LED
  DDRD = 0;     //outp (0x00,DDRD);//TASTER
  for(;;)
  {
     if((PIND&0x03)==0x03) PORTB|=1;
     else PORTB&=(unsigned char)~1;
  }
}

Alles mit positiver Logik (Tastendruck gleich 1 und LED an gleich 1)

Matthias
Gast #99810
Hi!

Ich weiß jetzt nicht genau, ob die bit_is_set Abfragen so richitg sind,
aber von der Logik her brauchst du die "if" nicht verschachteln. C
kennt das logische und "&&".

Damit sähe der Code so aus:

#include<avr/io.h>
int main(void)
{
  int a=0;
  outp (0x01,DDRB);//LED
  outp (0x00,DDRD);//TASTER
  for(;;)
  {
    if (bit_is_set(PIND, PIND0)  &&  bit_is_set(PIND, PIND1)) {
        sbi (PortB, 0);
    }
    else  {
         cbi (PORTB, 0); //cbi aus
    }
  }

MfG

Sebastian
Gast #99811
Mit diesem Quellcode funktioniert es immer noch nicht. Das Lämpchen geht
immer noch an, wenn man nur einnen der Taster drückt. Ich weis jetzt
wirklich nicht mehr weiter wie das funktionieren soll.

#include<avr/io.h>
int main(void)
{
  outp (0x01,DDRB);//LED
  outp (0x00,DDRD);//TASTER
  for(;;)
  {
     if (bit_is_set(PIND, PIND1)  && bit_is_set(PIND, PIND0))
     {
  sbi (PORTB, 0);
     }
     else
     {
  cbi (PORTB, 0);
     }
   }
}
Gast #99812
Hi

was tut denn an meinem Code nicht? Sind die Tasten evtl. invertiert
angeschlossen? Dann kannst du bei meinem Code einfach "==0x03" durch
"==0x00" ersetzen.

Matthias
Gast #99813
Wie sind die Taster angeschlossen? Vielleicht "floaten" die Eingaenge.
Externe Pulldowns/-ups vorhanden? Interne Pullups fuer die Tasten-Pins
aktivieren?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.