Die nchsten beiden Befehle sind hnlich wie die
letzten. Nur das wir hier das Register r16 mit 'ldi r16, 0b00000001' mit einem
Binrwert laden. Durch 'out PORTD, r16' wird nun der Port D Pin 0 gesetzt. Jetzt
leuchtet die LED auf. Nun ist der AVR mit der Arbeit fertig und er kann
eigentlich stoppen. Nur so etwas wie anhalten des AVR gibt es nicht. Ein
Mikroprozessor braucht immer etwas zu tun. Daher mssen wir dafr sorgen, dass
der AVR auch etwas zu tun hat. Dies geschieht ab der Sprungmarke 'Loop'. Darauf
folgt der Befehl 'rjmp Loop'. Dies heit soviel wie: Springe zur angegeben
Adresse und arbeite dort weiter. Er springt also wieder zur Sprungmarke Loop. Also, der AVR hngt in einer Endlosschleife. Elektronik.de.vu - Einsteigerkurs fr die Verwendung von AVR-Microcontrollern. Diese wird hier nur verlassen, wenn
wir einen Reset auslsen. Taster steuert LED
Nur eine Leuchtdiode mit dem AVR einzuschalten ist
relativ langweilig. Aber wir haben ja noch den Taster auf dem Steckboard, den
wir an Port B Bit 0 geklemmt haben. Um die LED nun per Taster zu steuern, mssen
wir unser Programm erweitern:.
Avr Assembler Beispiele Video
Anstelle von 2 muss es heißen: $0A. Tauscht man diesen Wert aus, macht das Programm genau das, was man vorher
geplant hatte. Der Programmzähler, alle Registerinhalte und das Statusregister können im Debug-Modus übrigens im Prozessorfenster angeschaut werden. Abbildung 4 - Prozessorfenster (AVR Studio 4. 19)
Weiterführende Aufgaben
Wie müsste ein Programm aufgebaut sein, das eine LED einmal
kurz aufblinken lässt? Wie müsste ein Programm aufgebaut sein, das eine LED
zehnmal hintereinander ein- und wieder
ausschaltet? Erste Befehle - Mit Assembler das Laufen lernen. Wie müsste ein Programm aufgebaut sein, das eine LED im
Sekundentakt blinken lässt? Macros sind eine Ansammlung von Instruktionen, die durch ein einziges Statement aufgerufen werden. Für einen Mikrocontroller ist ein Macro eine neue
Instruktion. In der vorherigen Übung und in vielen zukünftigen Übungen werden die Instruktionen im Block I/O Ports festlegen bei der Benutzung eines STK200
Boards immer die gleichen sein. Deshalb liegt es nahe, diese Programmzeilen in einem Macro zusammenzufassen.
Avr Assembler Beispiele In Windows 10
include
ldi
r16, 0x00
out
DDRB, r16
r16, 0xFF
PORTB, r16
in
r16, PINB
Hier wurde jetzt der Port B auch initialisiert. Mit 'ldi
r16, 0x00' und 'out DDRB, r16' haben wir dafr gesorgt, dass alle Pins an Port B
als Eingnge fungieren sollen. Da wir an Port B noch die internen
PullUp-Widerstnde bentigen, wurde mit 'ldi r16, 0xFF' und 'out PORTB, r16' dafr
gesorgt, dass die internen Widerstnde aktiviert werden. Als eigentliche Neuerung ist der Befehl 'in r16, PINB'
nach der Loop-Sprungmarke anzusehen. Hier lesen wir den Eingangsstatus des Port
B ein und speichern das Ergebnis in das Register r16. Als nchstes wird der der
so ermittelte Wert wieder an Port D geschickt. Avr assembler beispiele de. Mit dem Sprungbefehl sorgen wir nun dafr, dass das
Einlesen und Zuweisen immer wieder durchgefhrt wird. Wer dieses Programm bersetzt und an den AVR
bertragen hat, wird ein ziemliches Manko feststellen. Die LED verhlt sich
genau umgekehrt wie die Tasterbettigung. Ist der Taster nicht bettigt,
leuchtet die LED auf. Bettigt man den Taster bleibt die Leuchtdiode dunkel.
Avr Assembler Beispiele De
D. h. der folgende Befehl wird ausgeführt wenn Bit gesetzt..
SBIS
p, b
Überspringe, wenn Bit b in Port P gesetzt
sbis PIND, 4
rjmp testmode
Gehe in Tesmode wenn bei Power-On PGRM gedrückt,
d. gedrückt bedeutet Pin ist auf GND, Bit ist 0.
Auch wenn dies im ersten Moment nichts
Besonderes sein mag, so ist dies doch der erste Schritt, den AVR in Assembler zu
programmieren. Wer den entsprechenden Bascom-Lehrgang
durchgearbeitet hat, wird evtl. doch einige Parallelen finden. Als erstes fllt
schon einmal die erste Zeile auf. Mit der Assembler-Direktive '. include
""' teilen wir dem Assembler mit, mit welchem Prozessor wir arbeiten
mchten. In diesem Fall natrlich den ATMega8. Ab hier 'wei' das AVR-Studio
welche Ports, Timer etc. unser AVR hat. Als nchstes folgt eine Sprungmarke: 'Start:'. In
diesem Programm ist diese eigentlich nicht notwendig, da sie nie angesprungen
wird. In greren Projekten ist es aber dennoch sinnvoll, vor dem ersten Befehl
eine passende Marke zu setzen. AVR Assembler - Unterprogramme – Mikrocontroller.net. So kann man spter erkennen, wo das eigentliche
Programm beginnt. Mit 'ldi r16, 0xFF' haben wir den ersten richtigen
Assembler-Befehl. Das Mnemonic 'ldi' sagt dem AVR das er einen Wert in ein
Register laden soll. Hier ist es der Wert FF Hexadezimal (255 Dezimal).