Forum: Mikrocontroller und Digitale Elektronik io Adressierung beim AVR


von Markus (Gast)


Lesenswert?

bin gerade von C auf Assembler umgestiegen und verstehe da gerade was 
nicht:

z.B. ist im include file PORTD im IO Bereich definiert, d.h. mit IN und 
OUT kann ich es ansprechen.

Was ist aber jetzt wenn ich mit sbi oder sbic einzelne Bits setzen oder 
abfragen will, da müsste das ganze doch memory mapped sein, ich bräuchte 
also eine andere Adresse als PORTD (PORTD+0x20)
oder was habe ich da nicht verstanden?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

IN, OUT, SBIC, SBIS, CBI und SBI benötigen allesamt eine IO-Adresse
(bei den letztgenannten Befehlen auch noch aus einem bestimmten
Bereich).

Memory-mapped geht prinzipiell über LD*- und ST*-Befehle.

von Jochen M. (taschenbuch)


Lesenswert?

Markus,

Nein es muss NICHT memory-mapped sein.
für IO-Ports, oder IO-Register:
sbi  portd,1  ;bit-1 setzen
cbi  portd,7  ;bit-7 löschen

für Daten-Register
sbr  r16,4    ;= ori r16,4
cbr  r16,4    ;= r16 AND (255-4)
WICHTIG: sbr und cbr arbeiten NICHT bitweise wie SBI/CBI, sondern sind 
nichts weiter als ein ORI (ist auch der gleiche OP-Code)

Das alles geht aber auch eindeutig aus dem AVR-Befehlssatz hevor, wenn 
Du in Assembler arbeiten willst MUSST Du den ohnehin SORGFÄLIG(!!) 
durcharbeiten.

Jochen Müller

von Markus (Gast)


Lesenswert?

Danke!
Hätte ich wirklich selber rausfinden müssen ...

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.