Autor Tema: utilizacion de varias fuentes en MPLab  (Leído 3915 veces)

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

Desconectado emeceuy

  • PIC10
  • *
  • Mensajes: 4
utilizacion de varias fuentes en MPLab
« en: 19 de Febrero de 2008, 01:41:51 »
Hola a todos ! primero que nada, disculpas por si este tema es muy "bobo" o ya está repetido, pero estuve buscando información y no encontré...

Quisiera saber si es posible en Assembler, agregar varias "unidades" o sources, librerías o lo que sea... o sea, hacer subrutinas en otros archivos para que no queden un codigo enorme con todo amontonado... lo se hacer con los macros, utilizando include... de hecho en el mplab se muestran los archivos del proyecto: sources, libraries, macros, other files, etc, pero no se si se puede lo que quiero...

en caso que se pueda, como tendría que hacer exactamente? la nueva "unit" sería .asm, .lib o que? que encabezado llevaría? o solamente se comienza a escribir con el nombre de la primer subrutina? en la unidad principal debo agregar include o algo así?

espero que s haya entendido jeje... muchas gracias desde ya !

salu2 mArCe

Meta

  • Visitante
Re: utilizacion de varias fuentes en MPLab
« Respuesta #1 en: 19 de Febrero de 2008, 02:43:47 »
Lo escrito en rojo se le llama a la librería externa.

INCLUDE  <DISPLAY_7S.INC>      ; Subrutina ASCII_a_7Segmentos.
Está al final del Display_05.asm y la librería DISPLAY_7S.INC está es el mismo directorio. Puedes poner más librerías.

En www.pic16f84a.com te explica esto al dedillo.


Código: ASM
  1. ;************************************ Display_05.asm ************************************
  2. ;
  3. ;       ===================================================================
  4. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  5. ;         E. Palacios, F. Remiro y L. López.           www.pic16f84a.com
  6. ;         Editorial Ra-Ma.  www.ra-ma.es
  7. ;       ===================================================================
  8. ;
  9. ; Visualiza un carácter ASCII en el display de 7 segmentos. Utiliza la subrutina
  10. ; ASCII_a_7Segmentos contenida en la librería DISPLAY_7S.INC.
  11. ;
  12. ; ZONA DE DATOS **********************************************************************
  13.  
  14.         LIST            P=16F84A
  15.         INCLUDE         <P16F84A.INC>
  16.         __CONFIG        _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  17.  
  18.         CBLOCK  0x0C                                    ; En esta posición empieza la RAM de usuario.
  19.         ENDC
  20.  
  21. CARACTER EQU    'P'
  22.  
  23. ; ZONA DE CÓDIGOS ********************************************************************
  24.  
  25.         ORG     0                                               ; El programa comienza en la dirección 0.
  26. Inicio
  27.         bsf             STATUS,RP0                              ; Acceso al Banco 1.
  28.         clrf    PORTB                                   ; Las líneas del Puerto B se configuran como salida.
  29.         bcf             STATUS,RP0                              ; Acceso al Banco 0.
  30. Principal
  31.         movlw   CARACTER                                ; Lee el carácter de entrada
  32.         call    ASCII_a_7Segmentos              ; Convierte a 7 Segmentos.
  33.         movwf   PORTB                                   ; Resultado se visualiza por el puerto de salida.
  34.         goto    Principal
  35.  
  36.         INCLUDE  <DISPLAY_7S.INC>               ; Subrutina ASCII_a_7Segmentos.
  37.         END                                                             ; Fin del programa.
  38.        
  39. ;       ===================================================================
  40. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  41. ;         E. Palacios, F. Remiro y L. López.           www.pic16f84a.com
  42. ;         Editorial Ra-Ma.  www.ra-ma.es
  43. ;       ===================================================================



