Forum: Mikrocontroller und Digitale Elektronik assembler befehl


von Simon (Gast)


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

von Simon (Gast)


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

von Robin T. (rotoe) Benutzerseite


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.

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Ups das was ich geschrieben habe steht da ja eigentlich schon. Mmmh na 
gut. PD5 setzt du folgendermaßemn:

ldi r16, 0xFF
out DDRD, r16

ldi r16, 0b00100000
out PORTD, r16


Gruß

Robin T.

von Tim T. (tim_taylor) Benutzerseite


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.

von Simon (Gast)


Lesenswert?

Vielen Danke!
Hab das jetzt verstanden.
Simon

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Im letzten Beitrag habe ich PORTD verwendet, habe am Anfang nur den Code 
mit DDRB, PORTB, und sowas gelesen, dass er PD5 setzen wollte hab ich 
erst überlesen *schäm*^^

Allerdings hast du glaube ich PD4 auf 1 gesetzt^^

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.