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
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.
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.