Sei sulla pagina 1di 6

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015

Prof-MSc. Ing. Jacob Astocondor Villar

Introduccin
Los AVR tienen una gama amplia de recursos internos.
En este captulo revisaremos los temporizadores. y interrpciones
Una labor habitual de los controladores suele ser la determinacin de intervalos de
tiempo concretos.
Esto se hace a travs de un elemento denominado Temporizador (Timer).
Un temporizador bsicamente es un registro de n-bits que se incrementa de
manera automtica en cada ciclo de instruccin o cuando ocurre un evento
externo.
Si la fuente de temporizacin es externa, se le conoce como contador de eventos.
El registro puede ser pre-cargado para iniciar su conteo a partir de un valor
determinado.
Cuando ocurre un desbordamiento en el registro (una transicin de 1s a 0s) se
genera alguna sealizacin.
El ATMega8 y el ATMega16 tienen tres temporizadores y manejan tres tipos de
eventos. Los eventos quedan registrados en TIFR (Timer Interupt Flag Register).

TIMER 0.
FUNCIONAMIENTO GENERAL
Un temporizador (Timer) es un perifrico que se encarga generar un evento
(interrupcin) cada vez que ha pasado cierto intervalo de tiempo.
La interrupcin de un temporizador se genera cuando el circuito contador del mismo,
sufre un sobre flujo, es decir, cuando se desborda.
La velocidad a la que un temporizador genera interrupciones depende del origen de la
seal de reloj que alimente al mismo.
En la familia de microcontroladores AVR, dicha seal de reloj puede provenir del
exterior o ser generada internamente.
Cuando la seal es interna, la velocidad del temporizador depende de la frecuencia del
cristal colocado al microcontrolador.
Cuando es externa, depender de la velocidad de los pulsos que se introduzcan por
alguna terminal especfica del dispositivo.
Un temporizador cuya seal de reloj es externa, se dice que est configurado en modo
contador (Counter).
APLICACIONES
Medicin de intervalos de tiempo.

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015


Prof-MSc. Ing. Jacob Astocondor Villar

Generacin de bases de Tiempo. Tacmetro digital.


REGISTROS I VOLUCRADOS.
OMBRE DEL BIT7
REGISTRO.
TCCR0
TCNT0
TIMSK
TIFR

BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0

CS02 CS01 CS00


LSB
TOIE0
TOV0

MSB

Tabla TC0-1. Registros involucrados con el Timer/Counter 0.


El significado de cada bit y su funcin se puede observar en la Tabla TC0-2.

BIT
significado
FUNCIN
CS02 a CS00 Clock Select0 bits 2,1 y 0 Selecciona el origen y el pre escalamiento de la seal de
RELOJ para el Timer/Counter0. .
Bit ms significativo a bit menos significativo del
contador del Timer/Counter0.

MSB a LSB

Timer/Counter0 Overflow TOIE0=1 Habilita interrupcin del Timer/Counter0.


Interrupt Enable
TOIE0=0 Deshabilita Interrupcin del Timer/Counter0.

TOIE0

TOV0 se pone en 1 cuando el Timer/Counter0 produce


la interrupcin de sobreflujo.

TOV0

Tabla TC0-2. Bits y funcin de los registros especiales para el Timer/Counter 0.


El Timer/Counter 0 tiene un registro especial de 8 bits llamado TCNT0, que tiene la
funcin de contar de manera ascendente.
Por ser un registro de 8 bits, cuando llega a su mximo valor 255 ($ff) e intenta incrementarse se
desborda, y esto puede producir una interrupcin, si esta ltima se encuentra habilitada.
Los bits CS02, CS01 y CS00 determinan la velocidad a la que el registro TCNT0
incrementa su valor. Estos bits se encuentran localizados en el registro TCCR0.
Los posibles valores de estos bits, y el efecto que producen en la velocidad de conteo de
TCNT0, se muestran en la Tabla .
CS02
0
0
0
0
1
1

CS0
1
0
0
1
1
0
0

CS0
0
0
1
0
1
0
1

ORIGEN Y
PREESCALAMIENTO DE LA
SEAL DENO
RELOJ.
DETENID,
CUENTA.
1/fosc (ms rpido)
8/osc
64/osc
256/fosc
1024/fosc (ms lento)

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015


Prof-MSc. Ing. Jacob Astocondor Villar

Terminal T0, flanco descendente.


(modo contador).
Terminal T0, flanco ascendente.
(modo contador).

TABLA Origen de la seal de reloj y pre escalamiento.


Cuando este perifrico se configura en modo contador, se le introducen pulsos por el
pin
T0, localizado en cada dispositivo como se muestra en la Tabla .
SECUENCIA DE CONFIGURACIN
1. Ponga SREG<I>=0. (Bit 7 del registro SREG). Deshabilita interrupciones.
2. Haga TCNT0=0. Inicie contador en $00 o en un valor que necesite.
3. Haga TIMSK<TOIE0>=1 Habilita interrupcin del TIMER/COUNTER 0,
requiere interrupciones. En caso contrario ponga ese bit en0.
4. Haga TIFR<TOV0>=1". Limpia posible interrupcin falsa.
5. Ponga SREG<I>=1. (Bit 7 del registro SREG). Habilita interrupciones.
6. Seleccione el origen de la seal de RELOJ para el TIMER/COUNTER0. Ver Tabla

Si

