EEC2104 Microprocessadores Edição 2005/2006 Contadores / Temporizadores Contadores/temporizadores em geral... Hardware para contagem de impulsos Externos Internos (derivados do relógio interno) Contagem crescente, decrescente ou ambas Fim de escala programável Vários canais de contagem independentes Podem originar pedidos de interrupção Exemplos: Zilog: Z84C30 (Z80CTC) - 4 canais de 8 bits Intel: 82C53/82C54-3 canais, 8 modos de funcionamento Contadores/temporizadores - 1
... e na família 51 Vcc 128 RAM CPU 128 RAM INT OSC RST TIMER 1 TIMER 0 Barramento interno 4k ROM Bus CTR I/O PORTS UART P0 P1 P2 P3 (P3.2 a P3.5) Contadores/temporizadores - 2 Resumo... 2 contadores/temporizadores de 16 bits Contador: conta impulsos em T0 ou em T1 (f MAX =f OSC /24) Temporizador: conta ciclos máquina (1 ciclo máquina = 12 ciclos de relógio) Registos de controlo: TMOD e TCON Registos de contagem: TH0/TL0 e TH1/TL1 4 modos de funcionamento Valor inicial da contagem configurável Pedido de interrupção na passagem do valor final para o valor inicial da contagem Contadores/temporizadores - 3
Resumo... Pinos T0 = P3.4 T1 = P3.5 Registo TMOD Função (Contador/Temporizador) Modo de funcionamento Sincronismo Registo TCON Arranque e paragem Registos TH e TL Contagem e valor inicial T0 T1 Bit Pino Fosc 12 TH0 TL0 TMOD TCON TH1 TL1 Contadores/temporizadores - 4 Registo TCON TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0 BITs endereçáveis individualmente TRx: Arranque e paragem TRx=0 pára, TRx=1 arranca TFx: Overflow TFx=1 quando a contagem passa do valor final para o inicial Contadores/temporizadores - 5
Registo TMOD G C/T M1 M0 G C/T M1 M0 TC1 TC0 Bits não endereçáveis individualmente M1 e M0: modo de funcionamento (0,1,2,3) C/T: origem dos impulsos C/T=1: externos (contador) C/T=0: internos (temporizador) G: sincronismo da contagem G=0: conta quando TRx=1 G=1: conta quando TRx=1 e INTx=1 Contadores/temporizadores - 6 Modos 0 e 1 C/T G INT Bit Pino Fosc/12 T 0 1 1 TR TL TH TF Pedido de interrupção Modo 0: 13 bits (5+8) TL[7:5] indeterminados Compatível com 8048 Modo 1: 16 bits (8+8) Conta até 65535 Recarga Automática, com o valor 0 Manual, com outro valor Contadores/temporizadores - 7
Modo 2 G INT Fosc/12 T TR C/T 0 1 1 TH TL TF Pedido de interrupção Modo 2: 8 bits Conta até 255 em TL Recarga automática de TL Com o valor guardado em TH No momento em que é gerado o pedido de interrupção Bit Pino Contadores/temporizadores - 8 Modo 3 (apenas TC0) G INT0 T0 Bit Pino Fosc/12 Fosc/12 TR0 C/T 0 1 1 1 TR1 Pedido de interrupção TF1 TH0 TL0 TF0 Pedido de interrupção Modo 3: 2 x 8 bits TL0 como Contador/Temporizador TH0 só como Temporizador TC1 parado! Controlo TR0/TF0 para TL0 TR1/TF1 para TH0 Contadores/temporizadores - 9
TC1 com TC0 em modo 3 Perde os bits TR1 e TF1 Pode funcionar em qualquer modo Modo 3 Parado (mantém os valores de contagem) Modos 0, 1 e 2 Não gera pedidos de interrupção Sempre a contar (paragem/arranque faz-se entrando/saindo do modo 3) Aplicações Taxa de transmissão para a interface série Contagem de impulsos... Contadores/temporizadores - 10 Timer 2 (apenas nos 52) Contagens de 16 bits com recarga automática Funções dos registos associados TH2 e TL2 Contagem de impulsos RCAP2H e RCAP2L Valores para recarga automática em TH/TL Captura de valores intermédios (sincronizável com T2EX) T2CON Paragem/arranque e outras funções de controlo T2 T2EX Fosc 12 Bit Pino TH2 TL2 RCAP2H RCAP2L T2CON Contadores/temporizadores - 11
Exemplo: ondas quadradas... Problema Com um cristal de 11.0592MHz gerar 2 ondas quadradas com frequências diferentes não relacionadas 2.5 khz Máximo valor possível Solução Uma gerada pelo programa principal (qual?) A outra gerada por interrupção periódica de um temporizador T/2 T Contadores/temporizadores - 12 Exemplo: ondas quadradas... Alguns pontos-chave da solução: Comutar um pino a cada meio período da onda, implica gerar uma interrupção a cada 200us Supondo Fosc=11.0592Mhz, o ciclo máquina dura 1.085us, logo 200us correspondem a 184.32 ciclos máquina Para contar 184 ciclos máquina o temporizador pode estar em modo 2 (8 bit com recarga é automática) TMOD G C/T M1 M0 G C/T M1 M0 0 0 1 0 x x x x Para gerar uma interrupção ao fim de 184 ciclos máquina a contagem deve começar em 72 (256-184=72) Contadores/temporizadores - 13
Ondas quadradas... ; Nomes simbólicos WAVE1 equ P1.7 WAVE2 equ P1.6 TC1VAL equ 256-184 ; Recarga para TC1 (2.5kHz) ; Declaração de segmentos prog segment code ; Entrada no programa principal cseg at 0000h jmp main Contadores/temporizadores - 14 Ondas quadradas... cseg at 001bh ; Atendimento da cpl WAVE1 ; interrupção do reti ; temporizador TC1 rseg prog main: anl tmod,#00001111b ; TC1 em modo 2 sem orl tmod,#00100000b ; estragar TC0 orl ie,#10001000b ; Activa atendimento mov tl1,#tc1val ; Primeira contagem mov th1,#tc1val ; Contagens seguintes setb tr1 ; Arranca TC1 loop: cpl WAVE2 jmp loop end Contadores/temporizadores - 15
Exemplo: cronómetro... Problema Apagar automaticamente um LED 10 minutos após ter sido acendido por activação de uma tecla (LED e tecla activos a zero). Considerar f osc =12MHz Más soluções (porquê?) Atraso por software Atraso por interrogação de um timer Boa solução Atraso por interrupção de um timer Contadores/temporizadores - 16 Cronómetro... Se houver interrupções periódicas de 50 em 50 ms, basta contar 6000 interrupções para saber que já passaram 5 minutos... ; Nomes simbólicos LED equ P1.7 KEY equ P1.3 TC0VAL equ 65536-50000+9 ; Recarga para TC0 T5MIN equ 6000 ; 5min (6000 interrupções) ; Declaração de segmentos prog segment code vars segment data Contadores/temporizadores - 17
Cronómetro... ; Declaração de variáveis rseg vars nint: ds 2 stack: ; Entrada no programa principal cseg at 0000h jmp main ; Entrada na rotina de atendimento da interrupção cseg at 000bh jmp tc0isr Contadores/temporizadores - 18 Cronómetro... rseg prog main: anl tmod,#11110000b ; TC0 em modo 1 sem orl tmod,#00000001b ; estragar TC1 mov sp,#stack-1 ; Por causa de vars... orl ie,#10000010b ; Activa atendimento loop: jb KEY,cont ; Se tecla não premida jnb KEY,$ ; Enquanto premida mov tl0,#low(tc0val) ; LSB de TC0VAL mov th0,#high(tc0val) ; MSB de TC0VAL mov nint+1,#high(t5min); MSB mov nint,#low(t5min) ; LSB clr LED ; Acende LED setb tr0 ; Arranca TC0 cont: nop ; Aqui poderão ficar nop ; outras tarefas a jmp loop ; realizar Contadores/temporizadores - 19
Cronómetro... tc0isr: clr tr0 ; Pára TC0 mov th0,#high(tc0val) ; Recarga de MSB mov tl0,#low(tc0val) ; Recarga de LSB setb tr0 ; Arranca novamente mov a,nint+1 ; LSB de cont jnz done orl a,nint ; MSB de cont jz stop dec nint done: dec nint+1 reti stop: setb LED ; Apaga LED clr tr0 ; Pára TC0 reti end Contadores/temporizadores - 20 Cronómetro... Considerar f osc =12MHz Responder depois de experimentar no dscope Medir por simulação a periodicidade das interrupções do TC0. Repetir, considerando f osc =11.0592MHz Examinar o código proposto e explicar porque é que o ajuste do valor de recarga está incorrecto. Como calcular correctamente esse valor? Teoricamente Experimentalmente (por simulação) O que acontece se se retirar a instrução que inicializa o SP? Contadores/temporizadores - 21
Avaliação e aprofundamento... Perceber, conhecer: Os conceitos genéricos associados aos periféricos de contagem de impulsos (contadores/temporizadores) As funcionalidades oferecidas pelos contadores/temporizadores da família 51 Estudar: 80C51 family hardware description, pp. 6 a 8 Contadores/temporizadores - 22