Avr-Asm-Tutorial S. 41 beeinflussen. Bit Rechnen Logik Vergleich Bits Schieben Sonstige Z C N V ADD, ADC, ADIW, DEC, INC, SUB, SUBI, SBC, SBCI, SBIW ADD, ADC, ADIW, SUB, SUBI, SBC, SBCI, SBIW ADD, ADC, ADIW, DEC, INC, SUB, SUBI, SBC, SBCI, SBIW ADD, ADC, ADIW, DEC, INC, SUB, SUBI, SBC, SBCI, SBIW AND, ANDI, OR, ORI, EOR, COM, NEG, SBR, CBR COM, NEG AND, ANDI, OR, ORI, EOR, COM, NEG, SBR, CBR AND, ANDI, OR, ORI, EOR, COM, NEG, SBR, CBR S SBIW - - H ADD, ADC, SUB, SUBI, SBC, SBCI NEG T - - - I - - - CP, CPC, CPI CP, CPC, CPI CP, CPC, CPI CP, CPC, CPI CP, CPC, CPI BCLR Z, BSET Z, CLZ, SEZ, TST BCLR C, BSET C, CLC, SEC BCLR N, BSET N, CLN, SEN, TST BCLR V, BSET V, CLV, SEV, TST BCLR S, BSET S, CLS, SES BCLR H, BSET H, CLH, SEH BCLR T, BSET T, BST, CLT, SET BCLR I, BSET I, CLI, SEI ASR, LSL, LSR, ROL, ROR ASR, LSL, LSR, ROL, ROR ASR, LSL, LSR, ROL, ROR ASR, LSL, LSR, ROL, ROR - - - - - - CLR - CLR CLR - RETI
Avr-Asm-Tutorial S. 42 8 SRAM 8.1 Verwendung von SRAM in AVR Assembler Alle AT90S-AVR-Typen verfügen in gewissem Umfang über statisches RAM (SRAM) an Bord. Bei sehr einfachen Assemblerprogrammen kann man es sich im allgemeinen leisten, auf die Verwendung dieser Hardware zu verzichten und alles in Registern unterzubringen. Wenn es aber eng wird im Registerbereich, dann sollte man die folgen<strong>de</strong>n Kenntnisse haben, um einen Ausweg aus <strong>de</strong>r Speicherenge zu nehmen. 8.2 Was ist SRAM? SRAM sind Speicherstellen, die im Gegensatz zu Registern nicht direkt in die Recheneinheit (Arithmetic and Logical Unit ALU, manchmal aus historischen Grün<strong>de</strong>n auch Akkumulator genannt) gela<strong>de</strong>n und verarbeitet wer<strong>de</strong>n können. Ihre Verwendung ist daher auf <strong>de</strong>n Umweg über ein Register angewiesen. Im dargestellten Beispiel wird ein Wert von <strong>de</strong>r Adresse im SRAM in das Register R2 geholt (1.Instruktion), irgendwie mit <strong>de</strong>m Inhalt von Register R3 verknüpft und das Ergebnis in Register R3 gespeichert (Instruktion 2). Im letzten Schritt kann <strong>de</strong>r geän<strong>de</strong>rte Wert auch wie<strong>de</strong>r in das SRAM geschrieben wer<strong>de</strong>n (3.Instruktion). Es ist daher klar, dass SRAM-Daten langsamer zu verarbeiten sind als Daten in Registern. Dafür besitzt schon <strong>de</strong>r zweitkleinste AVR immerhin 128 Bytes an SRAM-Speicher. Da passt schon einiges mehr rein als in 32 popelige Register. Die größeren AVR ab AT90S8515 aufwärts bieten neben <strong>de</strong>n eingebauten 512 Bytes zusätzlich die Möglichkeit, noch externes SRAM anzuschließen. Die Ansteuerung in Assembler erfolgt dabei in i<strong>de</strong>ntischer Weise wie internes RAM. Allerdings belegt das externe SRAM eine Vielzahl von Portpins für Adress- und Datenleitungen und hebt <strong>de</strong>n Vorteil <strong>de</strong>r internen Bus-Gestaltung bei <strong>de</strong>n AVR wie<strong>de</strong>r auf. 8.3 Wozu kann man SRAM verwen<strong>de</strong>n? SRAM bietet über das reine Speichern von Bytes an festen Speicherplätzen noch ein wenig mehr. Der Zugriff kann nicht nur mit festen Adressen, son<strong>de</strong>rn auch mit Zeigervariablen erfolgen, so dass eine fließen<strong>de</strong> Adressierung <strong>de</strong>r Zellen möglich ist. So können z.B. Ringpuffer zur Zwischenspeicherung o<strong>de</strong>r berechnete Tabellen verwen<strong>de</strong>t wer<strong>de</strong>n. Das geht mit Registern nicht, weil die immer eine fest angegebene Adresse benötigen. Noch relativer ist die Speicherung über einen Offset. Dabei steht die Adresse in einem Pointerregister, es wird aber noch ein konstanter Wert zu dieser Adresse addiert und dann erst gespeichert o<strong>de</strong>r gelesen. Damit lassen sich Tabellen noch raffinierter verwen<strong>de</strong>n. Die wichtigste Anwendung für SRAM ist aber <strong>de</strong>r sogenannte Stack o<strong>de</strong>r Stapel, auf <strong>de</strong>m man Wer-
- Seite 1 und 2: Anfängerkurs zum Erlernen der Asse
- Seite 3 und 4: Inhaltsverzeichnis 1 Warum Assemble
- Seite 5 und 6: 12.1.3 Binary Coded Digit, BCD.....
- Seite 7 und 8: Avr-Asm-Tutorial S. 2 ren, einsetze
- Seite 9 und 10: Avr-Asm-Tutorial S. 4 Im ersten Sch
- Seite 11 und 12: Avr-Asm-Tutorial S. 6 2.6 Interpret
- Seite 13 und 14: Avr-Asm-Tutorial S. 8 3 Hardware f
- Seite 15 und 16: Avr-Asm-Tutorial S. 10 ● den Stro
- Seite 17 und 18: Avr-Asm-Tutorial S. 12 kann. 3.5 Fe
- Seite 19 und 20: Avr-Asm-Tutorial S. 14 keinen besti
- Seite 21 und 22: Avr-Asm-Tutorial S. 16 4 Werkzeuge
- Seite 23 und 24: Avr-Asm-Tutorial S. 18 Beim WAVRASM
- Seite 25 und 26: Avr-Asm-Tutorial S. 20 Voraussetzun
- Seite 27 und 28: Avr-Asm-Tutorial S. 22 • links un
- Seite 29 und 30: Avr-Asm-Tutorial S. 24 Das Richtung
- Seite 31 und 32: Avr-Asm-Tutorial S. 26 5 Struktur v
- Seite 33 und 34: Avr-Asm-Tutorial S. 28 gramme. Dana
- Seite 35 und 36: Avr-Asm-Tutorial S. 30 sleep ; schl
- Seite 37 und 38: Avr-Asm-Tutorial S. 32 In einer Ins
- Seite 39 und 40: Avr-Asm-Tutorial S. 34 zwei Bytes s
- Seite 41 und 42: Avr-Asm-Tutorial S. 36 7 Ports 7.1
- Seite 43 und 44: Avr-Asm-Tutorial S. 38 LDI MeinLieb
- Seite 45: Avr-Asm-Tutorial S. 40 Gerät Kurz
- Seite 49 und 50: Avr-Asm-Tutorial S. 44 Buffer_End:
- Seite 51 und 52: Avr-Asm-Tutorial S. 46 zessor. So s
- Seite 53 und 54: Avr-Asm-Tutorial S. 48 9 Steuerung
- Seite 55 und 56: Avr-Asm-Tutorial S. 50 Bit gesetzt
- Seite 57 und 58: Avr-Asm-Tutorial S. 52 .ENDMACRO Di
- Seite 59 und 60: Avr-Asm-Tutorial S. 54 RJMP Routine
- Seite 61 und 62: Avr-Asm-Tutorial S. 56 RETI abschli
- Seite 63 und 64: Avr-Asm-Tutorial S. 58 10 Schleifen
- Seite 65 und 66: Avr-Asm-Tutorial S. 60 Jetzt brauch
- Seite 67 und 68: Avr-Asm-Tutorial S. 62 ; .equ fck =
- Seite 69 und 70: Avr-Asm-Tutorial S. 64 11 Mehr übe
- Seite 71 und 72: Avr-Asm-Tutorial S. 66 und dienen n
- Seite 73 und 74: Avr-Asm-Tutorial S. 68 jmp IntTc0Ov
- Seite 75 und 76: Avr-Asm-Tutorial S. 70 ziert: über
- Seite 77 und 78: Avr-Asm-Tutorial S. 72 Salat. Das p
- Seite 79 und 80: Avr-Asm-Tutorial S. 74 11.6.1 Arten
- Seite 81 und 82: 11.6.2 AVR-Typen mit Ein-Wort-Vekto
- Seite 83 und 84: Interrupts mit den Vektoren 0000 bi
- Seite 85 und 86: AVR-Typ/Adr 0020 0022 0024 0026 002
- Seite 87 und 88: Interrupts mit den Vektoren 0060 bi
- Seite 89 und 90: Avr-Asm-Tutorial S. 84 niert, indem
- Seite 91 und 92: Avr-Asm-Tutorial S. 86 ORI R16,0x30
- Seite 93 und 94: Avr-Asm-Tutorial S. 88 man nun mal
- Seite 95 und 96: Avr-Asm-Tutorial S. 90 Aber gemach!
- Seite 97 und 98:
Avr-Asm-Tutorial S. 92 .DB 0,0,4,0,
- Seite 99 und 100:
Avr-Asm-Tutorial S. 94 rjmp loop Zu
- Seite 101 und 102:
Avr-Asm-Tutorial S. 96 Jetzt muss d
- Seite 103 und 104:
Avr-Asm-Tutorial S. 98 Programmschr
- Seite 105 und 106:
Avr-Asm-Tutorial S. 100 zesses imme
- Seite 107 und 108:
Avr-Asm-Tutorial S. 102 .def Res3 =
- Seite 109 und 110:
Avr-Asm-Tutorial S. 104 ; Definiere
- Seite 111 und 112:
Avr-Asm-Tutorial S. 106 Die Multipl
- Seite 113 und 114:
Avr-Asm-Tutorial S. 108 13 Zahlenum
- Seite 115 und 116:
Avr-Asm-Tutorial S. 110 durch Addit
- Seite 117 und 118:
Avr-Asm-Tutorial S. 112 ; dessen Ve
- Seite 119 und 120:
Avr-Asm-Tutorial S. 114 ; =========
- Seite 121 und 122:
Avr-Asm-Tutorial S. 116 ; Unterrout
- Seite 123 und 124:
Avr-Asm-Tutorial S. 118 14 Umgang m
- Seite 125 und 126:
Avr-Asm-Tutorial S. 120 ; 3. Die er
- Seite 127 und 128:
Avr-Asm-Tutorial S. 122 mov R3,rmp
- Seite 129 und 130:
Avr-Asm-Tutorial S. 124 Funktion Un
- Seite 131 und 132:
Avr-Asm-Tutorial S. 126 Funktion Un
- Seite 133 und 134:
Avr-Asm-Tutorial S. 128 Ports, alph