Gruppe 2

Aufgabe 1

Das Problem: Unser Eingang ist Pin A und der Ausgang soll Port B und nicht Port A sein.

Die Lösung: Wir haben die Data Direction auf Port B gesetzt um diesen als Ausgang zu kennzeichnen.
Wir haben die Variable temp dazu verwendet um den Inhalt auf Pin A einzulesen und später haben wir temp auf Port B ausgegeben.

Das Programm:

reset:    

    ser     temp
    out     DDRB,    temp    ;Port B als Ausgang gesetzt.
    clr    temp

    rjmp    In

In:

    in    temp,    PINA    ;Einlesen von Port A in Register

    rjmp    Out

Out:

    out     PORTB,    temp    ;Ausgabe von Register auf Port B

    rjmp    reset

Aufgabe 2

Das Problem: Wir wollen eine Zahl von Pin A mit 5 multiplizieren und auf Port B ausgeben
(Dabei ist dartauf zu achten, dass man nicht auf ein Ergebnis über 255 kommen kann)

Die Lösung: Als erstes werden 2 Variablen festgelegt: Zahl und Ergebnis. Jetzt können wir Port B als Ausgang definieren.
Der [ lsl ] Befehl verdoppelt den Wert in einem Register, also benutzen wir ihn 2 Mal und fügen die eigentliche Zahl
mit dem [ add ] Befehl noch ein lettes Mal hinzu. Jetzt kann das Ergebnis auf Port B ausgegeben werden.

Das Programm:

.def    Zahl    = r16
.def    Ergebnis    = r17    ;Definition der benötigten Variablen

reset:    

    ser    Zahl
    out    DDRB,    Zahl    ;Port B als Ausgang gesetzt.
    clr    Zahl
    clr     Ergebnis

    rjmp    In

In:

    in    Zahl,    PINA        ;Einlesen der eingetragenen Zahl aus Pin A

    rjmp    Rechnung

Rechnung:

    add    Ergebnis,    Zahl

    lsl    Ergebnis
    lsl    Ergebnis        ;Multiplizieren um 4

    add    Ergebnis,    Zahl    ;Zahl nochmals hinzu für Verfünffachng

    rjmp    Ausgabe

Ausgabe:

    out    PORTB,    Ergebnis    ;Ausgabe von Ergebnis auf Port B

    rjmp    reset
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License