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
;*****************************************************************************************************************************************************
ENDLIST 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
;
ENDpss 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
Solo por verificar , el pin Tx del primer PIC lo conectaste al pin Rx del segundo y la simulacion del proteus te funciona?
Saludos
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _BODEN_OFF & _LVP_OFF & _WRT_OFF
;
;---------------------------------------------------------------
;VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'
PDel0
PDel1
PDel2
ENDC
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN
INTERRUP
;
INICIO
;
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF STATUS,RP0 ;BANCO 1
CLRF TRISA
MOVLW H'FF'
MOVWF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW 0x06
MOVWF ADCON1
BSF TRISC,7
;
;INICIALIZACIÓN DEL MÓDULO USART
;
BSF TXSTA,BRGH
MOVLW .25
MOVWF SPBRG
BSF TXSTA,SYNC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN
;
;ACTIVACIÓN DEL MÓDULO USART
;
BSF STATUS,RP0 ;BANCO 1
BSF TXSTA,TXEN
;
;ENVÍO DE DATOS AL USART
;
BCF STATUS,RP0 ;BANCO 0
REPETIR MOVFW PORTB
MOVWF TXREG
CALL DEMORA_1S ;RETARDO DE UN SEGUNDO.
GOTO REPETIR
;
DEMORA_1S movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;
END
LIST P=16F877A
INCLUDE <P16F877A.INC>
__CONFIG _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF & _BODEN_OFF & _LVP_OFF & _WRT_OFF
;
;---------------------------------------------------------------
;VARIABLES.
;---------------------------------------------------------------
;
CBLOCK H'20'
ENDC
;
RESET ORG H'00'
GOTO INICIO
ORG H'04' ;VECTOR INTERRUPCIÓN
INTERRUP
;
INICIO
;
BCF STATUS,RP0
BCF STATUS,RP1 ;BANCO 0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
BSF STATUS,RP0 ;BANCO 1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW 0x06
MOVWF ADCON1
BSF TRISC,6
BSF TRISC,7
;
;INICIALIZACIÓN DEL MÓDULO USART
;
BSF TXSTA,BRGH
MOVLW .25
MOVWF SPBRG
BSF TXSTA,SYNC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN
;
;ACTIVACIÓN DEL MÓDULO USART
;
BSF RCSTA,CREN
;
;RECEPCIÓN DE DATOS DEL USART
;
NO_RECIBIDO BTFSS PIR1,RCIF
GOTO NO_RECIBIDO
MOVFW RCREG
MOVWF PORTA
BCF RCSTA,CREN
NOP
BSF RCSTA,CREN
GOTO NO_RECIBIDO
;
END