TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
02 de Septiembre de 2014, 20:43:22

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
347973 Mensajes en 39043 Temas por 40663 Usuarios
Último usuario: Euris
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Todo en microcontroladores PIC (Moderadores: marmatar, maunix, MGLSOFT, Modulay, pocher, Sasián, Suky)
| | |-+  CREAR LIBRERIAS EN ENSAMBLADOR
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: CREAR LIBRERIAS EN ENSAMBLADOR  (Leído 3017 veces)
pachopic
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 193


« : 02 de Septiembre de 2004, 06:38:00 »

hola a todos:

Alguein podria explicarme cuales son los pasos para crear una libreria en ensamblador,por ejemplo para un retardo de tiempo,
o para manejar una lcd, ademas como se invoca en un programa que se realice con ellas, como darle los parametros de entrada..

GRACIAS..


En línea
odukec
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 174



« Respuesta #1 : 02 de Septiembre de 2004, 08:18:00 »

Hola

Es muy facil.. solo tienes que abrir el bloc de notas, escribes las variables que necesiten tus rutinas, luego escribes las rutinas, por ejemplo, lcd_inicializacion..., lcd_envia_caracter, lcd_delay.. etc, las guardas poniendole un nombre digamos lcd.h, y luego en el programa que las vallas a usar simplemente pones un "include "C:directorio donde esta la libreria"", aca pongo un ejemplo para la lcd.. esto lo colocas en bloc de notas, y le pones un nombre puede ser LCD.INC o LCD.H bueno tu veras.

Codigo:

; ///////////////////////////////////////////////////////////////////////
;                                                                    ////
;    Este simplemente lo agregas al programa para usar las rutinas   ////
;                                                                    ////
;    Include "LCD.H"                                                 ////
;                                                                    ////
; ///////////////////////////////////////////////////////////////////////
                  
Temp_1   equ   0x38      
Temp_2   equ   0x39
                              

;/////////////////////////////////////////////////
;/// Configuración PIC para el LCD.         //////
;/////////////////////////////////////////////////

UP_LCD          bsf     STATUS,RP0      ;Banco 1
                clrf    PORTD           ;Puerto d como salidas
                movlw   b"00011000"
      movwf   PORTA           ;RA0-RA2 salidas, RA3-RA4 entradas
                bcf     STATUS,RP0      ;Banco 0
                bcf   PORTA,0         ;RS=0
                bcf    PORTA,2         ;E=0
                return

;/////////////////////////////////////////////////
;/// Mira Flag de busy                      //////
;/////////////////////////////////////////////////

LCD_BUSY        bsf    PORTA,1         ;Pone el LCD en Modo RD
                bsf     STATUS,RP0          
                movlw   H"FF"
                movwf   PORTD           ;Puerta D como entrada
                bcf     STATUS,RP0      ;Selecciona el banco 0
                bsf    PORTA,2         ;Activa el LCD
                nop
LCD_BUSY_1   btfsc   PORTD,7         ;Chequea bit de Busy
                goto    LCD_BUSY_1   
                bcf    PORTA,2         ;Desactiva LCD
                bsf     STATUS,RP0                              
                clrf    PORTD           ;Puerta B salida
                bcf     STATUS,RP0                              
                bcf    PORTA,1         ;Pone LCD en modo WR
                return

;/////////////////////////////////////////////////
;///       Habilitación (Enable)            //////
;/////////////////////////////////////////////////


LCD_E           bsf PORTA,2             ;Activa E
                nop
                bcf PORTA,2             ;Desactiva E
                return

;/////////////////////////////////////////////////
;///       Escribe un dato en el LCD        //////
;/////////////////////////////////////////////////


LCD_DATO        bcf    PORTA,0         ;Desactiva RS
                movwf   PORTD           ;Valor Ascii a sacar por PortD
                call    LCD_BUSY        ;Espera a que se libere el LCD
                bsf    PORTA,0         ;Activa RS
                goto    LCD_E           ;Genera pulso de E

;/////////////////////////////////////////////////
;///        Envia Comando al LCD            //////
;/////////////////////////////////////////////////

