www.mikrocontroller.net

Forum: PC-Programmierung C programmiertes LED Lauflicht mit Tastenunterbrechung


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 */

}

Autor: frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du dein problem gelöst??

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: Bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max D. (max_d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lesen hilft bei den Hausaufgaben ;)

Autor: Frank Meier (aktenasche)
Datum:

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

Autor: Electronics'nStuff (Gast)
Datum:

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

Dacht' ich mir auch gerade :D

Autor: Michl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es hier mittlerweile eine Lösung?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.