Tutorial de ensamblador AVR 3 (4 / 9 paso)

Paso 4: directivas de ensamblador .org

Ya sé lo que las directivas de ensamblador .nolist, .list, .include y .def de nuestros tutoriales anteriores, así que en primer lugar echemos un vistazo en las 4 líneas de código que vienen después de:

 .org 0x0000 jmp Reset .org 0x0020 jmp overflow_handler 

La instrucción org indica el ensamblador donde en "Memoria de programa" para poner la siguiente instrucción. Como se ejecuta el programa, el "contador de programa" (abreviados como PC) contiene la dirección de la línea actual de ejecución. Así que en este caso cuando el PC está en 0 x 0000 verá el comando "jmp Reset" que residen en esa localización de memoria. La razón por la que queremos poner jmp Reset en ese lugar es porque cuando se inicia el programa, o se resetea el chip, la PC inicia ejecución de código en este punto. Por lo tanto, como podemos ver, nos hemos sólo lo inmediatamente "saltar" a la sección etiquetada "Reset". ¿Por qué hacemos? Esto significa que las dos últimas líneas arriba sólo se se saltan encima. ¿Por qué?

Bueno eso es donde las cosas se ponen interesantes. Ahora vas a tener que abrir un visor de pdf con la hoja de datos completa de ATmega328p que señalé en la primera página de este tutorial (por qué es tema 4 en el "debe" sección). Si la pantalla es demasiado pequeña, o tienes demasiados windows abrir ya (como es el caso conmigo) podía hacer lo que hacen y ponga en un e-Reader o tu teléfono Android. Va a utilizarlo todo el tiempo si usted planea escribir código ensamblador. Lo cool es que todos microcontollers se organizan en formas muy similares así que cuando te acostumbras a leer hojas de datos y codificación de ellos que usted encontrará casi trivial de hacer lo mismo para un microcontrolador diferentes. Así que estamos realmente aprender a usar microcontroladores todos en un sentido y no sólo el atmega328p.

Bueno, vuelta a la página 18 en la hoja de datos y echar un vistazo en la figura 8-2.

Se trata de cómo se configura la memoria del programa en el microcontrolador. Se puede ver que comienza con la dirección 0 x 0000 y se separa en dos secciones; una sección de aplicación flash y una sección de flash de arranque. Si hace referencia brevemente a página 277 tabla 27-14 se verá que la sección flash aplicación toma las ubicaciones desde 0 x 0000 a 0x37FF y la sección de flash de arranque toma los lugares restantes de 0x3800 a 0x3FFF.

Ejercicio 1: ¿Cuántos lugares están ahí en la memoria del programa? Es decir convertir 3FFF en decimales y añadir 1 ya empezamos a contar en 0. Ya que cada posición de memoria es de 16 bits (o 2 bytes) ancho ¿cuál es el número total de bytes de memoria? Ahora convertir esto en kilobytes, recordar que hay 2 ^ 10 = 1024 bytes en un kilobyte. La sección de flash de arranque va desde 0x3800 hasta 0x37FF, ¿cuántos kilobytes es esto? ¿Cuántos kilobytes de memoria siguen siendo para que nosotros utilizar para almacenar nuestro programa? En otras palabras, ¿qué tan grande nuestro programa se puede? ¿Por último, el número de líneas de código podemos tener?

Bien, ahora que sabemos todo sobre la organización de la memoria de programa flash, vamos a continuar con nuestro debate de las declaraciones de .org. Vemos que la primera localización de memoria 0 x 0000 contiene nuestra instrucción para ir a nuestra sección hemos etiquetado Reset. Ahora vemos lo que hace la declaración ".org 0x0020". Se dice que queremos que la instrucción en la línea siguiente a colocarse en posición de memoria 0x0020. La instrucción que hemos colocado hay un salto a una sección en el código que nos hemos "overflow_handler"... ahora ¿por qué diablos le exigimos que este salto colocarse en posición de memoria 0x0020? Para averiguar, consultar página 65 en la hoja de datos y echa un vistazo a la tabla 12-6.

Tabla 12-6 es una tabla de "Restablecer y vectores de la interrupción" y le muestra exactamente donde lo PC van cuando recibe una "interrupción". Por ejemplo, si nos fijamos en el número de vectores 1. La "fuente" de la interrupción es "RESET" que se define como "Sistema Pin externo, Power-on Reset, Brown-out Reset y Watchdog reset" lo que significa, si cualquiera de esas cosas sucede que nuestro microcontrolador, el PC empezará a ejecutar nuestro programa en lugar de la memoria de programa 0 x 0000. ¿Qué pasa con nuestra directiva .org entonces? Bueno, colocamos un comando en lugar de la memoria 0x0020 y si mira hacia abajo de la tabla verás que si ocurre un desbordamiento de Timer/Counter0 (procedente de TIMER0 OVF) ejecutará todo lo que está en la ubicación 0x0020. Así que cuando eso sucede, la PC se salta al lugar nos con la etiqueta "overflow_handler". Cool ¿verdad? Verás en un minuto por qué hicimos esto, pero primero vamos a terminar este paso del tutorial con un aparte.

Si queremos hacer nuestro código más limpio y ordenado debemos realmente reemplazar las 4 líneas que actualmente estamos debatiendo con lo siguiente (pág. 66):

 .org 0x0000 rjmp Reset ; PC = 0x0000 reti ; PC = 0x0002 reti ; PC = 0x0004 reti ; PC = 0x0006 reti ; PC = 0x0008 reti ; PC = 0x000A ... reti ; PC = 0x001E jmp overflow_handler : PC = 0x0020 reti : PC = 0x0022 ... reti ; PC = 0x0030 reti ; PC = 0x0032 

