www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port Abfragen


Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich bin neu hier und habe auch schon ein Paar dinge aus Tutorial
probiert.

Ich verwende eine AT90S4433, AVR-Studio und Yaap

Jetzt meine Frage:

"ist port B = 00110011 dann ausgabe von 01010101 nach port D"

"ist port B = 00111011 dann ausgabe von 00001111 nach port D"

usw.

PS: Ich bin Gehörlos, deswegen ist meine Rechtschreibung auch nicht so
gut.

Danke schon im Vorraus. MK

Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, sorry.

Ich wollte schreiben:

Wie kann ich sowas Programmieren:

"ist port B = 00110011 dann ausgabe von 01010101 nach port D"

"ist port B = 00111011 dann ausgabe von 00001111 nach port D"

MK

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenns nur ein paar Abfragen sind, gehts am einfachsten so:

"ist port B = 00110011 dann ausgabe von 01010101 nach port D"

in temp, PINB         //einlesen von PIN B
cpi temp, 0b00110011  //1.Vergleich
brne chk_2            //wenn nicht gleich, anderer Vergleich
ldi temp, 0b01010101  //Ausgabewert für condition1
rjmp ausgabe
chk_2:
cpi temp, 0b00111011
brne chk_3
....

ausgabe:
out PORTD, temp
ret

Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Estmal "DANKE"

Geht dass so:

  ;Grundeinstellungen

.include "4433def.inc"    ;AVR-Typ wählen

  ldi r16, 0xFF    ;Port B durch Ausgabe von 0xFF ins
  out DDRB, r16    ;Richtungsregister DDRB als Eingang
                                ;konfigurieren

  ldi r16, 0x00    ;Port D durch Ausgabe von 0x00 ins
  out DDRC, r16    ;Richtungsregister DDRD als Ausgang
                                ;konfigurieren

  ldi r16, 0x00    ;Port D durch Ausgabe von 0x00 ins
  out DDRD, r16    ;Richtungsregister DDRD als Ausgang
                                ;konfigurieren

  ldi r16, 0x00    ;0x00 in Register r16 laden
  out PORTC, r16    ;Register r16 nach Port C ausgeben

  ldi r16, 0x00    ;0x00 in Register r16 laden
  out PORTD, r16    ;Register r16 nach Port D ausgeben

  ;Programm

loop:   in temp, PINB           ;einlesen von PIN B
        cpi r16, 0b00110011     ;1.Vergleich
        brne chk_2              ;wenn nicht gleich, anderer Vergleich
        ldi r17, 0b01010101     ;Ausgabewert für condition1
        rjmp ausgabe
chk_2:  cpi r16, 0b00111011     ;2.Vergleich
        brne chk_3              ;wenn nicht gleich, anderer Vergleich
        ldi r17, 0b00001111     ;Ausgabe für condition2
        rjmp ausgabe

              ....
              ....
              ....
ausgabe: out PORTD, r17

Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ausgabe: out PORTD, r17
         rjmp loop

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die PORTC-/DDRC-Konfiguration kannst Du Dir für dieses Beispiel sparen.
Aber evtl. benötigst Du den Port ja noch später im Programm.

Außerdem solltest Du "brne chk_3" durch "brne ausgabe" ersetzen,
sofern Du keine weiteren Zustände abfragen willst.

Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Port C wird noch benötigt.

Und es werden 11 zustände abgefragt. (dann kommt "rjmp loop" erst
später im Programm)

Herzlichen Dank an alle. MK

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei 11 Abfragen könnte man sich auch das Anlegen einer Tabelle überlegen
- sieht schöner aus, bringt aber sonst keine Vorteile.

Autor: MichiK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einer Tabelle, wie soll soetwas aussehen?

MK

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.