Autor Tema: breve consulta, como hacer una libreria?  (Leído 4736 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: breve consulta, como hacer una libreria?
« Respuesta #15 en: 13 de Abril de 2009, 13:54:56 »
 :lol: :D :D efectivamente ese era el error, muchas gracias

saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: breve consulta, como hacer una libreria?
« Respuesta #16 en: 15 de Abril de 2009, 00:17:21 »
bueno efectivamente en la anterior rutina el problema era el return,  pero estuve intentanto hacer llamados de rutinas con CALL pero no he podido, mejor dicho, la misma rutina pero con call...como le hago?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: breve consulta, como hacer una libreria?
« Respuesta #17 en: 15 de Abril de 2009, 03:29:05 »
Código: [Seleccionar]
;############ BIN_A_BCD  #############################################################################

; CARGAR EN W EL BINARIO A CONVERTIR, EL RESULTADO
;QUEDA EL LOS REGISTROS  BCD_DECENAS, BCD_CENTENAS, BCD_UNIDADES


BIN_A_BCD MACRO
CLRF BCD_CENTENAS ; CARGA LOS REGISTROS CON EL RESULTADO INICIAL.
CLRF BCD_DECENAS ; EN PRINCIPIO LAS CENTENAS Y DECENAS A CERO.
MOVWF BCD_UNIDADES ; SE CARGA EL NÚMERO BINARIO A CONVERTIR.

BCD_RESTA10 MOVLW .10 ; A LAS UNIDADES SE LES VA RESTANDO 10 EN CADA
SUBWF BCD_UNIDADES,W ; PASADA. (W)=(BCD_UNIDADES) -10.
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_UNIDADES)>=10?
GOTO BIN_BCD_FIN ; NO, ES MENOR DE 10. SE ACABÓ.

BCD_INCREMENTADECENAS
MOVWF BCD_UNIDADES ; RECUPERA LO QUE QUEDA POR RESTAR.
INCF BCD_DECENAS,F ; INCREMENTA LAS DECENAS Y COMPRUEBA SI HA LLEGADO
MOVLW .10 ; A 10. LO HACE MEDIANTE UNA RESTA.
SUBWF BCD_DECENAS,W ; (W)=(BCD_DECENAS)-10).
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_DECENAS)>=10?
GOTO BCD_RESTA10 ; NO. VUELVE A DAR OTRA PASADA, RESTÁNDOLE 10 A

BCD_INCREMENTACENTENAS ; LAS UNIDADES.
CLRF BCD_DECENAS ; PONE A CERO LAS DECENAS
INCF BCD_CENTENAS,F ; E INCREMENTA LAS CENTENAS.
GOTO BCD_RESTA10 ; OTRA PASADA: RESTA 10 AL NÚMERO A CONVERTIR.

BIN_BCD_FIN
SWAPF BCD_DECENAS,W ; EN EL NIBBLE ALTO DE (W) TAMBIÉN LAS DECENAS.
ADDWF BCD_UNIDADES,W ; EN EL NIBBLE BAJO DE (W) LAS UNIDADES.
RETURN ; VUELVE AL PROGRAMA PRINCIPAL.
ENDM

;######################################################################################################

Debes eliminar

MACRO y ENDM pero no te olvides de ponerle una etiqueta. Puedes dejar BIN_A_BCD
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: breve consulta, como hacer una libreria?
« Respuesta #18 en: 15 de Abril de 2009, 12:54:14 »
elimine el macro y el endm, habilito el return, y da el mismo problema, elimine los macros de banco0 y banco1 porque pense que solo podia poner una rutina en el .inc pero tampoco funcionó..que se puede estar pasando por alto?

por que en rutinas para compartir hay un macro que finaliza en: 
Código: [Seleccionar]
RETURN
ENDM


