32
Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel Obwohl immer wieder neue Mikrocontroller Konzepte mit speziellen Merkmalen am Markt erscheinen, werten die technologischen Fortschritte auch und gerade deshalb etablierte Konzepte auf. So erhält einer der ältesten Mikrocontroller am Markt einer immer wieder neu- es Gesicht und muss sich nicht hinter den neuen Konzepten verstecken. Für den Entwickler selbst ist diese Tatsache nicht ohne Vorteil, denn es besteht ein großer Fundus an Applikationen, Bibliotheken, ausgereiften Tools und gesammelten Erfahrungen. In diesem Beitrag werden die Mikrocontroller C8051F0xx von CYGNAL Integrated Products, Inc. [www.cygnal.com] und deren Programmierung mit BASCOM-8051 betrachtet. 1 Mikrocontroller C8051F0xx Die Mikrocontroller C8051F0xx besitzen neben einem schnellen 8051-Kern eine sehr leis- tungsfähige analoge und digitale Peripherie auf dem Chip. Für den Aufbau eines Messsystems bedarf es deshalb zu Anpassungs- und Filterzwecken nur noch weniger zusätzlicher Komponenten. Abbildung 1 zeigt die Komponenten der drei genannten Funktionsgruppen.

C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 1 von 32

C8051F0xx Mikrocontroller und BASCOM-8051

Dr. Claus Kühnel

Obwohl immer wieder neue Mikrocontroller Konzepte mit speziellen Merkmalen am Markt

erscheinen, werten die technologischen Fortschritte auch und gerade deshalb etablierte

Konzepte auf. So erhält einer der ältesten Mikrocontroller am Markt einer immer wieder neu-

es Gesicht und muss sich nicht hinter den neuen Konzepten verstecken.

Für den Entwickler selbst ist diese Tatsache nicht ohne Vorteil, denn es besteht ein großer

Fundus an Applikationen, Bibliotheken, ausgereiften Tools und gesammelten Erfahrungen.

In diesem Beitrag werden die Mikrocontroller C8051F0xx von CYGNAL Integrated Products,

Inc. [www.cygnal.com] und deren Programmierung mit BASCOM-8051 betrachtet.

1 Mikrocontroller C8051F0xx

Die Mikrocontroller C8051F0xx besitzen neben einem schnellen 8051-Kern eine sehr leis-

tungsfähige analoge und digitale Peripherie auf dem Chip.

Für den Aufbau eines Messsystems bedarf es deshalb zu Anpassungs- und Filterzwecken

nur noch weniger zusätzlicher Komponenten. Abbildung 1 zeigt die Komponenten der drei

genannten Funktionsgruppen.

Page 2: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 2 von 32

Abbildung 1 C8051F0xx Blockdiagramm

Stellvertretend für die Mikrocontroller dieser Familie soll hier der C8051F000 betrachtet wer-

den, der nur beim RAM von einigen anderen Bausteinen überboten wird.

Die analoge Funktionseinheit weist einen neunkanaligen 12-Bit AD-Umsetzer mit einem Da-

tendurchsatz vom 100000 Umsetzungen/sec (100 ksps) auf. Ein Multiplexer kann die acht

analogen Eingänge sowohl massebezogen (single-ended) als auch differentiell an den AD-

Umsetzer führen. Ein programmierbarer Verstärker dient der Anpassung der zu verarbeiten-

den Pegel an den Aussteuerbereich des AD-Umsetzers. Eine interne Referenzspannung mit

einem Temperaturkoeffizienten von 15 ppm/°C lässt in vielen Fällen den Verzicht auf eine

externe Referenzspannung zu. Ein integrierter Temperatursensor kann zur Korrektur eines

möglichen Temperaturgangs der Messeinrichtung herangezogen werden.

Zur Ausgabe von analogen Spannungswerten stehen zwei 12-Bit DA-Umsetzer mit einer

Einschwingzeit von 10 µs zur Verfügung.

Zwei Komparatoren mit je 16 programmierbaren Hysteresewerten können zur Auslösung von

Interrupts oder einem Reset verwendet werden.

Die digitale Peripherie ist gleichermaßen umfangreich. Zum Datenaustausch stehen I2C- und

SPI-Bus zur Verfügung. Ein Hardware-UART unterstützt die serielle Kommunikation gemäss

RS-232.

Page 3: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 3 von 32

Vier Timer und ein programmierbares Counter/Timer Array mit fünf Capture/Compare Modu-

len ermöglichen komplexe Timer- bzw. Counterapplikationen.

Die Verbindung der umfangreiche Peripherie mit den I/O Pins übernimmt ein Kreuzschienen-

verteiler (Crossbar Switch).

Abbildung 2 zeigt das Blockschaltbild des C8051F000 etwas detaillierter. Die Funktion des

Crossbar Switches ist deutlich erkennbar.

Abbildung 2 C8051F000 Blockschaltbild

Die Ausstattungsmerkmale aller Mitglieder der Mikrocontrollerfamilie C8051Fxxx sind der

folgenden Tabelle zu entnehmen.

Page 4: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 4 von 32

Page 5: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 5 von 32

Der 8051er Kern greift über Special Function Register (SFR) auf die eben erläuterte Periphe-

rie zu. Die 32 KB Flash Memory sind In-System programmierbar. Das RAM umfasst 256

Bytes.

Bei einer Taktfrequenz von 20 MHz erreicht der Prozessor einen Durchsatz von 20 MIPS.

Der Takt kann im Bereich von 2 bis 16 MHz intern erzeugt werden. Für eine externe Takter-

zeugung bietet der C8051F000 komfortable Anpassungsmöglichkeiten. Zwischen interner

und externer Takterzeugung kann im laufenden Betrieb umgeschaltet werden.

Ein sicherer Betrieb des Mikrocontrollers wird durch die interne Betriebsspannungsüberwa-

chung und einen Watchdog sichergestellt.

Versorgt wird der C8051F000 mit einer Betriebsspannung zwischen 2,7 und 3,6 V, wobei die

typische Stromaufnahme bei einem Takt von 20 MHz bei nur 10 mA liegt.

Die On-Chip JTAG und Emulation Logik erlaubt In-Circuit Emulation über das 4-Pin JTAG

Interface nach IEEE 1149.1. CYGNAL’s Emulation System unterstützt das Auslesen und die

Modifikation des Speichers und der Register, das setzen von Break- und Watchpoints, das

Monitoring des Stacks sowie Single-Step Betrieb. Eine sogenannte Emulation Cartridge a-

daptiert das JTAG Interface und kommuniziert mit dem PC über RS-232.

Mit den letztgenannten Hardwarevoraussetzungen ergeben sich komfortable Möglichkeiten

für die erforderliche Entwicklungsumgebung.

Page 6: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 6 von 32

2 C8051F0XX Entwicklungskit

Von CYGNAL werden komplette Entwicklungskits angeboten, die ein problemloses Kennen-

lernen des Mikrocontrollers C8051F0XX sowie Programmentwicklung und Debugging

ermöglichen. Abbildung 3 zeigt das komplette C8051F0XX Entwicklungskit.

Abbildung 3 CYGNAL’s C8051F0XX Entwicklungskit

Die Emulation Cartridge verbindet die Entwicklungsumgebung auf dem PC mit dem Target-

board über dessen JTAG Interface. Für Programmdownload und Debugging werden also

keine weiteren Ressourcen des Mikrocontrollers blockiert. Abbildung 4 zeigt das C8051F000

Targetboard.

Page 7: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 7 von 32

Abbildung 4 CYGNAL C8051F000 Targetboard

Die Software der CYGNAL Entwicklungsumgebung präsentiert sich gemäss Abbildung 5 und

ist aber weitgehend anpassbar.

Abbildung 5 CYGNAL Entwicklungsumgebung

Page 8: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 8 von 32

Es können in dieser Entwicklungsumgebung C- und Assembler-Programme bearbeitet wer-

den. Als C-Compiler kommt der in der 8051-Welt sehr weit verbreitete Compiler von Keil zum

Einsatz. Wir wollen uns hier wegen des Bezugs zu BASCOM-8051 mit dem Assembler be-

gnügen.

In Abbildung 5 ist das Programm BLINK.ASM geladen und erfolgreich ins Targetboard gela-

den worden.

Über die Werkzeugleiste können die gewünschten Funktionen selektiert werden. Abbildung 6

zeigt die wichtigsten Funktionen.

Compilieren/Assemblieren, Verbindung zum Target, Download

Debugging (Single Step, Breakpoints etc.)

Anzeigeoptionen

Abbildung 6 Werkzeugleiste der Entwicklungsumgebung

Diese Funktionen sind in fast allen Entwicklungsumgebungen in vergleichbarer Form zu fin-

den.

Eine sehr wichtige Funktion der Entwicklungsumgebung ist der sogenannte Configuration

Wizard, der durch das Ausfüllen eines Configuration Templates ein große Hilfe bei der Kon-

figuration der umfangreichen On-Chip Peripherie der C8051Fxxx Mikrocontroller darstellt.

Listing 1 zeigt ein solches Configuration Template, welches nach der Konfiguration dann

zum eigentlichen Programm erweitert werden kann.

;---------------------------------------------------------------; CYGNAL Integrated Products;; Assembly Code Configuration Tool: F000 INITIALIZATION/CONFIGURATION CODE;----------------------------------------------------------------; This file is read only. To insert the code into your; application, simply cut and paste or use the "Save As"; command in the file menu to save the file in your project; directory.;----------------------------------------------------------------

;----------------------------------------------------------------; GLOBAL VARIABLES AND ASSIGNMENTS;----------------------------------------------------------------

$INCLUDE(C8051F000.INC) ; Register definition file.

;----------------------------------------------------------------; INTERRUPT VECTOR CODE

Page 9: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 9 von 32

;----------------------------------------------------------------

org 00hLJMP Config

; Place jump to reset handler and interrupt service routines here.

Config:org 0B3h ; End of Interrupt Vector space.

;----------------------------------------------------------------; Watchdog Timer Configuration;; WDTCN.[7:0]: WDT Control; Writing 0xA5 enables and reloads the WDT.; Writing 0xDE followed within 4 clocks by 0xAD disables the WDT; Writing 0xFF locks out disable feature.;; WDTCN.[2:0]: WDT timer interval bits; NOTE! When writing interval bits, bit 7 must be a 0.;; Bit 2 | Bit 1 | Bit 0;------------------------; 1 | 1 | 1 Timeout interval = 1048576 x Tsysclk; 1 | 1 | 0 Timeout interval = 262144 x Tsysclk; 1 | 0 | 1 Timeout interval = 65636 x Tsysclk; 1 | 0 | 0 Timeout interval = 16384 x Tsysclk; 0 | 1 | 1 Timeout interval = 4096 x Tsysclk; 0 | 1 | 0 Timeout interval = 1024 x Tsysclk; 0 | 0 | 1 Timeout interval = 256 x Tsysclk; 0 | 0 | 0 Timeout interval = 64 x Tsysclk;------------------------

mov WDTCN, #007h ; Watchdog Timer Control Registermov WDTCN, #0DEh ; Disable WDTmov WDTCN, #0ADh

;----------------------------------------------------------------; CROSSBAR REGISTER CONFIGURATION;; NOTE: The crossbar register should be configured before any; of the digital peripherals are enabled. The pinout of the; device is dependent on the crossbar configuration so caution; must be exercised when modifying the contents of the XBR0,; XBR1, and XBR2 registers. For detailed information on; Crossbar Decoder Configuration, refer to Application Note; AN001, "Configuring the Port I/O Crossbar Decoder".;----------------------------------------------------------------

; Configure the XBRn Registers

mov XBR0, #000h ; XBAR0: Initial Reset Valuemov XBR1, #000h ; XBAR1: Initial Reset Valuemov XBR2, #000h ; XBAR2: Initial Reset Value

; Select Pin I/0

; NOTE: Some peripheral I/O pins can function as either inputs or; outputs, depending on the configuration of the peripheral. By default,; the configuration utility will configure these I/O pins as push-pull; outputs. If the I/O direction changes to input once the peripheral is; configured, the peripheral hardware will override the PRTnCF register; setting and change the pin configuration to input.

; Port configuration (1 = Push Pull Output)mov PRT0CF, #000h ; Output configuration for P0

Page 10: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 10 von 32

mov PRT1CF, #040h ; Output configuration for P1mov PRT2CF, #000h ; Output configuration for P2mov PRT3CF, #000h ; Output configuration for P3

; View port pinout

; The current Crossbar configuration results in the; following port pinout assignment:

; Port 0; P0.0 = Gp I / O; P0.1 = Gp I / O; P0.2 = Gp I / O; P0.3 = Gp I / O; P0.4 = Gp I / O; P0.5 = Gp I / O; P0.6 = Gp I / O; P0.7 = Gp I / O

; Port 1; P1.0 = Gp I / O; P1.1 = Gp I / O; P1.2 = Gp I / O; P1.3 = Gp I / O; P1.4 = Gp I / O; P1.5 = Gp I / O; P1.6 = Gp I / O (Push-Pull Output); P1.7 = Gp I / O (Open-Drain Output/Input)

; Port 2; P2.0 = Gp I / O; P2.1 = Gp I / O; P2.2 = Gp I / O; P2.3 = Gp I / O; P2.4 = Gp I / O; P2.5 = Gp I / O; P2.6 = Gp I / O; P2.7 = Gp I / O

; Port 3; P3.0 = Gp I / O; P3.1 = Gp I / O; P3.2 = Gp I / O; P3.3 = Gp I / O; P3.4 = Gp I / O; P3.5 = Gp I / O; P3.6 = Gp I / O; P3.7 = Gp I / O

;-----------------------------------------------------------------; Comparators Register Configuration;; Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0;------------------------------------------------------------------; R/W | R | R/W | R/W | R/W | R/W | R/W | R/W;------------------------------------------------------------------; Enable | Output | Rising | Falling| Positive | Negative; | State | Edge | Edge | Hysterisis | Hysterisis; | Flag | Int. | Int. | 00: Disable | 00: Disable; | | Flag | Flag | 01: 5mV | 01: 5mV; | | | | 10: 10mV | 10: 10mV; | | | | 11: 20mV | 11: 20mV; ----------------------------------------------------------------

mov CPT0CN, #000h ; Comparator 0 Control Registermov CPT1CN, #000h ; Comparator 1 Control Register

Page 11: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 11 von 32

;Comp1 marker

;----------------------------------------------------------------; Oscillator Configuration;----------------------------------------------------------------

mov OSCXCN, #030h ; External Oscillator Control Registermov OSCICN, #004h ; Internal Oscillator Control Register

;----------------------------------------------------------------; Reference Control Register Configuration;----------------------------------------------------------------

mov REF0CN, #000h ; Reference Control Register

;----------------------------------------------------------------; SPI Configuration;----------------------------------------------------------------

mov SPI0CN, #000h ; SPI Control Registermov SPI0CFG, #000h ; SPI Configuration Registermov SPI0CKR, #000h ; SPI Clock Rate Register

;----------------------------------------------------------------; DAC Configuration;----------------------------------------------------------------

mov DAC0CN, #000h ; DAC0 Control Registermov DAC0L, #000h ; DAC0 Low Byte Registermov DAC0H, #000h ; DAC0 High Byte Register

mov DAC1CN, #000h ; DAC1 Control Registermov DAC1L, #000h ; DAC1 Low Byte Registermov DAC1H, #000h ; DAC1 High Byte Register

;----------------------------------------------------------------; UART Configuration;----------------------------------------------------------------

mov SCON, #000h ; Serial Port Control Registermov PCON, #000h ; Power Control Register

;----------------------------------------------------------------; SMBus Configuration;----------------------------------------------------------------

mov SMB0CN, #000h ; SMBus Control Registermov SMB0ADR, #000h ; SMBus Address Registermov SMB0CR, #000h ; SMBus Clock Rate Register

;----------------------------------------------------------------; PCA Configuration;----------------------------------------------------------------

mov PCA0MD, #000h ; PCA Mode Registermov PCA0CN, #000h ; PCA Control Registermov PCA0L, #000h ; PCA Counter/Timer Low Bytemov PCA0H, #000h ; PCA Counter/Timer High Byte

;Module 0mov PCA0CPM0, #000h ; PCA Capture/Compare Register 0mov PCA0CPL0, #000h ; PCA Counter/Timer Low Byte

Page 12: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 12 von 32

mov PCA0CPH0, #000h ; PCA Counter/Timer High Byte

;Module 1mov PCA0CPM1, #000h ; PCA Capture/Compare Register 1mov PCA0CPL1, #000h ; PCA Counter/Timer Low Bytemov PCA0CPH1, #000h ; PCA Counter/Timer High Byte

