Hallo,
für mein Studium brauche ich für eine Studienarbeit CodeWarrior. Ich
habe mir jetzt die neuste Version heruntergeladen und das gegebene
Programm abgetippt. Leider will dieses Programm nicht so funktionieren
wie in den Unterlagen. Nach vielen Stunden erfolgloser Fehlersuche wende
ich mich nun an diese Forengemeinde. Ich bin im Moment im 4. Semester an
einer FH im Bachelorstudiengang Elektro- und Informationstechnik.
Meine Codewarrior-Version ist 10.6.4.
Das Programm habe ich von den Studienunterlagen einfach abgetippt, will
aber nicht so recht laufen.
Es handelt sich um ein Lauflicht das in einer Endlosschleife immer
wieder durchlaufen werden soll. Aber immer wenn ich auf Debug drücke
kommt die Fehlermeldung das die Variable "PTB" nicht deklariert ist.
Mein Code steht unten und im Anhang. Im Anhang ist auch noch die Datei
mc9s08ac32.h und die derivative.h.
Viele Kommentare in dem Code stammen auch schon von mir.
Vielen Dank
Mein Code:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
// IO Ports
int delay = 5000; // Variable delay ist ein Integer mit Startwert
5000
static void Delay (void) // Unterprogrammm Delay,
{
int cnt =0; // Variable cnt ist ein Integer mit Startwert 0
while (cnt < delay) // Whileschleife, solange cnt kleiner ist als
delay durchlaufen
{
__RESET_WATCHDOG(); /* feed the dog */ // der Watschdog wird bei
jedem durchlaufen der While-Schleife zurückgesetzt
cnt++; // die Variable cnt wird bei jedem Durchlauf um 1 erhöht
}
} // Nachdem Unterprogamm Delay ausgeführt springe wieder
zurück wo vorher gewesen ist!!
static void LightShow(void) // Unterprogramm LightShow
{
unsigned char i; // Variable i ist unsinged char, d.h. kein
Vorzeichen von 0 bis 255, nach überlauf wieder Null
for (i = 1; i > 0; i <<= 1) // Forschleife (mit i ist 1 starten;
wiederholen solange i größer 0 ist; was <<=i bedeutet weiß ich nicht)
{
PTB = i; //Daten werden an Port B ausgegeben, woher das
Programmm dass i Binär umgewandelt
// an B ausgegeben werden muss? bei mir scheinbar nicht
Delay(); // nachdem die Lightshow einmal durchgelaufen ist
springe zum Unterprogramm Delay
} // danach wieder hierher springen, das wiederholen bis i
von 1 bis 0(256) gelaufen ist!!!
} // Wenn Unterprogramm LightShow (und auch Delay)
durchlaufen ist springe wieder zurück ins Hauptprogramm
// Hauptprogramm
void main(void) // Das Hauptprogramm main
{
// EnableInterrupts; // Interrupts nicht freigegeben
DDRB = 0xFF; // Data Direction Register Port B
// alle Pins des Port B als Output
LightShow(); // Springe zum Unterprogramm LightShow und
durchlaufe es, danach wieder hierher springen
for(;;) // Forschleife die immer wieder durchlaufen wird.
{
LightShow(); // Springe immer gleich wieder zum Unterprogrammm
LightShow
} // Endlosschleife für die LightShow
} // Bitte sicherstellen das sie nie diese
// Funktion verlassen!!
eventuell: PTB ersetzen durch PTBD DDRB ersetzen durch PTBDD obs dann wirklich läuft ist aber nochmal eine andere Frage
Tom T. schrieb: > 4. Semester an > einer FH im Bachelorstudiengang Elektro- und Informationstechnik. Lauflicht ... Ja nee, is klar.
Daniel V. schrieb: > PTB ersetzen durch PTBD Wie in der von dir angehängten MC9s08ac32.h zu sehen scheint das Register, auf welches du zugreifen möchtest, PTBD (und nicht PTB) zu heißen. Damit würde ich es mal versuchen... Grüße, Alex
Hast du in den Projekteinstellungen geschaut, dass der Compiler die header Datei finden kann? Das Verzeichnis musst du evtl. manuell hinzufügen... mfg
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.