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