Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.