Aufbau eines Assembler-Programms

Ähnliche Dokumente
Befehlssatz AVR RISC Controller

Parallel-IO. Ports am ATmega128

Das Attiny-Projekt Der Bootloader 1

Lotto. eine Projektarbeit in DVT. von Sven Schwab

Einführung in AVR Assembler

U5-2 Register beim AVR-µC

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

U Abend 3: Musterlösungen, Taster entprellen, Unterprozeduren, Interrupts, Timer

Mikrocontroller - Schnelleinstieg

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

AVR Ein/Ausgabe. Inhaltsverzeichnis

Programmieren in C Teil 3: Mikrocontrollerprogrammierung

Wer möchte, kann sein Programm auch auf echter Hardware testen

Projektarbeit aus der Datenverarbeitung. Lotto. von: Hubert Schlenk Olimex AVR USB 162 Entwicklerboard Hubert Schlenk

Atmel AVR für Dummies

8.3 Taster am µcontroller

Praktikum Automatisierungstechnik AP1

Einführung in AVR-Assembler

Prozessoren für mobile und. eingebettete Systeme II: Die AVR-Architektur. EMES: Eigenschaften mobiler und eingebetteter Systeme

Ein erstes Assembler-Projekt

Use of the LPM (Load Program Memory)

Technische Informatik 2: Addressierung und Befehle

IR NEC Empfänger mit 4x7 LED Anzeige (ATtiny2313)

Tag 2 Eingabe und Interrupts

Aufgaben zur Attiny-Platine

Arduino für FunkAmateure

Projektarbeit: Roulette Spiel

f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

C++ mit dem Arduino (Uno und Mega2560)

UKW-Schatzkisterl Schöpfer: Alexander "Electronicfox" Fuchs

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

Prozessoren für mobile und. eingebettete Systeme II: Die AVR-Architektur. EMES: Eigenschaften mobiler und eingebetteter Systeme

Addieren und Subtrahieren mit Mikrocontroller Atmega AT90162USB

Autonome Mobile Systeme. Dr. Stefan Enderle

Embedded Systems

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Einführung in die Programmierung von Mikrocontrollern mit C/C++

PIC16 Programmierung in HITECH-C

C.1 Serielle Schnittstelle, erstes Testprogramm (a)

Multitasking / virtuelle Maschinen mittels Atmel AVR- Mikrocontrollern (Simple & Stupid)

Mikrocontroller. eine Einführung. Florian Schmitt / 34

Lösungen zum Kurs "Mikrocontroller Hard- und Software

Übungen zu Systemnahe Programmierung in C (SPiC)

Produktinformationen. Basis Set Atmel Atmega8 & ISP Programmer. Lieferumfang :

Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8

Grundlagen der Objektorientierung :

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: Beginn: 10.

Serielle Schnittstelle, erstes Testprogramm (a)

Starten Sie die Arduino IDE und geben Sie den folgenden Programmcode ein:

'

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

AVR-Mikrocontroller mit dem GCC programmieren

Installation & Verwendung. Version 1.0. WinAVR

Zuse-Computer: Z1. erster Rechner mit binären Zahlen. Entwicklung der computergerechten. (Grundlage für IEEE-754) funktionierte leider nie zuverlässig

AVR-Mikrocontrollertechnik

Makros sind Textersetzungen, welche vom Präprozessor aufgelöst werden. Dies Passiert bevor der Compiler die Datein verarbeitet.

Mikrocomputertechnik

Übungen zu Systemnahe Programmierung in C (SPiC)

Mikrocontroller. Programmierung in C. Jan Unger

U5 Fortgeschrittene AVR-Programmierung U5 Fortgeschrittene AVR-Programmierung. Synchronisation mit Unterbrechungsbehandlungen

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern

Teil III: Wat macht ene Mikrokontroller?

Bau einer Alarmanlage PSS

B1 Stapelspeicher (stack)

C++ mit dem Arduino (Uno und Mega2560)

AVR-8-bit-Mikrocontroller Gruppe Technologie der AVR-8-bit-Mikrocontroller Teil SPI

1 Assembler. 2 LED-Steuerung

V cc. 1 k. 7 mal 150 Ohm

Rechnerarchitektur, Einführung in die Laborübungen

i2c-bus.de I2C-001 KURZBESCHREIBUNG I 2 C Modul mit PCF Bit I/O Port-Expander Dokument NR.: I2C-001-D-01

Microcomputertechnik

Projektarbeit in DVT auf dem Entwicklerboard

Ansteuerung eines LCD-Screens

Rechnerarchitektur, Einführung in die Laborübungen

C4 Die SPI Schnittstelle

The amforth Cookbook angefangen

AVR-Mikrocontroller in BASCOM programmieren, Teil 3

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Dateien, die nicht in das Projekt eingebunden sind, werden ohne Syntax highlight dargestellt. MiCoWi und µvision Seite 1 Uwe Wittenfeld

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

LabView mit der myavr Produktfamilie. Andreas Düring

a) Welche Aussage zu Zeigern ist richtig? Die Übergabesemantik für Zeiger als Funktionsparameter ist callby-value.

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen

b) Was bewirken folgende Programmanweisungen? uint8_t x = 42; x ^= x;

Mikrocontrollertechnik

Dies und das zu atmega und amforth

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

Programmierübungen in Assembler

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Temperaturmodul. Software. Bedeutung der Leuchtdioden. Kanal-LEDs. System-LEDs. Start nach Reset

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil VI: Programmieren an weiteren Beispielen

Serie 8: Microcontroller 17./

Speicheraufbau des AT89C5131

Installation & Verwendung. Version 1.0. WinAVR & AVR Studio 4

Einführung in die Welt der Microcontroller

Microcontroller VU Exam 1 (Programming)

Transkript:

