-
        

Ergebnis 1 bis 5 von 5

Thema: Anfänger hat fragen zu interrupts

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2007
    Ort
    Essen
    Alter
    26
    Beiträge
    5

    Anfänger hat fragen zu interrupts

    Anzeige

    Hey Leute hab mal ne Frage!

    Ich habe ein eigentlich fertiges Programm, jedoch möchte ich einen der Schalter per Interrupt abfragen, aber ich hab keinen Plan wie das gehen könnte!

    Kann mir jemand helfen?? Brauch nen Code zum konfigurieren des Schalters (im Code ist er auf Pinb.4, muss natürlich dann auf portd gesetzt werden, das ist klar)

    Code:
    '##################################################################################
    '#                                                                                #
    '#                                                                                #
    '#      Programmiert von: Andynformatics                                          #
    '#      Kontakt: siehe unten (Copyright-Informationen)                            #
    '#                                                                                #
    '#                                                                                #
    '# Um das Programm zum laufen zu bringen muss an Porta ein Display angeschlossen  #
    '# werden, mit der folgenden Konfiguration: Pin 0 = DB7, Pin 1 = DB6, Pin 2 = DB5 #
    '# Pin 3 = DB4, Pin 4 = Enable2, Pin 5 = Enable1, Pin 7 = RS.                     #
    '#                                                                                #
    '# Zudem muss an Port B an Pin 6 eine LED (LED1) und an Pin 4 ein Schalter be-    #
    '# liebiger Art angeschlossen werden (nach Möglichkeit KEIN Taster!).             #
    '#                                                                                #
    '# An Port C an Pin 6 muss ein Schalter (nach Möglichkeit ein Keylock) ange-      #
    '# schlossen werden.                                                              #
    '#                                                                                #
    '# Zudem muss an Port D an Pin 6 eine LED (LED2) angeschlossen werden werden.     #
    '#                                                                                #
    '##################################################################################
    
    '
    '----------------------------------------------------------------------------------
    '
    
    '        Allgemeine Konfigurationen
    
    ' Angaben zum Controller konfigurieren
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    '----------
    
    'Timer konfigurieren
    
    ' Timer1 konfigurieren für einen Halbsekunden-Takt
       Config Timer1 = Timer , Prescale = 256
       Enable Timer1
       Enable Interrupts
       On Timer1 Ueberlauf_timer1
       Timer1 = 3036
    
    '----------
    
    ' Ports konfigurieren
    
    ' Port A konfigurieren
    ' Das LCD (an Port A) konfigurieren
       Dim ___lcdno As Byte
       Config Lcd = 40 * 4
       Config Lcdpin = Pin , Db7 = Porta.0 , Db6 = Porta.1 , Db5 = Porta.2
       Config Lcdpin = Pin , Db4 = Porta.3 , E2 = Porta.4 , E = Porta.5
       Config Lcdpin = Pin , Rs = Porta.7
    
    ' Grundgerüst des LCDs aufbauen
       ___lcdno = 0
       Initlcd
       Cls
       Locate 1 , 1
       Lcd "Keylock: gesperrt          "
       Locate 2 , 1
       Lcd "LED 1:   aus               "
       Cursor Off
    
       ___lcdno = 1
       Initlcd
       Cls
       Locate 1 , 1
       Lcd "LED 2:   aus               "
       Locate 2 , 1
       Lcd "Uptime:                    "
       Cursor Off
    
    
    ' Port B konfigurieren
    ' Den Schalter für LED 1 an Pin 4 konfigurieren
       Config Pinb.4 = Input
       Portb.4 = 1
       Schalter Alias Pinb.4
    
    ' LED 1 auf Pin 6 konfigurieren
       Config Portb.6 = Output
       Ledgruen Alias Portb.6
    
    
    ' Port C konfigurieren
    ' Keylock an Pin 6 konfigurieren
       Config Pinc.6 = Input
       Portc.6 = 1
       Keylock Alias Pinc.6
    ' Keylockvariable, ob erst Keylock grade ein-/ausgeschaltet wurde
       Dim Keylockvar As Bit
    
    ' Port D konfigurieren
    ' LED 2 an Pin 6 konfigurieren
       Config Portd.6 = Output
       Ledrot Alias Portd.6
    
    '----------
    
    ' Variablen deklarieren
    
    ' Variablen für den Uptime-Zähler deklarieren
       Dim Uptime As Integer
       Dim Uptime_counter As Bit
    
    ' Variablen für die Umrechnung der Uptime
       Dim Mysec As Integer
       Dim Mymin As Integer
       Dim Myh As Integer
       Dim Temp As Integer
       Dim Temp2 As Integer
    
    '        Ende der Konfigurationen
    
    '
    '----------------------------------------------------------------------------------
    '
    
    '        Hauptprogramm
    
       Do
          ' Auf Keylock überprüfen
          ' Wenn Keylock aus ist Programm durchführen
          If Keylock = 1 Then
             ' Wurde Keylock grade eben eingeschaltet, dann ausgeben, das LED 2
             ' blinkt und Keylock offen ist Außerdem Keylockvar auf true setzen
             If Keylockvar = 0 Then
                ___lcdno = 0
                Locate 1 , 10
                Lcd "offen          "
                ___lcdno = 1
                Locate 1 , 10
                Lcd "blinkt         "
                Cursor Off
                Keylockvar = 1
             End If
             ' Überprüfen, ob Schalter an ist, wenn ja, LED 1 zum Leuchten bringen
             ' ansonsten LED 1 ausschalten, außerdem auf dem LCD ausgeben ob LED 1
             ' an oder aus ist
             If Schalter = 0 Then
                Ledgruen = 1
                ___lcdno = 0
                Locate 2 , 10
                Lcd "leuchtet       "
                Cursor Off
             Elseif Schalter = 1 Then
                Ledgruen = 0
                ___lcdno = 0
                Locate 2 , 10
                Lcd "aus            "
                Cursor Off
             End If
    
          '-------
    
          ' Wenn Keylock an ist dann Alle LEDs ausschalten und ausgeben, dass Key-
          ' lock angeschaltet wurde
          Else
             If Keylockvar = 1 Then
                ___lcdno = 0
                Locate 1 , 10
                Lcd "gesperrt       "
                Locate 2 , 10
                Lcd "aus            "
                ___lcdno = 1
                Locate 1 , 10
                Lcd "aus            "
                Cursor Off
                Keylockvar = 0
             End If
             Ledgruen = 0
             Ledrot = 0
          End If
    
          '-----------------
    
          'Uptime errechnen und in den Variablen "Myh", "Mymin" und "mysec" spei-
          'chern
          Temp2 = Uptime
          Myh = Temp2 / 3600
    
          Temp = Myh * 3600
          Temp2 = Temp2 - Temp
          Mymin = Temp2 / 60
    
          Temp = Mymin * 60
          Temp2 = Temp2 - Temp
          Mysec = Temp2
    
          'Uptime ausgeben, jedoch bei Zahlen kleiner 10 eine führende 0 einsetzen.
          ___lcdno = 1
          Locate 2 , 10
          If Myh < 10 Then
             Lcd "0" ; Myh
          Else
             Lcd Myh
          End If
          Lcd ":"
          If Mymin < 10 Then
             Lcd "0" ; Mymin
          Else
             Lcd Mymin
          End If
          Lcd ":"
          If Mysec < 10 Then
             Lcd "0" ; Mysec
          Else
             Lcd Mysec
          End If
          Cursor Off
       Loop
    End
    
    '        Ende Hauptprogramm
    
    '
    '----------------------------------------------------------------------------------
    '
    
    '        Definitionen von Timer-ISR und möglichen Funktionen
    
    
       ' ISR von Timer1 definieren
       Ueberlauf_timer1:
    
          ' Timer1 wieder zurücsetzen, damit GENAU eine halbe Sekunde gezählt wird
          Timer1 = 31250
    
    
          ' Led 2 umschalten (im Halbsekundentakt)
          If Keylock = 1 Then
             If Ledrot = 0 Then
                Ledrot = 1
             Elseif Ledrot = 1 Then
                Ledrot = 0
             End If
          Else
             Ledrot = 0
          End If
    
    
          ' Uptime bei jedem ZWEITEN Durchlauf um 1 erhöhen, da Timer ja im 2Hz und
          ' nicht im 1Hz-Modus läuft
          If Uptime_counter = 0 Then
             Uptime_counter = 1
          Else
             Incr Uptime
             Uptime_counter = 0
          End If
       Return
       '-----------------
    
    '
    '----------------------------------------------------------------------------------
    '
    
    
    '##################################################################################
    '#                                                                                #
    '#                                     SUPPORT                                    #
    '#                                                                                #
    '# Bei Fragen bitte an Andynformatics wenden: admin@andynformatics.de.lv          #
    '#                                                                                #
    '##################################################################################
    
    '##################################################################################
    '#                                                                                #
    '#                                © Andynformatics                                #
    '#                           (www.andynformatics.de.lv)                           #
    '#                                                                                #
    '##################################################################################
    Also!! NOchmal, bitte kurz eine Code-Ergänzung übers Forum (oder die im Programm angegebene E-Mail-Adresse) schreiben!!

    Danke, im Voraus


    -------------
    Andy91

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    schalter an interrupt ist nicht so ideal wegen dem Prellen
    aber wenns denn sein soll, schu mal in die Hilfe unter
    config intx
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2007
    Ort
    Essen
    Alter
    26
    Beiträge
    5
    Herzlichen Dank für die Antwort!! Dass das alles nicht so sinnvoll ist habe ich inzwischen auch schon bemerkt!! Hab nämlich nachgelesen, dann ausprobiert und natürlich stoppt der eingebaute timer!! Schade!! Wollte die Schalterabfrage per interrupt eigentlich noch einbauen aer das geht dann wohl nicht.
    Nya, hätt mir vielleich auch EHER einfallen können!!!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    nunja, du kannst den Int auch auf falling oder rising konfigurieren,
    sprich, nur im Moment der Schalterbetätigung wird der Int ausgelöst,
    dann nicht mehr. Dann laufen auch die Timerinterrupts wieder.
    Wenn Du den Int halt auf Level konfigurierst kommt er aus der
    Interruptroutine nicht mehr raus und alle anderen Interrupts gehen
    nur noch auf gut Glück.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.12.2007
    Ort
    Essen
    Alter
    26
    Beiträge
    5
    Jaja, aber dann müsste ich den sowohl bei falling als auch bei rising den status ändern können. Denn er soll ja beim umschalten auf 1 angehen und beim umschalten auf 0 ausgehen..... also müsste der eig mit Level konfiguriert werden. Oder kann man das machen, dass der sowohl bie falling als auch bei rising auslöst??

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •