jo vielen dank nochmal
nu klappts auch mit dem PIC Simulator
ist echt besser so zu vergleiche so kann eigentlich jedes bit auswertenCode: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 0xFE ; schreibt den wert FE in W movwf TRISA ; bis auf RA0 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 ; wait for a char call vergleich goto loop ; ; ------------------------------------------- ; SIGNALE VON DER RSR232 SCHNITTSTELLE EMPFANGEN ; ------------------------------------------- ; This routine does not return until a character is received. ; 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,W ; speichert das empfangende in W return ; ; ------------------------------------------------------------- ; "VERGLEICHT" DIE BEIDEN SIGNALE ; ------------------------------------------------------------- ; vergleich sublw 1 bcf PORTA,0x0 btfss STATUS,Z ;könnte auch mit einer Speicherzelle subtrahier return bsf PORTA,0x0 return END
bin mal gespant wie das in der praxis klappt...
in dem code steht ja 1 stopbit no parity ist das standart oder kann man das wo einstellen ?
und sonn watchdog timer sollte man das mit reinnehmen ?
mfg DHigh







Zitieren

Lesezeichen