SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
UNIVERSIDAD TECNOLÓGICA DEL SURESTE
DE VERACRUZ
• DOCENTE: ING. JOSÉ VAZQUEZ
DOMINGUEZ
• ASIGNATURA: MICROCONTROLADORES
• GRUPO: 503
• QUINTO CUATRIMESTRE
• ALUMNO: ROJAS RUIZ DIEGO ARMANDO
• CARRERA: TSU MECATRÓNICA
• LUGAR Y FECHA: NANCHITAL, VERACRUZ
A 11 DE FEBRERO DEL 2014
MICROCONTROLADORES
INTERRUPCIONES Y
TEMPORIZADORES
TEMA 2
INTERRUCCIONES PIC16F87X
CLÁSICAS PIC16F84 NUEVAS
GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
PIE1
PIE2
--- 0 --- EEIE BCLIE -- -- CCP2IE
PIR1
PIR2
Prof. Luis Zurita Microcontroladores II
PC<12:0>
Nivel 1 de la Pila
Nivel 2 de la Pila
………………
Nivel 8 de la Pila
CALL, RETURN
RETFIE, RETLW
Vector de Reset
………………
Vector de Interrupción
0000h
0004h
0005h
Página 0
Página 1
Página 2
Página 3
07FFh
0800h
0FFFh
1000h
17FFh
1FFh
13
INTERRUPCIONES EN LENGUAJE C
Ventajas de usar las directivas de interrupciones
El compilador genera el código necesario para
saltar a la función que va tras esta directiva en el
momento de la interrupción.
También genera el código para salvar al principio
y restituir al final el contexto (salvar y restaurar el
entorno), y borrará el flag que se activó con la
interrupción.
El programador debe seguir encargándose
únicamente de habilitar las interrupciones y establecer
las sentencias que se ejecutarán en cada función de las
interrupciones deseadas a ejecutarse.
Las directivas #INT_xxxx
Indican que la función que aparece a
continuación corresponde al tratamiento de una
interrupción (no tiene ni necesita parámetros):
Para los PICs 16F877 hay 14 posibles directivas:
#INT_RTCC Desborde del TMR0 TOIF
#INT_RB Cambio en RB<4:7> RBIF
#INT_EXT Cambio en RB0 INTF
#INT_AD Fin de conversión A/D ADIF
#INT_TBE Fin de transmisión USART TXIF
#INT_RDA Dato recibido en USART RCIF
#INT_TIMER1 Desborde del TMR1 TMR1IF
#INT_TIMER2 Desborde del TMR2 TMR2IF
#INT_CCP1 Captura/Comparación en CCP1 CCP1IF
#INT_CCP2 Captura/Comparación en CCP2 CCP2IF
#INT_SSP Envio/Recepción de dato serie síncrono SSPIF
#INT_PSP Dato entrante en puerto esclavo paralelo PSPIF
#INT_BUSCOL Colisión de bus I2C BCLIF
#INT_EEPROM Fin de escritura EEPROM EEIF
INTERRUPCIONES EN LENGUAJE C
La directiva #INT_DEFAULT
Indica que la función que viene a
continuación será llamada si se dispara una
interrupción y ninguno de los flags está activo.
La directiva #INT_GLOBAL
Indica que la función que va a continuación
sustituye todas las acciones que inserta el
compilador al aceptarse una interrupción. Sólo se
ejecuta lo que vaya en dicha función.
GLOBAL equivale a GIE=PEIE=1 y debe activarse de
forma independiente. El resto activarán la máscara
correspondiente.
FUNCIONES PARA GESTIÓN DE
INTERRUPCIONES
enable_interrupts (nivel);
nivel es una constante definida en el 16F877.h y genera el
código necesario para activar las máscaras necesarias.
Etiquetas de nivel definidas para el 16F877:
GLOBAL INT_RTCC INT_RB
INT_EXT INT_AD INT_TBE
INT_RDA INT_TIMER1 INT_TIMER2
INT_CCP1 INT_CCP2 INT_SSP
INT_PSP INT_BUSCOL INT_EEPROM
La máscara global (hace a GIE=1) debe activarse de
manera independiente. Las otras activan la máscara particular y
el PEIE si es necesario.
disable_interrupts(nivel);
Hace la acción contraria a la función anterior, poniendo a
0 las máscaras relacionadas con la interrupción indicada.
INTERRUPCIÓN EXTERIOR POR RB0
Es una interrupción clásica en la mayoría de
los PICs. Permite generar una interrupción por
cambio de nivel en la entrada RB0.
La directiva que se utiliza es #INT_EXT y se
debe acompañar de las siguientes funciones:
ext_int_edge(H_TO_L);
La interrupción es activada por flanco de
bajada (antiva el flag INTF).
ext_int_edge(L_TO_H);
La interrupción es activada por flanco de
subida (activa el flag INTF).
EJEMPLO 1. INTERRUPCIÓN POR RB0/INT
#INT_EXT
ext_isr( ){
…..//aquí se colocan las sentencias que se
…..//desean ejecutar durante esta interrupción.
}
void main ( ){
enable_interrupts(INT_EXT); //Activa INTE
ext_int_edge(H_TO_L); //Flanco de bajada
enable_interrupts(GLOBAL); //Habilita GIE
while (TRUE){
}
}
EJEMPLO 2. Active dos leds de forma intermitente cada 1 segundo. Si
presiona RB0/INT, los leds se activan a razón de 250 ms de manera
intermitente hasta que se presione RA1 para volver a su estado
normal.
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_IO(B)
#use fast_IO(D)
#use fast_IO(A)
#INT_EXT
void ext_interm( ){ //función de interrupción por RB0/INT:
while (TRUE){
if (input(PIN_A0)==0)
{break;}
delay_ms(250);
output_toggle(PIN_D0);
output_toggle(PIN_D1);
}
}
Continuación Ejemplo 2.
void main(){
set_tris_b(0x01);
set_tris_d(0);
set_tris_a(0x01);
output_d(0);
port_b_pullups(true);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
enable_interrupts(global);
while(TRUE){
output_high(PIN_D0);
output_low(PIN_D1);
delay_ms(1000);
output_low(PIN_D0);
output_high(PIN_D1);
delay_ms(1000);}
}
TIMERS&TEMPORIZADORES EN "C"
TIMER 0
• TMR0: Registro de 8 bits de lectura/escritura
• OPTION: Configura al TMR0 para que trabaje como
temporizador ó contador y asigna el valor al prescaler
• INTCON: Da información mediante el bit “TOIF”
cuando el TMR0 se ha desbordado.
• TRISA (PUERTO A): Permite el ingreso de pulsos
cuando el TMR0 está configurado como contador por
RA4
TIMER0 EN LENGUAJE C
La función para configurar el TIMER0 es:
setup_timer_0 (modo);
Donde modo está definido en el fichero de cabecera y afecta
a los bits 5:0 del OPTION_REG:
setup_timer_0 (modo); OPTION_REG (81h)
RTCC_INTERNAL 00000000
RTCC_EXT_L_TO_H 00100000
RTCC_EXT_H_TO_L 00110000
RTCC_DIV_1 00001000
RTCC_DIV_2 00000000
RTCC_DIV_4 00000001
RTCC_DIV_8 00000010
RTCC_DIV_16 00000011
RTCC_DIV_32 00000100
RTCC_DIV_64 00000101
RTCC_DIV_128 00000110
RTCC_DIV_256 00000111
TIMER0 EN LENGUAJE C
Los distintos modos se pueden agrupar mediante el
empleo del símbolo |. Ejemplo:
setup_timer_0 (RTCC_DIV_2 | RTCC_EXT_L_TO_H);
El compilador C suministre una serie de funciones
para leer o escribir en el TIMER0. Para escribir un valor en el
registro:
set_timer0(valor);
valor : es un entero de 8 bits.
Para leer el valor actual del registro:
valor= get_timer0 ( );
valor: entero de 8 bits.
Ejemplo 1. Generar una señal cuadrada de 1 kHz
utilizando la interrupción del TIMER0
• Para generar una señal cuadrada de 1 kHz con un duty cycle
del 50 %, se necesita un período de 0,5 ms en nivel alto y 0,5
ms en nivel bajo.
• Paso 1. Cálculos: Aplicando las fórmulas del TIMER0:
Solución:
(256 – N10) = = = 62,5
(256 – N10) = 62,5 y despejando N10 = (256 – 62,5) = 193,5
≈194, por lo tanto el valor que debemos cargar en el TMR0 es
194, para que éste cuente desde 194 hasta 256,
generándonos la temporización de 0,5 ms. Estos cálculos se
cumplen fielmente en lenguaje ensamblador, sin embargo en
lenguaje C, al generarse códigos adicionales, se realiza un
ajuste de los valores hasta en 4 unidades por encima de lo
que se calculó, por lo tanto el valor a cargar definitivo en el
TIMER0 es 198.
RgodivisorT
iónTemporizac
OSC4 825.04
5,0
s
ms
Ejemplo 1. Generar una señal cuadrada de 1 kHz
utilizando la interrupción del TIMER0
#INCLUDE <16F877.h>
#FUSES XT,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=4000000)
#USE fast_io(B)
#INT_RTCC
RTCC_isr(){
output_toggle(PIN_B7);
set_timer0(198);}
void main(){
set_tris_B(0x00);
output_low(PIN_B7);
setup_timer_0(RTCC_DIV_8);
set_timer0(198);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while (TRUE){
}
}
NOTA: El compilador se encarga
al entrar en la interrupción de
inhabilitar las interrupciones y
al salir de borrar los flags, por lo
que no es necesario hacerlo por
programa
TIMERS&TEMPORIZADORES EN "C"
TIMER 1
Características básicas:
1. Es de 16 bits.
2. Puede actuar como temporizador o como contador
bit (TMR1CS).
3. Se puede leer y escribir en los registros TMR1H,
TMR1L.
4. Puede pararse o habilitarse mediante el bit TMR1ON.
5. Tiene un pre-divisor programable por software.
6. El oscilador de bajo consumo está situado entre los
pines T1OSI (entrada) y T1OSO (salida).
TIMER 1
7. Al desbordase (FFFFh -> 0000h) produce la interrupción
TMR1:
• El bit de interrupción del timer1 es TMR1IF
[Registro PIR1(0)].
• Puede deshabilitarse mediante TMR1IE
[Registro PIE1(0)].
8. La frecuencia de oscilación máx. es 200kHz. No se apaga
durante SLEEP.
9. Monitorea tiempo entre transiciones de una señal en pin de
entrada.
10. Controla con precisión el tiempo de transición de pin de
salida.
11. Sirve para contar eventos externos y generar interrupciones
cuando ha ocurrido un número deseado.
DIAGRAMA DE BLOQUE TIMER 1
REGISTROS ASOCIADOS AL TIMER 1
• TMR1H = Parte alta del TIMER 1 (L/E)
• TMR1L = Parte baja del TIMER 1 (L/E)
• T1CON = Registro de control del TIMER 1
• INTCON = Control de Interrupciones
• PIE1 = Control de Interrupciones de Periféricos
• PIR1 = Señalizadores de Interrupciones
• TRISC = Registro de configuración PortC
• PORTC= Registro de 8 bits.
T1CON
• Bit 7-6: No implementados: Se lee como “0”
• Bit 5-4: TlCKPS1:T1CKPS0: bit de selección del preescaler de la señal de reloj delTIMER1:
11 = valor del preescaler 1:8
10 = valor del preescaler 1:4
01 = valor del preescaler 1:2
00 = valor del preescaler 1: 1
• Bit 3: T1OSCEN: bit de habilitación del oscilador del TIMER1. Cuando se emplea un oscilador externo, hay
que poner este bit a 1. El TMR1 puede trabajar a una frecuencia totalmente independiente de la del
sistema.
1 = Habilita el oscilador
0 = Deshabilita el oscilador
Nota: El oscilador y la resistencia se desconectan para reducir el consumo
• Bit 2: #TlSYNC: bit de control de sincronización de la señal de entrada.
Con TMR1CS = 1
1= No sincroniza la entrada de reloj externa
0 = Sincroniza la entrada de reloj externa
Con TMR1CS = 0
En esta condición se ignora. El TIMER1 utiliza el reloj interno cuando TMRICS=0
• Bit 1 TMR1CS: bit de selección de la fuente de reloj del TIMER1
1 = Reloj externo por el pin RC0/T1OSO/T1CK1 (flanco ascendente)
0 = Reloj interno (FOSC/4)
• Bit 0: TMR1ON: TIMER1 activo. Hace entrar o no en funcionamiento el TIMER1.
1 = Habilita el TIMER1
0 = Deshabilita el TIMER1
TIMER1 EN LENGUAJE C
La función para configurar el TIMER0 es:
setup_timer_1 (modo);
Donde modo está definido en el fichero de cabecera y afecta
a los bits 5:0 del T1CON:
setup_timer_0 (modo); T1CON (10h)
T1_DISABLED 00000000
T1_INTERNAL 10000101
T1_EXTERNAL 10000111
T1_EXTERNAL_SYNC 10000011
T1_CLK_OUT 00001000
T1_DIV_BY_1 00000000
T1_DIV_BY_2 00010000
T1_DIV_BY_4 00100000
T1_DIV_BY_8 00110000
TIMER1 EN LENGUAJE C
Los distintos modos se pueden agrupar mediante el
empleo del símbolo |. Ejemplo:
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_2);
El compilador C suministre una serie de funciones
para leer o escribir en el TIMER1. Para escribir un valor en el
registro:
set_timer1(valor);
valor : es un entero de 16 bits.
Para leer el valor actual del registro:
valor= get_timer1 ( );
valor: entero de 16 bits.
EJEMPLO 2. Generar una interrupción cada un
segundo utilizando el TIMER1
#INCLUDE <16F877.h>
#FUSES XT,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=4000000)
#USE fast_io(B)
int1 cont=0;
#INT_TIMER1
temp1_isr(void){
if (cont==1) output_toggle(PIN_B0);
set_timer1(3036);
cont++;}
void main(){
set_tris_B(0x00);
output_low(PIN_B0);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(3036);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while (TRUE){
}
}
TIMERS&TEMPORIZADORES EN "C"
TIMER 2
Características básicas:
1. Es de 8 bits.
2. Se puede leer y escribir en los registros TMR2.
3. Puede pararse o habilitarse mediante el bit TMR2ON.
4. Tiene un pre-divisor y un post-divisor programable
por software
5. Sólo tiene modo temporizador.
6. Posee un registro (PR2) que ajusta el momento de
desborde.
7. PR2(Registro de 8 bits) que puede leerse y escribirse
PR2 con el cual compara su valor:
– Si los valores de TMR2 y PR2 se igualan, TMR2 pasa a cero.
8. Maneja el período de una señal PWM
TIMER 2
9. Al igualarse TMR2 y PR2 se produce la interrupción
TMR2:
1. El bit de interrupción del timer2 es TMR2IF
(Registro PIR1(1)).
2. Hay un post-divisor a la salida del comparador.
10. Los registros de pre-divisor y post-divisor se limpian
al:
1. Escribir en TMR2.
2. Escribir en el registro T2CON.
3. Cualquier tipo de RESET.
11. TMR2 no se limpia al escribir en T2CON.
REGISTROS ASOCIADOS AL TIMER2
• TMR2 = Registro de 8 bits. (L/E)
• T2CON = Registro de control del TIMER 2
• PR2 = Registro de ajuste del desborde
• INTCON = Control de Interrupciones
• PIE1 = Control de Interrupciones de Periféricos
• PIR1 = Señalizadores de Interrupciones
DIAGRAMA DE BLOQUE DEL TIMER 2
T2CON
• Bit 7: No implementado: Se lee como 0
• Bit 6-3:TOUTPS3:TOUTPS0: bit de selección del rango del divisor del
– Postescaler para el TIMER2:
0 0 0 0 Divisor del postescaler 1:1
0 0 0 1 Divisor del postescaler 1:2
0 0 1 0 Divisor del postescaler 1:3
0 0 1 1 Divisor del postescaler 1:4
0 1 0 0 Divisor del postescaler 1:5
0 1 0 1 Divisor del postescaler 1:6
0 1 1 0 Divisor del postescaler 1:7
0 1 1 1 Divisor del postescaler 1:8
1 0 0 0 Divisor del postescaler 1:9
1 0 0 1 Divisor del postescaler 1:10
1 0 1 0 Divisor del postescaler 1:11
1 0 1 1 Divisor del postescaler 1:12
1 1 0 0 Divisor del postescaler 1:13
1 1 0 1 Divisor del postescaler 1:14
1 1 1 0 Divisor del postescaler 1:15
1 1 1 1 Divisor del postescaler 1:16
• Bit 2: TMR2ON: bit de activación del TIMER2
1 = habilita el funcionamiento del TIMER2
0 = Inhibe el funcionamiento del TIMER2
• Bit 1-0:T2CKPS1:T2CKPS0 Selección del rango de divisor del Preescaler del TIMER 2
0 0 Divisor del Preescaler 1:1
0 1 Divisor del Preescaler 1:4
1 X Divisor del Preescaler 1:16
CÁLCULOS TIMER2
 Temporización= 4 * TOSC * Valor PR2 * Rango del
