io Adressierung beim AVR

Gast #870926
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?
#870934
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren