Muy bueno narciso. Gracias por currartelo. voy a pasarlo al proteus a ver que se cuenta.
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
title " Visualización de mensajes en función de un pulsador "
;************************************** Mens_06.asm
; En el modulo LCD se pueden visualizar varios mensajes diferentes. El paso de uno
; a otro se realiza al actuar sobre un pulsador conectado a la línea RA4.
; En pantalla aparecere por ejemplo:
; " Mensaje 2 " (primera línea).
; "S.S. de los Reyes." (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 ********************************************************************
138
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 ***********************************************************************
#DEFINE Pulsador PORTA,4 ; Línea donde se conecta el pulsador.
ValorMaximo EQU D'4' ; Numero de mensajes.
;************************************** Registros ************************************************************************
CBLOCK 0x20
Contador ; El contador a visualizar.
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
bsf Pulsador ; Línea del pulsador configurada como entrada.
bcf STATUS,RP0 ; Ir al Banco 0.
call LCD_Inicializa ; Inicializar el LCD.
clrf Contador
call Visualiza ; Inicializa contador y los visualiza por primera vez.
;************************************* Principal **************************************************************************
Principal btfsc Pulsador ; Lee el pulsador.
goto Fin
call Retardo_20ms ; Espera estabilicen niveles de tensión.
btfsc Pulsador ; Vuelve a leer el pulsador.
goto Fin
call IncrementaContador ; Incrementa el contador.
call Visualiza ; Visualiza el mensaje correspondiente.
EsperaDejePulsar btfss Pulsador
goto EsperaDejePulsar
Fin goto Principal
;********************************** Subrutina "IncrementaContador" **************************************************
; Incrementa el valor de la variable Contador. Si llega al valor máximo lo resetea.
IncrementaContador incf Contador,F ; Incrementa el contador.
139
movf Contador,W ; Ha superado su valor máximo?
sublw ValorMaximo-1 ; (W)<- ValorMaximo-(Contador).
btfss STATUS,C ; Si C=1 salta una instrucción.
(Contador)> #ValorMaximo
clrf Contador ; Lo inicializa si ha superado su valor máximo.
return
;************************************** Subrutina "Visualiza" **********************************************************
Visualiza call LCD_Borra ; Borra la pantalla y se sitúa en la línea 1.
movlw MensajeN ; Apunta a este mensaje.
call LCD_Mensaje ; Lo visualiza.
movf Contador,W ; A continuación visualiza el contador.
call BIN_a_BCD ; Se debe visualizar en BCD.
call LCD_Byte
call LCD_Linea2 ; Al principio de la segunda línea del LCD.
movf Contador,W
call ApuntaMensaje ; Apunta al mensaje que se va a visualizar.
call LCD_Mensaje ; Lo visualiza.
return
;************************************** Subrutina "ApuntaMensaje" ****************************************************
ApuntaMensajeaddwf PCL,F
retlw Mensaje0
retlw Mensaje1
retlw Mensaje2
retlw Mensaje3
;***************************************** Subrutina "Mensajes" ********************************************************
Mensajes addwf PCL,F
Mensaje0 DT " DESARROLLO DE ",0x00 ; Posición inicial del mensaje 0.
Mensaje1 DT " PROYECTOS ", 0x00 ; Posición inicial del mensaje 1.
Mensaje2 DT "S.S. SEBASTIAN", 0x00 ; Posición inicial del mensaje 2.
Mensaje3 DT "de los Reyes", 0x00 ; Posición inicial del mensaje 3.
MensajeN DT " Mensaje ", 0x00 ; Posición inicial del mensaje primera línea del LCD.
;*********************************************** Librerías ****************************************************************
INCLUDE <LCD_MENS.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
END
cfperalta dijo:Hola amigos, muy buen material el que han aportado! Yo estoy con el mismo dilema de modificar los valores que aparecen en el lcd mediante un pulsador. La parte de intercambiar la información mostrada ya la implementé con el Flowcode (si alguien la necesita la subo).
Ahora estoy necesitando la rutina en flowcode para modificar los valores visualizados en el lcd mediante pulsadores "subir" y "bajar", ya q le doy vueltas y no logro hallar la solución.. Espero alguien pueda ayudarme.
Saludos y felicitaciones por el foro!