Você está na página 1de 21

REGISTRO TMR0 PIC - Microchip

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 1/21

REGISTRO TMR0
Introduo
Os microcontroladores possuem um registro especial utilizado como um temporizador/contador interno. A aplicao deste registro bastante verstil e, no geral, uma das ferramentas mais poderosas que o microcontrolador possui. A partir do registro do TMR0 possvel produzir bases de tempo bastante precisas (dependendo do tipo de oscilador empregado), elaborar contagens com pr-determinao e outras aplicaes que dependem apenas da imaginao do programador.

Princpio de Funcionamento
O registro TMR0 possui os seguintes recursos: - registro de 8 bits, permite contagens de 0 at 255 (ou at 256 incrementos). - opera como temporizador (clock interno) ou contador (clock externo ou fonte de sinal para contagem), selecionvel por meio do cdigo_fonte. - registro permite leitura (verifica o valor dentro do registro e comparao com outro valor) e escrita ( possvel iniciar a contagem a partir de qualquer valor entre 0 e 255, isto , o registro conta o restante dos incrementos disponveis). - seleo da transio (positiva ou negativa) no modo contador externo. - prescaler programvel pelo cdigo_fonte controlando a velocidade que o registro incrementa uma unidade. - requisio de interrupo quando o valor do registro exceder 255 (FFh) e retornar para 0 (00h) - overflow - utilizvel ou no atravs de alterao dos bits correspondentes ao controle de interrupes no registro INTCON durante a execuo do cdigo_fonte. Diagrama de Blocos O diagrama de blocos simplificado do funcionamento do TMR0 est esquematizado na fig.1:

Fig.1 Diagrama de Blocos TMR0

A fonte de incrementos do TMR0 pode ser selecionada a partir da chave T0CS entre fonte interna (Fosc/4), ou fonte externa (T0CKI pin - normalmente multiplexado com outras funes). A forma como o TMR0 vai incrementar pela fonte externa pode ser selecionada a partir do nvel lgico de T0SE (para incrementar no flanco de subida ou descida do sinal externo). A velocidade que o TMR0 incrementa pode ser determinada pelo uso de um divisor de frequencia (Programmable Prescaler), cuja diviso pode ser determinada por PS2, PS1 e PS0. A utilizao do Prescaler pode ser selecionada pela chave PSA. O sinal de sada do Prescaler (Psout) entregue a um circuito que se encarrega de sincronizar os pulsos com os sistemas internos (Sync with internal
Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 2/21

clocks) do processador para o caso de o valor contido no registro TMR0 seja modificado pelo cdigo_fonte (Data bus). A conexo do registro com o Data-Bus permite que os valores contidos sejam lidos ou escritos atravs do cdigo_fonte e, ao mesmo tempo, quando houver overflow, ocorre o desvio para o vetor de interrupo (quando habilitado), colocando 1 (um - set) automticamente no bit T0IF (Set interrupt flag bit T0IF on overflow). Configurao A configurao de uso do TMR0 feita a partir dos bits de controle existentes nos dois registros especiais: OPTION: INTCON: permite estabelecer a origem do sinal de contagem, a forma de incremento e com qual velocidade o registro ser incrementado (Prescaler). permite utilizar o recurso da interrupo sempre que o registro TMR0 retornar a zero (0) overflow.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 3/21

OPTION
Permite configurar a origem do sinal de contagem, a forma de incremento e com qual velocidade o registro ser incrementado (Prescaler). O endereo e a descrio da funo dos bits de configurao esto detalhados (realado) abaixo:
R/W 7 MSB R/W 6 R/W 5 R/W 4 R/W 3 R/W 2 R/W 1 R/W 0

/RBPU INTDEG T0CS

T0SE

PSA

PS2

PS1

PS0
LSB

BIT OPER INCIO CDIGO 7 R/W 1 /RBPU

FUNO Resistores Internos de Pull-Up do PORTB Habilitao

R/W