prescaler Timer2 * Rango del postcaler Timer2
 Ejercicio
Determine, cuanto tarda en desbordarse el TMR2, si se
utiliza un XT, con un prescaler = 4 y un postcaler = 10,
considerando que PR2 = D’200’. Cargue el TMR2 con
00H
TIMER2 EN LENGUAJE C
La configuración del TIMER2 en el compilador de
C se realiza con la función:
setup_timer_2(modo , periodo , postcaler);
donde:
período es un valor entero de 8 bits (0-255) que se
carga en el registro PR2.
postcaler es el valor del postcaler (1 a 16). Afecta a los
bits 6:3 del registro T2CON
modo afecta a los bits 2:0 del registro T2CON.
TIMER2 EN LENGUAJE C
Para escribir un valor en el registro:
set_timer2(valor);
valor : es un entero de 16 bits.
Para leer el valor actual del registro:
valor= get_timer2( );
valor: entero de 16 bits.
setup_timer_2(modo , periodo , postcaler); T2CON(12h)
T2_DISABLED 00000000
T2_DIV_BY_1 00000100
T2_DIV_BY_4 00000101
T2_DIV_BY_16 00000110
Ejemplo 3. Generar una señal de 1 kHz
utilizando interrupción con el TIMER2
Para una señal de 1 kHz se necesitan dos
semiperíodos de 0,5 ms, se utilizará un XT, un predivisor
de 4 y un postcaler de 1:
Temporización= 4 * TOSC * Valor PR2 * Rango del prescaler
Timer2 * Rango del postcaler Timer2
0,5 ms=(4/4000000)(4*1)*Valor PR2
Valor PR2=125
Sin embargo este valor se cumple en lenguaje
ensamblador, por lo que debe ajustarse para lenguaje C
reduciendo su valor hasta 11, o por tanteo.
#INCLUDE <16F877.h>
#FUSES XT,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=4000000)
#USE fast_io(B)
int1 cont=0;
#INT_TIMER2
void temp2_isr(void){
output_toggle(PIN_B0);
set_timer2(11);}
void main(){
set_tris_B(0x00);
output_low(PIN_B0);
setup_timer_2(T2_DIV_BY_4 , 124 , 1);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
while (TRUE){
}
}

