TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Pablolbap en 05 de Febrero de 2014, 11:31:56

Título: Uso de bibliotecas
Publicado 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
Título: Re: Uso de bibliotecas
Publicado por: EdoNork en 05 de Febrero de 2014, 12:00:01
No nos muestras el código de LCD_Inicializa. No podemos saber qué está pasando.
Título: Re: Uso de bibliotecas
Publicado por: Pablolbap en 05 de Febrero de 2014, 20:57:50
   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:
Título: Re: Uso de bibliotecas
Publicado por: MGLSOFT en 06 de Febrero de 2014, 08:22:32
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...
Título: Re: Uso de bibliotecas
Publicado por: Pablolbap en 06 de Febrero de 2014, 11:46:11
   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.

                                                                                  ((:-)) ((:-))
Título: Re: Uso de bibliotecas
Publicado por: Pablolbap en 07 de Febrero de 2014, 17:11:59
   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