1 = Resistores Internos no habilitados 0 = Resistores Internos habilitados INTDEG Seleo de Transio p/ requisio de Interrupo por mudana de estado do pino RB0/INT: 1 = interrupo na transio positiva (0 1) no pino RB0/INT 0 = interrupo na transio negativa (1 0) no pino RB0/INT Seleo da fonte de incremento do TMR0 1 = transio no pino RA4/T0CKI 0 = ciclo de mquina (CM) interno Seleo de Transio no pino T0CKI p/ incremento do TMR0 1 = incremento na transio negativa (1 0) no pino T0CKI 0 = incremento na transio positiva (0 1) no pino T0CKI Aplicao do Prescaler

R/W

T0CS

R/W

T0SE

R/W

PSA

2-0

R/W

1 = Prescaler aplicado no WDT 0 = Prescaler aplicado no TMR0 PS2-PS0 Configurao do divisor do Pre-scaler

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 4/21

Bit 2, 1, 0 TMR0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128

Obs.: Se PSA=1 (Prescaler aplicado no WDT), o divisor do TMR0 ser 1:1.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 5/21

Descrio da Configurao Os bits so do tipo Leitura/Escrita (R/W Read/Write) e podem ser modificados durante a execuo do cdigo_fonte (on-the-fly) de acordo com as necessidades de uso e operao dos recursos disponveis. T0CS (TMR0 Clock Source): Seleo da fonte de sinal de incremento para o TMR0 bit 5 Este bit permite selecionar a fonte de sinal que o registro TMR0 utiliza como incremento, de acordo com as duas opes: T0CS = 1 a origem do sinal de incremento a transio do nvel lgico no pino externo RA4/T0CKI - o TMR0 funciona como um contador. Nesta opo as funes I/Odo bit RA4 e CMP1 do comparador ficam desligadas. T0CS = 0 a origem do sinal de incremento o ciclo de mquina (CM) interno - o TMR0 funciona como um temporizador (timer), que depende da frequencia do oscilador escolhido (Fosc) pelo projeto. Nesta opo as funes I/Odo bit RA4 e CMP1 do comparador esto ativas. A fig.2 mostra o diagrama lgico do circuito de seleo da fonte do sinal de incremento dot TMR0, onde o bit T0CS aciona a chave seletora entre o sinal externo (entrada RA4) e o sinal interno (Fosc). A fig.3 mostra um exemplo da localizao fsica da entrada RA4 pino 3 do microcontrolador modelo P16F628A, encapsulamento PDIP (plastic, dual in line, 18 pins). O projetista deve consultar a folha de dados (data sheet) do dispositivo escolhido antes da aplicao.

Fig.2 Circuito Lgico Fonte de Sinal

Fig.3 Pino RA4/T0CKI no modelo P16F628A

O projetista pode empregar as duas fontes (interna ou externa) de acordo com a necessidade de aplicao mudando os valores do bit T0CS por meio do cdigo_fonte. Observar que no possvel o uso simultaneo das duas opes. T0SE (TMR0 Source Edge): Seleo da transio do sinal de incremento para o TMR0 bit 4 O projetista pode selecionar com qual tipo de transio do sinal de entrada externo que o TMR0 realiza um incremento de contagem, de acordo com as opes: T0SE = 1 incremento do TMR0 na transio negativa (1 0) no pino RA4/T0CKI (fig.4) T0SE = 0 incremento do TMR0 na transio positiva (0 1) no pino RA4/T0CKI (fig.5)

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 6/21

Fig.4 Transio Negativa no pino RA4/T0CKI

Fig.5 Transio Positiva no pino RA4/T0CKI

