Buscar

mic05

Prévia do material em texto

Módulo 5 Prof. Celso 
 
 61
 MCS51 
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 = 
 
todas externa 0 
serial timer/counter 0 
timer/counter 1 externa 1 
EA - - ES ET1 EX1 ET0 EX0
 
 
 
 
 
 
 
 
 Módulo 5 Prof. Celso 
 
 62
 MCS51 
TMOD (Timer Mode) modo de operação dos timers. 
 
 TIMER 1 TIMER 0 
 
 TMOD = 
 
 
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 
GATE C/T M1 M0 GATE C/T M1 M0
 
 
Modo de Operação dos timers/counters 
 
M1 M0 REGISTROS 
 0 0 THi – 8 bits 
TLi – 5 bits 
Contador de 13 bits 
Compatível com 8048 
 0 1 THi – 8 bits 
TLi – 8 bits 
Contador de 16 bits 
 1 0 THi – recarga 
TLi – 8 bits 
Contador de 8 bits com 
recarga 
 1 1 TH0 – 8 bits 
TL0 – 8 bits 
TH1 e TL1 - parado
2 contadores de 8 bits 
 
 
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 = 
 
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 
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IE0
 Módulo 5 Prof. Celso 
 
 63
 MCS51 
 
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 
 
 
 
 
 
 
 
 
 Módulo 5 Prof. Celso 
 
 64
 MCS51 
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 
 
 
 
 
 
 
 Módulo 5 Prof. Celso 
 
 65
 MCS51 
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: 
 
 
12
.
.12
desejadoclok
desejada
clock TfNou
f
f
N == 
 
 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 
Modo 3 = 8 bits 28 = 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 
 Módulo 5 Prof. Celso 
 
 66
 MCS51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Módulo 5 Prof. Celso 
 
 67
 MCS51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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: 
 000.10
100.12
10. 6
=
12
=N 
 
 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 
 
 
 
 
 
 
________ ______________; 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 
GATE C/T M1 M0 GATE C/T M1 M0
 
EA - - ES ET1 EX1 ET0 EX0 
 
 Módulo 5 Prof. Celso 
 
 68
 MCS51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 
 
Cálculo de N: 000.10
100.12
12
==
MHzN ∴modo 1 escolhido 
 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
 Módulo 5 Prof. Celso 
 
 69
 MCS51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Exercício 5: Fazer o mesmo exercício anterior utilizando interrupção. 
 
Cálculo de N: 000.10
100.12
12
==
MHzN ∴modo 1 escolhido 
 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 
 Módulo 5 Prof. Celso 
 
 70
 MCS51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
 
 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
_______ ______________; _________________________________________ 
 Módulo 5 Prof. Celso 
 
 71
 MCS51 
 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 %

Continue navegando