por otro lado,  el programa principal lo tengo con org 0x00, al eliminar el macro y el endm y hacer CALL BIN_A_BCD hay problema de sobreescritura (creo), tengo el inicio del   .inc con ORG 0x00 y si lo cambio a otra direccion tambien pasa lo mismo
« Última modificación: 15 de Abril de 2009, 13:39:09 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: breve consulta, como hacer una libreria?
« Respuesta #19 en: 15 de Abril de 2009, 18:40:29 »
Prueba así
Código: ASM
  1. ;############ BIN_A_BCD  #############################################################################
  2.  
  3. ; CARGAR EN W EL BINARIO A CONVERTIR, EL RESULTADO
  4. ;QUEDA EL LOS REGISTROS  BCD_DECENAS, BCD_CENTENAS, BCD_UNIDADES
  5.        
  6.        
  7. BIN_A_BCD      
  8.                         CLRF    BCD_CENTENAS            ; CARGA LOS REGISTROS CON EL RESULTADO INICIAL.
  9.                         CLRF    BCD_DECENAS             ; EN PRINCIPIO LAS CENTENAS Y DECENAS A CERO.
  10.                         MOVWF   BCD_UNIDADES            ; SE CARGA EL NÚMERO BINARIO A CONVERTIR.
  11.                        
  12. BCD_RESTA10 MOVLW       .10                     ; A LAS UNIDADES SE LES VA RESTANDO 10 EN CADA
  13.                         SUBWF   BCD_UNIDADES,W          ; PASADA. (W)=(BCD_UNIDADES) -10.
  14.                         BTFSS   STATUS,C                ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_UNIDADES)>=10?
  15.                         GOTO    BIN_BCD_FIN             ; NO, ES MENOR DE 10. SE ACABÓ.
  16.                        
  17. BCD_INCREMENTADECENAS
  18.                         MOVWF   BCD_UNIDADES            ; RECUPERA LO QUE QUEDA POR RESTAR.
  19.                         INCF    BCD_DECENAS,F           ; INCREMENTA LAS DECENAS Y COMPRUEBA SI HA LLEGADO
  20.                         MOVLW   .10                     ; A 10. LO HACE MEDIANTE UNA RESTA.
  21.                         SUBWF   BCD_DECENAS,W           ; (W)=(BCD_DECENAS)-10).
  22.                         BTFSS   STATUS,C                ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_DECENAS)>=10?
  23.                         GOTO    BCD_RESTA10             ; NO. VUELVE A DAR OTRA PASADA, RESTÁNDOLE 10 A
  24.  
  25. BCD_INCREMENTACENTENAS                  ; LAS UNIDADES.
  26.                         CLRF    BCD_DECENAS             ; PONE A CERO LAS DECENAS
  27.                         INCF    BCD_CENTENAS,F          ; E INCREMENTA LAS CENTENAS.
  28.                         GOTO    BCD_RESTA10             ; OTRA PASADA: RESTA 10 AL NÚMERO A CONVERTIR.
  29.  
  30. BIN_BCD_FIN
  31.                         SWAPF   BCD_DECENAS,W           ; EN EL NIBBLE ALTO DE (W) TAMBIÉN LAS DECENAS.
  32.                         ADDWF   BCD_UNIDADES,W          ; EN EL NIBBLE BAJO DE (W) LAS UNIDADES.
  33.                         RETURN                          ; VUELVE AL PROGRAMA PRINCIPAL.
  34.  
  35. ;######################################################################################################

La forma de llamarlo es:

        CALL       BIN_A_BCD
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: breve consulta, como hacer una libreria?
« Respuesta #20 en: 15 de Abril de 2009, 18:56:41 »
nada sigue lo mismo pero el error dice "Overwriting previous address contents (0000)" y son multiples

el codigo esta exactamente asi
Código: [Seleccionar]
; programa q convierte lo q hay en portc a BCD, usando libreria.inc
LIST P=16F877A
#INCLUDE "P16F877A.INC"
#INCLUDE "LIBRERIA.INC"


CBLOCK 0X20
BCD_CENTENAS
BCD_DECENAS
BCD_UNIDADES
PDel0
PDel1
PDel2
ENDC

ORG 0X00
GOTO INICIO


INICIO BANCO1
MOVLW 0XFF
MOVWF PORTC
CLRF PORTB
CLRF PORTD
BANCO0

CLRF PORTB
CLRF PORTC
CLRF PORTD


BSF PORTD,0
BSF PORTD,1
BSF PORTD,2
CALL DEMORA


LEE MOVF PORTC,W
; MOVLW B'11111111'
                CALL BIN_A_BCD
CLRW

MOVF BCD_CENTENAS,W
MOVWF PORTB
BCF PORTD,0 ;PRENDO DISPLAY
CALL DEMORA
BSF PORTD,0 ;APAGO DISPLAY
CLRF PORTB

CLRW
MOVF BCD_DECENAS,W
MOVWF PORTB
BCF PORTD,1
CALL DEMORA
BSF PORTD,1
CLRF PORTB

CLRW
MOVF BCD_UNIDADES,W
MOVWF PORTB
BCF PORTD,2
CALL DEMORA
BSF PORTD,2
CLRF PORTB

