Programmierproblem

Gast #2248662
Lesenswert?

Hallo,
ich bin ein Programmieranfänger.
Ich habe ein Problem mit dem Befehl waitms.
Ich habe folgendes Programm bisher geschrieben:
(Der Microcontroller hat NICHT-Ein-und Ausgänge.)

#include "sfr_r813.h"

long t;

void main(void)
{


pd1 = 0x0F;
pd0 = 0x0 ;



while (1)
    {
if ( p1_6==1 & p1_7==0 )
{
p1_0 = 1;
p1_1 = 1;
p1_2 = 0;
p1_3 = 0;
p0_1 = 1;
waitms (20);
p0_1 = 0;      waitms(1);
}
else
{
p1_0 = 0;
p1_1 = 0;
p1_2 = 0;
p1_3 = 0;
}
}
}

Beim Flashen zeigt es mir folgenden Fehler:

'_waitms' value is undefined

Meine Frage ist, wie ich diese Werte definieren kann?
Wenn mir jemand einen Tipp geben könnte, wäre ich sehr erfreut. :)

MfG Toni
Gast #2248788
Lesenswert?

Das Programm ist in C geschrieben.

Ich glaube, dass ich den Befehl, Funktion oder wie sich das nennt, 
selber schreiben muss.
Ich habe bereits ein solches Tutorial gesucht, aber ich finde nichts.
Es wäre hilfreich, wenn mir es jemand erklärt oder ein Tipp zum selbst 
programmieren geben könnte.

Gruß Toni
Gast #2248800
Lesenswert?

> Ich habe folgendes Programm bisher geschrieben:

Du meinst, du hast abgeschrieben, denn sonst wüsstest du was das waitms 
dort soll.

Es ist ein Funktionsaufruf an eine Funktion, die eben die angegebene 
Anzahl von Millisekunden warten soll.

Die musst du nun selber schreiben, denn niemand weiß, wie schnell dein 
R8C/13 läuft, ob mit 125kHz wie nach dem Einschalten, oder mit 20MHz wie 
nach dem umschalten

   // Bis jetzt laeuft der Prozessor noch mit internem 128kHz durch 8 
Takt
   prc0 = 1;
   cm13 = 1;
   cm15 = 1;
   cm05 = 0;
   cm16 = 0;
   cm17 = 0;
   cm06 = 0;
   asm("nop");
   asm("nop");
   asm("nop");
   asm("nop");
   ocd2 = 0;
   prc0 = 0;
   // Und jetzt laeuft alles mit 20MHz

waitms könnte man bei 20MHz so implementieren:

//*************************************   Wartezeit in Millisekunden
//   wait_ms   (1);                    //    1.1 msec
//   wait_ms  (10);                    //   11.5 msec
//   wait_ms (100);                    //    115 msec
//   wait_ms(1000);                    //    990 msec
void wait_ms(long millisec)            //  warte milli-sec
{
   long z;

   millisec = millisec * 510;
   for( z=0; z<millisec; z++ ) {}      //  ms Zählschleife bei 20MHz
}

bei 125kHz ist die 510 eben eine grössere Zahl,
so 81600 damit es halbwegs passt.


pd0 auf 0 zu setzen und damit die Port-Pins zu Eingängen zu erklären und 
dann Ausgaben an Port 0 zu machen mit
p0_1 = 1;
p0_1 = 0;
ist übrigens witzlos.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren