kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

2.1 Erweiterung des bekannten Assembler-Befehlssatzes

  • Zum Testen der folgenden Taktungs-Konfigurationen des ATmega32, werden wiederholt kleine Assembler-Programme eingesetzt, weil hier die Anzahl der verbrauchten Taktzyklen genau angegeben werden kann.
  • Zuvor soll hier deshalb das erste Beispiel aus Kapitel 1.3 noch einmal betrachtet und weiter gehend kommentiert werden.
  • Die Codezeilen vor Zeile 009 sind für die im Rahmen dieser Vorlesung behandelten Assemblerprogramme notwendige Kopfzeilen, die immer wieder genau so verwendet werden und zum Verständnis des eigentlichen Programms nicht mit betrachtet werden müssen.

Zeile
000                .INCLUDE    "m32def.inc"    ; Einfügung für ATmega32
001                .DEF        akku = r16      ; akku synonym für Register r16 nehmen
002                .CSEG                       ; Programmbereich Flash festlegen
003                RJMP        start           ; Reset-Einsprung
004                .ORG        $2A             ; Befehlsbereich
005    start:      LDI         r16,high(RAMEND) ;High byte only required if 
006                OUT         SPH,r16	         ;RAM is bigger than 256 Bytes
007                LDI         r16,low(RAMEND)	 
008                OUT         SPL,r16
009                LDI         akku,255        ; alle 8 Bit von Port D als        
010                OUT         DDRC,akku       ; Ausgang konfigurieren
011                LDI         akku,64         ; 64 direkt nach r16 laden        
012    schleife:   OUT         PORTC,akku      ; geladene Zahl zum Port D schicken
013                RJMP        schleife        ; ständiger Rücksprung zu Marke "schleife"
014                .EXIT                       ; Ende des Quelltextes 

Code 2.1-1: Assemblerprogramm aus Kapitel 1.3

  • Bereits in Kapitel 1.3 besprochen: Zeile 9,10: alle Bits von Port D als Ausgang konfigurieren. Zeile 11 bis 14 - ständig die 64 nach Port D schreiben (7. Bit, d.h. PD6 high setzen).
  • Zeile 000: Include-Datei mit den für den verwendeten Baustein notwendigen Deklarationen einfügen.
  • Zeile 001: akku als Synonym für Register r16 festlegen (ähnlich #define in C)
  • Zeile 002: .CSEG ist eine Anweisung, die bestimmte notwendige Befehle und Konstanten ab der Adresse $0000 des Flash-Speichers ablegt.
  • Zeile 003: Einsprungmarke nach einem Reset.
  • Zeile 004: Gibt Adresse an ($2A), ab der das folgende Programm im Flash-Speicher liegen soll.
  • Zeile 005-008: Schreibt die Adresse des RAM-Speicher-Endes in die Register SPH (höherwertiges Byte) und SPL (niederwertiges Byte)