"Die Eingabe des ersten C-Programms"

Ähnliche Dokumente
1.3 Handhabung eines Programmiersystems

Peter Prinz. Das Übungsbuch. CTestfragen und Aufgaben mit Lösungen

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

µversion 2 Einführung

Rückgabewerte von Methoden

Kapitel 2. Einfache Beispielprogramme

41.2 LUA Grundlagen - Funktionen

C-Programme kompilieren mit Visual Studio Express

Funktionen in JavaScript

2. Einführungsbeispiel eines Programms in C

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

Grundlagen der Programmentwicklung

Funktionen in JavaScript

Programmieren/Algorithmen und Datenstrukturen 1

GI Grundlagen der Informatik (GI)

01 Einführung in PHP. Einführung in PHP 1/13 PHP in Aktion

1. Keil starten. Sollten Sie keinen leeren Bildschirm haben, löschen Sie einfach die

Proseminar. C-Programmierung Grundlagen und Konzepte. Der Präprozessor. von: Svenja Neef

Ein erstes "Hello world!" Programm

2. Programmierung in C

Aufgabe 1. Universität Duisburg-Essen Fachbereich Mathematik Dr. O. Rheinbach

2. Programmierung in C

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

VORBEMERKUNGEN ZUM INFORMATIK-KURS : PROGRAMMIEREN MIT C++

GI Vektoren

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Objektorientiertes Programmieren (Java)

Zeichenketten sind uns bisher nur als konstante Texte begegnet, welche in "" angegeben waren; z.b. als Formatstring in der printf()-funktion:

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C - Das Übungsbuch. Testfragen und Aufgaben mit Lösungen. von Peter Prinz. 1. Auflage

Kapitel 1: Die ersten Schritte 1

Schleifen: Immer wieder dasselbe tun

BASIC-Tiger Starter Kit. Tel: +49 (241) Fax: +49 (241)

Dies ist der zweite Artikel einer Serie über Electron.

Access Programmierung. Ricardo Hernández García. 1. Ausgabe, November 2013 ACC2013P

Informatik für Elektrotechnik und Informationstechnik

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl

Grundlagen. Kapitel 1

2. Programmierung in C

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Einführung in Automation Studio

Mikrocontrollertechnik. F5 Erstes Programm. AVR Studio 4

Grundlagen der Informatik Vorlesungsskript

3. Methodik der Programmerstellung

Aufgabe 16. Aufgabe 17

Java-Applikationen (Java-Programme)

Übersicht Shell-Scripten

1. Installation und deutsche Sprach-Einstellung

Übungspaket 17 Der gcc Compiler

Einführung in die Programmierung 1

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

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

Python 3.6. Erste Schritte auf dem Mac. Syshack. 22. Juni 2017 Version 2.0. Python Erste Schritte auf dem Mac Syshack, 22.

Lexikalische Struktur von Fortran 95. Normierte Zeichensätze

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

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Einführung in die Programmierung des VEX IQ mit ROBOTC. Kurzanleitung

Mussten wir eine ganze Reihe solcher Zahlen speichern, haben wir das eindimensionale Array verwendet.

C++ Das Übungsbuch. Testfragen und Aufgaben mit Lösungen. von Ulla Kirch, Peter Prinz. überarbeitet

Übungspaket 3 Mein erstes Programm: Fläche eines Rechtecks

Projekt 3 Variablen und Operatoren

Kurze Bedienungsanleitung für den Java-Editor

Programmierung mit C Modularisierung von Programmen. Präprozessor-Anweisungen nutzen.

Schritt 1: Übertragung der Daten aus der LUSD in WORD

In diesem Kapitel lernen Sie den Umgang mit Visual C++ kennen, legen Ihr erstes Projekt an und schreiben ein kurzes Programm.

C# - Einführung in die Programmiersprache Fehler abfangen. Leibniz Universität IT Services Anja Aue

