www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage: Eingang und Ausgang


Autor: Dirac-Impuls (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
    if( ( PINB & ( 1 << PB0 ) ) == ( 1 << PB0 ) )
      PORTB |= ( 1 << PB1 );
    else
      PORTB &= ~( 1 << PB1 );

Autor: Dirac-Impuls (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirac-Impuls wrote:
> Ich habe diese Schreibweise: ( 1 << PB1 ) schon oft gesehen, kann mit
> ihr aber nichts anfangen.
Dann wird es höchste Zeit, den Artikel zum Thema Bitmanipulation mal 
durchzulesen.

Autor: Dirac-Impuls (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, dankeschön!

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.