; ZONA DE DATOS **********************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
MensajeApuntado ; Va a guarda la dirección del mensaje apuntado.
ENDC
; Define dónde se sitúan las salidas.
#DEFINE Salida1 PORTA,0
#DEFINE Salida2 PORTB,1
#DEFINE Salida3 PORTB,2
#DEFINE Salida4 PORTB,3
#DEFINE Shdw PORTB,0
#DEFINE Entrada1 PORTB,4 ; Entradas PORTB
#DEFINE Entrada2 PORTB,5
#DEFINE Entrada3 PORTB,6
#DEFINE Entrada4 PORTB,7
TeclaNum1 EQU '1' ; Código de las teclas utilizadas.
TeclaNum2 EQU '2'
TeclaNum3 EQU '3'
TeclaNum4 EQU '4'
TeclaApagado EQU ' ' ; Código de la tecla espaciadora,(hay un espacio)
RetornoCarro EQU .13 ; Código de tecla "Enter" o "Retorno de Carro"
CambioLinea EQU .10 ; Código para el cambio de línea.
; ZONA DE CODIGOS ********************************************************************
ORG 0
goto Inicio
ORG 4 ; Aquí se sitúa el vector de interrupción para
goto LeeEntradas ; atender las subrutinas de interrupción.
Mensajes
addwf PCL,F
Mensaje0
DT " Sistema de Gestion para TN1x PTAZ Guaymas"
DT RetornoCarro, CambioLinea
DT " Comunicacion RS232-Pic16f84A Habilitada...",0x00
DT RetornoCarro, CambioLinea
Mensaje1
DT " Seleccione puerto DB9 (1-4)... ",0x00
DT RetornoCarro, CambioLinea
MensajeApagado
DT "Bus No Activo", 0x00
MensajeBUS1
DT "Activado 1er bus", 0x00
MensajeBUS2
DT "Activado 2do bus", 0x00
MensajeBUS3
DT "Activado 3er bus", 0x00
MensajeBUS4
DT "Activado 4to bus", 0x00
Inicio
call RS232_Inicializa
call RS232_LineasBlanco ; Visualiza unas cuantas líneas en blanco
;call LeeEntradas ; Lee las entradas y visualiza por primera vez.
bsf STATUS,RP0 ; Configura como entrada las 4 líneas correspondientes
bcf Salida1 ; del Puerto B respetando la configuración del
bcf Salida2 ; resto de las líneas.
bcf Salida3
bcf Salida4
bsf Entrada1
bsf Entrada2
bsf Entrada3
bsf Entrada4
bsf Shdw
bcf OPTION_REG,NOT_RBPU ; Activa las resistencias de Pull-Up del Puerto B.
bcf STATUS,RP0
movlw b'10011000' ; Habilita la interrupción RBI,INTE y la general,borra bandera de int.
movwf INTCON
movlw Mensaje0
call RS232_Mensaje
movlw Mensaje1
call RS232_Mensaje
call Apagado ; En principio todas las salidas deben estar
Principal
call RS232_LeeDato ; Espera a recibir un carácter.
call TesteaTeclado
;sleep ; Espera en modo de bajo consumo que se
goto Principal ; modifique una entrada.
; Subrutina "TesteaTeclado" -------------------------------------------------------------
; Testea el teclado y actúa en consecuencia.
TesteaTeclado
movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada.
xorlw TeclaNum1 ; ¿Es la tecla num1?
btfsc STATUS,Z
goto Enc_Num1
;
movf TeclaPulsada,W
xorlw TeclaNum2 ; ¿Es la tecla num2?
btfsc STATUS,Z
goto Enc_Num2
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaNum3 ; ¿Es la tecla num3?
btfsc STATUS,Z
goto Enc_Num3
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaNum4 ; ¿Es la tecla num4?
btfsc STATUS,Z
goto Enc_Num4 ; Sí, se desea movimiento hacia la derecha.
;
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaApagado ; ¿Es la tecla de espacio?.
btfss STATUS,Z
goto Fin ; No es ninguna tecla. Sale.
Apagado
bcf Salida1 ; Como se ha pulsado la tecla de parada se
bcf Salida2 ; desactivan todas las salidas.
bcf Salida3
bcf Salida4
movlw MensajeApagado
goto Visualiza
Enc_Num1
bsf Salida1
bcf Salida2
bcf Salida3
bcf Salida4
movlw MensajeBUS1
goto Visualiza
Enc_Num2
bcf Salida1
bsf Salida2
bcf Salida3
bcf Salida4
movlw MensajeBUS2
goto Visualiza
Enc_Num3
bcf Salida1
bcf Salida2
bsf Salida3
bcf Salida4
movlw MensajeBUS3
goto Visualiza
Enc_Num4
bcf Salida1
bcf Salida2
bcf Salida3
bsf Salida4
movlw MensajeBUS4
Visualiza
call RS232_Mensaje ; Lo visualiza en el HyperTerminal.
call RS232_LineasBlanco
Fin return
; Subrutina de Servicio a la Interrupcion" ----------------------------------------------
; Lee el estado de las entradas y las monitoriza en pantalla
LeeEntradas
bcf INTCON,GIE ; Deshabilitar interrupciones
btfsc Entrada1
goto $+3
call Bounce
call LED1
btfsc Entrada2
goto $+3
call Bounce
call LED2
btfsc Entrada3
goto $+3
call Bounce
call LED3
btfsc Entrada4
goto $+3
call Bounce
call LED4
btfss Shdw
goto $+3
call Bounce
call Apagado1
goto FinVisualiza
LED1
goto Enc_Num1
return
LED2
goto Enc_Num2
return
LED3
goto Enc_Num3
return
LED4
goto Enc_Num4
return
Apagado1
goto Apagado
return
Bounce
btfss Entrada1
goto Bounce
btfss Entrada2
goto Bounce
btfss Entrada3
goto Bounce
btfss Entrada4
goto Bounce
btfsc Shdw
goto Bounce
return
FinVisualiza
bcf INTCON,RBIF ; Limpia el flag de reconocimiento de las interrupciones
bcf INTCON,INTF
bsf INTCON,GIE ; Habilitar interrupciones
retfie
;
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
INCLUDE <RETARDOS.INC>
END