R8C Codebeispiele: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
KKeine Bearbeitungszusammenfassung
Zeile 13: Zeile 13:
void main(void)
void main(void)
{
{
   /* Port 1.0 = Pin 0 an Port 1 auf Ausgabe (Output) schalten */
   /* Port Direction Register 1.0 = Pin 0 an Port 1 auf Ausgabe (Output) schalten */
   pd1 |= 0b00000001;   
   pd1 |= 0b00000001;   


Zeile 25: Zeile 25:


       /* etwas warten... */
       /* etwas warten... */
       for (i = 0; i < 100000UL; i++)
       for (i = 0; i < 123456UL; i++)
         ;
         ;
   }
   }

Version vom 22. März 2006, 09:49 Uhr

Hello World ;-)

Das typische hello world Programm für einen Mikrocontroller ist wohl eine blinkende LED.

Mit so einem sehr einfachen Beispiel kann man grundlegend die Installation und Funktionsfähigkeit der Entwicklungstools und der Hardware testen.

Beim folgenden Beispiel wird davon ausgegangen, dass eine LED mit der Anode (+) an Port 1.0 angeschlossen ist und über einen 1KOhm Widerstand von Kathode (-) zu GND (Vss).

/* Definitionen der SFR (special funktion register) einbinden */
#include "sfr_r813.h"

void main(void)
{
   /* Port Direction Register 1.0 = Pin 0 an Port 1 auf Ausgabe (Output) schalten */
   pd1 |= 0b00000001;   

   /* für immer und ewig... */
   while(1)
   {
      unsigned long i;
   
      /* Port 1.0 zwischen HIGH und LOW umschalten */
      p1_0 ^= 1;

      /* etwas warten... */
      for (i = 0; i < 123456UL; i++)
         ;
   }
}

Externen Haupttakt einschalten

Der Haupttakt (main clock) des R8C kann von internem Oszillator (on-chip oscillator) auf einen externen Oszillator umgestellt werden. Das Verfahren dazu ist im R8C Hardware Manual Kapitel 6 beschrieben.

Es muss natürlich externe Taktquelle (z.B. Quarz) funktionsfähig angeschlossen sein. Es folgt ein Beispiel für den R8C/13, so wie er inklusive 20 MHz Quarz auf der Prozessorplatine von Glyn/Elektor zu finden ist:

/* Definitionen der SFR (special funktion register) einbinden */
#include "sfr_r813.h"

void Init_Takt_Extern(void)
{
   prc = 1;    /* 1 = Schreibschutz für wichtige SFR aufheben */

   /* Anschluss festlegen */
   cm13 = 1;   /* 1 = 'main clock' ist an XIN-XOUT Pins angeschlossen */
   cm15 = 1;   /* 1 = 'XIN-XOUT drive capacity' HIGH */
   cm05 = 0;   /* 0 = 'main clock stop bit' (XIN-XOUT) ON */
               /*      d.h. Pins XIN-XOUT nicht abschalten */

   /* Taktrate festlegen */
   cm16 = 0; 
   cm17 = 0;
   cm06 = 0;   /* 0 = 'CPU clock division' durch cm16 und cm17 bestimmt */
               /* cm16=0 und cm17=0 => kein Teilung des Taktes */

   /* kurz warten bis externe Taktquelle stabil läuft */
   asm("nop"); 
   asm("nop");
   asm("nop");
   asm("nop");

   /* CPU Takt auf gerade festgelegte externe Taktquelle umschalten */
   ocd2 = 0;   /* 0 = 'main clock' als CPU clock auswählen */

   prc = 0;    /* Schreibschutz für wichtige SFR wieder einschalten */
}