falls es jemanden interessiert habe nun folgenden code:
damit kann ich über RS232 Schnittstelle 2 RelaisschaltenCode:LIST P=16F628, R=DEC ; Use the PIC16F628 and decimal system #include "P16F628.INC" ; Include header file ORG 0x000 ; Program starts at 0x000 ; -------------------------------- ; SET ANALOG/DIGITAL INPUTS PORT A ; -------------------------------- movlw 7 ; lädt 7 in das W-Register movwf CMCON ; 0x1F = 7 ; ---------------- ; INITIALIZE PORTS ; ---------------- movlw b'00100000' movwf PIE1 ; USART Receive Interrupt Enable Bit movlw b'00000000' ; lädt 0 in das W-Rgeister movwf PORTA ; alle low an PORTA movlw b'00000100' ; W-Register movwf PORTB ; lädt in 0x06 bsf STATUS,RP0 ; im Register Status wird das RP0 bit auf 1 gesetzt movlw 0xFC ; schreibt den wert FE in W movwf TRISA ; bis auf RA0,RA1 alle Eingäng(high) movlw 0xFF ; alle Eingänge RB1(RX)=Eingang movwf TRISB ; ------------------------------------ ; SET BAUD RATE TO COMMUNICATE WITH PC ; ------------------------------------ ; Boot Baud Rate = 9600, No Parity, 1 Stop Bit movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps) movwf SPBRG movlw b'00000100' ; brgh = high (2) movwf TXSTA ; schaltet brgh high ein bcf STATUS,RP0 ; RAM PAGE 0 movlw b'10010000' ; schaltet seriellen port ein movwf RCSTA ; --------- ; MAIN LOOP ; --------- loop call receive call vergleich call vergleich2 call vergleich3 call vergleich4 goto loop ; ------------------------------------------- ; 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 movf RCREG,0 ; speichert das Empfangende in W movwf 0x7F ; speichert das Empfangene in Speicherzelle 7F return ; ------------------------------------------------------------- ; "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 bsf PORTA,0 ; PORTA Bit 0 wird gesetzt return vergleich2 movf 0x7F,0 ; das aus der RS232 Empfange Byte in W schreiben sublw 2 ; das Signal wird mit 2 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt btfss STATUS,Z ; wenn Zerobit gesetzt wurde, wird nächster befehl übersprungen return bsf PORTA,1 ; PORTA Bit 1 wird gesetzt return vergleich3 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 bcf PORTA,0 ; PORTA Bit 0 wird gelöscht return vergleich4 movf 0x7F,0 ; das aus der RS232 Empfange Byte in W schreiben sublw 4 ; das Signal wird mit 4 subtrahiert, wenn 0 herraus kommt wird Zero Bit gesetzt btfss STATUS,Z ; wenn Zerobit gesetzt wurde, wird nächster befehl übersprungen return bcf PORTA,1 ; PORTA Bit 1 wird gelöscht return END
einzeld an und einzeld aus
also zumindestens kalppts mit dem PIC Simulator
leider ist der PIC noch nicht angekommen
MFG vielen Dank für die Hilfe hier DHigh







Zitieren

Lesezeichen