O projetista pode empregar as duas transies (negativa ou positiva) de acordo com a necessidade de aplicao mudando os valores do bit T0SE por meio do cdigo_fonte. Para que no ocorram erros de execuo do cdigo_fonte, as instrues das duas transies devem ser separadas por um perodo de tempo no menor que 10 CM, suficiente para que a ALU atualize os valores internos dos registros. Portanto, a frequencia do sinal de entrada determina a possibilidade de uso das instrues encadeadas. Observar que no possvel o uso simultaneo das duas opes. PSA (Pre Scaler Assignment): Seleo da aplicao do Pre Scaler bit 3 O Pre Scaler um registro divisor de frequencia cuja funo diminuir a velocidade de incrementos do registro TMR0. Como pode ser visto no diagrama lgico da fig.6, a chave seletora PSA determina o emprego do divisor do Pre Scaler.

Fig.6 Diagrama de Blocos Pre Scaler TMR0

Pode ter sua utilizao direcionada para duas aplicaes distintas PSA = 1 Prescaler aplicado no WDT Selecionado para o WDT, o divisor programvel (Programmable Prescaler) no ser utilizado, e o TMR0 ser incrementado na proporo de 1:1, como mostra a fig.7:

CM
0

1 CM
1

TMR0
0

1 INCREMENTO

Fig.7 Incremento 1:1 do TMR0

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 7/21

PSA = 0 Prescaler aplicado no TMR0 Selecionado para o TMR0 (PSA = 0), o divisor programvel (Programmable Prescaler) pode ser utilizado, e o TMR0 ser incrementado na proporo da Tabela Verdade: SELEO PS2 0 0 0 0 1 1 1 1 PS1 0 0 1 1 0 0 1 1 PS0 0 1 0 1 0 1 0 1 TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 Incremento do TMR0 Incrementa aps 2 pulsos externos ou 2CM Incrementa aps 4 pulsos externos ou 4CM Incrementa aps 8 pulsos externos ou 8CM Incrementa aps 16 pulsos externos ou 16CM Incrementa aps 32 pulsos externos ou 32CM Incrementa aps 64 pulsos externos ou 64CM Incrementa aps 128 pulsos externos ou 128CM Incrementa aps 256 pulsos externos ou 256CM

A fig.8 mostra um exemplo de aplicao do divisor programvel na proporo de 1:4 onde o registro TMR0 incrementa aps 4 pulsos externos ou 4CM:

CM
0

4 CM
1

TMR0
0

1 INCREMENTO

Fig.8 Incremento 1:4 do TMR0

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 8/21

Mecanismo de Contagem
A anlise do mecanismo de contagem do registro pode ser feita a partir de dois exemplos prticos indicando o comportamento dos valores contidos no registro.

Primeiro Exemplo: incremento do valor contido no registro feito a cada 1CM - Prescaler 1:1.
Considerando a configurao do registro OPTION:

/RBPU INTDEG T0CS

T0SE

PSA

PS2

PS1

PS0

O registro TMR0 deve operar de acordo com os seguintes parametros: T0CS = 0 T0SE = 0 PSA = 1 PS2:PS0 fonte de incremento interno (CM) transio de incremento positiva (0 1) divisor do Prescaler designado para o WDT diviso 1:1 (os valores dos bits so irrelevantes - Prescaler designado para o WDT)

A fig.9 mostra o diagrama de tempo da operao do registro TMR0 de acordo com esta configurao:

Fig.9 Diagrama de Tempo TMR0 - Fonte Interna, Prescaler=1:1

Primeira linha: mostra os ciclos de pipeline Q1, Q2, Q3 e Q4 - o intervalo de tempo de cada ciclo depende da frequencia do oscilador interno ou externo. Segunda linha: mostra a posio do registro PC (Program Counter), iniciando em PC-1 (o valor de PC menos a unidade) at PC+6, totalizando 6 CM - o valor do registro PC atualizado sempre no final do ciclo Q4. Terceira linha: mostra o conjunto de instrues para colocar um novo valor dentro do registro TMR0 e sua leitura conforme o cdigo-fonte abaixo - a instruo executada sempre no final do ciclo Q1:
MOVWF MOVF TMR0 TMR0,W ; MOVE O VALOR CONTIDO NO REGISTRO W PARA ; O REGISTRO TMR0 ; MOVE O VALOR CONTIDO EM TMR0 PARA O REGISTRO W ; (LEITURA DO VALOR)

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 9/21