Ein-Ausgabefunktionen in C (letzter Abschnitt Vorlesungsstoff ab C.110)

Grundlagen der Programmierung

2017/01/23 15:50 1/5 Bedienung

1 Grundlagen der Objektorientierung

Von der Programmiersprache WHILE zum ersten Einstieg in Java

Die Programmiersprache C

Umsetzung einer Klassenkarte in einer Programmiersprache

Erstellen von Makros / Textbausteine

Pascal-Compiler für den Attiny

IMS-Audit Pro. Kurzanleitung 2 / 14

C - PRÄPROZESSOR. Seminar effiziente C Programmierung WS 2012/13. Von Christian Peter

Ionic 2-Teil bereits mit der IDE Visual Studio Code

Einführung in die C-Programmierung

2. Programmierung in C

3. Die Programmiersprache Java

Spezifikation für "AppLaunch"

Grundlagen der Informatik

Michael Dienert. 8. Dezember 2016

5 Grundlagen der Java-Syntax

Prüfung C++ Altstudiengang Wiederholer SS 2001 (Prof. Sauer)

Elementare Datentypen in C++

Lorenz Hölscher. Richtig einsteigen: Access 2013 VBA-Programmierung Von den Grundlagen bis zur professionellen Entwicklung

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Schleifenanweisungen

Nachdem die VM gestartet ist und sich darin angemeldet wurde, starten wir Eclipse.

Einführung zum MS Visual Studio

Übungen zur Vorlesung Wissenschaftliches Rechnen I

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Installation und Anpassung des Texteditors PFE

C-Programme erstellen und ausführen

Transkript:

11. Der 8051er- C -Kursus - 1-11.1.1 Lektion 1: Die ersten Grundlagen der Programmerstellung in C LERNZIELE: In dieser Start-Lektion erhalten Sie den "ersten Kontakt" mit der Arbeitsumgebung µvision2, d.h. Sie erfahren, wie Sie ganz allgemein ein C-Programm in µvision2 erstellen und es übersetzen lassen. Dazu geben Sie bereits ihr erstes eigenes C-Programm ein. - Neu eingeführte C-Befehle, Funktionen und Datentypen: - void, main, printf, /* Kommentare */, // Kommentare - Allgemeines über Funktionen in C. - Behandelte interne ON-Chip-Peripherie-Einheiten: keine - Behandelte externe Peripherie-Einheiten: keine - Verschiedenes: - Erste Einführung in das Arbeiten mit der µvision2-entwicklungsoberfläche Die grundsätzliche Programmierung eines 8051er-System in C geschieht nun, vereinfacht gesehen, in den folgenden fünf Schritten: 1) Die Eingabe und das Speichern des C-Programmtextes. 2) Die Hinzufügung des Programms zu Ihrem jeweiligen Projekt. 3) Die Übersetzung des C-Programms und das automatische Zusammenlinken mit anderen Programmteilen. 4) Die Übertragung des übersetzten Programms (des INTEL-HEX-Files zu Ihrem Projekt) auf das jeweilige 8051er-System mit Hilfe des entsprechenden Down- Load-Programms. 5) Der Start und das Austesten des Programms auf dem 8051er-System. MERKE: DIE BEARBEITUNG VON PROJEKTEN Im weiteren Verlauf des Buches werden wir im wesentlichen mit dem Projekt "TFH" arbeiten, da der 80C537er die "größte Menge an 8051er-Wissen" bietet. Dort wo wir näher auf die Besonderheiten des ADuC812ers bzw. des T89C51CC01ers eingehen, werden wir dann auch die Projekte "ISAC" bzw. "CAN" verwenden. "Die Eingabe des ersten C-Programms" Schritt 1: Die Eingabe und das Speichern des C-Programmtextes

