Paso 16: Explicando el código
#include < avr/io.h > declara las definiciones de entrada y salida apropiadas. Por ejemplo, incluye este fichero de cabecera nos permite utilizar "DDRD" para configurar el puerto D como salida.
#include < util/delay.h > declara las funciones básicas de ocupado-espere. Esto nos permite utilizar la función _delay_ms() para crear un retardo en milisegundos. El argumento de la función indica el número de milisegundos que queremos esperar.
Usted puede notar un punto y coma (;) después de cada línea de código. El punto y coma indica al programa que este es el final del comando. La razón que necesita esto es porque cuando el programa lo lee, no ve las líneas múltiples de cuando pulsas "Enter" o "Espacio". En cambio, ve todo como una línea continua y masiva del código, por lo que necesita el punto y coma para saber cuándo empezar a interpretar un comando distinto.
"while(1)" es una forma sencilla de hacer un bucle continuo. El comando "mientras" todo dentro "{}" repite inmediatamente después de él como la declaración en el "()" es verdadero. Porque ha sido ajustado a "1", sin las variables reales o matemáticas, la declaración será siempre verdadero.
La frase "PORTD = 0b000000100;" se traduce en "activar el puerto D, número 2", que corresponde al pin 4 de nuestro microcontrolador, como se ve en la foto de arriba.
Cada número de bits representa un alfiler en un puerto. Como se puede ver D puerto tiene 8 pines: D0-D7. Así diciendo "PORTD = 0b00000100" es realmente "PORTD = 0bD7D6D5D4D3D2D1D0." Colocando de uno en uno de los pines del puerto conduce el perno de alto, mientras poner a cero el pin baja.