miércoles, 30 de octubre de 2013

TIMER0

A continuación se hará mención del uso de una parte importante de los micro controladores, y es el uso de los timers, en este caso del timer0 en modo CTC.

La razón de presentar este ejemplo es por su gran utilidad al realizar operaciones debido a que hace uso de la interrupción de comparación con el registro OCR0A con lo cual el código dentro de la interrupción se ejecuta independientemente del resto.

EXPLICACIÓN:

El código realiza una interrupción cada 1 mili segundo y realiza la operación de cambiar el estado lógico de la salida PB0, que en este caso es un led que conmuta su estado cada vez que se genera la interrupción.


Al finalizar agregare el link para que puedan descargar la simulación y el programa


/*
 * TIMER_0.c
 *
 * Created: 22/09/2013 11:57:06
 *  Author: NEBURESS.KYLL
 */


#include <avr/io.h>
#include <avr/interrupt.h>
#define clearbit(sfr,bit)(_SFR_BYTE(sfr)&=~(_BV(bit)))
#define setbit(sfr, bit)(_SFR_BYTE(sfr) |= (_BV(bit)))
#define togglebit(sfr,bit)(_SFR_BYTE(sfr)^=(_BV(bit)))

ISR(TIMER0_COMPA_vect){
//Se ejecuta cada 1ms
togglebit(PORTB,PB0);

}
void TEMPORIZADOR(){
//PREESCALER DEL TIMER0 A 64
clearbit(TCCR0B,CS02);
setbit(TCCR0B,CS01);
setbit(TCCR0B,CS00);
//DESCONECTAR OC0A
clearbit(TCCR0A,COM0A1);
clearbit(TCCR0A,COM0A0);
//MODO CTC
clearbit(TCCR0B,WGM02);
setbit(TCCR0A,WGM01);
clearbit(TCCR0A,WGM00);
OCR0A=124;
}
//habilitación de la interrupción por coincidencia
void INTERRUPCION(){

setbit(TIMSK0,OCIE0A);
sei();
}

int main(void)
{
   
TEMPORIZADOR();
INTERRUPCION();
setbit(DDRB,DDB0);
setbit(PORTB,PB0);

    while(1)
    {
        //TODO:: Please write your application code

    }
}

LINK

https://mega.co.nz/#!818nmTRC!dfNNvToziWGWHdZaeFjG4AhruecWmCZxs2PDdyVcDDQ


No hay comentarios:

Publicar un comentario