Quarta linha: mostra o valor contido no registro TMR0 - atualizado sempre no final do ciclo Q3: T0 T0+1 T0+2 NT0 NT0+1 NT0+2 valor contido em TMR0 em PC-1 valor contido em TMR0 em PC valor contido em TMR0 em PC+1 novo valor contido em TMR0 aps instruo MOVF em PC+1 at PC+4 novo valor contido em TMR0 em PC+5 novo valor contido em TMR0 em PC+6

Quinta linha: mostra a instruo executada no CM. A sequencia da fig.9 indica o comportamento do valor contido no registro TMR0:

CICLO

GRFICO

AO

PC-1

- o registro TMR0 contm o valor T0 at o final do ciclo Q3, quando atualizado para o valor T0+1

PC

- a instruo MOVWF TMR0 extrada da memria de programa e decodificada. - o valor do TMR0 contm o valor T0+1 at o final do ciclo Q3, quando atualizado para T0+2 no final do ciclo Q3.

PC+1

PC+2

- a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVWF TMR0 executada no final do ciclo Q1. - o valor do TMR0 contm o valor T0+2 at o final do ciclo Q3, quando atualizado para NT0 no final do ciclo Q3 (execuo da instruo). - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 mantido NT0 no final do ciclo Q3.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 10/21

CICLO
PC+3

GRFICO

AO
- a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 mantido NT0 no final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 contm o valor NT0 at o final do ciclo Q3, quando atualizado para NT0+1 no final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0+1. - o valor do TMR0 atualizado para NT0+2 no final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0+2.

PC+4

PC+5

PC+6

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 11/21

Segundo Exemplo: incremento do valor contido no registro feito a cada 2CM - Prescaler 1:2.
Considerando a configurao do registro OPTION:

/RBPU INTDEG T0CS

T0SE

PSA

PS2

PS1

PS0

O registro TMR0 deve operar de acordo com os seguintes parametros: T0CS = 0 T0SE = 0 PSA = 0 PS2:PS0 fonte de incremento interno (CM) transio de incremento positiva (0 1) divisor do Prescaler designado para o TMR0 Prescaler ajustado para diviso 1:2 (2CM para um incremento do TMR0)

A fig.10 mostra o diagrama de tempo da operao do registro TMR0 de acordo com esta configurao:

Fig.10 Diagrama de Tempo TMR0 - Fonte Interna, Prescaler=1:2

Primeira linha: mostra os ciclos de pipeline Q1, Q2, Q3 e Q4 - o intervalo de tempo de cada ciclo depende da frequencia do oscilador interno ou externo. Segunda linha: mostra a posio do registro PC (Program Counter), iniciando em PC-1 (o valor de PC menos a unidade) at PC+6, totalizando 6 CM - o valor do registro PC atualizado sempre no final do ciclo Q4. Terceira linha: mostra o conjunto de instrues para colocar um novo valor dentro do registro TMR0 e sua leitura conforme o cdigo-fonte abaixo - a instruo executada sempre no final do ciclo Q1:
MOVWF MOVF TMR0 TMR0,W ; MOVE O VALOR CONTIDO NO REGISTRO W PARA ; O REGISTRO TMR0 ; MOVE O VALOR CONTIDO EM TMR0 PARA O REGISTRO W ; (LEITURA DO VALOR)

Quarta linha: mostra o valor contido no registro TMR0 - atualizado sempre no final do ciclo Q3: T0 T0+1 NT0 NT0+1 valor contido em TMR0 em PC-1 valor contido em TMR0 em PC+1 novo valor contido em TMR0 aps instruo MOVF em PC+1 at PC+5 novo valor contido em TMR0 em PC+5
Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 12/21

