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

Ähnliche Dokumente
Speicheraufbau des AT89C5131

µversion 2 Einführung

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Da der Mikrocontroller mit den internen Timern sehr genau Zeiten messen kann, entschieden wir uns für die Zeitmessung.

PIC16 Programmierung in HITECH-C

myavr Programmierung in C

Praktikum Mikrorechner 11 (Timer 1)

4 Formelsammlung C/C++

Prinzipieller Grundaufbau eines einfachen C-Programmes

i2c-bus.de IN/OUT - UART Einfache Ein- und Ausgabe über serielle Schnittstelle Interrupt-Betrieb Dokument NR.: AB-001-U-03

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

Projektdokumentation: DCF 77 Funkuhr

18. Bitmanipulationen. Bitoperationen Bitmasken

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi

Bit Operationen. InE1 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

Angewandte Mathematik und Programmierung

Die Entwicklungsumgebung. Labor Technische Informatik. Prof. Dr.-Ing. F. Kesel Dipl.-Ing. (FH) A. Reber

Serieller A/D-Wandler am 8051-Mikrocontroller

Kompilieren Datentypen Operatoren. Überblick. 1 Kompilieren. 2 Datentypen. const static volatile. 3 Operatoren. Alexander Batoulis

BMC - Mikrocomputertechnik 2017 Aufgaben & Beispiele

Mikrocomputertechnik. Thema: Der Aufbau des XC888-Mikrocontrollers -Teil 1 -

Professionelle Softwareentwicklung für Mikrocontroller Inbetriebnahme des C167CR Starter Kits I. DAvE - Digitaler Applikationsingenieur

Microcontroller Selbststudium Semesterwoche 9

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC 0C0H T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0 0C8H. AFH AEH ADH ACH ABH AAH A9H A8H Bitdresse

Praktikum DST (MRT Teil) 1. Termin

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

Lehrfach: Mikrorechentechnik Versuch: Zeitmessung

Mini- Mikroprozessor-Experimentier-System. Version 1.0b vom :21. mit einem 8051-Mikrocontroller

Zeiger in C und C++ Zeiger in Java und C/C++

Arduino für FunkAmateure

Erste Schritte der Programmierung in C

Zähler- und Zeitgeber-Baugruppen

INE1 Bit-Operationen. Bit-Operationen Übungen Bits setzen, löschen, abfragen Beispiel: Bitmap

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

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

Einführung DIP & AVR EVK1100

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Laborprotokoll Informationstechnologien

Hello World! Eine Einführung in das Programmieren Das erste Programm

Datentechnik. Prinzipieller Aufbau eines Schnittstellenbausteins

Für den CTC-Mode kann demnach TCCR1A komplett auf 0 gesetzt werden, weil WGM11 und WGM10 in diesem Register liegen und beide laut Tabelle 0 sind:

C++ mit dem Arduino (Uno und Mega2560)

GI Vektoren

I2C-002 DATASHEET I2C-002 V1.00: I2C PORTEXPANDER MIT PCA8574. Dokument NR.: I2C-002_Datasheet

SSA P_51_002_NEU. doc

KR-mega32-16 rev. 2.3 Thomas Krause, Krause Robotik

U4 Grundlagen der C-Programmierung

Aufbau eines Assembler-Programms

- 1 - FA 205. Technische Richtlinien für Unterricht und Prüfung. Festlegung wichtiger Begriffe Stand 04. März 2016

8051Speicherorganistaion. SFR u. oberer Datenspeicherbereich teilen sich den SPECIAL FUNCTION REGISTER. gleichen Adreßbereich. indirekt adressierbar

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

MODUL 6 TIMER UND COUNTER

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

Weiterführende Entwicklungen

6ES AG10-0AB0 A5E

7. Übung Informatik II - Objektorientierte Programmierung

Mikroprozessor-Experimentier-System

Lösung 8051er. Bussysteme IIC - Bus. Klasse:... Datum:...

Java I Vorlesung Imperatives Programmieren

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

Lotto. eine Projektarbeit in DVT. von Sven Schwab

Programmierübungen in Assembler

Vorwort Lichteffekte mit Arduino_NEU.indd :00:47

i2c-bus.de ASCII ZEICHEN AUF DEM HYPERTERMINAL Übungsaufgabe RS232 Schnittstelle Dokument NR.: AB-001-U-01

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

Unter Project New µvision Project kann ein neues Projekt angelegt werden.

Code Composer Studio 4.x

U2-1 Register beim AVR- C. U2-2 I/O-Ports des AVR- C. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Bootloader FastBoot von Peter Dannegger

Kurze Einführung in die Programmiersprache C++ und in Root

Hardwareaufbau der Mikrocontroller der 51er -Familie

Hardwareaufbau der Mikrocontroller der 51er -Familie

Grundlagen der Objektorientierung :

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Zeiger in C und C++ Zeiger in Java und C/C++

