Mikrocontrollerprogrammierung in C - Fakultät I · PDF fileMikrocontrollerprogrammierung in C FH-Hannover, Fakultät I – Elektro- und Informationstechnik, Fachgebiet Industrieelektronik

Embed Size (px)

Citation preview

  • 8051-Mikrocontrollerprogrammierung in C

    am Beispiel des

    Mikrocontroller-Experimentiersystems - MExS

    Dipl.-Ing.(FH) Bernd Kuhs

    Version vom 08.01.2010 08:10

  • Mikrocontrollerprogrammierung in C

    FH-Hannover, Fakultt I Elektro- und Informationstechnik, Fachgebiet Industrieelektronik & Digitaltechnik

    2

    1 Inhalt 1 Inhalt................................................................................................................................................................ 2 2 Einleitung ........................................................................................................................................................ 3 3 Mikrocontroller 8051....................................................................................................................................... 3

    3.1 Struktur des Mikrocontrollers 8051 .......................................................................................................... 3 3.2 Speicherbereiche ....................................................................................................................................... 4

    4 C-Compiler ...................................................................................................................................................... 4 4.1 Speichermodell.......................................................................................................................................... 4 4.2 Memory Modifier...................................................................................................................................... 5 4.3 Special Function Register ......................................................................................................................... 5 4.4 Datentypen ................................................................................................................................................ 6 4.5 main() Funktion......................................................................................................................................... 6

    5 Ein- Ausgabeoperationen ................................................................................................................................ 7 6 Timer ............................................................................................................................................................... 9

    6.1 Mode 1, 16-Bit-Zhler ............................................................................................................................ 10 6.2 Mode 2, Selbstnachladender 8-Bit-Zhler............................................................................................... 10

    7 Interrupt-Programmierung............................................................................................................................. 11 8 Serielle Schnittstellen .................................................................................................................................... 13

    8.1 SPI-Bus ................................................................................................................................................... 13 8.2 RS-232 .................................................................................................................................................... 15

    9 Quellenverzeichnis ........................................................................................................................................ 18

  • Mikrocontrollerprogrammierung in C

    FH-Hannover, Fakultt I Elektro- und Informationstechnik, Fachgebiet Industrieelektronik & Digitaltechnik

    3

    2 Einleitung Die Programmierung eines Mikrocontrollers in der Sprache C unterliegt einigen Besonderheiten die sich durch die Nhe zur Hardware erklren lassen. Aus diesem Grund wurden C-Compiler gegenber dem ANSI-Standard erweitert.

    Alle Beispiele beziehen sich auf den Compiler der Firma Wickenhuser und auf den Mikrocontroller 8051 von Intel bzw. den AT89C51RB2 von Atmel. Grundkenntnisse in der Sprache C, der Mikroprozessortechnik sowie den 8051-Mikrocontrollern werden vorausgesetzt.

    Dem Wickenhuser-Compiler sind viele Beispielprogramme beigefgt. Ich empfehle dringend diese Beispiele und die zugehrigen Header-Dateien zu studieren.

    3 Mikrocontroller 8051 Die Grenzen zwischen Mikroprozessoren und Mikrocontrollern sind mit dem Fortschreiten der Technik zunehmend verwischt worden. Eine klare Abgrenzung ist nicht mehr vorzunehmen. Mikrocontroller haben alle oder zumindest die meisten fr den Betrieb notwendigen Systeme auf dem Chip integriert.

    3.1 Struktur des Mikrocontrollers 8051

    o 4 KiB1 Programmspeicher (max. Adressraum 64 KiB) o 128 Byte interner Datenspeicher o 32 parallele Ein-/Ausgabeleitungen in je 4 Ports mit je 8 Bits o 2 16-Bit-Zhler o 1 serielle Schnittstelle o 1 Interruptlogik o 1 Taktgenerator 1,2 MHz bis 16 MHz

    UART

    RAM

    128 Byte

    Timer 0 Timer 1

    INT

    Contr.

    CPU

    ROM 4 KiB

    Port 0

    Port 1

    Port 2

    Port 3

    Interner Bus

    P0 P1 P2 P3 INT0 INT1T0 T1

    RxD

    TxD

    XTAL1

    XTAL2

    ALE/PROG

    PSEN

    EA

    RD

    WR

    V CC

    Gnd

    Abbildung 1: Blockschaltbild 8051

    Die 8051 sind 8-Bit-Mikrocontroller. Der Befehlssatz des Mikrocontrollers umfat darber hinaus Befehle zur Bearbeitung des Inhalts einzelner Bits. Dies knnen bestimmte Speicherstellen oder die Ein-/ Ausgabeleitungen des Mikrocontrollers sein.

    1 KiB (Kibibyte) = 1024 Byte = 210 Byte. Im Gegensatz dazu: k = kilo = 1000 = 103. Siehe auch Norm IEC 60027-2.

  • Mikrocontrollerprogrammierung in C

    FH-Hannover, Fakultt I Elektro- und Informationstechnik, Fachgebiet Industrieelektronik & Digitaltechnik

    4

    3.2 Speicherbereiche Beim 8051 wird zwischen Datenspeicher (Data) und Programmspeicher (Code) unterschieden. Die Programme befinden sich grundstzlich im Programmspeicher. Der Programmspeicher ist blicherweise ein Festwert-speicher (ROM) der im laufenden Betrieb nicht beschrieben werden kann. Eine Ausnahme bilden Mikro-controller mit Flash-Speicher. Aber auch hier hat der Programmspeicher den Charakter eines ROM (ROM = read only memory). Der Programmspeicher kann durch externe Bausteine erweitert werden. In der Praxis werden allerdings Mikrocontroller verwendet, deren integrierter Programmspeicher eine ausreichende Gre besitzt. Aktuell (Jahr 2005) sind Mikrocontroller mit einem Programmspeicher von bis zu 64 KiB am Markt.

    Der Datenspeicher gliedert sich in einen externen Teil mit max. 64 KiB (XDATA) und einen internen Teil mit bis zu 256 Byte (DATA, IDATA, SFR).

    IDATA

    Indirekte Adressierung

    0FFh

    80h

    DATA Indirekte Adressierung und direkte Adressierung

    7Fh

    00h

    SFR Special- Function- Register Direkte Adressierung

    0FFh

    80h

    XDATA Indirekte Adressierung

    0FFFFh

    0000h

    Bestimmte Bits in DATA- und SFR-Speicher sind direkt adressierbar.

    Adr

    essb

    erei

    ch

    Adr

    essb

    erei

    ch

    Adr

    essb

    erei

    ch

    Adr

    essb

    erei

    ch

    Abbildung 2: Gliederung des Datenspeichers

    ber die speziellen Funktionsregister (SFR) wird die Hardware des Mikrocontrollers erreicht. Zum Beispiel bei der Programmierung der Zeitgeber oder bei der Ausgabe auf einen Port.

    4 C-Compiler Mikrocontrollersysteme besitzen im Vergleich zu Personal-Computern sehr wenig Speicher. Dies ist bei der Programmierung zu bercksichtigen. Der Compiler kann den bentigten Speicher automatisch auf die verschiedenen Speicherbereiche verteilen. Fr die ersten kleinen Programme reicht dies vollkommen aus. Durch bestimmte Vorgaben bei der Deklaration von Variablen kann die Speicherauslastung jedoch erheblich verbessert werden.

    Die Punkte Speichermodell und Memory-Modifier mssen Sie nicht sofort bis in das letzte Detail verstehen. Fr die ersten kleinen Programme whlen Sie das Speichermodell small. Variablen legen Sie lokal an, also innerhalb von Funktionen. Wenn doch einmal eine globale Variable notwendig ist erhlt sie bei der Deklaration den Vorsatz near. Beispiel: near char c;

    4.1 Speichermodell Das Speichermodell bestimmt in welchen Speicherbereichen der Compiler die lokalen Variablen anlegt. Der Compiler kennt die Speichermodelle small und large. Im Modell small werden alle lokalen Variablen im DATA-Bereich des internen Datenspeichers angelegt. Da dieser Bereich nur 128 Bytes gro ist eignet sich das Speichermodell small nicht wenn groe Felder angelegt werden sollen oder viele Variablen bentigt werden.

  • Mikrocontrollerprogrammierung in C

    FH-Hannover, Fakultt I Elektro- und Informationstechnik, Fachgebiet Industrieelektronik & Digitaltechnik

    5

    Auf den meisten Mikrocontrollern steht der IDATA-Bereich des internen Datenspeichers zur Verfgung. Da auf Felder sowieso nur durch indirekte Adressierung zugegriffen wird, kann durch einen entsprechenden Zusatz (memory modifier) der Compiler veranlasst werden fr das Feld den gesamten internen Datenspeicher (DATA + IDATA) zu nutzen.

    Wenn der interne Datenspeicher trotz aller Optimierungen nicht ausreicht muss das Speichermodell large gewhlt werden. Lokale Variablen werden dann im externen Datenspeicher (XDATA) angelegt. Mikrocontroller mit Flash-Speicher wie zum Beispiel der AT89C51RB2 besitzen XDATA-Speicher auf dem Chip! Die Bezeichnung externer Datenspeicher hat historische Bedeutung da in der Vergangenheit tatschlich zustzliche Speicherbausteine an den Mikrocontroller angeschlossen werden m