Forum: Mikrocontroller und Digitale Elektronik Assemblersprache LDI etc.


von Matze (Gast)


Lesenswert?

Hallo,

versuche mich gerade mit den Grundzügen in die Assembler-Sprache ein 
zuarbeiten. ( ATmega16)

Ich will anfangs mit einfachste Befehle arbeiten.

Liege ich hiermit richtig :


Port D als Ausgang

LDI r16,0xFF
OUT DDRD ,r16

Port D als Eingang:

LDI r16,0x00
IN DDRD ,r16


Kopieren des Inhaltes von r13 nach r14 :

MOV  r14,r13


Über konstruktive Beiträge würde ich mich freuen :)

von S. Landolt (Gast)


Lesenswert?

"Alles richtig, ne glatte Eins"

Arbeitet man allerdings mit dem Assembler avrasm2 mit der Option -c, 
dann werden die Befehle klein geschrieben.

von S. Landolt (Gast)


Lesenswert?

(ich glaube, ich gehöre ins Bett)

> LDI r16,0x00
> IN DDRD ,r16

Das muss natürlich

out DDRD,r16

heißen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Und es kam nicht die Frage, warum
ldi r15, 0xff
zu einer Fehlermeldung führt.

von Matze (Gast)


Lesenswert?

S. Landolt (Gast) Danke du bist anscheinend ein Richtiger Profi :))


nun zu den Befehlen PUSH und POP ( bzw. Stackpointer)

Um das ganze richtig zu verstehen :

Mit Push starte ich ein Unterprogramm, bzw. hole mir einen Befehl vom 
Arbeitsregister mit dem Stackpointer)

Mit Pop beende ich ein Unterprogramm, bzw. lege den Befehl mithilfe des 
Stackpointers ins Arbeitsregister zurück)



Assembler-Unterprogramm ( Port D als Ausgang) :

CALL

PUSH r16

LDI r16,0x00
IN DDRD ,r16

POP r16

RET


Liege ich damit auch richtig ?

von Matze (Gast)


Lesenswert?

S. Landolt schrieb:
> (ich glaube, ich gehöre ins Bett)
>
>> LDI r16,0x00
>> IN DDRD ,r16
>
> Das muss natürlich
>
> out DDRD,r16
>
> heißen.


Warum wird hier ebenfalls der Befehl "OUT" verwendet ?
Es ist doch ein Eingang ?

von Matze (Gast)


Lesenswert?

Matze schrieb:
> Warum wird hier ebenfalls der Befehl "OUT" verwendet ?
> Es ist doch ein Eingang ?

Oder lese ich mit dem Befehl "IN " Daten in den Eingang ein ?

von H.Joachim S. (crazyhorse)


Lesenswert?

Willst du jetzt alle Befehle einzeln durchgehen?

Matze schrieb:
> Mit Push starte ich ein Unterprogramm, bzw. hole mir einen Befehl vom
> Arbeitsregister mit dem Stackpointer)> Mit Pop beende ich ein Unterprogramm, bzw. lege den Befehl mithilfe des
> Stackpointers ins Arbeitsregister zurück)> Assembler-Unterprogramm ( Port D als Ausgang) :
>
> CALL
>
> PUSH r16
>
> LDI r16,0x00
> IN DDRD ,r16
>
> POP r16
>
> RET
Das wiederum ist richtig.
Call /return sichern den PC auf dem stack bzw holen ihn von dort zurück. 
Dass passiert automatisch ohne push und pop.
push/pop brauchst du, wenn du in einem Unterprogramm Register 
veränderst, die eigentlich das aufrufende Programm verwendet.
Also am Anfang sichern, beliebig verwenden, wiederherstellen und return.
in DDRD,... ist aber immer noch falsch bzw kannst du dir das ldi vorher 
sparen.

von S. Landolt (Gast)


Lesenswert?

Das SFR (special function register) DDR wird geschrieben, also muss da 
grundsätzlich out stehen. (mal davon abgesehen, dass man es auch lesen 
könnte, aber es steht ja nur drin, was man vorher irgendwann mal 
hineingeschrieben hat).
1
...
2
 rcall  D_auf_Eingang
3
...
4
5
6
D_auf_Eingang:
7
 push   r16
8
 ldi    r16,0
9
 out    DDRD,r16
10
 pop    r16
11
 ret

Die Beschreibungen
> Mit Push starte ...
> Mit Pop beende ...
sind falsch.


> Oder lese ich mit dem Befehl "IN " Daten in den Eingang ein ?
Sie lesen mit in Daten vom Eingang ein, also z.B. von PIND.

von Alexander S. (alesi)


Lesenswert?


von Matze (Gast)


Lesenswert?

H.Joachim S. schrieb:
> Willst du jetzt alle Befehle einzeln durchgehen?
 nein, nur diesen Bereich, sry bin neu in diesem Gebiet



> Also am Anfang sichern, beliebig verwenden, wiederherstellen und return.


Sprich ich sichere mit dem Befehl POP das Arbeitsregister um es beliebig 
verwenden zu können.

Und mit dem Befehl Pop schiebe ich meine bearbeiteten Befehle wieder ins 
Arbeitsregister zurück ??

von S. Landolt (Gast)


Lesenswert?

> Und mit dem Befehl Pop schiebe ich meine bearbeiteten Befehle ...
Welche Befehle? Im Register stehen Daten.

von Matze (Gast)


Lesenswert?

Matze schrieb:
> Sprich ich sichere mit dem Befehl POP das Arbeitsregister um es beliebig
> verwenden zu können.
>
> Und mit dem Befehl Pop schiebe ich meine bearbeiteten Dateb wieder ins
> Arbeitsregister zurück ??


Ist es so sinngemäß zu verstehen ? :))

von S. Landolt (Gast)


Lesenswert?

> ... meine bearbeiteten Dateb ...

Sagen wir lieber "meine vorher gesicherten Daten".

von Matze (Gast)


Lesenswert?

S. Landolt schrieb:
> Sagen wir lieber "meine vorher gesicherten Daten".

Ok super, hat licht ins dunkle gebracht :)


Hier mein Verständnis zum Speicher :

EEPROM : nichtflüchtig und Betriebsstunden etc.
Flash :  nichtflüchtig und für Programme
RAM   :   flüchtig und Datenspeicher


Im groben so richtig, oder gibt es noch einen signifikanten Unterschied 
?

von S. Landolt (Gast)


Lesenswert?

> ... sichere mit dem Befehl POP ...
Und hier muss es natürlich push heißen.

Das mit den Speicherarten könnte ich so stehenlassen.

von Thomas (kosmos)


Lesenswert?

mit push legt man z.B: die Daten eines Arbeisregisters auf einen 
"Stapel" danach kann man das Arbeitsregister für andere Sachen 
verwenden, wenn man fertig ist holt man das ganze mit pop wieder vom 
Stapel runter.

Man kann auch nach dem Ablegen auf dem Stapel weitere Sachen auf den 
Stapel legen um an den untersten wert wieder ranzukommen muss man die 
oberen Teile zuerst abholen.

von Norbert (Gast)


Lesenswert?

Matze schrieb:
> Hallo,
>
> versuche mich gerade mit den Grundzügen in die Assembler-Sprache ein
> zuarbeiten. ( ATmega16)
>
> Ich will anfangs mit einfachste Befehle arbeiten.

Wenn du dich mit dem AVR Assembler beschäftigen möchtest, dann empfehle 
ich dir auf jeden Fall das 'AVR Instruction Set Manual'

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-0856-AVR-Instruction-Set-Manual.pdf

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.