Você está na página 1de 11

MCS51

Módulo 5 Prof. Celso

TEMPORIZADORES E CONTADORES

Os 5 tipos de interrupções do 8051:


Tipo Pino Endereço
- 2 externas Externa 0 INT0 P3.2 03h
Externa 1 INT1 P3.3 13h

- 2 timers Timer 0 T0 P3.4 0Bh Interrupções do


Timer 1 T1 P3.5 1Bh timers/counters

- 1 serial RXD RI P3.0 23h


TXD TI P3.1 23h

Função: Contagem – o registro incrementa a cada transição de 1Î0 ( ) no pino


Temporização – o registro incrementa a cada ciclo de máquina

Contador: o sinal deve permanecer pelo menos 1 ciclo de máquina em nível alto e
outro ciclo de máquina em nível baixo. Portanto, a freqüência máxima de resposta do
contador será de 1/24 da freqüência do clock.

REGISTROS DE CONTROLE DO TEMPORIZADOR

Para controle dos timers existem 3 registros: IE, TMOD e TCON.

IE (Interrupt Enable) Î para habilitar as interrupções 1 – habilita


0 – desabilita

Já visto no módulo anterior:

IE =
EA - - ES ET1 EX1 ET0 EX0
todas externa 0
serial timer/counter 0
timer/counter 1 externa 1

61
MCS51
Módulo 5 Prof. Celso

TMOD (Timer Mode) Î modo de operação dos timers.

TIMER 1 TIMER 0

TMOD =
GATE C/T M1 M0 GATE C/T M1 M0

GATE (Porta de controle)


1 Î habilitado enquanto
TRx=1 e INTx=1
(software e hardware)
0 Î habilitado se TRx=1
(controle somente por software)
Modo de operação
C/T (seleciona modo) do timers/counters
1 Î modo contador (pino T0 e T1)
0 Î modo temporizador

Modo de Operação dos timers/counters

M1 M0 REGISTROS
0 0 THi – 8 bits Contador de 13 bits
TLi – 5 bits Compatível com 8048
0 1 THi – 8 bits Contador de 16 bits
TLi – 8 bits
1 0 THi – recarga Contador de 8 bits com
TLi – 8 bits recarga
1 1 TH0 – 8 bits 2 contadores de 8 bits
TL0 – 8 bits
TH1 e TL1 - parado

TCON (Timer CONtrol) Î configuração da interrupção e do timer


Metade deste registro é usado para configurar o timer/couters e a outra metade
é usada para configurar as interrupções externas:

TIMERS/COUTERS INTERRUPÇÕES

TCON =
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IE0
overflow borda/nível
timer 1 externa 0
run/stop flag da interrupção
timer 1 externa 0
overflow borda/nível
timer 0 externa 1
run/stop flag da interrupção
timer 0 externa 1

62
MCS51
Módulo 5 Prof. Celso

TFx Î flag de overflow TFx = 1 Î houve overflow do contador


TFx = 0 Î não houve overflow
* TFx é apagado por hardware quando o processamento é desviado para a rotina de
interrupção. Caso não utilize a interrupção, TFx deve ser apagado por software (ex:
CLR TF0, ou CLR TF1).

TRx Î liga/ desliga contador/temporizador TRx = 1 Î liga contador/temporizador


TRx = 0 Î desliga contador/tempor.

ITx Î modo de operação da interrupção ITx = 1 Î atende na borda de descida


ITx = 0 Î atende no nível baixo

IEx Î flag da interrupção IEx = 1 Î interrupção detectada


IEx =0 Î interrupção não foi detectada

MODOS DE OPERAÇÃO

MODO 0: Para os dois contadores (timer 0 e timer 1)


Contador de 13 bits THi – 8 bits
TLi - 5 bits
Overflow ocorre em 1FFFh Î 0000h
aqui ativa TF1 ou TF0

63
MCS51
Módulo 5 Prof. Celso

MODO 1: Para os dois contadores (timer 0 e timer 1)