Quinta linha: mostra a instruo executada no CM. A sequencia da fig.10 indica o comportamento do valor contido no registro TMR0:

CICLO
PC-1 PC

GRFICO

AO
- o registro TMR0 contm o valor T0 at o final do ciclo Q3, quando atualizado para o valor T0+1 - a instruo MOVWF TMR0 extrada da memria de programa e decodificada. - o valor do TMR0 contm o valor T0+1 e no modificado aps o final do ciclo Q3 (so necessrios 2CM para atualizar o TMR0). - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVWF TMR0 executada no final do ciclo Q1. - o valor do TMR0 contm o valor T0+1 at o final do ciclo Q3, quando atualizado para NT0 no final do ciclo Q3 (execuo da instruo). - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 mantido NT0 e no modificado aps o final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 mantido NT0 e no modificado aps o final do ciclo Q3.

PC+1

PC+2

PC+3

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 13/21

CICLO
PC+4

GRFICO

AO
- a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 mantido NT0 e no modificado aps o final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0. - o valor do TMR0 atualizado para NT0+1 no final do ciclo Q3. - a instruo MOVF TMR0,W extrada da memria de programa e decodificada. - a instruo MOVF TMR0,W executada no final do ciclo Q1 - l o valor NT0+1.

PC+5

PC+6

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 14/21

OBSERVAES: 1 - o valor contido no TMR0 pode ser modificado pelo cdigo_fonte a qualquer momento - o programador pode colocar qualquer valor (entre 0 e 255) no TMR0 - o registro incrementa a partir deste novo valor de acordo com as configuraes feitas. 2 - existe um atraso (latency - latencia) entre o ciclo em que o registro TMR0 modificado pelo cdigo_fonte e o incio dos incrementos a partir do CM. De acordo com a fig.9 e fig.10, o atraso equivalente ao ajuste do divisor do Prescaler (bits PS2:PS0) e igual a 2 x PSA (duas vezes o divisor PSA), ou seja: PSA 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 ATRASO (CM) 2 4 8 16 32 64 128 256 512

O programador deve ficar atento a este atraso que afeta contagens de tempo ou eventos - se o atraso provocar erros de contagem, o cdigo_fonte deve conter os ajustes necessrios para preveno do atraso. 3 - o valor contido no TMR0 pode ser lido e transferido para o registro W, mas o programador deve levar em conta a constante atualizao do valor do TMR0 de acordo com o CM e a diviso do Prescaler sempre que utilizar o valor encontrado no TMR0 para tomada de decises.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 15/21

INTCON
Permite configurar a aplicao do recurso da requisio de interrupo e identificar a sua chamada para tomada de providencias. O endereo e a descrio da funo dos bits de configurao esto detalhados (realado) abaixo:
R/W 7 R/W 6 R/W 5 R/W 4 R/W 3 R/W 2 R/W 1 R/W 0

GIE
MSB

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF
LSB

BIT OPER INCIO CDIGO 7 R/W 0 GIE

FUNO Chave Geral de Habilitao das Interrupes 1 = habilita as interrupes selecionadas 0 = no habilita as interrupes selecionadas Chave de Habilitao das Interrupes Perifricas 1 = habilita as interrupes perifricas 0 = no habilita as interrupes perifricas Habilitao da Interrupo por Retorno a Zero do TMR0 1 = habilita Interrupo por Retorno a Zero do TMR0 0 = no habilita Interrupo por Retorno a Zero do TMR0 Habilitao da Interrupo Externa no pino RB0/INT 1 = habilita Interrupo Externa no pino RB0/INT 0 = no habilita Interrupo Externa no pino RB0/INT Habilitao da Interrupo por Mudana de Estado no PORTB 1 = habilita Interrupo por Mudana de Estado no PORTB 0 = no habilita Interrupo por Mudana de Estado no PORTB Flag de Sinalizao da Ocorrncia de Interrupo por Retorno a Zero do TMR0 1 = TMR0 retornou a Zero 0 = TMR0 no retornou a Zero Flag de Sinalizao da Ocorrncia de Interrupo Externa no pino RB0/INT 1 = ocorreu Interrupo Externa no pino RB0/INT 0 = no ocorreu Interrupo Externa no pino RB0/INT Flag de Sinalizao da Ocorrncia de Interrupo por Mudana de Estado no PORTB 1 = ocorreu Interrupo por Mudana de Estado no PORTB 0 = no ocorreu Interrupo por Mudana de Estado no PORTB

R/W

PEIE

R/W

T0IE

R/W

INTE

R/W

RBIE

R/W

T0IF

R/W

INTF

R/W

RBIF

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 16/21

Descrio da Configurao Os bits so do tipo Leitura/Escrita (R/W Read/Write) e podem ser modificados durante a execuo do cdigo_fonte (on-the-fly) de acordo com as necessidades de uso e operao dos recursos disponveis. GIE (General Interrupt Enable): Chave Geral de Habilitao das Interrupes bit 7 Este bit permite utilizar as interrupes (qualquer uma, desde que habilitada), de acordo com as duas opes: GIE = 1 o uso das interrupes est habilitado. A interrupo do TMR0 s ser empregada se o bit correspondente habilitao do TMR0 (T0IE) estiver com valor 1 (um). GIE = 0 o uso das interrupes no est habilitado. A interrupo do TMR0 no ser empregada mesmo que o bit correspondente habilitao do TMR0 (T0IE) esteja com valor 1 (um). T0IE (TMR0 Interrupt Enable): Chave de Habilitao da Interrupo TMR0 bit 5 Este bit permite utilizar a interrupo do TMR0, desviando o cdigo_fonte da posio que se encontrar na memria de programa sempre que o registro retornar a zero, para o Vetor de Interrupo (endereo da memria de programa 0x04), de acordo com as duas opes: T0IE = 1 o uso da interrupo do TMR0 est habilitado. A interrupo do TMR0 s ser empregada se o bit correspondente habilitao geral (GIE) estiver com valor 1 (um). T0IE = 0 o uso da interrupo do TMR0 no est habilitado. A interrupo do TMR0 no ser empregada mesmo que o bit correspondente habilitao geral (GIE) esteja com valor 1 (um). T0IF (TMR0 Interrupt Flag): Sinalizao da Ocorrencia da Interrupo TMR0 bit 2 Este bit sinaliza a ocorrencia ou no da interrupo do TMR0, de acordo com as duas opes: T0IF = 1 sinaliza que a interrupo do TMR0 foi requisitada indicando que o registro retornou a zero e o cdigo_fonte foi desviado da posio que se encontra na memria de programa para o Vetor de Interrupo (endereo 0x04), T0IF = 0 sinaliza que a interrupo do TMR0 no foi requisitada. O registro TMR0 ainda no retornou a zero. O bit T0IF automaticamente colocado no valor 1 (um) - setado - pela Unidade Lgica-Aritmtica (ULA) quando o registro TMR0 retorna a zero (overflow).
NOTA: possvel forar uma requisio de interrupo colocando o valor 1 (um) no bit T0IF, obrigando o desvio automtico para o endereo do Vetor de Interrupo (endereo 0x04 da Memria de Programa). Pode ser bastante til durante a realizao de um programa para iniciar ou reiniciar um contador ou temporizador.

O retorno a 0 (zero) do bit T0IF deve ser feito pelo manualmente pelo cdigo_fonte, principalmente antes de sair de uma rotina de tratamento de interrupo (antes da execuo da instruo RETFIE), caso contrrio a ULA considera a existencia de uma IRQ (requisio de interrupo) pendente e provoca novo desvio para o Vetor de Interrupo.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 17/21

