Hallo alle miteinander
Ich hab erst vor kurzem angefangen mich mit Mikrocontrollern zu
beschäftigen und schreibe gerade ein kleines Programm für den Attiny
2313.
Der Anfang des Programms sieht so aus:
1
2
.include "tn2313def.inc"
3
4
ldi r9, 0b10000000
5
ldi r10, 0b00000000
6
ldi r11, 0b00000000
7
ldi r12, 0b00000000
8
ldi r13, 0b00000000
9
ldi r14, 0b00000000
10
ldi r15, 0b00000000
11
ldi r16, 0b00000000
12
13
ldi r17, 0b10000000
14
ldi r18, 0b00000000
15
ldi r19, 0b00000000
16
ldi r20, 0b00000000
17
ldi r21, 0b00000000
18
ldi r22, 0b00000000
19
ldi r23, 0b00000000
20
ldi r24, 0b00000000
Das lässt sich, aus mir nicht verständlichen Gründen nicht kompilieren
(im AVR Studio 4)
Die Operationen mit den Registern r9 bis r15 sind wohl so nicht möglich
(error: invalid register)
Aber wieso? Und wie krieg ich die Daten sonst da rein? Ich dachte mit
den 32 general purpose working registers kann ich anstellen was ich
will? Also dass es keine Unterschiede zwischen denen gibt.
Alles klar, vielen Dank spess.
Kannst du mir vielleicht auch erklären wieso das so ist? Oder ist es
eine " Die Architektur ist halt so, nimm es hin" Sache?
Steffen schrieb:> Kannst du mir vielleicht auch erklären wieso das so ist?
Lese dazu im datasheet zum 2313, dann wirst Du schlauer.
Alle Infos zum Proggrammieren findest Du dort.
Du musst Dich eh wenn Du mit µC weitermachen willst ins datasheet
schauen.
Gruß
Hi
Nachtrag: Mit 'clr rX' oder 'ser rX' lassen sich die unteren 16 Register
löschen oder auf $FF setzen.
>Ich dachte mit>den 32 general purpose working registers kann ich anstellen was ich>will? Also dass es keine Unterschiede zwischen denen gibt.
Das heisst doch nicht, das es keine Unterschiede gibt. Einige Befehle
funktionieren sogar nur für r24...r31.
MfG Spess
spess53 schrieb:> Hi>> @Autor: kopfkratz (Gast)>> Das steht ausnahmsweise nicht im Datenblatt sondern im Instruction> Set:>> http://www.atmel.com/dyn/resources/prod_documents/...>> MfG Spess
Sorry, mia culpa, die meine ich aber...
da steht alles drin, die Bedeutung, die Unterschiede, usw...
Damit sollte man sich auseinandersetzen...
danke
Gruß
spess53 schrieb:> Nachtrag: Mit 'clr rX' oder 'ser rX' lassen sich die unteren 16 Register> löschen oder auf $FF setzen.
Ha! Erwischt - ser rX ist nichts anderes als ein ldi rX,0xff und geht
damit auch nur für r16-r31. Warum überhaupt ser im instruction manual
steht, weiß nur Herr Atmel persönlich.
Ersatzweise geht clr rX und dec rX.
Steffen schrieb:> Kannst du mir vielleicht auch erklären wieso das so ist? Oder ist es> eine " Die Architektur ist halt so, nimm es hin" Sache?
Da bei Immediate 'direkt Ladebefehlen' der Operand (8Bit) komplett mit
im (16Bit)Op Code enthalten ist, bleiben nur noch 4 Bit für das Register
übrig. Also nur 16 Register.
zB: LDI R17,$56
ldi 5 R17 6
1110 KKKK dddd KKKK
1110 0101 0001 0110
E 5 1 6
herrmueller
Der Befehl ldi verwendet im Maschinencode 4 bit im ersten Byte, 4 bit im
zweiten Byte. Für das Argument des Befehls ldi,rn , die Registernummer,
stehen daher nur 4 bit zur Verfügung, also 16 Möglichkeiten. Die sind
eben den Registern 16 bis 31 zugeordnet.
Ganz Genaues siehe: AVR instruction set, Aufbau des opcode für ldi.
Es gibt dann noch andere( Meist ...i - Befehle) die nur vier bit als
Argument zulassen, also erst ab Nr.16 .
Deshalb ist es etwas geschummelt, wenn 32 "Allzweck-Register" genannt
werden, 16 davon sind in bezug auf den Befehlssatz etwas verkrüppelt.
Hi
>Deshalb ist es etwas geschummelt, wenn 32 "Allzweck-Register" genannt>werden, 16 davon sind in bezug auf den Befehlssatz etwas verkrüppelt.
Eigentlich sind es mehr (verkrüppelte). ADIW und SBIW gehen nur mit den
Registerpaaren r25:r24 ... r31:r30.
Aber wenn man, wie ich, vom Z80 kommt ist die Registerausstattung der
AVRs schon recht üppig. Mit den paar kleinen kann man leben.
MfG Spess
All diese Infos gibt es auch in der Online-Hilfe (F1) des AVR-Studios.
spess53 schrieb:> Aber wenn man, wie ich, vom Z80 kommt
Mit dem Z80 warst Du aber schon ganz schön verwöhnt. Beim 6502 (7501,
Commodore Plus/4) gab's nur Akku, X und Y, aber die Zeropage hat das
wieder wett gemacht...
> ist die Registerausstattung der> AVRs schon recht üppig. Mit den paar kleinen kann man leben.
Das meine ich auch.
...