Contador de 16 bits THi – 8 bits
TLi - 8 bits
Overflow ocorre em FFFFh Î 0000h
aqui ativa TF1 ou TF0

MODO 2: Para os dois contadores (timer 0 e timer 1)


TLi – contador de 8 bits
THi – recarga de Tli quando ocorrer o overflow

64
MCS51
Módulo 5 Prof. Celso

MODO3: O timer 1 não é usado neste modo


TL0– contador de 8 bits (C/T, GATE 0, INT0 e TF0)
TH0 – contador de 8 bits (TR1 e TF1)

CÁLCULO DO VALOR A SER CARREGADO NO CONTADOR

O cálculo do valor a ser carregado no contador é dado por:

f clock f clok .Tdesejado


N= ou N=
12. f desejada 12

Os temporizadores/contadores contam de um valor carregado até o overflow, e


não de zero até o valor desejado. Portanto, para carregar os registradores THi e TLi
deve-se subtrair do valor máximo (que depende do modo utilizado) o valor calculado
N.

Escolha do modo:
Modo 0 = 13 bits Î 213 = 8.192 contagens possíveis :::: THi, TLi = 8.192-N
Modo 1= 16 bits Î 216 = 65.536 contagens possíveis :::: THi, TLi = 65.536-N
Modo 2 = 8 bits Î 28 = 256 contagens possíveis :::: THi e TLi = 256-N
8
Modo 3 = 8 bits Î 2 = 256 contagens possíveis :::: TH0 e TL0 = 256-N

Comandos para:
Ligar temporizador/contador: SETB TR0 ou SETB TR1
Desligar temporizador/contador: CLR TR0 ou CLR TR1
Comandos quando não utiliza rotina de interrução:
Esperar acabar um tempo programado: JNB TF0, $ ou JNB TF1, $
Apagar flags: CLR TF0 ou CLR TF1

65
MCS51
Módulo 5 Prof. Celso

Exercício 1) Utilizando um cristal de 12 MHz, programe:


- o timer 0 para 100 µs
- o timer 1 para 50 µs com auto-recarga
Para isso calcule o número de contagens (N) para os dois casos, escolha o
modo adequado e calcule o valor a ser carregado em THi e TLi.

Exercício 2) Utilizando um cristal de 12 MHz, programe:


- o timer 0 para 50 ms
- o timer 1 para 10 ms
Para isso calcule o número de contagens (N) para os dois casos, escolha o
modo adequado e calcule o valor a ser carregado em THi e TLi.

66
MCS51
Módulo 5 Prof. Celso

Exercício 3) Utilizando o esquema abaixo acender os leds alternadamente a uma


taxa de 100 Hz. Considere que o cristal utilizado seja de 12 MHz.

Cálculo de N:
12.10 6
N= = 10.000
12.100

esse valor cabe no modo 1 (até 65.536)

valor a ser carregado em TH e TL:

vi = 65.536 – 10.000 = 55.536

Escolhendo um dos dois timers: T0

Programando IE

Programando TMOD EA - - ES ET1 EX1 ET0 EX0

GATE C/T M1 M0 GATE C/T M1 M0

________ ______________; atribui a recarga o valor de 55.536

________ ______________; posiciona o programa no endereço 00h da flash


________ ______________; salta para o inicio do programa
________ ______________; endereço do timer 0
________ ______________; salta para rotina de interrução do timer 0 (TIM0)

inicio: ______________; inicio programa, carrega TL com valor baixo de N


________ ______________; carrega TH com valor alto da contagem N
________ ______________; configura timer 0 no modo 1
________ ______________; configura a interrução IE
________ ______________; carrega acumulador com um led aceso (10110110)
________ ______________; acende o led na porta (move para P1 o acumulador)
________ ______________; seta o carry (uma vez que ele faz parte da rotação)
________ ______________; liga o temporizador
________ ______________; fica parado nesta linha esperando a interrupção

TIMO: ______________; Rotina TIM0, carrega TL com valor baixo de N