11. Der 8051er- C -Kursus - 2 - Um ein Programm in C zu erstellen (den sog. #(Quell-Text)# oder das #(Source-File)#), starten Sie aus unserem 8051er-Projektordner die µvision2-entwicklungsumgebung, Abb.11.1.1.1: Eingabebereich für das C-Programm Abb.11.1.1.1: Die µvision2-entwicklungsumgebung Die Bildschirmdarstellung sollte genau so aussehen, wie Sie sie im Kapitel 9.2 verlassen haben. Sie öffnen jetzt das Pull-Down-Menü File und klicken auf den Punkt New. Im Haupteingabe-Fenster erscheint ein neues Fenster mit dem Namen Text1 (oben in der linken Ecke). Sinnvollerweise vergrößern Sie dieses Fenster durch Klicken auf das entsprechende Fenster-Steuersymbol. Nun soll Ihr erstes C-Programm eingegeben werden. Tippen Sie dazu den folgenden Programm-Text ein (was Sie jetzt eingeben, wird Ihnen natürlich nachfolgend sofort erklärt): #include <stdio.h> void main (void)

11. Der 8051er- C -Kursus - 3 - { } /* Ausgabe eines Textes */ printf ("Hallo"); // Ausgabetext: Hallo Diesen Text speichern Sie ab unter dem File-Namen test-1.c im Verzeichnis Das 8051er- Buch-Projekt (Pull-Down-Menü File, Menü-Punkt Save As... ), Abb.11.1.1.2: Hinweis: Alle Beispielprogramme aus diesem Buch befinden sich natürlich auch auf der beiliegenden CD im Verzeichnis Programme zum Buch. (1): Verzeichnis wählen (2): Namen festlegen (3): Abspeichern Abb.11.1.1.2: Das Abspeichern des ersten Files 2) Die Hinzufügung des Programms zu Ihrem Projekt Nun müssen Sie dieses Programm in Ihr Projekt einfügen: Im linken Teilfenster der µvision2-arbeitsoberfläche klicken Sie mit der rechten Maustaste auf das Unterverzeichnis Meine C-Files und im dann erscheinenden Pull- Down-Menü wählen Sie den Punkt Add Files to Group Meine C-Files. Sie wählen nun aus dem Verzeichnis Das 8051er-Buch-Projekt das File test-1 aus und fügen es hinzu (Add und dann Close an-

11. Der 8051er- C -Kursus - 4 - klicken). Im linken Teilfenster sehen Sie nun dieses File im Unterverzeichnis Meine C-Files hinzugefügt. Ergebnis: Sie haben nun ein Projekt namens TFH erzeugt, das aus dem einzigen File test- 1.c besteht (Sie erinnern sich: der Name des Projektes wurde so in Kapitel 9.2 festgelegt). 3) Die Übersetzung des C-Programms und das Zusammenlinken mit anderen Programmteilen. Jetzt können Sie Ihr Programm das erste Mal übersetzen. Dieses geschieht mit der Anweisung Rebuild target, Abb.11.1.1.3: Die Tool-Bar-Leiste Liste der bereits vorhandenen, angelegten Projekte Zwei Möglichkeiten zur Aktivierung von Rebuild target Abb.11.1.1.3: Die Übersetzung des Programms mit Rebuild Target Zur Aktivierung dieser Anweisung haben Sie nun zwei Möglichkeiten: 1) Auswahl des Punktes Rebuild target im Pull-Down-Menü Project oder 2) Klicken auf das entsprechende Icon in der Tool-Bar-Leiste.

