Forum: PC-Programmierung C programmiertes LED Lauflicht mit Tastenunterbrechung


von Thorsten (Gast)


Lesenswert?

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 */

}

von frank (Gast)


Lesenswert?

hast du dein problem gelöst??

von Dirk (Gast)


Lesenswert?

Hallo,

hab dasselbe Problem, wie kann man denn nun das Problem lösen??

von Bingo (Gast)


Lesenswert?

> 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.

von Max D. (max_d)


Lesenswert?

Lesen hilft bei den Hausaufgaben ;)

von Frank M. (aktenasche)


Lesenswert?

thorsten, frank und dirk sitzen bzw saßen wohl im gleichen 
hochschullabor :D

von Electronics'nStuff (Gast)


Lesenswert?

Frank Meier schrieb:
> thorsten, frank und dirk sitzen bzw saßen wohl im gleichen
> hochschullabor :D

Dacht' ich mir auch gerade :D

von Michl (Gast)


Lesenswert?

Gibt es hier mittlerweile eine Lösung?

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
Noch kein Account? Hier anmelden.