mal was anderes ....

mein PIC hägnt sich auf oder so aufjeden fall macht er nach ner zeit nichtmehr das was er soll
könnte natürlich mit nem WachtDogTimer machen aber wollte eigentlich raus lassen.
Also RB1 geht high wenn er über RS232 binär 1 bekommt (und 3 eigentlich aus aber das war wegen was anderem und ist unwichtig)

Wenn 1 kommt wird rb1 für die eingestellte zeit high
so wenn ich aber ganz oft in der zeit 1sen schicke was das programm macht, also ohne pausen 00000001,00000001
dann hängt der sich nach 3 mal auf an nem anderen rechner 4 mal
wenn ich allerdings warte bis rb1 wieder low ist dann gehts ...

so sollte es sein:
RB1 high dann zeitverzögerung dann relais aus dann zeitverzögerung dann wieder abfrage RS232

bin am fehlersuchen aber finde nichts ... code iss ok meiner meinung nach

Code:


		LIST P=16F628, R=DEC    ; Use the PIC16F628 and decimal system 

        #include "P16F628.INC"  ; Include header file 

        
     

        ORG    0x000            ; Programmstart bei 0x000 

; --------------------------------
; SET ANALOG/DIGITAL INPUTS PORT A
; --------------------------------

		movlw 7					; lädt 7 in das W-Register
		movwf CMCON				; Comperator 

; ---------------- 
; Init der Ports
; ---------------- 
3



		bsf STATUS,RP0			; Bank 1
		movlw b'00100000'	
		movwf PIE1				; USART Receive Interrupt Enable Bit wird gesetzt (RS232 Empfang ein)
	
		bcf STATUS,RP0			; Bank 0
		movlw b'00000000'   	
        movwf PORTA				; alle low an PORTA
        
        movlw b'00000100'	
        movwf PORTB				; PORTB wird auf 00000100 gesetzt

        bsf STATUS,RP0      	; Bank 1

        movlw 0xFE				
        movwf TRISA				; bis auf RA0 alle Eingäng(high)
        movlw 0xFF 				
        movwf TRISB				; alle Eingänge RB1(RX)=Eingang 

; ------------------------------------
; BAUD RATE für Kommunikation mit dem PC wird gesetzt
; ------------------------------------
; Boot Baud Rate = 19200, No Parity, 1 Stop Bit

        movlw 0x0C              ; 0x0C=19200bps 0x19=9600bps
        movwf SPBRG				; Baud Rate 19200bps wird gesetzt
        movlw b'00000100'       ; brgh = high (2)
        movwf TXSTA             ; schaltet brgh high ein
        bcf STATUS,RP0          ; Bank 0

        movlw b'10010000'       
        movwf RCSTA				; schaltet seriellen Port ein 

; ---------
; MAIN LOOP
; ---------
	
loop    call receive       		; ruft Dateiempfang auf
		call vergleich			; ruft ersten Vergleich auf
		call vergleich2     	; ruft zweiten Vergleich auf        
        goto loop				; MAIN LOOP wird wiederholt

; -------------------------------------------
; SIGNALE VON DER RSR232 SCHNITTSTELLE EMPFANGEN
; -------------------------------------------
	
receive btfss PIR1,RCIF         ; checkt ob im register PIR1 das RCIF bit (USART Receive Interrupt Flagbit) wenn der receive buffer voll ist geht weiter
        goto receive			; das wird so lange abgefragt bis was empfangen wurde
        movf RCREG,0            ; speichert das Empfangende in W
        movwf 0x7F				; speichert das Empfangene in Speicherzelle 7F
		return					; zurück zum MAIN LOOP

; -------------------------------------------------------------
; "VERGLEICHT" DIE BEIDEN SIGNALE
; -------------------------------------------------------------

vergleich
		movf 0x7F,0					; das aus der RS232 Empfange Byte in W schreiben
		sublw 1						; das Signal wird mit 1 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt
		btfss STATUS,Z				; wenn Zerobit gesetzt wurde, wird nächster Befehl übersprungen
		return						; zurück zum MAIN LOOP
		bsf PORTA,0 				; PORTA Bit 0 wird gesetzt(Ausgang Pin 17)
		call verz							
		bcf PORTA,0 				; PORTA Bit 0 wird gelöscht(Ausgang Pin 17)
		call verz
		return						; zurück zum MAIN LOOP
			
vergleich2
		movf 0x7F,0					; das aus der RS232 Empfange Byte in W schreiben
		sublw 3						; das Signal wird mit 3 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt
		btfss STATUS,Z				; wenn Zerobit gesetzt wurde, wird nächster Befehl übersprungen
		return						; zurück zum MAIN LOOP

		bcf PORTA,0 				; PORTA Bit 0 wird gelöscht(Ausgang Pin 17)
		return						; zurück zum MAIN LOOP


; --------------- 
; Verzögerung Einstellbar 250ms 
; --------------- 
verz 	movlw   6				; einstellbar 1 = 250ms 4 = 1s
		movwf	0x20
verz2   movlw   250 
        movwf   0x21
verz3   movlw   200 
        movwf   0x22 
verz4   nop 
        nop 
        decfsz  0x22,1 
        goto    verz4				; verz4 loop = 5us 
        decfsz  0x21,1 
        goto    verz3 				; verz3 loop = 1000us
		decfsz  0x20,1
		goto    verz2				; verz2 loop = 250000us x verz1		
        return 
	
END
hm ohne die zeitverzögerung und bcf im vergleich 1, kann man mit 1(RS232) rb1 high und mit 3 rb1 low schalten