Hallo Ich komm irgendwie nicht weiter bei dem Problem Es geht um folgendes Ich habe hier ein C Code für ein Lauflicht auf einem 68HC08 Controller Der soll nun so verändert werden dass man das Lauflicht per Taste starten und stoppen kann Nun hab ich etwas gesucht und habe den KBIER gefunden aber das wars auch Keine Angabe wie das eingebunden wird Mein Versuch steht hier drunter aber ich dachte mir ich frage mit einer if Schleife den Interrupt ab während in der If Schleife eine unendlich for Schleife(;;) für das Lauflicht abläuft Ist das so machbar oder was läuft da falsch ? Ich finde jetzt auch keine Quelle die mir das näherbringt wie ich den Interrupt einbinde und dann auch noch in C Also falls ihr da was wisst gebt Bescheid Grüße Thorsten #include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ // IO_Ports int delay = 5000; static void Delay(void) { int cnt = 0; while (cnt <delay) { __RESET_WATCHDOG(); /* feeds the dog */ cnt++; } } static void LightShow(void) { unsigned char i; for (i = 1; i > 0; i <<=1) { PTB = i; // Daten über Port B ausgeben Delay(); } } void KBI_init(void) { /*This procedure is to prevent False Interrupts at initialization */ KBSCR_IMASKK = 1; /* Mask Keyboard interrupts */ KBIER_KBIE2 = 1; /* Enables pin2 of KBI by setting KBIE2(PTA2) */ KBSCR_ACKK = 1; /* Clear any false interrupts */ KBSCR_IMASKK = 0; /* Unmask Keyboard interrupts */ /* END Avoidance of False Interrupts */ /* Configures KBI Status & Control Register */ KBSCR = 0; /* IMASKK=0: Clears KBI Mask Bit (Enable Ints) /* MODEK=0: Interrupt requests on Falling Edge Only */ } interrupt 15 void _KB_Interrupt(void) { KBSCR_ACKK = 1; /* Acknowledge KB Interrupts */ PTA_PTA1 = ~PTA_PTA1; /* Toggles the LED */ } //Hauptprogramm void main(void) { EnableInterrupts; /* Interrupts freigeben */ DDRB = 0xFF; // Data Direction Register Port B // alle Pins des Port B als Output LightShow(); if KBSCR = 0 for(;;) { LightShow(); } /* loop forever */ }
Hallo, hab dasselbe Problem, wie kann man denn nun das Problem lösen??
> if KBSCR = 0 > for(;;) { > LightShow(); > } /* loop forever */ KBSCR hast Du ja schon mit vorher mit 0 vorinitialisiert, also kann da nichts mehr stoppen, sondern Deine Endlosschleife setzt ein. Erst mal mußt Du einer Taste den Interrupt zuweisen und dann während der Laufzeit prüfen, ob der Interrupt ausgelöst wurde. Kauf Dir ein C-Buch, dann dürfte vieles klarer werden was Schleifenkonstrukte, etc. betrifft.
thorsten, frank und dirk sitzen bzw saßen wohl im gleichen hochschullabor :D
Frank Meier schrieb: > thorsten, frank und dirk sitzen bzw saßen wohl im gleichen > hochschullabor :D Dacht' ich mir auch gerade :D
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.