Más contenido relacionado

La actualidad más candente

EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CLuis Zurita
 
360847567 libro-ejercicios-resueltos-grafcet-pdf
360847567 libro-ejercicios-resueltos-grafcet-pdf360847567 libro-ejercicios-resueltos-grafcet-pdf
360847567 libro-ejercicios-resueltos-grafcet-pdfCarlos Benito
 
54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flopsSENA-CIMI-GIRON
 
Tabla de propiedades de la transformada de laplace
Tabla de propiedades de la transformada de laplaceTabla de propiedades de la transformada de laplace
Tabla de propiedades de la transformada de laplaceAngel Perez
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daCesar Gil Arrieta
 
PLC y Electroneumática: Instalaciones básicas programadas
PLC y Electroneumática: Instalaciones básicas programadasPLC y Electroneumática: Instalaciones básicas programadas
PLC y Electroneumática: Instalaciones básicas programadasSANTIAGO PABLO ALBERTO
 
PLC y Automatización: Libro de ejercicios resueltos de GRAFCET
PLC y Automatización: Libro de ejercicios resueltos de GRAFCETPLC y Automatización: Libro de ejercicios resueltos de GRAFCET
PLC y Automatización: Libro de ejercicios resueltos de GRAFCETSANTIAGO PABLO ALBERTO
 
PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables SANTIAGO PABLO ALBERTO
 
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptxDiegoAvalos32
 
Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorLuis Zurita
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-pptCarlos Martir
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreLuis Zurita
 

La actualidad más candente (20)

Micro2 tema 2
Micro2 tema 2Micro2 tema 2
Micro2 tema 2
 
Redes industriales
Redes industrialesRedes industriales
Redes industriales
 
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN CEJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
EJERCICIOS TEMA 1. MICROCONTROLADORES II EN C
 
360847567 libro-ejercicios-resueltos-grafcet-pdf
360847567 libro-ejercicios-resueltos-grafcet-pdf360847567 libro-ejercicios-resueltos-grafcet-pdf
360847567 libro-ejercicios-resueltos-grafcet-pdf
 
54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops54599266 ejercicios-flip-flops
54599266 ejercicios-flip-flops
 
Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887Módulo Timer 1 del PIC16F887
Módulo Timer 1 del PIC16F887
 
Señales y sistemas
Señales y sistemasSeñales y sistemas
Señales y sistemas
 
2da tarea de control
2da tarea de control2da tarea de control
2da tarea de control
 
Tabla de propiedades de la transformada de laplace
Tabla de propiedades de la transformada de laplaceTabla de propiedades de la transformada de laplace
Tabla de propiedades de la transformada de laplace
 
Ejercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_daEjercicios resueltos y_propuestos_adc_da
Ejercicios resueltos y_propuestos_adc_da
 
PLC y Electroneumática: Instalaciones básicas programadas
PLC y Electroneumática: Instalaciones básicas programadasPLC y Electroneumática: Instalaciones básicas programadas
PLC y Electroneumática: Instalaciones básicas programadas
 
Profinet PN
Profinet PNProfinet PN
Profinet PN
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
PLC y Automatización: Libro de ejercicios resueltos de GRAFCET
PLC y Automatización: Libro de ejercicios resueltos de GRAFCETPLC y Automatización: Libro de ejercicios resueltos de GRAFCET
PLC y Automatización: Libro de ejercicios resueltos de GRAFCET
 
Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887
 
PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables PLC: manual de practicas de laboratorio de controladores lógicos programables
PLC: manual de practicas de laboratorio de controladores lógicos programables
 
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx
1.1-Diferencias entre microprocesador, microcomputadora y microcontrolador.pptx
 
Uso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensambladorUso de las tablas en lenguaje ensamblador
Uso de las tablas en lenguaje ensamblador
 
135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt135127015 microcontroladores-1-1-ppt
135127015 microcontroladores-1-1-ppt
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladore
 

Similar a TIMERS&TEMPORIZADORES EN "C"

Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Hamiltonn Casallas
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesiDavid Narváez
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...SANTIAGO PABLO ALBERTO
 
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricialGabriel Bravo Rojas
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Hamiltonn Casallas
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2Luis Zurita
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorDaniel Pardo
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersmarco calderon layme
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxJose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxfreddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxJose Manuel Mansilla Carrasco
 
Arduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con ArduinoArduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con ArduinoSANTIAGO PABLO ALBERTO
 
Controlando el tiempo
Controlando el tiempoControlando el tiempo
Controlando el tiempoguest02693a
 

Similar a TIMERS&TEMPORIZADORES EN "C" (20)

Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
Microcontroladores: Módulos del micro PIC16F877 con temporizadores e interrup...
 
Ccp2009170309
Ccp2009170309Ccp2009170309
Ccp2009170309
 
Clase Timer 1
Clase Timer 1Clase Timer 1
Clase Timer 1
 
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
26176947 tutorial-v-escritura-en-lcd-usando-teclado-matricial
 
Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05Curso de microcontroladores capitulo 05
Curso de microcontroladores capitulo 05
 
Tarea final
Tarea finalTarea final
Tarea final
 
MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2MICROCONTROLADORES II EN C. TEMA 2
MICROCONTROLADORES II EN C. TEMA 2
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
 
Microprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timersMicroprogramacion - Interrupciones y timers
Microprogramacion - Interrupciones y timers
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
 
Arduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con ArduinoArduino: Reporte de diseño controlador acuario con Arduino
Arduino: Reporte de diseño controlador acuario con Arduino
 
Controlando el tiempo
Controlando el tiempoControlando el tiempo
Controlando el tiempo
 
Arquitectura interna micro
Arquitectura interna microArquitectura interna micro
Arquitectura interna micro
 
Grabacion de microcontroladores_pic
Grabacion de microcontroladores_picGrabacion de microcontroladores_pic
Grabacion de microcontroladores_pic
 

Último

4. ¡Promoviendo la Paternidad Responsable en La Recoleta!
4. ¡Promoviendo la Paternidad Responsable en La Recoleta!4. ¡Promoviendo la Paternidad Responsable en La Recoleta!
4. ¡Promoviendo la Paternidad Responsable en La Recoleta!ProfesorGualberto
 
ministerio de educacion Prueba diagnostica de quinto
ministerio de educacion Prueba diagnostica de quintoministerio de educacion Prueba diagnostica de quinto
ministerio de educacion Prueba diagnostica de quintoNELLYKATTY
 
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!8. ¡Promoviendo la Paternidad Responsable en La Recoleta!
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!ProfesorGualberto
 
EXPERIENCIA DE APRENDIZAJE 3 EPT - SECUNDARIA-2024.docx
EXPERIENCIA DE APRENDIZAJE 3  EPT - SECUNDARIA-2024.docxEXPERIENCIA DE APRENDIZAJE 3  EPT - SECUNDARIA-2024.docx
EXPERIENCIA DE APRENDIZAJE 3 EPT - SECUNDARIA-2024.docxssuser9be75b1
 
