Está en la página 1de 22

Capitulo 2 Entradas y salidas

2.0 Introduccin general


Los microcontroladores disponen de un oscilador que genera los pulsos que sincronizan todas las
operaciones internas. El oscilador puede ser del tipo RC, aunque generalmente se prefiere que
est controlado por un cristal de cuarzo (XTL) debido a su gran estabilidad de frecuencia. La
velocidad de ejecucin de las instrucciones del programa est en relacin directa con la frecuencia
del oscilador del microcontrolador.
Igual que en una microcomputadora, la CPU es el cerebro del microcontrolador. Esta unidad trae
las instrucciones del programa, una a una, desde la memoria donde estn almacenadas, las
interpreta (decodifica) y hace que se ejecuten. En la CPU se incluyen los circuitos de la ALU para
realizar operaciones aritmticas y lgicas elementales con los datos binarios.
La CPU de un microcontrolador dispone de diferentes registros, algunos de propsito general y
otros de propsito especfico. Entre estos ltimos estn el registro de instruccin, el registro de
estado, el contador de programa, el registro de direcciones de datos y el puntero de pila.
El registro de instruccin almacena la instruccin que est siendo ejecutada por la CPU. Este
registro de instruccin es invisible para el programador.
El registro de estado (status) agrupa los bits indicadores de las caractersticas del resultado de las
operaciones aritmticas y lgicas realizadas en la ALU. Entre estos indicadores estn el signo del
resultado (si es positivo o negativo), si el resultado es cero, si hay acarreo o prstamo, el tipo de
paridad (par o impar) del resultado, etc.
El contador de programa (PC: program counter) es el registro de la CPU donde se almacena
direcciones de instrucciones. Cada vez que la CPU busca una instruccin en la memoria, el PC se
incrementa, apuntando as a la direccin de la instruccin que ser ejecutada a continuacin de la
que se est ejecutando en el momento. Las instrucciones de transferencia de control modifican el
valor del PC.
El puntero de pila (SP: stack pointer) es el registro que almacena direcciones de datos en la pila.
La memoria del microcontrolador, es el lugar donde las instrucciones son almacenadas del
programa y los datos que manipula. En un microcontrolador siempre hay dos tipos de memoria: la
memoria RAM (Random Access Memory) y la memoria ROM (Read Only Memory). La memoria
RAM es una memoria de lectura escritura, que adems es voltil, es decir, pierde la informacin
almacenada cuando falla la energa que alimenta la memoria. La memora ROM es una memoria de

slo lectura y no es voltil. Las diferentes tecnologas para realizar las memorias de slo lectura
son: ROM, EPROM, EEPROM, OTP, FLASH. Tanto la memoria RAM como las memorias ROM son de
acceso aleatorio, pero la costumbre ha dejado el nombre de RAM para las memorias de lectura y
escritura. El trmino acceso aleatorio se refiere a que el tiempo necesario para localizar un dato
no depende del lugar de la memoria donde este almacenado. En las memorias de acceso
secuencial, en cambio, cuando ms alejado est un dato de la posicin a la que se ha accedido por
ltima vez, ms se tarda en localizarlo.
La memoria ROM se emplea para almacenar permanentemente el programa que debe de ejecutar
el microcontrolador. En la memora RAM se almacenan temporalmente los datos con los que se
trabaja el programa. Un nmero creciente de microcontroladores dispone de alguna memoria no
voltil de tipo EEPROM para almacenar datos fijos o que slo sean cambiados espordicamente.
La cantidad de memoria ROM disponible es normalmente muy superior a la cantidad de memoria
RAM. Esto obedece a dos razones. La primera es que la mayora de las aplicaciones requieren
programas que manejan pocos datos. La segunda razn es que la memoria RAM ocupa mucho ms
espacio en el circuito integrado que la memoria ROM, de modo que es mucho ms costosa que
est.
Las entradas y salidas son particularmente importantes en los microcontroladores, pues a travs
de ellas el microcontrolador interacciona con el exterior. Forman parte de las entradas y salidas los
puertos paralelo y serie, los temporizadores y la gestin de las interrupciones. El microcontrolador
puede incluir entradas y salidas analgicas asociadas a convertidores A/D y D/A, tiene particular
importancia los recursos que garantizan un funcionamiento seguro del microcontrolador, como el
denominado perro guardin.
Un microcontrolador combina los recursos fundamentales disponibles en una microcomputadora,
es decir, la unidad central de procesamiento (CPU), la memoria y los recursos de entrada salida, en
un nico circuito integrado. En la siguiente figura se muestra el diagrama de bloques de un
microcontrolador.