Mecanismo de Interrupo
O uso da interrupo por excesso (overflow) do registro TMR0 depende da configurao dos bits correspondentes no registro INTCON. Como o registro acessvel pelo cdigo_fonte, possvel modific-lo sempre que necessrio durante a execuo do programa. O uso da interrupo exige alguma ateno por parte do programador, uma vez que o simples excesso do TMR0 no acarreta a chamada da interrupo de forma imediata (desde que devidamente configurada). Para anlise da forma como a interrupo requisitada, vamos fazer a execuo de um exemplo com o arranjo do registro INTCON abaixo: GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

1 Nestas condies:

GIE = 1 o uso das interrupes est habilitado. T0IE = 1 o uso da interrupo do TMR0 est habilitado. T0IF = 0 no ococrreu interrupo do TMR0. Para a configurao do registro OPTION: /RBPU INTDEG T0CS T0SE PSA PS2 PS1 PS0

O registro TMR0 deve operar de acordo com os seguintes parametros: T0CS = 0 T0SE = 0 PSA = 1 PS2:PS0 fonte de incremento interno (CM) transio de incremento positiva (0 1) divisor do Prescaler designado para o WDT diviso 1:1 (os valores dos bits so irrelevantes)

A fig.11 mostra o diagrama de tempo para a requisio de interrupo do TMR0: Primeira linha: mostra os ciclos de pipeline Q1, Q2, Q3 e Q4 - o intervalo de tempo de cada ciclo depende da frequencia do oscilador interno ou externo. Segunda linha: sada do sinal de Clock (CLKOUT). Terceira linha: valor contido no registro TMR0, iniciando com o valor 254 (FEh). Quarta linha: estado do bit T0IF no registro INTCON. Quinta linha: estado do bit GIE no registro INTCON.
Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 18/21

Fig.11 Diagrama de Tempo para Requisio de InterrupoTMR0 - Fonte Interna, Prescaler=1:1

Sexta linha: Fluxo de instrues (Instruction Flow) - stima linha em diante Stima linha: Program Counter (PC) - Contador do Programa - endereo na memria de programa onde a instruo extrada da memria (instruction fetched) e executada (instruction executed). A anlise da requisio da interrupo por excesso (overflow) do registro TMR0 pode ser feita, passo a passo, de acordo com a descrio abaixo:

CICLO

GRFICO

AO
Posio de Memria PC: - o registro TMR0 contm o valor 254 (FEh) at o final do ciclo Q3, quando atualizado para o valor 255 (FFh) - o bit de flag T0IF tem seu estado verificado no final do ciclo Q1 (permanece igual a 0 at o final do ciclo Q4). - o bit de controle GIE permanece igual a 1 (uso das interrupes habilitado) Execuo de Instruo: - busca da instruo Inst(PC) no endereo PC da memria de programa (Instruction fetched). - execuo da instruo Inst(PC-1) (Instruction executed). Transio posio de Memria PC PC+1: - o registro TMR0 mantm o valor 255 (FFh). - o bit de flag T0IF muda de estado de 0 1 no final do ciclo Q4 indicando que o TMR0 atingiu o valor limite (overflow) - aqui inicia o processo do desvio para tratamento da interrupo. - o bit de controle GIE permanece igual a 1 (uso das interrupes habilitado) - contador de programa avana de PC PC+1
Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 19/21

PC

PC PC+1

