Anfängerfrage: Eingang und Ausgang

Gast #1139144
Hallo!

Port B(0) ist ein Eingang und Port B(1) ist ein Ausgang. Der Eingang ist 
standardmäßig auf High und kann über einen Taster auf Low gezogen 
werden.

Wenn der Taster gedrückt wird soll B(1) auf High sein, abernfalls nicht.

Leider ist der Ausgang bei meinem jetzigen Programm immer auf High, wäre 
nett wenn jemand mal einen Blick drauf werfen könnte.



#define   F_CPU 3686400
#include  <avr\io.h>

main ()
{
  DDRB=0b00000010;
  while(1)
  {
    if((PORTB|0b11111110)==0b11111110)
      PORTB=0b00000010;
    else PORTB=0b00000000;
  }
}


Danke!
#1139157
1) Wenn du einen Eingang abfragen willst, musst du das PIN
   Register benutzen.

   Ausgang: PORT
   Eingang: PIN

2) Du kannst kein | benutzen, um gezielt einzelne Bits auf 0 zu setzen.
   Dafür benutzt man ein &

   Bits setzen:  |
   Bits löschen: &

3) Überleg dir gut, welcher Wert herauskommen wird, wenn du gezielt
   einzelne Bits in einem Datenwort auf 0 setzt.

4) Wenn du einfach an PORTB eine Zuweisung der Form 0b00000010 machst,
   dann setzt du gleichzeitig aber auch alle anderen Bits an PORTB auf
   0. Das willst du aber nicht unbedingt. Versuch dir von Anfang an
   anzugewöhnen nur die Bits zu verändern, die du auch wirklich
   verändert haben möchtest, alles andere soll gleich bleiben, egal
   ob das eine 0 oder eine 1 ist
1
    if( ( PINB & ( 1 << PB0 ) ) == ( 1 << PB0 ) )
2
      PORTB |= ( 1 << PB1 );
3
    else
4
      PORTB &= ~( 1 << PB1 );
Gast #1139168
Jo, danke. So funktioniert es:

main ()
{
  DDRB=0b00000010;
  while(1)
  {
    if((PINB|0b11111110)==0b11111110)
      PORTB=0b00000010;
    else PORTB=0b00000000;
  }
}



Ich habe diese Schreibweise: ( 1 << PB1 ) schon oft gesehen, kann mit 
ihr aber nichts anfangen.


Liefert dies PB nur, dass PB(1) zur 1 gesetzt wird falls es eine Null 
war?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.