Você está na página 1de 39

Licenciatura em Telecomunicações e

Informática

Arquitetura e Tecnologia de Computadores


temporizadores

Paulo Cardoso
Grupo de Sistemas Embebidos
Departamento de Eletrónica Industrial
Escola de Engenharia
Universidade do Minho
Sumário

l Definições
l Rotinas de atraso
l Temporizadores
l Configuração
l Operação
Definições

l Registos, o que são?


l São células de memória
l Com uma funcionalidade específica e não usadas como
memória “normal”
l São a forma de configurar e comunicar com os
periféricos
l Registos de configuração
l Escreve-se um valor de forma a definir um comportamento
para o periférico
l Registos de dados
l Contêm os dados a enviar/receber do periférico
l Nem todos os periféricos manipulam dados
Definições

l Registos, o que são?


C8051F388/9/A/B
l Exemplo de um registo de configuração
SFR Definition 19.1. CLKSEL: Clock Select

Bit 7 6 5 4 3 2 1 0

Name Reserved OUTCLK CLKSL[2:0]

Type R R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0xA9; SFR Page = All Pages


Bit Name Function

l O7 registo
Unused chama-se
Read CLKSEL
= 0b; Write = don’t care
6:4 Reserved Read = 0b; Must Write 000b.

l Trata-se
3 OUTCLK de um
Crossbar Clock registo
Out Select. de 8 bits
If the SYSCLK signal is enabled on the Crossbar, this bit selects between outputting

l Tem dois SYSCLKcampos


0: Enabling the Crossbar e outputs
and SYSCLK synchronized with the Port I/O pins.
CLKSLSYSCLK signal OUTCLK SYSCLK.
1: Enabling the Crossbar SYSCLK signal outputs SYSCLK synchronized with the
l Ambos de leitura e escrita
Port I/O.
2:0 CLKSL[2:0] System Clock Source Select Bits.
l A configuração por defeito é 0x00
000: SYSCLK derived from the Internal High-Frequency Oscillator / 4 and scaled
per the IFCN bits in register OSCICN.

A sua localização na memória é no endereço 0xA9


001: SYSCLK derived from the External Oscillator circuit.
l 010: SYSCLK derived from the Internal High-Frequency Oscillator / 2.
Definições

l Registos, o que são?


C8051F388/9/A/B
l Exemplo: o registo CLKSEL
SFR Definition 19.1. CLKSEL: Clock Select

Bit 7 6 5 4 3 2 1 0

Name Reserved OUTCLK CLKSL[2:0]

Type R R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0xA9; SFR Page = All Pages


Bit Name Function

l Tem
7 dois Read
Unused campos: CLKSL
= 0b; Write = don’t care e OUTCLK
6:4 Reserved Read = 0b; Must Write 000b.
l3 Do bit 0Crossbar
OUTCLK ao bit 2Outé Select.
Clock definida a configuração do campo CLKSL
If the SYSCLK signal is enabled on the Crossbar, this bit selects between outputting
l Como são 3 bits a configuração pode ser 000, 001...111
SYSCLK and SYSCLK synchronized with the Port I/O pins.
0: Enabling the Crossbar SYSCLK signal outputs SYSCLK.
l 1:O manual
Enabling diz oSYSCLK
the Crossbar que cada configuração
signal outputs representa
SYSCLK synchronized with the
Port I/O.
l
2:0
No bit 3 é definida a configuração do OUTCLK
CLKSL[2:0] System Clock Source Select Bits.

Exemplo: se fizermos CLKSEL=0x0A significa


000: SYSCLK derived from the Internal High-Frequency Oscillator / 4 and scaled
l per the IFCN bits in register OSCICN.
001: SYSCLK derived from the External Oscillator circuit.
l 0x0A = 0000.1010, logo OUTCLK=1 e CLKSL=010
010: SYSCLK derived from the Internal High-Frequency Oscillator / 2.
Temporizadores
introdução

l No controlo de processos
l Muitas vezes é necessário
l Contar tempo
l Incrementalmente
l Contar eventos
l Ex. quantos produtos passaram no tapete rolante
Temporizadores
rotinas de atraso

l O que tem de mal uma rotina de atraso?


l Exemplo
void delay(int value) {
int x;

for (x=0;x<value;x++);

l Na invocação
delay(100);

l Quanto tempo de atraso vou gerar?


l 100 s?
l 100 ms?
l Um tempo...
Temporizadores
rotinas de atraso

l O que tem de mal uma rotina de atraso?


l Esta rotina está baseada na execução de
instruções C
l Que são traduzidas para código assembly/máquina
l Que são executadas pelo processador
Temporizadores
rotinas de atraso

l A execução do código depende de


l Da arquitetura do microcontrolador
l As arquiteturas pipelined (como o nosso micro)
l Paralelizam a execução das instruções
l O que complica as contas das instruções....

l Da frequência do clock do microcontrolador


l Pois determina o ciclo de instrução
(fetch decode execute)
l OK, até podemos controlar
l Se souber a freq. do clock e com contas
l Na verdade os timers também podem ter esta dependência
Temporizadores
rotinas de atraso

l A execução do código depende de (cont.)


l Do compilador
l Que pode traduzir este código C de forma diferente
l OK, até podemos controlar,
l Vendo o código gerado e fazendo contas
l Mais complicado numa arquitetura pipelined

l Da aplicação
l Se houver uma interrupção: a execução da rotina para!
l NÃO PODEMOS CONTROLAR!!!

l Não são uma forma simples de medir tempo


l Em muitos casos não rigorosa!
Temporizadores
temporizadores

l A solução para a geração de tempo


l Hardware dedicado para a contagem de tempo
l Um recurso existente em qualquer microcontrolador
l Designados por temporizadores ou timers
l Para poderem ser usados têm de ser
l Configurados
l Geridos

l Temporizadores do C8051F388
l Seis temporizadores/contadores
l Dois são compatíveis com o 8051 original: Timer0, Timer1
l Timers/counters de 16 bits
l Vamos apenas dedicar atenção a estes!
Temporizadores
temporizadores

l A utilização dos timers


(ou qualquer outro periférico)
l Está dividida em duas partes
l Configuração
l Geralmente os periféricos têm vários modos de operação
l Parametrizados através de registos de configuração (SFRs)
l Operação
l Depois de configurado o periférico está pronto a ser usado
l Os dados sobre os quais os periféricos operam estão também
em registos (SFRs)
l Outros registos ou flags (bits) poderão ser alterados em função
do estado dos dados (SFRs)
Temporizadores
configuração

l Configuração
l Para usar os timers temos de configurar
l 1) O relógio do sistema
l Aqui não vamos configurar, vamos perceber qual o relógio do
sistema
l 2) Fonte de relógio
l Um timer precisa de ser “alimentado” por um clock
l 3) Modo de funcionamento
l Pode funcionar como timer ascendente/descendente ou
contador
Temporizadores
configuração

l 1) O relógio do sistema
l ”Alimenta” o clock todo hardware
l Quando o micro arranca
l Por defeito usa um oscilador interno de alta frequência
l Calibrado para 48MHz por defeito
l De acordo com o registo CLKSEL
l Por defeito o oscilador é dividido por 4 à 12Mhz
l E a frequência final é dada pelo registo OSCICN
l De acordo com o registo OSCICN
l Por defeito esta frequência é dividida ainda por 8
l Dando uma frequência final de 1,5MHz
C8051F388/9/A/B
Temporizadores
configuração
SFR Definition 19.1. CLKSEL: Clock Select

Bit 7 6 5 4 3 2 1 0

l 1) O relógio do sistema
Name Reserved OUTCLK CLKSL[2:0]

C8051F388/9/A/B
Type R R/W R/W R/W

l Registo CLKSEL
Reset 0 0 0 0 0 0 0 0

SFR Address = 0xA9; SFR Page = All Pages


Bit Name Function
SFR Definition 19.1. CLKSEL: Clock Select
7 Unused Read = 0b; Write = don’t care
6:4
Bit Reserved Read6 = 0b; Must5Write 000b.4
7 3 2 1 0
3 OUTCLK Crossbar Clock Out Select.
Name Reserved OUTCLK CLKSL[2:0]
If the SYSCLK signal is enabled on the Crossbar, this bit selects between outputting
Type R R/W
SYSCLK and SYSCLK R/W
synchronized with the Port I/O pins. R/W
0: Enabling the Crossbar SYSCLK signal outputs SYSCLK.
Reset 0 0 0 0 0 0 0 0
1: Enabling the Crossbar SYSCLK signal outputs SYSCLK synchronized with the
SFR Address = 0xA9;Port
SFRI/O.Page = All Pages
Bit CLKSL[2:0]
2:0 Name System Clock Source Select Bits. Function
7 Unused 000: SYSCLK
Read derived
= 0b; Write from
= don’t the Internal High-Frequency Oscillator / 4 and scaled
care
per the IFCN bits in register OSCICN.
6:4 Reserved Read = 0b; Must Write 000b.
001: SYSCLK derived from the External Oscillator circuit.
3 OUTCLK Crossbar
010: Clock
SYSCLK Out Select.
derived from the Internal High-Frequency Oscillator / 2.
011:
If theSYSCLK
SYSCLKderived
signal isfrom the Internal
enabled High-Frequency
on the Crossbar, this bit Oscillator.
selects between outputting
100:
SYSCLKSYSCLK derived from
and SYSCLK the Internal
synchronized Low-Frequency
with Oscillator and scaled per
the Port I/O pins.
the OSCLD the
0: Enabling bitsCrossbar
in registerSYSCLK
OSCLCN. signal outputs SYSCLK.
101-111: Reserved.
1: Enabling the Crossbar SYSCLK signal outputs SYSCLK synchronized with the
Port I/O.
2:0 CLKSL[2:0] System Clock Source Select Bits.
000: SYSCLK derived from the Internal High-Frequency Oscillator / 4 and scaled
per the IFCN bits in register OSCICN.
001: SYSCLK derived from the External Oscillator circuit.
010: SYSCLK derived from the Internal High-Frequency Oscillator / 2.
Temporizadores
SFR Definition 19.3. OSCICN: Internal H-F Oscillator Control

configuração
Bit 7 6 5 4 3 2 1 0

Name IOSCEN IFRDY SUSPEND IFCN[1:0]

Type R/W R R/W R R R R/W

l 1) O relógio do sistema
Reset 1 1 0

SFR Address = 0xB2; SFR Page = All Pages


0 0 0 0 0

C8051F388/9/A/B
l Registo
Bit
7
OSCICN
Name
IOSCEN Internal H-F Oscillator Enable Bit.
Function

0: Internal H-F Oscillator Disabled.


1: Internal H-F Oscillator Enabled.
SFR
6 Definition
IFRDY 19.3. OSCICN:
Internal Internal
H-F Oscillator H-F Oscillator
Frequency Control
Ready Flag.
0: Internal H-F Oscillator is not running at programmed frequency.
Bit 7 6
1: Internal 5
H-F Oscillator 4
is running 3
at programmed 2
frequency. 1 0

Name
5 IOSCEN
SUSPEND IFRDY Oscillator
Internal SUSPEND Suspend Enable Bit. IFCN[1:0]

Type R/W Setting


R this bit to logic
R/W 1 places
R the internal
R oscillator in
R SUSPEND mode.
R/WThe inter-
nal oscillator resumes operation when one of the SUSPEND mode awakening
Reset 1 events
1 occurs. 0 0 0 0 0 0
4:2 Address
SFR Unused
= 0xB2;Read
SFR =Page
000b; Write
= All = don’t care
Pages
Bit
1:0 Name
IFCN[1:0] Function
Internal H-F Oscillator Frequency Divider Control Bits.
7 IOSCEN The Internal
Internal H-FH-F Oscillator
Oscillator is divided
Enable Bit. by the IFCN bit setting after a divide-by-4 stage.
00:
0: Internal H-F Oscillator Disabled.Internal H-F Oscillator divided by 8 (1.5 MHz).
SYSCLK can be derived from
01: SYSCLK
1: Internal H-Fcan be derived
Oscillator from Internal H-F Oscillator divided by 4 (3 MHz).
Enabled.
10: SYSCLK can be derived from Internal H-F Oscillator divided by 2 (6 MHz).
6 IFRDY Internal
11: SYSCLKH-F can
Oscillator Frequency
be derived Ready
from Internal H-FFlag.
Oscillator divided by 1 (12 MHz).
0: Internal H-F Oscillator is not running at programmed frequency.
1: Internal H-F Oscillator is running at programmed frequency.
5 SUSPEND Internal Oscillator Suspend Enable Bit.
Setting this bit to logic 1 places the internal oscillator in SUSPEND mode. The inter-
nal oscillator resumes operation when one of the SUSPEND mode awakening
events occurs.
4:2 Unused Read = 000b; Write = don’t care
1:0 IFCN[1:0] Internal H-F Oscillator Frequency Divider Control Bits.
Temporizadores
configuração

l 2) Fonte de relógio do timer


l Um timer precisa de uma fonte de clock
l Registo CKCON
Type R/W R/W R/W R/W R/W R/W R/W

Temporizadores
Reset 0 0 0 0 0 0 0 0

SFR Address = 0x8E; SFR Page = All Pages

configuração Bit
7
Name
T3MH Timer 3 High Byte Clock Select.
Function

Selects the clock supplied to the Timer 3 high byte (split 8-bit timer mode only).
0: Timer 3 high byte uses the clock defined by the T3XCLK bit in TMR3CN.

2) Fonte de relógio do timerC8051F388/9/A/B


1: Timer 3 high byte uses the system clock.
l 6 T3ML Timer 3 Low Byte Clock Select.
Selects the clock supplied to Timer 3. Selects the clock supplied to the lower 8-bit timer

l Registo CKCON in split 8-bit timer mode.


0: Timer 3 low byte uses the clock defined by the T3XCLK bit in TMR3CN.
1: Timer 3 low byte uses the system clock.
SFR
5 Definition
T2MH Timer25.1.2 CKCON: ClockSelect.
High Byte Clock Control
Selects the clock supplied to the Timer 2 high byte (split 8-bit timer mode only).
Bit 7 0: Timer62 high byte 5uses the clock 4 defined by3 the T2XCLK 2 bit in TMR2CN.
1 0
1: Timer 2 high byte uses the system clock.
Name T3MH T3ML T2MH T2ML T1M T0M SCA[1:0]
4 T2ML Timer 2 Low Byte Clock Select.
Type R/W SelectsR/W R/W
the clock supplied R/W 2. If Timer
to Timer R/W R/W in split 8-bit timer
2 is configured R/W mode,

Reset 0 this bit selects


0 the clock
0 supplied0to the lower08-bit timer. 0 0 0
0: Timer 2 low byte uses the clock defined by the T2XCLK bit in TMR2CN.
SFR Address = 0x8E; SFR2Page
1: Timer = Alluses
low byte Pages
the system clock.
Bit Name Function
3 T1 Timer 1 Clock Select.
7 T3MH Selects
Timer 3the High Byte
clock Clocksupplied
source Select. to Timer 1. Ignored when C/T1 is set to 1.
Selects the clock supplied to the Timer
0: Timer 1 uses the clock defined by the3prescale
high bytebits
(split 8-bit timer mode only).
SCA[1:0].
0: Timer 1
1: 3 uses
high byte uses the
the system clock defined by the T3XCLK bit in TMR3CN.
clock.
1: Timer 3 high byte uses the system clock.
2 T0 Timer 0 Clock Select.
6 T3ML Timer
Selects3theLow Bytesource
clock Clocksupplied
Select. to Timer 0. Ignored when C/T0 is set to 1.
Selects
0: the clock 0
Counter/Timer supplied
uses theto clock
Timerdefined
3. Selects the prescale
by the clock supplied to the lower 8-bit timer
bits SCA[1:0].
in split 8-bit timer mode.
1: Counter/Timer 0 uses the system clock.
0: Timer 3 low byte uses the clock defined by the T3XCLK bit in TMR3CN.
1:0 SCA[1:0] Timer 0/1 Prescale Bits.
1: Timer 3 low byte uses the system clock.
These bits control the Timer 0/1 Clock Prescaler:
5 T2MH Timer 2 High
00: System Byte
clock Clockby
divided Select.
12
Selects
01: Systemthe clock supplied
divided byto4the Timer 2 high byte (split 8-bit timer mode only).
0:
10:Timer
System 2 high byte
clock uses by
divided the48clock defined by the T2XCLK bit in TMR2CN.
1:
11: External clock divided by 8system
Timer 2 high byte uses the clock. with the system clock)
(synchronized
4 T2ML Timer 2 Low Byte Clock Select.
Temporizadores
configuração

l 2) Fonte de relógio do timer


