2009-09-24 9 views
8

Voy a empezar a trabajar en un proyecto donde necesito tener un conocimiento decente del lenguaje ensamblador para el microcontrolador PIC. Estoy íntimamente familiarizado con C/C++, así que sé cómo codificar en su mayor parte, y ya he realizado muchos proyectos para el PIC, así que entiendo la arquitectura, pero he hecho toda mi programación en 'C'.Cuál es el mejor recurso para aprender Lenguaje ensamblador para el microcontrolador PIC

¿Hay algún buen libro o sitio web que explique correctamente qué significan todos los comandos de ensamblaje y cómo realizar tareas bastante simples (LED parpadeantes, matemática básica, etc.) para el microcontrolador PIc?

Editar: El propósito principal de esta publicación es solicitar recursos para el aprendizaje de la Asamblea, no debatir los méritos de C vs Asamblea en los PIC, o si el PIC es un "buen" microcontrolador para su uso. Estoy usando un microcontrolador PIC18 si eso hace alguna diferencia.

Respuesta

3

me gustaría probar esto: Pic Tutorial

+0

Esto es lo que solía aprender algún conjunto (para el PIC), sin embargo, los que en el futuro estén advertidos: noté algunos errores y algunos errores ortográficos en los tutoriales. Dicho esto, sin embargo, todavía sentía que era un buen recurso para "tener una idea" de la Asamblea. Otro buen recurso para aprender un poco más Assembly fue el " Introducción al PIC C" de Nigel Gardner. Es un libro sobre "C", pero enumera cómo algunos de los bucles se hacen en Asamblea, por lo que es un buen recurso también. – Seidleroni

+0

¡El sitio en el enlace está abajo! – svarog

0

Soy un creyente en escribir un desensamblador. Comience con un programa muy simple de una o dos líneas que cargue un registro con una constante quizás (tengo que leer un tutorial o algo para aprender ese paso). Ensamblarlo. Guarde el binario en un formato que sea capaz o esté dispuesto a escribir un programa para leer (intel hex quizás, o elf si lo admiten).

Escriba un programa para leer el archivo binario y extraer el programa, luego tomar esos bytes y escribir un desensamblador (incluso si el vendedor tiene un desensamblador, todavía debe escribir uno).

Ahora comience a iterar el proceso, aprenda una nueva instrucción o una nueva forma de usar esa instrucción, una instrucción a la vez. Escriba el código para desmontar esa instrucción u opción. Intenta escribir ensamblador para manipular cada uno de los bits en la instrucción.

En el momento en que termine el conjunto de instrucciones, sabrá que el conjunto de instrucciones es mejor que la mayoría de las personas que lo usan todos los días, sabrá cómo escribir ensamblador para cada una de las opciones para cada uno de los códigos de operación, también puede aprenda por qué esta instrucción solo puede abordar N bytes desde su ubicación y otros pueden acceder a cualquier cosa, o que las instrucciones solo pueden usar un bit N inmediato y otras pueden usar cualquier valor. Esa clase de cosas.

He utilizado este proceso muchas veces y he aprendido muchos conjuntos de instrucciones, ymmv. Después del primer par de tres, el proceso anterior solo puede tomar una tarde para completarse.

EDIT:

El objetivo aquí es la educación no es el próximo gran proyecto en Sourceforge. El resultado puede ser tan feo o incompleto como desees, eres el único que va a leerlo.

Nota: Un desensamblador genérico para conjuntos de instrucciones de longitud variable puede ser algo difícil, no desea desensamblar linealmente el binario, en ese caso desea seguir todas las rutas de ejecución. Yo lo evitaría. Tomar programas simples que se ejecutan de forma un tanto lineal y luego desmontar no es difícil incluso en un conjunto de instrucciones de longitud variable. Puede aprender bastante sobre un conjunto de instrucciones desmontando y examinando la salida de un compilador de C (u otro lenguaje de alto nivel), si el compilador no tiene una opción de salida de ensamblador o si no tiene un desensamblador que no puede obtener para aprovechar esto (a menos que sea un conjunto de instrucciones de longitud fija).

También tenga en cuenta que una vez que aprende ensamblador para un procesador, el segundo es mucho más fácil, y así sucesivamente.Las cosas que necesita aprender de una a otra a menudo se vuelven cuán grande puede ser este salto, cuáles son las reglas sobre inmediatos, direccionamiento indirecto, básicamente todas las cosas que están directamente relacionadas con el examen de los códigos de operación. Puede aprenderlo sin mirar los códigos de operación, pero debe confiar en que la documentación o los mensajes de error del ensamblador son de alta calidad.

+4

¿Hablas en serio? Parece que el OP tiene que hacer su trabajo; ¿Quién le va a pagar para que tome el enfoque que sugieres? – Clifford

+0

Hacer eso en una tarde suena ... rápido. –

+0