Modo que si ocurre una interrupción dada él solo "reti" que significa "retorno de interrupción" y nada sucede. Pero si nunca "permitimos" estas interrupciones distintas, entonces no se utilizarán y podemos poner el código del programa en estos puntos. En nuestro programa actual de "blink.asm" sólo vamos a habilitar la interrupción de desbordamiento del timer0 (y, por supuesto, la interrupción de reset que está siempre activada) y así no molestará a los otros.

¿Cómo nos "habilita" la interrupción de desbordamiento del timer0 entonces? ... es el tema de nuestro próximo paso en este tutorial.

Artículos Relacionados

Tutorial de ensamblador AVR 11

Tutorial de ensamblador AVR 11

Bienvenido a Tutorial 11!En este breve tutorial, finalmente vamos a construir la primera parte de nuestro proyecto final.Lo primero que debes hacer es ir al último paso de este tutorial y ver el video. Luego vienen aquí. [pausa mientras haces eso...]
Tutorial de ensamblador AVR 1

Tutorial de ensamblador AVR 1

He decidido escribir una serie de tutoriales sobre cómo escribir programas del lenguaje ensamblador para el Atmega328p que es el microcontrolador utilizado en el Arduino. Si la gente sigue interesada voy a seguir poner a uno una semana o así hasta qu
Tutorial de ensamblador AVR 6

Tutorial de ensamblador AVR 6

Bienvenido a Tutorial 6!Tutorial de hoy será corto donde desarrollamos un método sencillo para comunicar datos entre uno atmega328p y otro con dos puertos conectan. Luego tomar los dados rodillo del Tutorial 4 y el analizador de registro de 5 Tutoria
Tutorial de ensamblador AVR 8

Tutorial de ensamblador AVR 8

Bienvenido a Tutorial 8!En este breve tutorial vamos a tomar un poco de diversión de introducir nuevos aspectos de la programación de lenguaje ensamblador para mostrar cómo mover nuestros componentes prototipos a un separado "" del circuito impr
Tutorial de ensamblador AVR 9

Tutorial de ensamblador AVR 9

Bienvenido a Tutorial 9.Hoy nos muestra cómo controlar un display de 7 segmentos y un display de 4 dígitos utilizando nuestro código de lenguaje ensamblador ATmega328P y AVR. En el curso de hacer esto que tendremos que hacer desvíos cómo utilizar la
Tutorial de ensamblador AVR 7

Tutorial de ensamblador AVR 7

Bienvenido a Tutorial 7!Hoy vamos a ver primero cómo limpiar un teclado y luego se muestra cómo utilizar los puertos de entrada analógicos para comunicarse con el teclado.Esto lo haremos utilizando como entrada de interrupciones y un solo cable. Se a
Tutorial de ensamblador AVR 10

Tutorial de ensamblador AVR 10

Bienvenido al Tutorial de 10!Lo siento que tomó tanto tiempo para salir esta próxima entrega, pero esta es una época bastante ajetreada del año. En cualquier caso, aquí está!Hemos recorrido un largo camino y probablemente ya eres lo suficientemente c
Tutorial de ensamblador AVR 5

Tutorial de ensamblador AVR 5

Hoy vamos a tomar un vistazo a los distintos lugares de la memoria en el microcontrolador Atmega328p y ver si podemos comprender mejor cómo se almacenan las cosas, donde se almacenan y cómo funcionan los punteros y tablas de búsqueda.El tutorial se s
Tutorial de ensamblador AVR 4

Tutorial de ensamblador AVR 4

Bienvenido a tutorial número 4!En este tutorial vamos construir un circuito que simulará el balanceo de dos dados. Entonces vamos primero a escribir un programa de fuerza bruta que hace el trabajo. A continuación simplificamos ese programa de varias
Tutorial de ensamblador AVR 2

Tutorial de ensamblador AVR 2

Este tutorial es una continuación de "AVR Assembler Tutorial 1"Si no has ido por 1 Tutorial debe parar ahora y hacer que uno primero.En este tutorial vamos a continuar nuestro estudio de programación del lenguaje ensamblador de la atmega328p en
Un enfoque avanzado de programación de Arduino y AVR

Un enfoque avanzado de programación de Arduino y AVR

Este instructable es obligada lectura para todo aquel que esté familiarizado con núcleo AVR virutas y Arduino.Bien, para ser más específicos, al leer el instructivo, usted será capaz de:1) saber la diferencia correcta entre el AVR y Arduino.2) progra
Placa de desarrollo para microcontrolador Attiny84

Placa de desarrollo para microcontrolador Attiny84

Se trata de una placa de desarrollo para microcontrolador Attiny84. Tha Attiny84 chip tiene 11 pines direccionables con el IDE de Arduino, 8k de memoria flash para el almacenamiento de programa y 512 bytes de RAM disponible para las variables de pila
La tortura de Raven, aguda

La tortura de Raven, aguda

este es un pequeño dispositivo que diseñé para el sencillo propósito de ser discretamente molesta. Espera una cantidad predeterminada de tiempo, y luego empieza a emitir pitidos agudos. Yo he programado mina para tomar ventaja de una propiedad intere
Cariño, encogi lo Arduino: pasar de Arduino a ATtiny y escribir el código en C de AVR puro

Cariño, encogi lo Arduino: pasar de Arduino a ATtiny y escribir el código en C de AVR puro

Arduino es una plataforma de software y de gran dura - pero con todas sus características también está un poco hinchado y a menudo necesita sólo una pequeña parte de todas las funciones. A veces el proyecto requiere dispositivos más pequeños y más ba