EVALUACIÓN DIAGNÓSTICA 4° GRADO 2024.docx
EVALUACIÓN DIAGNÓSTICA  4°  GRADO 2024.docxEVALUACIÓN DIAGNÓSTICA  4°  GRADO 2024.docx
EVALUACIÓN DIAGNÓSTICA 4° GRADO 2024.docxssuser9be75b1
 
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdf
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdfROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdf
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdfavitiadgo
 
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!9. ¡Promoviendo la Paternidad Responsable en La Recoleta!
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!ProfesorGualberto
 
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdf
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdfBLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdf
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdfcpblasdeotero
 
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...William Henry Vegazo Muro
 
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!10. ¡Promoviendo la Paternidad Responsable en La Recoleta!
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!ProfesorGualberto
 
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIA
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIAMINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIA
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIANELLYKATTY
 
UNIDAD CERO - Desarrollo Personal CC.docx
UNIDAD CERO  - Desarrollo Personal CC.docxUNIDAD CERO  - Desarrollo Personal CC.docx
UNIDAD CERO - Desarrollo Personal CC.docxOlgaLuzFloresGonzale
 
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!12. ¡Promoviendo la Paternidad Responsable en La Recoleta!
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!ProfesorGualberto
 
HISTORIA DEL CRISTIANISMO II Clase 6 Ibli
HISTORIA DEL CRISTIANISMO II Clase 6 IbliHISTORIA DEL CRISTIANISMO II Clase 6 Ibli
HISTORIA DEL CRISTIANISMO II Clase 6 IbliIvnLeonardoPiedrahta
 
Escuela de la Confianza DRELM-MINEDU Ccesa007.pdf
Escuela de la Confianza DRELM-MINEDU  Ccesa007.pdfEscuela de la Confianza DRELM-MINEDU  Ccesa007.pdf
Escuela de la Confianza DRELM-MINEDU Ccesa007.pdfDemetrio Ccesa Rayme
 
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docx
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docxEVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docx
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docxHermesMedinaMoran
 

Último (20)

4. ¡Promoviendo la Paternidad Responsable en La Recoleta!
4. ¡Promoviendo la Paternidad Responsable en La Recoleta!4. ¡Promoviendo la Paternidad Responsable en La Recoleta!
4. ¡Promoviendo la Paternidad Responsable en La Recoleta!
 
El anhelo de Dios en Sion (Sesión de clase)
El anhelo de Dios en Sion (Sesión de clase)El anhelo de Dios en Sion (Sesión de clase)
El anhelo de Dios en Sion (Sesión de clase)
 
ministerio de educacion Prueba diagnostica de quinto
ministerio de educacion Prueba diagnostica de quintoministerio de educacion Prueba diagnostica de quinto
ministerio de educacion Prueba diagnostica de quinto
 
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!8. ¡Promoviendo la Paternidad Responsable en La Recoleta!
8. ¡Promoviendo la Paternidad Responsable en La Recoleta!
 
EXPERIENCIA DE APRENDIZAJE 3 EPT - SECUNDARIA-2024.docx
EXPERIENCIA DE APRENDIZAJE 3  EPT - SECUNDARIA-2024.docxEXPERIENCIA DE APRENDIZAJE 3  EPT - SECUNDARIA-2024.docx
EXPERIENCIA DE APRENDIZAJE 3 EPT - SECUNDARIA-2024.docx
 
EVALUACIÓN DIAGNÓSTICA 4° GRADO 2024.docx
EVALUACIÓN DIAGNÓSTICA  4°  GRADO 2024.docxEVALUACIÓN DIAGNÓSTICA  4°  GRADO 2024.docx
EVALUACIÓN DIAGNÓSTICA 4° GRADO 2024.docx
 
Repaso Ejercicios Pruebas CRECE-PR-2024.pptx
Repaso Ejercicios Pruebas CRECE-PR-2024.pptxRepaso Ejercicios Pruebas CRECE-PR-2024.pptx
Repaso Ejercicios Pruebas CRECE-PR-2024.pptx
 
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdf
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdfROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdf
ROSAURA REVUELTAS, ESPERANZA Y LA SAL DE LA TIERRA (1).pdf
 
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!9. ¡Promoviendo la Paternidad Responsable en La Recoleta!
9. ¡Promoviendo la Paternidad Responsable en La Recoleta!
 
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdf
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdfBLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdf
BLAS DE OTERO PRESENTACION PUERTAS ABIERTAS.pdf
 
Sesión de clase: El anhelo de Dios en Sion
Sesión de clase: El anhelo de Dios en SionSesión de clase: El anhelo de Dios en Sion
Sesión de clase: El anhelo de Dios en Sion
 
GUIA MULTIPLICACION MATEMATICA SEGUNDO CICLO
GUIA MULTIPLICACION MATEMATICA SEGUNDO CICLOGUIA MULTIPLICACION MATEMATICA SEGUNDO CICLO
GUIA MULTIPLICACION MATEMATICA SEGUNDO CICLO
 
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...
2024-orientaciones-para-la-evaluacion-diagnostica-2024-en-las-iiee-publicas-d...
 
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!10. ¡Promoviendo la Paternidad Responsable en La Recoleta!
10. ¡Promoviendo la Paternidad Responsable en La Recoleta!
 
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIA
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIAMINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIA
MINISTERIO DE EDUCACIÓN prueba-diagnostica-lectura-CUARTO AÑO DE SECUNDARIA
 
UNIDAD CERO - Desarrollo Personal CC.docx
UNIDAD CERO  - Desarrollo Personal CC.docxUNIDAD CERO  - Desarrollo Personal CC.docx
UNIDAD CERO - Desarrollo Personal CC.docx
 
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!12. ¡Promoviendo la Paternidad Responsable en La Recoleta!
12. ¡Promoviendo la Paternidad Responsable en La Recoleta!
 
HISTORIA DEL CRISTIANISMO II Clase 6 Ibli
HISTORIA DEL CRISTIANISMO II Clase 6 IbliHISTORIA DEL CRISTIANISMO II Clase 6 Ibli
HISTORIA DEL CRISTIANISMO II Clase 6 Ibli
 
Escuela de la Confianza DRELM-MINEDU Ccesa007.pdf
Escuela de la Confianza DRELM-MINEDU  Ccesa007.pdfEscuela de la Confianza DRELM-MINEDU  Ccesa007.pdf
Escuela de la Confianza DRELM-MINEDU Ccesa007.pdf
 
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docx
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docxEVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docx
EVALUACIÓN DIAGNÓSTICA DPCC 33 y 4°.docx
 

TIMERS&TEMPORIZADORES EN "C"

  • 1. UNIVERSIDAD TECNOLÓGICA DEL SURESTE DE VERACRUZ • DOCENTE: ING. JOSÉ VAZQUEZ DOMINGUEZ • ASIGNATURA: MICROCONTROLADORES • GRUPO: 503 • QUINTO CUATRIMESTRE • ALUMNO: ROJAS RUIZ DIEGO ARMANDO • CARRERA: TSU MECATRÓNICA • LUGAR Y FECHA: NANCHITAL, VERACRUZ A 11 DE FEBRERO DEL 2014
  • 3. INTERRUCCIONES PIC16F87X CLÁSICAS PIC16F84 NUEVAS GIE PEIE TOIE INTE RBIE TOIF INTF RBIF PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE PIE1 PIE2 --- 0 --- EEIE BCLIE -- -- CCP2IE PIR1 PIR2 Prof. Luis Zurita Microcontroladores II
  • 4. PC<12:0> Nivel 1 de la Pila Nivel 2 de la Pila ……………… Nivel 8 de la Pila CALL, RETURN RETFIE, RETLW Vector de Reset ……………… Vector de Interrupción 0000h 0004h 0005h Página 0 Página 1 Página 2 Página 3 07FFh 0800h 0FFFh 1000h 17FFh 1FFh 13
  • 5. INTERRUPCIONES EN LENGUAJE C Ventajas de usar las directivas de interrupciones El compilador genera el código necesario para saltar a la función que va tras esta directiva en el momento de la interrupción. También genera el código para salvar al principio y restituir al final el contexto (salvar y restaurar el entorno), y borrará el flag que se activó con la interrupción. El programador debe seguir encargándose únicamente de habilitar las interrupciones y establecer las sentencias que se ejecutarán en cada función de las interrupciones deseadas a ejecutarse. Las directivas #INT_xxxx Indican que la función que aparece a continuación corresponde al tratamiento de una interrupción (no tiene ni necesita parámetros): Para los PICs 16F877 hay 14 posibles directivas:
  • 6. #INT_RTCC Desborde del TMR0 TOIF #INT_RB Cambio en RB<4:7> RBIF #INT_EXT Cambio en RB0 INTF #INT_AD Fin de conversión A/D ADIF #INT_TBE Fin de transmisión USART TXIF #INT_RDA Dato recibido en USART RCIF #INT_TIMER1 Desborde del TMR1 TMR1IF #INT_TIMER2 Desborde del TMR2 TMR2IF #INT_CCP1 Captura/Comparación en CCP1 CCP1IF #INT_CCP2 Captura/Comparación en CCP2 CCP2IF #INT_SSP Envio/Recepción de dato serie síncrono SSPIF #INT_PSP Dato entrante en puerto esclavo paralelo PSPIF #INT_BUSCOL Colisión de bus I2C BCLIF #INT_EEPROM Fin de escritura EEPROM EEIF
  • 7. INTERRUPCIONES EN LENGUAJE C La directiva #INT_DEFAULT Indica que la función que viene a continuación será llamada si se dispara una interrupción y ninguno de los flags está activo. La directiva #INT_GLOBAL Indica que la función que va a continuación sustituye todas las acciones que inserta el compilador al aceptarse una interrupción. Sólo se ejecuta lo que vaya en dicha función. GLOBAL equivale a GIE=PEIE=1 y debe activarse de forma independiente. El resto activarán la máscara correspondiente.
  • 8. FUNCIONES PARA GESTIÓN DE INTERRUPCIONES enable_interrupts (nivel); nivel es una constante definida en el 16F877.h y genera el código necesario para activar las máscaras necesarias. Etiquetas de nivel definidas para el 16F877: GLOBAL INT_RTCC INT_RB INT_EXT INT_AD INT_TBE INT_RDA INT_TIMER1 INT_TIMER2 INT_CCP1 INT_CCP2 INT_SSP INT_PSP INT_BUSCOL INT_EEPROM La máscara global (hace a GIE=1) debe activarse de manera independiente. Las otras activan la máscara particular y el PEIE si es necesario. disable_interrupts(nivel); Hace la acción contraria a la función anterior, poniendo a 0 las máscaras relacionadas con la interrupción indicada.
  • 9. INTERRUPCIÓN EXTERIOR POR RB0 Es una interrupción clásica en la mayoría de los PICs. Permite generar una interrupción por cambio de nivel en la entrada RB0. La directiva que se utiliza es #INT_EXT y se debe acompañar de las siguientes funciones: ext_int_edge(H_TO_L); La interrupción es activada por flanco de bajada (antiva el flag INTF). ext_int_edge(L_TO_H); La interrupción es activada por flanco de subida (activa el flag INTF).
  • 10. EJEMPLO 1. INTERRUPCIÓN POR RB0/INT #INT_EXT ext_isr( ){ …..//aquí se colocan las sentencias que se …..//desean ejecutar durante esta interrupción. } void main ( ){ enable_interrupts(INT_EXT); //Activa INTE ext_int_edge(H_TO_L); //Flanco de bajada enable_interrupts(GLOBAL); //Habilita GIE while (TRUE){ } }
  • 11. EJEMPLO 2. Active dos leds de forma intermitente cada 1 segundo. Si presiona RB0/INT, los leds se activan a razón de 250 ms de manera intermitente hasta que se presione RA1 para volver a su estado normal. #include <16f877a.h> #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #use fast_IO(B) #use fast_IO(D) #use fast_IO(A) #INT_EXT void ext_interm( ){ //función de interrupción por RB0/INT: while (TRUE){ if (input(PIN_A0)==0) {break;} delay_ms(250); output_toggle(PIN_D0); output_toggle(PIN_D1); } }
  • 12. Continuación Ejemplo 2. void main(){ set_tris_b(0x01); set_tris_d(0); set_tris_a(0x01); output_d(0); port_b_pullups(true); enable_interrupts(int_ext); ext_int_edge(H_to_L); enable_interrupts(global); while(TRUE){ output_high(PIN_D0); output_low(PIN_D1); delay_ms(1000); output_low(PIN_D0); output_high(PIN_D1); delay_ms(1000);} }
  • 14. TIMER 0 • TMR0: Registro de 8 bits de lectura/escritura • OPTION: Configura al TMR0 para que trabaje como temporizador ó contador y asigna el valor al prescaler • INTCON: Da información mediante el bit “TOIF” cuando el TMR0 se ha desbordado. • TRISA (PUERTO A): Permite el ingreso de pulsos cuando el TMR0 está configurado como contador por RA4
  • 15. TIMER0 EN LENGUAJE C La función para configurar el TIMER0 es: setup_timer_0 (modo); Donde modo está definido en el fichero de cabecera y afecta a los bits 5:0 del OPTION_REG: setup_timer_0 (modo); OPTION_REG (81h) RTCC_INTERNAL 00000000 RTCC_EXT_L_TO_H 00100000 RTCC_EXT_H_TO_L 00110000 RTCC_DIV_1 00001000 RTCC_DIV_2 00000000 RTCC_DIV_4 00000001 RTCC_DIV_8 00000010 RTCC_DIV_16 00000011 RTCC_DIV_32 00000100 RTCC_DIV_64 00000101 RTCC_DIV_128 00000110 RTCC_DIV_256 00000111
  • 16. TIMER0 EN LENGUAJE C Los distintos modos se pueden agrupar mediante el empleo del símbolo |. Ejemplo: setup_timer_0 (RTCC_DIV_2 | RTCC_EXT_L_TO_H); El compilador C suministre una serie de funciones para leer o escribir en el TIMER0. Para escribir un valor en el registro: set_timer0(valor); valor : es un entero de 8 bits. Para leer el valor actual del registro: valor= get_timer0 ( ); valor: entero de 8 bits.
  • 17. Ejemplo 1. Generar una señal cuadrada de 1 kHz utilizando la interrupción del TIMER0 • Para generar una señal cuadrada de 1 kHz con un duty cycle del 50 %, se necesita un período de 0,5 ms en nivel alto y 0,5 ms en nivel bajo. • Paso 1. Cálculos: Aplicando las fórmulas del TIMER0: Solución: (256 – N10) = = = 62,5 (256 – N10) = 62,5 y despejando N10 = (256 – 62,5) = 193,5 ≈194, por lo tanto el valor que debemos cargar en el TMR0 es 194, para que éste cuente desde 194 hasta 256, generándonos la temporización de 0,5 ms. Estos cálculos se cumplen fielmente en lenguaje ensamblador, sin embargo en lenguaje C, al generarse códigos adicionales, se realiza un ajuste de los valores hasta en 4 unidades por encima de lo que se calculó, por lo tanto el valor a cargar definitivo en el TIMER0 es 198. RgodivisorT iónTemporizac OSC4 825.04 5,0 s ms
  • 18. Ejemplo 1. Generar una señal cuadrada de 1 kHz utilizando la interrupción del TIMER0 #INCLUDE <16F877.h> #FUSES XT,NOWDT,NOPROTECT,NOLVP #USE DELAY(CLOCK=4000000) #USE fast_io(B) #INT_RTCC RTCC_isr(){ output_toggle(PIN_B7); set_timer0(198);} void main(){ set_tris_B(0x00); output_low(PIN_B7); setup_timer_0(RTCC_DIV_8); set_timer0(198); enable_interrupts(INT_RTCC); enable_interrupts(GLOBAL); while (TRUE){ } } NOTA: El compilador se encarga al entrar en la interrupción de inhabilitar las interrupciones y al salir de borrar los flags, por lo que no es necesario hacerlo por programa
  • 20. TIMER 1 Características básicas: 1. Es de 16 bits. 2. Puede actuar como temporizador o como contador bit (TMR1CS). 3. Se puede leer y escribir en los registros TMR1H, TMR1L. 4. Puede pararse o habilitarse mediante el bit TMR1ON. 5. Tiene un pre-divisor programable por software. 6. El oscilador de bajo consumo está situado entre los pines T1OSI (entrada) y T1OSO (salida).
  • 21. TIMER 1 7. Al desbordase (FFFFh -> 0000h) produce la interrupción TMR1: • El bit de interrupción del timer1 es TMR1IF [Registro PIR1(0)]. • Puede deshabilitarse mediante TMR1IE [Registro PIE1(0)]. 8. La frecuencia de oscilación máx. es 200kHz. No se apaga durante SLEEP. 9. Monitorea tiempo entre transiciones de una señal en pin de entrada. 10. Controla con precisión el tiempo de transición de pin de salida. 11. Sirve para contar eventos externos y generar interrupciones cuando ha ocurrido un número deseado.
  • 23. REGISTROS ASOCIADOS AL TIMER 1 • TMR1H = Parte alta del TIMER 1 (L/E) • TMR1L = Parte baja del TIMER 1 (L/E) • T1CON = Registro de control del TIMER 1 • INTCON = Control de Interrupciones • PIE1 = Control de Interrupciones de Periféricos • PIR1 = Señalizadores de Interrupciones • TRISC = Registro de configuración PortC • PORTC= Registro de 8 bits.
  • 24. T1CON • Bit 7-6: No implementados: Se lee como “0” • Bit 5-4: TlCKPS1:T1CKPS0: bit de selección del preescaler de la señal de reloj delTIMER1: 11 = valor del preescaler 1:8 10 = valor del preescaler 1:4 01 = valor del preescaler 1:2 00 = valor del preescaler 1: 1 • Bit 3: T1OSCEN: bit de habilitación del oscilador del TIMER1. Cuando se emplea un oscilador externo, hay que poner este bit a 1. El TMR1 puede trabajar a una frecuencia totalmente independiente de la del sistema. 1 = Habilita el oscilador 0 = Deshabilita el oscilador Nota: El oscilador y la resistencia se desconectan para reducir el consumo • Bit 2: #TlSYNC: bit de control de sincronización de la señal de entrada. Con TMR1CS = 1 1= No sincroniza la entrada de reloj externa 0 = Sincroniza la entrada de reloj externa Con TMR1CS = 0 En esta condición se ignora. El TIMER1 utiliza el reloj interno cuando TMRICS=0 • Bit 1 TMR1CS: bit de selección de la fuente de reloj del TIMER1 1 = Reloj externo por el pin RC0/T1OSO/T1CK1 (flanco ascendente) 0 = Reloj interno (FOSC/4) • Bit 0: TMR1ON: TIMER1 activo. Hace entrar o no en funcionamiento el TIMER1. 1 = Habilita el TIMER1 0 = Deshabilita el TIMER1
  • 25. TIMER1 EN LENGUAJE C La función para configurar el TIMER0 es: setup_timer_1 (modo); Donde modo está definido en el fichero de cabecera y afecta a los bits 5:0 del T1CON: setup_timer_0 (modo); T1CON (10h) T1_DISABLED 00000000 T1_INTERNAL 10000101 T1_EXTERNAL 10000111 T1_EXTERNAL_SYNC 10000011 T1_CLK_OUT 00001000 T1_DIV_BY_1 00000000 T1_DIV_BY_2 00010000 T1_DIV_BY_4 00100000 T1_DIV_BY_8 00110000
  • 26. TIMER1 EN LENGUAJE C Los distintos modos se pueden agrupar mediante el empleo del símbolo |. Ejemplo: setup_timer_1 (T1_INTERNAL | T1_DIV_BY_2); El compilador C suministre una serie de funciones para leer o escribir en el TIMER1. Para escribir un valor en el registro: set_timer1(valor); valor : es un entero de 16 bits. Para leer el valor actual del registro: valor= get_timer1 ( ); valor: entero de 16 bits.
  • 27. EJEMPLO 2. Generar una interrupción cada un segundo utilizando el TIMER1 #INCLUDE <16F877.h> #FUSES XT,NOWDT,NOPROTECT,NOLVP #USE DELAY(CLOCK=4000000) #USE fast_io(B) int1 cont=0; #INT_TIMER1 temp1_isr(void){ if (cont==1) output_toggle(PIN_B0); set_timer1(3036); cont++;} void main(){ set_tris_B(0x00); output_low(PIN_B0); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); set_timer1(3036); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); while (TRUE){ } }
  • 29. TIMER 2 Características básicas: 1. Es de 8 bits. 2. Se puede leer y escribir en los registros TMR2. 3. Puede pararse o habilitarse mediante el bit TMR2ON. 4. Tiene un pre-divisor y un post-divisor programable por software 5. Sólo tiene modo temporizador. 6. Posee un registro (PR2) que ajusta el momento de desborde. 7. PR2(Registro de 8 bits) que puede leerse y escribirse PR2 con el cual compara su valor: – Si los valores de TMR2 y PR2 se igualan, TMR2 pasa a cero. 8. Maneja el período de una señal PWM
  • 30. TIMER 2 9. Al igualarse TMR2 y PR2 se produce la interrupción TMR2: 1. El bit de interrupción del timer2 es TMR2IF (Registro PIR1(1)). 2. Hay un post-divisor a la salida del comparador. 10. Los registros de pre-divisor y post-divisor se limpian al: 1. Escribir en TMR2. 2. Escribir en el registro T2CON. 3. Cualquier tipo de RESET. 11. TMR2 no se limpia al escribir en T2CON.
  • 31. REGISTROS ASOCIADOS AL TIMER2 • TMR2 = Registro de 8 bits. (L/E) • T2CON = Registro de control del TIMER 2 • PR2 = Registro de ajuste del desborde • INTCON = Control de Interrupciones • PIE1 = Control de Interrupciones de Periféricos • PIR1 = Señalizadores de Interrupciones
  • 32. DIAGRAMA DE BLOQUE DEL TIMER 2
  • 33. T2CON • Bit 7: No implementado: Se lee como 0 • Bit 6-3:TOUTPS3:TOUTPS0: bit de selección del rango del divisor del – Postescaler para el TIMER2: 0 0 0 0 Divisor del postescaler 1:1 0 0 0 1 Divisor del postescaler 1:2 0 0 1 0 Divisor del postescaler 1:3 0 0 1 1 Divisor del postescaler 1:4 0 1 0 0 Divisor del postescaler 1:5 0 1 0 1 Divisor del postescaler 1:6 0 1 1 0 Divisor del postescaler 1:7 0 1 1 1 Divisor del postescaler 1:8 1 0 0 0 Divisor del postescaler 1:9 1 0 0 1 Divisor del postescaler 1:10 1 0 1 0 Divisor del postescaler 1:11 1 0 1 1 Divisor del postescaler 1:12 1 1 0 0 Divisor del postescaler 1:13 1 1 0 1 Divisor del postescaler 1:14 1 1 1 0 Divisor del postescaler 1:15 1 1 1 1 Divisor del postescaler 1:16 • Bit 2: TMR2ON: bit de activación del TIMER2 1 = habilita el funcionamiento del TIMER2 0 = Inhibe el funcionamiento del TIMER2 • Bit 1-0:T2CKPS1:T2CKPS0 Selección del rango de divisor del Preescaler del TIMER 2 0 0 Divisor del Preescaler 1:1 0 1 Divisor del Preescaler 1:4 1 X Divisor del Preescaler 1:16
  • 34. CÁLCULOS TIMER2  Temporización= 4 * TOSC * Valor PR2 * Rango del prescaler Timer2 * Rango del postcaler Timer2  Ejercicio Determine, cuanto tarda en desbordarse el TMR2, si se utiliza un XT, con un prescaler = 4 y un postcaler = 10, considerando que PR2 = D’200’. Cargue el TMR2 con 00H
  • 35. TIMER2 EN LENGUAJE C La configuración del TIMER2 en el compilador de C se realiza con la función: setup_timer_2(modo , periodo , postcaler); donde: período es un valor entero de 8 bits (0-255) que se carga en el registro PR2. postcaler es el valor del postcaler (1 a 16). Afecta a los bits 6:3 del registro T2CON modo afecta a los bits 2:0 del registro T2CON.
  • 36. TIMER2 EN LENGUAJE C Para escribir un valor en el registro: set_timer2(valor); valor : es un entero de 16 bits. Para leer el valor actual del registro: valor= get_timer2( ); valor: entero de 16 bits. setup_timer_2(modo , periodo , postcaler); T2CON(12h) T2_DISABLED 00000000 T2_DIV_BY_1 00000100 T2_DIV_BY_4 00000101 T2_DIV_BY_16 00000110
  • 37. Ejemplo 3. Generar una señal de 1 kHz utilizando interrupción con el TIMER2 Para una señal de 1 kHz se necesitan dos semiperíodos de 0,5 ms, se utilizará un XT, un predivisor de 4 y un postcaler de 1: Temporización= 4 * TOSC * Valor PR2 * Rango del prescaler Timer2 * Rango del postcaler Timer2 0,5 ms=(4/4000000)(4*1)*Valor PR2 Valor PR2=125 Sin embargo este valor se cumple en lenguaje ensamblador, por lo que debe ajustarse para lenguaje C reduciendo su valor hasta 11, o por tanteo.
  • 38. #INCLUDE <16F877.h> #FUSES XT,NOWDT,NOPROTECT,NOLVP #USE DELAY(CLOCK=4000000) #USE fast_io(B) int1 cont=0; #INT_TIMER2 void temp2_isr(void){ output_toggle(PIN_B0); set_timer2(11);} void main(){ set_tris_B(0x00); output_low(PIN_B0); setup_timer_2(T2_DIV_BY_4 , 124 , 1); enable_interrupts(INT_TIMER2); enable_interrupts(GLOBAL); while (TRUE){ } }