Port Abfragen

Gast #46348
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
Gast #46349
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
Gast #46350
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
Gast #46351
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
Gast #46353
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.

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