2.1 Caractersticas de los AVR de ATMEL.


Los AVR son una familia de microcontroladores RISC de Atmel. La arquitectura de los AVR fue
concebida por dos estudiantes en el Norwegian Institute of Technology, y posteriormente refinada
y desarrollada en Atmel Norway, la empresa subsidiaria de Atmel, fundada por los dos arquitectos
del chip.
El AVR es una CPU de arquitectura Harvard. Tiene 32 registros de 8 bits. Algunas instrucciones slo
operan en un subconjunto de estos registros. La concatenacin de los 32 registros, los registros de
entrada/salida y la memoria de datos conforman un espacio de direcciones unificado, al cual se
accede a travs de operaciones de carga/almacenamiento. A diferencia de los microcontroladores
PIC, el stack se ubica en este espacio de memoria unificado, y no est limitado a un tamao fijo.
El AVR fue diseado desde un comienzo para la ejecucin eficiente de cdigo C compilado. Como
este lenguaje utiliza profusamente punteros para el manejo de variables en memoria, los tres
ltimos pares de registros internos del procesador, son utilizados como punteros de 16 bit al
espacio de memoria externa, bajo los nombres X, Y y Z. Esto es un compromiso que se hace en
arquitecturas de ocho bit desde los tiempos de Intel 8008, ya que su tamao de palabra nativo de
8 bit (256 localidades accedidas) es pobre para direccionar. Por otro lado, hacer que todo el banco
superior de 16 registros de 8 bit tenga un comportamiento alterno como un banco de 8 registros
de 16 bit, complicara mucho el diseo, violando la premisa original de su simplicidad. Adems,
algunas instrucciones tales como 'suma inmediata' ('add immediate' en ingls) faltan; ya que la
instruccin 'resta inmediata' ('subtract immediate' en ingls) con el complemento a dos puede ser
utilizada como alternativa.
El set de instrucciones AVR est implementado fsicamente y disponible en el mercado en
diferentes dispositivos, que comparten el mismo ncleo AVR pero tienen distintos perifricos y
cantidades de RAM y ROM: desde el microcontrolador de la familia Tiny AVR ATtiny11 con 1KB de
memoria flash y sin RAM (slo los 32 registros), y 8 pines, hasta el microcontrolador de la familia
Mega AVRATmega2560 con 256KB de memoria flash, 8KB de memoria RAM, 4KB de memoria
EEPROM, convertidor anlogo digital de 10 bits y 16 canales, temporizadores, comparador
analgico, JTAG, etc. La compatibilidad entre los distintos modelos es preservada en un grado
razonable.
Los microcontroladores AVR tienen un segmentado ('pipeline' en ingls) con dos etapas (cargar y
ejecutar), que les permite ejecutar la mayora de las instrucciones en un ciclo de reloj, lo que los
hace relativamente rpidos entre los microcontroladores de 8-bit.
El set de instrucciones de los AVR es ms regular que la de la mayora de los microcontroladores
de 8-bit (por ejemplo, los PIC). Sin embargo, no es completamente ortogonal:

Los registros punteros X, Y y Z tienen capacidades de direccionamiento diferentes entre s