Datentypen in C. Informatik Universität Hamburg Proseminar: C-Grundlagen und Konzepte Jan Branitzki

Programmieren des ESP8266 mit OLED

2

Kap 9. Bitoperationen und -strukturen


Arduino Digispark. Ausgabe Copyright by Joy-IT 1

Programmiersprachen Einführung in C

C++ mit dem Arduino (Uno und Mega2560)

Sprungbefehle und Kontroll-Strukturen

C-Programmierkurs Mathematik

Eingaben. Themen heute. Taster. Eingaben Zuweisungen Zeitmessung. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

Einführung in C. EDV1-04C-Einführung 1

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

CCS Compiler Tutorial mit Beispielen

Programmierkurs C++ Variablen und Datentypen

Workshop: ASURO-Programmieren in C

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

U3-1 Register beim AVR-μC. U3 3. Übung. U3-2 I/O-Ports des AVR-μC. 1 Überblick. 2 Makros für Register-Zugriffe. 1 Überblick

Wiederholung: Zugriff auf AVR-Prozessor-Register. Aufgabe 3: 7seg-Modul der SPiCboard-Bibliothek

Transkript:

C-Programmierung von MiCoWi mit der Keil-Entwicklungsumgebung µvision4 1. Erstellung eines neuen Projektes Menüpunkt: Project New µvision Project Es wird ein komplett neues Projekt in einem beliebigen Verzeichnis erzeugt. Zunächst wird dieverwendete CPU spezifiziert. Micowi arbeitet mit dem Prozessor AT89S8253 von Atmel. Bitte bestätigen Sie die Frage, ob der 8051- Startup-Code hinzugefügt werden soll mit Ja. Das Projekt enthält jetzt im Ordner Source Group 1 die Datei STARTUP.A51, aber noch keine C-Datei. Es müssen noch einige Einstellungen (Options Target) vorgenommen werden: Reiter Device: Xtal (MHz): 12 Memory Model: Small Code Rom Size: Compact Reiter Output: Create HEX File aktivieren Einfügen einer Datei mit Quellcode: Eine C-Datei mit dem Quellcode muss explizit zum Projekt hinzugefügt werden. Nur das Öffnen der Datei reicht nicht aus. Klicken Sie dazu mit rechts auf den Ordner Source Group 1 und wählen Sie Add files to group. Die Datei sollte sich auch im Projektordner befinden. Dateien, die nicht in das Projekt eingebunden sind, werden ohne Syntax highlight dargestellt. MiCoWi und µvision Seite 1 Uwe Wittenfeld 2011-03

2. Grundstruktur des Quellcodes Es gibt bereits eine Datei, in der alle Register des Mikrocontrollers deklariert sind. Dieses Includefile sollte am Anfang des Quelltextes eingefügt werden: #include "reg52.h" Das Hauptprogramm muss immer eine ewige Schleife enthalten, denn es gibt kein Betriebssystem und der Prozessor muss immer ein definiertes Programm abarbeiten. void main (void) { init(); // Grundinitialisierung für Timer, IRQ, etc. while(1) { } } //main 3. Erweiterungen der C-Syntax für Mikrocontroller Compiler für Mikrocontroller haben spezielle Ergänzungen der normalen ANSI-C-Konventionen. Diese Erweiterungen sind Compilerspezifisch, d.h. die Syntax muss gegebenenfalls bei der Verwendung eines anderen Prozessors angepasst werden. Einzelbits des Mikrocontrollers: Um auf Bits des Mikrocontrollers zugreifen zu können, die einzeln adressierbar sind, kann der Datentyp sbit verwendet werden. sbit testbit = P0^7; // Bit 7 von Port 0 Interrupts: Die Deklaration einer Interruptfunktion hat folgende Syntax: void irq_test(void) interrupt 1 { } Die Nummer hinter dem Wort Interrupt kennzeichnet den verwendeten Interrupt: MiCoWi und µvision Seite 2 Uwe Wittenfeld 2011-03

4. Logische Einzelbitmanipulationen Bei der Programmierung von Mikrocontrollern spielt die bitweise Manipulation eine große Rolle.: Operator Funktion Beispiel & Und x = x & 0xF0 //Unterstes Nibble von x auf 0 Oder x = x 0x80 //Oberstes Bit von x setzen ^ Exclusiv Oder Bit ist 1, wenn genau eins der zugehörigen Bits 1 ist ~ Nicht Alle Bits invertieren << Shift left x = x << 2 //x um 2 Bit nach links schieben (*4) >> Shift right x = x >> 2 //x um ein Bit nach rechts schieben (/2) 5. Datentyp der einem Byte entspricht Es gibt in C keinen Datentyp Byte (8 Bit ohne Vorzeichen). Beim Keil-Compiler dient hierzu der Datenty unsigned char. 6. Interruptfreigabe Um einen Interrupt freizugeben muss im Register IE das dem entsprechenden Interrupt zugeordnete Byte und der Bit EA gesetzt werden. ET0 = 1; // Irq von Timer 0 EA = 1; // Generelle Interruptfeigabe Nach einem RESET sind zunächst alle Interrupts abgeschaltet. MiCoWi und µvision Seite 3 Uwe Wittenfeld 2011-03

