- LiTime Speicher und Akkus         
Ergebnis 1 bis 4 von 4

Thema: PIC Assembler: Zeitschleife funktioniert nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.01.2013
    Beiträge
    9

    PIC Assembler: Zeitschleife funktioniert nicht

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,
    ich habe ein Programm zum Test einer Schaltung geschrieben. Diese Schaltung gibt nach Ansteuerung durch einen PIC16F1938 4-20 mA aus. Das funktioniert auch. Doch habe ich im Verlaufe der Tests Zeitschleifen eingebaut - sowohl mit Timer als auch ohne. Alle bisherigen Versuche enden damit, dass das Programm in der jeweils ersten Zeitschleife hängen bleibt. Nun sollte ja eine Zeitschleife das Einfachste an der ganzen Aufgabe sein. Doch finde ich keinen Fehler und werde langsam verrückt (oder war ich es vorher schon?).

    So sieht der letzte Versuch aus - sollte zwischen 8 und 12 mA hin und her schalten:

    BANKSEL APFCON
    BCF APFCON,T1GSEL
    BCF APFCON,SRNQSEL
    BCF APFCON,C2OUTSEL
    BCF APFCON,SSSEL
    BCF INTCON,GIE
    BCF INTCON,PEIE
    BANKSEL ANSELA
    BCF ANSELA,0
    BANKSEL TRISA
    MOVLW b'00000000' ;alle output
    MOVWF TRISA
    MOVLW b'00010011'
    MOVWF TRISC
    BANKSEL PORTA
    BCF PORTA,0 ;Latch auf low
    BANKSEL SSPCON1
    BCF SSPSTAT,SMP
    BSF SSPSTAT,CKE
    MOVLW b'00100001'
    MOVWF SSPCON1

    Schleife0
    BANKSEL PORTA
    BSF PORTA,1 ;Latch auf high

    MOVLW b'10000000'
    BANKSEL SSPBUF
    MOVWF SSPBUF
    Check1
    BTFSS SSPSTAT,BF
    GOTO Check1
    MOVF SSPBUF,w
    BANKSEL PORTA
    BCF PORTA,0
    MOVLW b'00000000'
    BANKSEL SSPBUF
    MOVWF SSPBUF
    Check2
    BTFSS SSPSTAT,BF
    GOTO Check2
    MOVF SSPBUF,w
    BANKSEL PORTA
    BSF PORTA,0

    MOVLW 0x1A
    MOVWF Zaehler1
    MOVLW 0x8B
    MOVWF Zaehler2
    MOVLW 0x07
    MOVWF Zaehler3
    Delay_0
    DECFSZ Zaehler1,f
    GOTO $+2
    DECFSZ Zaehler2,f
    GOTO $+2
    DECFSZ Zaehler3,f
    GOTO Delay_0

    BCF SSPSTAT,BF
    BCF SSPCON1,WCOL

    MOVLW b'01000000'
    BANKSEL SSPBUF
    MOVWF SSPBUF
    Check3
    BTFSS SSPSTAT,BF
    GOTO Check3
    MOVF SSPBUF,w
    BANKSEL PORTA
    BCF PORTA,0
    MOVLW b'00000000'
    BANKSEL SSPBUF
    MOVWF SSPBUF
    Check4
    BTFSS SSPSTAT,BF
    GOTO Check4
    MOVF SSPBUF,w
    BANKSEL PORTA
    BSF PORTA,0

    MOVLW 0x1A
    MOVWF Zaehler1
    MOVLW 0x8B
    MOVWF Zaehler2
    MOVLW 0x07
    MOVWF Zaehler3
    Delay_1
    DECFSZ Zaehler1,f
    GOTO $+2
    DECFSZ Zaehler2,f
    GOTO $+2
    DECFSZ Zaehler3,f
    GOTO Delay_1

    BCF SSPSTAT,BF
    BCF SSPCON1,WCOL

    GOTO Schleife0

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Hallo Lutzacht.

    Willkommen im Forum!

    Was genau soll eigentlich diese Warteschleife bewirken?
    Die Codierung mit drei Variablen und den skip und goto-Elementen ist für meine Augen sehr ungewöhnlich.
    Ich habe einen Verdacht, wo (d)ein Denkfehler liegen könnte: DECFSZ <variable> dekrementiert immer, auch wenn <variable> bereits null ist, springt bei null wie erwartet, hat aber keinen "Anschlag" sondern macht weiter mit 0xFF, 0xFE, ...
    Ich habe im Kopf versucht zu ergründen, was dort abgeht, aber mir wird von dem vielen Gehopse schwindelig ...
    Schreib mal noch einen Satz zum Zweck, insbesondere wozu drei Variablen gut sind. Dann kann man weitersehen.

    Gruß
    RoboHolIC

    Vielleicht eines noch: Kannst du bitte den Code in [ Code ]-Tags einschließen (Bearbeiten-Button, dann Schaltfläche "#"); dann bleibt es besser lesbar.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Ich habe es eben mal simuliert mit MPLAB 8
    Bei mir ergibt deine Warteschleife 2999997 Zyklen

    Also KEINE Endlosschleife.

    Kann es sein das Dir der Watchdog reinhaut ? und dadurch ein Reset ausgelöst wird ?

    Ich hab dein Programm jetzt komplett simuliert.
    Da hängt normalerweise nicht und es läuft soweit.
    Es kann eigentlich nur dann festhängen wenn dein "BF" Flag nicht kommt.
    Diese Zeilen habe ich in meiner Simulation alle ausgeklammert.

    Check4
    BTFSS SSPSTAT,BF
    GOTO Check4
    Geändert von Siro (09.03.2014 um 08:37 Uhr)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.01.2013
    Beiträge
    9
    Hallo RoboHolIC und Siro,

    vielen Dank für die schnelle Reaktion. Zu euren Fragen:

    a) Ich teste meine Schaltung in möglichst kleinen Schritten, einfach um Fehler leichter eingrenzen zu können. Deshalb ist dieses Programm entstanden, um die Parametrierung des AD421 zu testen. Es soll einfach zwischen zwei mA Werten hin und her schalten. Um am Multimeter etwas ablesen zu können, braucht es eine Verzögerung.
    b) Das Gehopse in der Schleife stammt nicht aus meiner Feder, sondern von einer Webseite, die ich jetzt auf die Schnelle nicht mehr finde. Davor habe ich selber zwei Warteschleifen geschrieben, eine mit und eine ohne Timer. Alle drei Versionen geben den gleichen Fehler. Das stützt Siro's Anregung, außerhalb des Codes zu suchen.

    Deshalb habe ich jetzt WDTE auf OFF gesetzt... und...

    ES GEHT!

    Vielen Dank

Ähnliche Themen

  1. Zeitschleife funktioniert nicht (mit C programmiert)
    Von pointhi im Forum PIC Controller
    Antworten: 7
    Letzter Beitrag: 03.04.2010, 09:16
  2. Servo Ansteuerung funktioniert nicht ( PIC und C)
    Von Pilotzi im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 04.11.2009, 20:42
  3. PIC Assembler in Wiki
    Von PICture im Forum PIC Controller
    Antworten: 19
    Letzter Beitrag: 17.04.2007, 10:57
  4. for-schleife in Assembler für PIC
    Von picprogger im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 10.03.2007, 09:49
  5. Antworten: 3
    Letzter Beitrag: 21.01.2007, 13:57

Berechtigungen

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

LiTime Speicher und Akkus