Tutorial de ensamblador AVR 2 (2 / 4 paso)

Paso 2: Escribir el código ensamblador

Escriba el código siguiente en un archivo de texto llamado pushbutton.asm y compílelo con avra como hiciste en el Tutorial 1.

Observe que en este código tenemos un montón de comentarios. Cada vez que el ensamblador ve un punto y coma saltará el resto de la línea y pasar a la siguiente línea. Es buena práctica (sobre todo en lenguaje ensamblador!) de programación fuertemente comentar su código para que cuando vuelvas a él en el futuro se sepa lo que estaba haciendo. Voy a cosas de comentario bastante en la primera algunos tutoriales para que sepamos exactamente lo que está sucediendo y por qué. Posteriormente una vez que nos volvemos un poco mejores en el conjunto de codificación comentare cosas un poco menos detalladamente.

 ;************************************ ; written by: 1o_o7 ; date: <2014|10|23> ; version: 1.0 ; file saved as: pushbutton.asm ; for AVR: atmega328p ; clock frequency: 16MHz ;************************************ 
 ; Program function:------------------------------ ; Turns on an led connected to PB0 (digital 0) ; when you push a button connected to PD0 ;----------------------------------------------- ; ; PB0 (normally 0V) -----> LED --> 220 Ohm ---> 5V ; ; PD0 (normally 5V) -----> Button ---> GND ; 
 .nolist .include "./m328Pdef.inc" .list 
 ;============== ; Declarations .def temp =r16 ; designate working register r16 as temp 
 ;================= ; Start of Program rjmp Init ; first line executed 
 ;============ Init: ser temp ; set all bits in temp to 1's. out DDRB,temp ; setting a bit as 1 on the Data Direction I/O ; register for PortB, which is DDRB, sets that ; pin as output, a 0 would set that pin as input ; so here, all PortB pins are outputs (set to 1) ldi temp,0b11111110 ; load the `immediate' number to the temp register ; if it were just ld then the second argument ; would have to be a memory location instead out DDRD,temp ; mv temp to DDRD, result is that PD0 is input ; and the rest are outputs clr temp ; all bits in temp are set to 0's out PortB,temp ; set all the bits (i.e. pins) in PortB to 0V ldi temp,0b00000001 ; load immediate number to temp out PortD,temp ; move temp to PortD. PD0 has a pull up resistor ; (i.e. set to 5V) since it has a 1 in that bit ; the rest are 0V since 0's. 
 ;====================== ; Main body of program: Main: in temp,PinD ; PinD holds the state of PortD, copy this to temp ; if the button is connected to PD0 this will be ; 0 when the button is pushed, 1 otherwise since ; PD0 has a pull up resistor it's normally at 5V out PortB,temp ; sends the 0's and 1's read above to PortB ; this means we want the LED connected to PB0, ; when PD0 is LOW, it sets PB0 to LOW and turn ; on the LED (since the other side of the LED is ; connected to 5V and this will set PB0 to 0V so ; current will flow) rjmp Main ; loops back to the start of Main 

Observe que esta vez no sólo tenemos muchos mas comentarios en nuestro código, pero también tenemos una sección de encabezado que da alguna información sobre quién lo escribió, cuando fue escrito, qué tipo de controlador que fue escrito, e incluso he incluido un diagrama del circuito simple para mostrar cómo construir el circuito. El resto del código es también separado en secciones.

Después de haber compilado el código anterior debe cargarlo en el microcontrolador y ver que funciona. El LED debe encender mientras que están presionando el botón y luego apague otra vez cuando lo suelte. Me he mostrado como se ve en la foto.

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 3

Tutorial de ensamblador AVR 3

Bienvenido a tutorial número 3!Antes de empezar quiero hacer un punto filosófico. No tenga miedo de experimentar con los circuitos y el código que estamos construyendo en estos tutoriales. Cambiar los cables alrededor de añadir nuevos componentes, sa
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