________ ______________; carrega TH com valor alto da contagem N
________ ______________; rotaciona o acumulador com o carry
________ ______________; move o valor do acumulador para a porta P1
________ ______________; retorna para o programa principal
________ ______________; fim de programa

67
MCS51
Módulo 5 Prof. Celso

Exercício 4: Gerar uma onda quadrada nos pinos da porta


P1 com uma freqüência de 50 Hz, considerando a
freqüência do cristal de 12 MHz. 100 Hz 100 Hz

12MHz
Cálculo de N: N= = 10.000 ∴modo 1 escolhido
12.100
Escolhendo o timer 0
Modo 1 Î valor inicial = 65536-10000 = 55536

TMOD = 01h
GATE C/T* M1 M0 GATE C/T* M1 M0
0 0 0 0 0 0 0 1

IE = 82h
EA - - ES ET1 EX1 ET0 EX0
1 0 0 0 0 0 1 0

Programa Sem Interrupção

$mod51

recarga equ 55536 ; valor de carga do timer

_________________ ; posiciona o progr. no endereço 00h da flash

inicio: _________________ ; configurando o modo 1 para o timer 0


_________________ ; inicializando o acumulador

volta: _________________ ; carregando os registradores ( TL0 )


_________________ ; do timer 0 ( TH0 )
_________________ ; fazendo a porta 1 receber o conteudo do A
_________________ ; ligando o temporizador
_________________ ; esperando o tempo esgotar
_________________ ; desligando o temporizador
_________________ ; limpando o flag para novas temporizações
_________________ ; invertendo os bits do acumulador
_________________ ; voltando para o

end ; fim do programa

68
MCS51
Módulo 5 Prof. Celso

Exercício 5: Fazer o mesmo exercício anterior utilizando interrupção.

12MHz
Cálculo de N: N= = 10.000 ∴modo 1 escolhido
12.100
Escolhendo o timer 0
Modo 1 Î valor inicial = 65536-10000 = 55536

TMOD = 01h
GATE C/T* M1 M0 GATE C/T* M1 M0
0 0 0 0 0 0 0 1

IE = 82h
EA - - ES ET1 EX1 ET0 EX0
1 0 0 0 0 0 1 0

Programa com Interrupção

$mod51
recarga equ 55536 ; valor de carga do timer

org 0h ; posiciona o progr. no endereço 00h da flash


___________________ ; salta para o inicio do programa
___________________ ; endereço da interrupção 0
___________________ ; salta para rotina de interrupção

inicio: ___________________ ; configurando o modo 1 para os 2 timers


___________________ ; habilita a interrupção do timer 0
___________________ ; carregando os registradores ( TL0 )
___________________ ; do timer 0 ( TH0 )
___________________ ; inicializo o acumulador com zero
___________________ ; desliga os bits da porta 1
___________________ ; ligando o temporizador
___________________ ; programa fica parado nesta linha esperando
; a interrupção
;**** ROTINA DE INTERRUPÇÃO *****************
tim0: ___________________ ; carregando os registradores
___________________ ; do timer 0
___________________ ; invertendo os bits do acumulador
___________________ ; acionando a porta com o conteúdo do Acc
___________________ ; retorna da interrupção
___________________ ; fim de programa

69
MCS51
Módulo 5 Prof. Celso

Exercício 6: Gerar a seguinte onda quadrada na porta P1, utilizando um cristal de


12 MHz: 40 µs
1 ms
Utilize Interrupção.

TMOD = 01h
GATE C/T* M1 M0 GATE C/T* M1 M0

IE = 82h
EA - - ES ET1 EX1 ET0 EX0

_______ ______________; _________________________________________


_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________
_______ ______________; _________________________________________

70
MCS51
Módulo 5 Prof. Celso

Exercício 7: Utilizando o esquema abaixo, faça um programa para controlar a


velocidade do motor DC através de um PWM. Considere o cristal de 12 MHz e o
período do PWM de 25 ms
25 ms

SA SB % nivel alto
0 0 0
0 1 20 %
1 0 50 %
1 1 80 %

71

Você também pode gostar