(ver ms arriba por qu)
Los registros 0 al 15 tienen diferentes capacidades de direccionamiento que los registros
16 al 31.
Las registros de I/O 0 al 31 tienen distintas caractersticas que las posiciones 32 al 63.

La instruccin CLR afecta los 'flag', mientras que la instruccin SER no lo hace, a pesar de
que parecen ser instrucciones complementarias (dejar todos los bits en 1, y dejar todos los
bits en 0 respectivamente).
Los cdigos de operacin 0x95C8 y 0x9004 hacen exactamente lo mismo (LPM).

Como los PIC, tiene una comunidad de seguidores (ejemplificadas por el foro de internet
AVRFreaks), principalmente debido a la existencia de herramientas de desarrollo gratuitas o de
bajo costo. Estos microcontroladores estn soportados por tarjetas de desarrollo de costo
razonable, capaces de descargar el cdigo al microcontrolador, y por una versin de las
herramientas GNU. Esto ltimo es posible por su uniformidad en el acceso al espacio de memoria,
propiedad de la que carecen los procesadores de memoria segmentada o por bancos, como el PIC
o el 8051 y sus derivados.
2.2 Componentes bsicos del microcontrolador
El microcontrolador AVR requiere de pocos componentes externos para comenzar a utilizarlo.
Estos componentes son el circuito de reset y el circuito de reloj. Inclusive pueden llegar a ser
opcionales en algunos microcontroladores.
2.2.1 Reloj.
Para el funcionamiento del AVR, se requiere una fuente de pulsos de reloj, la cual se encargue de
suministrar al AVR con una frecuencia de trabajo al reloj del CPU del microcontrolador. Este reloj
del CPU est ligado a los mdulos de los registros de propsito general, registro de estado,
registros de memoria de datos entre otros. Al detener el reloj del CPU, se inhibe al ncleo para
realizar operaciones o clculos.
Una fuente de reloj externa confiable, es un cristal o un oscilador. La conexin de un cristal como
fuente de reloj del AVR se muestra en la siguiente figura.
El microcontrolador atmega48, tiene la caracterstica de que puede utilizar una fuente de reloj
interna, pre calibrado para frecuencia de 8 MHZ, y la posibilidad de utilizar un divisor de reloj
entre 8, lo que resulta en una frecuencia de trabajo de 1 MHZ.
2.2.2 Reset.
El reset es una accin con la cual se inicia el trabajo de los microprocesadores y
microcontroladores. Esta accin se ejecuta cuando se aplica una seal denominada reset- a una
terminal, designado tambin como reset. El efecto prctico de la seal es poner el contador de
programa (PC) en un valor predeterminado (por ejemplo PC = 0), haciendo as que el
microprocesador o microcontrolador comience a ejecutar las instrucciones que estn a partir de
esa posicin de memoria apuntada por el AVR.
El circuito de reset es aquel que permite regresar todos los registros de entradas y salidas a sus
valores inciales y empezar a ejecutar el programa en el vector del reset.

Cuando una fuente de reset se activa, todos los puertos de entradas y salidas regresan
inmediatamente a sus estados inciales; sin requerir ningn ciclo de reloj.
Una vez que todas las fuentes de reset son desactivadas, transcurre un ciclo de espera retardo-,
que ampla la duracin del reset interno, permitiendo que las fuentes de poder almacene un nivel
estable antes de comenzar con las operaciones regulares. Este tiempo de espera puede ser
seleccionado por el usuario a travs de los bits fusibles CKSEL. El circuito bsico a reset y un cristal
externo es el siguiente:

Las fuentes de reset del microcontrolador atmega8 son las siguientes.


Reset de energizado: cuando el voltaje es aplicado por primera vez.
Reset externo: cuando se aplica un nivel lgico al pin de reset.
Reset de watchdog: cuando expira el contador del watchdog (si es que este est
habilitado)
Reset de Brown-out: reset de proteccin ante cadas de tensin (si es que est habilitado)