Observao: - com a mudana de estado do bit T0IF de 0 1, o processo de desvio para o Vetor de Interrupo iniciado, desde que o bit de GIE esteja habilitado (igual a 1). Posio de Memria PC+1: - o registro TMR0 contm o valor 255 (FFh) at o final do ciclo Q3, quando atualizado para o valor 0 (00h) - o bit de flag T0IF tem seu estado verificado no final do ciclo Q1 (igual a 1 neste ciclo). - o bit de controle GIE permanece igual a 1 (uso das interrupes habilitado) Execuo de Instruo: - busca da instruo Inst(PC+1) no endereo PC+1 da memria de programa (Instruction fetched). - execuo da instruo Inst(PC) (Instruction executed). Transio posio de Memria PC+1 PC+1 (Dummy Cycle Ciclo Perdido): - o registro TMR0 mantm o valor 0 (00h). - o bit de flag T0IF permanece no estado 1 no incio do ciclo Q1. - o bit de controle GIE permanece igual a 1 (uso das interrupes habilitado) - contador de programa permanece igual a PC+1 Posio de Memria PC+1 (Dummy Cycle - Ciclo Perdido): - o registro TMR0 contm o valor 0 (00h) at o final do ciclo Q3, quando atualizado para o valor 1 (01h) - o bit de flag T0IF permanece no estado 1 no incio do ciclo Q1. - o bit de controle GIE muda de estado 1 0 (uso das interrupes no habilitado) para impedir que a ocorrencia de qualquer outra interrupo provoque novo desvio de endereo. Execuo de Instruo: - nenhuma instruo buscada na memria ou executada - o ciclo perdido. Observao: - neste ciclo o valor PC+1 armazenado no Stack para retorno a esta posio quando ocorrer a execuo da instruo RETFIE - o desvio realizado pela ALU. PC+1 (Dummy Cycle) 0004h Transio posio de Memria PC+1 (Dummy Cycle - Ciclo Perdido) 0004h: - o registro TMR0 mantm o valor 1 (01h). - o bit de flag T0IF permanece no estado 1 no incio do ciclo Q1. - o bit de controle GIE permanece igual a 0 (uso das interrupes no habilitado) - contador de programa direcionado para o Vetor de Interrupo PC+1 0004h
Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 20/21

PC+1

PC+1 PC+1 (Dummy Cycle)

PC+1 (Dummy Cycle)

Observao: - o valor 0004h colocado no PC (Program Counter) pela ALU. Posio de Memria 0004h (Vetor de Interrupo): - o registro TMR0 contm o valor 1 (01h) at o final do ciclo Q3, quando atualizado para o valor 2 (02h) - o bit de flag T0IF de mantm seu estado 1 no incio do ciclo Q1. - o bit de controle GIE permanece igual a 0 (uso das interrupes no habilitado) Execuo de Instruo: - busca da instruo Inst(0004h) no endereo 0004h da memria de programa (Instruction fetched). - nenhuma instruo executada (Dummy Cycle) (Instruction executed). Transio posio de Memria 0004h 0005h: - o registro TMR0 mantm o valor 2 (02h). - o bit de flag T0IF permanece no estado 1 no incio do ciclo Q1. - o bit de controle GIE permanece igual a 0 (uso das interrupes no habilitado) - contador de programa avana de 0004h 0005h Posio de Memria 0005h: - o registro TMR0 contm o valor 2 (02h) at o final do ciclo Q3, quando atualizado para o valor 3 (03h) - o bit de flag T0IF mantm seu estado 1 no incio do ciclo Q1. - o bit de controle GIE permanece igual a 0 (uso das interrupes no habilitado). Execuo de Instruo: - busca da instruo Inst(0005h) no endereo 0005h da memria de programa (Instruction fetched). - execuo da instruo Inst(0004h) (Instruction executed). O processo de desvio para o Vetor de Interrupo (endereo 0004h da memria de programa) iniciado quando o valor do registro TMR0 igual a 255 (FFh) e a ALU altera o valor do flag T0IF de 0 1, indicando a ocorrencia de requisio de interrupo. No ciclo seguinte a ALU no executa nenhuma operao (Dummy Cicle - Ciclo Perdido) enquanto a ALU armazena o valor do PC (Program Counter) no Stack para retorno posterior (execuo da instruo RETFIE). No ciclo seguinte, a instruo armazenada no endereo 0004h chamada da memria e executada no ciclo 0005h - que deve ser a primeira instruo para o tratamento da requisio de interrupo.

0004h

0004h 0005h

0005h

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/08 21/21

Você também pode gostar