• No se han encontrado resultados

9.1 Tecla_01.asm ( Entrenador Básico 7 )

In document Entrenadores (página 161-179)

title " La pantalla del LCD visualiza el orden de la tecla pulsada utilizando la técnica de polling"

;************************************** Tecla_01.asm ******************************************************************* ; El modulo LCD visualiza el orden de la tecla pulsada expresado en decimal. Utiliza

; técnica Polling o lectura constante del puerto al que esta conectado el teclado.

; ************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;******************* Asignación de nombres de Registros de Funciones especiales a direcciones *************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;************************************** Registros ************************************************************************

CBLOCK 0x20

GUARDA_TECLA ; Registro que guarda el orden de la tecla pulsada. ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;*********************************** Sección de Configuración ******************************************************** COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado.

Principal call Teclado_LeeOrdenTecla ; Lee el teclado.

btfss STATUS,C ; Si se pulsa alguna tecla el Cy=1 y salta una instrucción.

goto Fin ; No, por tanto sale.

movwf GUARDA_TECLA ; Guarda el orden de la tecla pulsada. call Teclado_EsperaDejePulsar ; No sale hasta que levante el dedo. movf GUARDA_TECLA,W

call BIN_a_BCD ; Lo pasa a BCD. call LCD_ByteCompleto ; Visualiza en pantalla. Fin goto Principal

;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <BIN_BCD.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.2.- Tecla_02.asm

( Entrenador Básico 7 )

title " La pantalla del LCD visualiza el valor hexadecimal de la tecla pulsada utilizando la técnica de polling"

;************************************** Tecla_02.asm ******************************************************************* ; En pantalla aparece el valor hexadecimal de la tecla pulsada. Se esta leyendo constantemente

; el teclado mediante técnica Polling.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;***************** Asignación de nombres de Registros de Funciones especiales a direcciones ***************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;************************************** Registros ***********************************************************************

CBLOCK 0x20

GUARDA_TECLA ; Registro que guarda el valor de la tecla pulsada. ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado.

;************************************* Principal ************************************************************************** Principal call Teclado_LeeHex ; Lee el teclado hexadecimal.

btfss STATUS,C ; Si se pulsa alguna tecla el Cy=1 y salta una instrucción.

goto Fin ; No, por tanto, sale.

movwf GUARDA_TECLA ; Guarda el valor de la tecla pulsada. call Teclado_EsperaDejePulsar ; No sale hasta que levante el dedo. movf GUARDA_TECLA,W

call LCD_Nibble ; Visualiza el valor en pantalla. Fin goto Principal

;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC>

INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.3.- Tecl_03.asm

( Entrenador Básico 7 )

title " La pantalla del LCD visualiza el valor hexadecimal de la tecla pulsada utilizando técnicas de interrupción "

;************************************************* Tecl_03.asm ********************************************************* ; El modulo LCD visualiza el valor hexadecimal de la tecla pulsada. Para la lectura del

; teclado se utiliza la interrupción RBI o por cambio en las líneas <RB7:RB4> del Puerto B.

; ************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************** Asignación de nombres de Registros de Funciones especiales a direcciones ****************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;************************************** Registros ************************************************************************

CBLOCK 0x20

GUARDA_TECLA ; Registro que guarda el valor de la tecla pulsada. ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado. movlw b'10001000' ; Habilita la interrupción RBI y la general. movwf INTCON

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;************************************ Rutina de Interrupción "Interrup" ************************************************* Interrupcall Teclado_LeeHex ; Obtiene el valor hexadecimal de la tecla pulsada.

movwf GUARDA_TECLA ; Guarda el valor de la tecla pulsada. call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter movf GUARDA_TECLA,W

call LCD_Nibble ; Visualiza el valor en pantalla.

movf PORTB,w ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF ; mientras permanece pulsado. Limpia flag. retfie ;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.4.- Tecla_04.asm

( Entrenador Básico 7 )

title " La pantalla del LCD visualiza caracteres españoles en función de la tecla pulsada "

;************************************************** Tecla_04.asm ******************************************************* ; Supone un teclado con los 16 primeros caracteres del alfabeto español. Por tanto hay

; que cambiar la tabla respecto de los ejercicios anteriores. Lo que se va escribiendo por ; el teclado aparece en pantalla como si fuera un teclado alfabético.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************** Asignación de nombres de Registros de Funciones especiales a direcciones ****************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;*************************************** Registros ***********************************************************************

CBLOCK 0x20

