- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Ablauf des Programms sehr zögerlich...

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.12.2004
    Beiträge
    7

    Ablauf des Programms sehr zögerlich...

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen,
    schon hat sich das nächste Problem angebahnt:
    Ich will ein Programm schreiben, dass je nach gedrückter Taste an PortA eine LED-Folge an Port B schaltet.

    Hier der Code:
    Code:
    list p=16f870
       #include <P16f870.INC>
       __config _LVP_OFF & _HS_OSC & _WDT_ON & _PWRTE_ON & _CP_OFF & _CPD_OFF & _BODEN_ON & _DEBUG_OFF
       ORG       0x00
       NOP 
       goto    Init
       ORG     0x04         ;ein interrupt?
       retfie
    
    Init
       bsf     STATUS, RP0  ;auf Bank 1 umschalten
       bcf     STATUS, RP1  ;auf Bank 1 umschalten
       MOVLW   0x06
       MOVWF   ADCON1
       movlw   B'11111111' 
       movwf   TRISA
       movlw   B'00000000' 
       movwf   TRISB
       bcf     STATUS, RP0  ; auf Bank 0 umschalten
       clrf    PORTB
      
      start
      clrf    PORTB    ;PortB alle LED's  ausschalten, wenn keine Taste gedrückt
      nop
      schleife
      nop
      BTFSC   PORTA, 0 ;Wenn Taste1 nicht gedrückt, dann überspringen
      goto    test1    ;ansonsten PORTB entsprechend setzen
      BTFSC   PORTA, 1 ;Wenn Taste2 nicht gedrückt, dann überspringen
      goto    test2    ;ansonsten PORTB entsprechend setzen
      goto    start    ;Wenn nichts gedrückt, dann von vorne
      test1
      movlw   B'00101101'
      movwf   PORTB
      goto    schleife
      test2
      movlw   B'00010010'
      movwf   PORTB
      goto    schleife
      end
    Nun, wenn ich Taste1 drücke dauert es eine Weile bis PortB die Folge '00101101' zeigt. Das selbe Problem habe ich bei Taste2 auch...
    Kann mir jemand sagen, was ich falsch mache?

    Beschaltung an PortA mit PullDown Widerständen und Tastern. Led's und deren Vorwiderstände zwischen PortB und 0V.

    mfG. Michael

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    360
    Hallo,

    wenn Du den Watch-Dog-Timer einschaltest solltest Du diesen auch in Deiner Programmschleife mit clrwdt periodisch zurück setzen...


    Gruß André

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.12.2004
    Beiträge
    7
    Servus!

    Muss ich den WDT auch zurücksetzen, wenn er im Code garnicht verwendet wird?
    Oder sollte ich den besser ausschalten?

    mfG. Michael

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.05.2007
    Beiträge
    193
    Hallo,
    für die Versuche schalte ich den WDT immer aus, so verursacht er wenigstens keine Probleme. Erst wenn ein Programm zufriedenstellend läuft kann man sich um den WDT kümmern.
    Gruß,
    Michael

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Andre_S
    Registriert seit
    26.06.2005
    Beiträge
    360
    Zitat Zitat von Black_Arrow
    Servus!

    Muss ich den WDT auch zurücksetzen, wenn er im Code garnicht verwendet wird?
    Oder sollte ich den besser ausschalten?

    mfG. Michael
    na ja,..
    Du musst ihn nicht verwenden, aber wenn Du ihn einschaltest:
    aus Deinem File -> "__config _...& _WDT_ON..."
    dann musst Du dich auch um ihn kümmern, sonst gibts ständig einen Neustart...

    Gruß André

Berechtigungen

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

Solar Speicher und Akkus Tests