;Module 2mov PCA0CPM2, #000h ; PCA Capture/Compare Register 2mov PCA0CPL2, #000h ; PCA Counter/Timer Low Bytemov PCA0CPH2, #000h ; PCA Counter/Timer High Byte

;Module 3mov PCA0CPM3, #000h ; PCA Capture/Compare Register 3mov PCA0CPL3, #000h ; PCA Counter/Timer Low Bytemov PCA0CPH3, #000h ; PCA Counter/Timer High Byte

;Module 4mov PCA0CPM4, #000h ; PCA Capture/Compare Register 4mov PCA0CPL4, #000h ; PCA Counter/Timer Low Bytemov PCA0CPH4, #000h ; PCA Counter/Timer High Byte

;----------------------------------------------------------------; ADC Configuration;----------------------------------------------------------------

mov AMX0CF, #060h ; AMUX Configuration Registermov AMX0SL, #000h ; AMUX Channel Select Registermov ADC0CF, #000h ; ADC Configuraion Registermov ADC0CN, #000h ; ADC Control Register

mov ADC0LTH, #000h ; ADC Less-Than High Byte Registermov ADC0LTL, #000h ; ADC Less-Than Low Byte Registermov ADC0GTH, #0FFh ; ADC Greater-Than High Byte Registermov ADC0GTL, #0FFh ; ADC Greater-Than Low Byte Register

;----------------------------------------------------------------; Timer Configuration;----------------------------------------------------------------

mov CKCON, #000h ; Clock Control Registermov TH0, #000h ; Timer 0 High Bytemov TL0, #000h ; Timer 0 Low Bytemov TH1, #000h ; Timer 1 High Bytemov TL1, #000h ; Timer 1 Low Bytemov TMOD, #000h ; Timer Mode Registermov TCON, #000h ; Timer Control Register

mov RCAP2H, #000h ; Timer 2 Capture Register High Bytemov RCAP2L, #000h ; Timer 2 Capture Register Low Bytemov TH2, #000h ; Timer 2 High Bytemov TL2, #000h ; Timer 2 Low Bytemov T2CON, #000h ; Timer 2 Control Register

mov TMR3RLL, #000h ; Timer 3 Reload Register Low Bytemov TMR3RLH, #000h ; Timer 3 Reload Register High Bytemov TMR3H, #000h ; Timer 3 High Bytemov TMR3L, #000h ; Timer 3 Low Bytemov TMR3CN, #000h ; Timer 3 Control Register

;----------------------------------------------------------------; Reset Source Configuration;; Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0;------------------------------------------------------------------; R | R/W | R/W | R/W | R | R | R/W | R

Page 13: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 13 von 32

;------------------------------------------------------------------; JTAG |Convert | Comp.0 | S/W | WDT | Miss. | POR | HW; Reset |Start | Reset/ | Reset | Reset | Clock | Force | Pin; Flag |Reset/ | Enable | Force | Flag | Detect| & | Reset; |Enable | Flag | & | | Flag | Flag | Flag; |Flag | | Flag | | | |;------------------------------------------------------------------; NOTE! : Comparator 0 must be enabled before it is enabled as a; reset source.;; NOTE! : External CNVSTR must be enalbed through the crossbar, and; the crossbar enabled prior to enabling CNVSTR as a reset source;------------------------------------------------------------------

mov RSTSRC, #000h ; Reset Source Register

;----------------------------------------------------------------; Interrupt Configuration;----------------------------------------------------------------

mov IE, #000h ;Interrupt Enablemov IP, #000h ;Interrupt Prioritymov EIE1, #000h ;Extended Interrupt Enable 1mov EIE2, #000h ;Extended Interrupt Enable 2mov EIP1, #000h ;Extended Interrupt Priority 1mov EIP2, #000h ;Extended Interrupt Priority 2

; other initialization code here...

;-----------------------------------------------------------------; MAIN PROGRAM CODE;-----------------------------------------------------------------

Main:

; main code routines here...

END

Listing 1 Configuration Template

Wie der Configuration Wizard Unterstützung bei der Konfiguration der On-Chip Peripherie

bietet, zeigen die folgenden Screenshots.

Abbildung 7 zeigt den Aufruf des Configuration Wizards

Page 14: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 14 von 32

Abbildung 7 Aufruf des Configuration Wizards

Vor der eigentlichen Konfiguration sind der Mikrocontroller selbst sowie C- bzw. Assembler-

Template auszuwählen (Abbildung 8).

Page 15: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 15 von 32

Abbildung 8 Auswahl Assembler Template für C8051F000

Hat man diese Auswahl getroffen, dann präsentiert sich die gesamte zu konfigurierende Pe-

ripherie im Fenster „Config“ (Abbildung 9).

Page 16: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 16 von 32

Abbildung 9 Konfigurationsliste

Die gelisteten Elemente sind der Reihe nach abzuarbeiten. Die Konfiguration von Port1 ist in

Abbildung 10 beispielhaft gezeigt.

Page 17: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 17 von 32

Abbildung 10 Konfiguration Port I/O

Ein kleines Programmbeispiel soll die Vorgehensweise verdeutlichen. Die beim Targetboard

an P1.6 angeschlossene LED soll im Takt blinken. Der interne Oszillator wird als Systemtakt

verwendet.

Listing 2 zeigt das betreffende Assemblerprogramm BLINK1.ASM mit den fett markierten

Einträgen, die mit Hilfe des Configuration Wizards erzeugt wurden.