2.3 Puertos de entrada salida.


El AVR atmega48 consiste de tres puertos de entrada salida (I/O). Cada puerto de entra salida
consiste de tres registros: DDRx, PINx y PORTx.
2.3.1 Registro DDRx.
El registro DDRx configura la direccin que tienen los datos en el puerto, si ser una entrada o una
salida. Escribir un uno a un bit de este registr, configura el pin correspondiente al bit como salida.
Escribir un cero lo hace entrada.
2.3.2 Registro PINx.
Lee el estado de PORTx, independientemente del estado de DDRx. Bsicamente sirve para leer el
estado del pin del puerto cuando este se ha configurado como entrada.
2.3.3 Registro PORTx.
Si el pin est configurado como salida escribir un uno o un cero en el bit correspondiente de este
registro ocasiona que la salida en este pin sea uno o cero. Si el pin est configurado como entrada,
escribir un uno en el bit correspondiente de este registro, habilita la resistencia de pull up. Escribir
un cero, estando configurado como salida, deshabilita la resistencia de pull up.

Figura 2.2 Diagrama esquemtico de un pin de entrada y salida del microcontrolador AVR

2.4 Prctica de entradas salidas.


2.4.1 Objetivo.
Conocer las secciones que conforman un programa, as como los registros que se utilizan para el
direccionamiento de entradas salidas.
2.4.2 Material.
El material necesario para realizar esta prctica es el siguiente:

Cantidad
cantidad
1
Cristal de cuarzo de 4 MHZ.
2
Capacitores de 22 pf
1
Interruptor tipo push button
1
Resistor de 10K
1
Resistor de 1K
4
Resistores de 220
4
Diodos emisores de luz LEDs
1
Programador de microcontroladores
1
Microcontrolador atmega48
1
Fuente de alimentacin de 5 volts
Pinzas, protoboard, cable telefnico

2.4.3 Desarrollo.
Arme el circuito de la siguiente figura.

2.4.4 Cdigo.
//_____________inicio de programa
#include <avr/io.h>

//se llama a la librera de entrada salida

#define step1 8

//se define la variable step1 con el valor de 8

#define step2 4

//se define a la variable step2 con el valor de 4

#define step3 2

//se define a la variable step3 con el valor de 2

#define step4 1

//se defina a la variable step4 con el valor de 1

void config_io(void) {

//funcin de configuracin de I/O

DDRC=0x0F;

//puerto C tres bits como entradas y cuatro como salidas de I/O

DDRD=0b11111011;

//PD2 como entrada

PORTD=_BV(PD2);

//activar resistor de pull up en PD2

}
void retardo (void) {
int16_t i;

//funcin de retardo
//declaracin de entero de 16 bits i

for (i=0; i<25000; i++); //ciclo for para 2500 ciclos


}
void secuencia1 (void){
PORTC=step1;

//funcin para secuencia 1 de I/O


//se iguala al puerto C con el valor de step1

retardo();

//retardo para que el led se quede prendido

PORTC=step2;

// se iguala al puerto C con el valor de step2

retardo();

// retardo para que el led se quede prendido

PORTC=step3;

// se iguala al puerto C con el valor de step3

retardo();

// retardo para que el led se quede prendido

PORTC=step4;

// se iguala al puerto C con el valor de step4

retardo();

// retardo para que el led se quede prendido

}
void secuencia2 (void){

//funcin para secuencia 2 de I/O

PORTC=step4;

// se iguala al puerto C con el valor de step4

retardo();

// retardo para que el led se quede prendido

PORTC=step3;

// se iguala al puerto C con el valor de step3

retardo();

// retardo para que el led se quede prendido

PORTC=step2;

// se iguala al puerto C con el valor de step2

retardo();

// retardo para que el led se quede prendido

PORTC=step1;

// se iguala al puerto C con el valor de step1

retardo();

// retardo para que el led se quede prendido

}
void main(void){

//funcin principal

config_io();

//llamada a funcin config_io

while(1){

//ciclo infinito

switch(PIND){ //funcin de seleccin mltiple


case(4):

//se entra cuando el puerto C es igual a 4


secuencia1();

//se va a la secuencia 1

break;

//para la secuencia

case(0):

}
}
}