GOTO LEE


DEMORA  movlw     .21       ; 1 set numero de repeticion  (B)
            movwf     PDel0     ; 1 |
PLoop1  movlw     .237      ; 1 set numero de repeticion  (A)
            movwf     PDel1     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
             decfsz    PDel1, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.
END


y el de LIBRERIA.INC
Código: [Seleccionar]
;############ BANCOS 877 ##########
BANCO1 MACRO
BSF   STATUS,RP0
BCF   STATUS,RP1
ENDM
BANCO0  MACRO
BCF   STATUS,RP0
ENDM
;###################################


;############ BIN_A_BCD  #############################################################################

; CARGAR EN W EL BINARIO A CONVERTIR, EL RESULTADO
;QUEDA EL LOS REGISTROS  BCD_DECENAS, BCD_CENTENAS, BCD_UNIDADES



BIN_A_BCD CLRF BCD_CENTENAS ; CARGA LOS REGISTROS CON EL RESULTADO INICIAL.
CLRF BCD_DECENAS ; EN PRINCIPIO LAS CENTENAS Y DECENAS A CERO.
MOVWF BCD_UNIDADES ; SE CARGA EL NÚMERO BINARIO A CONVERTIR.


BCD_RESTA10 MOVLW .10 ; A LAS UNIDADES SE LES VA RESTANDO 10 EN CADA
SUBWF BCD_UNIDADES,W ; PASADA. (W)=(BCD_UNIDADES) -10.
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_UNIDADES)>=10?
GOTO BIN_BCD_FIN ; NO, ES MENOR DE 10. SE ACABÓ.

BCD_INCREMENTADECENAS
MOVWF BCD_UNIDADES ; RECUPERA LO QUE QUEDA POR RESTAR.
INCF BCD_DECENAS,F ; INCREMENTA LAS DECENAS Y COMPRUEBA SI HA LLEGADO
MOVLW .10 ; A 10. LO HACE MEDIANTE UNA RESTA.
SUBWF BCD_DECENAS,W ; (W)=(BCD_DECENAS)-10).
BTFSS STATUS,C ; ¿C = 1?, ¿(W) POSITIVO?, ¿(BCD_DECENAS)>=10?
GOTO BCD_RESTA10 ; NO. VUELVE A DAR OTRA PASADA, RESTÁNDOLE 10 A

BCD_INCREMENTACENTENAS ; LAS UNIDADES.
CLRF BCD_DECENAS ; PONE A CERO LAS DECENAS
INCF BCD_CENTENAS,F ; E INCREMENTA LAS CENTENAS.
GOTO BCD_RESTA10 ; OTRA PASADA: RESTA 10 AL NÚMERO A CONVERTIR.

BIN_BCD_FIN
SWAPF BCD_DECENAS,W ; EN EL NIBBLE ALTO DE (W) TAMBIÉN LAS DECENAS.
ADDWF BCD_UNIDADES,W ; EN EL NIBBLE BAJO DE (W) LAS UNIDADES.
RETURN ; VUELVE AL PROGRAMA PRINCIPAL.
 
;######################################################################################################
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: breve consulta, como hacer una libreria?
« Respuesta #21 en: 15 de Abril de 2009, 18:59:09 »
Una cosa que descubri es que debes poner el archivo que contiene las macros antes del main y el archivo que contienen tus subrutinas (las que llamas con call y retornas con return) al final de tu codigo antes del END Fijate en este ejemplo que puse en pequeños proyectos (link) ahi utilizo unas macros para el i2c , estas macros estan en el archivo I2Cmacro.inc, y como ves lo incluyo justo despues del #include   <P16F690.inc>, y el archivo que tiene mis subrutinas para el i2c (i2cCom.inc) y para manejar la memoria (EE24AA64.inc), estan al final de mi codigo. En resumen te recomiendo que te crees dos "librerias" una para tus macros y otra para tus subrutinas.

P.D Cual es esa macro en rutinas para compartir de la que hablas

Saludos

La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: breve consulta, como hacer una libreria?
« Respuesta #22 en: 15 de Abril de 2009, 19:23:42 »
 :shock: :-/ hey si...hice un archivo que solo tiene  los macro de cambio de banco y otro archivo donde puse la rutina BIN_A_BCD, la de los macros la puse justo despues de la libreria del pic y la del BIN_A_BCD la puse justo antes del end y asi funciona, pero que raro no?

respuesta P.D: es la respuesta numero 5  la rutina se llama CAD 16F877, es un macro y tiene return
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA