MICROCONTROLADORES PIC TIMER 0 MODULO TIMER 0 Es

  • Slides: 14
Download presentation
MICROCONTROLADORES PIC TIMER 0

MICROCONTROLADORES PIC TIMER 0

MODULO TIMER 0 � Es un modulo contador/temporizador de 8 BITs, que cuenta con

MODULO TIMER 0 � 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 Timer 0 se incrementa con cada ciclo de instrucción. � En el modo contador el modulo timer 0 se incrementa en cada flanco (ascendente o descendente) del pin RA 4/TOCKI. � En ambos casos al desbordarse (pasar de FF A 00) el modulo timer 0 genera una interrupción.

MODULO TIMER 0 � EL REGISTRO OPTION. El registro OPTION (o registro de opciones)

MODULO TIMER 0 � EL REGISTRO OPTION. El registro OPTION (o registro de opciones) se emplea para programar las opciones del temporizador TMR 0, 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 81 h 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. q si el BIT TOCS del registro OPTION es cero entonces se trabaja en modo temporizador. q si el BIT TOCS del registro OPTION es uno entonces se trabaja en modo contador. q 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. q El Preescaler es compartido por el TIMER 0 y por el WATCHDOG, se asigna a un modulo o a otro mediante el BIT PSA del registro OPTION. q El valor del preescaler se selecciona con los BITS PS 0: PS 2.

MODULO TIMER 0

MODULO TIMER 0

Modulo TIMER 0

Modulo TIMER 0

MODULO TIMER 0 � El tiempo de desbordamiento del TIMER 0, se halla de

MODULO TIMER 0 � El tiempo de desbordamiento del TIMER 0, se halla de acuerdo a la siguiente formula. � T=TCM*PRESCALER*(256 -carga � TCM=4/FOSC=CICLO DE MAQUINA. TIMER 0)

TIMER 0 EN CCS � SETUP_TIMER_0(MODO). - establece la fuente de reloj, el preescaler,

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

TIMER 0 EN CCS SETUP_TIMER_0(MODO) OPTION_REG() RTCC_INTERNAL 00 H RTCC_EXT_L_TO_H 20 H RTCC_EXT_H_TO_L 30

TIMER 0 EN CCS SETUP_TIMER_0(MODO) OPTION_REG() RTCC_INTERNAL 00 H RTCC_EXT_L_TO_H 20 H RTCC_EXT_H_TO_L 30 H RTCC_DIV_1 08 H RTCC_DIV_2 01 H RTCC_DIV_4 02 H RTCC_DIV_8 03 H RTCC_DIV_16 04 H RTCC_DIV_32 05 H RTCC_DIV_64 05 H RTCC_DIV_128 06 H RTCC_DIV_256 07 H

TIMER 0 EN CCS Estos distintos modos se puede agrupar usando el símbolo |

TIMER 0 EN CCS Estos distintos modos se puede agrupar usando el símbolo | Setup_timer_0(RTCC_DIV_2|RTCC_INTERNAL|RTCC_8_BIT); � SET_TIMER 0() ◦ Fija el valor inicial del TIMER 0 para que empiece la cuenta. SET_TIMER 0(15); � VALUE=GET_TIMER 0(); ◦ Lee el valor actual del Timer 0;

Uso del TIMER 0 como temporizador �Generar una señal cuadrada de 62. 5 Hz

Uso del TIMER 0 como temporizador �Generar una señal cuadrada de 62. 5 Hz utilizando la interrupción del TIMER 0 � Se necesita un semiperiodo de 8 m. S, por lo tanto, utilizando la siguiente formula: T=TCM*PRESCALER*(256 -carga TIMER 0) 8 ms=4/(4 MHZ)*2*(256 -X) X=?

ESQUEMATICO

ESQUEMATICO

USO DEL TIMER 0 COMO CONTADOR � Hacer parpadear un LED conectado al PIN_B

USO DEL TIMER 0 COMO CONTADOR � Hacer parpadear un LED conectado al PIN_B 0 cada 500 m. S y ademas hacer cambiar de estado a un led conectado al PIN_B 1 cada tres pulsos que ingresan por RA 4. Solucion: El timer 0 es un registro de 8 bit que puede contar hasta 256, para que se desborde con tres pulsos se le cargara con 253.

ESQUEMATICO

ESQUEMATICO

CODIGO #include<16 f 628 a. h> #fuses xt, nowdt, protect #use delay(clock=4 Mhz) #INT_TIMER

CODIGO #include<16 f 628 a. h> #fuses xt, nowdt, protect #use delay(clock=4 Mhz) #INT_TIMER 0 void isr_timer 0(){ output_toggle(PIN_B 1); set_timer 0(253); } //rutina de atencion a la interrupcion del timer 0 //invirtiendo el estado del pin b 1 //cargando el timer 0 con 253 void main(){ setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); //timer 0 como contador enable_interrupts(INT_TIMER 0); //habilitacion de la interrupcion timer 0 enable_interrupts(GLOBAL); //habilitacion global de interrupcion set_timer 0(253); //se carga el registro timer 0 con 253 while(true){ output_toggle(PIN_B 0); //parpadeo de led delay_ms(500); } }