assembler befehl

Gast #769030
Lesenswert?

Wie kann ich denn attiy2313 in Assembler den Befehl geben PD5 auf 5V zu 
legen? Versehe leider das Tuturial nicht...
1
.include "m8def.inc"
2
 
3
         ldi r16, 0xFF
4
         out DDRB, r16     ; Alle Pins am Port B durch Ausgabe von 0xFF ins
5
                           ; Richtungsregister DDRB als Ausgang konfigurieren
6
         ldi r16, 0x00
7
         out DDRD, r16     ; Alle Pins am Port D durch Ausgabe von 0x00 ins
8
                           ; Richtungsregister DDRD als Eingang konfigurieren
9
loop:
10
         in r16, PIND      ; an Port D anliegende Werte (Taster) nach r16 einlesen
11
         out PORTB, r16    ; Inhalt von r16 an Port B ausgeben
12
         rjmp loop         ; Sprung zu "loop:" -> Endlosschleife

das versteh ich ja noch aber wie geht das jetzt für PD5?
Simon
Gast #769032
Lesenswert?

Entschuldigung
1
.include "m8def.inc"         ; Definitionsdatei für den Prozessortyp einbinden
2
 
3
         ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der Konstanten 0xFF
4
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
5
 
6
         ldi r16, 0b11111100 ; 0b11111100 in r16 laden
7
         out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben
8
 
9
ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife
Persönliche Seite #769035
Lesenswert?

Ich kann kein bisschen Assembler aber das weiß ich dann doch^^

Also:

ldi r16, 0xFF
out PORTB, r16


heißt das er in das Register den Dezimalwert 255 lädt und danach das auf 
das Portregister PORTB gibt. Heißt alle Pins von PORTB werden auf 5V 
gesetzt.
Jetzt musst du nur FF durch deinen wert ersetzen. Du kannst es auch 
Binär eingeben also 0b11111111 z.B.

P.S.: Du musst natürlich PORTB voher auf Ausgang setztn mit DDRB

Gruß

Robin T.
Gast #769043
Lesenswert?

Auch wenn ich sowas sonst nicht beantworte, hab einen guten Tag:
1
.include "????def.inc" ; Definitionsdatei für den Prozessortyp einbinden, die kannst du selber suchen.
2

3
ldi r16, 0x10  ; lade Arbeitsregister r16 mit der Konstanten 0x10 = 0b00010000
4
out DDRD, r16  ; Inhalt von r16 ins IO-Register DDRD ausgeben
5
 
6
ldi r16, 0b00010000 ; 0b00010000 in r16 laden
7
out PORTD, r16      ; r16 ins IO-Register PORTD ausgeben
8
 
9
ende:    rjmp ende ; Sprung zur Marke "ende" -> Endlosschleife

DDRD ist das Data Direction Register für Port D.
Dort wird mittgeteilt das Pin 5 des Ports als Ausgang verwendet werden 
soll (0b00010000=0x10).

Mit out PORTD, r16 wird noch der Pin selber auf Vcc gesetzt da sich der 
Wert 0b00010000 in r16 befindet.

Btw: Die 2. Anweisung (ldi r16, 0b00010000 ; 0b00010000 in r16 laden) 
kann man weglassen da dieser Wert eh noch im r16 durch die 1. Anweisung 
steht.

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