Código: ASM
  1. ;**************************** Librería "DISPLAY_7S.INC **********************************
  2. ;
  3. ;       ===================================================================
  4. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  5. ;         E. Palacios, F. Remiro y L. López.           wwww.pic16f84a.com
  6. ;         Editorial Ra-Ma.  www.ra-ma.es
  7. ;       ===================================================================
  8. ;
  9. ; Subrutinas para convertir un código ASCII en su valor equivalente en 7 segmentos y así
  10. ; poder activar displays.
  11. ;
  12. ; Si el código ASCII es menor que el signo más '+' o mayor  que la letra zeta 'Z' obtiene
  13. ; el código erróneo b'10000000' para encender sólo el punto decimal del display.
  14. ;
  15. ; Si se trata de un número hay que ejecutar la subrutina "Numero_a_7Segmentos" que convierte
  16. ; un numero (de 0 a 9) en su equivalente en código de 7 segmentos.
  17. ;
  18. ; Entrada: En registro W, el dato en código ASCII a convertir.
  19. ; Salida : En registro W, el código 7 segmentos.
  20.  
  21.         CBLOCK
  22.         Display7s_Dato                          ; Aquí se reservará el valor del dato de entrada.
  23.         ENDC
  24.        
  25. Numero_a_7Segmentos
  26.         andlw   b'00001111'                     ; Se queda con el nibble bajo.
  27.         addlw   '0'                                     ; Se pasa a ASCII sumándole el valor ASCII
  28.                                                                 ; del "0" y ejecuta "ASCII_7_Segmentos".
  29. ASCII_a_7Segmentos
  30.         movwf   Display7s_Dato          ; Guarda el valor del carácter.
  31.         sublw   ' '                             ; Comprueba si es " " (espacio).
  32.         btfsc   STATUS,Z                        ; ¿Es distinta de " " (espacio)?, ¿Z=0?
  33.         retlw   00h                                     ; Es " ". Devuelve el código 7-Segmentos del " ".
  34.         movf    Display7s_Dato,W        ; Recupera el valor del dato de entrada.
  35.         sublw   'Ñ'                            ; Comprueba si es "Ñ".
  36.         btfsc   STATUS,Z                        ; ¿Es distinta de "Ñ"?, ¿Z=0?
  37.         retlw   55h                                     ; Es "Ñ". Devuelve el código 7-Segmentos de "Ñ".
  38.         movf    Display7s_Dato,W        ; Recupera el valor del dato de entrada.
  39.         sublw   'º'                            ; Comprueba si es "º".
  40.         btfsc   STATUS,Z                        ; ¿Es distinta de "º"?, ¿Z=0?
  41.         retlw   63h                                     ; Es "º". Devuelve el código 7-Segmentos de "º".
  42. ;
  43.         movf    Display7s_Dato,W        ; Comprueba si el código ASCII es mayor que la "Z".
  44.         sublw   'Z'                                     ; (W)='Z'-(Display7s_Dato)
  45.         btfss   STATUS,C                        ; ¿C=1?, ¿(W) positivo?, ¿'Z'>=(Display7s_Dato)?
  46.         retlw   b'10000000'                     ; Si el código ASCII es mayor que 'Z' es un error.
  47.         movlw   '+'                             ; Averigua en qué orden está el carácter leído
  48.         subwf   Display7s_Dato,W        ; dentro de la tabla de conversión, respecto del
  49.         btfss   STATUS,C                        ; primero que es '+'.
  50.         retlw   b'10000000'                     ; Si el código ASCII es menor que '+' es un error.
  51. ;
  52.         addwf   PCL,F                           ; Obtiene el código 7 segmentos.
  53. InicioTablaASCII
  54.         DT      46h, 04h, 40h, 80h, 00h, 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh                   ; Signos y
  55.         DT      7Dh, 07h, 7Fh, 67h, 41h, 88h, 00h, 48h, 00h, 00h, 00h                   ; números.
  56.         DT      77h, 7Ch, 39h, 5Eh, 79h, 71h, 6Fh, 76h, 19h, 1Eh, 7Ah, 38h, 37h ; Letras.
  57.         DT      54h, 3Fh, 73h, 67h, 50h, 6Dh, 78h, 1Ch, 3Eh, 1Dh, 70h, 6Eh, 49h
  58. FinTablaASCII
  59. ;
  60. ; Esta es la tabla para la visualización en display de siete segmentos (Ver figura 11-3).
  61.  
  62.         IF (FinTablaASCII > 0xFF)
  63.                 ERROR   "¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
  64.                 MESSG   "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
  65.         ENDIF
  66.  
  67. ;       ===================================================================
  68. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  69. ;         E. Palacios, F. Remiro y L. López.           www.pic16f84a.com
  70. ;         Editorial Ra-Ma.  www.ra-ma.es
  71. ;       ===================================================================
« Última modificación: 19 de Febrero de 2008, 02:47:20 por Meta »

Desconectado emeceuy

  • PIC10
  • *
  • Mensajes: 4
Re: utilizacion de varias fuentes en MPLab
« Respuesta #2 en: 19 de Febrero de 2008, 08:19:58 »
Mil gracias por la respuesta, Meta ! muy claro  :-)

salu2 mArCe