MICROCONTROLADORES PIC

14
MICROCONTROLADORES PIC TIMER0

description

MICROCONTROLADORES PIC. TIMER0 . MODULO TIMER0. Es un modulo contador/temporizador de 8 BITs, que cuenta con un preescalador programable de 8 BITs Puede funcionar como temporizador o como contador En modo temporizador el modulo Timer0 se incrementa con cada ciclo de instrucción. - PowerPoint PPT Presentation

Transcript of MICROCONTROLADORES PIC

Page 1: MICROCONTROLADORES PIC

MICROCONTROLADORES PIC

TIMER0

Page 2: MICROCONTROLADORES PIC

Es un modulo contador/temporizador de 8 BITs, que cuenta con un preescalador programable de 8 BITs

Puede funcionar como temporizador o como contador

En modo temporizador el modulo Timer0 se incrementa con cada ciclo de instrucción.

En el modo contador el modulo timer0 se incrementa en cada flanco (ascendente o descendente) del pin RA4/TOCKI.

En ambos casos al desbordarse (pasar de FF A 00) el modulo timer0 genera una interrupción.

MODULO TIMER0

Page 3: MICROCONTROLADORES PIC

EL REGISTRO OPTION. El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR0, el tipo de flanco con el que se detecta una interrupción y la activación de las resistencias de polarización del puerto B. Ocupa la posición 81h de la página 1 del banco de registros. Debe escribirse usando la instrucción especial OPTION. Esta instrucción carga el contenido de W en el registro OPTION.

si el BIT TOCS del registro OPTION es cero entonces se trabaja en modo temporizador. si el BIT TOCS del registro OPTION es uno entonces se trabaja en modo contador.

En el modo contador se puede seleccionar si el incremento se producirá en un flanco de subida o en un flanco de bajada, mediante el BIT TOSE del registro OPTION.

El Preescaler es compartido por el TIMER0 y por el WATCHDOG, se asigna a un modulo o a otro mediante el BIT PSA del registro OPTION.

El valor del preescaler se selecciona con los BITS PS0:PS2.

MODULO TIMER0

Page 4: MICROCONTROLADORES PIC

MODULO TIMER0

Page 5: MICROCONTROLADORES PIC

Modulo TIMER0

Page 6: MICROCONTROLADORES PIC

El tiempo de desbordamiento del TIMER0, se halla de acuerdo a la siguiente formula.

T=TCM*PRESCALER*(256-carga TIMER0) TCM=4/FOSC=CICLO DE MAQUINA.

MODULO TIMER0

Page 7: MICROCONTROLADORES PIC

SETUP_TIMER_0(MODO).- establece la fuente de reloj, el preescaler, etc. para el TIMER0; donde MODO esta definido en el fichero de cabecera, estos afectan a los BITs 0:5 del registro OPTION.

TIMER0 EN CCS

Page 8: MICROCONTROLADORES PIC

SETUP_TIMER_0(MODO) OPTION_REG()RTCC_INTERNAL 00HRTCC_EXT_L_TO_H 20HRTCC_EXT_H_TO_L 30HRTCC_DIV_1 08HRTCC_DIV_2 01HRTCC_DIV_4 02HRTCC_DIV_8 03HRTCC_DIV_16 04HRTCC_DIV_32 05HRTCC_DIV_64 05HRTCC_DIV_128 06HRTCC_DIV_256 07H

TIMER0 EN CCS

Page 9: MICROCONTROLADORES PIC

Estos distintos modos se puede agrupar usando el símbolo |

Setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL|RTCC_8_BIT);

SET_TIMER0()◦ Fija el valor inicial del TIMER0 para que empiece la cuenta. SET_TIMER0(15);

VALUE=GET_TIMER0();◦ Lee el valor actual del Timer0;

TIMER0 EN CCS

Page 10: MICROCONTROLADORES PIC

Generar una señal cuadrada de 62.5Hz utilizando la interrupción del TIMER0

Se necesita un semiperiodo de 8mS, por lo tanto, utilizando la siguiente formula:T=TCM*PRESCALER*(256-carga TIMER0)8ms=4/(4MHZ)*2*(256-X)X=?

Uso del TIMER0 como temporizador

Page 11: MICROCONTROLADORES PIC

ESQUEMATICO

Page 12: MICROCONTROLADORES PIC

Hacer parpadear un LED conectado al PIN_B0 cada 500mS y ademas hacer cambiar de estado a un led conectado al PIN_B1 cada tres pulsos que ingresan por RA4.

Solucion:El timer0 es un registro de 8 bit que puede contar hasta 256, para que se desborde con tres pulsos se le cargara con 253.

USO DEL TIMER0 COMO CONTADOR

Page 13: MICROCONTROLADORES PIC

ESQUEMATICO

Page 14: MICROCONTROLADORES PIC

#include<16f628a.h>#fuses xt,nowdt,protect#use delay(clock=4Mhz)

#INT_TIMER0 void isr_timer0(){ //rutina de atencion a la interrupcion del timer0output_toggle(PIN_B1); //invirtiendo el estado del pin b1set_timer0(253); //cargando el timer0 con 253}

void main(){ setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); //timer0 como contador enable_interrupts(INT_TIMER0); //habilitacion de la interrupcion timer0 enable_interrupts(GLOBAL); //habilitacion global de interrupcion set_timer0(253); //se carga el registro timer0 con 253 while(true){ output_toggle(PIN_B0); //parpadeo de led delay_ms(500); }}

CODIGO