TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Pablolbap en 05 de Febrero de 2014, 11:31:56
-
Aprovechando su amabilidad, quiero saber porqué este programita se queda atrapado en la subrutina "LCD_Inicializa".
No hace nada, eso no me interesa. lo que quiero es que salga de esa rutina en donde se queda encerrado y no llega
a "Principal". Gracias por la ayuda y saludos cordiales a todos :-)
; Programa para contar.
list P=16F84A
include <P16F84A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CUENTA EQU 0x0c
Inicio:
org 0x00
bsf STATUS,RP0
clrf TRISA
clrf TRISB
bcf STATUS,RP0
clrf CUENTA
call LCD_Inicializa ; No sale de aquí.
Principal:
movf CUENTA,W
call LCD_Byte
incf CUENTA
call LCD_UnEspacioBlanco
goto Principal
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
END
-
No nos muestras el código de LCD_Inicializa. No podemos saber qué está pasando.
-
Gracias EdoNork por contestar.
La subrutina "LCD_Inicializa" forma parte de la biblioteca "LCD_4BIT.INC" que a la vez utiliza retardos de la biblioteca "RETARDOS.INC", y es precisamente aquí en donde se queda encerrado el programa. Pero estas las he usado en otros programas y me han funcionado bien.
Estas bibliotecas se encuentran en el libro "Microcontrolador PIC16F84. Desarrollo de Proyectos" de Enrique Palacios Municio, Fernando Ramiro Domínguez y Lucas J. López Pérez.
Generalmente las bibliotecas de este tipo están bien probadas y no dudo de ellas, más bien creo que no he podido usarla correctamente y ese es el motivo de mi consulta.
No las agrego porque son bastante extensas, pero si es necesario las coloco.
Nuevamente gracias por la atención y saludos a todos. :shock:
-
Lo mas probable que ocurra es que la librería interrogue al LCD por el bit de Busy y no tengas puesto el pin R/W como entrada y salida...
-
Gracias MGLSOFT, lo que me dices lo tomaré en cuenta a la hora de simular en Proteus, aunque me parece que de eso se encarga la subrutina LCD_Inicializa.
Al simular en MPLAB ya vi lo que sucede y es algo tan sencillo y se me había escapado: Por pequeños que sean los retardos, al simularlos paso a paso parecen infinitos. Lo que hago cuando quiero simular paso a paso es saltarme los retardos, pero en este caso no puedo saltarlos porque están dentro de la subrutina de la biblioteca.
Lo simulé en tiempo real y sí cuenta el programa convirtiendo el código en Binario Natural a código BCD. En LCD_Centenas aparecen las centenas, en LCD_Decenas, las decenas y en LCD_Unidades aparecen las unidades como se esperaba.
Gracias a los que me colaboraron, estoy reiniciando un poco más en serio en assembler para Pics. Saludos a todos.
((:-)) ((:-))
-
Para la simulación en Proteus, lo solucioné cambiando la línea de declaración de variables:
CUENTA EQU oxoc
por:
CBLOCK 0x0c
CUENTA
ENDC
Imagino que es porque las librerías necesitan espacio para sus vartiables, aunque no sé si esa sea la verdadera razón.
Lo importante es que así sí funciona, lo mejoré un poco y aquí está:
; ConsultaUsoLibrería
list P=16F84A
include <P16F84A.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0c
CUENTA
ENDC
org 0
Inicio:
bsf STATUS,RP0
clrf TRISA
clrf TRISB
bcf STATUS,RP0
call LCD_Inicializa
clrf CUENTA
Principal:
call LCD_Linea1
movlw Mensaje0
call LCD_Mensaje
call Retardo_1s
call LCD_Linea2
call LCD_DosEspaciosBlancos
call LCD_DosEspaciosBlancos
call LCD_DosEspaciosBlancos
movf CUENTA,W
call BIN_a_BCD
movf BCD_Centenas,W
call LCD_Byte
movf BCD_Decenas,W
call LCD_Byte
movf BCD_Unidades,W
call LCD_Byte
incf CUENTA,F
call LCD_UnEspacioBlanco
goto Principal
Mensajes
addwf PCL,F
Mensaje0
DT " Uso BIBLIOTECAS", 0x00
INCLUDE <LCD_4BIT.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <BIN_BCD.INC>
END