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
Welche Programmiersprache ? Muss das nicht erst mal copiliert werden, bevor man das Flashen kann ? MfG Turbotoni
sieht nach 8051er aus. Welcher Compiler. SDCC? Problem ist wie coder sagt. waitms() musst Du selber schreiben.
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
> 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.
> bei 125kHz ist die 510 eben eine grössere Zahl, > so 81600 damit es halbwegs passt. Äh, umgekehrt, dividieren.
Toni schrieb: > if ( p1_6==1 & p1_7==0 ) Das dürfte auch nicht das sein, was du haben möchtest. ich denke, dass es if( (p1_6==1) && (p1_7==0) ) sein sollte...
Okay Danke. :) Ich konnte mittlerweile das Problem beheben. Vielen Dank für Euere Hilfe. ;)
Toni schrieb: > Ich konnte mittlerweile das Problem beheben. Das ist ja schön, läßt du die Nachwelt dran teilhaben?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.