Autor Tema: ASM desde 0  (Leído 132396 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado c@Lic_0

  • PIC10
  • *
  • Mensajes: 36
    • Una tasita de cafe
Re: ASM desde 0
« Respuesta #30 en: 10 de Noviembre de 2010, 22:15:11 »
el tutorial esta wenisimo me sirvio bastante, lo que si he tenido es una gran curiosidad por las directivas del preprocesado, hasta donde se se la utiliza para hacer librerias genericas :-/  te agradeciria si nos pudieras ayudar con este tema   :)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: ASM desde 0
« Respuesta #31 en: 10 de Noviembre de 2010, 22:41:15 »
Prometo que habrá novedades des este tutorial.
Solo tienen que tener paciencia.

Primero va a salir en la revista de ucontrol y luego las iré actualizando aquí.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado ceneca

  • PIC16
  • ***
  • Mensajes: 105
Re: ASM desde 0
« Respuesta #32 en: 17 de Noviembre de 2010, 20:23:46 »
hola!!!
para mi es oro en polvo son mis primerísimos pasos y este tutorial me esta ayudando mucho. Mis felicitaciones por el trabajo, y el tiempo que le has dedicado para compartirlo con todos .

saludos Y .....

mil gracias  :-/ :-/
El sabio no dice todo lo que piensa, pero siempre piensa todo lo que dice. ARISTOTELES

Desconectado Zeros

  • PIC10
  • *
  • Mensajes: 2
Re: ASM desde 0
« Respuesta #33 en: 25 de Noviembre de 2010, 16:41:40 »
Buenísimo tutorial, después de mucho tiempo consigo realizar mis primeros programas en assembler.
Alguien me puede ayudar a entender para qué sirve un archivo .inc y la diferencia entre un archivo .inc y un .lib?
Un saludo y gracias de nuevo por este magnífico tutorial.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: ASM desde 0
« Respuesta #34 en: 25 de Noviembre de 2010, 23:19:06 »
Buenísimo tutorial, después de mucho tiempo consigo realizar mis primeros programas en assembler.
Alguien me puede ayudar a entender para qué sirve un archivo .inc y la diferencia entre un archivo .inc y un .lib?
Un saludo y gracias de nuevo por este magnífico tutorial.

Un archivo INC se utiliza para nombrar las registros y bit al PIC utilizado, mientras que un LIB es un archivo con una librería para controlar lo que tu desees, por ejemplo un LCD de 16x2.

Me explico mejor.
Cuando empezás a programar o a crear un firmware para el PIC, se coloca al principio INCLUDE PICXXXXXX.INC donde las X corresponde al nombre del pic a utilizar. Si abrís ese archivo con algún procesador de texto, como por ejemplo el notepad, verás que los nombres de los registros y bit se le asigna un número. El INCLUDE que se coloca al principio, no es una instrucción, sino una directiva para el MPASM. Lo que hace es leer ese archivo para saber a que bit o a que posición de la RAM se está utilizando. Digamos que es lo mismo cuando uno nombra una variable. Esto es para no tener que utilizar números, se le nombra una posición de la RAM con un nombre que nosotros queramos, por ejemplo:

temporal  equ  20.

Esta directiva, lo que hace es indicarle al MPASM, que cada vez que vea la palabra temporal, nos estamos refiriendo a la posición 0x20 de la RAM.
Si uno no incluye el archivo INC con el nombre del PIC a utilizar, al poner esta instrucción, daría error:

BCF   STATUS,RP0

El error diría que no sabe que es la palabra STATUS, y que es la palabra RP0, pero si se incluye el archivo .inc, el compilador buscará ahí a que posición de la RAM y BIT nos referimos.

El archivo .lib, se utiliza como rutinas. Por ejemplo, se hace una rutina para controlar el LCD, el cual se invocará con un CALL (en el 90% de los casos) o con un GOTO. De esta manera, al tener esta rutina creada, llamada por ejemplo LCD.lib, se podrá utilizar en otros programas sin tener que escribir la misma rutina, una y otra vez.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado TrueZener

  • PIC10
  • *
  • Mensajes: 1
Re: ASM desde 0
« Respuesta #35 en: 26 de Noviembre de 2010, 12:37:37 »
Muchas Gracias x el tutorial!!!

me vino joya cuando me lanze a la aventura con el pic 16f876a.

Abrazo :-/
AZ

Desconectado Zeros

  • PIC10
  • *
  • Mensajes: 2
Re: ASM desde 0
« Respuesta #36 en: 26 de Noviembre de 2010, 19:37:52 »
Gracias Leon PIC por la aclaración, me servirá de gran ayuda para estructurar los programas. Por cierto, alguien puede decirme donde encontrar información sobre las directivas como include, define, low, high, pagesel, dt... ¿Son instrucciones de asm?¿Directivas MPASM? ¿Tiene microchip algún manual? Realmente ahora mismo no soy capaz de encontrar información de estas instrucciones y sin embargo veo que se utilizan en multitud de ejemplos. Para colmo, buscando encontré para mi sorpresa una rutina que utilizaba una estructura de control como la que sigue:
IF   R_Nbit == 8
       movlw   8      
ELSE
   movlw   7   
ENDIF
La estructura forma parte de una pequeña aplicación didáctica que establece una comunicación RS232 entre un PIC12F508 y el programa "Hyperterminal" de windows. El caso es que la aplicación la he probado físicamente y funciona correctamente.

Desconectado c@Lic_0

  • PIC10
  • *
  • Mensajes: 36
    • Una tasita de cafe
Re: ASM desde 0
« Respuesta #37 en: 08 de Febrero de 2011, 20:21:51 »
pues esas son directivas de preprocesado :mrgreen: y solamente se ejecutan cuando el programa se esta ensamblando, encontraras mas informacion en el mplab. Anda a la pestaña de Help --> Topics y luego en MPASM Asembler ahi encontraras mucha info :-/ :-/ :-/ nos vemos hasta que los bits nos vuelvan a comunicar xD¡¡ :D :D
                                                                           
 

Desconectado agauss

  • PIC16
  • ***
  • Mensajes: 147
Re: ASM desde 0
« Respuesta #38 en: 14 de Marzo de 2011, 01:17:38 »
Pues ya lo creo que te has tomado tu tiempo en hacer este buenisimo tutorial, felicidades y saludos...
No es el conocimiento, sino el acto de aprendizaje, y no la posesión, sino el acto de llegar allí, que concede el mayor disfrute.
"Carl Friedrich Gauss"

El tacto es el arte de hacer un punto sin hacer un enemigo.
"Isaac Newton"

Desconectado LaboratorioIII

  • PIC10
  • *
  • Mensajes: 1
Re: ASM desde 0
« Respuesta #39 en: 29 de Marzo de 2012, 08:41:04 »
Un excelente trabajo, muchachos  ;-)

Desconectado PEJEAHGO

  • PIC10
  • *
  • Mensajes: 7
Re: ASM desde 0
« Respuesta #40 en: 05 de Abril de 2013, 20:57:21 »
Podrian proporcinarme algun libro bien basico que trate de ASm ? especialmente si es del PIC (16f877A) agradeceria mucho si me dieran el link de algun libro que sea bueno desde ya GRACIAS.   ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))

Desconectado PALMIRANO

  • PIC10
  • *
  • Mensajes: 12
Re: ASM desde 0
« Respuesta #41 en: 20 de Abril de 2013, 11:54:01 »
Recomiendo el libro "Microcontrolador PIC16F84 Desarrollo de proyectos", para mí es el mejor libro en lengua española para la enseñanza de los microcontroladores PIC en Assembler, los ejemplos son 100%
funcionales.. las librerias que desarrolló el autor son "muy buenas".... los códigos aunque fueron desarrollados para el PIC16F84 perfectamente pueden migrar a cualquier referencia de Microchip con algunos
cambios...
  Personalmente los he migrado a : 16F88, 16F628, 16F877, 16F887, 16F1827 ... etc  y funcionan PERFECTAMENTE...!!

Desconectado LITRIMA

  • PIC10
  • *
  • Mensajes: 4