Aufbau eines Assembler-Programms. Assembler-Anweisungen (Direktiven) Einbindung von include-files Definition von Konstanten, Reservierung von Speicherplatz im RAM, 2. Was tun, wenn C Reset-Signal erhält Einschalten der Spannung, Reset-Knopf drücken,... 3. Was tun, wenn Interrupt eingetroffen IO-Bausteine melden sich, z.b. kommt ein Zeichen an der seriellen Schnittstelle an 4. Anwendungsprogramm-Code Initialisierung Stack, IO-Bausteine Programmierung der Anwendungslogik 5. Was tun, wenn Programm-Code abgearbeitet nichts tun wieder von vorn beginnen Verwendung von Bit-Masken Bits setzen Bits toggeln Bits prüfen

Bits in Registern setzen Bit 3 im Register PORTB setzen - einfach ldi r6, x8 out PORTB, r6 - besser lesbar ldi r6, ( << PORTB3) out PORTB, r6 ; b Konstanten mit gleichen Namen sind im include-file des jeweiligen Prozessors definiert (hier m28def.inc) Datenblatt, Register Summary, S. 363 Bits toggeln Bit 3 in r6 umschalten (alle anderen Bits von r6 ändern sich nicht) -> Exklusiv Oder mit Bitmaske ldi r6, x48 r6 ldi r7, ( << 3); x8 eor r6, r7 eor r6, r7 r7 Bit-Maske eor r6, r7 r6 r7 eor r6, r7 r6 r7 enthält die Bit-Maske, die vorgibt, welche(s) Bit(s) umgeschaltet werden sollen Verwendung von ( << 3) statt x8 für Erhöhung der Lesbarkeit 2

Bits prüfen prüfen, ob Bit 3 in Register r6 gesetzt ist ldi r6, x48 andi r6, (<<3) brne gesetzt nichtgesetzt: ; tu was bei nicht ; gesetztem Bit rjmp weiter gesetzt: ; tu was bei gesetztem ; Bit weiter: Bit 3 ist gesetzt r6 Bit-Maske andi r6, (<<3) r6 r6 ist nicht Bit 3 ist NICHT gesetzt r6 Bit-Maske andi r6, (<<3) r6 r6 ist Programmierung der Parallel-IO- Ports Anzeige auf LEDs Tasteneingabe Beispiel 3

Grundsätzlicher Ablauf Ausgabe Port initialisieren in C #include <avr\io.h> DDRB=xff; in Assembler.include m28def.inc ldi r6, xff out DDRB, r6 IO-Daten-Register initialisieren PORTB=xff; out PORTB, r6 Daten berechnen und ausgeben //LED3 leuchtet char led=<<pinb3; PORTB= ~led; ;LED3 leuchtet ldi r6, (<<PINB3) com r6 out PORTB, r6 IO-Adressen und IO-Befehle RAM-Adresse: x RAM-Offset der x2 IO-Adressen x6 Befehl: sts, lds Register I/O ext. I/O RAM IO-Adresse x IO-Adresse x3f Befehl: out, in RAM-Adresse IO-Adresse Datenblatt: Register Summary RAMEND IO-Adressen sind in m28def.inc mit Namen versehen worden (bessere Lesbarkeit), Ausschnitt:.equ PORTC = $5 ;x5.equ DDRC = $4.equ PINC = $3.equ PORTD = $2.equ DDRD = $.equ PIND = $ RAMAdresse=IOAdresse+x2 4

IO-Befehle in/out und lds/sts bei Verwendung von in/out kann die in m28def.inc definierte IO- Adresse direkt verwendet werden, z.b. ldi r7, (<<PINB3) ;LED3 einschalten com r7 out PORTB, r7 bei Verwendung von sts / lds muss der RAM-Offset zur IO- Adresse hinzuaddiert werden, z.b..equ IO_RAMOFFSET= x2.equ MEM_PORTC=PORTC+IO_RAMOFFSET ldi r7, (<<PINB3) com r7 sts MEM_PORTC, r7 lds/sts können im gesamten Bereich des RAM verwendet werden, in/out funktionieren nur im Bereich der IO-Adressen 5

Bits in Registern setzen Bit 3 im Register PORTB setzen - einfach ldi r6, ~x8 out PORTB, r6 - besser lesbar ldi r6, ~( << PORTB3) out PORTB, r6 ; b Konstanten mit gleichen Namen sind im include-file des jeweiligen Prozessors definiert (hier m28def.inc) Datenblatt, Register Summary, S. 363 Berechnung der Wartezeit Summieren der Anzahl der Takte N clk, die die CPU für die Abarbeitung der Befehle der Warteschleife benötigt Multiplizieren mit der aktuell eingestellten Takt-Periodendauer der CPU für f CPU = MHz CPU-Takt t f CPU allebefehle N clk t s 6 2 65535 4,262s 262ms Einfachste, aber unpraktischste Methode! Neue Berechnung erforderlich, wenn Programm der Warteschleife geändert wird. Programmänderungen erforderlich, wenn anderer CPU-Takt eingestellt wird oder andere Wartezeit erforderlich ist. Relativ großer Aufwand für Zeitbestimmung erforderlich. 6

Warten r26 N= führt N*M Warteschleifen aus r25:24 M= outer_loop äußere Warteschleife inner_loop innere Warteschleife M-- [M==] [sonst] N-- [sonst] [N==] Warten (innere Schleife) in C #define M x3e8 in Assembler.equ M=x3e8 ;d // Zählvariable (6 Bit) unsigned int nwait=m; ;Zählvariable (6 Bit) ldi r25, HIGH(M) ldi r24, LOW(M) do{ nwait--; } while(nwait!= ); wait: sbiw r24, brne wait Tue nichts bis der Wert der Zählvariable ist! 7