Estoy intentando programar un pic 16F84A , he conectado 6 entradas y quiero que cuando se active me envie un codigo por una salida RS232. He hecho las librerias de comunicación y para que escriba en el hiperterminal pero el programa principal tengo algunos problemas. Me envía cosas raras cada vez que una entrada se activa.
Alguien me puede ayudar??Saludos
Adjunto el programa:
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
ENDC
ENTER EQU .13 ; Código de tecla "Enter" o "Retorno de Carro".
CAMBIO_LINEA EQU .10 ; Código para el cambio de línea.
#DEFINE Entrada0 PORTB,2
#DEFINE Entrada1 PORTB,3
#DEFINE Entrada2 PORTB,4 ; Define dónde se sitúan las entradas.
#DEFINE Entrada3 PORTB,5
#DEFINE Entrada4 PORTB,6
#DEFINE Entrada5 PORTB,7
; ZONA DE CODIGOS ********************************************************************
ORG 0
goto Inicio
ORG 4 ; Aquí se sitúa el vector de interrupción para
goto LeeEntradasVisualiza ; atender las subrutinas de interrupción.
Mensajes ; Los mensajes no deben sobrepasar las 256
addwf PCL,F
Mensaje1
DT " 1 "0x00
Mensaje2
DT " 2 "0x00
Mensaje3
DT " 3 "0x00
Mensaje4
DT " 4 "0x00
Mensaje5
DT " 5 "0x00
Mensaje6
DT " 6 "0x00
Mensaje7
DT " 7 "0x00
Mensaje8
DT " 8 "0x00
Mensaje9
DT " 9 "0x00
Mensaje10
DT " 10 "0x00
Mensaje11
DT " 11 "0x00
Mensaje12
DT " 12 "0x00
Inicio
call RS232_Inicializa
bsf STATUS,RP0 ; Configura como entrada las 4 líneas correspondientes
bsf Entrada0
bsf Entrada1
bsf Entrada2 ; del Puerto B respetando la configuración del
bsf Entrada3 ; resto de las líneas.
bsf Entrada4
bsf Entrada5
bcf OPTION_REG,NOT_RBPU ; Activa las resistencias de Pull-Up del Puerto B.
bcf STATUS,RP0
call RS232_LineasBlanco ; Visualiza unas cuantas líneas en blanco
call RS232_LineasBlanco ; para limpiar la pantalla.
movlw b'10001000' ; Habilita la interrupción RBI y la general.
movwf INTCON
Principal
sleep ; Espera en modo de bajo consumo que se
goto Principal ; modifique una entrada.
; Subrutina de Servicio a la Interrupcion" ----------------------------------------------
;
; Lee el estado de las entradas y las monitoriza en la pantalla del HyperTerminal.
LeeEntradasVisualiza
call RS232_LineasBlanco
call RS232_Mensaje ; Lo visualiza en el ordenador.
LeeEntrada5
btfss Entrada5 ; ¿Entrada = 1?, ¿Entrada = Abierta?
goto Entrada5Cerrado ; No, está cerrada.
call Visualiza12
goto FinVisualiza
Entrada5Cerrado
call Visualiza6
LeeEntrada4
btfss Entrada4 ; Se repite el procedimiento para las
goto Entrada4Cerrado ; demás entradas.
call Visualiza11
goto FinVisualiza
Entrada4Cerrado
call Visualiza5
LeeEntrada3
btfss Entrada3
goto Entrada3Cerrado
call Visualiza10
goto FinVisualiza
Entrada3Cerrado
call Visualiza4
LeeEntrada2
btfss Entrada2
goto Entrada2Cerrado
call Visualiza9
goto FinVisualiza
Entrada2Cerrado
call Visualiza3
LeeEntrada1
btfss Entrada1
goto Entrada2Cerrado
call Visualiza8
goto FinVisualiza
Entrada1Cerrado
call Visualiza2
LeeEntrada0
btfss Entrada0
goto Entrada0Cerrado
call Visualiza7
goto FinVisualiza
Entrada0Cerrado
call Visualiza1
FinVisualiza
call RS232_LineasBlanco
bcf INTCON,RBIF ; Limpia el flag de reconocimiento de la
retfie ; interrupción.
;
Visualiza1
movlw Mensaje1 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza2
movlw Mensaje2 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza3
movlw Mensaje3 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza4
movlw Mensaje4 ; Visualiza
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza5
movlw Mensaje5 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza6
movlw Mensaje6 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza7
movlw Mensaje7 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza8
movlw Mensaje8 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza9
movlw Mensaje9 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza10
movlw Mensaje10 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza11
movlw Mensaje11 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
Visualiza12
movlw Mensaje12 ; Visualiza el
call RS232_Mensaje ; en el HyperTerminal.
return
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
INCLUDE <RETARDOS.INC>
END