Keyboard Interrupt



  • Hallo da draußen,

    ich bin leider C-Niete und soll in einen Sourcecode einen Keyboard-Interrupt einfügen, mit dem ich das ein Lauflicht in meinem Programm starten und beenden lassen soll. Wäre schön, wenn mir da jemand helfen könnte.

    #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++;
    
      }
    }
    
    //Hauptprogramm
    
    void main(void) 
    {
    
      EnableInterrupts; /* enable interrupts */
      /* include your code here */
    
      DDRB = 0xFF;  // Data Direction Register Port B
                    //alle Pins des Ports B als Output
    
      LightShow();
      for(;;) {
      LightShow();
      }/*Loop forever*/
      /*Please make shure that you never leave this function*/
    
    }
    
    //  for(;;) {
    //    __RESET_WATCHDOG(); /* feeds the dog */
    //  } /* loop forever */
    //  /* please make sure that you never leave main */
    }
    

    Vielen Dank im Voraus!



  • mh hab vorn paar tagen in die klausur vom höheren semester reingeguckt.
    fach: embedded systems und deren programmierung

    da kam ne aufgabe, wo man nen gegeben src code beschreiben sollte, der sah in etwa auch so aus

    aber du erwartest jetzt nicht, dass wir deine aufgabe lösen?



  • Lösen nicht! Ich will es nur verstehen! Ich habe noch nicht einmal einen Schimmer wie so ein Interrupt aussehen soll! In den mir zur verfügung stehenden Lehrmaterial finde ich nichts darüber!!! Brauche nur einen Anhaltspunkt. Bin halt ein Analphabet im programmieren.



  • Habe es evtl gefunden. Könnte das so stimmen?

    [cpp]#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++;
    }
    }

    //Hauptprogramm

    void main(void)
    {

    EnableInterrupts; /* enable interrupts */

    **DDRA = 0x00; // Port A als Input konfigurieren
    KBSCR_MODEK = 0;//KBI-Interrupt wird bei fallender Flanke ausgelöst

    KBSCR:IMASKK = 0; //KBI-Interrupt freigeben
    KBIER = 0x01; //KBI-Interrupt freigeben**

    DDRB = 0xFF; // Data Direction Register Port B
    //alle Pins des Ports B als Output

    LightShow();
    for(;;) {
    LightShow();
    }/*Loop forever*/
    /*Please make shure that you never leave this function*/

    }

    for(;;) {
    __RESET_WATCHDOG(); /* feeds the dog */
    } /* loop forever */

    }[/cpp]

    Das fett gedruckte sollte die Lösung sein!?!

    Danke!


  • Administrator

    Mit Quellcode schreiben hat das zuerst einmal gar nichts zu tun. Und dir helfen können wir leider auch nicht wirklich gut. Du musst nämlich zuerst mal in deinen Unterlagen nachschauen gehen, wie man die Ports konfigurieren muss, damit der Interrupt auch ausgelöst wird. Dann muss du dort rausfinden, welcher Interrupt im Interrupt-Vektor ausgelöst wird und das entsprechende File anpassen gehen, damit es deine gewünschte Funktion aufruft.
    Für das Lauflicht brauchst du einen Timer, da musst du wieder deine Unterlagen anschauen und den Timer mit den entsprechenden Ports konfigurieren.

    Diese ganzen Konfigurationen sind von μC zu μC unterschiedlich, helfen können dir da nur entsprechende Referenzblätter oder, falls ihr sowas benutzen dürft, entsprechende Tools.

    Grundsätzlich hat es wirklich sehr wenig mit Programmcode schreiben zu tun. In erster Linie geht es nur um das saubere Lesen der Quellen. Am Ende dürfte die Aufgabe nur ein paar Zeilen Quellcode darstellen.
    Helfen können wir dir eben nicht, weil wir diese Quellen nicht haben. Du hast uns ja nicht einmal gesagt, mit was für einem μC ihr arbeitet.

    Zusätzliche Informationen gibt es natürlich auf Wikipedia ... naja
    Oder frag doch deinen Professor/Verantwortlichen, dass er dir das nochmals erklärt, schliesslich sollte dies seine Aufgabe sein.

    Grüssli


Anmelden zum Antworten