• No se han encontrado resultados

ITSP. Timer 0 del AVR. En la siguiente sección veremos como configurar y utilizar los registros del Timer/Contador 0, así como sus modos de operación.

N/A
N/A
Protected

Academic year: 2021

Share "ITSP. Timer 0 del AVR. En la siguiente sección veremos como configurar y utilizar los registros del Timer/Contador 0, así como sus modos de operación."

Copied!
13
0
0

Texto completo

(1)

Timer 0 del AVR

6.1 INTRODUCCIÓN

En la siguiente sección veremos como configurar y utilizar los registros del Timer/Contador 0, así como sus modos de operación.

En la figura 1 se muestra el diagrama a bloques del Timer/Contador 0 de 8 bits.

Los registros del Timer/Contador 0 (TCNT0) y el de Comparación de Salida (OCR0) son de 8 bits. Las señales de petición de Interrupción (Interrupt Request) son visibles en el Registro de Banderas de la Interrupción del Timer (TIFR).

El reloj del Timer/Contador 0 (clkT0) es interno vía el pre-escalador o con reloj externo a

través del pin T0. El bloque lógico de Selección de Reloj selecciona la fuente del reloj y la pendiente que el Timer/Contador 0 usa para incrementarse (o decrementarse). El Timer/Contador 0 esta inactivo cuando no esta seleccionada ninguna fuente de reloj. Se refiere a la salida del reloj seleccionada como reloj del timer (clkT0).

El Registro de Comparación de Salida (OCR0) es doble buffer y su valor se compara con el Timer/Contador 0 en todo momento. El resultado de la comparación puede ser usado por el generador de la forma de onda de PWM o una frecuencia variable a la salida del Pin de Comparación de Salida (OC0). Cuando ocurra la igualdad de valores la bandera de Comparación se activa (OCF0) la cual se usa para generar una solicitud de interrupción de comparación de salida.

(2)

Definiciones

Un valor de “n” deberá sustituirse por el número del Timer/Contador que se este utilizando, en este caso es el “0”.

BOTTOM el contador alcanza el nivel más bajo cuando llega a 0x00.

MAX el contador alcanza el valor más alto cuando llega a ser 0xFF (255 en decimal). TOP el contador alcanza el valor tope cuando se iguala al valor más alto de la secuencia de conteo. El valor tope puede ser asignado por un valor fijo máximo de 0xFF o el valor almacenado en el registro OCR0.

La fuente del reloj se selecciona a través de los bits de selección de reloj (CS02:0) que están localizados en el Registro de Control del Timer/Contador (TCCR0).

La parte principal del Timer/Contador de 8 bits es la unidad programable bidireccional de conteo, que se muestra en la figura 2.

Dependiendo del modo de operación utilizado, el contador es limpiado, se incrementa o decrementa por cada ciclo de reloj del timer (clkT0). clkT0 puede ser generado de una

fuente de reloj externo o interno, seleccionando los bits de selección de reloj (CS02:0). Cuando ninguna fuente de reloj se selecciona (CS02:0=0) el timer se detiene. Sin embargo, el valor de TCNT0 puede ser accesado por el CPU, sin considerar si el clkT0

esta presente o no. Una escritura del CPU sobrescribe (tiene prioridad sobre) todas las operaciones de conteo o limpieza.

La secuencia de conteo se determina por el establecimiento de los bits WGM01 y WGM00 localizados en el Registro de Control del Timer/Contador 0 (TCCR0). Existe una relación entre como es el conteo de un contador y en la forma de onda que genera la unida de salida de comparación (OC0).

La bandera de sobreflujo del Timer/Contador (TOV0) es puesta de acuerdo al modo de operación seleccionado por los bits WGM01:0. TOV0 puede ser usada para generar las interrupciones dentro del CPU.

(3)

6.2 UNIDAD DE COMPARACIÓN DE SALIDA

El comparador de 8 bits continuamente compara el registro TCNT0 con el Registro de Comparación de Salida (OCR0). Cuando TCTN0 iguala a OCR0, las señales del comparador se igualan. Una igualdad pondrá un uno en la bandera de Comparación de Salida (OCF0) en el próximo ciclo de reloj del timer, si es habilitada OCIE0 = 1 y la Bandera de Interrupciones Globales SREG = 1, la Bandera de Salida de Comparación generara una interrupción de comparación a la salida. La bandera OCF0 es automáticamente limpiada cuando la interrupción se ejecuta. Alternativamente, la bandera OCF0 puede ser limpiada por software escribiendo un “uno” lógico en su bit específico de I/O. El generador de forma de onda usará la señal igualada para generar una salida acorde al modo de operación colocado por los bits WGM01:0 y los bits del Modo de Comparación de Salida COM01:0. Las señales de max y bottom son usadas por el generador de forma de onda para el manejo especial en los valores extremos en algunos modos de operación. La figura 3 muestra la Unidad de Comparación de Salida.

El registro OCR0 es de doble buffer cuando se usa cualquier modo de Modulación de Ancho de Pulso (PWM). Para los modos de operación normal y Limpieza del Timer por Comparación (CTC), el doble buffer se deshabilita. El doble buffer se sincroniza para actualizar el registro de comparación OCR0 ya sea a la secuencia de conteo TOP o BOTTOM. La sincronización previene la ocurrencia de longitudes impares, pulsos no simétricos PWM, salidas libre de fallas.

(4)

El acceso al registro OCR0 puede ser complejo, pero este no es el caso. Cuando el doble buffer es habilitado, el CPU tiene acceso al registro buffer OCR0, y si el de doble buffer esta deshabilitado el CPU accesará al OCR0 directamente.

Comparación de Salida Forzada.

En los modos de generación de forma de onda no PWM, la salida igualada del comparador puede ser forzada a escribir un uno en el bit de Comparación de Salida Forzada (FOC0). Forzando la comparación igualada no se pondrá en uno la bandera OCF0 o recarga/limpia el timer, pero el pin OC0 será actualizado como si una igualdad real en la comparación haya ocurrido (los bits COM01:0 definen si el pin OC0 es puesto a uno, limpiado o invertido “toggled”)

Bloqueo de la Comparación de Igualdad al escribir en TCNT0.

Todas las operaciones del CPU de escribir en el Registro TCNT0 bloquearan cualquier comparación de igualdad que ocurra en el próximo ciclo de reloj del timer, aún cuando el timer este detenido. Esta característica permite a OCR0 sea inicializado al mismo valor que TCNT0 sin disparar ninguna interrupción cuando el reloj del Timer/Contador este habilitado.

Usando la Unidad de Comparación de Salida.

Ya que al escribir en TCNT0 en cualquier modo de operación bloqueara todas las comparaciones de igualdad por un solo ciclo de reloj del timer, existen riesgos involucrados cuando se cambia TCNT0 al usar la unidad de comparación de salida, independientemente si el Timer/Contador esta corriendo o no. Si el valor escrito en TCNT0 iguala al valor de OCR0, la comparación de igualdad se perderá, resultando una generación de forma de onda perdida. De manera similar, no escriba un valor en TCNT0 igual a BOTTOM cuando el contador este en decremento.

El ajuste de OC0 deberá ser realizado antes de establecer el Registro de Dirección de Datos para el pin del puerto de salida. La manera más fácil de establecer el valor de OC0 es usar los bits de Comparación de Salida Forzada (FOC0) en modo Normal. El registro OC0 mantiene su valor aún cuando cambie entre los modos de generación de forma de onda.

Este consciente que los bits COM01:0 no son de doble buffer ni el del valor de comparación. Cambiando los bits COM01:0 tendrá efectos inmediatamente.

Unidad de Comparación de Igualdad de Salida