11. Der 8051er- C -Kursus - 5 - Ihr Programm test-1.c wird nun übersetzt und im unteren Teilfenster des µvision2- Bildschirms können Sie den Übersetzungsablauf beobachten und das Ergebnis feststellen, Abb.11.1.1.4: (1): Zusammenbau des Ziel-Systems (2): Übersetzung des Programms: test-1.c (3): Zusammenlinken mit anderen Bibliotheks- Programmen (4): Erzeugung des INTEL-HEX-Files: TFH.hex (5): Es sind KEINE FEHLER aufgetreten! Abb.11.1.1.4.: Der Übersetzungsablauf und das Ergebnis Es wurde also Ihr Zielsystem TFH zusammengebaut (d.h. die entsprechenden µvision2- Einstellungen und Optionen wurden beachtet), das Programm test-1.c wurde compiliert und abschließend wurde ein INTEL-HEX-File mit dem Namen TFH.hex erzeugt, das jetzt in das 80C537er-TFH-System geladen werden kann. Und das Wichtigste: bei der Erzeugung von TFH.hex sind keine Fehler und keine Warnungen aufgetreten (Wir gehen einmal davon aus, daß Sie bei der Eingabe dieses 6-Zeilers keine Fehler gemacht haben). Sie könnten nun die letzten beiden Schritte: 4) Die Übertragung des übersetzten Programmes auf das 80C537er-TFH-System, 5) Der Start und das Austesten des Programmes auf dem 80C537er-TFH-System, durchführen und hätten Ihr erstes C-Projekt erfolgreich abgeschlossen. Aber bevor Sie das tun, müssen wir Ihnen natürlich erst einmal erklären, was Sie eigentlich programmiert haben (obwohl Sie das wahrscheinlich schon erahnen). Schauen wir uns dazu jede einzelne Zeile des Programms einmal näher an: #include <stdio.h>

