Hallo Leute,

ich will mein GPS-modul an meinen PIC anschließen um die Daten auszulesen. Kommunikation läuft über UART(RS232) 8-N-1 mit 4800 Baud

vorab: dsa Modul funktioniert. wenn ichs an den Pc anschliesse über einen MAX232 schreibt er mir fleißig meinen Putty voll.

mein Problem: Ich emfange einfach keine gültigen Zeichen. ich habe eine ISR in der ich mir bei einem Empfangs-interrupt das empfange Zeichen aufm Display anzeigen lasse. nach dem reset zeigt er immer ein Leerzeichen an und löst keine weiteren interrupts aus. ein Framingerror findet dabei statt.

hier mein code:
Code:
			list		p=16f689			; benutze prozessor pic16f689
#include	<p16f689.inc>		; verwende die standard definitionen
; ------------------------------------------------------------------------
			__CONFIG	_CP_OFF & _PWRTE_ON & _WDT_OFF &  _XT_OSC	; voreinstellungen fuer fuses
;------------------------------------------------------------------------

#define 	LCD_D		PORTC
#define		LCD_E 		PORTC,5
#define		LCD_RS 		PORTC,4

Dat			equ		30h
Dat2		equ			31h
i			equ		20h
pause		equ		22h

			org		0x00
			goto		main

			org		0x04
			btfss		PIR1,RCIF
			retfie
			movfw	RCREG
			call		_lcd_char
			retfie
;---------------------------------
main		
			call		_init
			call		_lcd_init

			movlw		'O'
			call		_lcd_char
			movlw		'K'
			call		_lcd_char
			
			call		_wait2

			bsf		INTCON,GIE
stop		
			bcf		PORTC,7
			btfsc		RCSTA,FERR
			bsf		PORTC,7

			goto		stop



_init										;Bank 0
			movfw	RCREG
			clrf		PORTC
			movlw	b'10010000'	
			movwf	RCSTA
			bsf		INTCON,PEIE
			bsf		STATUS,RP0			;Bank 1
			movlw	b'00000000'
			movwf	TRISC
			bsf		PIE1,RCIE
			movlw	d'64'
			movwf	SPBRG
			movlw	0x20
			movwf	TXSTA
			bsf		STATUS,RP1			;Bank 3
			bcf		STATUS,RP0			;Bank 2
			clrf		ANSELH
			clrf		ANSEL
			bcf		STATUS,RP1

			clrf		PIR1
			clrf		PIR2
			return

;-------------------ab hier uninterressant----------------------------
; LCD-4 BIT Modus
;{
_lcd_char	bsf			LCD_RS
			goto		_lcd_out
_lcd_cmd	bcf			LCD_RS
			goto		_lcd_out
_lcd_pos	addlw		0x80
			movwf		LCD_D
			bcf			LCD_RS
			goto		_lcd_out
_lcd_out	
			movwf		Dat
			movlw		b'11110000'
			andwf		LCD_D,F
			swapf		Dat,W
			andlw		b'00001111'			
			iorwf		LCD_D,F
			call		_lcd_enter
			movlw		b'11110000'
			andwf		LCD_D,F
			movlw		b'00001111'
			andwf		Dat,W
			iorwf		LCD_D,F
			call		_lcd_enter
			return


_lcd_hex	
			movwf		23h
			swapf		23h,W
			movwf		23h
			andlw		0x0F			
			movwf		Dat2
			sublw		d'9'
			movlw		0x30
			btfss		STATUS,C
			movlw		0x37
			addwf		Dat2,W
			call		_lcd_char
			swapf		23h,0
			andlw		0x0F			
			movwf		Dat2
			sublw		d'9'
			movlw		0x30
			btfss		STATUS,C
			movlw		0x37
			addwf		Dat2,W
			call		_lcd_char
			return
;-------------------------------------------------------------------
_lcd_enter  bsf         LCD_E        	    	; LCD.E = 1
		    movlw       0x1F				    ; lcd-controller zu langsam
            movwf       pause				    ; deshalb ..
	  		decfsz      pause,F				    ; .. mal ..
            goto        $-1				         ; zeitverz. wg. 4MHz quarz			
            bcf         LCD_E        			; LCD.E = 0
            return                       		; zurueck
; ------------------------------------------------------------------------
_lcd_init  

            movlw       0x28		      		; functon set: LCD-D. mit
			call		_lcd_cmd
            movlw       b'00001111'      		; display on/off = ein
			call		_lcd_cmd					; enter instruction
            movlw       b'00000001'      		; display on/off = ein
			call		_lcd_cmd					; enter instruction
			call		_wait
            movlw       b'00000110'      		; enty mode set
			call		_lcd_cmd
            return                           	; zurueck zum aufrufer
;}

_wait;{
			movlw		d'255'
			movwf		pause
			nop
			nop
			nop
			nop
			decfsz		pause,F
			goto		$-5
			return
;}

_wait2;{
			movlw		d'255'
			movwf		i
			call		_wait
			decfsz		i
			goto		$-2
			return
;}
			end
der untere Teil mit wait-schleifen und lcd-ansteuerung kann man ignorieren, da es läuft. kann alles aufm LCD ausgeben was ich will... Kern sind die ISR und "_init"..

Sieht jemand einen fehler? wäre erfreut wenn ein alter PIC-Hase mal einen blick drauf wirft

Gruß Jango