1 / 14

MICROCONTROLADORES PIC

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.

rea
Download Presentation

MICROCONTROLADORES PIC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MICROCONTROLADORES PIC TIMER0

  2. 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. • 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.

  3. MODULO TIMER0 • 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.

  4. MODULO TIMER0

  5. Modulo TIMER0

  6. MODULO TIMER0 • 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.

  7. TIMER0 EN CCS • 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.

  8. TIMER0 EN CCS

  9. TIMER0 EN CCS 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;

  10. Uso del TIMER0 como temporizador • 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=?

  11. ESQUEMATICO

  12. USO DEL TIMER0 COMO CONTADOR • 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.

  13. ESQUEMATICO

  14. CODIGO #include<16f628a.h> #fuses xt,nowdt,protect #use delay(clock=4Mhz) #INT_TIMER0 void isr_timer0(){ //rutina de atencion a la interrupcion del timer0 output_toggle(PIN_B1); //invirtiendo el estado del pin b1 set_timer0(253); //cargando el timer0 con 253 } voidmain(){ 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); } }

More Related