//se entra cuando el puerto C es igual a 0


secuencia2();

//se va a la secuencia 2

break;

//para la secuencia

//termina la funcin switch


//termina el ciclo while
//termina el programa main

//___________fin de programa

2.4.4.1 Otro cdigo


/*
* PRACTICA_IO.c
*
* Created: 02/07/2012 10:49:27 a.m.
* Author: Eduardo Balderas
*/
#include <avr/io.h>
#define PASO_1 0x01

/* DEFINE PASO_1 CON VALOR DE 0x01 */

#define PASO_2 0x02

/* DEFINE PASO_2 CON VALOR DE 0x02 */

#define PASO_3 0x04

/* DEFINE PASO_3 CON VALOR DE 0x04 */

#define PASO_4 0x08

/* DEFINE CON VALOR DE 0x08 */

int

PASOS;

/* DECLARA VARIABLE */

int main(void)
{
PORTD=_BV(PD2);
DDRC= 0x0F;

while(1)
{
if ((PIND & _BV(PD2)) == _BV(PD2))
PASOS++;
else
PASOS--;
asm("nop");
if (PASOS>4)
PASOS=1;
if (PASOS<=0)
PASOS=4;
for (int i = 0 ; i < 30000 ; i++);
switch (PASOS)
{
case(1): PORTC=PASO_1;
break;
case(2): PORTC=PASO_2;
break;
case(3): PORTC=PASO_3;

break;
case(4): PORTC=PASO_4;
break;
default: break;
}

//TODO:: Please write your application code


}
}

2.5 Trabajo adicional.


2.5.1 Parpadeo de un Led.

Parpadeo de un LED
Descripcin.
En este programa se maneja el puerto para hacer parpadear un LED, en este caso se realiza el
parpadeo a travs de dos mtodos distintos de programacin, utilizando todo el puerto o slo un
bit del mismo, se selecciona el pin deseado el cual se conecta a un LED en el cual se visualiza el
parpadeo.

Diagrama Esquemtico.

Materiales.
1 LED.
1 Resistores de 220 Ohms.
1 Microcontrolador ATmega48.

Introduccin.
El microcontrolador tiene varios puertos de los cuales se puede hacer uso, estos puertos se
pueden configurar como se quiera, como entrada o como salida, para poder hacer esto es
necesario escribir en los registros del puerto para darle las instrucciones necesarias. Existen tres
principales formas de controlar los puertos, si se toma como ejemplo el puerto B.

DDR.
Para obtener que el puerto B se comporte como entrada, como salida o ambos, es necesario
indicarle esto en el DDR, este registro no activara ni desactivara ningn pin del microcontrolador,
simplemente le indicara al puerto si este ser entrada o salida.

Para indicarle al DDR si el puerto sea de entrada o salida, el 1 indica salida, y el 0 entrada, se le
puede escribir como hexadecimal, decimal, o binario, por ejemplo, si se desea que todos los bits
del puerto sean salidas se puede escribir como sigue:

DDRB=0xFF;
DDRB=255;
DDRB=0b11111111;

//como hexadecimal.
//como decimal.
//como binario.

Si se quiere que algunos bits funcionen como entradas:


DDRB=0x8C;
DDRB=140;
DDRB=0b10001100;

//como hexadecimal.
//como decimal.
//como binario.

Se puede escribir en cualquiera de los tres tipos (binario hexadecimal y decimal), en todos los
registros.