11. Der 8051er- C -Kursus - 6 - Diese Zeile ist eine Anweisung an den C-Compiler und bewirkt, daß dieser eine weitere C- Programm-Datei einbindet, nämlich die Datei stdio.h, eine sogenannte "Header-Datei" oder Definitions-Datei. Über deren wichtige Aufgabe werden Sie noch einiges erfahren, hier nur soviel: stdio.h ( Header-Datei für Standard-I/O-Funktionen) sorgt dafür, daß die Ein-/Ausgabe-Funktionen in Ihrem C-Programm auch korrekt ausgeführt werden. (Die Experten mögen uns die kleine Ungenauigkeit verzeihen: natürlich ist die #include- Anweisung eine Präprozessor-Anweisung, aber dazu kommen wir noch). void main (void) Jedes C-Programm beginnt mit einem Anfangs- bzw. Startwort und dieses ist immer main ( Hauptfunktion). Wie Sie später noch sehen werden, ist dieses main eine C-Funktion und kein C-Befehl bzw. keine C-Anweisung. Diese Funktionseigenschaft von main hat jedoch eine wichtige Konsequenz zur Folge, denn Funktionen in C haben immer keinen, einen oder mehrere Eingangs- bzw. Übergabewerte und keinen oder einen Ergebnis- bzw. Rückgabewert. Das hört sich komplizierter an als es ist. Betrachten Sie einfach ein Beispiel aus der normalen Mathematik, die Funktion zur Quadratberechnung: y = x 2 Diese Funktion benötigt den Eingangswert x, genau die Zahl, die quadriert werden soll, hier z.b. x=6. Als Ergebniswert der Funktion erhalten wir den Funktionswert y, also den Quadratwert: y = 6 2 = 36 Kommen wir jetzt zurück zu unserer C-Hauptfunktion main. Die Übergabewerte an die Funktion main werden im nachfolgenden Klammerpaar (...) übergeben. Bloß, welche Werte sollen wir denn übergeben? Unser Programm soll doch sofort nach dem Einladen in das 80C537er-TFH-System starten, ohne daß wir ihm noch irgendwelche Daten mitgeben müssen. Daß unsere Funktion main keine Übergabedaten benötigt, muß dem Compiler mitgeteilt werden, sonst meckert dieser, weil er bei jeder Funktion automatisch zunächst einmal Übergabewerte erwartet. Das Fehlen dieser Übergabewerte wird dem Compiler durch das Schlüsselwort void ( leer, nichts) mitgeteilt, das anstelle der Übergabewerte in das Klammerpaar hinter main geschrieben wird. Der Compiler erkennt dann also: die Funktion main (unser Hauptprogramm) soll sofort gestartet werden, ohne das irgendwelche Werte übergeben werden müssen.

11. Der 8051er- C -Kursus - 7 - Wie Sie beim obigen "Quadrat-Beispiel" jedoch gesehen haben, gibt eine Funktion in der Regel genau einen Wert zurück, d.h. es entsteht ein Funktionswert, der i.a. weiterverarbeitet wird. Aber selbst dieses ist bei unserem ersten Programm zunächst unerwünscht: das Programm soll ja abgearbeitet werden und danach anhalten, es soll also gar kein Rückgabewert entstehen. Auch dieser Sachverhalt muß dem Compiler mitgeteilt werden und zwar ebenfalls durch das Schlüsselwort void, diesmal vor dem eigentlichen Funktionsaufruf, also vor dem Wort main. Damit ist main als eine Funktion gekennzeichnet, die keinen Rückgabewert erzeugt. An dieser Stelle haben Sie schon ein sehr schönes Beispiel vor Augen, daß auch die Programmiersprache C gewissen Wandlungen, Erneuerungen und Umdefinitionen unterworfen ist. Es gibt nämlich bei den C-Compilern kleine, aber gemeine Unterschiede, die auf unterschiedlichen C-Entwicklungsständen beruhen. Schreiben Sie z.b. ein C-Programm für Ihren PC, so akzeptieren viele Compiler als Programmanfang die Zeile: main () also ohne das Schlüsselwort void am Anfang und in der Klammer. Lassen Sie nun aber den C-Compiler von µvision2 diese Zeile übersetzen, so "meckert" dieser und gibt zwei Warnungen aus, da dieser Programm-Anfang eine Anfangsdefinition gemäß einer älteren C-Norm darstellt. Solche Warnungen sind zunächst einmal nicht schlimm, stören aber doch erheblich. Bei void main() erscheinen dagegen keine Warnungen. MERKE: "DER ANFANG EINES C-PROGRAMMS" Die Hauptfunktion main für ein 8051er-Programm wird bei uns immer wie folgt definiert: bzw. void main (void) void main() Allgemein: Werden keine Werte an eine C-Funktion übergeben, so bleibt das runde Klammerpaar leer oder man schreibt void hinein. Der Funktionsrumpf {... } Nachdem Sie nun den Programmanfang korrekt definiert haben, müssen Sie die einzelnen Anweisungen eingeben, d.h. Sie müssen den sogenannten Hauptprogramm-Rumpf bzw. den sogenannten #(Funktions-Rumpf)# eingeben. Solch ein Block von Anweisungen wird in C in ein Paar geschweifte Klammern {...} gesetzt.

11. Der 8051er- C -Kursus - 8 - Den Start Ihres Programms haben Sie so in der dritten Programmzeile ({) und das Ende des Programms so in der sechsten Programmzeile (}) festgelegt (Leerzeilen werden hier nicht als Programmzeilen gezählt). Das eigentliche Programm, das Sie eingegeben haben, besteht nur aus einer einzigen Zeile: printf("hallo"), s. nachfolgend. Kommentare Zur Erläuterung einzelner Befehle bzw. Befehlssequenzen können und sollten Sie auch, jederzeit im Programmtext #(Kommentare)# einfügen, die auf zwei verschiedene Arten gekennzeichnet werden: 1) Kommentare werden zwischen die Sonderzeichen /*... */ eingeschlossen. Der Compiler ignoriert dann bei seiner Übersetzungsarbeit alles, was zwischen diesen Zeichen steht: /* Alles was hier steht wird jetzt nicht mehr beachtet */ 2) Kommentare werden von den Sonderzeichen // eingeleitet. Dann ignoriert der Compiler bei der Übersetzung alle Zeichen bis zum jeweiligen Zeilenende: // Der Rest der Zeile bis zum Zeilenende wird nicht mehr beachtet Genauer gesagt: der Präprozessor (s. später) eliminiert diese Kommentare bevor der Compiler das Programm übersetzt. Weiterhin ist es zulässig, den Programmtext, je nach Bedarf und persönlichem Geschmack des Programmierers, durch Leerzeilen zu strukturieren, die ebenfalls vor der eigentlichen Programmübersetzung entfernt werden. printf("hallo"); Dieser einzige Befehl unseres Hauptprogramms ist ein Ausgabebefehl, der den Text, der in den runden Klammern zwischen den Anführungszeichen steht, auf dem Bildschirm des Rechners ausgibt. Genauer betrachtet ist printf() auch eine C-Funktion, an die der Ausgabetext übermittelt wird und die keinen Rückgabewert besitzt. Allgemeiner: printf() sorgt für eine formatierte Ausgabe von Daten und Informationen auf dem jeweiligen Ausgabemedium. Wird hierbei ein reiner Text ausgegeben, so spricht man von einer #(Zeichenkette)# oder einem #(String)#. Wichtig: Jeder Befehl (jede Funktion) ist mit einem Semikolon abzuschließen. Damit ist unser erster 6-Zeiler umfassend erklärt und wir können als Zwischenergebnis hier nun eine erste wichtigen Zusammenfassung angeben:

11. Der 8051er- C -Kursus - 9 - ZUSAMMENFASSUNG: "DIE EINGABE VON C-PROGRAMMEN" Die Eingabe von C-Programmelementen Alle Anweisungen, Befehle, Funktionen und sonstigen C-Programmelemente werden durch normale Buchstaben, d.h. ohne Verwendung der deutschen Sonderzeichen (ä, ö, ü, Ä, Ö, Ü, ß), eingegeben. Die einzige Ausnahme bilden die Kommentare: hier können Sie diese Ausnahmebuchstaben verwenden, da Kommentare ja vom Compiler (Präprozessor) "überlesen" werden. Groß- und Kleinschreibung: Bei der Eingabe von C-Sprachelementen (Befehlen, Funktionen, Variablennamen, etc.) überwacht der C-Compiler sehr pingelig die Groß- und Kleinschreibung. So wird problemlos akzeptiert, während printf("hallo"); Printf("Hallo"); oder PRINTF("Hallo"); zu Fehlermeldungen führen. Das sollten Sie jetzt ruhig einmal ausprobieren und in unserem Programm das kleine p von printf durch ein großes P ersetzen. Nach der erneuten Übersetzung des Programms erscheint die Fehlermeldung im unteren Fenster des µvision2- Arbeitsbildschirmes, Abb.11.1.1.5:

11. Der 8051er- C -Kursus - 10 - (1): Einbau eines Fehlers! (2): Die Fehlermeldung erfolgt stehenden Fußes! Abb.11.1.1.5: Fehlermeldung bei Verstoß gegen die "Groß-/Kleinschreibungs-Regeln" Der Compiler gibt Ihnen also an: 1) daß das Symbol Printf nicht definiert ist (er kennt nur printf, mit kleinem p ) 2) daß er im weiteren Verlauf der Übersetzungsarbeit mit Printf "nicht viel anfa n- gen" kann und es somit zu weiteren Fehlermeldungen kommt und 3) daß der Zusammenbau des Zielsystems nicht erfolgte: "Target not created", daß also keine neue, aktualisierte Intel-HEX-Datei erzeugt worden ist. Achten Sie also genauestens auf die jeweiligen Schreibweisen. Strings bzw. Zeichenketten die ausgegeben werden sollen, stehen immer in Anführungszeichen. Funktionen Die Programmiersprache C verfügt im Vergleich zu anderen Programmiersprachen nur über sehr wenige direkte Befehle. Viele Programmabläufe werden mit Hilfe von Funktionen

