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
Lesezeichen