falls es jemanden interessiert habe nun folgenden code:
Code:
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
damit kann ich über RS232 Schnittstelle 2 Relaisschalten
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
Lesezeichen