www.mikrocontroller.net

Forum: Compiler & IDEs UND- Verkenüpfung


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei mal PIND0 statt einmal PIND0 und einmal PIND1 verwendet...

Gruß,
Patrick...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian Schildt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);
     }
   }
}

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sind die Taster angeschlossen? Vielleicht "floaten" die Eingaenge.
Externe Pulldowns/-ups vorhanden? Interne Pullups fuer die Tasten-Pins
aktivieren?

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Habe zwei Taster an PD0, PD1 und eine LED PB0
Das ist jeweils ein "Beinchen" der Bauteile, wo gehen die anderen
Kontakte hin?

grüsse leo9

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.