PORT.
El registro PORT controla la salida del puerto, este se emplea en caso de que el DDR haya sido
seleccionado como salida, un 1 en el PORT indica un nivel alto en el puerto como salida, un 0
indica que el pin esta en nivel bajo. A continuacin se muestran varias configuraciones de ejemplo
para el PORT:

PORTB=0xFF;
PORTB=0x00;
PORTB=0x03;

PIN.

//todos los pines estn activos.


//todos los pines estn desactivados.
//slo los primeros dos bits del puerto estn activos.

El PIN es un registro de lectura (es conveniente hacer notar en la imagen del registro donde dice
Read/Write, todos son R), este registro presenta un 1 si a un pin del microcontrolador se le est
alimentando externamente, y un cero si esta en nivel bajo de voltaje.
En este caso el valor del PIN se le puede asignar a una variable la cual guardara el valor de la
misma, al momento de ejecutar la instruccin por ejemplo.
valor =PINB;

//el valor de PINB es asignado a la variable "valor".

Programa en C.
#include <avr/io.h>
#include <util/delay.h>

//librera de entradas y salidas.


//librera de retardos.

int main (void){


DDRB=0xFF;
while(1){
PORTB=0x01;
_delay_ms(250);
PORTB=0x00;
_delay_ms(250);
PORTB|=_BV(PB0);
_delay_ms(250);
PORTB&=~(_BV(PB0));
_delay_ms(250);
}
}

//inicio del programa principal.


//declarar el puerto B como salidas.
//iniciar bucle infinito.
//puerto B = 00000001.
//retardo 250 milisegundos.
//puerto B = 00000000.
//retardo de 250 milisegundos.
//Bit 0 del puerto B = 1.
//retardo de 250 milisegundos.
//Bit 0 del puerto B = 0.
//retardo de 250 milisegundos.
//fin del bucle infinito.
//fin del programa principal

Detalles del programa.


#include <avr/io.h>
Se incluye la librera
microcontrolador.
#include <util/delay.h>

avr/io que contiene la informacin de las entradas y salidas del

