AVR Assembler Makros: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
KKeine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 5: Zeile 5:
=== 16 Bit Konstante in Z-Pointer laden ===
=== 16 Bit Konstante in Z-Pointer laden ===


Natürlich auch möglich mit X- und Y-Pointer.
<avrasm>
 
<pre>
.MACRO SetZPtr ;(Adresse)
.MACRO SetZPtr ;(Adresse)
         ldi    ZL, LOW(@0)
         ldi    ZL, LOW(@0)
         ldi    ZH, HIGH(@0)
         ldi    ZH, HIGH(@0)
.ENDMACRO
.ENDMACRO
</pre>
</avrasm>
 
Natürlich auch möglich mit X- und Y-Pointer.
 


==Speicher==
==Speicher==
Zeile 26: Zeile 27:


==Arithmetik==
==Arithmetik==
=== Konstante addieren ===
=== Konstante addieren ===


<pre>
<avrasm>
.MACRO ADDI ;(a, k)
.MACRO ADDI ;(a, k)
         subi    @0, -(@1)
         subi    @0, -(@1)
.ENDMACRO
.ENDMACRO
</pre>
</avrasm>


=== Konstante addieren (16 Bit) ===
=== Konstante addieren (16 Bit) ===


<pre>
<avrasm>
.MACRO ADDIW ;(RdL:RdH, k)
.MACRO ADDIW ;(RdL:RdH, k)
         subi    @0L, LOW(-@1)   
         subi    @0L, LOW(-@1)   
         sbci    @0H, HIGH(-@1)
         sbci    @0H, HIGH(-@1)
.ENDMACRO
.ENDMACRO
</pre>
</avrasm>

Version vom 3. Dezember 2006, 14:13 Uhr


Hier entsteht eine Sammlung von verschiedenen nützlichen Makros für den AVR Assembler.

16 Bit Konstante in Z-Pointer laden

<avrasm> .MACRO SetZPtr ;(Adresse)

       ldi     ZL, LOW(@0)
       ldi     ZH, HIGH(@0)

.ENDMACRO </avrasm>

Natürlich auch möglich mit X- und Y-Pointer.


Speicher

2 Register ohne Zwischenspeicher vertauschen

.MACRO SWAP ;(a, b)
        eor     @0, @1
        eor     @1, @0
        eor     @0, @1
.ENDMACRO


Arithmetik

Konstante addieren

<avrasm> .MACRO ADDI ;(a, k)

       subi    @0, -(@1)

.ENDMACRO </avrasm>

Konstante addieren (16 Bit)

<avrasm> .MACRO ADDIW ;(RdL:RdH, k)

       subi    @0L, LOW(-@1)  
       sbci    @0H, HIGH(-@1)

.ENDMACRO </avrasm>