Los bits del modo de Comparación de Salida (COM01:0) tienen dos funciones. El generador de forma de onda usa los bits COM01:0 para definir el estado en Comparación de Salida (OC0) en la próxima comparación igualada. También, los bits COM01:0 controlan la fuente del pin de salida OC0. Al referirse al estado de OC0, nos referimos al Registro interno OC0, no al pin OC0. Al ocurrir un reset del sistema, el registro OC0 se pone en “0”. La figura 4 muestra la Unidad de Comparación de Igualdad de Salida.

(5)

La función del puerto general de I/O se sobrescribe por el comparador de salida (OC0) del generador de forma de onda si los bits COM01:0 están en uno. Sin embargo, la dirección del pin OC0 (entrada o salida) aún es controlada por el Registro de Dirección de Datos (DDR) para el pin del puerto. El bit del registro de dirección de datos para el pin OC0 (DDR_OC0) debe ser puesto a uno como salida antes de que el valor de OC0 sea visible en el pin. La función del puerto de sobre-escritura es independiente del modo de Generación de forma de onda.

El diseño de la salida del pin comparación permite la inicialización del estado OC0 antes que la salida esté habilitada. Note que algunas configuraciones de COM01:0 están reservadas para ciertos modos de operación.

Modo de Comparación de Salida y Generación de Forma de Onda.

El Generador de Forma de Onda usa los bits COM01:0 de manera diferente que en los modos normal, CTC y PWM. Para todos los modos, colocar COM01:0 = 0 le dice al generador de forma de onda que no realice en el Registro OC0 ninguna acción para la próxima comparación de igualdad.

Un cambio en el estado de los bits COM01:0 tendrán efectos en la primera comparación de igualdad después de que los bits de escriben.

6.3 MODOS DE OPERACIÓN

El modo de operación, por ejemplo, la conducta del Timer/Contador y los pines de Comparación de Salida son definidos por la combinación de los bits en el modo de Generación de Forma de Onda (WGM01:0) y los bits del modo de Comparación de Salida (COM01:0). Los bits del modo de Comparación de Salida no afectan la

(6)

secuencia de conteo, mientras que los bits del modo de Generación de la Forma de Onda si. Los bits COM01:0 controlan si la salida generada PWM deberá ser invertida o no (invertida o no invertida PWM). Para el modo de PWM no invertida los bits COM01:0 controlan si la salida deberá ser puesta a uno, limpiada o invertida en una comparación igualada.

Modo Normal

El modo más simple es el modo normal (WGM01:0 = 0). En este modo la dirección del conteo es siempre ascendente y no se limpia el contador. El contador simplemente se sobrescribe cuando pasa de su máximo valor de 8 bits (TOP = 0xFF) y entonces se reinicia desde su valor más bajo (0x00). En operación normal la Bandera de Sobreflujo del Timer/Contador 0 (TOV0) será puesta a uno en el mismo ciclo de reloj del timer como el TCNT0 llega a ser cero. La bandera TOV0 en este caso se comporta como el noveno bit, excepto si esta puesto en uno, y no es limpiado. Sin embargo, combinado con la interrupción de sobreflujo del timer que automáticamente limpia la bandera TOV0, la resolución del timer puede ser incrementada por software. No existen casos especiales que considerar en el modo normal, un nuevo valor en el contador puede ser escrito en cualquier instante.

La unidad de comparación de salida puede ser usada para generar interrupciones en algún momento dado. Usando la comparación de salida para generar formas de onda en el modo normal no es recomendado, ya que esto ocupara demasiado tiempo para el CPU.

Modo de Comparación de Limpieza del Timer (CTC)

En el modo de comparación limpieza del timer (WGM01:0=2), el registro OCR0 se utiliza para manipular la resolución del contador. En el modo CTC el contador se limpia a cero cuando el valor del contador (TCNT0) iguala a OCR0. El OCR0 define el valor tope para el contador, aunque también su resolución. Este modo permite mayor control de la frecuencia de salida de comparación igualada. También simplifica la operación de conteo de eventos externos.

