Forum: Mikrocontroller und Digitale Elektronik Port Abfragen


von MichiK (Gast)


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

von MichiK (Gast)


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

von crazy horse (Gast)


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

von MichiK (Gast)


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

von MichiK (Gast)


Lesenswert?

ausgabe: out PORTD, r17
         rjmp loop

von Jens Renner (Gast)


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.

von MichiK (Gast)


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

von thkais (Gast)


Lesenswert?

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

von MichiK (Gast)


Lesenswert?

Einer Tabelle, wie soll soetwas aussehen?

MK

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.