11. Der 8051er- C -Kursus - 11 - durchgeführt, an die zum einen Werte übergeben werden können und die zum anderen einen eigenen Wert, den Funktionswert, zurückgeben können, der dann i.a. weiterverarbeitet werden kann. Werden keine Werte an eine C-Funktion übergeben, so bleibt das runde Klammerpaar leer oder man schreibt void hinein. Das Semikolon Da die Programmiersprache C keine Zeilennummern verwendet (wie das z.b. bei einigen BASIC-Dialekten der Fall ist), muß der Compiler wissen, wo eine Programmzeile zu Ende ist und die nächste beginnt. Die Rolle dieses Trennungszeichens übernimmt bei C das Semikolon: Jede C-Programmzeile, in der sich ein Befehl oder eine Funktion befindet, endet grundsätzlich mit einem Semikolon! Es gibt lediglich drei Ausnahmen von dieser Regel: 1) In der Programmzeile mit dem Wort main (Start des Programms) steht kein Semikolon. 2) In Programmzeilen, in denen sich nur alleine geschweifte Klammern auf { oder zu } befinden, steht kein Semikolon. 3) Am Ende von Programmzeilen, die mit einem # beginnen, steht kein Semikolon. Das # zeigt hier an, daß es sich um einen besonderen Befehl handelt, nämlich um eine Präprozessor-Anweisung. Der Präprozessor bearbeitet diese Zeile dann entsprechend bevor der Compiler sie "zu sehen" bekommt. An dieser Stelle zeigt sich leider wieder eine kleine Schwäche von C-Compilern: Vergessen Sei einmal ein Semikolon am Ende einer Befehlszeile, so meldet der Compiler nicht einfach: "Semikolon am Ende der Zeile x fehlt", sondern gibt sehr oft äußerst seltsame Fehlermeldungen aus, die auf den ersten Blick absolut nichts mit einem fehlenden Semikolon zu tun haben. Probieren Sie das ruhig aus, in dem Sie das Semikolon am Ende der Befehlszeile printf("hallo") löschen und das Programm danach erneut übersetzen lassen, Abb.11.1.1.6:

