LAB3_2016A

Embed Size (px)

Citation preview

  • 8/16/2019 LAB3_2016A

    1/4

     Microcontroladores

     Ing. Flavio Condor De La Cruz   1

    LABORATORIO N° 3

    PROGRAMANDO EN LENGUAJE C

    OBJETIVO

    Conocer la estructura y las sentencias básicas para programar en lenguaje C elmicrocontrolador Atmega8.

    FUNDAMENTO TEORICO

    #include

    Incluimos la librería avr/io que contiene la información de las entradas y salidas delmicrocontrolador.

    #include

    Esta librería es necesaria para poder utilizar los retardos de tiempo

    int main (void)

    El main es la función principal, es donde el programa inicia, siempre es necesario declarar lafunción main.

    Funciones y macros útiles de la Librería “AVR-LIBC” 

    Dentro de la basta cantidad de funciones y macros implementadas en el paquetede librerías, hay funciones y macros que son muy utilizadas para facilitar la programaciónen microcontroladores, como operaciones orientadas a bits, bytes y words. Algunas de lasmás útiles son:

      Macro _BV(bit): 

    Convierte un numero de bit a un valor de byte, por ejemplo  _BV(4) devuelve 0x10 (16 endecimal), lo que hace esta macro es un corrimiento de un 1 a la izquieda “bit” veces paraponer a 1 el “bit” correspondiente en un byte. Es lo mismo que escribir

    (1

  • 8/16/2019 LAB3_2016A

    2/4

     Microcontroladores

     Ing. Flavio Condor De La Cruz   2

      Función _delay_ms(milisegundos): 

    Se encuentra en la librería y sirve para hacer retardo en milisegundos.

      Macros bit_is_set(sfr,bit) y bit_is_clear(sfr,bit):

    Verifican si el “bit” en el registro “sfr” es un 1 para bit_is_set() o un 0 para bit_is_clear(), devolviendo verdadero (1) si se cumple la condición.

      Macros loop_until_bit_is_set(sfr,bit)  y loop_until_bit_is_clear(sfr,bit): 

    La primer macro espera a que el “bit” en “sfr” se ponga a 1 para después continuar con elprograma, por el contrario la segunda macro espera a que el valor del “bit” en “sfr” sea 0. 

      Macros _SFR_IO_ADDR(sfr): 

    Devuelve un apuntador al registro especificado por “sfr”. Sirve para obtener la dirección deun registro SFR.

    Estas son algunas de las funciones y macros más usadas en la programación demicrocontroladores AVR con el compilador GN avr-gcc y la avr-libc.

    PROCEDIMIENTO

    Simular e implementar lo siguiente

    Ejercicio 1. Programa que enciende y apaga 8 leds conectados al puerto B, con untiempo en alto de 0.3 seg. y un tiempo en bajo de 0.5 seg.

    Esquema

  • 8/16/2019 LAB3_2016A

    3/4

     Microcontroladores

     Ing. Flavio Condor De La Cruz   3

    Programa

    #include   //Librería de entradas y salidas #include   //Librería de retardos int main (void)  //Inicio del programa 

    {  DDRB=0xFF;  //Configura puerto B como salidawhile(1)  //Iniciar bucle infinito 

    { PORTB=0xFF;  //Saca por el Puerto B el dato 11111111 _delay_ms(300);  //Pausa de 300 milisegundos PORTB=0x00;  //Puerto B = 00000000 _delay_ms(500);  //Pausa de 500 milisegundos }

    }

    Ejercicio 2. Programa que enciende y apaga un led conectado al pin B0 del puerto

    B, con un tiempo en alto de 200ms y un tiempo en bajo de 400ms. 

    Esquema

    Programa

    #include   //Librería de entradas y salidas #include   //Librería de retardos 

    int main (void)  //Inicio del programa { 

    DDRB|=_BV(PB0);  //Configura B0 como salida, el resto no se altera

    while(1)  //Iniciar bucle infinito { PORTB|=_BV(PB0);  //Saca un 1 por el pin B0 _delay_ms(200); //Pausa de 200 milisegundos PORTB&=~(_BV(PB0));  //Saca un 0 por el pin B0 _delay_ms(400); //Pausa de 400 milisegundos }

    }

  • 8/16/2019 LAB3_2016A

    4/4

     Microcontroladores

     Ing. Flavio Condor De La Cruz   4

    Ejercicio 3. Programa que desplaza a la izquierda y a la derecha un dato por elpuerto D, este dato es el numero binario 00000001. 

    Esquema

    Programa

    #include   //Librería de entradas y salidas de los AVR #include   //Librería para usar los retardos "_delay_ms()" int main(void)  //Inicio del programa { 

    DDRD=0xFF;  //Configura el registro del puerto D como salidas PORTD=0x01;  //Asignarle el valor de 0x01 (Hexadecimal) al puerto D while(1){  //Iniciar un ciclo while infinito 

    while( PORTD 1;  //Recorrer el Puerto D un lugar a la derecha _delay_ms(200);  //Esperar 200 milisegundos 

    }}  //Terminar el while infinito 

    TRABAJO

    Presentar un circuito implementado que haga 4 juegos de luces diferentes cada juego de luces debe ser activado por el estado lógico de dos pines. (Utilizar solo elpuerto D). En el informe presentar el programa y la simulación.