Autor Tema: El PIC24F/H en ensamblador  (Leído 4820 veces)

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

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
El PIC24F/H en ensamblador
« en: 11 de Enero de 2010, 01:23:46 »
Hola.

Desde hace ya mucho tiempo he querido entrar de lleno a esta familia de 16 bits. Se ha programado en ensamblador para varias familias de microchip pero no en estos µicros. Inclusive se han adquirido libros y libros de esta familia.
Cuando me fué bien en el trabajo se adquirió el Explorer 16 y algunos Starter kits.
La intención de este tema es revisar el ensamblador principalmente, no el de programar un µicro a través de ensamblador. Si la oportunidad se presenta, entonces se hará puesto que se cuenta con las herramientas necesarias.



El µicro puede ser cualquiera de la familia 24F/H, pero se trabajará con el PIC24HJ32GP202 y, de ser posible, el PIC24HJ128GP502 ya que son en formato DIP (además de tener unos cuantos  ;-))

Lo recomendable para empezar con el tema:

Para programar se utilizará el PICKIT2 (si es necesario).


Posiblemente se pregunten ¿por qué en ensamblador? ¿Por qué no en C? La respuesta es simple: la intención es saber más sobre la arquitectura y lenguaje propio del µicro. La intención es proporcionar información que sea útil en ensamblador, ya que definitivamente es mejor utilizar C para estos µicros (están diseñados para C), pero siendo una persona que tiene licencias para PBP (2.60 de Rentron.com) y PIC-C (de CCSinfo.com), que revisa las macroinstrucciones generadas para ensamblador para saber cómo le hicieron y si puedo hacerlo mejor........ que casi siempre lo hago peor. Inevitablemente se realizarán los programas más y más complejos, para eso está C....... y para eso está el tema de SUKY o cualquier otro medio donde pueda explicarse.
Otra respuesta aún más simple: porque así lo quiero  :D

Algo que se me olvidaba:
iré a mi paso. Pondré una fecha para publicación y esa será cada Domingo y cada Miércoles y le tomaré la idea a Suky de colocar un tema diferente para los comentarios (para tratar de tener "limplio" el tema) si esto lo amerita.

Espero tener para el Miércoles la introducción al primer tema que, valga la expresión, será una introducción a la familia (no te preocupes SUKY, no es un copi-peist de tu tema).



PD: el PICKIT2 debe estar por ahí.............. no lo encuentro.

Edición 10:05 PM 10-01-2010
faltó adjuntar los libros para 16 bits.

Edición 10:19 PM 10-01-2010
Coloqué las imágenes dentro del mensaje......... alguna persona que me oriente en esto: ¿es mejor colocar las imágenes en el mensaje o subirlas? ¿Qué es mejor para el foro en cuestión de organización y "hosting" del tema?

Edición 10:26 PM 10-01-2010
No se miraban las imágenes





« Última modificación: 11 de Enero de 2010, 03:26:58 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: El PIC24F/H en ensamblador
« Respuesta #1 en: 11 de Enero de 2010, 09:31:04 »
Hola! Mmm… pueden crear otro tema cortando a partir del mensaje de Vegue para los comentarios, así lo hago en el otro foro  :angel:  Sino borren el mensaje no hay problema.  ;-)
Pero no quería pasar la oportunidad de alentar a Mario en el proyecto que está iniciando, realmente estos micros tienen características interesantes, imagínate que le pegue una mirada al módulo ADC y hay para escribir un libro   :shock: :D :D
Yo principalmente me enfoque en C30 pero me gustaría ir aprendiendo sobre el assembler, porque ya he visto líneas que me llaman mucho la atención, y además de ser útiles para un entendimiento completo del micro  :lol:


Cita de: Mario
Espero tener para el Miércoles la introducción al primer tema que, valga la expresión, será una introducción a la familia (no te preocupes SUKY, no es un copi-peist de tu tema).

 :D :D No te preocupes, seguro será mucho mejor, soy medio madera para la redacción  :(

PD: La modificación de los mensajes al parecer ya está activada  :roll:

Saludos!
« Última modificación: 11 de Enero de 2010, 09:36:43 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: El PIC24F/H en ensamblador
« Respuesta #2 en: 14 de Enero de 2010, 02:57:46 »
Recomendaciones para todos los que empiecen a redactar algún tema donde saben que escribirán mucho:

no escriban y actualicen la página......... o cierren todas las pestañas

Empecé a escribir ayer y dejé la máquina encendida y se me fué la onda al actualizar los datos de otra página.... actualicé esta y claro, no se guardó nada. Después cerré todas las pestañas por alguna razón que no sé cuál fué.


Empecé a escribir en WORD y después lo traeré para acá. Desafortunadamente los enlaces colocados en word no se copian, tendré que instalarlos aquí; además los subíndices y superíndices no se vinieron. ¿Existe alguna manera de trasladar todo el formato de WORD para el foro?  ¿Existe algún formato que lo haga?

Posiblemente se requiera ayuda para insertar fotos de los libros citados, por el momento tengo todos prestados (salvo los que se encuentran al principio).


Estoy editando el mensaje inicial, tardaré un poco.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: El PIC24F/H en ensamblador
« Respuesta #3 en: 14 de Enero de 2010, 03:13:12 »
Iniciando con el tema, un poco de información... que en el caso de ensamblador es un mundo de información.


Al momento de escribir este tema (13-01-2010) existen dos tipos de “ramas” o “series” dentro de la familia o gama de los PIC24:

  • La 24F.- Opera en el rango de 2-->3.6 volts y trabajan hasta 16 MIPS (Millones de Instrucciones Por Segundo).
  • La 24H.- Opera en el rango de 3-->3.6 volts y trabaja hasta 40 MIPS.

      Existen muchas versiones de los PIC24F/H, muchos tipos de µicros, encapsulados y características (como cualquier otro µicro de Microchip). Esto no es importante para el tema, lo que es importante es que toda la gama utiliza el mismo tipo de instrucciones en ensamblador (como cualquier µicro de Microchip). De hecho, estas instrucciones son derivadas de la gama de los dsPICs PIC30F/33F……. pero ese es otro tema.

      Para ejemplo se puede tomar cualquier µicro, pero se hará con el PIC24HJ32GP202. La GP significa que es de propósito general y los 32 indica la memoria del programa, 32 bytes Kilobinarios (Ki).

      El ancho de los canales de comunicación interna son de 16 bits. Esto significa que el formato para realizar operaciones es de 16 bits; operaciones aritméticas de 16 bits u 8 bits serán realizadas en una sola instrucción. Las operaciones de más de 16 bits se pueden realizar, pero requieren mayor número de instrucciones (normalmente dos….. al parecer).

      Las instrucciones para la familia PIC24F/H son 71 (según la hoja de datos del PIC24HJ32GP202), de las cuales la mayoría requiere 24 bits (3 bytes) para ser codificadas. Esto contrasta con las arquitecturas de la gama base (12F683) de 12 bits, los de gama media de 14 bits (16F887) y los de gama alta de 16 bits (18F4450). Los manuales definen “instruction word” a un valor de codificación para las instrucciones donde pueden ser utilizadas para direccionar y/o procesar información dentro de la arquitectura del microprocesador (para mayor información sobre esto lean el libro de Morris Mano sobre arquitectura de computadoras, Computation Structures del MIT, o The Elements of Computing Systems: Building a Modern Computer from First Principles del MIT); para la familia de 16 bits, la arquitectura interna para esta tarea es de 24 bits. Dos tipos de instrucciones requieren dos “instruction words” (6 bytes) para ser codificadas.

      Se observa en la siguiente figura que el registro para instrucciones contiene la instrucción a decodificar, la que está en ejecución. La unidad aritmética lógica (ALU) es toda la lógica combinacional que produce las diferentes operaciones aritméticas y lógicas. La entrada izquierda del ALU proviene de un banco de 16 registros “trabajadores”, los famosos registros W de la Microchip (o de la arquitectura Harvard).
Dichos registros cuentan con los nombres de W0-W15y son de 16 bits. La parte derecha del ALU se encuentra conectada al X-data bus, lo que significa que esta variable u operando puede ser de fuentes diferentes, siendo las más comunes la memoria de datos o un registro W. Observar que la salida del ALU se encuentra conectada también al X-data bus, y de nuevo, siendo lo más común un registro W o la memoria de datos.


Figura 1.- Arquitectura interna del PIC24HJ32GP202

      Al estar hablando de memorias y otros dispositivos inmersos en el µicro, será conveniente establecer cómo se encuentra la organización de la memoria, tanto para el programa como para las variables y los registros propios del µicro en cuestión.

      Como ya se señaló, la arquitectura interna es Harvard. El contador del programa (PC) es un registro de 23 bits que proporciona la dirección a la cual “apuntará” dentro del programa, de esta manera la instrucción es ejecutada según el valor del contador del programa.

La siguiente figura muestra cómo está compuesto el contador del programa del µicro.

 
Figura 2.- El contador del programa (PC)

      Se observa que son 32 bits, de los cuales 23 son para el contador del programa, algo que resulta más sencillo (por lo menos para uno) es tratarlos como registros de 32 bits, con una palabra más significativa y uno menos significativo (MSW y LSW), como se contempla en cualquier µicro que tenga el TIMER1 en la gama media: TMR1H y TMR1L. De la palabra más significativa suponer que el Byte Más Significativo de la Palabra Más Significativa  está siempre en ceros….. “BYTE FANTASMA” como lo llama Microchip. De esta manera se puede accesar en palabras (16 bits), y el contador del programa “apunta” siempre al principio de cada palabra de instrucción, o a la Palabra Menos Significativa.

En otras palabras, y se espera sean más claras que en lo antes estipulado: el bit menos significativo del PC siempre es cero, y que los 22 bits más significativos del contador del programa contienen la dirección de una “instruction word” (recordar que son los 23 bits) de los posibles 4Mi localidades (222 = 4 Mi).

Entonces la pregunta se presenta: Si el µicro es de 32 Ki………. ¿habrá problema para no direccionar?  La teoría señala que no, pero en la práctica (por lo menos para este µicro) no se debería tener problemas.
 
      Posiblemente sea algo enredoso, y lo es, por lo menos para uno. Después de varias leídas es como mejor pude acomodarlo en la cabeza: en lugar de truncar a 3 bytes, moverlo a 4 y suponer ceros en el más significativo. Lo anterior porque no se está acostumbrado a manejar bytes impares. A menos que alguien me corrija, nunca he visto en Microchip arquitectura con Bytes impares.

      Obervar que en la figura 2 las palabras “impares” se encuentran a la izquierda y las “pares” a la derecha. Esto será importante porque después se deberá tomar en cuenta cuando se direccione a bytes, porque deben quedar acomodados de tal manera que se puedan llamar sin problemas después.
   


Edición#1   13-01-2010  10:16 PM
¡Qué poquita información!
Debo señalar que no se le metió mucho tiempo de investigación pero esto, esto es realmente poco. El ensamblador de estos µicros, en conjunto con la arquitectura es algo a lo que no estoy acostumbrado. Leo por ejemplo la guía de ensamblador y me direcciona a las 10 páginas a otra, una de C...... y dicha de C a las cuatro páginas me manda a otra  :?

Lo anterior me hace sentir algo así:
Código: [Seleccionar]
Aquí:
         BTFSS    cabeza, aprendizaje
         GOTO     Aquí
        
Por fin salí de allá:
         BTFSS    cabeza, aprendizaje
         GOTO     Por fin salí de allá


algo parecido.


Edición #2 13-01-2010  10:24 PM
Las imágenes se ven chicas, ¿algún tamaño que recomienden?

Espero tener más información para el Domingo, el ensamblador se complica con los direccionamentos.
« Última modificación: 14 de Enero de 2010, 03:29:01 por Mario »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: El PIC24F/H en ensamblador
« Respuesta #4 en: 14 de Enero de 2010, 11:09:31 »
Hola Mario, el thumbnail de las imágenes está bien pero el tamaño completo al darle click sí quedó pequeño.

Fuera de eso, el tutorial va muy bien.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Una disculpa
« Respuesta #5 en: 26 de Enero de 2010, 19:26:00 »
Se planteó colocar información cada miércoles y domingo.

Se presentaron algunas situaciones de trabajo (cambios y casi despedidas y más cambios) con otras que debían atenderse, como la primer casa que se adquiere y resulta que se daño un poco con un temblor del 29 de Diciembre del 2009 y lluvias (aquí nunca llueve) que me tenían preocupado. La autoridad local prohibió las clases en las escuelas a todos los niveles durante dos días.

No se ha quitado el dedo del renglón, y espero mañana colocar información referente a la estructura y tipos de memoria, para después empezar con el formato que se debe tener en cuenta al programar con 8 y 16 bits (después se verá de 32).

Este no soy yo, pero algo así estuvo durante tres dias, y nunca pero nunca llueve acá:

Y esto es sobre el temblor (y mi novia vive en donde ocurrió el epicentro):
feature=related
feature=related
http://mx.answers.yahoo.com/question/index?qid=20091230112143AAsHxAr


Ahora que veo lo que sucedió en Haití, me sentí un mucho mas preocupado.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Organización de la memoria
« Respuesta #6 en: 30 de Enero de 2010, 05:28:17 »
Organización de la memoria

   La memoria de estos µicros es de 64KiB (Página 27 de PIC24HJ32GP202) y está organizada como palabras de 16 bits. Para continuar con la convención se le llamará LSB y MSB a cada uno de los bytes de la palabra (algo que se está acostumbrado).
La composición de memoria permite acceder a cada byte de las palabras, lo cual es bueno, ya que en ocasiones se realizarán operaciones que sean de 8 bits… aunque después se verá (a como se está presentando la simulación) que el código generado es el mismo para operaciones de 8 y 16 bits.


                            
                              Figura 3.- Organización de la memoria del µicro


   Un punto importante de notar es que los LSB se encuentran en localidades pares, mientras de los MSB se localizan en direcciones impares (ya se había señalado anteriormente). Lo anterior obedece a lo señalado por Microchip sobre no soportar datos desalineados, por ejemplo “trasladar” código de 8 bits a 16 bits. Si ocurre una lectura o escritura en esta condición, una “trampa de error de dirección” es generada. Al ocurrir durante una lectura, la instrucción en proceso se ejecuta. Si el error surge durante la escritura, la instrucción en proceso se ejecuta, pero la escritura no se produce. En cualquiera de los casos, esta “trampa” se ejecuta, permitiendo examinar el estado anterior a la ejecución antes de la “trampa” (Página 27 PIC24HJ32GP202).

   La memoria se divide en 4 áreas principales y una adicional (dependiendo del µicro) y son:
  • 1)   Registros de funciones especiales (SFR). Las primeras 2048 localidades de memoria, que se encuentran desde 0x0000 a 0x07FF, están reservadas para registros de funciones especiales, o como Microchip los conoce, SFR (Página 25 PIC24HJ32GP202) . Un SFR es una localidad de memoria que pertenece a alguna función implementada en el PIC24.
    Los que han programado en ensamblador de Microchip saben esto, los SFR son localidades de memoria en RAM, y es posible direccionar a ellos con la dirección dentro de la memoria pero, es mejor nombrar las variables (localidades de memoria) que proporcionen una utilidad para comprender mejor el programa. Lo anterior se comprueba al observar el código desensamblado de cualquier lenguaje y pedir que lo presente en el formato.

                                                                    
                                                                     Figura 4.- SFRs y sus direcciones en memoria


  • 2)   Memoria de datos.- Las localidades de memoria que no son SFR se les conoce de varias formas como datos de RAM, registros y X data. Esta memoria se utiliza para almacenar variables propias del programa.


  • 3)   ¿Espacio de Memoria Cercana?.- A las primeras 8 Ki localidades de memoria se les conoce como “RAM cercana”. Las memoria en este espacio se direcciona de manera directa a través del campo de dirección absoluta de 13 bits. El µicro en cuestión cuenta con 2 Ki de memoria en RAM, por lo que toda la RAM está en este espacio (Página 27 PIC24HJ32GP202 “Near Data Space”).


    Figura 5.- Mapa de memoria RAM para modelos de 2 Ki


  • 4)   ¿Área de visibilidad de espacio de programa?.- Los 32 Ki superiores de la memoria se le conoce como el área PSV, donde se encuentra la memoria de programa. En esta parte, el usuario puede accesar a información que se esté presente en la memoria de programa (Página 45 PIC24HJ32GP202 “Program Space Visibility Area”).


  • 5)   Memoria de Acceso Directo.- Algunos PIC24 cuentan con una porción de RAM implementada como Memoria de Acceso Directo (DMA). La memoria RAM DMA  y el periférico DMA asociado con ella permiten pasar información sin la ejecución de ensamblador (El PIC24HJ32GP202 no cuenta con DMA, pero otros si).




Algo interesante sobre la organización de la memoria (para los que han trabajado con los µicros de Microchip es el registro trabajador (W); en estos µicros se cuenta con 16 registros, lo cual facilita el procesamiento al no tener que pasar todo por un solo W


                                                                            
                                                                         Figura 6.- Registros W



« Última modificación: 31 de Enero de 2010, 11:06:29 por un Moderador, Razón: Se agregó la figura 5 »
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee


 

anything