Re: ASM desde 0
« Respuesta #42 en: 08 de Junio de 2013, 16:05:46 »
Recomiendo el libro "Microcontrolador PIC16F84 Desarrollo de proyectos", para mí es el mejor libro en lengua española para la enseñanza de los microcontroladores PIC en Assembler, los ejemplos son 100%
funcionales.. las librerias que desarrolló el autor son "muy buenas".... los códigos aunque fueron desarrollados para el PIC16F84 perfectamente pueden migrar a cualquier referencia de Microchip con algunos
cambios...
  Personalmente los he migrado a : 16F88, 16F628, 16F877, 16F887, 16F1827 ... etc  y funcionan PERFECTAMENTE...!!

Hola, soy nuevo en la programación y estoy aprendiendo, tengo el Libro y desearía por favor si me puedes ayudar con las modificaciones que hay que hacer para migrar con los ejemplos a otros Pic, sobre todo al Pic16F887.
Los ejemplos que vienen en el libro funcionan perfectamente, pero con el Pic16F84A y lo que quiero es migrarlo al 16F887 para simularlo en proteus.

Muchas Gracias.
Saludos.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: ASM desde 0
« Respuesta #43 en: 08 de Junio de 2013, 17:43:10 »
Hola LITRIMA, la migracion es bastante facil teniendo el datasheet del micro en cuestion, siempre y cuando entiendas el codigo, pon algun ejemplo y te lo migro y veras que no es dificil.

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: ASM desde 0
« Respuesta #44 en: 09 de Junio de 2013, 13:38:28 »
Hola LITRIMA, este es el codigo adaptado para el 16F887 no he podido probarlo porque me falta la rutina de temporizacion de 1 segundo y la de retardos, de todas formas para simularlo en proteus, 1 segundo es mucho, deberias hacer una temporizacion menor.
Acostumbrate por norma postearlo en el foro asi todos compartimos.
Código: ASM
  1. ; Programa de control del posicionamiento de un servomotor Futaba S3003. Controla el ángulo
  2. ; mediante una señal cuadrada PWM de 20 ms de periodo que se aplica a su línea de control.
  3. ; El ángulo es gobernado por el tiempo en alto de la señal cuadrada desde 0º (para 0,3 ms
  4. ; de tiempo en alto), hasta 180º (para un tiempo en alto de 2,1 ms).
  5. ;
  6. ; En este programa el servomotor se posiciona en 0º, 90º, 180º, vuelve a 90º y repite el ciclo.
  7. ; Permanece en cada posición durante 1 s. El funcionamiento se explica en la siguiente tabla
  8. ; donde se ha tomado como tiempo patrón 100 µs (0,1 ms) conseguidos mediante interrupciones
  9. ; por desbordamiento del Timer 0.
  10. ;
  11. ;                      Tiempo Alto      Tiempo Bajo               Angulo
  12. ;       FactorAlto         0,1·FactorAlto   0,1·(200-FactorAlto)      (Grados)
  13. ;       ------------      --------------   ----------------------      ---------
  14. ;         3                0,3 ms           19,7 ms                      0º
  15. ;         12                1,2 ms          18,8 ms                   90º
  16. ;          21                2,1 ms          17,9 ms                  180º
  17. ;         12                1,2 ms          18,8 ms                   90º
  18. ;
  19. ; ZONA DE DATOS **********************************************************************
  20.  
  21.    LIST      P=16F887
  22.    INCLUDE      <P16F887.INC>
  23.          __CONFIG _CONFIG1, _XT_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_ON & _FCMEN_ON & _LVP_ON
  24.     __CONFIG _CONFIG2, _WRT_OFF & _BOR40V
  25.    
  26.         ERRORLEVEL -302
  27.        
  28.    CBLOCK  0x0C
  29.    Contador
  30.    FactorAlto                   ; Factor por el que se va a multiplicar el tiempo
  31.    ENDC                         ; patrón de 100 µs para obtener el tiempo en alto.
  32.  
  33. TMR0_CARGA   EQU   d'256'-d'90'         ; Valor obtenido experimentalmente con la ventana
  34.                                                         ; Stopwatch para un tiempo de 100 µs.
  35.  
  36. ; ZONA DE CÓDIGOS ********************************************************************
  37.  
  38.    ORG    0
  39.       goto   Inicio
  40.    ORG   .4
  41.    goto   Timer0_Interrupcion
  42.    
  43. Inicio
  44.         banksel         PORTB
  45.         clrf            PORTB                           ; Inicializamos PORTB
  46.         banksel         ANSEL
  47.         clrf            ANSEL                           ; Entradas/Salidas digitales
  48.         bcf             STATUS,RP1                      ; Banco 1
  49.         banksel         TRISB
  50.         clrf            TRISB                           ; Puerto B todo salidas                        
  51.         movlw           b'00001000'         ; TMR0 sin prescaler.
  52.         movwf           OPTION_REG
  53.         bcf             STATUS,RP0
  54.         movlw           b'10100000'
  55.         movwf           INTCON                  ; Autoriza interrupción T0I y la general (GIE).
  56.         clrf            Contador
  57.        
  58. Principal
  59.    movf   Contador,W
  60.    andlw   b'00000011'
  61.    call   SeleccionaFactorAlto
  62.    movwf   FactorAlto
  63.    call   Retardo_1s
  64.    incf   Contador,F
  65.    goto   Principal
  66.  
  67. SeleccionaFactorAlto
  68.    addwf   PCL,F
  69.    DT   d'3', d'12', d'21', d'12'   ; Tabla para el servo Futaba S3003.
  70.  
  71. ; Subrutina "Timer0_Interrupcion" -------------------------------------------------------
  72. ;
  73. ; Mantiene la salida en alto un tiempo igual a 100µs x (FactorAlto) y en bajo un tiempo igual
  74. ; a 100µs x (200-FactorAlto). El periodo de la señal cuadrada lo mantiene en 20 ms.
  75. ;
  76.    CBLOCK  
  77.    Guarda_W
  78.    Guarda_STATUS
  79.    Timer0_ContadorA            ; Contador auxiliar.
  80.    ENDC
  81.  
  82. Timer0_Interrupcion
  83.    movwf   Guarda_W            ; Guarda los valores de tenían W y STATUS en el
  84.    swapf   STATUS,W            ; programa principal.
  85.    movwf   Guarda_STATUS
  86.    bcf      STATUS,RP0            ; Garantiza que trabaja en el Banco 0.
  87.    movlw    TMR0_CARGA
  88.    movwf    TMR0
  89.    decfsz    Timer0_ContadorA,F      ; Decrementa el contador.
  90.    goto    Fin_Timer0_Interrupcion
  91.    btfsc    PORTB,0               ; Testea el anterior estado de la salida.
  92.    goto    EstabaAlto
  93. EstabaBajo
  94.    bsf      PORTB,0               ; Estaba bajo y lo pasa a alto.
  95.    movf   FactorAlto,W         ; Repone el contador nuevamente con el tiempo en
  96.    movwf    Timer0_ContadorA      ; alto.
  97.    goto    Fin_Timer0_Interrupcion
  98. EstabaAlto
  99.    bcf    PORTB,0               ; Estaba alto y lo pasa a bajo.
  100.    movf   FactorAlto,W         ; Repone el contador nuevamente con el tiempo
  101.    sublw   .200               ; en bajo.
  102.    movwf    Timer0_ContadorA      ; El periodo será de 100µs·200=20000µs=20ms.
  103. Fin_Timer0_Interrupcion
  104.    swapf   Guarda_STATUS,W         ; Restaura registros W y STATUS.
  105.    movwf   STATUS
  106.    swapf   Guarda_W,F
  107.    swapf   Guarda_W,W
  108.    bcf      INTCON,RBIF
  109.    bcf      INTCON,T0IF
  110.    retfie
  111.    
  112.    INCLUDE <RETARDOS.INC>
  113.    END
Saludos!

PD: Llevo tiempo sin jugar con asembler, seria bueno que alguien con mas experiencia diera su opinion.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.