| 
Programme für Mikrocontroller können in mehreren Programmiersprachen erstellt werden. Es steht unter anderem C, Basic oder Assembler zur Verfügung. Es soll die Assemblersprache
 näher erläutert werden.
 
 
 3.1	Einfache Assemblerbefehle
 
 Einige Assemblerbefehle, mit denen man schon viele Anwendungsaufgaben lösen kann.
 
 Befehl	Funktion
 and Rd, Rr	Der Inhalt des Registers Rr  wird mit dem Inhalt des Registers Rd UND-verknüpft. Das Ergebnis wird in Rd gespeichert.
 Andi Rd, K8	Der Inhalt des Registers Rd wird mit der 8 Bit - Konstanten K8 UND-verknüpft. Das Ergebnis wird in Rd gespeichert.
 in Rd, P	Der Inhalt des I/O-Ports P wird in das Register Rd geladen.
 ldi Rd, K8	Der Inhalt von einer 8 Bit - Konstanten K8 wird in das Register Rd geladen.
 
 Nop	Einen Systemtakt warten.
 or Rd, Rr	Rr wird mit Rd Oder verknüpft. Das Ergebnis wird in Rd gespeichert.
 ori Rd, K8	Der Inhalt des Registers Rd wird mit der 8 Bit - Konstanten K8 ODER-verknüpft. Das Ergebnis wird in Rd gespeichert.
 out P, Rr	Der Inhalt von dem Register Rr wird in den I/O-Port P geladen.
 
 rjmp Label	Relativer Sprung auf Label
 Tab. 2:	Einfache Assemblerbefehle
 
 
 
 3.2	Port als Ausgang
 
 
 Befehl			Erklärung
 .include  \"2313def.inc"	;Diese Datei wird an jedem Prgrammanfang ;eingebunden, damit wird dem  Makro-Assembler ;(Übersetzungsprogramm, der den Code in  ;Maschinencode übersetzt) mitgeteilt um welchen ;Controller es sich handelt.
 
 
 ldi	r16, 0xFF	;0xFF in das Arbeitsregister 16 laden
 
 out	DDRB, r16	;Der Inhalt des Arbeitsregisters 16 wird nun in das ;Datenrichtungsregister von Port B ausgegeben. Alle ;Pins an Port sind nun als Ausgang konfiguriert.
 
 ldi	r16, 0b00111111	;0b00111111 wird in das Arbeitsregister r16 geladen
 out	PORTB, r16	;Der Inhalt des Arbeitsregisters r16 wird an das ;Portregister von Port B übergeben.
 ende:	rjmp	ende	; Es wird ein Sprung zur Marke Ende gemacht, da ;sonst der Controller immer wieder von vorn beginnen ;würde.
 
 
 3.3	Port als Eingang
 
 
 Befehl			Erklärung
 .include   \"2313def.inc"	;Diese Datei wird an jedem Prgrammanfang ;eingebunden, damit wird dem  AVR-Assembler ;(Übersetzungsprogramm in Maschinencode) ;mitgeteilt um welchen Controller es sich handelt.
 ldi	r16, 0x00	;In das Arbeitsregister 16 wird 0x00 geladen.
 out	DDRD, r16	;In das Portregister von Port D wird r16 gegeben. ;Damit ist Port D als Eingang konfiguriert.
 ldi	r16, 0xFF	;In das Arbeitsregister 16 wird 0xFF geladen
 out 	DDRB, r16	;In das Portregister von Port B wird r16 gegeben. ;Damit ist Port B als Ausgang konfiguriert.
 
 marke1 :	in	r16, PIND	; Die Zustände an den Pins von Port D ;(Signalgeber) werden in das Arbeitsregister 16 ;geladen.
 
 
 
 out	PORTB, r16	; Das Arbeitsregister 16 wird an den Port B ;gegeben, damit liegt an den Ausgangspins ;Spannung an, wenn am jeweiligen Eingangspin ;Spannung anliegt.
 
 rjmp	marke1	; Es wird wieder zur Marke 1 gesprungen, denn die ;Zustände an den Datenrichtungsregistern bleibt ;erhalten und muss nicht neu eingeschrieben ;werden.
 
 
 3.4	Programmentwicklung
 
 Zum Abschluss soll der Weg vom Assemblerprogramm bis hin zum endgültigen Betrieb des Mikrocontrollers beschrieben werden.
 Zunächst wird das Programm in einem Editor per Tastatur eingegeben. Ein Editor der das geschriebene Assemblerprogramm als reine *.txt -Datei speichert ist vollkommen ausreichend. Nach dem Speichern des Assemblerprogramms wird dieses Programm mit Hilfe eines Makroassemblers in die Maschinensprache übersetzt. Es ist darauf zu achten das in der gespeicherten *.txt-Datei der reine ASCII-Code steht, also ohne Textformatierungen, denn die Textformatierungen würden von dem Makroassembler mit übersetzt werden. Dies hat eine Fehlfunktion des Programms zur Folge.  Der Makroassembler wird nach dem Übersetzten Dateien erstellen, die *.lst-Datei ( Programmlisting ), die *.obj-Datei und die *.hex - Datei, das eigentliche Maschinenprogramm in unterschiedlichen Formaten, das später in den Flash-ROM gespeichert wird. Mit Hilfe *.obj-Datei kann man jetzt im Simulator das komplette Programm testen.  Zur Auffindung von Fehlern im Programm enthält der Simulator einen Debugger, dieser ermöglicht eine Fehlererkennung des Programms, bevor in es den Mikrocontroller gespeichert wird.  Nach der dieser Programmierung und Überprüfung des Programms muss die *.hex-Datei in den Controller übertragen werden. Die parallele oder serielle Schnittstelle des Computers und der  entsprechende Programmieradapter wird zur Übertragung der Daten verwendet. Das Programm befindet sich nun im Flash-Speicher des AVR-Mikrocontroller. Letztendlich wird nun eine Inbetriebnahme des Systems durchgeführt und das System ist betriebsbereit.
 |