7. Timer Alle Prozessoren der 8051/8052-Serie verfügen über mindestens zwei Timer. Die Timer sind prinzipiell identisch, d.h. es ist dem Programmierer überlassen, ob er eine Aufgabe mit Timer 0 oder mit Timer 1 löst. Es soll hier vorläufig mit folgenden Einschränkungen gearbeitet werden: Es wird entweder der 16-Bit-Modus ohne Autoreload oder der 8-Bit- Modus mit Autoreload verwendet. Es wird nur mit einem intern erzeugten Takt. Das An- und Ausschalten der Zähler wird nur durch das Programm und nicht durch eine externe Hardware durchgeführt. Folgende Eigenschaften des Zählers sind zu berücksichtigen: Der Zähler zählt vorwärts. Ein Überlauf des Zählers löst einen Interrupt aus. Der Zähltakt entspricht dem Prozessortakt, also 1/12 der Quarzfrequenz (Hier: 1 MHz). Im 16-Bit-Modus muss der Wert nach jedem Überlauf neu nachgeladen werden. Für eine genaue Beschreibung der Timer sei auf die Hardwarebeschreibung hingewiesen. Beispiel 1: 10ms-Timer Gewählt: Timer 0 im 16-Bit-Modus) tm = TMOD; //Timermodusregister einlesen tm = tm & 0xF0; //Zustand Timer 1 ausmaskieren TMOD= tm 1; //Timer 0: 16 Bit (Modus 1), Timer 1 unverändert TH0 = 0xD8 ; //High-Byte des Zählers TL0 = 0xEF; //Low-Byte des Zählers ET0 = 1; //Interrupt für Timer 0 freigeben EA = 1; //Generelle Interruptfreigabe; TR0 = 1; //Timer 0 starten Timerwert für 10ms (10000µs): 65535-10000=55535 = 0xD8EF Der Timer muss im Interrupt nachgeladen werden, damit er nicht mit einer Zykluszeit von 65,535 ms weiterläuft. MiCoWi und µvision Seite 4 Uwe Wittenfeld 2011-03

8. Beispielprogramm: Lauflichtprogramm //============================================================== // Lauflicht mit Timer und Interrupt // An LEDPORT wird ein Lauflicht ausgegebeb // Timer 0 erzeugt einen 10ms-Interrupt (12 MHz) // Uwe Wittenfeld 2008-01 //============================================================== #include "reg52.h" #define LEDPORT P0 // P0 als Ausgabeport #define STARTWERT 0x7 // Startwert des Lauflichts #define IRQANZ 10 // Alle 10 Interrupts wird Lauflicht geändert #define THBYTE 0xD8; // 10 ms bie 12 MHz --> 65535-10000=55535=D8EFh #define TLBYTE 0xEF; unsigned int wert; unsigned int irqcnt; //Aktueller Wert des Lauflichts //Interuptzähler // Init ========================================================= void init (void) { unsigned char tm; //Zwischenwert TMOD-Register wert = STARTWERT; //Startwert für Schieberegister irqcnt = 0; //Interruptzähler auf 0 tm = TMOD; //Timermodusregister einlesen tm = tm & 0xF0; //Zustand Timer 1 ausmaskieren TMOD= tm 1; //Timer 0: 16 Bit (Modus 1), Timer 1 unverändert TH0 = THBYTE; //High-Byte des Zählers TL0 = TLBYTE; //Low-Byte des Zählers ET0 = 1; //Interrupt für Timer 0 freigeben EA = 1; //Generelle Interruptfreigabe; TR0 = 1; //Timer 0 starten } //init // Bearbeitung des Lauflichts =================================== void tuwas (void) { unsigned char carry; //Übertrag LEDPORT = wert; //Ausgabe carry = wert&0x80; //Oberstes Bit merken wert = wert<<1; //Wert nach links schieben if (carry>0) //Bit herausgeschoben? {wert = wert 1;}; //Unten wieder einfügen } //tuwas // Timer-0 Interrupt ============================================ void timer0 (void) interrupt 1 { TR0 = 0; //Timer 0 abstellen TH0 = THBYTE; //High-Byte des Zählers TL0 = TLBYTE; //Low-Byte des Zählers TR0 = 1; //Timer 0 starten irqcnt++; //Zähler erhöhen if (irqcnt >= IRQANZ) { tuwas(); //Lauflicht bearbeiten irqcnt=0; //Zähler wieder auf 0 } // if irqcnt } //timer 0 // Hauptprogramm ================================================ void main (void) { init(); //Timer- und Interruptinitialisierung while(1) //Unendliche Schleife {} } //main MiCoWi und µvision Seite 5 Uwe Wittenfeld 2011-03