La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

PIC16F877 Timers.

Presentaciones similares


Presentación del tema: "PIC16F877 Timers."— Transcripción de la presentación:

1 PIC16F877 Timers

2 Timers en el PIC16F877A Timer0 (8 bits) Timer1 (16 bits)

3 Timer0 Block Diagram

4 Timer0 OPTION_REG

5 Ejemplo de encender y apagar LEDs en el PORTB cada segundo usando el TMR0.
unsigned int cnt; void interrupt() { cnt++; // Increment value of cnt on every interrupt TMR0 = 96; INTCON = 0x20; // Set T0IE, clear T0IF } void main() { OPTION_REG = 0x84; // Assign prescaler to TMR0 TRISB = 0; // PORTB is output PORTB = 0xFF; // Initialize PORTB TMR0 = 96; INTCON = 0xA0; // Enable TMR0 interrupt cnt = 0; // Initialize cnt do { if (cnt == 400) { PORTB = ~PORTB; // Toggle PORTB LEDs cnt = 0; // Reset cnt } while(1);

6 Timer1 Control Register

7 Ejemplo de encender y apagar LEDs en el PORTB cada segundo usando el TMR1.
char cnt; void interrupt() { cnt++ ; PIR1.TMR1IF = 0; // clear TMR1IF } void main() { TRISB = 0; T1CON = 1; // enables TMR1 PIE1 = 1; // enable TMR1 interrupts PORTB = 0; cnt = 0; // initialize cnt INTCON = 0xC0; do { if (cnt == 30) { // if cnt is 30, then toggle portb PORTB = ~PORTB; // 1 sec leds and reset cnt cnt = 0; } while (1);

8 Timer2 Block Diagram

9 Timer2 Control Register

10 Ejemplo de encender y apagar LEDs en el PORTB cada segundo usando el TMR2.
char i; void interrupt() { i++ ; PIR1.TMR2IF = 0 ; // clears TMR2IF } void main() { i = 0; PORTB = 0xFF; TRISB = 0; T2CON = 0xFF; //postcaler 16, prescaler 16 TMR2 = 0; PIE1 = 2; // enable interupt INTCON = 0xC0; // for tmr2 while (1) { // endless loop if (i > 30) { PORTB = ~PORTB; // toggle portb


Descargar ppt "PIC16F877 Timers."

Presentaciones similares


Anuncios Google