;-----------------------------------------------------------------------------; Copyright (C) 2000 CYGNAL INTEGRATED PRODUCTS, INC.; All rights reserved.;;; FILE NAME : BLINK1.ASM; TARGET MCU : C8051F000; DESCRIPTION : This program illustrates how to disable the watchdog timer,; configure the Crossbar, configure a port and write to a port; I/O pin.; The internal oscillator will be set to 16 MHz.;;;-----------------------------------------------------------------------------

;-----------------------------------------------------------------------------; EQUATES;-----------------------------------------------------------------------------

$include (c8051f000.inc) ; Include regsiter definition file.

Page 18: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 18 von 32

GREEN_LED EQU P1.6 ; Port I/O pin connected to Green LED.

;-----------------------------------------------------------------------------; VARIABLES;-----------------------------------------------------------------------------

;-----------------------------------------------------------------------------; RESET and INTERRUPT VECTORS;-----------------------------------------------------------------------------

; Reset Vectororg 00hljmp Main ; Jump beyond interrupt vector space.

;-----------------------------------------------------------------------------; MAIN PROGRAM CODE;-----------------------------------------------------------------------------

org 0B3h ; End of interrupt vector space.

Main:; Disable the WDT. (IRQs not enabled at this point.); If interrupts were enabled, we would need to explicitly disable; them so that the 2nd move to WDTCN occurs no more than four clock; cycles after the first move to WDTCN.mov WDTCN, #0DEh;mov WDTCN, #0ADh

; Enable the Port I/O Crossbarmov XBR2, #40h

; Set P1.6 (LED) as push-pull output. All others default to open-drain.orl PRT1CF,#01000000b

; Set internal oscillator to 16 MHzorl OSCICN,#00000111bmov OSCXCN,#0

; Initialize LED to OFFclr GREEN_LED

; Simple delay loop.Blink: mov R7, #03hLoop0: mov R6, #00hLoop1: mov R5, #00h

djnz R5, $djnz R6, Loop1djnz R7, Loop0cpl GREEN_LED ; Toggle LED.jmp Blink

;-----------------------------------------------------------------------------; End of file.END

Listing 2 Programmbeispiel BLINK1.ASM

Die Zuordnung der On-Chip Peripherie ist durch den Crossbar Switch sehr flexibel. Bei der

Pinzuordnung müssen aber gewisse Prioritäten beachtet werden. Abbildung 11 zeigt die so-

genannte „Priority Decode Table“, nach der die Prioritäten bei der Pinzuordnung geregelt

sind.

Page 19: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 19 von 32

In der Prioritätentabelle markiert ein (!) das jeweilige I/O Pin, welchem das betreffende Sig-

nal zugeordnet werden kann.

Abbildung 11 Priority Decode Table

Die Pinzuordnung erfolgt in der Prioritätentabelle von oben nach unten. Aktiviert man den

I2C-Bus dann wird dieser immer den I/O Pins P0.0 und P0.1 zugeordnet. Die Signale Tx und

Rx des UART werden nur dann den I/O Pins P0.0 und P0.1 zugeordnet, wenn weder I2C-

noch SPI-Bus enabled wurden. Sind sowohl UART als auch I2C-Bus enabled, dann liegen an

P0.0 und P0.1 die Signale des I2C-Busses und an P0.2 und P0.3 die UART-Signale Tx und

Rx.

Page 20: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 20 von 32

3 C8051F000 und BASCOM-8051

Im folgenden Abschnitt soll nun BASCOM-8051 zum Programmieren der betreffenden Appli-

kation eingesetzt werden. Das bereits vorgestellt Blinkprogramm wird als erstes in BASCOM-

8051 umgesetzt und damit das grundsätzliche Vorgehen beschrieben.

Programmbeispiele zum Timerinterrupt und zur AD-DA-Umsetzung zeigen weitere Möglich-

keiten des komplexen Mikrocontrollers C8051F000.

3.1 Blinkende LED

Sicher muss man für eine blinkende LED nicht unbedingt eine Hochsprache zum Einsatz

bringen. Die unterschiedliche Behandlung der beiden Bereiche der Programmierung eines

Mikrocontrollers - Initialisierung und Anwendung – zeigt aber bereits dieses einfache Beispiel

deutlich.

Für den Initialisierungsteil verwenden wir wieder das Configuration Wizard der CYGNAL

Entwicklungsumgebung.

In unserem Beispiel sollen der Watchdog ausgeschaltet werden und der interne Oszillator

eine Taktfrequenz von 2 MHz liefern. Pin1.6 treibt wieder die auf dem Entwicklungsboard

vorhandene LED.

Aus der mit Hilfe des Configuration Wizards der CYGNAL Entwicklungsumgebung erstellten

Assemblerdatei werden schließlich die zur Initialisierung erforderlichen Assemblerzeilen

ausgeschnitten und als Assembler-Quelltext in den zu erstellenden BASCOM-Quelltext ü-

bernommen. Zu beachten sind die kleinen Notationsunterschiede.

Anhand der Watchdog Timer Konfiguration sollen die Unterschiede verdeutlicht werden. Die

folgenden Zeilen zeigen einen Ausschnitt aus den vom Configuration Wizard erzeugten As-

semblerzeilen.

; Watchdog Timer Configurationmov WDTCN, #0DEh ; Disable WDTmov WDTCN, #0ADh

Kommentare werden in BASCOM-8051 durch das Zeichen ‘ eingeleitet. Die hexadezimale

Darstellung des Datenbytes im MOV-Befehl muss ebenfalls angepasst werden.

Page 21: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 21 von 32

Unter Beachtung dieser Erfordernisse werden die betreffenden Assemblerzeilen zwischen

die Compilerdirektiven $asm und $end asm platziert. Die eigentliche Anwendung kann sich

nun als BASCOM-Quelltext anschließen.

$noinit$crystal = 2000000