GUARDA_TECLA ; Registro que guarda el valor de la tecla pulsada. ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado. movlw b'10001000' ; Habilita la interrupción RBI y la general. movwf INTCON

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;************************************ Rutina de Interrupción "Interrup" ************************************************ ; La subrutina de atención a la interrupción obtiene el valor ASCII de la tecla pulsada.

; A continuación se expone la relaci0n entre el numero de orden de la tecla y los valores ; correspondientes para el teclado supuesto.

; ORDEN DE TECLA: TECLADO UTILIZADO: ; 0 1 2 3 A B C D ; 4 5 6 7 E F G H ; 8 9 10 11 I J K L ; 12 13 14 15 M N O P

Interrupcall Teclado_LeeOrdenTecla ; Lee el Orden de la tecla pulsada movwf GUARDA_TECLA ; Guarda el orden de la tecla pulsada. call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter. movf GUARDA_TECLA,W

call Tecl_ConvierteOrdenEnASCII ; Lo convierte en su valor ASCII mediante call LCD_Caracter ; una tabla, y lo visualiza.

movf PORTB,W ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF ; Limpia flag.

retfie

;************************************ Subrutina " Tecl_ConvierteOrdenEnASCII " ************************************ Tecl_ConvierteOrdenEnASCII addwf PCL,F ; Según el teclado utilizado resulta

DT "ABCD" ; Primera fila del teclado. DT "EFGH" ; Segunda fila del teclado. DT "IJKL" ; Tercera fila del teclado. DT "MNÑO" ; Cuarta fila del teclado.

;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC>

INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.5.- Tecla_05.asm

( Entrenador Básico 7 )

title " La pantalla del LCD aparece un mensaje en movimiento y fijo en la primera línea " title " y en la segunda línea visualiza la tecla pulsada "

;************************************************* Tecla_05.asm ******************************************************** ; Primero aparece un mensaje de presentación en movimiento. Luego en la primera línea aparece

; un mensaje estático y lo que se va escribiendo por el teclado aparece en la segunda fila.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;*************** Asignación de nombres de Registros de Funciones especiales a direcciones ******************* #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;*************************************** Registros ***********************************************************************

CBLOCK 0x20

GUARDA_TECLA ; Registro que guarda el valor de la tecla pulsada. ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

movlw Mensaje presentación ; Visualiza el mensaje en movimiento. call LCD_MensajeMovimiento

call LCD_Borra ; Borra la pantalla y se sitúa en la primera línea. movlw MensajePulsa ; Visualiza el mensaje fijo de la primera línea. call LCD_Mensaje

call LCD_Linea2 ; Pasa a la segunda línea. call Teclado_Inicializa ; Configura las líneas del teclado. movlw b'10001000' ; Habilita la interrupción RBI y la general. movwf INTCON

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;************************************ Rutina de Interrupción "Interrup" ************************************************* Interrupcall Teclado_LeeHex ; Obtiene el valor hexadecimal de la tecla pulsada.

movwf GUARDA_TECLA ; Guarda el valor de la tecla pulsada. call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter. movf GUARDA_TECLA,W

call LCD_Nibble ; Visualiza el valor en pantalla.

movf PORTB,W ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF

retfie

;******************************************* Subrutina de "Mensajes" ************************************************** Mensajes addwf PCL,F

MensajePresentacion DT " "

DT "Estudia Desarrollo de Productos Electrónicos" DT " ", 0x00

MensajePulsa DT "LUCAS, pulsa:", 0x00

;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <LCD_MENS.INC> INCLUDE <RETARDOS.INC> END

9.6.- Tecla_06.asm

( Entrenador Básico 7 )

title " La pantalla del LCD aparece la tecla pulsada primero " title " la línea 1 y después en la línea 2 repitiéndose el proceso "

;************************************************* Tecla_06.asm ******************************************************** ; En pantalla aparecen el código de las teclas que se van pulsando. Cuando llega al final de la primera ; línea, pasa a la segunda línea. Cuando llega al final de la segunda línea borra todo y

; comienza de nuevo al principio de la línea 1.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;**************** Asignación de nombres de Registros de Funciones especiales a direcciones ****************** #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** CaracteresUnaLinea EQU d'16' ; Numero de caracteres de una línea.

CaracteresDosLineas EQU d'32' ; Numero de caracteres de dos líneas.

;************************************** Registros *********************************************************************** CBLOCK 0x20

GuardaTecla ; Guarda el valor de la tecla pulsada. ContadorCaracteres ; Guarda el numero de caracteres pulsados. ENDC

;*********************************** Sección Código de Reset ********************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado. movlw b'10001000' ; Habilita la interrupción RBI y la general. movwf INTCON