Esta librera es necesaria para poder utilizar los retardos de tiempo requeridos.
int main (void){
El main es la funcin principal, es donde el programa inicia, siempre es necesario declarar la
funcin main.

DDRB=0xFF;
Los puertos del micro contienen tres registros los cuales son, el DDR el PORT y el PIN, en este caso
se hace uso del registro DDR, ste es el que determina el uso que se le va a dar al puerto del
microcontrolador, si se le asigna un uno es de salida, y un cero es de entrada.
En este caso 0xFF es la nomenclatura para indicar un valor hexadecimal, si se expresa en binario,
este se escribe 0b11111111, en donde se puede ver claramente que los 8 bits del DDR estn
activados como salidas.
while(1){
El ciclo while, es un ciclo que ejecuta todas las instrucciones que se encuentran dentro de sus
corchetes, siempre y cuando lo que este dentro del parntesis se cumpla, en este caso el 1 es lo
mismo que TRUE, por lo tanto, siempre se cumple y se ejecutaran cclicamente las instrucciones
dentro del while. Esto se hace con la intencin de que el programa nunca se detenga, y siempre
repita lo mismo.
PORTB=0x01;
_delay_ms(250);
PORTB=0x00;
_delay_ms(250);

Una manera de hacer parpadear un LED es activando y desactivando la fuente, en este caso, la
fuente de alimentacin del mismo viene del bit 0 o el primero pin del puerto B, como se puede ver
en el cdigo, se le asigna un 0x01, se espera 250 milisegundos, se le asigna 0x00 y vuelve a esperar
el mismo tiempo.
Estas instrucciones manejan a los 8 bits del puerto, la tabla a continuacin describe el cdigo.

PORTB|=_BV(PB0);
_delay_ms(250);
PORTB&=~(_BV(PB0));
_delay_ms(250);
En este caso las instrucciones de activar y desactivar el pin del puerto, son algo ms complejas, ya
que se separa y se activa o desactiva el bit 0 del puerto B.

Prcticamente el cdigo hace lo mismo, pero la principal diferencia y ventaja, es que al usar este
cdigo, se manejan independiente los bits del puerto, esto es, que al aislar los bits, se puede
trabajar con ellos de manera que si se cambia a uno, no afecte al otro. Esto se observa en la
siguiente tabla.

2.5.2 Manejo de los puertos.

Manejo de los Puertos


Descripcin.
En este programa se presenta un uso prctico de los registros de los puertos, se enciende un LED
conectado a un pin del microcontrolador, para lo cual se conecta un Push Button que al
presionarlo har que prenda el LED. En este ejemplo se emplean las estructuras de control como el
while y el if.

Diagrama Esquemtico.

Materiales.
1
1
1
1

LED.
Resistor de 220 Ohms.
Push Button.
Resistor de 10Kohms.

1 Microcontrolador ATmega48.

Introduccin.
while

Como se puede ver en el diagrama de flujo, el ciclo while, ejecuta toda instruccin dentro del
mismo, siempre y cuando la condicin se cumpla. La nomenclatura del ciclo while es:

while("condicin") {
instruccin A;
instruccin B;
}

Por lo tanto, siempre y cuando la condicin se cumpla, las instrucciones se ejecutaran, en caso de
que la condicin no se cumpla, se brinca las instrucciones y el programa continua.
if else

En el if/else, tambin hay una condicin y si esta se cumple ejecuta el proceso o las instrucciones
indicadas dentro de los corchetes, en caso de que no se cumpla es opcional escribir el "else" el
cual ejecutara un proceso, en caso de que la condicin haya sido falsa.

Programa en C.
#include <avr/io.h>
#include <util/delay.h>

//librera necesaria para las entradas y salidas.


//librera para emplear los retardos de tiempo.

int main (void){


DDRB=0x00;
DDRD=0xFF;
while(1){
if (PINB==0x01){
PORTD=0x01;
_delay_ms(1000);
PORTD=0x00;

//inicio del programa principal.


//declarar el puerto B como entrada.
//declarar el puerto D como salida.
//inicio del bucle infinito.
//si el PINB es igual a 1.
//prender el LED conectado al bit 0 del puerto D.
//retardo de 1000 mili segundos.
//apagar el LED.

}
}
}

//fin del ciclo de if.


//fin del ciclo del bucle infinito.
//fin del programa principal.

Detalles del programa.


#include <avr/io.h>

Se incluye la librera avr/io que contiene la informacin de las entradas y salidas del
microcontrolador.
#include <util/delay.h>
Esta librera es necesaria para poder utilizar los retardos de tiempo.
int main (void){
El main es la funcin principal, es donde el programa inicia, siempre es necesario declarar la
funcin main.

DDRB=0x00;
DDRD=0xFF;
Se declara el puerto B como entrada y el puerto D como salida.
while(1){
El 1 es igual a verdadero, el ciclo while nunca se termina.
if (PINB==0x01){
Al emplear el if la condicin tiene que ir dentro de parntesis, y en este caso como se puede ver se
usa doble smbolo de igual para diferenciarlo de cuando se le asigna un valor a una variable.

variable =14;
variable ==14;

//se le asigna el valor de 14 a la variable.


//se comparan variable y 14, si es verdadero arroja un 1.

Ntese que se est utilizando PINB, el cual pertenece al puerto B, el mismo que se declaro como
salida en el DDR. Esta condicin corresponde al Push Button conectado en el pin del puerto B.
PORTD=0x01;

Se le da al puerto la instruccin de tomar el valor 0x01, previamente el puerto D se declaro como


salida.

_delay_ms(1000);

Instruccin de retardo de 1000 milisegundos, el valor dentro de los parntesis puede ser ajustado
como se requiera.
PORTD=0x00;
Se desactivan todos los pines del puerto D.

También podría gustarte