LCD_REG         bcf    PORTA,0         ;Desactiva RS
                movwf   PORTD           ;Código de comando.
                call    LCD_BUSY        ;LCD libre?.
                goto    LCD_E           ;SI.Genera pulso de E.

;/////////////////////////////////////////////////
;///          Inicializa el LCD             //////
;/////////////////////////////////////////////////

LCD_INI      movlw   b"00111000"
      call   LCD_REG      ;Código de instrucción
      call   LCD_DELAY   ;Temporiza
      movlw   b"00111000"
      call   LCD_REG      ;Código de instrucción
      call   LCD_DELAY   ;Temporiza
      movlw   b"00111000"
      call   LCD_REG      ;Código de instrucción
      call   LCD_DELAY   ;Temporiza
      movlw   b"00000001"     ;Borra LCD y Home.
                call    LCD_REG
                return

;/////////////////////////////////////////////////
;///   Delay para inicialización            //////
;/////////////////////////////////////////////////

LCD_DELAY:   clrwdt
                movlw   .10
                movwf   Temp_1
                clrf   Temp_2
LCD_DELAY_1:   decfsz   Temp_2,F
      goto   LCD_DELAY_1
      decfsz   Temp_1,F
      goto   LCD_DELAY_1
      return



Para usarlo en el programa.. primero inicializas el LCD.. haces un

call LCD_INI

O para enviar un dato al LCD

movlw XX
call LCD_DATO

Espero te sirva

Saludos
En línea
MGLSOFT
Moderador Local
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7513


MGLSOFT


« Respuesta #2 : 02 de Septiembre de 2004, 12:43:00 »

Muy buena explicacion !!
Hasta yo lo entendi !!
En línea

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.
pachopic
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 193


« Respuesta #3 : 05 de Septiembre de 2004, 07:24:00 »

hola muchachos!!!

vaya, realmente es muy facil gracias por la explicacion..

EXITOS..
En línea
odukec
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 174



« Respuesta #4 : 05 de Septiembre de 2004, 11:30:00 »

Hola..

Pues que les digo.. me gusta ayudar en lo que pueda a los demas , y tambien retribuirles un poco la ayuda que ustedes me han dado..

Saludos
En línea
valdorre
Colaborador
PIC18
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 346



« Respuesta #5 : 05 de Septiembre de 2004, 22:23:00 »

gracias, a mi tambien me sirbio
saludos
En línea

Osvaldo
maunix
Moderador Local
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 4751


Mauricio, Córdoba (Argentina)


WWW
« Respuesta #6 : 01 de Diciembre de 2005, 07:26:00 »

Amigos, opino que si bien la explicación estuvo bien hecha, considero que no estamos hablando de libreria, sino de una unit.

En microchip una libreria es precisamente una unit pero ya compilada en formato .lib.

En el manual MPASM, MPLINKER y MPLIB de Microchip explica como crearlas.

Eso si... no son muy útiles que digamos si van a cambiar todo el tiempo los pines de E/S, etc.


Otro tema que no se trata, que lo pueden tener en consideración es el tema de las paginas.  Aqui se asume que todas las variables y el código están en las mismas páginas, a tener cuidado con eso!  El error más comun al programar pics es equivocarse en las páginas de ram o de program memory.

Se obtiene mayor potencia y versatilidad si se utiliza "relocatable code" que es una forma de programar que permite luego mover el código de una página a otra sin que afecte al software.  De esta forma, si pasamos un código de un PIC a otro PIC donde en el otro pic se lo ubica en una página diferente, con un par de retoques queda listo.  Esto es muy util cuando se reutilizan mucho ciertas unidades dentro de varios y diversos proyectos.
En línea

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)
kuauhtemok
PIC16
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 116



« Respuesta #7 : 01 de Diciembre de 2005, 10:28:00 »


Oye maunix.. podrias poner un ejemplo de lo que dices por favor ?

Te lo agradeceria mucho
En línea

La felicidad no es mas q la ausencia momentanea del dolor
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.049 segundos con 24 consultas.
anything