Baixe o app para aproveitar ainda mais
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 %
Compartilhar