Tutorial de ensamblador AVR 3 (3 / 9 paso)

Paso 3: Blink.asm

Aquí está el código que vamos a comentar hoy:

 ;************************************ ; written by: 1o_o7 ; date: <2014|10|29> ; version: 1.0 ; file saved as: blink.asm ; for AVR: atmega328p ; clock frequency: 16MHz (optional) ;************************************ ; Program funcion:--------------------- ; counts off seconds by blinking an LED ; ; PD4 ---> LED ---> R(330 ohm) ---> GND ; ;-------------------------------------- .nolist .include "./m328Pdef.inc" .list ;============== ; Declarations: .def temp = r16 .def overflows = r17 .org 0x0000 ; memory (PC) location of reset handler rjmp Reset ; jmp costs 2 cpu cycles and rjmp costs only 1 ; so unless you need to jump more than 8k bytes ; you only need rjmp. Some microcontrollers therefore only ; have rjmp and not jmp .org 0x0020 ; memory location of Timer0 overflow handler rjmp overflow_handler ; go here if a timer0 overflow interrupt occurs ;============ Reset: ldi temp, 0b00000101 out TCCR0B, temp ; set the Clock Selector Bits CS00, CS01, CS02 to 101 ; this puts Timer Counter0, TCNT0 in to FCPU/1024 mode ; so it ticks at the CPU freq/1024 ldi temp, 0b00000001 sts TIMSK0, temp ; set the Timer Overflow Interrupt Enable (TOIE0) bit ; of the Timer Interrupt Mask Register (TIMSK0) sei ; enable global interrupts -- equivalent to "sbi SREG, I" clr temp out TCNT0, temp ; initialize the Timer/Counter to 0 sbi DDRD, 4 ; set PD4 to output ;====================== ; Main body of program: blink: sbi PORTD, 4 ; turn on LED on PD4 rcall delay ; delay will be 1/2 second cbi PORTD, 4 ; turn off LED on PD4 rcall delay ; delay will be 1/2 second rjmp blink ; loop back to the start delay: clr overflows ; set overflows to 0 sec_count: cpi overflows,30 ; compare number of overflows and 30 brne sec_count ; branch to back to sec_count if not equal ret ; if 30 overflows have occured return to blink overflow_handler: inc overflows ; add 1 to the overflows variable cpi overflows, 61 ; compare with 61 brne PC+2 ; Program Counter + 2 (skip next line) if not equal clr overflows ; if 61 overflows occured reset the counter to zero reti ; return from interrupt 

Como se puede ver, mis comentarios son un poco más breves ahora. Una vez que sabemos qué hacen los comandos en el conjunto de instrucciones no tenemos que explicar en los comentarios. Sólo tenemos que explicar lo que está sucediendo desde el punto de vista del programa.

Estaremos discutiendo lo que todo ello no pieza por pieza, pero primero vamos a tratar de obtener una perspectiva global. El cuerpo principal del programa trabaja como sigue.

En primer lugar establezca el bit 4 de PORTD con "sbi PORTD, 4" envía un 1 a PD4 que pone la tensión a 5V en ese pin. Esto se enciende el LED. Entonces saltar a la subrutina de "retraso" que cuenta con 1/2 segundo (vamos a explicar cómo lo hace esto más adelante). Luego volvemos a parpadear y borrar el bit 4 en PORTD que establece PD4 a 0V y por lo tanto se apaga el LED. Entonces perder otro segundo de 1/2 y luego salta de vuelta al principio de abrir y cerrar nuevamente con "rjmp parpadear".

Debe ejecutar este código y ver que hace lo que debería.

Y ahí lo tienen! Eso es todo este código hace físicamente. Participan un poco más la mecánica interna de lo que está haciendo el microcontrolador y por eso estamos haciendo este tutorial. Así que vamos a discutir cada sección a su vez.

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