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
hm ohne die zeitverzögerung und bcf im vergleich 1, kann man mit 1(RS232) rb1 high und mit 3 rb1 low schaltenCode: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







Zitieren
Lesezeichen