TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Mario en 11 de Enero de 2010, 01:23:46

Título: El PIC24F/H en ensamblador
Publicado por: Mario 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 (http://www.amazon.com/Microcontrollers-Assembly-Language-Using-Family/dp/1584505834/ref=sr_1_1?ie=UTF8&s=books&qid=1263177409&sr=1-1-spell) y libros (http://www.amazon.com/Programming-16-Bit-PIC-Microcontrollers-Technology/dp/0750682922/ref=sr_1_3?ie=UTF8&s=books&qid=1263178972&sr=1-3) de esta familia.
Cuando me fué bien en el trabajo se adquirió el Explorer 16 (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858) y algunos Starter kits (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en535092).
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 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en530328) y, de ser posible, el PIC24HJ128GP502 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en534550) 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 (http://www.todopic.com.ar/foros/index.php?topic=24537.msg240446#msg240446) 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).


(http://img20.imageshack.us/img20/8655/pickit2paratodopic.th.jpg) (http://img20.imageshack.us/i/pickit2paratodopic.jpg/)
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

(http://img682.imageshack.us/img682/6563/starterkitsparatodopic.th.jpg) (http://img682.imageshack.us/i/starterkitsparatodopic.jpg/)
(http://img682.imageshack.us/img682/5549/reeseparatodopic.th.jpg) (http://img682.imageshack.us/i/reeseparatodopic.jpg/)
(http://img35.imageshack.us/img35/3424/explorer16paratodopic.th.jpg) (http://img35.imageshack.us/i/explorer16paratodopic.jpg/)
(http://img9.imageshack.us/img9/7116/dijasioyhuddlestonparat.th.jpg) (http://img9.imageshack.us/i/dijasioyhuddlestonparat.jpg/)
Título: Re: El PIC24F/H en ensamblador
Publicado por: Suky 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!
Título: Re: El PIC24F/H en ensamblador
Publicado por: Mario 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.
Título: Re: El PIC24F/H en ensamblador
Publicado por: Mario 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:


      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 (http://physics.nist.gov/cuu/Units/binary.html)).

      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 (http://www.amazon.com/Computer-System-Architecture-Morris-Mano/dp/0131755633/ref=sr_1_3?ie=UTF8&s=books&qid=1263423060&sr=1-3) sobre arquitectura de computadoras, Computation Structures del MIT (http://www.amazon.com/Computation-Structures-Electrical-Engineering-Computer/dp/0262231395/ref=sr_1_1?ie=UTF8&s=books&qid=1263422651&sr=8-1), o The Elements of Computing Systems: Building a Modern Computer from First Principles del MIT (http://www.amazon.com/gp/product/0262640686/ref=oss_T15_product)); 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 (http://www.tpub.com/content/istts/14223/css/14223_15.htm)) 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.

(http://img193.imageshack.us/img193/6795/figura1arquitecturapic2.th.jpg) (http://img193.imageshack.us/i/figura1arquitecturapic2.jpg/)
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 (http://en.allexperts.com/e/h/ha/harvard_architecture.htm). 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.

(http://img687.imageshack.us/img687/6230/figura2organizacindelam.th.jpg) (http://img687.imageshack.us/i/figura2organizacindelam.jpg/)  
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.
Título: Re: El PIC24F/H en ensamblador
Publicado por: migsantiago 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.
Título: Una disculpa
Publicado por: Mario 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.
Título: Organización de la memoria
Publicado por: Mario 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.


                            (http://img69.imageshack.us/img69/4894/figura3organizacindelam.jpg) (http://img69.imageshack.us/i/figura3organizacindelam.jpg/)
                              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:




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


                                                                            (http://img42.imageshack.us/img42/8751/figura6registrosw.jpg) (http://img42.imageshack.us/i/figura6registrosw.jpg/)
                                                                         Figura 6.- Registros W