Comunicacion bascula pic

Hola, pido ayuda para la comunicacion de una bascula, especificamente un sartorius, que me manda constantemente bytes a mi pic 16f877, el problema esta en q como sabemos este pic tiene un buffer de la uart de
2 bytes de largo, y un tercero antes de q se desborde, lo q intento hacer es sensar constantemente el peso q me llega de la bascula, cuando tenga un valor especifico me cierre abra un bit (RB0), para tratar de guardar los diferentes bytes use un cogido que ya habian publicado antes, bueno primero los parametros
9600,sin paridad,crystal 4mhz, 8 bits, pic
9600,impar,por software, 8 bits, bascula la bascula utiliza un db25 por lo cual tuve q puentear el CTS y el DTR

Ahora si la rutina

Código:
	LIST	P=16F877	;Se indica el modo de procesador
		
		RADIX	HEX		;Sistema de numeracion hexadecimal

		INCLUDE	<P16f877.inc>	;se incluye la definicion de los
					;registros internos
DATO1		EQU	20h
DATO2		EQU	21h
DATO3		EQU	22h
DATO4		EQU	23h
DATO5		EQU	24h
DATO6		EQU	25h
CONTA		EQU	26h
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
		ORG	0x00		;Inicio en el Vector de Reset
		
		goto	INICIO		;Va a la primera instruccion del
					;programa

;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>

		ORG	0x04		;Vector de interrupcion


INTER	btfss 	PIR1,RCIF ;si no es la interrupcion de 
		goto 	SALE ;recpcion, no lo tratamos 
		movlw 	0x00 
		subwf 	CONTA,W ;es el dato 1? 
		btfsc 	STATUS,Z 
		goto 	DATOS1 
		movlw 	0x01 
		subwf 	CONTA,W ;es el dato 2? 
		btfsc 	STATUS,Z 
		goto 	DATOS2 
		movlw 	0x02 
		subwf 	CONTA,W ;es el dato 3? 
		btfsc 	STATUS,Z 
		goto 	DATOS3 
		movlw 	0x03 
		subwf 	CONTA,W ;es el dato 4? 
		btfsc 	STATUS,Z 
		goto 	DATOS4
		movlw 	0x04 
		subwf 	CONTA,W ;es el dato 5? 
		btfsc 	STATUS,Z 
		goto 	DATOS5
		movlw 	0x05 
		subwf 	CONTA,W ;es el dato 6? 
		btfsc 	STATUS,Z 
		goto 	DATOS6 
		goto 	SALE 
	
DATOS1 	movf 	RCREG,W 
		movwf 	DATO1 ;guardamos el dato 
		movlw 	0x01 
		addwf 	CONTA,F ;incrementamos el contador 
		goto 	SALE

DATOS2 	movf 	RCREG,W 
		movwf 	DATO2 ;guardamos el dato 
		movlw 	0x01 
		addwf 	CONTA,F ;incrementamos el contador 
		goto 	SALE 

DATOS3 	movf 	RCREG,W 
		movwf 	DATO3 ;guardamos el dato 
		movlw 	0x01 
		addwf 	CONTA,F ;incrementamos el contador 
		goto 	SALE 

DATOS4	movf 	RCREG,W 
		movwf 	DATO4 ;guardamos el dato
		movlw	34h
		subwf	DATO4,W
		btfsc	STATUS,Z
		call	VALVULA 
		movlw 	0x01 
		addwf 	CONTA,F ;incrementamos el contador 
		goto 	SALE		

DATOS5	movf 	RCREG,W 
		movwf 	DATO5 ;guardamos el dato 
		movlw 	0x01 
		addwf 	CONTA,F ;incrementamos el contador 
		goto 	SALE

DATOS6	movf 	RCREG,W 
		movwf 	DATO6 ;guardamos el dato 
		clrf 	CONTA ;borramos el contador 
		goto 	SALE 

SALE 	bcf 	PIR1,RCIF 
		retfie 		
		

;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>

INICIO		clrf	PORTB		;Limpia salidas
		clrf	PORTC

		bsf	RCSTA,SPEN	;se activa la USART
		bsf	STATUS,RP0	;Cambio al banco 1 ------------------
		bcf	STATUS,RP1
		
		clrf	TRISB		;Puerta B como salida
		clrf	TRISB		;Puerta B como salida
		movlw	b'10011111'	;RC7/Rx entrada,
		movwf	TRISC 		;RC6/Tx	salida y RC5 Salida.

		movlw	b'00000100'	;Configuracion USART
		movwf	TXSTA		;y activacion de transmision
		movlw	.25		;9600 baudios
		movwf	SPBRG
		bsf	PIE1,RCIE	;Habilitacion interrupcion RX
		bcf	STATUS,RP0	;Cambio al banco 0 -----------------
		
		bsf	RCSTA,SPEN	;se activa la USART
		
		movlw	b'10010000'	;Configuracion de la usart 
		movwf	RCSTA		;para recepcion continua
		
		movlw	b'11000000'	;Habilitacion para las 
		movwf	INTCON		;interrupciones generales
		
		
		
BUCLE		goto	BUCLE		;espera aqui hasta que salte la int.


;<<<<<<----------------------- OTRAS RUTINAS ------------------------->>>>>>>
		
VALVULA
		bcf		PORTB,6
		bsf		PORTB,0
		return
		
		
		END

El problema es q probando este programa por la pc cuando mando un 4 o un 32h abre luego luego el puerto
pero yo solo quiero q lo haga cuando halla un 4 en el byte 4 q le envio no antes ni despues, probado con la bascula no lo hace siempre unas veces tarda mas y otras menos pero no cuando deberia.

La bascula me envia constantemente los bytes nc si eso pueda producir un sobreflujo, y alguien sabe arreglar eso
Si alguien a intentado algo similar le agradeceria su ayuda.
Gracias.
 
mta, no le he entendido chido a tu código, no sé si estoy ciego pero no veo donde mandas el dato del PIC a la PC.
Creo que tu problema es porque en tu contador puede haber basura, antes de activar las interrupciones limpia el registro del contador: 'clrf CONTA'
Buena Vibra!
 
Gracias por responder, pero yo no estoy conectando a la pc yo lo estoy conectando directo a la bascula y no tengo q mandar nada y pues ya trate con limpiar el conta, y sigue igual.

Si de algo sirve este es el codigo ascii q me manda la bascula µ°®1 g
esos bytes los tengo q comparar para saber si llegue al peso...
 
Atrás
Arriba