El diagrama de tiempos para el modo CTC se muestra en la figura 5. El valor del contador (TCNT0) se incrementa hasta que una igualdad en la comparación entre TCNT0 y OCR0, y entonces el contador TCNT0 se limpia.

(7)

Una interrupción puede generarse cada vez que el valor del contador alcanza el valor TOP usando la bandera OCF0. Si la interrupción esta habilitada, la rutina de manejo de la interrupción puede ser usada para actualizar el valor TOP. Sin embargo, cambiando TOP a un valor cercano a BOTTOM cuando el contador esta corriendo sin ningún valor bajo de preescalador, debe realizarse con cuidado ya que en el modo CTC no se tiene la característica de doble buffer. Si el valor nuevo escrito a OCR0 es tan más pequeño que el valor actual de TCNT0, el contador perderá la igualdad de comparación. El contador entonces contara a su máximo valor (0xFF) y volverá a contar desde 0x00 antes de que la igualdad de comparación ocurra.

Para generar una forma de onda de salida en el modo CTC, la salida OC0 puede ser invertida “toogle” de su nivel lógico cada vez que exista una igualdad de comparación, simplemente ajustando los bits de modo de comparación de salida a un modo “toggle” (COM01:0=1). El valor de OC0 no será visible en el pin del puerto a menos que la dirección de datos para el pin sea colocado como salida. La forma de onda generada tendrá una frecuencia máxima de fOC0=fclk_I/O/2 cuando OCR0 sea puesto en cero

(0x00). La frecuencia de la forma de onda se define por la siguiente ecuación:

La variable N representa el factor pre-escalar (1, 8, 64, 256 o 1024).

En el modo normal de operación, la bandera TOV0 se coloca a uno en el mismo ciclo de reloj cuando contador pasa de MAX a 0x00.

Modo Rápido PWM

La modulación rápida PWM o el modo rápido PWM (WGM01:0=3) provee una alta generación en frecuencia de forma de onda PWM. El PWM rápido difiere de la opción anterior de PWM por su operación de una sola pendiente. El contador se incrementa de BOTTOM a MAX, entonces se reinicia desde BOTOM. En el modo no invertido de comparación de salida, el bit de comparación de salida (OC0) se limpia cuando se iguala la comparación entre TCNT0 y OCR0, y se ajusta a BOTTOM. En el modo invertido de comparación de salida, la salida es puesta a uno cuando se iguala la comparación y se limpia a BOTTOM. Debido a la operación de una sola pendiente, la frecuencia de operación del modo PWM rápido puede ser doblada tan alta como el modo de fase correcto de PWM que usa la operación dual de pendientes. Esta frecuencia alta hace que el modo rápido PWM se ajuste en aplicaciones de regulación de potencia, rectificación y DAC.

En el modo rápido PWM, el contador se incrementa hasta el valor del contador iguala el valor MAX. El contador es entonces limpiado en el siguiente ciclo de reloj. El diagrama de tiempo para el modo PWM rápido se muestra en la figura 6. El valor de TCNT0 esta en el diagrama de tiempo mostrado como un histograma para ilustrar la operación de una sola pendiente. El diagrama incluye salidas de PWM no invertida e invertida. La línea pequeña horizontal marca en donde la pendiente llega a TCNT0 y se iguala a OCR0.

(8)

La bandera de sobreflujo Timer/Contador (TOV0) se coloca a uno cada vez que el contador alcanza MAX. Si la interrupción esta habilitada, la rutina que maneja la interrupción puede ser usada para actualizar el valor a comparar.

En el modo PWM rápido, la unidad de comparación permite la generación de formas de onda de PWM en el pin OC0. Ajustando los bits COM01:0=2 producirá un PWM no invertido y un PWM invertido se logra ajustando los bits CMO01:0=3 se genera un PWM invertido. El valor de OC0 actual será solamente visible en el pin del puerto si la dirección de los datos para el pin de puerto se coloca como salida. La forma de onda de PWM se genera poniendo a uno (o a cero) el registro OC0 en la comparación de igualdad entre OCR0 y TCNT0, y poniendo a cero (o a uno) el registro OC0 en el ciclo del timer de reloj del contador es limpiado (cambiando de MAX a BOTTOM).

La frecuencia PWM para la salida puede ser calculada por la siguiente ecuación:

La variable N representa el factor preescalar (1, 8, 64, 256 o 1024).

Los valores extremos para el registro OCR0 representan casos especiales cuando se genera una forma de onda PWM de salida en el modo rápido PWM. Si el OCR0 es igual BOTTOM, la salida será un pequeño salto por cada ciclo de reloj MAX+1. Ajustando de OCR0 igual a MAX resultara en una salida constante alta o baja (dependiendo de la polaridad del ajuste de salida por los bits COM01:0).

Una forma de onda con frecuencia de salida de un 50% a razón de ciclo en el modo rápido PWM puede ser alcanzado ajustando OC0 a su nivel lógico invertido en cada igualdad de comparación (COM01:0=1). La forma de onda generada tendrá una frecuencia máxima de fOC0 = fclk_I/O/2 cuando OCR0 este en cero. Esta característica es

(9)

similar al modo CTC de OC0 invertido, excepto por la característica del doble buffer en la unidad de comparación de salida este habilitada en el modo rápido PWM.

Modo PWM de Fase Correcta

El modo de fase correcta PWM (WGM01:0=1) provee una alta resolución de fase correcta de forma de onda en la generación de PWM. El modo de fase correcta de PWM se basa en la operación de doble pendiente. El contador se incrementa repetidamente desde BOTTOM a MAX y se decrementa desde MAX a BOTTOM. En el modo de comparación de salida no invertido, la comparación de salida (OC0) se limpia cuando se igualan los registros entre TCNT0 y OCR0 mientras se cuenta ascendentemente y se pone a uno en la comparación igualada mientras se cuenta descendentemente. En el modo de comparación de salida invertida, la operación se invierte. La operación de pendiente doble tiene una frecuencia de operación máxima más baja que la operación de una sola pendiente. Sin embargo, debido a la característica simétrica de los modos de doble pendiente PWM, estos modos se prefieren para aplicaciones de control de motores.

La resolución PWM para el modo de fase correcta PWM es fija a 8 bits. En el modo de fase correcta PWM el contador se incrementa hasta que el valor del contador iguala a MAX. Cuando el contador alcanza el MAX, cambia la dirección de la cuenta. El valor de TCNT0 será igual a MAX en un ciclo de reloj del timer. El diagrama de tiempos para el modo de fase correcta PWM se muestra en la figura 7. El valor de TCNT0 se muestra como un histograma para ilustrar la operación de doble pendiente. El diagrama incluye salidas de PWM invertidas y no invertidas. La línea horizontal en la pendiente TCNT0 representa la comparación igualada entre OCR0 y TCNT0.

(10)

La bandera de sobreflujo del Timer/Contador 0 (TOV0) se pone a uno cada vez que el contador alcanza el BOTTOM. La bandera de interrupción se usa para generar una interrupción cada vez el contador alcanza el valor de BOTTOM.

En el modo de fase correcta PWM, la unidad de comparación permite la generación de formas de onda PWM en el pin OC0. Ajustando los bits COM01:0=2 producirá una salida PWM no invertida. Una salida PWM invertida se genera colocando los bits COM01:0=3. El valor actual OC0 solamente será visible en el pin del puerto si la dirección de datos para el pin es puesto como salida. La forma de onda PWM es generada limpiando (o poniendo a 1) el registro OC0 en la comparación igualada entre OCR0 y TCNT0 cuando el contador se incrementa, y poniendo a uno (o limpiando) el registro OC0 en la comparación igualada entre OCR0 y TCNT0 cuando el contador se decrementa. La frecuencia del PWM para la salida cuando se usa el modo de fase correcta PWM puede ser calculado por la siguiente ecuación:

