- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Bei jedem Interrupt Unterprogramm auslößen?

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Richtig, so verstehe ich das auch.

    Aber nicht MeinLabel=Sectic sondern bitte Gosub=Sectic, wie es da steht. Sectic ist bereits der Label, und der Name ist festgelegt.

    So gesehen, ist "Sectic" die ISR der Softclock...

    Und dann, irgendwo, am hintersten Ende Deines Programms, außerhalb irgendwelcher Do-Loops, schreibst Du mal die magischen Zeilen des Labels... [-o<

    Code:
    Sectic:
    
    'Hier steht Dein Code für die Ausgabe der Uhrzeit
    'Oder toggle mal eine LED...
    
    Return
    Ich würde sagen, versuch´s doch mal so, und berichte bitte, was passiert!

    Viele Grüße

    Torsten

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    22.10.2005
    Beiträge
    63
    Hab das durch das probieren auch festgestellt mit dem label .

    Hab das jetzt mal so gemacht:

    Code:
    Config Clock = Soft , Gosub = Sectic
    
    'Gib die Uhrzeit an das LCD aus
    Sectic:
      Call Printtext(1 , 2 , Time$)
    Return
    Teilweise erhalt ich auf das LCD Fliegenschieß, dann kommt Kurzzeitig das
    was auch ausgegeben werden soll und dann nur noch schwarz, alle Pixel
    sind dann aktiviert.

    Das sieht garnicht gut aus.
    Gruß Wasi...

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Och Wasi, nun stell doch ENDLICH mal Deinen kompletten Code rein...

    Wie soll man Dir denn sonst helfen??

    Echt, manchmal geht´s hier zu wie im Pentagon...

    Aber immerhin tut sich ja mal was.

    Kommt der Display-Müll wenigstens im Sekundentakt wie erwartet?

    Geh doch mal weg von der Display-Ausgabe und lass eine LED blinken, wenn´s nicht zuviel Mühe macht.

    Grüße

    Torsten

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    22.10.2005
    Beiträge
    63
    Hab das jetzt mal mit der LED gemacht.
    Code:
    $regfile = "m128def.dat"
    $crystal = 4000000
    
    'Ports konfigurieren
    Config Portd = Output                                       'Alle Port D Pins sind Ausgänge
    Config Portb = Input                                        'Alle Port B Pins sind Eingänge
    
    Ddra = 00000100
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4
    
    Spiinit                                                     'Initialisierung der SPI-Schnittstelle
    
    Config Clock = Soft , Gosub = Sectic                        'this is how simple it is
    'assign the date to the reserved date$
    'The format is MM/DD/YY
    Date$ = "03.01.06"
    
    
    Time$ = "18:34:00"
    
    Timsk.toie0 = 0
    Assr.as0 = 1
    Tccr0 = &B00010101
    Timsk.toie0 = 1
    
    Enable Interrupts
    
    Waitms 1000
    
    Do
    
    Loop
    
    Sectic:
      If Porta.2 = 0 Then
         Toggle Porta.2
      Else
         Toggle Porta.2
      End If
    Return
    End                                                         'end program
    Und das Funktioniert auch, die Led geht an und nach 1sec wieder aus usw.

    Hab dann mal geprüft, ob das noch mit einem taster und Led an und aus
    in der Schleife geht und das läuft.
    Code:
    $regfile = "m128def.dat"
    $crystal = 4000000
    
    Declare Sub Keypressed1
    
    'Ports konfigurieren
    Config Portd = Output                                       'Alle Port D Pins sind Ausgänge
    Config Portb = Input                                        'Alle Port B Pins sind Eingänge
    
    Ddra = 00000111
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4
    
    Spiinit                                                     'Initialisierung der SPI-Schnittstelle
    
    Config Clock = Soft , Gosub = Sectic                        'this is how simple it is
    'assign the date to the reserved date$
    'The format is MM/DD/YY
    Date$ = "03.01.06"
    
    
    Time$ = "18:34:00"
    
    Timsk.toie0 = 0
    Assr.as0 = 1
    Tccr0 = &B00010101
    Timsk.toie0 = 1
    
    Enable Interrupts
    
    Waitms 1000
    
    Do
      Debounce Pina.1 , 0 , Keypressed1 , Sub                   'Taster entprellen, reagiert wenn Taste losgelassen wird
    Loop
    
    Sectic:
      If Porta.2 = 0 Then
         Toggle Porta.2
      Else
         Toggle Porta.2
      End If
    Return
    
    Sub Keypressed1
     If Porta.1 = 1 Then
        Toggle Porta.3
     Else
         Toggle Porta.3
     End If
    End Sub
    End                                                         'end program
    Also das Funktioniert ja schon mal.
    Gruß Wasi...

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Na also, geht doch, Wasi!

    Aber jetzt bitte den Code mit dem Display, wo es Probleme gab!

    Und etwas Offtopic, ich würde mal behaupten, da denkst Du zu kompliziert:

    Sectic:
    If Porta.2 = 0 Then
    Toggle Porta.2
    Else
    Toggle Porta.2
    End If
    Return
    Das sollte eigentlich genügen:
    Sectic:
    Toggle Porta.2
    Return
    Grüße

    Torsten

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    14
    Hallo Wasi.

    Versuch doch mal folgendes:
    Code:
    SECTIC:
      timeoutput=1 'timeoutput ist eine Variable, die Du im Hauptprogramm als Byte dimensionierst
      RETURN
    In Deinem Hauptprogramm überprüfst Du dann, ob die Variable timeoutput eine 1 enthält und gibst dann die Zeit aus.
    Das ganze sollte dann so ähnlich aussehen.
    Code:
    ...
    ...
    DIM timeoutput AS BYTE
    
    DO
      if 1=timeoutput then
        Printtext(1,1,TIME$)
        timeoutput=0
      End if
    LOOP
    
    SECTIC:
      timeoutput = 1
    RETURN
    
    END 'Programmende
    Ich nehme mal an, daß Du ´ne Subroutine Printtext hast, mit der Du Strings ans Display ausgibst.

    So müßte es eigentlich funktionieren.

    Gruß Ralf

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    22.10.2005
    Beiträge
    63
    Hab das ganze mal so versucht, um zu prüfen ob das ganze auch
    funktioniert und hab es mal in die schleife geschmissen.
    Code:
    Do
      Call Printtext(1 , 1 , Time$)
      Debounce Pina.0 , 0 , Keypressed2 , Sub                   'Taster entprellen
      Debounce Pina.1 , 0 , Keypressed1 , Sub                   'Taster entprellen
    Loop
    Das hat dann auch funktioniert, jedoch wird das dann zig Tausendemal
    ausgeführt.

    Hab jetzt das von @RalfP genommen und das funktioniert dann auch prima.
    Jede sekunde wird dann die Zeit ausgegeben.
    Code:
    Do
      Debounce Pinc.7 , 0 , Keypressed2 , Sub                   'Taster entprellen, reagiert wenn Taste losgelassen wird
      Debounce Pinc.6 , 0 , Keypressed1 , Sub                   'Taster entprellen, reagiert wenn Taste losgelassen wird
      If 1 = Timeout_min Then
        Aa = Time$
        Aa = Left(aa , 5)
        If &H00 = Menuel Then
          Aa = " " + Aa
          Call Printtext(1 , 6 , Aa)
        End If
        If &H00 = Menuer Then
          Aa = " " + Aa
          Call Printtext(8 , 6 , Aa)
        End If
        Timeout_min = 0
      End If
    Loop
    
    Sectic:
      Aa = Time$
      Aa = Right(aa , 2)
      A = Val(aa)
      If 0 = A Then
      Timeout_min = 1
    Danke an euch für die SUPER hilfe!
    Gruß Wasi...

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    28.10.2005
    Beiträge
    14
    Nix zu danken, gerne wieder.

    Gruß Ralf

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests