4. interrupciones y temporizadores

9.057 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
9.057
En SlideShare
0
De insertados
0
Número de insertados
1.527
Acciones
Compartido
0
Descargas
238
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

4. interrupciones y temporizadores

  1. 1. INTERRUPCIONES Y TEMPORIZADORES MICROELECTRONICA
  2. 2. GENERALIDADES  Las interrupciones son desviaciones del flujo de control del programa originadas asíncronamente por diversos sucesos que no se hallan bajo la supervisión de las instrucciones.  Dichos sucesos pueden ser externos al sistema, como la generación de un flanco o nivel activo en un pin del microcontrolador, o bien internos, como el desbordamiento de un contador.  Las interrupciones son desviaciones del flujo de control del programa originadas asíncronamente por diversos sucesos que no se hallan bajo la supervisión de las instrucciones.  Dichos sucesos pueden ser externos al sistema, como la generación de un flanco o nivel activo en un pin del microcontrolador, o bien internos, como el desbordamiento de un contador.
  3. 3. GENERALIDADES  Se detiene la ejecución del programa en curso, se salva la dirección actual del PC en la Pila y se carga el PC con una dirección, en el caso de una interrupción es una dirección “reservada” de la memoria de código, llamada Vector de interrupción, 0x04 para los microcontroladores de la gama baja y media; mientras que en la gama alta existen dos direcciones: 0x08 prioridad alta y 0x18 prioridad baja.  Se detiene la ejecución del programa en curso, se salva la dirección actual del PC en la Pila y se carga el PC con una dirección, en el caso de una interrupción es una dirección “reservada” de la memoria de código, llamada Vector de interrupción, 0x04 para los microcontroladores de la gama baja y media; mientras que en la gama alta existen dos direcciones: 0x08 prioridad alta y 0x18 prioridad baja.
  4. 4. ENABLE/DISABLE_INTERRUPTS() are: #define GLOBAL 0xF2C0 #define INT_RTCC 0xF220 #define INT_TIMER0 0xF220 #define INT_TIMER1 0x9D01 #define INT_TIMER2 0x9D02 #define INT_TIMER3 0xA002 #define INT_EXT 0xF210 #define INT_EXT1 0xF008 #define INT_EXT2 0xF010 #define INT_RB 0xFFF208 #define INT_AD 0x9D40 INTERRUPCIONES - DIRECTIVAS ENABLE/DISABLE_INTERRUPTS() are: #define GLOBAL 0xF2C0 #define INT_RTCC 0xF220 #define INT_TIMER0 0xF220 #define INT_TIMER1 0x9D01 #define INT_TIMER2 0x9D02 #define INT_TIMER3 0xA002 #define INT_EXT 0xF210 #define INT_EXT1 0xF008 #define INT_EXT2 0xF010 #define INT_RB 0xFFF208 #define INT_AD 0x9D40
  5. 5. ENABLE/DISABLE_INTERRUPTS() are: #define INT_RDA 0x9D20 #define INT_TBE 0x9D10 #define INT_SSP 0x9D08 #define INT_CCP1 0x9D04 #define INT_CCP2 0xA001 #define INT_BUSCOL 0xA008 #define INT_LOWVOLT 0xA004 #define INT_COMP 0xA040 #define INT_EEPROM 0xA010 #define INT_OSCF 0xA080 #define INT_SPP 0x9D80 #define INT_USB 0xA020 INTERRUPCIONES - DIRECTIVAS ENABLE/DISABLE_INTERRUPTS() are: #define INT_RDA 0x9D20 #define INT_TBE 0x9D10 #define INT_SSP 0x9D08 #define INT_CCP1 0x9D04 #define INT_CCP2 0xA001 #define INT_BUSCOL 0xA008 #define INT_LOWVOLT 0xA004 #define INT_COMP 0xA040 #define INT_EEPROM 0xA010 #define INT_OSCF 0xA080 #define INT_SPP 0x9D80 #define INT_USB 0xA020
  6. 6. DEFAULT - GLOBAL Luis David Narváez
  7. 7. VENTAJAS
  8. 8. INTERRUPCION EXTERNA RB0/INT INTERRUPCION EXTERNA RB0/INT REGISTRO INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
  9. 9. DESCRIPCIÓN  Esta fuente de interrupción es sumamente importante para atender acontecimientos externos en tiempo real.  Cuando ocurre alguno de ellos activa el pin RB0/INT y se hace una petición de interrupción, en forma automática.  Este método es más eficaz que la técnica de sondeo ya que el microcontrolador no perderá tiempo preguntando a la línea de entrada para leer su estado, sino que únicamente atenderá al periférico cuando éste se lo pida mediante la solicitud de interrupción.  Esta fuente de interrupción es sumamente importante para atender acontecimientos externos en tiempo real.  Cuando ocurre alguno de ellos activa el pin RB0/INT y se hace una petición de interrupción, en forma automática.  Este método es más eficaz que la técnica de sondeo ya que el microcontrolador no perderá tiempo preguntando a la línea de entrada para leer su estado, sino que únicamente atenderá al periférico cuando éste se lo pida mediante la solicitud de interrupción.
  10. 10. RB0/INT - PICC  En el caso de la interrupción externa RB0/INT de los PIC18FXXX se tiene la siguiente directiva. #INT_EXT – flanco en el pin RB0. Se activa la bandera INTF.  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.  En el caso de la interrupción externa RB0/INT de los PIC18FXXX se tiene la siguiente directiva. #INT_EXT – flanco en el pin RB0. Se activa la bandera INTF.  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.
  11. 11. RB0/INT - PICC  Si se utilizan las directivas de interrupción, 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.  Además, genera el código para salvar al principio y restituir al final el contexto, y también borrará la bandera que se activó con la interrupción. El programador, solo debe encargarse de habilitar las interrupciones.  Si se utilizan las directivas de interrupción, 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.  Además, genera el código para salvar al principio y restituir al final el contexto, y también borrará la bandera que se activó con la interrupción. El programador, solo debe encargarse de habilitar las interrupciones.
  12. 12. RB0/INT - PICC  Existe también otra función adicional destinada a configurar el flanco activo que genera la interrupción externa (en RB0).  ext_int_edge (0, H_TO_L); - equivale a INTEDG=0. Selecciona el flanco de bajada para activar la bandera INTF.  ext_int_edge (0, L_TO_H); - equivale a INTEDG=1. Selecciona el flanco de subida para activar la bandera INTF.  Existe también otra función adicional destinada a configurar el flanco activo que genera la interrupción externa (en RB0).  ext_int_edge (0, H_TO_L); - equivale a INTEDG=0. Selecciona el flanco de bajada para activar la bandera INTF.  ext_int_edge (0, L_TO_H); - equivale a INTEDG=1. Selecciona el flanco de subida para activar la bandera INTF.
  13. 13. PRÁCTICA  Enunciado: Realizar un programa que indique en tiempo real la recepción de una señal externa recibida por el pin INT0, INT1, INT2 del microcontrolador. La recepción de dicha señal se lo hará a través de tres LEDs indicadores, los cuales se apagarán mientras se presione el pulsador correspondiente.  Enunciado: Realizar un programa que indique en tiempo real la recepción de una señal externa recibida por el pin INT0, INT1, INT2 del microcontrolador. La recepción de dicha señal se lo hará a través de tres LEDs indicadores, los cuales se apagarán mientras se presione el pulsador correspondiente.
  14. 14. FLUJOGRAMA
  15. 15. SIMULACIÓN
  16. 16. INTERRUPCION RBI INTERRUPCION EXTERNA RBI REGISTRO INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF INTERRUPCION RBI
  17. 17. DESCRIPCIÓN  Los pines <RB7:RB4> del PORTB producen una sola interrupción por cambio de su estado.  Para activar la interrupción por cambio de estado en los pines <RB7:RB4> los bits RBIE y GIE del registro INTCON deben estar a “1”, en estas condiciones cuando se produce un cambio de nivel en cualquiera de las líneas RB7 a RB4 se activa la bandera RBIF del registro INTCON.  Los pines <RB7:RB4> del PORTB producen una sola interrupción por cambio de su estado.  Para activar la interrupción por cambio de estado en los pines <RB7:RB4> los bits RBIE y GIE del registro INTCON deben estar a “1”, en estas condiciones cuando se produce un cambio de nivel en cualquiera de las líneas RB7 a RB4 se activa la bandera RBIF del registro INTCON.
  18. 18. RBI – CCS COMPILER  Entonces en la subrutina de interrupción se deberá hacer el tratamiento respectivo para identificar cual de los pines se activó.  En Lenguaje C, la interrupción se activa con enable_interrupts(INT_RB) y la subrutina de tratamiento de la interrupción se llama con INT_RB.  Entonces en la subrutina de interrupción se deberá hacer el tratamiento respectivo para identificar cual de los pines se activó.  En Lenguaje C, la interrupción se activa con enable_interrupts(INT_RB) y la subrutina de tratamiento de la interrupción se llama con INT_RB.
  19. 19. RBI – CCS COMPILER  En caso que se estén atendiendo varias interrupciones, el compilador C, también tiene la directiva #priority que sirve para fijar la prioridad de las interrupciones, así, las interrupciones más importantes están son listadas al principio.  Por ejemplo:  #priority ext, rbi; //la interrupción RB0/INT será atendida antes de RBI.  En caso que se estén atendiendo varias interrupciones, el compilador C, también tiene la directiva #priority que sirve para fijar la prioridad de las interrupciones, así, las interrupciones más importantes están son listadas al principio.  Por ejemplo:  #priority ext, rbi; //la interrupción RB0/INT será atendida antes de RBI.
  20. 20. PRÁCTICA Enunciado: Se conectan 4 pulsadores a RB4, RB5, RB6 y RB7 y una LCD al puerto D. Se realiza un contador automática que dependa de la detección de cambio de estado en cada pin RBI, de acuerdo al siguiente detalle: +1, -1, -10, +10. Enunciado: Se conectan 4 pulsadores a RB4, RB5, RB6 y RB7 y una LCD al puerto D. Se realiza un contador automática que dependa de la detección de cambio de estado en cada pin RBI, de acuerdo al siguiente detalle: +1, -1, -10, +10.
  21. 21. SIMULACIÓN
  22. 22. TIMERSTIMERS RTCC, TIMER 1,TIMER 2,TIMER 3 Luis David Narváez
  23. 23. TIMER 0 - RTCC  Una de las labores más habituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo, y recibe el nombre de temporizador (timer) el elemento encargado de realizar esta función.  También suele ser frecuente contar los impulsos que se producen en el exterior del sistema, y el elemento destinado a este fin se llama contador. Luis David Narváez  Una de las labores más habituales en los programas de control de dispositivos suele ser determinar intervalos concretos de tiempo, y recibe el nombre de temporizador (timer) el elemento encargado de realizar esta función.  También suele ser frecuente contar los impulsos que se producen en el exterior del sistema, y el elemento destinado a este fin se llama contador.
  24. 24. TIMER 0 - RTCC  TMR0 es un contador/temporizador de 8/16 bits.  Se puede leer y escribir.  Puede trabajar con reloj interno o con señal de reloj externa.  Selección del flanco en el reloj externo.  Predivisor de frecuencia de reloj programable por software de 8 bits.  Interrupción opcional en el desbordamiento. Luis David Narváez  TMR0 es un contador/temporizador de 8/16 bits.  Se puede leer y escribir.  Puede trabajar con reloj interno o con señal de reloj externa.  Selección del flanco en el reloj externo.  Predivisor de frecuencia de reloj programable por software de 8 bits.  Interrupción opcional en el desbordamiento.
  25. 25. TEMPORIZACIÓN TIMER 0  El tiempo empleado en una temporización se puede calcular a partir de un ciclo de instrucción (es decir una instrucción por cada ½ microsegundo, si se trabaja con un cristal HS de 8 MHz), también necesitamos el valor del Divisor de Frecuencia (el que seleccionamos con los bits PS2, PS1 y PS0), y finalmente con el complemento del valor cargado en TMR0 (es decir 65536-TMR0), la ecuación que nos permite realizar el cálculo es la que sigue:  Temporización = Ciclo de instrucción * (65536 - TMR0) * Divisor de Frecuencia  El tiempo empleado en una temporización se puede calcular a partir de un ciclo de instrucción (es decir una instrucción por cada ½ microsegundo, si se trabaja con un cristal HS de 8 MHz), también necesitamos el valor del Divisor de Frecuencia (el que seleccionamos con los bits PS2, PS1 y PS0), y finalmente con el complemento del valor cargado en TMR0 (es decir 65536-TMR0), la ecuación que nos permite realizar el cálculo es la que sigue:  Temporización = Ciclo de instrucción * (65536 - TMR0) * Divisor de Frecuencia
  26. 26. TEMPORIZACIÓN TIMER 0  Se desea una temporización de 100 ms (100 milisegundos), con un HS de 8 MHz., y que además seleccionamos como Divisor de frecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, sería ¿Cuál es el valor que se debe cargar enTMR0?  Despejando 65536-TMR0 =Temporización(en microsegundos)/(1 us/cm* Div. de Frec.)  (cm ciclos máquina) y reemplazando tendremos  65536-TMR0 = 100000 us/(0,5 us/cm * 256)  65536-TMR0 ~ 781 cm  Se desea una temporización de 100 ms (100 milisegundos), con un HS de 8 MHz., y que además seleccionamos como Divisor de frecuencia 256 (es decir PS2,PS1,PS0 = 1,1,1). La pregunta, sería ¿Cuál es el valor que se debe cargar enTMR0?  Despejando 65536-TMR0 =Temporización(en microsegundos)/(1 us/cm* Div. de Frec.)  (cm ciclos máquina) y reemplazando tendremos  65536-TMR0 = 100000 us/(0,5 us/cm * 256)  65536-TMR0 ~ 781 cm
  27. 27. TEMPORIZACIÓN TIMER 0  Eso significa que en TMR0 deberemos cargar es: 65536-781=64755  A partir de allí el TMR0 contará los 781 ciclos que faltan para desbordarse y producir la interrupción, y el tiempo que tardará en hacerlo es 100ms aproximadamente.  Eso significa que en TMR0 deberemos cargar es: 65536-781=64755  A partir de allí el TMR0 contará los 781 ciclos que faltan para desbordarse y producir la interrupción, y el tiempo que tardará en hacerlo es 100ms aproximadamente.
  28. 28. TIMER 0 – PIC C Luis David Narváez
  29. 29. TIMER 0 – PIC C  Escritura en el módulo TMR0  Set_timer0(valor);  Valor: Entero de 8/16 bits  Lectura en el módulo TMR0  Valor=get_timer0();  Valor: Entero de 8/16 bits Luis David Narváez  Escritura en el módulo TMR0  Set_timer0(valor);  Valor: Entero de 8/16 bits  Lectura en el módulo TMR0  Valor=get_timer0();  Valor: Entero de 8/16 bits
  30. 30. TIMER 0 – PIC C  Los distintos modos se pueden agrupar mediante el empleo del símbolo |. Por ejemplo: Setup_timer_0(RTCC_Div_256|RTCC_Ext_L_to_H);  Nota!!! En ocasiones se emplea RTCC en lugar de timer0, es decir, set_RTCC es lo mismo que set_timer0.  Los distintos modos se pueden agrupar mediante el empleo del símbolo |. Por ejemplo: Setup_timer_0(RTCC_Div_256|RTCC_Ext_L_to_H);  Nota!!! En ocasiones se emplea RTCC en lugar de timer0, es decir, set_RTCC es lo mismo que set_timer0.
  31. 31. PRÁCTICA  Enunciado:  Desarrollar un programa que encienda y apague secuencialmente un LED cada 300ms. Para la temporización se empleará la interrupción del TMR0.  Enunciado:  Desarrollar un programa que encienda y apague secuencialmente un LED cada 300ms. Para la temporización se empleará la interrupción del TMR0.
  32. 32. DESARROLLO  Calcular la carga del TMR0 para 10 ms con un divisor de frecuencia de 256 (Prescaler de 256)  Entonces usaremos un registro auxiliar con un contenido de 30 para obtener los 300ms.  Carga Registro Auxiliar con 30 para obtener los 300ms de temporización.  Bucle infinito en el programa principal.  Calcular la carga del TMR0 para 10 ms con un divisor de frecuencia de 256 (Prescaler de 256)  Entonces usaremos un registro auxiliar con un contenido de 30 para obtener los 300ms.  Carga Registro Auxiliar con 30 para obtener los 300ms de temporización.  Bucle infinito en el programa principal.
  33. 33. DESARROLLO  Para la subrutina de interrupción, tenemos:  Recarga del TMR0 con su valor correspondiente para obtener una temporización de 10ms.  Disminuir (aumentar) el Contador Auxiliar hasta obtener los 300ms.  Verificar el estado del LED. Si está apagado lo enciende y viceversa.  Mantener en ese estado (prendido o pagado) durante 300ms.  Regresar al programa principal.  Para la subrutina de interrupción, tenemos:  Recarga del TMR0 con su valor correspondiente para obtener una temporización de 10ms.  Disminuir (aumentar) el Contador Auxiliar hasta obtener los 300ms.  Verificar el estado del LED. Si está apagado lo enciende y viceversa.  Mantener en ese estado (prendido o pagado) durante 300ms.  Regresar al programa principal.
  34. 34. SIMULACIÓN
  35. 35. SIMULACIÓN
  36. 36. EL TMR0 COMO CONTADOR DE EVENTOS EXTERNOS Práctica:  Enunciado:  Se desea realizar un programa que cuente los pulsos provenientes por el pin RA4 mediante el TMR0 configurado como contador, y el TMR1 como base de tiempo de 1s. (Frecuencímetro)  De esta manera se visualizará la frecuencia en una LCD. Práctica:  Enunciado:  Se desea realizar un programa que cuente los pulsos provenientes por el pin RA4 mediante el TMR0 configurado como contador, y el TMR1 como base de tiempo de 1s. (Frecuencímetro)  De esta manera se visualizará la frecuencia en una LCD.
  37. 37. SIMULACIÓN

×