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 :)
"Alles richtig, ne glatte Eins" Arbeitet man allerdings mit dem Assembler avrasm2 mit der Option -c, dann werden die Befehle klein geschrieben.
(ich glaube, ich gehöre ins Bett) > LDI r16,0x00 > IN DDRD ,r16 Das muss natürlich out DDRD,r16 heißen.
Und es kam nicht die Frage, warum ldi r15, 0xff zu einer Fehlermeldung führt.
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 ?
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 ?
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 ?
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) nö > Mit Pop beende ich ein Unterprogramm, bzw. lege den Befehl mithilfe des > Stackpointers ins Arbeitsregister zurück) nö > 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.
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.
Matze schrieb: > versuche mich gerade mit den Grundzügen in die Assembler-Sprache ein > zuarbeiten. Hallo, hast Du Dir diese Seiten schon einmal angeschaut? https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen http://www.avr-asm-tutorial.net/avr_de/beginner/index.html http://www.weigu.lu/tutorials/avr_assembler/index.html http://stefanfrings.de/avr_workshop/index.html
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 ??
> Und mit dem Befehl Pop schiebe ich meine bearbeiteten Befehle ...
Welche Befehle? Im Register stehen Daten.
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 ? :))
> ... meine bearbeiteten Dateb ...
Sagen wir lieber "meine vorher gesicherten Daten".
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 ?
> ... sichere mit dem Befehl POP ...
Und hier muss es natürlich push heißen.
Das mit den Speicherarten könnte ich so stehenlassen.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.