l Um timer precisa de uma fonte de clock
l Registo CKCON
l O campo T0M, T1M respetivamente dos timers 0 e 1
l Dizem se os timers
l são alimentados pelo relógio do sistema (1,5MHz) ou
l se o seu cloc kainda é subdividido (prescaler)
l O campo SCA0, SCA1 respetivamente dos timers 0 e 1
l Define qual a divisão a que o relógio do sistema está sujeito se
for essa a opção no campo acima
Temporizadores
configuração

l 2) Fonte de relógio do timer


l Sabemos a frequência do micro
l 1,5Mhz (por defeito), 48MhZ
l Sabemos, analisando o esquemático e lendo o datasheet
l Do slide anterior ficamos a saber
l Se usar o system clock (TxM=1)
l f=1,5MhZ à T = 0,6(6)us
l Se subdividir o relógio do sistema (TxM=0)
l SCA=00 à f=1,5/12= 125 kHZ à T = 8us
l SCA=01 à f=1,5/4= 375 kHZ à T = 2,6(6)us
l SCA=10 à f=1,5/48= 31,35 kHZ à T = 32us
l A cada período (T) dá-se um incremento na contagem
l De notar que os cálculos acima são inválidos
l Para outra frequência do micro
Temporizadores
configuração

l 2) Fonte de relógio do timer


l Registo CKCON
l Configurações - exemplos
l CKCON|= 0x0C /* CKCON|=00001100 */
l Timer 1 e 0 usam o clock do sistema
l CKCON|= 0x00 /* CKCON|=00000000 */
l Timer 1 e 0 usam o clock do sistema dividido por 12
l CKCON|= 0x09 /* CKCON|=00001001 */
l Timer 1 usa o clock do sistema
l Timer 0 usa o clock do sistema dividido por 4
Temporizadores
configuração

l 3) Modo de funcionamento
l Counter
l Timer
l Modo 0: timer de 13 bits
l Modo 1: timer de 16 bits
l Modo 2: timer de 8 bits com auto reload
l O registo de contagem é TLx. Quando transborda este é
automaticamente carregado com o valor de THx
l Modo 3: Dois timers de 8 bits (gerido pelo timer 0)
Temporizadores
configuração

l 3) Modo de funcionamento
C8051F388/9/A/B
l Registo TMOD
SFR Definition 25.4. TMOD: Timer Mode
Timer1 Timer0
Bit 7 6 5 4 3 2 1 0

Name GATE1 C/T1 T1M[1:0] GATE0 C/T0 T0M[1:0]

Type R/W R/W R/W R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0x89; SFR Page = All Pages


l GATEx 7x=0 ou Timer
Bit
GATE1
1 1 Gate Control.
Name Function

l Se GATEx=1 o 0:1:timer/counter só é ativado se o pino externo


Timer 1 enabled when TR1 = 1 irrespective of INT1 logic level.
Timer 1 enabled only when TR1 = 1 AND INT1 is active as defined by bit IN1PL in
INT1 estiver ativo
register IT01CF (see SFR Definition 16.7).
6 C/T1 Counter/Timer 1 Select.

l C/Tx 0: Timer: Timer 1 incremented by clock defined by T1M bit in register CKCON.
1: Counter: Timer 1 incremented by high-to-low transitions on external pin (T1).

l C=1 à5:4
Contador.
T1M[1:0]
Conta as transições descendentes do pino
Timer 1 Mode Select.
These bits select the Timer 1 operation mode.
externo Tx 00: Mode 0, 13-bit Counter/Timer
01: Mode 1, 16-bit Counter/Timer
l Serve por exemplo para contar entradas num estacionamento
10: Mode 2, 8-bit Counter/Timer with Auto-Reload
11: Mode 3, Timer 1 Inactive
3 GATE0 Timer 0 Gate Control.
0: Timer 0 enabled when TR0 = 1 irrespective of INT0 logic level.
Temporizadores
configuração

l 3) Modo de funcionamento
C8051F388/9/A/B
l Registo TMOD
SFR Definition 25.4. TMOD: Timer Mode
Timer1 Timer0
Bit 7 6 5 4 3 2 1 0

Name GATE1 C/T1 T1M[1:0] GATE0 C/T0 T0M[1:0]

Type R/W R/W R/W R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0x89; SFR Page = All Pages


l T0M T1M
7
Bit Name
GATE1 Timer 1 Gate Control.
Function

l Modo 0: timer de 13 bits 0: Timer 1 enabled when TR1 = 1 irrespective of INT1 logic level.
1: Timer 1 enabled only when TR1 = 1 AND INT1 is active as defined by bit IN1PL in

Modo61: timer de 16 bits


register IT01CF (see SFR Definition 16.7).
l
C/T1 Counter/Timer 1 Select.

l Modo 2: timer 0:1:de 8 bits Timer 1com auto reload


Timer: Timer 1 incremented by clock defined by T1M bit in register CKCON.
Counter: incremented by high-to-low transitions on external pin (T1).

l Dois timers
Modo5:43: T1M[1:0] de 8 bits (gerido pelo timer 0)
Timer 1 Mode Select.
These bits select the Timer 1 operation mode.
00: Mode 0, 13-bit Counter/Timer
01: Mode 1, 16-bit Counter/Timer
10: Mode 2, 8-bit Counter/Timer with Auto-Reload
11: Mode 3, Timer 1 Inactive
3 GATE0 Timer 0 Gate Control.
0: Timer 0 enabled when TR0 = 1 irrespective of INT0 logic level.
Temporizadores
operação

l Operação
l Valor da contagem
l Ativação da contagem
l Deteção do fim da contagem

l Descrição geral do funcionamento


l É colocado o valor a contar no registo de contagem
l É ativado o timer
l Quando se dá o transbordo de ffff para 0000
l É ativada uma flag a sinalizar o fim do tempo programado
l No entanto o timer não para
l Continua até haver novo transbordo
Temporizadores
operação

l Valor da contagem
l Registos THx e TLx (16 bits)
l São os registos de contagem
l Que devem ser “preenchidos” antes da contagem ser iniciada
l Modo 0 (modo 13 bits)
l Apenas os 5 bits menos significativos de THx são considerados
l Modo 1 (modo 16 bits)
l Os 16 bits são considerados (THx,TLx)
l Modo 2 (modo 8 bits)
l No registo TLx é colocado o valor da contagem
l Geralmente igual a THx
l No registo THx é colocado o valor de recarga
l Quando se dá o transbordo
TLx ß THx
Temporizadores
operação

l Ativação da contagem
l Registo TCON
C8051F388/9/A/B
l Bit TRx

SFR Definition 25.3. TCON: Timer Control


Timer1 Timer0
Bit 7 6 5 4 3 2 1 0

Name TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Type R/W R/W R/W R/W R/W R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0x88; SFR Page = All Pages; Bit-Addressable


Bit Name Function
7 TF1 Timer 1 Overflow Flag.
Set to 1 by hardware when Timer 1 overflows. This flag can be cleared by software
but is automatically cleared when the CPU vectors to the Timer 1 interrupt service
routine.
6 TR1 Timer 1 Run Control.
Timer 1 is enabled by setting this bit to 1.
5 TF0 Timer 0 Overflow Flag.
Set to 1 by hardware when Timer 0 overflows. This flag can be cleared by software
but is automatically cleared when the CPU vectors to the Timer 0 interrupt service
routine.
Temporizadores
operação

l Deteção de fim da contagem


l Registo TCON
l Bit TFx
C8051F388/9/A/B
l É ativado aquando do transbordo

SFR Definition 25.3. TCON: Timer Control


Timer1 Timer0
Bit 7 6 5 4 3 2 1 0

Name TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Type R/W R/W R/W R/W R/W R/W R/W R/W

Reset 0 0 0 0 0 0 0 0

SFR Address = 0x88; SFR Page = All Pages; Bit-Addressable


Bit Name Function
7 TF1 Timer 1 Overflow Flag.
Set to 1 by hardware when Timer 1 overflows. This flag can be cleared by software
but is automatically cleared when the CPU vectors to the Timer 1 interrupt service
routine.
6 TR1 Timer 1 Run Control.
Timer 1 is enabled by setting this bit to 1.
5 TF0 Timer 0 Overflow Flag.
Set to 1 by hardware when Timer 0 overflows. This flag can be cleared by software
Temporizadores
exercícios

