You are on page 1of 23

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.3.4 Entradas salidas del atmega48.


A travs de los puertos de entrada y salida es como el procesador se comunica con el mundo exterior. Este microcontrolador en particular tiene tres puertos el B, C y D que deben ser configurados para decirle cmo va a funcionar los pines del puerto si como entrada o como salida. Se puede configurar de manera independiente cada pin de un puerto como salida o como entrada. Por ejemplo con el registro DDRB se especifica la direccin del pin correspondiente, un 0 es para indicar que el pin es de entrada y un 1 de salida. Por ejemplo si se quiere que los primeros cuatro pines del puerto A sean entrada y los 4 ms significativos sean de salida se programa as: DDRB=0xf0. Importante. Cuando son configurados como entradas las terminales de un circuito integrado deben colocarse resistencias de pull-up para evitar que queden flotadas (sin conectarse), porque de quedarse flotadas el C.I. consume mayor corriente y el estado del pin oscilar, lo correcto es poner una resistencia de pull-up, si el interruptor no se presiona leer el pin un 1 lgico por la resistencia conectada a 5V, si se presiona el interruptor leer un 0 lgico, pero este microcontrolador permite al diseador ahorrar hardware ya que tiene resistencias de pull-up internas que pueden ser habilitadas.

Figura 2.3 Conexin de resistencias de Pull-up

Importante. Si ha manejado otros microcontroladores habr notado que nicamente tienen asociados un slo registro al puerto de entrada/salida, pero en este microcontrolador tiene asociados dos registros al puerto de entrada/salida, si quiere escribir al puerto B deber hacerlo

as PORTB=dato; pero si desea leer el estado de los pines de ese puerto deber hacer dato=PINB; es decir deber usar PORTB, PORTC o PORTD para escribir al puerto, y deber usar variable=PINB, variable=PINC o variable=PIND para leer el valor del puerto de entrada.

Cualquier otro microcontrolador de otros fabricante slo tienen un slo registro para leer o escribir al puerto, pero en elcaso de ATMEL se tienen dos dando la ventaja de que de esa forma el acceso a puertos es ms rpido cuando se va usar como entrada un determinado pin y posteriormente se va usar como salida, es otra ventaja que tenemos con este tipo de arquitectura. Importante. Limitantes Fsicas de los pines: mximo pueden dar 40mA por pin, pero el Circuito Integrado mximo debe manejar 200mA, es decir que sumando la corriente de los pines y la que consume el microcontrolador no deben exceder ms de 200mA. 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 #define step2 4 #define step3 2 #define step4 1

//se define la variable step1 con el valor de 8 //se define a la variable step2 con el valor de 4 //se define a la variable step3 con el valor de 2 //se defina a la variable step4 con el valor de 1

void config_io(void) {

//funcin de configuracin de I/O

DDRC=0x0F; DDRD=0b11111011; PORTD=_BV(PD2); } void retardo (void) { int16_t i;

//puerto C tres bits como entradas y cuatro como salidas de I/O //PD2 como entrada //activar resistor de pull up en PD2

//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; retardo(); PORTC=step2; retardo(); PORTC=step3; retardo(); PORTC=step4; retardo(); } void secuencia2 (void){ PORTC=step4; retardo(); PORTC=step3; retardo(); PORTC=step2; retardo(); PORTC=step1; //funcin para secuencia 2 de I/O // se iguala al puerto C con el valor de step4 // retardo para que el led se quede prendido // se iguala al puerto C con el valor de step3 // retardo para que el led se quede prendido // se iguala al puerto C con el valor de step2 // retardo para que el led se quede prendido // se iguala al puerto C con el valor de step1 //funcin para secuencia 1 de I/O //se iguala al puerto C con el valor de step1 //retardo para que el led se quede prendido // se iguala al puerto C con el valor de step2 // retardo para que el led se quede prendido // se iguala al puerto C con el valor de step3 // retardo para que el led se quede prendido // se iguala al puerto C con el valor de step4 // retardo para que el led se quede prendido

retardo(); } void main(void){ config_io(); while(1){

// retardo para que el led se quede prendido

//funcin principal //llamada a funcin config_io //ciclo infinito

switch(PIND){ //funcin de seleccin mltiple case(4): //se entra cuando el puerto C es igual a 4 secuencia1(); break; case(0): //se va a la secuencia 1 //para la secuencia //se entra cuando el puerto C es igual a 0 secuencia2(); break; } } } //___________fin de programa //se va a la secuencia 2 //para la secuencia

//termina la funcin switch //termina el ciclo while //termina el programa main

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_3 0x04 #define PASO_4 0x08 int PASOS;

/* DEFINE PASO_2 CON VALOR DE 0x02 */ /* DEFINE PASO_3 CON VALOR DE 0x04 */ /* DEFINE CON VALOR DE 0x08 */ /* 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;

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

PIN.

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> 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); } } //librera de entradas y salidas. //librera de retardos. //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> int main (void){ DDRB=0x00; DDRD=0xFF; while(1){ if (PINB==0x01){ PORTD=0x01; _delay_ms(1000); PORTD=0x00; //librera necesaria para las entradas y salidas. //librera para emplear los retardos de tiempo. //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.

You might also like