sí, bastante serio. la programación es programación, es una cuestión de sintaxis, aprender la sintaxis leyendo y no hacer es costoso y lento. Tratar de escribir y ejecutar y depurar programas solo para aprender una instrucción es lento y costoso, esta es una solución muy económica, rápida y confiable. Si puede encontrar una forma de aprender un ISA dentro y fuera en unas pocas horas sin ningún otro equipo que no sea una computadora barata y un compilador gratuito, vaya por ello. (lector y ensamblador de pdf bien) –

5

Hay más de una arquitectura PIC, con conjuntos de instrucciones significativamente diferentes. Microchip no tiene la consistencia arquitectónica de Atmel AVR, por ejemplo. Por lo tanto, debe especificar qué está usando, por ejemplo, PIC12, 16, 24, 32.

Así que antes que nada sugeriría evitar el ensamblador PIC sobre la base de que lo que aprenda en un PIC12, que puede no ser muy aplicable a un PIC24. En segundo lugar, evitaría usar un PIC si pudiera como desarrollador de software, aunque reconozco que hay otras consideraciones y es posible que no tenga otra opción.

Lo que puede elegir es no usar ensamblador. Si bien los PIC del extremo inferior no son quizás los más adecuados para la generación de código C, ese es el problema del escritor del compilador; es aún más rentable en términos de tiempo de desarrollo usar C siempre que sea posible. Por otro lado, para productos de gran volumen, si puede ajustar el código en una parte más pequeña mediante el ensamblador, ese puede ser un factor. Decidir que necesita ensamblador antes de haber probado una solución C a menudo es una "optimización prematura". Incluso si la implementación de C falla restricciones de tamaño o tiempo, puede simplemente llamarlo prototipo y recodificarlo para cumplir con las restricciones. Hacer lo que aún puede ser más rápido que comenzar la codificación del ensamblador desde cero y luchar con el diseño y las instrucciones establecidos al mismo tiempo. Dígale a su jefe que lo prototipará en C, y cuando cumpla con los requisitos, nadie querrá perder dinero re-codificando, ya que es un código ensamblador no portátil y no-sostenible.

Finalmente, para responder a su pregunta, suponiendo que necesita realizar su trabajo de forma rápida y eficiente, utilice los ejemplos y notas de aplicación de Microchip tanto como sea posible, y familiarícese con el conjunto de instrucciones del conjunto de instrucciones del fabricante. El conjunto de instrucciones para las partes más bajas no es grande. Para el trabajo diario, me gusta utilizar una "tarjeta de referencia del conjunto de instrucciones" como ayuda memoria: resume todos los detalles esenciales de cada instrucción, por lo general en un par de páginas, ¡imprima a doble cara y lamine! ;). Aquí está un PIC16 example

+0

Estoy totalmente de acuerdo. He hecho la programación de PIC en ensamblador, y en realidad no es tan difícil aprender el conjunto de instrucciones. Sin embargo, programar a un nivel tan bajo no es una alegría, C es mucho más agradable. Buscaría C (y me alejaré de PIC si fuera necesario) a menos que exista un caso comercial convincente para el ensamblador. –

+1

Para las fotos antiguas más pequeñas, el asm es rápido, fácil, mejores resultados que C. El nuevo pic32 se deriva de un mips así que todos juntos bestia diferente. Aprender ensamblador de imágenes puede significar dos o tres conjuntos de instrucciones diferentes, así que estoy absolutamente de acuerdo en que debes especificar de qué PIC estás hablando. –

+0

Incluso si está programando en C, realmente ayuda conocer el ensamblaje subyacente para que pueda entender qué hará el compilador con lo que está escribiendo. – Crashworks

2

Puede ser una respuesta bastante tardía, pero podría beneficiarse de este curso de laboratorio escrito principalmente para aprender el ensamblado de PIC a través de las aplicaciones.

Comprobar: http://embedded-ju.ucoz.com/

compruebe la pestaña experimentos, que incluye:

Experimento 0 - (Introducción a MPLAB)

Experimento 1 - (Introducción a la Asamblea PIC conjunto de instrucciones)

Experimento 2 - (Más sobre Instruc Conjunto ción y técnicas de programación modular)

Experimento 3 - (Análisis del Sistema Básico y Diseño)
3.1.Guía de Hardware I

Experimento 4 - (LCD - HD44780)

Experimento 5 - (teclado)

Experimento 6 - (Uso de HI-TECH C Compiler en MPLAB) 6.1. Programación PIC con la guía ICD2.

Experimento 7 - (Timers (Timer0 y Timer2))

Experimento 8 - (USART)

Experimento 9 - (Software PWM & A/D)


Se basa en la serie PIC 16, más notablemente, 16f84A, 16F877A y 16F917 .. los ejemplos son totalmente comme nted, y los experimentos completamente explicados.

Cuestiones relacionadas