11. Der 8051er- C -Kursus - 12 - Abb.11.1.1.6: Fehlermeldung zu: "Hier fehlt ein Semikolon!" Mit solchen scheinbar "ungenauen" Fehlermeldungen müssen Sie leider leben und hier hilft dann nur "scharfes Hinsehen", um z.b. das fehlende Semikolon als Fehlerursache zu erkennen. Sie werden sich aber im Laufe der Zeit sehr schnell an solche Meldungen gewöhnen und nach und nach auch deren tieferen Sinn verstehen. Der #(C-Anweisungsblock)# (#(C-Blockanweisung)#) Ein Block von zusammenhängende Befehlen oder Funktionen wird in C in geschweifte Klammern gesetzt, wobei solch ein Block durchaus auch aus nur einer einzigen Anweisung (Befehl bzw. Funktionsaufruf) bestehen kann. Insbesondere wird der gesamte Hauptprogramm-Rumpf in {...} gesetzt. Nach all diesen Ausführungen wollen Sie jetzt sicherlich endlich etwas "sehen" und laden daher das vom Compiler erzeugte HEX-File (TFH.hex) mit Hilfe des Down-Load-Programms auf Ihr 80C537er-TFH-System (s. Kapitel 8.5.2). Sie rufen wie beschrieben HyperTerm auf und starten das 8051er-Programm durch Eingabe von g0 und Druck auf die Return-Taste. Seltsamer Weise erscheinen jetzt hunderte von "Hallo s" auf dem Bildschirm und nicht nur einmal "Hallo" wie Sie es eigentlich gewollt hatten. Irgend etwas scheint nicht funktioniert zu haben! Mit diesem sicherlich unbefriedigenden Ergebnis beenden wir (zugegebener Maßen psychologisch sehr ungeschickt) die erste Lektion. Aber in der folgenden Lektion werden wir unser Programm sofort so ergänzen, daß es lauffähig wird.