La variable N representa el factor pre-escalar (1, 8, 64, 256 o 1024).

Los valores extremos para el registro OCR0 representan casos especiales cuando se genera una forma de onda de salida PWM en el modo de fase correcta PWM. El registro OCR0 es puesto igual a BOTTOM, la salida será continuamente en bajo y cuando se pone igual a MAX la salida será continuamente alta para el modo PWM no invertido. Para el PWM invertido la salida tendrá valores lógicos opuestos.

6.4 PREESCALADOR DEL TIMER/CONTADOR0

El timer/contador 0 y el timer/contador 1 comparten el mismo módulo de preescalación, pero estos posee diferentes ajustes de preescalación.

Fuente de reloj interno.

El timer/contador puede ser sincronizado directamente del reloj del sistema (colocando a CSn2:0=1). Eso provee la operación más rápida, con una frecuencia de reloj máxima del timer/contador igual a la frecuencia de reloj del sistema (fCLK_I/O). Alternativamente,

uno de los cuatro pasos del preescalador puede usarse como fuente de reloj. El reloj preescalado tiene una frecuencia de fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, fCLK_I/O/1024.

Reinicio del Preescalador

El preescalador corre libremente, por ejemplo, opera independientemente de la selección lógica del reloj del timer/contador, y es compartida por el timer/contador 0 y el timer/contador 1. Ya que el preescalador no se ve afectado por la selección del reloj del timer/contador, el estado del preescalador tendrá implicaciones en situaciones donde un reloj preescalado sea usado. Un ejemplo de preescalamiento ocurre cuando el time esta habilitado y sincronizado por el preescalador (6 > CSn2:0 > 1). El número d los ciclos de reloj del sistema desde cuando el timer es habilitado en la primera cuenta ocurre puede

(11)

ser de 1 a N+1 ciclos de reloj del sistema, donde N iguala al divisor del pre-escalador (8, 64, 256 o 1024).

Es posible usar un reset preescalador para sincronizar el timer/contador a la ejecución del programa. Sin embargo, tenga cuidado si otro timer/contador que comparta el mismo preescalador también use el preescalamiento. Un reset en el preescalador afectara el periodo de preescalamiento para todos los timer/contadores que estén conectados a el.

Fuente de reloj externo.

Una fuente de reloj externo aplicada al pin T1/T0 puede ser usado como reloj del timer/contador (clkT1/clkT0). El pin T1/T0 es muestreado una vez por cada ciclo de reloj

del sistema por el pin lógico de sincronización. La señal sincronizada (muestreada) entonces se pasa a través del detector de flancos. La figura 8 muestra un diagrama a bloques equivalente a la sincronización de T1/T0 y un detector de flanco lógico. Los registros están sincronizados al flanco positivo del sistema de reloj interno (clkI/O). El

match es transparente al periodo alto del reloj interno del sistema.

El detector de pendiente genera un pulso clkT1/clkT0 por cada pendiente positiva

(CSn2:0=7) o pendiente negativa (CSn2:0=6) detectada.

La fuente de reloj externa deberá estar a una razón de ciclo de 50/50%. Ya que el detector de flancos utiliza muestreo.

Una fuente de reloj externa no puede ser preescalada. La figura 9 muestra el preescalador del timer/contador 0 y timer/contador 1.

(12)

6.5 CONFIGURACIÓN DEL TIMER 0

Existen dos cosas que se toman en cuenta cuando se configura el timer. El timer tiene que ser inicializado seleccionando la fuente de reloj, y las interrupciones deberán estar habilitadas.

Registros compartidos

Si los mismos registros se usan tanto en el Servicio de Interrupción de Rutina (ISR) como en el código principal, estos registros tienen que ser salvados al inicio de la ISR y restablecerlos al final de la ISR. Si no todos los 32 registros no son necesarios en la aplicación, las operaciones de salvado y restablecimiento pueden ser evitadas usando registros diferentes en el código principal y en el ISR.

También es importante recordar que hay que almacenar el Registro de Estado (SREG), y este registro no se salva automáticamente.

Note: El compilador de C maneja esto automáticamente, mientras que en lenguaje ensamblador esto se tiene que realizar con las instrucciones push y pop.

Timer 0 de 8 bits.

El timer0 de 8 bits es un timer síncrono. Esto significa que es sincronizado por el sistema de reloj, el sistema de reloj preescalador o el reloj externo el cual esta sincronizado con el sistema de reloj. Se utilizan pocos ajustes para hacerlo funcionar.

(13)

Ejemplo de Interrupción de Sobreflujo del Timer0.

Con cada interrupción los pines del Puerto B serán invertidos. Los LEDs parpadearan a una frecuencia (fLED) que se determina por la siguiente fórmula:

Un sistema que consiste de un timer de 8 bits (MaxVal = 256) y un sistema de reloj de 8 MHz el cual se divide por un preescalador de PVal = 1024, causaran que los LEDs parpadeen a una frecuencia (fLED) de aproximadamente de 15.25 Hz. La siguiente rutina

de inicialización muestra como configurar tal sistema:

init_Ex1:

ldi r16,(1<<CS02)|(1<<CS00)

out TCCR0,r16 ; Reloj del Timer = sistema de reloj / 1024 ldi r16,1<<TOV0

out TIFR,r16 ; Limpia las interrupciones pendientes TOV0 ldi r16,1<<TOIE0

out TIMSK,r16 ; Habilita el Sobreflujo de Interrupción del Timer/Counter0

ser r16

out DDRB,r16 ; Coloca al Puerto B como salida ret

El C correspondiente:

void init_Ex1(void) {

TCCR0 = (1<<CS02)|(1<<CS00); // del Timer = sistema de reloj / 1024 TIFR = 1<<TOV0; // Limpia las interrupciones pendientes TOV0

TIMSK = 1<<TOIE0; // Habilita el Sobreflujo de Interrupción del Timer/Counter0

DDRB = 0xFF; // Coloca al Puerto B como salida }

En el próximo paso, el servicio de interrupción de rutina ha sido implementado. Esta rutina será ejecutada cada vez que en el timer exista un sobreflujo. Su propósito en este ejemplo es invertir los bits del Puerto B (LEDs).

ISR_TOV0: push r16 in r16,SREG push r16

in r16,PORTB ; Lee el Puerto B

com r16 ; Invierte bits del registro r16 out PORTB,r16 ; Se escribe en el Puerto B pop r16

out SREG,r16 pop r16 reti

El C correspondiente:

void interrupt[TIMER0_OVF0_vect]ISR_TOV0 (void) {

PORTB = ~PORTB; // Invierte bits del registro r16 }

Referencias

Documento similar

•cero que suplo con arreglo á lo que dice el autor en el Prólogo de su obra impresa: «Ya estaba estendida esta Noticia, año de 1750; y pareció forzo- so detener su impresión

En estos últimos años, he tenido el privilegio, durante varias prolongadas visitas al extranjero, de hacer investigaciones sobre el teatro, y muchas veces he tenido la ocasión

que hasta que llegue el tiempo en que su regia planta ; | pise el hispano suelo... que hasta que el

No faltaba ya más que obtener el beneplácito de la Diputación provincial y de la Academia de la Historia. Obtenido éste y una subvención de la primera de mil pesetas, á cuyo

Esto viene a corroborar el hecho de que perviva aún hoy en el leonés occidental este diptongo, apesardel gran empuje sufrido porparte de /ue/ que empezó a desplazar a /uo/ a

En junio de 1980, el Departamento de Literatura Española de la Universi- dad de Sevilla, tras consultar con diversos estudiosos del poeta, decidió propo- ner al Claustro de la

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones

La combinación, de acuerdo con el SEG, de ambos estudios, validez y fiabilidad (esto es, el estudio de los criterios de realidad en la declaración), verificada la