TCCR0 =0 hace que este perifrico se pare, es decir, TCNT0 no cuenta y por lo tanto el
TIMER/COUNTER0 no genera interrupciones.
TCCR0=1 hace que el TCNT0 se incremente con cada pulso de reloj, es la forma ms rpida
en la que este perifrico genera interrupciones.
TCCR0=5 hace que el TCNT0 se incremente cada 1024 pulsos de reloj, es la forma ms
lenta en la que este perifrico genera interrupciones (con RELOJ interno). TCCR0=6 hace que
el TCNT0 se incremente con cada flanco negativo (cuando la seal pasa de 1 a 0)
aplicado en la terminal T0 del microcontrolador.

I.S.R.
El CPU salta a la direccin vector de interrupcin de este perifrico cada vez que el registro
TCNT0 tiene el valor $FF (255 en decimal) e intenta incrementar su valor (se desborda).
Si programa en ensamblador, deber colocar una instruccin de salto (rjmp) en la direccin del
vector de interrupcin para re direccionar a la posicin de memoria donde se encuentra realmente
la ISR del TIMER/COUNTER0.
En la ISR puede (y quiz hasta deba) reiniciar el registro TCNT0 con un valor apropiado,
generalmente se pone en 0, aunque puede ser otro valor. Observe entre mayor sea el valor de
TCNT0 la interrupcin siguiente se producir en un tiempo menor. No es necesario que ponga el
bit 7 del archivo TIFR en 0 cada vez que se produzca una interrupcin, al atenderse la ISR el
hardware lo realiza.

IMPLANTACIN.
La secuencia de configuracin, de los registros especiales, se muestra programada
en lenguaje ensamblador. Si usted utiliza otro lenguaje de programacin, solo tome
los ejemplos de implantacin como referencia.

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015


Prof-MSc. Ing. Jacob Astocondor Villar

TIMER/COUNTER 0 MODO TEMPORIZADOR.


El siguiente programa en ensamblador configura al TIMER/COUNTER 0 del microcontrolador
para que incremente el registro TCNT0 en cada pulso de reloj.
Si el dispositivo tiene colocado un cristal de 4 MHz, las interrupciones se generarn cada 65
micro segundos aproximadamente.
;Timer/Counter0 Modo Temporizador
;*****************************************************************
.include "m8def.inc"
;*****************************************************************
.org $0
;vector de inicio.
rjmp RESET
;redireccionado a la direccin donde se ;encuentra RESET
.org $009
;vector de TIMER/COUNTER0
rjmp TIMER0_ISR
;redireccionado a TIMER_ISR
;*****************************************************************
;Esta ISR se produce cada vez que TCNT0 se desborda.
TIMER0_ISR: |
ISR del TIMER/COUNTER0
inc
r18
;incrementa registro r18
out
PORTB,r18
;y saca el valor por el PORTB
ldi
r17,0
;
out
TCNT0,R17
;pone valor de TCNT0 en 0.
reti
;regresa de interrupcin.
;************************************************************************
RESET:
;inicio de programa.
ldi
r17,$ff
;configura PORTB
out
DDRB,r17
;como salida
;*****************************************************************
ldi r16,high(RAMEND) ;Descomente para dispositivos ;con RAM mayor 256 Bytes
out
SPH,r16
ldi
r16,low(RAMEND)
out
SPL,r16
;*****************************************************************
; PASO1
cli
;SREG<I>=0.int. deshabilitadas.
; PASO2
ldi
r17,0
;Inicia TCNT0 con valor 0
out
TCNT0,R17
;PASO3
in
r17,TIMSK
;Habilita interrupcin
ori
r17,(1<<TOIE0)
;del TIMER/COUNTER0
out
TIMSK,r17
;TIMSK<TOIE0>=1
;PASO 4
in
r17,TIFR
;Limpia posible
ori
r17,(1<<TOV0)
;interrupcin anterior
out
TIFR,r17
;TIFR<TOV0>=0
;PASO 5
sei
;SREG<7>=1. int. habilitadas
;PASO 6
;Selecciona el origen de la
ldi
r17,1
;seal de reloj

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015


Prof-MSc. Ing. Jacob Astocondor Villar
out
TCCR0,r17
;TCCR0=1.
;TCCR0=5,
loop:
nop
nop
rjmp

loop

;Se incrementar TCNT0 en cada pulso de RELOJ.


(Si se quiere visualizar por el PORTB ;hacer
;LO MAS LENTO POSIBLE)
;Espera hasta que
;se generen interrupciones. nop
;loop infinito

NOTAS DE CON FIGURACIN .


Para este perifrico los cambios ms importantes en el programa son en el paso 6, es aqu donde
se le indica al perifrico el origen de la seal de RELOJ.
Consulte TABLA y sustituya el valor que requiera en la lnea de cdigo
ldi r17,1 del paso 6.
EJERCICIO
Realizar un programa para encender y apagar 8 leds ubicado en el puerto B
.include "m8def.inc"
.def temp = r16
.def leds = r17
.org 0x0000
rjmp main
; Reset Handler
.org 0X009
rjmp timer0_overflow
; Timer Overflow Handler
main:
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, LOW(RAMEND)
out SPL, temp
;****************************************************
ldi temp, 0xFF
; Port B auf Ausgang
out DDRB, temp
:**********************************************************
ldi leds, 0xFF
;*********************************************************
ldi temp, (1<<CS00) ; CS00 setzen: Teiler 1
out TCCR0, temp
ldi temp, (1<<TOIE0)
;TOIE0: Interrupt bei Timer Overflow
out TIMSK, temp
sei
;**************************************************************
loop:
rjmp loop
;**************************************************************
timer0_overflow:
; Timer 0 Overflow Handler
out PORTB, leds
com leds
reti

UNIVERSIDAD NACIONAL DEL CALLAO-FIEE-2015


Prof-MSc. Ing. Jacob Astocondor Villar
;************************************************************

Potrebbero piacerti anche