l Problema 1
l Criar uma onda quadrada de 500Hz em P2.0
l Análise
l F= 500Hz à T = 2ms (período da onda)
l Como usar o timer?
l Configura-lo de forma a que
l Conte x ciclos e execute P2.0=0
l Conte novamente x ciclos e execute P2.0=1
l Se o período da onda é 2ms, então
l O tempo a alto é 1ms e o tempo a baixo é tb 1ms
l Logo, x=1000us
l Temos de criar um contador que conte 1000us
Temporizadores
configuração

l Fonte de relógio
l Vamos alterar a frequência do micro
l 1,5MhZ, 24Mhz (Registo CLKSEL)
l Refazendo as contas do slide 16!
l Do registo CKCON ficamos a saber
l Se usar o system clock (TxM=1)
l f=24MhZ à T = 0,041(6)us
l Se usar o “desmultiplicador” (TxM=0)
l SCA=00 à f=24/12= 2 MHZ à T = 0,5us
l SCA=01 à f=24/4= 6 MHZ à T = 0,1(6)us
l SCA=10 à f=24/48= 0,5 MHZ à T = 2us
l A cada período (T) dá-se um incremento na contagem
Temporizadores
exercícios

l Análise - timer
l Sabemos que
l SCA=10 à T = 2us
l Temos então ciclicamente
l Contar 1000/2=500 vezes e fazer o toggle de P2.0
l Seria interessante usar o timer no modo 2 (autoreload)
l Desta forma sempre que transbordava carregava novamente o
valor desejado
l Só que o modo 2 usa um registo de 8 bits para reload
l Só suporta valores 256 valores
l A alternativa é usar o timer no modo 16 bits e fazer o
autoreload manualmente
l Nota: estamos a usar apenas o Timer0 ou Timer1
l O micro tem outros timers que suportam autoreload de 16 bits
Temporizadores
exercícios

l Especificação – pseudo-código

CLKSEL ß 0x02
SCA ß modo2
Timer0 ß modo1
reload ß -500
TH0/TL0 ß reload
[Iniciar timer0]
P2.0 ß 0
Enquanto()
Enquanto (timer0 não transborda)
[fica aqui]
[complementar P2.0]
TH0/TL0 ß reload
Temporizadores
exercícios

l Implementação
Temporizadores
exercícios
#include <c8051f380.h>

void main (void) {


int reload = -500; // falta 500 ciclos para FFFF

PCA0MD = 0x00; // Desliga watchdog


XBR1 = 0x40; // Ativa crossbar

CLKSEL |= 0x02; //SYSCLK derivado do Oscil/2=24MHz

CKCON |= 0x02; // Divide o clock por 12 => T=24us


TMOD |= 0x01; // Modo 16 bits
P2_0 = 0; // Inicializa o valor do pino

TH0=reload >> 8; // Inicializa o registo de contagem


TL0=reload;
TR0 = 1; // Ativa a contagem
while (1) {
while (!TF0); // Aguarda fim da contagem
TF0 = 0;
P2_0 = !P2_0; // Complementa o pino do porto
TH0=reload >> 8; // Inicializa o registo de contagem
TL0=reload;
}
}
Temporizadores
exercícios

l Implementação
l Comprovar com o osciloscópio
Temporizadores
exercícios

l Problema 2
l Criar uma onda quadrada de 25kHZ em P2.0
l Análise
l Usar um modo diferente do timer
Temporizadores
exercícios

l Problema 3
l Piscar um led a cada segundo em P2.0
l Análise
1s =106us
Contagens do timer
No máximo conta 65536
Cada pulso (tick) corresponde a 2us, logo 65536 ticks=131072us
Para perfazer 1s terá de “dar a volta” 106/131072=7,63 vezes
Assim, terá de contar 7x, de 0 a 65535
7x 65536*2 = 917504us
E ainda sobram:106us – 917504us = 82496 us
Que corresponde a 82496/2=41248 ticks
Dá um valor de reload final de: 65536 – 41248 = 24288 (0x5EE0)
Temporizadores
Obrigado

Você também pode gostar