$asm

' Watchdog Timer Configurationmov WDTCN, #h'DE ' Disable WDTmov WDTCN, #h'AD

' Configure The Xbrn Registersmov XBR2, #h'40 ' XBAR2: Initial Reset Value

' Port Configuration(1 = Push Pull Output)mov PRT1CF, #h'40 ' Output configuration for P1

' Oscillator Configurationmov OSCXCN, #h'00 ' External Oscillator Control Registermov OSCICN, #h'04 ' Internal Oscillator Control Register

$end Asm

Led Alias P1.6

Led = 0

doLed = not Led ' Toggle LEDwaitms 100 ' Wait 100 ms

loop

End

Listing 3 Programmbeispiel BLINK.BAS

Das compilierte Programm kann im Simulator wie gewohnt getestet werden. Hat man das

Programm BLINK.HEX mit Hilfe der CYGNAL Entwicklungsumgebung in das Flash Memory

des eingesetzten Mikrocontrollers C8051F000 heruntergeladen, dann kann es in der Ziel-

hardware gestartet werden. Abbildung 12 weist auf eine Einschränkung beim Debugging hin.

Abbildung 12 Hinweis zum Debugging

Page 22: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 22 von 32

In der CYGNAL Entwicklungsumgebung kann das disassemblierte Programm Aufschluss

über den erzeugten Code geben. Abbildung 13 zeigt den Bereich der Initialisierung.

Abbildung 13 Disassembliertes Programm

Dieses einfache Programmbeispiel zeigt die grundsätzliche Vorgehensweise. Ein komplexe-

res Programmbeispiel, welches auch die Ressourcen des C8051F000 verwendet, soll im

folgenden Abschnitt vorgestellt werden.

3.2 Timerinterrupt

Die LED soll im folgenden Programmbeispiel durch einen Timerinterrupt zum Blinken ge-

bracht werden. Eine solche Möglichkeit ist immer dann von Nutzen, wenn man einen von der

Anwendung nicht benutzten Timer als „Lebenszeichen“ verwenden will.

Für unsere Zwecke soll also Timer0 als 16-Bit Timer arbeiten. Der vom Timer Overflow ange-

forderte Interrupt toggelt nun die LED. Listing 4 zeigt den Quelltext des Programms

TIMER0.BAS.

Page 23: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 23 von 32

Für Timer0 wird mit der Instruktion On Timer0 Timer0_isr Nosave eine Interrupt Servi-

ce Routine vorbereitet, der am Ende des Programms noch der abzuarbeitende Code zuge-

wiesen wird.

Im Initialisierungsteil stehen nun zusätzliche Anweisungen für den Timer und den verwende-

ten Interrupt.

Die vorgenommen Initialisierung von Timer0 bedeutet in der Reihenfolge der Anweisungen

• Timer0 wird mit dem durch 12 geteilten Systemtakt getaktet

• Timer0 wird mit dem Wert 0 initialisiert

• Timer0 arbeitet als 16-Bit Timer, d.h. nach 65536 Takten erfolgt ein Timer Overflow

• Timer0 wird sofort nach der Initialisierung gestartet

Das Hauptprogramm besteht aus einer leeren Endlosschleife, da alle Programmaktivitäten in

der Interrupt Service Routine liegen.

$crystal = 2000000

On Timer0 Timer0_isr Nosave

$asm

' Watchdog Timer Configurationmov WDTCN, #h'DE ' Disable WDTmov WDTCN, #h'AD

' Configure The Xbrn Registersmov XBR2, #h'40 ' XBAR2: Initial Reset Value

' Port Configuration(1 = Push Pull Output)mov PRT1CF, #h'40 ' Output configuration for P1

' Oscillator Configurationmov OSCXCN, #h'00 ' External Oscillator Control Registermov OSCICN, #h'04 ' Internal Oscillator Control Register

' Timer Configurationmov CKCON, #h'00 ' Clock Control Register - Prescaler 12mov TH0, #h'00 ' Timer 0 High Byte Initializationmov TL0, #h'00 ' Timer 0 Low Byte Initializationmov TMOD, #h'01 ' Timer Mode 1 - 16 Bit Modemov TCON, #h'10 ' Timer Control Register - Start Timer

' Interrupt Configurationmov IE, #h'82 ' Interrupt Enablemov IE1, #h'00 ' Interrupt Priority IP

$end Asm

Led Alias P1.6

Led = 0

Page 24: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 24 von 32

Do' Empty Loop as Main Program

Loop

End

Timer0_isr:Led = Not Led ' Toggle LED

Return

Listing 4 Programmbeispiel TIMER0.BAS

3.3 AD-DA-Umsetzung

Wie eingangs dargestellt hat der C8051F000 alle Ressourcen für ein komplettes System zur

Messwertverarbeitung bereits auf dem Chip. Abbildung 14 zeigt die einzelnen Funktionsein-

heiten in einem Blockschema.

Abbildung 14 Messwertverarbeitung auf den Chip

Im folgenden Programmbeispiel wird der Ausgang eines DA-Umsetzers mit einem Eingang

des AD-Umsetzers verbunden. Damit kann das Programmbeispiel gleichzeitig zum Test der

Linearität der AD-Umsetzung dienen.

Die Sequenz Ansteuerung DA-Umsetzer und Auslesen des AD-Umsetzers soll wieder in ei-

nem Timerinterrupt erfolgen. Überall dort, wo exakte Abtastzeitpunkte für die spätere Signal-

verarbeitung erforderlich sind, wird man die AD-Umsetzung von einem Timer aus starten

müssen. Außerdem soll der Timerinterrupt wieder als Lebenszeichen dienen.

Listing 5 zeigt das Programmbeispiel ADDA_T0.BAS, bei dem der Ausgang DAC0 mit dem

Eingang AIN0 verbunden wurde.

Page 25: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 25 von 32

$crystal = 2000000

On Timer0 Timer0_isr

Declare Sub Write_dac(dac As Word)Declare Sub Read_adc()

Dim Idx As Word , Dac As Word , Adc As Word , Tmp As WordDim ADReady as byte

Led Alias P1.6

Led = 0Idx = 0

$asm

' Watchdog Timer Configurationmov WDTCN, #h'DE ' Disable WDTmov WDTCN, #h'AD

' Configure The Xbrn Registersmov XBR2, #h'40 ' XBAR2: Initial Reset Value

' Port Configuration(1 = Push Pull Output)mov PRT1CF, #h'40 ' Output configuration for P1

' Oscillator Configurationmov OSCXCN, #h'00 ' External Oscillator Control Registermov OSCICN, #h'04 ' Internal Oscillator Control Register

' Reference Control Register Configurationmov REF0CN, #003h ' Reference Control Register

' Dac Configurationmov DAC0CN, #h'80h ' DAC0 Control Registermov DAC0L, #h'00h ' DAC0 Low Byte Registermov DAC0H, #h'00h ' DAC0 High Byte Register

' Adc Configurationmov AMX0CF, #h'00h ' AMUX Configuration Register - SEmov AMX0SL, #h'00h ' AMUX Channel Select Register - AIN0mov ADC0CF, #h'00h ' ADC Configuraion Register - SYSCLK, G=1mov ADC0CN, #h'C0h ' ADC Control Register - ADBusy

mov ADC0LTH, #h'00h ' ADC Less-Than High Byte Registermov ADC0LTL, #h'00h ' ADC Less-Than Low Byte Registermov ADC0GTH, #h'FFh ' ADC Greater-Than High Byte Registermov ADC0GTL, #h'FFh ' ADC Greater-Than Low Byte Register

' Timer Configurationmov CKCON, #h'00 ' Clock Control Register - Prescaler 12mov TH0, #h'00 ' Timer 0 High Byte Initializationmov TL0, #h'00 ' Timer 0 Low Byte Initializationmov TMOD, #h'01 ' Timer Mode 1 - 16 Bit Modemov TCON, #h'10 ' Timer Control Register - Start Timer

' Interrupt Configurationmov IE, #h'82 ' Interrupt Enablemov IE1, #h'00 ' Interrupt Priority IP

$end Asm

Page 26: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 26 von 32

Do' Empty Loop as Main Program

Loop

End

' Timer0 Interrupt Service RoutineTimer0_isr:

Led = Not Led ' Toggle LEDWrite_dac Idx ' Write DACDelay ' Wait for analog outputsRead_adc ' Read ADCIdx = Idx + 64 ' Increment index

Return

' Write Digital-to-Analog ConverterSub Write_dac(dac As Word)

Dac0l = Low(dac)Dac0h = High(dac)

End Sub

' Read Analog-to-Digital ConverterSub Read_adc()

orl ADC0CN, #h'10 ' Set Adbusydo

ADReady = ADC0CN AND &H10 ' Wait for end of AD Conversionloop until ADReady = 0Tmp = Adc0h ' Read Hi Byte of ADCShift Tmp , Left , 8Adc = Tmp + Adc0l ' Build Result of AD Conversion

End Sub

Listing 5 Programmbeispiel ADDA_T0.BAS

Das Programm ADDA_T0.BAS ist vom Aufbau her identisch mit den bisher betrachteten

Programmbeispielen. Zu Begin des Programms werden die Interrupt Service Routine, sowie

zwei Subroutinen zur Ansteuerung von DA- und AD-Umsetzer deklariert. Diesen Deklaratio-

nen folgen die Variablendeklarationen.

Der sich anschließende Assemblerteil ist wieder mit dem Configuration Wizard der CYGNAL

Entwicklungsumgebung erzeugt worden und initialisiert die verwendeten Special Function

Register.

Wichtig an dieser Stelle sind die Initialisierungen der Referenzspannung, des DA-Umsetzers

sowie des AD-Umsetzers.

Als Referenzspannung wird die interne Referenzspannung von typisch 2,43 V verwendet.

Ein Quantisierungsschritt beträgt damit ca. 0,59 mV.

Der DA-Umsetzer wird enabled und mit einem Ausgangswert belegt. Durch Beschreiben der

Register DAC0L und DAC0H kann der gewünschte Ausgangswert eingestellt werden. Da die

Daten nach dem Beschreiben des Registers DAC0H gelatched werden, ist die Reihenfolge

des Beschreibens der Register DAC0L und DAC0H unbedingt einzuhalten. Abbildung 15

Page 27: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 27 von 32

zeigt ein Prinzipschaltbild für die beiden 12-Bit DA-Umsetzer im C8051F000 mit den betref-

fenden Special Function Registern.

Abbildung 15 DA-Umsetzer DAC0 und DAC1

Der AD-Umsetzer bietet sehr komplexe Möglichkeiten. Abbildung 16 zeigt ein Prinzipschalt-

bild für den 12-Bit AD-Umsetzer im C8051F00 mit den betreffenden Special Function Regis-

tern.

Page 28: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 28 von 32

Abbildung 16 12-Bit AD-Umsetzer

Das komplette Subsystem umfasst einen 9-kanaligen Analog-Multiplexer, einen program-

mierbaren Verstärker und den nach dem Verfahren der sukzessiven Approximation arbeiten-

den 12-Bit AD-Umsetzer. Integriert sind weiterhin eine Track&Hold-Stufe sowie ein Fenster-

komparator.

