Autor Tema: Problema con el usart.  (Leído 7835 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Problema con el usart.
« en: 16 de Agosto de 2009, 14:01:00 »
Estoy atorado en una problema y no puedo encontrar la solución. Por eso recurro a ustedes.
Como sabrán, estoy haciendo una estación automática que me enviará los datos por rf al receptor que estará dentro de mi casa.

Estoy tratando de comunicar a dos pic 16F877 entre sí, por medio de la USART y no logro nada. Para saber si transmiten y reciben, he colocado un led a cada micro para que me encienda cuando transmite o recibe un dato respectivamente. El led del transmisor, prende y apaga como debe ser, pero el led que se activa en la interrupción, no se enciende y además, no se actualiza los datos en el LCD.

Les muestro una parte del código en la cual, está la parte de la comunicación, la otra parte es trabajo adicional del pic.

Tx

Código: [Seleccionar]
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF & _WRT_OFF
ERRORLEVEL -302
;
;---------------------------------------------------------------
;MACROS
;---------------------------------------------------------------
BANK0         MACRO               ;macro para la seleccion del banco 0
            BCF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM

BANK1         MACRO               ;macro para la seleccion del banco 1
            BSF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN

INICIO BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTC
CLRF PORTE
CLRF precipitación
BSF STATUS,RP0 ;BANCO 1
MOVLW B'00000001'
MOVWF TRISB ;RBO/INT ENTRADA, DEMÁS SALIDAS
MOVLW B'11000000'
MOVWF OPTION_REG
MOVLW B'10010000' ;HABILITO RB0/INT E INTERRUPCIONES GENERALES.
MOVWF INTCON
CLRF TRISC ;PUERTO C SALIDA.
CLRF TRISD ;PUERTO D SALIDA.
CLRF TRISE ;PUERTO E SALIDA.
;************************************************************************************************
;CONFIGURO EL USART: ASINCRONO, 2400 BAUDIOS, 8 BIT DE DATOS, SIN PARIDAD (SE HACE UNA SOLA VEZ Y AL PRINCIPIO DEL PROGRAMA.
;************************************************************************************************
; BCF TXSTA,SYNC
; BCF STATUS,RP0 ;BANCO 0
; BSF RCSTA,SPEN
; BSF STATUS,RP0 ;BANCO 1
; BCF TXSTA,BRGH ;BAJA VELOCIDAD.
; BCF PIE1,TXIE
; BCF TXSTA,TX9 ;8 BIT DE DATOS.
; MOVLW D'25'
; MOVWF SPBRG ;AJUSTAMOS PARA 2400 BAUDIOS.
BANK0
movlw   b'10010000'      ;Configuracion de la usart
            movwf   RCSTA            ;para recepcion continua y habilitacion de la usart
  BANK1   
         movlw   .25            ;valor para seleccionar 2400 baudios
         movwf   SPBRG
         movlw   b'00100100'      ;Configuracion USART modo alta velocidad 2400 baud y activacion de transmision
         movwf   TXSTA            ;carga valor anterior en registro asociado al generador del baud rate
;************************************************************************************************

;**************************************************************************************************
;TRANSMITIMOS LOS DATOS VÍA RF.
;------------------------------
;TX A 2400 BAUDIOS SIN PARIDAD CON BIT DE START Y DE STOP. COMUNICACIÓN SERIE ASINCRÓNICA SIN INTERRUPCIÓN
;
;PASOS A SEGUIR PARA UNA TRANSISIÓN EXITOSA:
;1- RC6 COMO SALIDA
;2- CARGAR CON D'25' A SPBRG PARA UTILIZAR 2400 BAUDIOS. (EN NUESTRO CASO)
;3- COLOCAMOS EN 0 AL BIT BRGH PARA CONFIGURARLO A BAJA VELOCIDAD.
;4- ASIGNAR SYNC=0 y SPEN=1 PARA CONFIGURAR USART COMO ASINCRONO.
;5- SI DESEAMOS INTERREPCIÓN PONEMOS A 1 EL BIT TXIE
;6- ASIGNAR TX9=0 PARA ELEGIR TRANSMISIÓN A 8 BIT (EN NUESTRO CASO).
;7- ACTIVAMOS LA TRANSMISIÓN COLOCANDO TXEN = 1. EL BIT TXIF TENDRÁ VALOR 1.
;8- CARGAMOS EL DATO A TRANSMITIR A TXREG PARA EMPEZAR A TRANSMITIR.
;9- PARA UNA NUEVA TRANSMISIÓN CHEQUEAR EL BIT TXIF DEL REGISTRO PIR1. SI ES 0 YA SE COMPLETÓ LA TRANSMISIÓN SI ES 1 NO TERMINÓ LA TRANSMISIÓN.
;----------------------------------------------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;REGISTROS PROPIOS:
;sincronización:
;---------------
;10101010 = primer dato a enviar, terminado de enviar este dato, enviamos el segundo dato
;01010101 = segundo dato a enviar, una vez enviado este dato, empezamos a trasmitir los datos sensados
;************************************************************************************************************
;PASOS QUE SEGUIREMOS NOSOTROS PARA COMPLETAR TODOS LOS DATOS A TRANSMITIR. AHORA VEREMOS COMO ES EL PROTOCOLO A UTULIZAR.
;-------------------------------------------------------------------------------------------------------------------------
;01- BANCO 1
;02- ASIGNAMOS 1 A TXEN DEL REGISTRO TXSTA (HABILITAMOS LA TRANSMISIÓN)
;03- SELECCIONAMOS EL BANCO 0
;04- CARGAMOS 10101010 A TXREG (SINCRONIZACIÓN)
;05- ¿ES 1 TXIF DEL REGISTRO PIR1?
;06- NO, VOLVEMOS AL PASO 05
;07- SI, CARGAMOS 01010101 A TXREG (SEGUNDA SINCRONIZACIÓN)
;08- ¿ES 1 TXIF DEL REGISTRO PIR1?
;09- NO, VOLVEMOS AL PASO 08
;10- VOLCAMOS temperaturaAL A TXREG
;11- ¿ES 1 TXIF DEL REGISTRO PIR1?
;12- NO, ESPERAMOS
;13- SI, VOLCAMOS temperaturaBA A TXREG
;14- ¿ES 1 TXIF DEL REGISTRO PIR1?
;15- NO, ESPERAMOS
;16- SI, VOLCAMOS humedad A TXREG
;17- ¿ES 1 TXIF DEL REGISTRO PIR1?
;18- NO, ESPERAMOS
;19- SI, VOLCAMOS v_direcciónAL A TXREG
;20- ¿ES 1 TXIF DEL REGISTRO PIR1?
;21- NO, ESPERAMOS
;22- SI, VOLCAMOS v_direcciónBA A TXREG
;23- ¿ES 1 TXIF DEL REGISTRO PIR1?
;24- NO, ESPERAMOS
;25- SI, VOLCAMOS v_velocidad A TXREG
;26- ¿ES 1 TXIF DEL REGISTRO PIR1?
;27- NO, ESPERAMOS
;28- SI, VOLCAMOS precipitaciónAL A TXREG
;29- ¿ES 1 TXIF DEL REGISTRO PIR1?
;30- NO, ESPERAMOS
;31- SI, VOLCAMOS precipitaciónBA A TXREG
;32- ¿ES 1 TXIF DEL REGISTRO PIR1?
;33- NO, ESPERAMOS
;34- SI, VOLCAMOS presiónAL A TXREG
;35- ¿ES 1 TXIF DEL REGISTRO PIR1?
;36- NO, ESPERAMOS
;37- SI, VOLCAMOS presiónBA A TXREG
;38- ¿ES 1 TXIF DEL REGISTRO PIR1?
;39- NO, ESPERAMOS
;40- BORRAMOS LAS VARIABLES DE PRECIPITACIÓN
;41- BANCO 1
;42- ASIGNAMOS 0 A TXEN DEL REGISTRO TXSTA (DESHABILITAMOS LA TRANSMISIÓN)
;43- BANCO 0
;44- VAMOS A TEMPERATURA
;-------------------------------------------------------------------------------------------------------------------------
;
TX BSF PORTC,0 ;ENCIENDO LED DE TX
BCF STATUS,RP1
BSF STATUS,RP0 ;BANCO 1
BSF TXSTA,TXEN ;HABILITAMOS
BCF STATUS,RP0 ;BANCO 0
MOVLW B'10101010'
MOVWF TXREG ;MANDAMOS LA SINCRONIZACIÓN
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVLW B'01010101' ;SI, MANDAMOS LA SEGUNDA SINCRONIZACIÓN
MOVWF TXREG
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW temperaturaAL ;SI, RECUPERAMOS LA PARTE ALTA DE LA TEMPERATURA SENSADA.
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0 ;NO, ESPERAMOS
MOVFW temperaturaBA ;SI, RECUPERAMOS LA PARTE BAJA DE LA TEMPERATURA SENSADA.
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW humedad ;SI, RECUPERAMOS LA HUMEDAD SENSADA
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW v_direcciónAL ;SI, RECUPERAMOS LA PARTE ALTA DE LA DIRECCIÓN DEL VIENTO
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW v_direcciónBA ;SI, RECUPERAMOS LA PARTE BAJA DE LA DIRECCIÓN DEL VIENTO
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW v_velocidad ;SI, RECUPERAMOS LA VELOCIDAD DEL VIENTO.
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW precipitación ;SI, RECUPERAMOS LA PARTE ALTA DE LA PRECIPITACIÓN
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW presiónAL ;SI, RECUPERAMOS LA PARTE ALTA DE LA PRESIÓN
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
MOVFW presiónBA ;SI, RECUPERAMOS LA PARTE BAJA DE LA PRESIÓN
MOVWF TXREG ;LO TRANSMITIMOS
BSF STATUS,RP0 ;BANCO 1
BTFSS TXSTA,TRMT ;¿SE COMPLETÓ LA TRANSMISIÓN?
GOTO $-1 ;NO, ESPERAMOS
BCF STATUS,RP0 ;BANCO 0
CLRF precipitación ;BORRAMOS LA PRECIPITACIÓN
BSF STATUS,RP0 ;BANCO 1
BCF TXSTA,TXEN ;DESABILITAMOS LA TRANSMISIÓN
BCF STATUS,RP0 ;BANCO 0
BCF PORTC,0 ;APAGO LED DE TX
GOTO TEMPERATURA ;VOLVEMOS A SENSAR DESDE EL PRINCIPIO.
;*****************************************************************************************************************************************************
;FIN DEL PROGRAMA
;*****************************************************************************************************************************************************
END

Noten que en la parte de la configuración de la USART hay carias instrucciones con ";" esto es de una configuración fallida.

Fin parte I de II
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #1 en: 16 de Agosto de 2009, 14:03:03 »
Rx

Código: [Seleccionar]
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG    _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _BODEN_OFF &_LVP_OFF &_CPD_OFF &_WRT_OFF
ERRORLEVEL    -302     ;para que no se notifiquen los errires por los registros fuera del banco de ram.
;
;---------------------------------------------------------------
;MACROS
;---------------------------------------------------------------
BANK0 MACRO               ;macro para la seleccion del banco 0
            BCF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM

BANK1       MACRO               ;macro para la seleccion del banco 1
            BSF   STATUS,RP0
            BCF   STATUS,RP1
            ENDM
;
;---------------------------------------------------------------
;VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'
TEMP1
TEMP2
TEMP3
TEMP4
DATO1
DATO2
DATO3
DATO4
Dividendo_c
Dividendo_b
Dividendo_a
Divisor_b
Divisor_a
Temp0
Resto_b
Resto_a
millar
centena
decena
unidad
decimo
dem1
dem2
dem3
cuenta_tabla
cursor
curdisp
poeslcd
temperaturaAL
temperaturaBA
humedad
v_direcciónAL
v_direcciónBA
v_velocidad
precipitaciónAL
precipitaciónBA
presiónAL
presiónBA
estado1
estado2
trabajoAL
trabajoBA
temp_negativo ;bit0 si es 1, la temperatura es negativa, si es 0 la temperatura es positiva.
ENDC
;
;******************************************
;BLOQUE DE MEMORIA ACCESIBLE DE TODOS LOS BANCOS 70h A 7Fh.
;******************************************
;
CBLOCK H'70'
SALVAR_W ;SALVA EL CONTENIDO DE W EN UN INTERRUPCIÓN
SALVAR_STATUS ;SALVA EL CONTENIDO DE STATUS EN UNA INTERRUPCIÓN
SALVAR_FSR ;SALVA EL CONTENIDO DE FSR EN UNA INTERRUPCIÓN
SALVAR_PCLATH ;SALVA EL CONTENIDO DE PCLATH EN UNA INTERRUPCIÓN
SALVAR_OPTION_REG ;SALVA EL CONTENIDO DE OPTION_REG EN UNA INTERRUPCIÓN
estado ;7F ESTE REGISTRO NOS PERMITE SABER SI HAY DATOS POSITIVOS Y/O NEGATIVOS PARA LA TEMPERATURA.
ENDC
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN
INTERRUP
;*****************************************************************************************************************************
;RECEPCIÓN DE DATOS POR LA USART
;*****************************************************************************************************************************
MOVWF SALVAR_W ;SALVA EL CONTENIDO DE W
SWAPF STATUS,W ;PASAMOS A W STATUS (ES CON SWAPF PARA NO AFECTAR EL BIT Z)
MOVWF SALVAR_STATUS ;SALVA EL CONTENIDO DE STATUS
SWAPF FSR,W ;PASAMOS A W FSR
MOVWF SALVAR_FSR ;SALVA FSR
SWAPF PCLATH,W ;PASAMOS A W PCLATH (Pagina de programa)
MOVWF SALVAR_PCLATH ;SALVA EL CONTENIDO DE PCLATH
BCF STATUS,RP1
BSF STATUS,RP0 ;BANCO 1
SWAPF OPTION_REG,W ;PASAMOS A W OPTION_REG (Bancos)
MOVWF SALVAR_OPTION_REG ;SALVA EL CONTENIDO DE OPTION_REG
BCF STATUS,RP0 ;BANCO 0
BTFSS PIR1,RCIF ;¿SE ACTIVÓ RECEPCIÓN USART?
GOTO SALIR ;FALSA INTERRUPCIÓN
BCF PIR1,RCIF ;SI, REESTABLECEMOS EL BIT DE RCIF
;********************************************************************************************************************************
;estado1:
; b0: 1: Se recibió la sincronización AA
; 0: No se recibió la sincronozación AA
;
; b1: 1: Se recibió ambos sincronización AA y 55
; 0: No se recibió ninguna de las sincronizaciones AA y 55
;
;estado2:
; b0: 1: Se recibió el primer dato
; 0: No se recibió ningún dato
;
; b1: 1: Se recibió el segundo dato
; 0: No se recibió ningún dato
;
; b2: 1: Se recibió el tercer dato
; 0: No se recibió ningún dato
;
; b3: 1: Se recibió el cuarto dato
; 0: No se recibió ningún dato
;
; b4: 1: Se recibió el quinto dato
; 0: No se recibió ningún dato
;
; b5: 1: Se recibió el sexto dato
; 0: No se recibió ningún dato
;
; b6: 1: Se recibió el séptimo dato
; 0: No se recibió ningún dato
;
; b7: 1: Se recibió el octavo dato
; 0: No se recibió ningún dato
;-----------------------------------------------------------------------------------------------------------------------------------
;PROTOCOLO:
;-----------
;1- Salvamos los datos de W, OPTION REG, STATUS, FSR, PCLATH.
;2- ¿HUBO INTERRUPCIÓN POR RECEPCIÓN DE USART?
;3- NO, VAMOS A SALIR Y AQUÍ SE REESTABLECEN LOS DATOS GUARDADOS ANTERIORMENTE.
;4- SI, ¿RECIBIMOS EL DATO AA?
;5- NO, SI EL DATO RECIBIDO ES AA PONEMOS A 1 EL BIT 0 DEL REG. ESTADO1, EN CASO NEGATIVO VAMOS A SALIR.
;6- SI; YA RECIBIMOS AA, AHORA ¿RECIBIMOS EL DATO 55? NO--> SI EL DATO RECIBIDO ES 55 PONEMOS A 1 EL BIT 1 DEL REG. ESTADO1, EN CASO NEGATIVO VAMOS A SALIR.
;7- SI; YA RECIBIMOS EL DATO 55.
;8- A PARTIR DE ACÁ, PREGUNTAMOS UNO POR UNO LOS DATOS YA RECIBIDOS. PREGUNTAMOS POR EL PRIMERO, SI YA LO RECIBIMOS, PREGUNTAMOS POR EL SEGUNDO Y ASÍ
;   SUSECIVAMENTE HASTA EL OCTAVO DATO, SI EL OCTAVO DATO YA LO RECIBIMOS, EL DATO A GUARDAR ES EL NOVENO QUE CORRESPONDE A LA PARTE BAJA DE LA PRESIÓN (presiónBA)
;   AL LLEGAR A ESTE PUNTO, BORRAMOS LOS DOS REGISTROS ESTADO1 Y ESTADO2.
;   EN CASO DE TOPARNOS CON LA OPCIÓN DE QUE UN DATO NO FUE RECIBIDO, LO GUARDAMOS Y MARCAMOS 1 EL BIT CORRESPONDIENTE AL REGISTRO ESTADO2
;   POR EJEMPLO, PREGUNTAMOS POR EL PRIMER DATO, SI NO LO RECIBIMOS, LO GUARDAMOS EN temperaturaAL Y PONEMOS A 1 EL BIT 0 DEL REGISTRO ESTADO2 Y VAMOS A SALIR.
;   AL RETORNAR POR OTRA INTERRUPCIÓN, PASAREMOS POR EL CONTROL DE LA SINCRONIZACIÓN Y LLEGAREMOS AL PUNTO EN QUE PREGUNTAMOS POR EL PRIMER DATO, LA RESPUESTA SERÁ
;   AFIRMATIVA AL PREGUNTAR SI RECIBIMOS EL PRIMER DATO. PREGUNTAMOS SI RECIBIMOS EL SEGUNDO DATO, AL SER NEGATIVO, GUARDAMOS EL VALOR EN temperaturaBA Y PONEMOS A 1
;   EL BIT 1 DEL REGISTRO ESTADO2.
;------------------------------------------------------------------------------------------------------------------------------------
BSF PORTC,0 ;ENCENDEMOS EL LED DE RECEPCIÓN
BTFSS estado1,0 ;¿RECIBIMOS EL DATO AA DE LA SINCRONIZACIÓN?
GOTO NO_AA ;NO, VAMOS A NO_AA PARA PREGUNTAR SI EL DATO QUE RECIBIMOS AHORA ES AA
BTFSS estado1,1 ;SI, ¿RECIBIMOS EL DATO 55 DE LA SINCRONIZACIÓN?
GOTO NO_55 ;NO, VAMOS A NO_55 PARA PREGUNTAR SI EL DATO QUE RECIBIMOS AHORA ES 55
BTFSS estado2,0 ;SI, ¿RECIBIMOS EL DATO DE temperaturaAL?
GOTO NO_TEMPAL ;NO, VAMOS A NO_TEMPAL PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,0
BTFSS estado2,1 ;SI, ¿RECIBIMOS EL DATO DE temperaturaBA?
GOTO NO_TEMPBA ;NO, VAMOS A NO_TEMPBA PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,1
BTFSS estado2,2 ;SI, ¿RECIBIMOS EL DATO DE humedad?
GOTO NO_HUM ;NO, VAMOS A NO_HUM PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,2
BTFSS estado2,3 ;SI, ¿RECIBIMOS EL DATO DE v_direcciónAL?
GOTO NO_V_DIRAL ;NO, VAMOS A NO_V_DIRAL PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,3
BTFSS estado2,4 ;SI, ¿RECIBIMOS EL DATO DE v_direcciónBA?
GOTO NO_V_DIRBA ;NO, VAMOS A NO_V_DIRBA PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,4
BTFSS estado2,5 ;SI, ¿RECIBIMOS EL DATO DE v_velocidad?
GOTO NO_V_VEL ;NO, VAMOS A NO_V_VEL PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,5
BTFSS estado2,6 ;SI, ¿RECIBIMOS EL DATO DE precipitaciónBA?
GOTO NO_PRE ;NO, VAMOS A NO_PRE PARA GUARDAR SUMARLE EL DATO RECIBIDO A precipitaciónBA Y SI HAY ACARREO, SUMAR 1 A precipitaciónAL
BTFSS estado2,7 ;SI, ¿RECIBIMOS EL DATO DE presiónAL?
GOTO NO_PREAL ;NO, VAMOS A NO_PREAL PARA GUARDAR EL DATO ACÁ Y AJUSTAMOS EL BIT ESTADO2,7
MOVFW RCREG ;SI, EL DATO RECIBIDO CORRESPONDDE A presiónBA. RECUPERAMOS EL VALOR RECIBIDO
MOVWF presiónBA ;Y LO PASAMOS A presiónBA.
CLRF estado1 ;BORRAMOS ESTE REGISTRO PARA RECIBIR DE NUEVO LA SINCRONIZACIÓN
CLRF estado2 ;BORRAMOS ESTE REGISTRO PARA RECIBIR DATOS DESDE temperaturaAL
;
SALIR BSF STATUS,RP0 ;BANCO 1
SWAPF SALVAR_OPTION_REG,W ;RESTAURA EL VALOR A OPTION_REG
MOVWF OPTION_REG
SWAPF SALVAR_PCLATH,W ;RESTAURA EL VALOR A PCLATH
MOVWF PCLATH
SWAPF SALVAR_FSR,W ;RESTAURA EL VALOR A FSR
MOVWF FSR
SWAPF SALVAR_STATUS,W ;RESTAURA EL VALOR A STATUS
MOVWF STATUS
SWAPF SALVAR_W,W ;RESTAURA EL VALOR A W
BCF PORTC,0 ;APAGAMOS EL LED DE RECEPCIÓN
RETFIE
;
NO_AA MOVLW H'AA' ;HACEMOS UNA RESTA PARA PREGUNTAR SI EL DATO DE AHORA ES AA
SUBWF RCREG,W ;RESTAMOS Y EL RESULTADO LO GUARDAMOS EN W
BTFSS STATUS,Z ;SI ES 1, EL RESULTADO ES 0, POR CONSIGUIENTE EL VALOR ES AA
GOTO SALIR ;NO, EL DATO RECIBIDO NO ES AA. VAMOS A SALIR
BSF estado1,0 ;SI, AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS.
GOTO SALIR ;NOS VAMOS.
;
NO_55 MOVLW H'55' ;HACEMOS UNA RESTA PARA PREGUNTAR SI EL DATO DE AHORA ES 55
SUBWF RCREG,W ;RESTAMOS Y EL RESULTADO LO GUARDAMOS EN W
BTFSS STATUS,Z ;SI ES 1, EL RESULTADO ES 0, POR CONSIGUIENTE EL VALOR ES 55
GOTO SALIR ;NO, EL DATO RECIBIDO NO ES 55. VAMOS A SALIR
BSF estado1,1 ;SI, AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS.
GOTO SALIR ;NOS VAMOS.
;
NO_TEMPAL MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF temperaturaAL ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,0 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_TEMPBA MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF temperaturaBA ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,1 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_HUM MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF humedad ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,2 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_V_DIRAL MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF v_direcciónAL ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,3 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_V_DIRBA MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF v_direcciónBA ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,4 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_V_VEL MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF v_velocidad ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,5 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_PRE MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
ADDWF precipitaciónBA,F ;Y LO SUMAMOS A LA PARTE BAJA DE LA PRECIPITACIÓN
BTFSS STATUS,C ;¿HUBO ACARREO?
GOTO AJUS_BIT
MOVLW .1
ADDWF precipitaciónAL,F ;SUMO 1 A LA PARTE ALTA DE LA PRECIPITACIÓN
AJUS_BIT BSF estado2,6 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR
;
NO_PREAL MOVFW RCREG ;RECUPERAMOS EL DATO RECIBIDO POR LA USART
MOVWF presiónAL ;LO GUARDAMOS EN LA MEMORIA PARA LUEGO SER MOSTRADO EN EL LCD
BSF estado2,7 ;AJUSTAMOS EL BIT PARA INDICAR QUE YA LO RECIBIMOS
GOTO SALIR

;*****************************************************************************************************
;
;************************************************************************************************
;CONFIGURO LOS PUERTOS COMO ENTRADA Y SALIDAS Y ACTIVO LA INTERRUPCIÓN.
;************************************************************************************************
;
INICIO BCF STATUS,RP0 ;BANCO 0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTC
CLRF PORTE
CLRF precipitaciónBA
CLRF precipitaciónAL
BSF STATUS,RP0 ;BANCO 1
MOVLW B'11000000' ;HABILITO INTERRUPCIONES GENERALES.
MOVWF INTCON
CLRF TRISC ;PUERTO C SALIDA.
BSF TRISC,7 ;RC7 ENTRADA.
CLRF TRISB ;PUERTO B SALIDA.
CLRF TRISD ;PUERTO D SALIDA.
CLRF TRISE ;PUERTO E SALIDA.
;************************************************************************************************
;CONFIGURO EL USART: ASINCRONO, 2400 BAUDIOS, 8 BIT DE DATOS, SIN PARIDAD (SE HACE UNA SOLA VEZ Y AL PRINCIPIO DEL PROGRAMA.
;************************************************************************************************
BANK1 
            movlw   .25            ;valor para seleccionar 9600 baudios
            movwf   SPBRG
            movlw   b'00100100'      ;Configuracion USART modo alta velocidad 9600 baud y activacion de transmision
            movwf   TXSTA            ;carga valor anterior en registro asociado al generador del baud rate
            bsf     PIE1,RCIE      ;Habilitacion interrupcion RX
           BANK0               ;Cambio al banco 0
            movlw   b'10010000'      ;Configuracion de la usart
            movwf   RCSTA            ;para recepcion continua y habilitacion de la usart
            movlw   b'11000000'      ;Habilitacion para las
            movwf   INTCON         ;interrupciones generales
;MOVLW D'25'
;MOVWF SPBRG ;AJUSTAMOS PARA 2400 BAUDIOS.
;BCF TXSTA,BRGH ;BAJA VELOCIDAD.
;BCF TXSTA,SYNC ;MODO ASINCRONO
;BCF STATUS,RP1
;BCF STATUS,RP0 ;BANCO 0
;BSF RCSTA,SPEN
;BCF RCSTA,RX9 ;8 BIT DE DATOS
;BSF RCSTA,CREN ;HABILITAMOS LA RECEPCIÓN.
;BSF STATUS,RP0 ;BANCO 1
;BSF PIE1,RCIE ;HABILITAMOS LA INTERRUPCIÓN POR RECEPCIÓN DE LA USART
;BCF STATUS,RP0 ;BANCO 0
;BCF PIR1,RCIF
;
END

Noten que en la parte que configuro a la usart, hay varias instrucciones con ";", estas instrucciones las omití porque son de una configuración fallida.


Ya he probado a modo de alta y baja velocidad y nada. Lo más extraño es que con el MPLAB, simulando la USART, entra a la interrupción, pero en la realidad jamás entra a la interrupción porque no prende ni apaga el led indicándome que no recibe nada. Los datos en el LCD se muestran perfectamente.
Si alguien quiere los hex para simularlo en el proteus, no dejen de pedirlo.

Al  momento, estoy comunicando a los pic con un cable entre ellos en sus respectivos pines. Ya cambié los PIC y nada.

Fin parte II de II
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema con el usart.
« Respuesta #2 en: 16 de Agosto de 2009, 14:25:14 »
pss si sube los archivos de simulacion, y el .asm tambien...a modo de observacion, en el tx no configuraste el pin de RX como entrada.

saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Problema con el usart.
« Respuesta #3 en: 16 de Agosto de 2009, 14:35:53 »
por si te sirve de algo yo no consegui nada de pic a pic solo con un cable, aunque "los usaba de un metro" al final le puse un optoaclopador 6n138, y por si acaso se te ha pasado, tienes unidas las dos gnd de los pic no??
el programa a simple vista, parece que por lo menos deberia encender el led al recibir un dato, guarda los registros principales, testea el flag, lo pone a cero... parece todo bien... :? a ver si tengo un rato y lo intento con dos placas que tengo por aqui   

un saludo

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #4 en: 16 de Agosto de 2009, 16:53:24 »
pss si sube los archivos de simulacion, y el .asm tambien...a modo de observacion, en el tx no configuraste el pin de RX como entrada.

saludos

No lo he configurado como entrada porque la comunicación no es bidireccional, pero haré la prueba poniéndolo como entrada por si acaso.

Alogic.on, tal vez ese es el problema que tengo. Me voy a conseguir un optoaclopador y pruebo o lo hago con un transistor por las dudas. En cuanto a la masa de los PIC comparten la misma fuente.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #5 en: 16 de Agosto de 2009, 21:06:41 »
En Tx le he puesto el pin 7 del puerto C como entrada y nada. Al mismo tiempo probé con un transistor npn el bc327 como driver entre los dos y nada. El cable es de apenas pocos cm.

Lo que hice también, fue desconectar el pic receptor y colocar un led para ver si transmite los dato y al parecer no lo hace. Es raro porque completa la instrucción en la parte de la transmisión, pero al parecer, no envía la trama el registro TXREG.

Seguiré investigando.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Problema con el usart.
« Respuesta #6 en: 17 de Agosto de 2009, 02:36:03 »
tienes posibilidad de mirar en un oscilografo?? si no solo el led en Tx deberia encenderse
esta es la rutina que uso para Tx, para enviar tramas lo que hago es llamarla muchas veces, cargala en el programa y cambia los envios del tuyo por llamadas a esta rutina y deberia funcionar,
Código: ASM
  1. ENVIAR_USART                                    ;EL DATO A TRANSMITIR ESTA ALOJADO EN W HASTA QUE TERMINE EL ULTIMO ENVIO
  2.                 BANKSEL TXSTA
  3.                 BTFSS   TXSTA,TRMT              ;SI ESTA A UNO EL REGISTRO ESTA VACIO
  4.                 GOTO    ENVIAR_USART                    ;SI ESTA A CERO, SIGUE LLENO Y A DE ESPERAR
  5.                 BANKSEL TXREG          
  6.                 MOVWF   TXREG                   ;Y CARGA EL DATO A TRANSMITIR EN TXREG
  7.                 BANKSEL TXSTA
  8.                 BSF             TXSTA,TXEN              ;ACTIVA EL ENVIO TXEN=1
  9. ESPERAR
  10.                 BANKSEL PIR1
  11.                 BTFSS   PIR1,TXIF               ;CUANDO TERMINA, SE PONE A UNO TXIF Y SALTA
  12.                 GOTO    ESPERAR                 ;ESTA INSTRUCCION, SI NO VOLVERIA A ESPERAR.
  13.                 BCF             TXSTA,TXEN
  14.                 BCF             STATUS,RP0              ;BANK 0
  15.                 BCF             STATUS,RP1             
  16.                 RETURN

por si acaso, esta es la configuracion de la usart. si no funciona solo cambiando la rutina de envio ponle esta configuracion, y luego la modificas probando a ver donde esta el problema

Código: ASM
  1. BANKSEL TRISC
  2.                 BSF             TRISC,6                 ;PUERTO C3 COMO SALIDA
  3.                 BSF             TRISC,7                 ;PUERTO C7 COMO ENTRADA
  4.                 BANKSEL SPBRG
  5.                 MOVLW   .9  
  6.                 MOVWF   SPBRG                   ;BAUD RATE A 31250
  7.  
  8.                 BANKSEL TXSTA
  9.                 BCF             TXSTA,CSRC              ;SELECCIONA RELOJ (ASINCRONO NO IMPORTA)
  10.                 BCF             TXSTA,TX9               ;DATOS DE 8 BITS
  11.                 BSF             TXSTA,TXEN              ;NO ENVIA DATOS POR AHORA
  12.                 BCF             TXSTA,SYNC              ;MODO ASINCRONO
  13.                 BCF             TXSTA,3                 ;NO IMPLEMENTADO
  14.                 BCF             TXSTA,BRGH              ;BAJA VELOCIDAD DE TRANSMISION
  15.                 BCF             TXSTA,TRMT              ;ESTADO DEL REGISTRO DE DESPLAZAMIENTO (VACIO)
  16.                 BCF             TXSTA,TX9D              ;NOVENO BIT A TRANSMITIR
  17.        
  18.                 BANKSEL RCSTA
  19.                 BSF             RCSTA,SPEN              ;HABILITA PUERTO SERIE
  20.                 BCF             RCSTA,RX9               ;BITS A RECIVIR 8
  21.                 BCF             RCSTA,SREN              ;HABILITA RECEPCION UNICA (ASINCRONO NO IMPORTA)
  22.                 BSF             RCSTA,CREN              ;HABILITA RECEPCION CONTINUA
  23.                 BCF             RCSTA,3
  24.                 BCF             RCSTA,FERR              ;NO HAY ERROR DE EMPAQUETAMIENTO
  25.                 BCF             RCSTA,OERR              ;NO HAY ERROR DE DESBORDAMIENTO
  26.                 BCF             RCSTA,RX9D              ;NOVENO BIT DE RECIVIDO
  27.                
  28.                 BANKSEL PIE1           
  29.                 BCF             PIE1,TXIE               ;DESHABILITA INTERRUPCION DE TRANSMISION
  30.                 BCF             PIE1,RCIE               ;HABILITA INTERRUPCION DE RECEPCION
  31.  
  32.                 BANKSEL PIR1
  33.                 BCF             PIR1,TXIF               ;APAGA BANDERA DE INTERRUPCION POR TRANSMISION
  34.                 BCF             PIR1,RCIF               ;APAGA BANDERA DE INTERRUPCION POR RECEPCION
  35.                                                        
  36.                 BCF             STATUS,RP0              ;CAMBIA AL BANCO 0
  37.                 BCF             STATUS,RP1


Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #7 en: 17 de Agosto de 2009, 10:53:50 »
Muchas gracias alogic.on mañana lo voy a probar y ver si funciona. Hoy estoy en el trabajo y no lo puedo hacer.
Lamentablemente, no dispongo de un osciloscopio  :8}
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Problema con el usart.
« Respuesta #8 en: 17 de Agosto de 2009, 11:30:58 »
Solo por verificar , el pin Tx del primer PIC lo conectaste al pin Rx del segundo y la simulacion del proteus te funciona?

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Problema con el usart.
« Respuesta #9 en: 17 de Agosto de 2009, 13:29:08 »
por si no lo habias visto  no es el mas rapido del mercado pero es muy barato  :mrgreen: como dicen en el post

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #10 en: 17 de Agosto de 2009, 16:22:30 »
Solo por verificar , el pin Tx del primer PIC lo conectaste al pin Rx del segundo y la simulacion del proteus te funciona?

Saludos

Si, pero no tengo Proteus, los archivos que me refería eran los .hex y el ASM para que no tengan que copiarlo nuevamente y a mano.

Alogic.on, estoy pensando en eso justamente, porque ahora me vendría al pelo o como anillo al dedo.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: Problema con el usart.
« Respuesta #11 en: 17 de Agosto de 2009, 17:15:55 »
podrias mandarme los .hex voy a simularlo en el proteus , para ver que tal.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: Problema con el usart.
« Respuesta #12 en: 18 de Agosto de 2009, 02:46:49 »
localice este post, no lo he leido detemidamente. pero a lo mejor te responde alguna cosilla. dicen que se puede conectar la usart de pic a pic directamente

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #13 en: 18 de Agosto de 2009, 12:01:26 »
Huy, diste con el calvo Alogic.on. Lo estuve revisando y me parece que viene por ese lado el problema.

Sander, por lo que dice el hilo que pego alogic, anda en proteus y no en el hardware, y cuando anda en el hardware, no anda en el proteus. De todas maneras en un ratito subo los adjuntos ya que tu posteaste antes que alogic y de seguro aún no leiste el hilo.

Ahora me voy a almorzar y luego subo los archivos.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Problema con el usart.
« Respuesta #14 en: 18 de Agosto de 2009, 14:26:40 »
Aquí subo los archivos comprimidos en rar. Ahora estoy probando lo que le sucedió a elmasvital.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.