clrf ContadorCaracteres ; En principio no hay caracteres escritos.

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;************************************ Rutina de Interrupción "Interrup" ************************************************* Interrup call Teclado_LeeHex ; Obtiene el valor de la tecla pulsada.

movwf GuardaTecla ; Reserva el valor de la tecla pulsada. call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter. movf GuardaTecla,W

movlw CaracteresUnaLinea ; Comprueba si ha llegado al numero máximo de subwf ContadorCaracteres,W ; caracteres de una línea.

btfsc STATUS,Z

call LCD_Linea2 ; Se sitúa en la segunda línea.

movlw CaracteresDosLineas ; Comprueba si ha llegado al numero máximo de subwf ContadorCaracteres,W ; caracteres de dos líneas.

btfss STATUS,Z

goto EscribeCaracter ; No, por tanto, sigue escribiendo.

call LCD_Borra ; Si, borra pantalla e inicializa el contador. clrf ContadorCaracteres

EscribeCaracter incf ContadorCaracteres,F ; Un nuevo carácter escrito. movf GuardaTecla,W

call LCD_Nibble ; Visualiza el carácter en pantalla. movf PORTB,W ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF ; Limpia flag.

retfie ;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.7.- Tecla_07.asm

( Entrenador Básico 7 )

title " La pantalla del LCD aparece la tecla pulsada si esta es decimal " title " si se pulsa otra tecla borra pantalla "

;***************************************** Tecla_07.asm **************************************************************** ; Los valores decimales que va escribiendo por el teclado aparecen en pantalla. Si pulsa cualquier

; otra tecla que no sea un numero decimal lo interpreta como tecla de borrado de pantalla.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

;********************* Asignación de nombres de Registros de Funciones especiales a direcciones ************* #include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los

; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;*************************************** Registros ***********************************************************************

CBLOCK 0x20 GuardaValor ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado. movlw b'10001000' ; Habilita la interrupción RBI y la general.

movwf INTCON

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;************************************ Rutina de Interrupción "Interrup" ************************************************* Interrup call Teclado_LeeHex ; Obtiene el valor hexadecimal de la tecla pulsada.

movwf GuardaValor ; Guarda el valor leído.

call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter. movf GuardaValor,W

sublw 0x09 ; Comprueba si es mayor de 9. btfss STATUS,C

goto BorraPantalla ; Si no es un carácter numérico salta a borrar. movf GuardaValor,W ; Recupera el valor leído y lo

call LCD_Nibble ; visualiza en la pantalla. goto limpiar_flag

BorraPantalla call LCD_Borra ; Borra la pantalla.

limpiar_flag movf PORTB,W ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF retfie ;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <RETARDOS.INC> END

9.8.- Tecla_08.asm

( Entrenador Básico 7 )

title " Suma el valor de tres teclas y aparece en el LCD " title " en decimal y hexadecimal "

;***************************************** Tecla_08.asm **************************************************************** ; Suma el valor de tres teclas pulsadas consecutivamente. En la primera línea de la pantalla del

; modulo LCD aparece en hexadecimal y en la segunda en decimal. Así por ejemplo, si pulsa ; "A", "6" y "F" en pantalla aparece:

; Hex: A+6+F=1F (Primera Línea) ; Dec: 10+06+15=31 (Segunda Línea)

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS. ;Perro Guardián deshabilitado. ;Tipo de Reloj XT.

;Protección de Código: OFF.

;************************************** Elegimos PIC ******************************************************************** list p=16f877, f=inhx32

#include <p16f877.inc> ;Este fichero contiene los nombres y direcciones de los ; registros de funciones especiales.

; Este fichero esta localizado en el directorio ; con el nombre MPASM.

;************************************** Igualdades *********************************************************************** ;************************************** Registros *********************************************************************** CBLOCK 0x20 ContadorTeclasPulsadas GuardaValor Operando1 Operando2 Operando3 Resultado ENDC

;************************************* Sección Código de Reset ******************************************************* ORG 0 ;Dirección del Vector Reset

GOTO COMIENZO ;Comienzo del Programa

;************************************* Vector de Interrupción *********************************************************** ORG 4 ;Dirección del Vector de Interrupción.

GOTO Interrup ;Ir a rutina de Interrupción

;*********************************** Sección de Configuración ********************************************************* COMIENZO clrf PORTA ; Reseteamos el PORTA.

bsf STATUS,RP0 ; Ir al Banco 1.

movlw 0x06 ; Poner el PORTA como señales digitales. movwf ADCON1

bcf STATUS,RP0 ; Ir al Banco 0. call LCD_Inicializa ; Inicializar el LCD.

call Teclado_Inicializa ; Configura las líneas del teclado. clrf ContadorTeclasPulsadas ; Resetea este contador.

movlw b'10001000' ; Habilita la interrupción RBI y la general. movwf INTCON

;************************************* Principal ************************************************************************** Principal sleep ; Espera en modo bajo consumo que pulse teclado.

goto Principal

;******************************* Macro "VisualizaHex" ****************************************************************** VisualizaHex MACRO Operando,Caracter

movf GuardaValor,W ; Recupera el valor y lo visualiza. movwf Operando ; Lo guarda para sumar después. call LCD_Nibble ; Visualiza el valor en la pantalla

movlw Caracter

call LCD_Caracter ; Visualiza el signo '+' o '-' según corresponda. incf ContadorTeclasPulsadas,F

ENDM

;******************************* Macro "VisualizaDec" ****************************************************************** VisualizaDec MACRO Operando,Caracter

movf Operando,W ; (Operando) -> (W) call BIN_a_BCD ; Lo pasa a BCD. call LCD_ByteCompleto ; Visualiza en pantalla.

movlw Caracter ; A continuación signo '+' o '=' según corresponda. call LCD_Caracter

ENDM

;************************************ Rutina de Interrupción "Interrup" ************************************************ Interrupcall Teclado_LeeHex ; Obtiene el valor hexadecimal de la tecla pulsada.

movwf GuardaValor ; Guarda el valor leído.

call Teclado_EsperaDejePulsar ; Para que no se repita el mismo carácter. movf ContadorTeclasPulsadas,W ; Según el numero de tecla pulsada realiza una addwf PCL,F ; función distinta.

goto PrimeraTeclaPulsada goto SegundaTeclaPulsada goto TerceraTeclaPulsada

PrimeraTeclaPulsada call LCD_Borra ; Borra la pantalla anterior. movlw MensajeHex ; En pantalla el mensaje "Hex:" call LCD_Mensaje

VisualizaHex Operando1,'+' goto FinInterrupcion SegundaTeclaPulsada VisualizaHex Operando2,'+'

goto FinInterrupcion TerceraTeclaPulsada VisualizaHex Operando3,'='

movf Operando1,W ; Procede a la suma de los tres valores. addwf Operando2,W

addwf Operando3,W movwf Resultado

call LCD_Byte ; Visualiza el resultado.

call LCD_Linea2 ; Ahora visualiza la segunda línea. movlw MensajeDec ; En pantalla el mensaje "Dec:" call LCD_Mensaje

VisualizaDec Operando1,'+' VisualizaDec Operando2,'+' VisualizaDec Operando3,'=' VisualizaDec Resultado,' '

clrf ContadorTeclasPulsadas ; Resetea este contador.

FinInterrupcion movf PORTB,W ; Necesario en proteus para limpiar flag. bcf INTCON,RBIF

retfie

;************************************ Subrutina "Mensajes" ************************************************************* Mensajes addwf PCL,F

MensajeHex DT "Hex: ", 0x0 MensajeDec DT "Dec: ", 0x0 ;*********************************************** Librerías **************************************************************** INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC> INCLUDE <LCD_MENS.INC> INCLUDE <RETARDOS.INC> INCLUDE <BIN_BCD.INC> END

9.8.- Tecla_09.asm

( Entrenador Básico 7 )

title " Cerradura Electrónica "

;******************************************** Tecla_09.asm ************************************************************ ; Cerradura Electrónica: la salida se activa cuando una clave de varios dígitos introducida

; por teclado sea correcta.

; Tiene una salida "CerraduraSalida" que, cuando se habilita, activa durante unos segundos ; el electroimán de la cerradura permitiendo la apertura de la puerta:

; - Si (CerraduraSalida) = 1, la puerta se puede abrir. ; - Si (CerraduraSalida) = 0, la puerta no se puede abrir. ;Funcionamiento:

; - En pantalla visualiza "Introduzca CLAVE". Según se va escribiendo, visualiza asteriscos '*'. ; - Cuando termine de escribir la clave pueden darse dos posibilidades:

; - Si la clave es incorrecta la cerradura sigue inactivada, en pantalla aparece el mensaje ; "Clave INCORRECTA" durante unos segundos y tiene que repetir de nuevo el proceso. ; - Si la clave es correcta la cerradura se activa durante unos segundos y la puerta

; puede ser abierta. En pantalla aparece: "Clave CORRECTA" (primera línea) y "Abra ; la puerta" (segunda línea). Pasados unos segundos, se repite el proceso.

;*************************************************************************************************************************** ;Programa para PIC 16F877.

;Velocidad del Reloj:1 MHz. ;Reloj instrucción: 250 KHz = 4 uS.

In document Entrenadores (página 161-179)

Documento similar