UND- Verkenüpfung

Gast #99807
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.
Gast #99809
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
Gast #99810
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
Gast #99811
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);
     }
   }
}

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