;SISTEMA DE GOBIERNO DESDE ORDENADOR Desde el teclado de un ordenador se desea comandar
;el movimiento de una estructura mavil, segun la siguiente tabla:
;
; TECLA (Por ejemplo) MOVIMIENTO
; ------------------- ----------
; t Adelante
; b Atrás
; a Izquierda
; l Derecha
; Espacio Parada
;
;El programa debe permitir modificar facilmente en posteriores revisiones en el harware de
;la salida, Es decir, para activar las salidas conviene utilizar el direccionamiento por bit
;en lugar de por byte(utilizar instrucciones "bsf" y "bcf", en lugar de "mov")
;
;ZONA DE DATOS***********************************************************************************
;
LIST p=16f84A
#INCLUDE <P16f84A.INC>
__config _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
CBLOCK 0x0c
TeclaPulsada ;va a guardar el contenido de la tecla pulsada.
MensajeApuntado ;Va a guardar la dirección del mensaje apuntado.
ENDC
#DEFINE SalidaAdelante PORTB,3 ;Define dómde se situan las salidas.
#DEFINE SalidaAtras PORTB,2
#DEFINE SalidaIzquierda PORTB,1
#DEFINE SalidaDerecha PORTB,0
TeclaAdelante EQU 't' ;Código de las teclas utilizadas
TeclaAtras EQU 'b'
TeclaIzquierda EQU 'a'
TeclaDerecha EQU 'l'
TeclaParada EQU ' ' ;Código de la tecla espaciadora, (hay un espacio,
;tener cuidado al teclear el programa).
;ZONA DE cÓDIGOS*************************************************************************
ORG 0
Inicio
;call LCD_Inicializa
call RS232_Inicializa
bsf STATUS,RP0 ;Configura como salida las 4 lineas del
bcf SalidaAdelante ;puerto B respetando la configuracion del
bcf SalidaAtras ;resto de las líneas.
bcf SalidaIzquierda
bcf SalidaDerecha
bcf STATUS,RP0
goto Parado ;En principio todas las salidas deben estar
;apagadas.
Principal
call RS232_LeeDato ;Espera a recibir un carácter.
movwf TeclaPulsada
call TesteaTeclado
goto Principal
;"Mensajes"------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeParado
DT"Sistema PARADO",0x00
MensajeAdelante
DT"Marcha ADELANTE",0x00
MensajeAtras
DT"Marcha ATRAS",0x00
MensajeIzquierda
DT"Hacia IZQUIERDA",0x00
MensajeDerecha
DT"Hacia DERECHA",0x00
;Subrutina"TesteaTeclado"----------------------------------------------
;
;Testea el teclado y actúa en consecuencia.
TesteaTeclado
movlw TeclaAdelante ;Guarda el contenido de la tecla adelante
subwf TeclaPulsada,0 ;¿Es la tecla de movimiento hacia adelante?
btfsc STATUS,Z
goto Adelante ;Si, se desea movimiento hacia adelante
;
movlw TeclaAtras ;Guarda el contenido de la tecla atras
subwf TeclaPulsada,0 ;¿Es la tecla de movimiento hacia atras?
btfsc STATUS,Z
goto Atras ;Sí, se decea movimiento hacia atras
;
movlw TeclaIzquierda ;Guarda el contenido de la tecla Izquierda
subwf TeclaPulsada,0 ;¿Es la tecla de movimiento hacia Izquierda?
btfsc STATUS,Z
goto Izquierda ;Sí, se decea movimiento hacia Izquierda
;
movlw TeclaDerecha ;Guarda el contenido de la tecla Derecha
subwf TeclaPulsada,0 ;¿Es la tecla de movimiento hacia Derecha?
btfsc STATUS,Z
goto Derecha ;Sí, se decea movimiento hacia la derecha
;
movlw TeclaParada ;Guarda el contenido de la tecla Parado
subwf TeclaPulsada,0 ;¿Es la tecla de movimiento hacia parado?
btfsc STATUS,Z
goto Parado ;Sí, se decea movimiento hacia la Parado
goto FIN ;No es ninguna tecla de movimiento sale
Parado
bcf SalidaAdelante ;Como se a pulsado la tecla de parada se
bcf SalidaAtras ;desactivan todas las salidas
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeParado
goto Visualiza
Adelante
bcf SalidaAtras
bsf SalidaAdelante
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeAdelante
goto Visualiza
Atras
bcf SalidaAdelante
bsf SalidaAtras
bcf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeAtras
goto Visualiza
Izquierda
bcf SalidaAdelante
bcf SalidaAtras
bsf SalidaIzquierda
bcf SalidaDerecha
movlw MensajeIzquierda
goto Visualiza
Derecha
bcf SalidaAdelante
bcf SalidaAtras
bcf SalidaIzquierda
bsf SalidaDerecha
movlw MensajeDerecha
;Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
;el monitor del ordenador.
Visualiza
; movwf MensajeApuntado ;Guarda la posición del mensaje.
; call LCD_Borra ;Borra la pantalla del modulo LCD.
; movf MensajeApuntado,W ;Visualiza el mensaje en la pantalla
; call LCD_Mensaje ;del visualizador LCD.
; call RS232_LineasBlanco ;Borra la pantalla del modulo LCD.
; movf MensajeApuntado,W
; call RS232_Mensaje ;Lo visualiza en el hiperTerminal
; call RS232_LineasBlanco
FIN goto Principal
#INCLUDE <RS232.INC>
#INCLUDE <RS232MEN.INC>
;#INCLUDE <LCD_4BIT.INC>
;#INCLUDE <LCD_MENS_INC>
#INCLUDE <RETARDOS.INC>
END