timer 0 y 1

25
1 TIMERS Registro contador. Contaje de impulsos de reloj: – Derivado del oscilador principal: TIMER. – Señal externa: COUNTER. Longitud: 8 bits (0-255) o 16 bits (0-65535) Cíclicos: puesta a cero al desbordamiento. El desbordamiento activa un flag y puede provocar interrupción (si está habilitada).

Transcript of timer 0 y 1

1

TIMERS

• Registro contador.

• Contaje de impulsos de reloj:

– Derivado del oscilador principal: TIMER.

– Señal externa: COUNTER.

• Longitud: 8 bits (0-255) o 16 bits (0-65535)

• Cíclicos: puesta a cero al desbordamiento.

• El desbordamiento activa un flag y puede provocar interrupción (si está habilitada).

2

TIMERS

• Aplicaciones:

– Temporizaciones

– Contaje de eventos

– Generación de señales

– Medida de periodos

• Timers en el PIC 16f877:

– Timer 0: 8 bits con pre-escalado

– Timer 1: 16 bits con pre-escalado

– Timer 2: 8 bits con pre y post-escalado

3

Timer/Counter

Pre-escalado Reg. Contador

Desbordamiento

Flanco

TIMER 0

4

Timer/Counter

Nivel de pre-escalado

Reg. Contador

Desbordamiento

Flanco

Pre-escalado

5

Timer/counter

Flanco

Pre-escalado

Nivel de pre-escalado

6

Habilitación general de interrupciones.

Habilitación particular.

Flag de desbordamiento.

7

La escritura en el TMR0 inhibe el contajedurante dos ciclos máquina

8

La escritura en el TMR0, además pone a cero el contaje del predivisor

9

Desbordamiento.

Interrupción.

Detalle del proceso petición-atención a la interrupción del T0

10

Sincronización del reloj externo

11

P.Principal

Habilitación de

interrupciones

General y particular

Configuración y

arranque del timer 0

Interrupciones

Retorno Int.

Incrementar

Puerto B

Borrado del

flag

Ejemplo: T0 en modo timer

12

;Uso del timer0.Cada vez que se desborda el timer 0, se incrementa la salida del puerto BLIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'ORG 0x00goto inicioorg 0x04goto interORG 0x05

iniciomovlw b'10100000' ;Habiltación de la interrupción externamovwf INTCON bsf STATUS,RP0 ;Selección del banco 1 de registrosclrf TRISB ;puerto B como salidamovlw b'10000111' ;timer 0 como timer conmovwf OPTION_REG ;preescalado a 255 ( aprox 65 msg)bcf STATUS,RP0 ;Selección del banco 0 de registrosclrf PORTB ;puerto B a cero

lazogoto lazo

interincf PORTB,1 ; incrementa la salida del puerto Bbcf INTCON, T0IF ; borrado del flagretfieEND

Vector de reset

Vector de interrupción

Programa principal

Rutina deinterrupción

13

P.Principal

Habilitación de

interrupciones

General y particular

Configuración y

arranque del timer 0

Desbordamientos=15

Interrupciones

Retorno Int.

Incrementar

Puerto B

Borrado del

flag

Desbordamientos=0

decrementar

desbordamientos

Desbordamientos=15

Ejemplo: T0 en modo timer

14

;Se incrementa el puerto B cada segundoLIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'desbord EQU 0x20 ORG 0x00goto inicioorg 0x04goto interORG 0x05

iniciomovlw b'10100000' movwf INTCON bsf STATUS,RP0clrf TRISBmovlw b'10000111'movwf OPTION_REGbcf STATUS,RP0clrf PORTBmovlw b'00001111'movwf desbord

lazogoto lazo

Programaprincipal

Vector de reset

Vector de interrupción

Inicializando desbord a 15

15

interdecfsz desbord,1goto saltoincf PORTB,1movlw b'00001111'movwf desbord

saltobcf INTCON, T0IFretfie

END

Rutina deinterrupción

Decrementandodesbord

Desbord > 0

Desbord = 0

16

HabilitaciónOscilador externo.

Selección de reloj.

Nivel de peescalado.

Arranque/paradadel timer.

Desbordamiento.

TIMER 1

17

Nivel de preescaladoHab. Osc. Ext. Arranque del timer.

Selección de reloj

18

Habilitación general.

Habilitación de periféricos.

Flag de desbordamiento.

Habilitación particular.

19

P.Principal

Habilitación de

interrupciones

General y particular

Configuración (como counter) y

arranque del timer 1

Timer 1 inicializado a (256-10)

Interrupciones

Retorno Int.

Incrementar

Puerto B

Borrado del

flag

Timer 1 inicializado

a (256-10)

Ejemplo: T1 en modo counter

20

;Timer 1 como counter.Cada vez que se desborda el timer 1 (a los 10 pulsos), se incrementa la salida del puerto B

LIST p=16F877INCLUDE "P16F877.INC"__config h'3f71'ORG 0x00goto inicioorg 0x04goto interORG 0x05

Inicio ;Programa principalmovlw b'11000000' ;Habiltación global de interrupcionesmovwf INTCON ;ojo! hay que activar el bit PEIEbsf STATUS,RP0 ;Selección del banco 1 de registrosmovlw b'00000001'movwf PIE1 ;Habilitación particular del timer 1clrf TRISB ;puerto B como salidabcf STATUS,RP0 ;Selección del banco 0 de registrosclrf PORTB ;puerto B a ceromovlw b'00000011' ;timer 1 como counter, sin preescaladomovwf T1CONmovlw b'11111111' ;Timer 1 inicializado para desbordarsemovwf TMR1H ;a los 10 pulsos (256-10)movlw b'11110110'movwf TMR1L

lazogoto lazo

21

;Rutina de atención a la interrupción

interincf PORTB,1 ; incrementa la salida del puerto Bbcf PIR1, TMR1IF ;borrado del flagmovlw b'11111111' ;Timer 1 inicializado para desbordarsemovwf TMR1H ;a los 10 pulsos (256-10)movlw b'11110110'movwf TMR1LretfieEND

22

Reloj.

Preescalado.

Postescalado.

Desbordamiento.

TIMER 2

23

Postescalado. Arranque.

Preescalado.

24

Habilitación general.

Habilitación de periféricos.

Flag de desbordamiento.

Habilitación particular.

25

Tareas propuestas

• Un sensor acoplado a la puerta de un frigorífico, detecta si la puerta del mismo esta abierta o cerrada. Diseñar una aplicación que genere una alarma si la puerta se abre 20 veces. Usar el timer 0.

• Al diseño anterior añadir un pulsador para reiniciar la alarma. Usar una interrupción externa.

• Al diseño anterior añadir una segunda alarma, que se active si la puerta permanece abierta mas de 1 minuto. Usar el timer 1.

• Al diseño anterior añadir un segundo pulsador para reiniciar la alarma de tiempo.