Durch die vorgenommen Initialisierung arbeiten alle Eingänge separat (single-ended) und

der Analog-Multiplexer schaltet AIN0 an den programmierbaren Verstärker, dessen Verstär-

kung auf 1 gesetzt wurde. SYSCLK dient als Takt für den AD-Umsetzer. Arbeitet der

C8051F000 mit höheren Taktfrequenzen, dann kann die Taktfrequenz des AD-Umsetzers

auch herabgesetzt werden (SYSCLK/2 u.s.w.). Die Taktfrequenz der AD-Umsetzung sollte 2

MHz nicht überschreiten.

Für die Triggerung der AD-Umsetzung gibt es wiederum verschiedene Möglichkeiten:

1. Steuerung über das Bit ADBUSY im Register ADC0CN

2. Timer3 Overflow

3. Steigende Flanke des Signals CNVSTR (externer Trigger)

4. Timer2 Overflow

Page 29: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 29 von 32

Im Programmbeispiel wurde die Triggerung über das Bit ADBUSY gewählt. Dieses Bit ist

zum Start der AD-Umsetzung zu setzen. Nach Abschluss der AD-Umsetzung setzt der AD-

Umsetzer dieses Bit zurück. Das Ergebnis der AD-Umsetzung steht dann zum Auslesen be-

reit.

In der Subroutine Read_adc() sind die Schritte

• Start der AD-Umsetzung durch Setzen von ADBUSY

• Warten auf das Ende der AD-Umsetzung durch Abfrage von ADBUSY

• Auslesen der Ergebnisbytes

wiederzufinden.

Das Hauptprogramm selbst besteht nur aus einer leeren Endlosschleife. Das Beschreiben

des DA-Umsetzers und das Auslesen des AD-Umsetzers werden durch den Timerinterrupt

gesteuert.

Die betreffende Interrupt Service Routine umfasst

• Toggeln der LED („Lebenszeichen“),

• Beschreiben des DA-Umsetzers (mit einem Indexwert),

• Kurze Verzögerung zum Einschwingen der Analog-Ausgänge,

• Start und Abfrage des AD-Umsetzers,

• Erhöhen des Indexwertes (für den nächsten Zyklus).

Durch diesen Zyklus wird die gesamte Kennlinie des DA-AD-Subsystems durchfahren.

Setzt man nach dem Download des Hex-Files an das Ende der Interrupt Service Routine

einen Breakpoint, dann können die Ergebnisse direkt im Speicher verfolgt werden. Abbildung

17 zeigt das Setzen des Breakpoint in der CYGNAL Entwicklungsumgebung.

Page 30: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 30 von 32

Abbildung 17 Breakpoint am Ende der Interrupt Service Routine

Da in der CYGNAL Entwicklungsumgebung nur das durch BASCOM-8051 erzeugte HEX

File verwendet wird, sind nicht alle komfortablen Funktionen dieser Umgebung verfügbar.

Im Disassembler wurde eine Stelle am Ende der Interrupt Service Routine gesucht. Vor dem

Pop der Register ist das beispielsweise Adresse 0189H. Aus dem Reportfile von BASCOM-

8051 erhält man die Adressen der interessierenden Variablen im RAM. Hier sind die folgen-

den Werte von Interesse:

Variable Adresse

IDX 21H ; 22H

DAC 23H ; 24H

ADC 25H ; 26H

Abbildung 17 zeigt also die Werte der Variablen nach dem ersten Interrupt. Die Variable IDX

ist bereit inkrementiert, der DA-Umsetzer wurde mit dem Wert 0 beschrieben, während der

AD-Umsetzer aber einen Wert 1BH erkannt hat.

Schrittweise kann nun die Kennlinie der DA-AD-Umsetzung aufgenommen werden.

Abbildung 18 zeigt diese Kennlinie. ADU bezeichnet die Resultate der AD-Umsetzung, wäh-

Page 31: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 31 von 32

rend DAU den in den DA-Umsetzer geschriebenen Ausgangswert bezeichnet. Abbildung 19

hingegen zeigt den resultierenden Fehler.

0

512

1024

1536

2048

2560

3072

3584

4096

0

512

1024

1536

2048

2560

3072

3584

DAU

AD

U

0

5

10

15

20

25

30

0

512

1024

1536

2048

2560

3072

3584

DAU

AD

U -

DA

U

Abbildung 18 Kennlinie ADU - DAU Abbildung 19 Linearitätsfehler ADU - DAU

Der mittlere Fehler liegt bei 21 Counts, d.h. bei einem Quantisierungsschritt von 0,59 mV

sind das etwa 12,46 mV. Dieser Fehler spiegelt aber nicht zwangsläufig den Fehler des AD-

Umsetzers wieder, sondern wird weitgehend durch den Schaltungsaufbau bestimmt. Mit an-

deren Worten, will man die Genauigkeit der 12-Bit AD-Umsetzung voll ausnutzen, dann wer-

den an Layout und Schaltungsaufbau hohe Forderungen gestellt.

Zur Verdeutlichung der hier verwendeten Hardware ist abschliessend noch das Schaltbild

des CYGNAL Entwicklungsboards gezeigt.

Alle weiteren Informationen können der Webseite des Herstellers CYGNAL Integrated Pro-

ducts, Inc. [www.cygnal.com] entnommen werden.

Page 32: C8051F0xx Mikrocontroller und BASCOM-8051ckuehnel.ch/Download/Cygnal.pdf · Cygnal.doc 12. Februar 2002 Seite 1 von 32 C8051F0xx Mikrocontroller und BASCOM-8051 Dr. Claus Kühnel

Cygnal.doc 12. Februar 2002 Seite 32 von 32