Você está na página 1de 38

 

Universidade Federal do Rio Grande do Norte


Centro de Tecnologia
Departamento de Engenharia de Computação e Automação

MICROCONTROLADOR PIC 16F84A E


ACESSO A MEMÓRIA CACHE

Primeira Avaliação

Discente: Jaime Cristalino Jales Dantas


Matricula: 2011008771
Disciplina: Arquitetura de Computadores

Natal, 2 de outubro de 2015


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Sumário
Parte I – Microcontrolador PIC 16F84A ....................................................................................................... 3 
1 – Introdução .................................................................................................................................................................. 3 
2 – Pinagem PIC 16F84A .............................................................................................................................................. 3 
3 - Estrutura do microcontrolador PIC 16F84A ...................................................................................................... 5 
4 - Instruções .................................................................................................................................................................... 8 
5 - Interrupções ............................................................................................................................................................. 13 
4.1 - Interrupções externas .......................................................................................................................................................... 14 
4.2 - Interrupções de overflow TMR0 ..................................................................................................................................... 14 
4.3 - Interrupções por mudança de estado PORTB ............................................................................................................. 15 
4.4 - Interrupções de fim de escrita EEPROM ..................................................................................................................... 15 
Parte 2 – Acesso à memória cache ................................................................................................................. 16 
1 – Análise das configurações da cache .................................................................................................................... 16 
2 – Analise dos resultados ........................................................................................................................................... 21 
3 – Algoritmo ................................................................................................................................................................. 25 
Bibliografia ......................................................................................................................................................... 38 


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Parte I – Microcontrolador PIC 16F84A

1 – Introdução

O microcontrolador pode ser analisado como um minicomputador que possui as básicas funções
de um computador convencional, porém com um tamanho muito pequeno. Muitos produtos possuem
microcontroladores que gerenciam e controlaram determinadas funções deles. Para isso, nos chamamos
de sistemas embarcados qualquer produto que tenha uma eletrônica que usa microcontroladores. Um
microcontrolador é um chip computacional que possui pinos de entrada e saída de dados, pinos de
controle, memoria, CPU, etc. A Microchip possui diversos tipos de microprocessadores divididos em
diferentes famílias, e o PIC 16F84A é um tipo de microcontrolador da famílias 16 da Microchip.
O microcontrolador PIC 16F84A tem sido uns dos microcontroladores mais usados no mundo, e
ele possui uma CPU, memoria flash, memoria RAM, I/O, uma memoria permanente pra guardar o
programa, e outros dispositivos auxiliares, tais como clock, conversos A/D, etc.

2 – Pinagem PIC 16F84A

Figura 1 - Pinagem do PIC 16F84A


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

A discrição e função de cada pino é mostrado na tabele a seguir

Tabela 1 - Discrição de pinos do PIC 16F84A

NOME PINO DESCRIÇÃO


OSC1/CLKIN 16 Entrada para o cristal oscilador/clock externo
OSC2/CLKOUT 15 Saída para o cristal oscilador/clock externo
���� 4 Master Clear (reset) externo
RA0 17
RA1 18
Porta de I/O digital
RA2 1
RA3 2
Porta de I/O digital ou entrada de clock para o
RA4/T0CKI 3
contador
RB0/INT 6 Porta de I/O digital / Interrupção externa
RB1 7 Pode ter
RB2 8 Porta de I/O digital Pull-up
RB3 9 interno
RB4 10 Porta de I/O digital ou interrupção na mudança de habilitado
RB5 11 estado por
Porta de I/O digital, interrupção na mudança de software
RB6 12
estado, ou clock da programação serial
Porta de I/O digital, interrupção na mudança de
RB7 13
estado, ou data da programação serial
VSS 5 GND - Tensão de referência negativa e I/O
VDD 14 Vcc - Alimentação positiva (+5 Volts) e I/O


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

3 - Estrutura do microcontrolador PIC 16F84A

O microcontrolador PIC 16F84A é um microcontrolador de 8 bits que utiliza a arquitetura RISC.


Ela é baseada em registradores, com o barramento de memória de dados separado do barramento de
memória de programa. Este conceito permite ter um conjunto de instruções simples, mas extremamente
poderoso que enfatiza as operações bit, byte e de registradores. A estrutura completa do
microcontroaldor PIC 16F84A pode ser vista no diagrama abaixo:

 
Figura 2 - Diagrama PIC 16F84A


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

No diagrama acima, podemos nomear os blocos agrupados em:

1 – CPU (central processing unit)


2 – Modulo de entradas e saídas
3 – Barramento de endereço da memória de programa
4 - Memória principal de dados do programa
5 – Barramento de dados (para comandos de instrução)
6 – Barramento de dados principal central E/S e memoria principal e de dados
7 – Barramento de endereço para memoria principal de dados
8 – Endereços extraídos do comando de instrução
9 - Dado explicito extraído do comando de instrução
10 – Barramento de instrução

Para uma rápida analise, podemos simplificar esse diagrama acima em um diagrama simplificado
em que blocos foram agrupados. Essa análise pode ser analisada em comparação com a arquitetura de
Von Neumann, já que os elementos do microcontrolador estão dispostos de forma similar a essa
arquitetura. Vale salientar que a arquitetura do PIC 16F84A possui barramentos específicos que
interligam o CPU com os elementos de memória (principal e de programa). Para a análise da estrutura
do microcontrolador PIC 16F84A, utilizaremos o diagrama da figura abaixo:


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Figura 3 – Estrutura simplificada PIC 16F84A

Os componentes básicos do PIC 16F84A estão listados abaixo:


Memória Flash: É a memória que fica armazenado o programa, e é escrita e apagada e eletronicamente
com o uso de software.
Memória EEPROM: É a memoria não volátil do microcontrolador, ou seja, mesmo que a alimentação
seja cortada, os dados não são perdidos. É utilizada para guardar dados internos que não podem ser
perdidos.
Memoria RAM: É a memoria volátil do microcontrolador, e é utilizada na execução do programa.
Quando a alimentação é desligada, os dados presente nessa memoria são perdidos.
Porto A e Porto B: São as I/O do microcontrolador com seus periféricos. O porto A possui 5 pinos de
I/O e o porto B possui 8 pinos de I/O.
Contador / Temporizador: É um registro de 8 bits no interior do microcontrolador PIC que roda
independentemente do programa que é instalado nele. No final de quatro ciclos de clock, ele incrementa
esse contador ate o máximo de 255, que é a máxima representação de 8 bits, e quando ele chega a esse
valor, o contador é zerado a contagem reiniciado do zero.
Unidade de Processamento Central (CPU): É responsável pela interconexão de todos os blocos
internamente no microcontrolador e também pela execução do programa.


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

4 - Instruções

O ciclo de instrução de um microcontrolador é composto por dois passos, o passo de busca


chamado de “fetch” e o passo de execução da instrução. Esses dois passos se dividem em diversos
passos que pode dependem de alguns fatores. A lista geral de passos é:
1- Busca a instrução na memoria
2- Decodificação da instrução
3- Calculo do endereço do operando
4- Busca do operando
5- Operação do dado
6- Calculo do endereço do operando
7- Armazenação do operando
Dependendo se ha ou não interrupções, esse ciclo pode mudar um pouco. O processador ira
checar ao fim do ciclo de instrução se houve interrupções.
O microcontrolador PIC 16F84A possui um conjunto de 35 instruções. Procurou-se o otimizar o
numero de instrução o máximo possível, aumentando assim a rapidez e a simplicidade de arquitetura do
microcontrolador PIC 16F84A. Entretendo, isso também trousse uma limitação na programação, pois
existe apenas 35 diferente instruções, ou seja, em alguns casos é necessário desenvolver analises não
convencionais para solucionar um problema.
Cada instrução é composta por uma “word” de 14 bits dividida em OPCODE, a qual especifica o
tipo de instrução e um ou mais operadores que especificam a operação da instrução. As operações
podem ser divididas em orientada a byte, a bit e literais e controle. A descrição do OPCODE é mostrada
na tabela abaixo:

Tabela 2 - Campos do OPCODE

Campo Descrição
Registrador de endereço; Referência a
f um registrador
Registrador temporário para as
w operaçõe na ULA (acumulador)
Refere-se ao bit específico dentro de
b um byte


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Uma constante que pode ser escrita na


k forma decimal, hexa, ou binária
Ultilizado pelo Microchip software
x tools
Local onde é armazenada o resultado
d da operação
PC Contador de programa
TO Bit de "Time-out"
PD Bit de "Power-down"

Na operação orientada a byte, ‘f’ representa um registrador de arquivo e ‘d’ representa o


designador de destino. O registrador designador de arquivo especifica qual registrador de arquivo será
usado pela instrução. Já o designador de destino especifica onde o resultado da operação sera gravado.
Se ‘d’ for zero, o resultado é colocado no registrador W. Caso contrario (d=1), o resultado é colocado no
registrador de arquivo especificado na instrução.
Na operação orientada a bit, ‘b’ representa um campo de bit designador que seleciona o numero
de bits afetados pela operação, enquanto ‘f’ representa o endereço do arquivo o qual o bit é localizado.
Nas operações literais e controle, ‘k’ representa uma constante de 8 ou 11 bits, ou um valor
literal.
Graças ao recurso de “pipeline”, todas instruções são executadas com um único ciclo de
instrução, a não ser que um teste condicional é verdadeiro ou o contador do programa é mudado como
resultado de uma instrução. Os microcontroladores PIC usam o recurso de “pipeline” para aumentar a
velocidade de execução das instruções. O pipeline é uma técnica utilizada por processadores que dividir
a execução das instruções em partes e cada uma destas partes pode ser executada em paralelo em um
formato semelhante a uma linha de montagem de carros. Para o microcontrolador PIC 16F18A, pode-se
visualizar a execução das instruções como sendo dividida em dois estágios: busca (fetch) e executa
(execute).
Um ciclo de instruções consiste de quatro ciclos. A busca e execução da instrução são feitas em
linha, de tal forma que a busca leva um ciclo de instrução e a execução leva outro ciclo. Contudo, devido
a característica de “pipeline”, cada instrução é executada efetivamente em um ciclo, pois
simultaneamente ocorrem a execução de uma instrução e a busca a instrução seguinte. Se uma instrução
causa a alteração do Contador de Programa (PC) então dois ciclos são necessários para completar a
instrução.


Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Conjunto de instruções do PIC 16F84A

Tabela 3 - Instruções PIC 16F84A

INSTRUÇÃO ARGUMENTO DESCRICAO


ADDLW k Soma a constante k ao valor memorizado no acumulador
W e coloca o resultado no acumulador.
Soma o valor contido no acumulador W com o valor
ADDWF f,d
contido no registrador endereçado pelo parâmetro f.
Efetua o AND bit a bit entre o valor contido no
ANDLW k acumulador W e o valor constante k. O resultado será
memorizado no acumulador.
Efetua o AND bit a bit entre o valor contido no
ANDWF f,d acumulador W e o valor contido no registrador endereçado
pelo parâmetro f.
BCF f,b Zera o bit b do registrador no endereço f.
BSF f,b Coloca em 1 no bit b do registrador que está no endereço f.
Testa o bit b contido no registrador no endereço f e pula a
BTFSC f,b
próxima instrução se este valer 0.
Testa o bit b contido no registrador do endereço f e pula a
BTFSS f,b
instrução seguinte se este for 1.
Chama uma subrotina memorizada no endereço k. O
parâmetro k pode ser especificado utilizando-se
CALL k
diretamente o valor numérico do endereço ou então o
relativo label.
Zera o valor contido no registrador endereçado pelo
CLRF f
parâmetro f.
CLRW Zera o valor contido no registrador W.
Utilizada quando programarmos o PIC 16F84A com a
opção Watchdog. Nesta modalidade o microcontrolador
PIC habilita um timer que, uma vez transcorrido um
determinado tempo, efetua o reset do mesmo. Para evitar o
CLRWDT reset do nosso programa deveremos executar ciclicamente
a instrução CLRWDT para zerar o timer antes deste
tempo. Se não zerarmos o WDT neste tempo, o circuito de
watchdog interpretará este como um bloco de programa
em execução e efetuará o reset para bloquea-lo.
Efetua o complemento do valor contido no registrador
COMF f,d
endereçado pelo parâmetro f.
Decrementa o conteúdo do registrador endereçado pelo
DECF f,d
parâmetro f.

10 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Decrementa o valor de registrador do endereço f e se o


DECFSZ f,b
resultado for zero pula a próxima instrução.
Determina o desvio incondicional do programa em
GOTO k execução para o endereço k. O parâmetro k pode ser
especificado utilizando-se diretamente um valor numérico
do endereço ou então o relativo label.
INCF f,d Incrementa o conteúdo do registrador no endereço f.
Incrementa o valor do registrador f e se o resultado for
INCFSZ f,b
zero pula a próxima instrução.
Efetua o OR inclusive entre o valor contido no acumulador
IORLW k
W e o valor da constante k.
Efetua o OR inclusive entre o valor contido no acumulador
IORWF f,d W e o valor contido no registrador endereçado pelo
parâmetro f.
MOVLW k Passa ao acumulador W um valor constante k.
Copia o conteúdo do registrador endereçado pelo
MOVVF f,d
parâmetro f para o parâmetro de destino d.
Copia o conteúdo do registrador W no registrador de
MOVWF f
parâmetro f.
NOP Esta instrução não executa nenhuma operação mas é útil
para inserir atrasos de um ciclo de maquina ou mais.
Esta instrução deve ser colocada no término de cada
RETFIE subrotina de controle de interrupções para retornar o
controle ao programa principal.
Retorna o controle de uma rotina ao programa principal. A
RETLW k diferença desta em relação à instrução RETURN é que
retflw permite retornar, através do acumulador W, o valor
k ao programa principal.
Esta instrução deve ser inserida no termino de cada
RETURN
subrotina para retornar a execução ao programa principal.
Rotaciona o bit contido no registrador do endereço f para a
esquerda (ou seja do bit menos significativo para o mais
RLF f,b
significativo) passando pelo CARRY do registrador
STATUS.
Rotaciona o bit contido no registrador do endereço f para
direita (ou seja do bit mais significativo para o menos
RRF f,b
significativo) passando pelo bit CARRY do registrador
STATUS .
SLEEP Bloqueia a execução do programa em andamento e coloca
o PIC em standby.
Subtrai a constante k do valor memorizado no acumulador
SUBLW k
W.

11 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Esta instrução subtrai o valor contido no registrador W do


SUBWF f,d
valor contido no registrador endereçado pelo parâmetro f.
Troca o valor dos quatro bits mais significativo (D7-D4)
SWAPF f,d contido no registrador do endereço f com os quatro bits
menos significativo(D3-D0) do mesmo.
XORLW k Efetua o OR exclusivo entre o valor contido no
acumulador W e o valor constante k.
Efetua o OR exclusivo(XOR) entre o valor contido no
XORWF f,d acumulador W e o valor contido no registrador endereçado
pelo parâmetro f.

12 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

5 - Interrupções

O microcontrolador PIC 16F84A possui quatro fontes de interrupções: Interrupções externas no


pino RB0/INT; Interrupções de overflow TMR0; Interrupções por mudança de estado PORTB; E
interrupções de fim de escrita EEPROM.
Quando uma interrupção ocorre ela fica como pendente, e no próximo ciclo de busca o
processador ira tratar essa interrupção. Quando a interrupção é tratada, o processador suspende a
execução do programa que esta sendo executado e salva seu contexto. Depois o processador irá
armazenar no contador do programa o endereço inicial de uma rotinha de tratamento de interrupção.
O registrador de controle de interrupções (INTCON) grava todas as interrupções como bits de
flag, e também armazena o bit de habilitação de interrupção global (GIE). O GIE habilita ou desabilita
todas as interrupções de uma só vez, e ele é resetado no RESET.
Quando uma interrupção é tratada, o bit GIE é limpado para desabilitar qualquer interrupção
futura, o endereço de retorno é colocado numa STACK e o PROGRAM COUNTER (PC) é carregado
com 0004h. Para interrupções externas (RB0/INT or PORTB) a latência será três à quatro ciclos de
instrução. A latência depende quando a interrupção ocorre e é a mesma para um ou dois ciclos. A fonte
da interrupção pode ser determinada através dos bits de flag. O bit de flag deve ser limpado através de
software antes da reabilitação do “sistema” de interrupções para evitar infinitas interrupções. Uma
interrupt flag é um bit que indica qual foi o tipo de interrupção.
Portanto, o INTCON pode habilitar ou desabilitar os bits de interrupções independentemente (4
tipos de interrupções). A figura a seguir mostra como funciona o quadro de interrupções do PIC 16F84A

13 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Figure 4 - Lógica de interrupção

4.1 - Interrupções externas


Esse tipo de interrupção é gerado por um sinal externo conectado ao pino RB0/INT. Portando,
essa porta serve como entrada para um sinal que pode ser processado internamento do microcontrolador.
Interrupções externas no pino RB0/INT é elevado (de 0 para 1) quando o bit INTEDG é setado e baixa (
de 1 para 0) quando o bit INTEDG é limpado. Quando uma borda válida (subida ou descida) aparece no
pino RB0/INT, o bit INTF é setado. Esse tipo de interrupção pode ser desabilitada limpando-se o bit de
controle INTE. O bit de flag INTF deve ser limpo através de software via Rotina de Serviço de
Interrupção antes de habilitar essa interrupção. A interrupção externa pode ligar o processador do modo
“SLEEP” se o bit INTE for setado antes dele entrar no modo “SLEEP”. O status do bit GIE decide se as
conexões do processador para o vetor de interrupção também ligaram ou não.

4.2 - Interrupções de overflow TMR0


Esse tipo de interrupção ocorre quando o contador TMR0 estoura. Esse contador é geralmente
utilizado para contar o tempo, e ele pode ser incrementado tanto pelo clock como por um sinal externo.
Um overflow em TMR0 ira setar o bit T01F. A interrupção pode se habilitada ou desabilitada setando ou
limpando o bit de habilitação T01E.

14 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

4.3 - Interrupções por mudança de estado PORTB


Essa interrupção acontece na borda de subida e descida, o seja, na mudança de estado.
Geralmente é utilizado para criar sincronismo com a rede elétrica (50 Hz ou 60 Hz). A interrupção pode
habilitar ou desabilitar setando o bit de habilitação RBIE.

4.4 - Interrupções de fim de escrita EEPROM


Esse tipo de interrupção é utilizado para sinalização de fim de escrita de um programa na
memoria EEPROM do microcontrolador PIC. Devido o tempo de escrita na EEPROM ser muito longo,
esse método é muito importante para evitar erros na escritas de programas no PIC. Essa interrupção
pode ser habilitar ou desabilitada setando ou limpando o bit de habilitação EEIE.

15 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Parte 2 – Acesso à memória cache

1 – Análise das configurações da cache


 
Cada “word” na arquitetura computacional estudada representa 1 byte, que por sua vez é o
mesmo que 8 bits. Portanto, temos que:
1 ���� = 8 ����
A memória cache é representada de um conjunto que espaços que nós chamamos cada um desses
espaços como uma linha de uma pilha. Cada linha da memoria cache contem um campo para o
endereço “tag” e outro campo para o dado em si. O dado armazenado na memória cache é
geralmente um bloco de vários endereços, e não apenas um endereço. Sendo assim, cada linha da
cache pode armazenar um bloco de n “words”. Para sabermos quantas linhas uma memória cache
possui, basta dividir o número total de “words” pelo número de “words” que cada linha armazena.
Portanto, temos que:
����������
����ℎ�� =
�������ℎ�
A memoria principal armazena apenas uma “word” de 8 bits em cada endereço dela. No
mapeamento direto, nos temos que o a quantidade de “linhas” da memoria principal é muito maior
que a quantidade de linhas da memoria cache. O nosso problema consistia em uma memória
principal de 1024 posições e uma memória cache que variava segundo os casos descritos a seguir.

1.1 Caso 1: Cache com 128 words


Nesse caso, a memória cache é composta por 128 “words”.
Tamanho da memória cache em bits:
1 ���� = 8 ����  ∴ 128 ����� = 8 ∗ 128 ����  → ���� ����
Quantidade de linhas:
Caso A: Linha com 4 words
���������� 128
����ℎ�� = = = �� ������
�������ℎ� 4

16 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Tamanho do endereço das “words” em bits:


2!"#$% = �������çõ��
2!"#$% = 4 �����
����� = � ����
Logo, para acessar uma “word” em uma linha da cache com 4 “words” por bloco, se faz
necessário um endereço de 2 bits para diferenciar a “word” nessa linha.

Analisando o mapeamento da memória principal para esse caso, veremos que cada 4 endereços
da memória principal representa um bloco, que será armazenada em uma linha da memória cache.
Os endereços 0!" ao 3!" serão colocados na linha 0!" da memoria cache, já que ela comporta um
bloco de 4 “words”. Quando chegar no endereço 127!" , ele armazena esse endereço na ultima
posição da memória cache, a posição 31!" . A memória cache pode armazenar até 32 blocos
simultâneos, logo o próximo endereço da memoria principal será armazenado na posição 0!" da
cache. Caso já haja um outro bloco nessa linha da cache, ele será removido e colocado o novo bloco
atualizando a respectiva “tag”. Logo, a linha 0! da memória cache armazena um conjunto
predefinido de possíveis “tags” da memória principal (a “tag” da cache é igual a “tag” da memória
principal). Para esse caso, a representação do endereço da “word” será de 2 bits, já que são 4
“words” por bloco. Logo, a memória cache vai endereçar cada “word” a partir da do endereço de
dois bits reservado para o campo “word”. Vale salientar, que toda essa sequencia de tag, endereço da
“word” e mapeamento da memória principal na cache é obtida do endereço completo de um
elemento na memoria principal.

Caso B: Linha com 8 words


���������� 128
����ℎ�� = = = �� ������
�������ℎ� 8
Tamanho do endereço das “words” em bits:
2!"#$% = �������çõ��
2!"#$% = 8 �����
����� = � ����
Logo, para acessar uma “word” em uma linha da cache com 8 “words” por bloco, se faz
necessário um endereço de 3 bits para diferenciar a “word” nessa linha.

17 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo
a análise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.
Caso C: Linha com 16 words
���������� 128
����ℎ�� = = = � ������
�������ℎ� 16
Tamanho do endereço das “words” em bits:
2!"#$% = �������çõ��
2!"#$% = 16 �����
����� = � ����
Logo, para acessar uma “word” em uma linha da cache com 16 “words” por bloco, se faz
necessário um endereço de 4 bits para diferenciar a “word” nessa linha.

Caso A: Linha com 32 words


���������� 128
����ℎ�� = = = � ������
�������ℎ� 32

Tamanho do endereço das “words” em bits:


2!"#$% = �������çõ��
2!"#$% = 32 �����
����� = � ����
Logo, para acessar uma “word” em uma linha da cache com 32 “words” por bloco, se faz
necessário um endereço de 5 bits para diferenciar a “word” nessa linha.

1.2 Caso 2: Cache com 256 words


Nesse caso, a memória cache é composta por 256 “words”.
Tamanho da memória cache em bits:
1 ���� = 8 ����  ∴ 128 ����� = 8 ∗ 256 ����  → ���� ����
Quantidade de linhas:
Caso A: Linha com 4 words

18 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

���������� 256
����ℎ�� = = = �� ������
�������ℎ� 4
O tamanho do endereço das “words” em bits segue o mesmo raciocínio da cache acima de 128
words com 4 words por linha. Logo, para acessar uma “word” em uma linha da cache com 4
“words” por bloco, se faz necessário um endereço de 2 bits para diferenciar a “word” nessa linha.
As configurações seguintes segue o mesmo raciocínio aplicado na cache de 128 words. 
����� = � ����

Analisando o mapeamento da memória principal para esse caso, veremos que cada 4 endereços
da memória principal representa um bloco, que será armazenada em uma linha da memória cache.
Os endereços 0!" ao 3!" serão colocados na linha 0!" da memoria cache, já que ela comporta um
bloco de 4 “words”. Quando chegar no endereço 255!" , ele armazena esse endereço na ultima
posição da memória cache, a posição 63!" . A memória cache pode armazenar até 64 blocos
simultâneos, logo o próximo endereço da memoria principal será armazenado na posição 0!" da
cache. Caso já haja um outro bloco nessa linha da cache, ele será removido e colocado o novo bloco,
atualizando a respectiva “tag”. Logo, a linha 0! da memória cache armazena um conjunto
predefinido de possíveis “tags” da memória principal (a “tag” da cache é igual a “tag” da memória
principal). Para esse caso, a representação do endereço da “word” será de 2 bits, já que são 4
“words” por bloco. Logo, a memória cache vai endereçar cada “word” a partir do endereço de dois
bits reservado para o campo “word”. Vale salientar, que toda essa sequencia de tag, endereço da
“word” e mapeamento da memória principal na cache é obtida do endereço completo de um
elemento na memoria principal.

Caso B: Linha com 8 words


���������� 256
����ℎ�� = = = �� ������
�������ℎ� 8
����� = � ����
Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo
a analise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.
Caso C: Linha com 16 words
���������� 256
����ℎ�� = = = �� ������
�������ℎ� 16

19 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

����� = � ����

Caso A: Linha com 32 words


���������� 256
����ℎ�� = = = � ������
�������ℎ� 32
����� = � ����

1.3 Caso 3: Cache com 512 words


Nesse caso, a memória cache é composta por 512 “words”.
Tamanho da memória cache em bits:
1 ���� = 8 ����  ∴ 128 ����� = 8 ∗ 512 ����  → ���� ����
Quantidade de linhas:
Caso A: Linha com 4 words
���������� 512
����ℎ�� = = = ��� ������
�������ℎ� 4
����� = � ����

O mapeamento da memória cache da memória principal será análogo ao descrito no caso 2,


mudando apenas a quantidade de linhas da cache.

Caso B: Linha com 8 words


���������� 512
����ℎ�� = = = �� ������
�������ℎ� 8
����� = � ����

Para esse caso e os demais casos, o mapeamento na da cache na memória principal será análogo a
analise descrita acima mudando o tamanho do bloco e a quantidade de linhas da cache.
Caso C: Linha com 16 words
���������� 512
����ℎ�� = = = �� ������
�������ℎ� 16
����� = � ����

20 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Caso A: Linha com 32 words


���������� 512
����ℎ�� = = = �� ������
�������ℎ� 32
����� = � ����

2 – Analise dos resultados


Foi criado um programa usando a linguagem C++ que faz a simulação de acesso a memoria
cache. Os parâmetros da memoria principal do nosso problema fora inseridos no programa, que é de
1024 posições. Foi criado métodos para automatizar o processo de acesso a memoria cache e cálculo
da taxa de falhas de acesso para cada configuração de cache descrita no problema.
A saída do nosso programa é representado na figura 5 a seguir.

 
Figure 5 - Saída do programa

A partir dos resultados apresentados acima foi montado uma tabela com a taxa de falha de acesso
da memória cache para cada configuração estão descrito na tabela seguir.

21 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Tabela 4 - Taxa de falhas de acesso

Tamanho da  Words por  Quantidade de  Quantidade de  Percentual de 


Cache  Linha  Acessos  Falhas  Falhas 
4  10000  8681  86.81% 
8  10000  8788  87.88% 
128 
16  10000  8729  87.29% 
32  10000  8748  87.48% 
4  10000  7488  74.88% 
8  10000  7495  74.95% 
256 
16  10000  7500  75.00% 
32  10000  7475  74.75% 
4  10000  5067  50.67% 
8  10000  4980  49.80% 
512 
16  10000  5012  50.12% 
32  10000  5020  50.20% 
 
 
 
O gráfico 1 abaixo representa a falhas de acesso de uma memoria cache de 128 palavras com
quatro diferentes configurações de linhas: linha com 4 “words”; linha com 8 “words”; linha com 16
“words”; e linha com 32 “words”.

 
Gráfico 1 - Erro de acesso cache de 128 words

22 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

 
 
Podemos perceber que o efeito de mudança de words por linha na cache tem nenhum ou
pouquíssimo efeito na taxa de falhas de acesso da memoria. Portanto, concluímos que o tamanho
do bloco da cache (quantidade de words por linha) não tem relação direta na taxa de falhas de
acessos da cache.
Quando analisamos o gráfico 2 a seguir, que estão todas as configurações de cache possíveis no
problema, podemos concluir que o único parâmetro que contribuirá diretamente para a diminuição
ou aumento nas falhas de acesso será o tamanho da memoria cache, que pode ser medida em
“words” ou bytes, sendo cada “word” um byte de memoria para essa arquitetura especifica.

 
Gráfico 2 - Falhas de acesso para varias configurações de cache

No gráfico 2, podemos perceber que quando aumentamos o tamanho da memória cache, as falhas
de acessos também diminuem. Isso condiz com a realidade pois quando aumentamos o tamanho da
cache, adicionaremos mais linhas a ela, e consequentemente, mais endereços da memoria principal.
Portando a relação de falhas de acesso com aumento da memória cache é inversamente proporcional.

23 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

No gráfico abaixo estão esboçados os acertos para as diferentes configuraçōes de memória cache.

Gráfico 3 - Acertos de Acesso

Podemos concluir também que quanto maior o tamanho da cache, mais acertos de acessos ela
terá, e melhor sera o desempelho do conjuto memória principal e cache. Entretando, existe um limite de
temanho máximo de memória cache que podemos usar de forma que para valores de cache maiores que
esse tamanho máximo, a taxa de acertos sera constante.

24 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

3 – Algoritmo

// Created by Jaime Dantas on 2015-09-28.


// Copyright © 2015 Jaime Dantas. All rights reserved.
// Programa de Acesso a Memoria Cache em Linguagem C++

#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

//funcao de decodificacao de enderecos da memoria

void decodificadorMemoria(int address, int *TAG, int *linha, int nWords_Cache, int
nWords_por_Linha){
unsigned int aux;//essa variavel vai servir como temporaria para manoseio na funcao

/*OBS: o nWordsCache eh o tamanho da cache em words, ja o nWords_por_Linha e a quantidade


de words que cada linha da cache pode armazenar*/

//manipulacao de linha
aux = address & (nWords_Cache - nWords_por_Linha);//pega a posicao do dado armazenado na
linha da cache (Observe que cada linha da cache pode ter uma ou mais word)
*linha = aux >> (int) log2(nWords_por_Linha);//pega a linha da cache para depois fazer o
deslocamento (ele ja converte para inteiro)

//manipulacao de tag
aux = address & (1024 - nWords_Cache);// **a memoria principal tem 1k**
*TAG = aux >> (int) log2(nWords_Cache);//pega a TAG fa memoria cache e depois faz o
deslocamento (ele ja converte para inteiro)

//funcao de busca na memoria para TODOS os cados passados pelo usuario


double buscaMemoria(int nWords_Cache, int addresses[], int nWords_por_Linha){
/*OBS: o nWordsCache eh o tamanho da cache em words, ja o nWords_por_Linha e a quantidade
de words que cada linha da cache pode armazenar, e o addresses sao TODOS os enderecos passado
pelo usuario que estao sendo ultilizados na consulta*/

int nLinhas, TAG, linha, n;


int address_analizado, TAG_analizada, linha_analizada;//sao para percorrer todos os
enderecos, funcionam como variaveis auxiliares temporarias.

//variaveis para fazer as estatisticas de falhas


long int contador;//contador de acessos
long int nFalhas;//contador de numero de falhas
double taxaErro_de_Acesso;// vai se o nFalhas/contador
//inicializacao de variaveis pra nao pegar lixo
nFalhas = 0;
contador = 0;
n=0;

nLinhas = nWords_Cache/nWords_por_Linha;//calcula o total de linhas da memoria cache

int validade_cache[nLinhas], tag_cache[nLinhas];//eses velores verificam a validade e a


tag da cache para cada acesso.

25 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

//inicializacao do vetor de validade da cache: ele vai comecar com tudo zero, pois
inicialmente a cache esta totalmente vazia

while (n<nLinhas) {
validade_cache[n] = 0;
n++;
}

for (int i=0; i<10000; i++) {//agora ele vai percorrer todas as 10000 enderecos passado
pelo usuario
address_analizado = addresses[i];//joga o "i" endereco para ser analizado
contador = i+1;//pega quantos lacos o for executou +1
decodificadorMemoria(address_analizado, &TAG, &linha, nWords_Cache,
nWords_por_Linha);
//agora a tag e linha ja estao disponiveis para analise
TAG_analizada = TAG;//para analise
linha_analizada = linha;//para analise

//analise para saber se a linha eh valida


for (int i=0; i<nLinhas; i++) {
if (validade_cache[linha_analizada] == 0) {//portanto nao encontrou essa linha,
eh uma falha de acesso
nFalhas = nFalhas + 1;
validade_cache[linha_analizada] = 1; //pois agora essa posicao da memoria foi
trazida para memoria cache
tag_cache[linha_analizada] = TAG_analizada;//atualiza a nova tag da cache
traz o dado da RAM para a cache
}
else {

if (tag_cache[linha_analizada] != TAG_analizada ){//portanto tambem eh uma falha


ja q o endereco que esta na cache eh diferente do pedido
nFalhas = nFalhas + 1;
tag_cache[linha_analizada] = TAG_analizada;//atualiza a nova tag da cache e
traz o dado da RAM para a cache
}
}
}
}
//calculos estatisticos:

taxaErro_de_Acesso = (double) nFalhas/ (double) contador;

return taxaErro_de_Acesso;

int main(int argc, const char * argv[]) {


//todos os enderecos passados pelo usuario
int endereco[] = {359, 966, 105, 115, 81, 255, 74, 236, 809, 205, 186, 939, 498, 763, 483,
326, 124, 706, 84, 1016, 795, 488, 487, 909, 886, 346, 302, 611, 563, 927, 201, 922, 870,
306, 13, 951, 561, 88, 163, 346, 293, 349, 261, 791, 88, 745, 94, 212, 427, 178, 205, 198,
667, 692, 84, 529, 14, 386, 116, 577, 289, 317, 476, 135, 624, 489, 62, 161, 577, 225, 508,
871, 574, 769, 638, 663, 490, 732, 875, 918, 911, 56, 92, 554, 748, 176, 59, 763, 562, 175,
316, 852, 492, 792, 987, 92, 258, 26, 254, 835, 251, 762, 682, 826, 507, 297, 465, 998, 5,
316, 892, 916, 373, 984, 446, 97, 137, 505, 860, 699, 680, 153, 527, 149, 945, 491, 241, 179,

26 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

517, 495, 1015, 768, 233, 673, 570, 741, 970, 11, 715, 976, 328, 583, 868, 701, 543, 291,
798, 680, 796, 635, 356, 453, 788, 883, 602, 709, 350, 843, 889, 867, 315, 880, 612, 548,
529, 158, 265, 476, 170, 980, 428, 498, 539, 272, 175, 59, 563, 973, 739, 336, 584, 71, 789,
348, 955, 367, 34, 281, 186, 923, 125, 501, 779, 737, 26, 284, 895, 291, 760, 41, 248, 164,
539, 787, 437, 714, 846, 1000, 664, 562, 312, 224, 633, 77, 573, 564, 444, 607, 846, 631,
506, 971, 108, 261, 684, 134, 545, 555, 426, 282, 597, 674, 446, 112, 437, 883, 827, 260,
860, 467, 822, 148, 691, 431, 226, 240, 996, 670, 847, 818, 277, 329, 765, 386, 590, 425,
520, 112, 980, 946, 394, 553, 596, 840, 666, 10, 700, 469, 270, 536, 936, 68, 684, 603, 499,
910, 844, 471, 557, 667, 265, 834, 997, 6, 196, 563, 431, 717, 675, 388, 639, 45, 941, 212,
886, 583, 222, 562, 28, 492, 74, 964, 560, 758, 544, 35, 645, 364, 507, 178, 7, 772, 1012,
1004, 779, 185, 544, 186, 902, 195, 574, 517, 241, 492, 729, 103, 51, 951, 665, 80, 419, 739,
20, 979, 473, 564, 1015, 94, 928, 498, 272, 936, 246, 261, 916, 1, 446, 436, 188, 324, 632,
762, 841, 873, 230, 547, 976, 282, 474, 617, 362, 894, 332, 382, 849, 805, 947, 840, 900,
851, 314, 148, 763, 561, 409, 656, 562, 855, 68, 750, 155, 700, 489, 997, 549, 719, 520, 501,
1001, 994, 94, 339, 864, 426, 722, 690, 208, 645, 506, 84, 472, 821, 232, 212, 358, 642, 868,
920, 473, 936, 647, 629, 613, 112, 602, 138, 831, 98, 640, 809, 68, 734, 124, 933, 137, 846,
599, 345, 467, 81, 429, 940, 902, 661, 128, 236, 279, 996, 133, 753, 908, 780, 358, 497, 892,
960, 636, 699, 34, 252, 484, 102, 986, 609, 11, 99, 431, 610, 444, 899, 692, 873, 815, 570,
511, 943, 807, 790, 915, 940, 519, 799, 696, 877, 273, 564, 813, 909, 239, 847, 137, 724,
950, 99, 309, 961, 199, 740, 548, 643, 615, 216, 493, 406, 786, 1004, 325, 569, 770, 216,
485, 266, 1016, 157, 119, 265, 721, 933, 150, 961, 756, 287, 661, 682, 386, 970, 620, 585,
686, 144, 205, 278, 360, 698, 684, 122, 678, 1010, 692, 424, 202, 153, 690, 194, 311, 810,
459, 8, 719, 609, 969, 451, 896, 606, 110, 259, 552, 730, 844, 215, 874, 25, 493, 210, 723,
153, 332, 377, 139, 0, 802, 342, 154, 468, 536, 465, 254, 996, 473, 973, 581, 419, 401, 454,
1, 511, 713, 554, 217, 533, 769, 67, 559, 238, 277, 258, 391, 609, 636, 531, 610, 414, 873,
764, 882, 385, 205, 113, 357, 678, 62, 939, 73, 463, 369, 75, 974, 58, 629, 167, 591, 374,
234, 126, 612, 511, 385, 1003, 97, 1021, 510, 707, 411, 359, 447, 269, 745, 652, 382, 78,
306, 445, 1017, 380, 908, 362, 455, 859, 420, 60, 2, 1012, 434, 237, 114, 22, 748, 499, 1,
845, 496, 512, 528, 907, 871, 975, 153, 592, 603, 535, 671, 910, 980, 664, 266, 865, 3, 721,
700, 423, 781, 702, 411, 191, 939, 526, 213, 664, 1, 214, 485, 498, 726, 1014, 381, 574, 965,
534, 142, 545, 46, 813, 431, 2, 454, 697, 867, 457, 394, 543, 880, 151, 222, 268, 342, 137,
794, 555, 801, 795, 769, 263, 269, 472, 253, 651, 22, 194, 161, 164, 739, 207, 978, 146, 210,
408, 843, 53, 865, 213, 597, 721, 364, 819, 989, 706, 956, 759, 237, 734, 531, 1007, 997,
800, 455, 226, 427, 477, 420, 589, 641, 136, 796, 595, 282, 1006, 1003, 102, 36, 844, 315,
633, 542, 680, 428, 507, 362, 360, 243, 600, 70, 774, 583, 43, 550, 14, 269, 978, 491, 690,
543, 108, 826, 315, 704, 84, 298, 683, 186, 334, 504, 502, 967, 22, 158, 371, 529, 520, 731,
772, 96, 802, 522, 679, 845, 49, 693, 91, 3, 160, 781, 546, 269, 583, 861, 973, 667, 135,
632, 854, 469, 112, 332, 412, 134, 490, 783, 664, 1010, 491, 412, 83, 269, 935, 762, 90, 984,
432, 181, 987, 592, 962, 509, 861, 521, 346, 810, 165, 482, 419, 1019, 951, 531, 327, 340,
666, 817, 99, 306, 803, 590, 718, 886, 859, 629, 625, 950, 589, 33, 107, 552, 625, 46, 37,
463, 567, 384, 249, 732, 866, 668, 727, 793, 176, 30, 109, 842, 847, 209, 124, 627, 799, 842,
489, 635, 448, 90, 561, 13, 123, 668, 566, 749, 714, 603, 188, 258, 987, 437, 990, 829, 82,
694, 599, 258, 724, 708, 76, 548, 917, 200, 151, 693, 18, 640, 304, 466, 731, 865, 480, 854,
509, 22, 579, 200, 625, 767, 458, 589, 181, 424, 394, 263, 94, 993, 521, 819, 678, 597, 343,
571, 797, 494, 240, 815, 110, 544, 258, 841, 385, 738, 672, 895, 760, 227, 71, 361, 995, 529,
950, 152, 953, 321, 415, 24, 290, 936, 843, 968, 509, 162, 516, 282, 656, 756, 73, 766, 277,
331, 584, 662, 45, 232, 533, 805, 459, 604, 143, 430, 109, 69, 582, 39, 390, 997, 63, 681,
909, 906, 625, 394, 44, 117, 676, 700, 874, 750, 442, 127, 57, 2, 789, 103, 234, 299, 908,
694, 903, 27, 100, 1013, 97, 683, 28, 487, 656, 91, 144, 542, 997, 770, 936, 17, 887, 589,
717, 737, 315, 135, 864, 372, 138, 630, 475, 372, 929, 360, 42, 808, 387, 143, 797, 484, 826,
825, 972, 458, 916, 92, 1000, 889, 862, 913, 906, 726, 478, 599, 439, 793, 735, 280, 141,
873, 910, 617, 221, 815, 977, 264, 599, 340, 407, 373, 825, 209, 174, 773, 667, 67, 865, 644,
956, 704, 533, 839, 406, 1011, 414, 845, 780, 125, 101, 921, 998, 1011, 514, 196, 802, 467,
460, 378, 808, 867, 751, 609, 52, 925, 358, 719, 992, 199, 339, 925, 903, 872, 740, 285, 859,
130, 107, 615, 256, 208, 513, 230, 196, 3, 426, 998, 471, 886, 352, 255, 729, 79, 864, 781,
1005, 198, 477, 973, 397, 816, 874, 277, 665, 590, 562, 500, 721, 669, 92, 977, 878, 605,
183, 50, 608, 610, 24, 55, 472, 377, 310, 178, 456, 150, 959, 437, 348, 412, 387, 746, 205,
237, 1023, 870, 828, 561, 346, 525, 207, 438, 478, 61, 19, 661, 111, 628, 247, 135, 683, 720,
512, 994, 898, 969, 120, 833, 382, 469, 222, 769, 191, 427, 1007, 190, 273, 811, 751, 619,
312, 958, 34, 790, 1019, 53, 427, 106, 681, 675, 242, 341, 371, 754, 311, 245, 699, 431, 54,
58, 900, 276, 827, 67, 703, 810, 257, 976, 597, 1009, 572, 909, 943, 606, 675, 939, 659, 79,

27 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

21, 317, 754, 263, 658, 101, 1018, 969, 346, 693, 376, 400, 751, 253, 677, 555, 320, 356,
341, 578, 309, 939, 563, 881, 824, 482, 463, 476, 397, 98, 555, 419, 415, 285, 682, 49, 386,
676, 1018, 732, 346, 371, 108, 73, 624, 785, 628, 944, 118, 970, 498, 427, 885, 37, 284, 685,
520, 747, 137, 917, 845, 692, 312, 237, 977, 995, 286, 339, 647, 281, 47, 993, 652, 156, 43,
252, 941, 671, 172, 35, 617, 671, 462, 478, 708, 746, 140, 204, 469, 277, 98, 291, 970, 410,
528, 923, 381, 814, 239, 5, 71, 286, 998, 723, 442, 17, 975, 360, 689, 124, 395, 282, 795,
858, 761, 479, 580, 901, 684, 26, 154, 782, 317, 100, 168, 845, 0, 550, 635, 239, 555, 707,
525, 529, 406, 968, 547, 358, 304, 212, 482, 699, 494, 253, 533, 231, 732, 90, 108, 392, 116,
263, 150, 433, 363, 319, 254, 363, 869, 889, 602, 400, 572, 104, 929, 979, 48, 452, 313, 352,
664, 795, 27, 135, 24, 561, 366, 756, 651, 475, 125, 767, 738, 275, 176, 77, 594, 430, 441,
439, 295, 19, 839, 868, 123, 745, 823, 171, 173, 112, 523, 838, 907, 551, 973, 931, 88, 315,
663, 739, 790, 788, 482, 504, 40, 658, 582, 634, 64, 1023, 50, 359, 18, 889, 203, 142, 610,
2, 313, 784, 114, 837, 598, 1021, 364, 547, 928, 452, 862, 568, 167, 629, 332, 649, 109, 372,
283, 691, 1007, 347, 690, 33, 706, 709, 922, 910, 851, 509, 912, 140, 269, 3, 977, 867, 0,
317, 390, 929, 769, 228, 473, 936, 857, 805, 561, 967, 154, 844, 634, 137, 167, 301, 170,
874, 1010, 68, 760, 837, 577, 648, 977, 846, 651, 931, 689, 652, 224, 55, 557, 994, 284, 6,
906, 117, 811, 444, 60, 965, 264, 695, 78, 432, 996, 248, 282, 982, 317, 18, 795, 894, 666,
748, 717, 294, 655, 382, 946, 880, 438, 479, 850, 722, 485, 732, 839, 272, 152, 900, 214,
417, 571, 292, 849, 543, 541, 107, 501, 858, 125, 272, 728, 791, 1020, 421, 61, 652, 804,
1007, 508, 218, 462, 334, 940, 947, 42, 755, 196, 195, 631, 410, 612, 178, 702, 437, 721,
219, 544, 198, 53, 669, 470, 782, 436, 467, 179, 498, 95, 983, 481, 603, 177, 944, 937, 93,
867, 979, 849, 39, 150, 456, 449, 762, 635, 128, 175, 332, 347, 719, 531, 401, 364, 1001,
159, 801, 444, 338, 275, 539, 298, 756, 118, 475, 676, 31, 569, 520, 1011, 394, 559, 137,
850, 1009, 900, 461, 113, 51, 794, 460, 771, 301, 861, 111, 278, 1020, 912, 723, 335, 163,
238, 633, 920, 357, 84, 572, 388, 653, 68, 375, 23, 628, 513, 874, 613, 389, 311, 726, 440,
81, 162, 187, 382, 0, 299, 661, 1020, 187, 360, 331, 351, 598, 964, 247, 955, 25, 819, 320,
678, 888, 695, 702, 492, 184, 552, 81, 573, 863, 807, 1014, 945, 969, 177, 303, 969, 476,
964, 966, 664, 300, 273, 1015, 899, 214, 238, 830, 239, 33, 126, 917, 921, 822, 595, 389,
1006, 123, 470, 556, 987, 253, 546, 908, 199, 723, 187, 144, 176, 128, 86, 840, 428, 360,
831, 303, 574, 45, 110, 813, 78, 236, 706, 1000, 34, 278, 365, 17, 401, 836, 573, 364, 65,
95, 248, 264, 818, 436, 409, 994, 564, 495, 810, 992, 855, 617, 272, 405, 662, 382, 194, 741,
618, 901, 717, 653, 155, 58, 670, 556, 894, 219, 921, 960, 314, 145, 200, 108, 581, 609, 79,
121, 81, 889, 90, 936, 483, 362, 318, 121, 744, 512, 862, 338, 389, 555, 991, 544, 614, 637,
77, 484, 856, 998, 420, 146, 119, 621, 255, 701, 206, 334, 822, 287, 199, 912, 200, 682, 250,
518, 804, 994, 6, 642, 309, 396, 174, 276, 940, 788, 914, 1017, 248, 746, 991, 669, 893, 87,
266, 124, 788, 472, 458, 586, 760, 657, 475, 960, 316, 725, 454, 96, 696, 460, 738, 1005,
856, 912, 257, 773, 676, 147, 766, 925, 894, 734, 570, 763, 821, 836, 887, 585, 284, 321,
147, 20, 978, 622, 980, 270, 324, 410, 366, 1020, 871, 81, 1001, 703, 993, 234, 452, 646,
382, 195, 547, 252, 929, 93, 1015, 726, 929, 878, 287, 189, 175, 434, 210, 129, 33, 166, 400,
357, 577, 766, 353, 424, 847, 330, 103, 817, 564, 556, 439, 946, 751, 986, 174, 656, 55, 165,
358, 984, 19, 645, 149, 194, 55, 359, 324, 88, 526, 724, 445, 79, 466, 798, 503, 290, 104,
606, 83, 669, 138, 522, 591, 889, 484, 766, 521, 539, 931, 879, 499, 951, 500, 648, 121, 556,
1008, 445, 644, 510, 145, 66, 589, 612, 864, 68, 902, 969, 674, 985, 614, 813, 483, 181, 678,
967, 947, 176, 482, 855, 31, 981, 782, 532, 605, 903, 64, 589, 325, 708, 75, 470, 774, 664,
58, 615, 732, 960, 560, 383, 921, 150, 172, 380, 331, 850, 323, 255, 2, 805, 86, 34, 762,
868, 566, 344, 747, 630, 933, 48, 314, 1009, 519, 65, 649, 577, 680, 358, 514, 216, 741, 411,
366, 913, 792, 697, 739, 91, 952, 742, 897, 14, 776, 635, 882, 318, 979, 606, 948, 889, 654,
238, 874, 149, 303, 499, 727, 983, 857, 217, 175, 574, 628, 541, 463, 396, 215, 179, 488,
143, 921, 361, 158, 673, 996, 16, 991, 952, 622, 915, 817, 253, 129, 667, 402, 433, 142, 105,
392, 1000, 322, 568, 550, 951, 85, 1014, 323, 300, 169, 811, 444, 66, 148, 602, 739, 121,
618, 706, 49, 217, 597, 866, 470, 726, 509, 872, 135, 651, 978, 528, 627, 276, 72, 154, 203,
157, 144, 527, 458, 313, 314, 902, 379, 463, 480, 94, 584, 74, 800, 633, 291, 373, 475, 761,
75, 984, 610, 211, 611, 564, 739, 215, 840, 811, 369, 20, 968, 513, 547, 402, 826, 861, 280,
181, 300, 760, 275, 884, 835, 51, 493, 102, 424, 968, 864, 499, 928, 450, 710, 516, 1014,
425, 731, 830, 212, 76, 850, 157, 589, 373, 559, 391, 211, 840, 572, 511, 576, 847, 372, 387,
898, 865, 490, 298, 810, 330, 797, 714, 780, 484, 206, 770, 909, 937, 576, 98, 1013, 403,
255, 578, 776, 814, 969, 987, 630, 517, 475, 183, 340, 847, 570, 214, 688, 36, 512, 474, 366,
286, 165, 122, 770, 371, 892, 655, 285, 445, 753, 274, 848, 1008, 853, 600, 799, 798, 564,
405, 292, 15, 588, 632, 862, 135, 847, 526, 171, 335, 1001, 538, 621, 142, 660, 367, 513,
529, 1023, 798, 974, 752, 49, 798, 737, 902, 374, 512, 676, 938, 917, 968, 953, 482, 577,
791, 617, 400, 294, 788, 735, 271, 302, 333, 413, 963, 700, 926, 468, 699, 701, 418, 428,

28 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

750, 192, 141, 628, 566, 653, 280, 481, 546, 225, 410, 4, 802, 178, 621, 178, 472, 386, 913,
743, 688, 222, 132, 627, 923, 34, 71, 598, 735, 489, 2, 461, 681, 143, 65, 224, 796, 346,
705, 319, 571, 91, 323, 349, 269, 945, 527, 741, 307, 416, 460, 995, 639, 592, 599, 538, 627,
670, 112, 338, 136, 115, 800, 817, 258, 865, 17, 31, 187, 722, 350, 758, 814, 673, 83, 59,
594, 610, 801, 901, 3, 237, 873, 642, 830, 448, 156, 433, 94, 268, 771, 230, 383, 547, 24,
642, 389, 41, 673, 576, 764, 1023, 311, 554, 672, 394, 613, 243, 1005, 390, 120, 1008, 628,
993, 626, 434, 417, 782, 867, 512, 26, 614, 742, 410, 138, 766, 28, 527, 808, 701, 79, 548,
700, 390, 78, 348, 785, 691, 591, 766, 58, 712, 750, 686, 681, 352, 96, 75, 110, 963, 587,
136, 553, 305, 546, 691, 48, 574, 194, 856, 251, 274, 380, 951, 664, 458, 276, 425, 125, 867,
167, 183, 555, 917, 869, 213, 245, 965, 288, 355, 904, 875, 492, 434, 156, 14, 101, 204, 589,
296, 36, 840, 570, 416, 768, 210, 874, 20, 636, 1000, 887, 803, 159, 419, 697, 5, 632, 942,
970, 920, 274, 851, 771, 766, 261, 927, 780, 362, 108, 345, 658, 144, 162, 204, 561, 930,
415, 411, 950, 27, 387, 813, 830, 547, 208, 503, 552, 840, 422, 498, 736, 696, 325, 483, 438,
586, 387, 194, 949, 495, 540, 583, 639, 702, 788, 176, 608, 179, 588, 534, 206, 975, 323, 12,
498, 532, 516, 26, 348, 938, 525, 61, 610, 850, 544, 24, 413, 931, 218, 338, 402, 758, 921,
18, 436, 685, 194, 20, 864, 782, 554, 46, 734, 878, 59, 208, 386, 575, 235, 734, 489, 760,
795, 75, 586, 316, 99, 999, 223, 317, 313, 626, 52, 211, 644, 488, 896, 838, 509, 737, 597,
39, 783, 307, 917, 842, 515, 279, 393, 750, 1014, 882, 486, 785, 957, 49, 77, 32, 24, 301,
350, 338, 927, 402, 549, 547, 890, 421, 361, 375, 134, 958, 415, 918, 241, 308, 736, 757,
588, 106, 483, 578, 988, 970, 339, 922, 1019, 417, 954, 19, 718, 280, 357, 621, 682, 906,
144, 549, 304, 505, 924, 438, 440, 315, 332, 681, 624, 45, 414, 188, 151, 898, 766, 115, 844,
81, 13, 839, 498, 968, 858, 192, 224, 192, 813, 907, 74, 957, 432, 378, 439, 332, 817, 879,
648, 125, 536, 248, 170, 951, 436, 321, 825, 178, 437, 645, 259, 450, 460, 758, 394, 294,
950, 619, 486, 740, 502, 561, 673, 934, 939, 88, 242, 732, 967, 890, 858, 480, 114, 4, 407,
550, 326, 208, 728, 763, 853, 988, 189, 289, 722, 584, 583, 648, 179, 46, 364, 681, 607, 14,
591, 522, 102, 833, 231, 46, 700, 65, 526, 814, 69, 933, 341, 395, 117, 45, 134, 970, 9, 324,
235, 731, 908, 818, 356, 63, 864, 720, 744, 447, 734, 311, 970, 837, 120, 177, 883, 820, 242,
385, 611, 311, 294, 952, 707, 411, 997, 841, 357, 1007, 141, 592, 714, 25, 386, 46, 88, 227,
767, 832, 674, 477, 119, 620, 290, 240, 797, 149, 36, 15, 534, 647, 327, 828, 575, 10, 215,
549, 851, 572, 532, 993, 140, 222, 1018, 527, 269, 83, 754, 12, 915, 404, 489, 11, 1, 780,
251, 798, 929, 287, 814, 440, 935, 117, 244, 486, 127, 460, 11, 978, 8, 543, 947, 149, 766,
942, 676, 11, 1, 406, 23, 916, 810, 512, 927, 811, 268, 154, 586, 174, 442, 376, 614, 353,
493, 858, 839, 620, 294, 851, 574, 303, 370, 498, 452, 112, 416, 104, 123, 417, 510, 146,
309, 296, 659, 213, 84, 927, 367, 670, 77, 809, 22, 691, 138, 515, 526, 978, 111, 820, 805,
685, 99, 151, 159, 551, 264, 575, 655, 387, 992, 141, 534, 278, 438, 169, 491, 522, 72, 858,
168, 150, 644, 190, 841, 782, 705, 343, 736, 816, 140, 517, 477, 239, 669, 637, 791, 933,
188, 422, 296, 157, 564, 830, 435, 1002, 999, 926, 500, 48, 760, 668, 198, 380, 858, 15, 139,
539, 359, 875, 331, 499, 369, 808, 738, 14, 421, 505, 947, 610, 928, 219, 767, 468, 26, 178,
446, 1, 80, 946, 49, 840, 590, 247, 197, 424, 263, 336, 963, 622, 187, 270, 97, 556, 54, 835,
570, 476, 317, 493, 62, 221, 713, 829, 689, 739, 1007, 111, 740, 63, 33, 790, 903, 623, 13,
76, 23, 276, 412, 986, 898, 600, 232, 995, 132, 286, 807, 703, 762, 100, 172, 824, 321, 885,
629, 1010, 600, 612, 97, 317, 675, 130, 83, 555, 753, 96, 631, 776, 373, 20, 738, 247, 620,
970, 219, 752, 232, 2, 431, 995, 102, 604, 795, 423, 465, 401, 409, 42, 1013, 506, 359, 665,
636, 442, 196, 365, 538, 827, 117, 911, 847, 855, 135, 443, 801, 354, 172, 9, 356, 603, 1004,
458, 183, 776, 881, 649, 153, 266, 691, 142, 772, 26, 807, 384, 468, 1003, 749, 1006, 807,
866, 894, 630, 697, 5, 50, 474, 359, 222, 483, 715, 825, 464, 149, 1009, 216, 6, 634, 369,
272, 301, 511, 20, 327, 295, 404, 795, 274, 129, 777, 57, 995, 647, 688, 668, 652, 738, 118,
1011, 960, 601, 702, 761, 41, 851, 746, 257, 857, 356, 626, 105, 657, 114, 125, 984, 409,
529, 755, 683, 658, 509, 741, 629, 132, 405, 273, 785, 119, 391, 772, 55, 993, 451, 816, 10,
278, 539, 268, 112, 895, 894, 217, 529, 1008, 343, 489, 393, 872, 221, 53, 507, 730, 794,
112, 862, 175, 386, 623, 294, 777, 372, 349, 746, 823, 141, 757, 77, 680, 1, 189, 552, 895,
407, 57, 880, 750, 546, 249, 598, 767, 302, 81, 473, 72, 194, 312, 247, 580, 935, 541, 333,
283, 890, 56, 82, 8, 813, 160, 688, 814, 349, 216, 685, 756, 273, 541, 482, 820, 791, 57,
563, 69, 138, 13, 142, 332, 325, 389, 912, 236, 931, 222, 520, 797, 278, 602, 805, 67, 762,
470, 881, 88, 686, 542, 844, 960, 60, 303, 756, 851, 360, 295, 920, 498, 308, 38, 831, 633,
428, 719, 870, 335, 941, 366, 108, 195, 968, 914, 262, 707, 360, 119, 795, 22, 662, 615, 982,
722, 918, 714, 549, 254, 1010, 445, 753, 294, 484, 560, 928, 912, 255, 774, 223, 173, 116,
331, 368, 60, 221, 631, 767, 581, 750, 538, 604, 388, 130, 562, 86, 24, 253, 635, 279, 239,
57, 8, 533, 541, 568, 437, 429, 823, 187, 652, 996, 303, 983, 341, 364, 181, 972, 107, 762,
698, 646, 342, 63, 776, 905, 149, 800, 134, 785, 55, 373, 842, 63, 906, 359, 631, 320, 788,
431, 507, 416, 403, 811, 375, 744, 151, 556, 692, 258, 295, 367, 904, 637, 430, 656, 518,

29 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

579, 433, 652, 340, 488, 1, 158, 552, 908, 517, 159, 204, 281, 590, 711, 697, 994, 498, 49,
714, 649, 605, 383, 908, 900, 750, 788, 514, 156, 421, 8, 735, 854, 661, 52, 318, 662, 210,
870, 546, 728, 6, 750, 1009, 596, 438, 683, 566, 936, 732, 257, 562, 313, 640, 446, 190, 366,
210, 704, 522, 631, 712, 233, 461, 349, 285, 780, 1012, 496, 626, 534, 200, 632, 261, 185,
205, 699, 868, 771, 611, 576, 4, 149, 890, 644, 595, 56, 1010, 806, 760, 508, 413, 448, 742,
875, 798, 3, 631, 786, 499, 233, 296, 699, 866, 557, 885, 47, 232, 729, 818, 844, 282, 823,
993, 148, 443, 565, 204, 430, 347, 964, 938, 760, 388, 656, 611, 162, 660, 218, 948, 135,
452, 221, 835, 294, 778, 696, 341, 1011, 401, 135, 831, 683, 958, 800, 831, 378, 341, 11,
808, 688, 975, 722, 425, 340, 355, 12, 502, 1015, 231, 427, 126, 683, 648, 961, 977, 402,
633, 294, 389, 11, 429, 196, 694, 364, 997, 502, 742, 314, 513, 526, 1003, 465, 224, 404,
805, 579, 416, 283, 570, 647, 710, 697, 306, 334, 634, 259, 737, 244, 553, 102, 255, 983,
299, 949, 323, 272, 427, 41, 586, 941, 567, 565, 382, 791, 969, 163, 347, 362, 446, 917,
1009, 133, 590, 292, 467, 201, 551, 180, 445, 81, 283, 700, 40, 582, 625, 363, 854, 29, 404,
416, 970, 971, 982, 328, 738, 927, 491, 61, 265, 937, 979, 251, 46, 545, 543, 514, 746, 70,
694, 167, 151, 977, 867, 191, 535, 469, 554, 365, 498, 958, 782, 444, 905, 740, 772, 620,
643, 239, 681, 909, 152, 636, 136, 199, 158, 679, 713, 904, 749, 383, 48, 901, 337, 915, 68,
872, 360, 623, 214, 858, 557, 996, 278, 439, 712, 26, 35, 331, 265, 716, 216, 418, 329, 352,
617, 487, 7, 306, 367, 757, 689, 415, 634, 2, 307, 702, 875, 667, 301, 65, 502, 859, 37, 780,
274, 749, 807, 309, 56, 48, 1, 273, 466, 330, 625, 59, 817, 633, 365, 161, 366, 31, 576,
1000, 33, 883, 678, 908, 527, 980, 973, 5, 815, 1010, 785, 65, 735, 568, 374, 792, 617, 375,
41, 59, 706, 666, 119, 499, 275, 484, 660, 641, 515, 213, 617, 549, 72, 272, 433, 599, 228,
383, 604, 19, 369, 366, 84, 81, 934, 458, 873, 527, 833, 914, 587, 515, 556, 706, 1015, 832,
166, 651, 449, 682, 864, 43, 207, 937, 315, 640, 512, 543, 1023, 93, 562, 369, 459, 646, 450,
369, 80, 299, 897, 913, 189, 460, 405, 745, 142, 396, 553, 308, 23, 1003, 990, 888, 22, 173,
801, 337, 814, 289, 880, 813, 382, 418, 158, 841, 40, 608, 187, 120, 907, 60, 9, 72, 520,
414, 818, 662, 810, 347, 970, 834, 326, 937, 698, 348, 86, 475, 685, 900, 764, 541, 690, 123,
959, 848, 964, 999, 433, 127, 95, 316, 187, 105, 389, 707, 519, 183, 345, 306, 530, 292, 116,
857, 205, 814, 181, 291, 265, 867, 168, 5, 384, 858, 128, 320, 682, 69, 295, 91, 196, 391,
408, 384, 496, 797, 67, 1015, 980, 413, 297, 486, 705, 413, 319, 910, 203, 501, 177, 468,
344, 345, 474, 728, 179, 602, 24, 862, 671, 320, 953, 868, 711, 337, 228, 183, 110, 295, 174,
66, 708, 472, 553, 389, 885, 872, 275, 65, 349, 453, 533, 693, 798, 1007, 398, 978, 586, 422,
816, 233, 742, 745, 77, 429, 59, 305, 612, 169, 601, 787, 236, 285, 235, 789, 675, 96, 637,
950, 161, 987, 379, 695, 656, 154, 678, 30, 108, 240, 453, 924, 474, 171, 645, 551, 601, 704,
857, 189, 874, 434, 976, 86, 719, 187, 875, 370, 284, 488, 297, 445, 451, 676, 116, 84, 830,
795, 114, 938, 11, 567, 838, 485, 739, 460, 13, 316, 140, 870, 505, 1014, 280, 458, 76, 999,
645, 951, 346, 929, 416, 643, 351, 867, 295, 467, 951, 102, 238, 42, 16, 250, 609, 855, 735,
324, 291, 748, 640, 431, 594, 122, 422, 874, 580, 498, 850, 201, 426, 172, 107, 842, 815,
458, 685, 86, 925, 613, 188, 140, 655, 205, 390, 240, 36, 101, 565, 327, 850, 181, 758, 420,
303, 156, 271, 883, 655, 97, 61, 57, 269, 168, 899, 60, 626, 560, 146, 527, 149, 335, 667,
804, 540, 33, 21, 576, 135, 586, 903, 985, 767, 637, 381, 47, 794, 652, 930, 425, 749, 991,
482, 1018, 135, 357, 54, 761, 917, 201, 265, 43, 536, 932, 847, 52, 966, 868, 628, 77, 430,
507, 38, 174, 120, 419, 221, 914, 48, 127, 315, 797, 95, 797, 792, 230, 130, 846, 992, 24,
23, 233, 67, 559, 141, 914, 611, 83, 759, 215, 160, 165, 722, 198, 339, 843, 618, 560, 733,
666, 688, 25, 439, 783, 822, 207, 1013, 953, 30, 981, 977, 53, 190, 20, 613, 332, 934, 200,
415, 669, 416, 576, 835, 114, 774, 150, 957, 368, 711, 667, 10, 375, 692, 450, 134, 490, 657,
123, 419, 687, 81, 372, 741, 271, 392, 330, 603, 303, 530, 1019, 972, 946, 571, 783, 37, 321,
934, 994, 690, 621, 637, 700, 996, 305, 126, 106, 796, 784, 229, 191, 447, 310, 564, 164,
582, 956, 494, 161, 235, 1, 156, 184, 947, 727, 967, 984, 25, 877, 955, 715, 474, 568, 391,
446, 874, 518, 552, 646, 278, 782, 837, 725, 68, 377, 890, 650, 310, 360, 812, 545, 361, 968,
729, 285, 672, 673, 245, 697, 526, 176, 388, 1001, 745, 779, 423, 595, 273, 976, 217, 551,
734, 30, 253, 802, 408, 119, 429, 718, 479, 217, 239, 841, 161, 969, 102, 833, 618, 347, 506,
120, 524, 894, 97, 245, 650, 521, 840, 923, 473, 33, 451, 183, 63, 704, 985, 471, 823, 390,
165, 278, 607, 405, 95, 769, 350, 197, 578, 968, 545, 61, 64, 45, 955, 162, 290, 581, 683,
106, 481, 132, 139, 932, 315, 202, 612, 276, 674, 411, 667, 839, 689, 250, 220, 785, 1019,
570, 982, 574, 514, 503, 635, 579, 548, 566, 741, 838, 124, 400, 944, 605, 532, 59, 513, 847,
262, 101, 99, 936, 512, 766, 751, 177, 1017, 972, 962, 1012, 518, 921, 562, 9, 400, 173, 588,
949, 740, 305, 763, 864, 705, 684, 445, 213, 743, 958, 36, 1005, 35, 135, 917, 547, 902, 645,
724, 895, 593, 663, 883, 87, 560, 422, 96, 960, 595, 684, 885, 311, 989, 625, 151, 670, 285,
596, 883, 4, 530, 919, 1010, 565, 31, 903, 88, 933, 524, 813, 804, 93, 452, 663, 181, 1012,
61, 277, 948, 657, 962, 810, 968, 927, 411, 96, 574, 696, 692, 433, 700, 199, 329, 686, 764,
360, 566, 853, 269, 66, 642, 49, 160, 70, 712, 341, 58, 774, 618, 1006, 407, 556, 792, 351,

30 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

460, 179, 447, 10, 875, 116, 443, 552, 315, 772, 214, 55, 108, 780, 908, 377, 847, 526, 426,
1007, 596, 115, 324, 654, 889, 942, 637, 272, 475, 405, 623, 935, 585, 47, 945, 436, 163,
364, 988, 478, 113, 179, 533, 221, 959, 418, 599, 782, 944, 1, 765, 517, 116, 65, 147, 1005,
1008, 784, 253, 459, 166, 877, 370, 751, 924, 291, 163, 63, 655, 128, 541, 768, 307, 50, 990,
242, 468, 565, 1, 389, 566, 766, 906, 683, 832, 29, 664, 816, 814, 918, 251, 980, 771, 621,
707, 671, 912, 870, 734, 543, 998, 251, 288, 281, 301, 254, 524, 770, 819, 525, 135, 361,
267, 17, 20, 75, 46, 685, 891, 860, 579, 118, 816, 326, 739, 499, 997, 627, 346, 707, 147,
320, 958, 435, 602, 235, 689, 102, 1005, 484, 627, 116, 845, 894, 133, 866, 970, 180, 527,
837, 16, 82, 956, 833, 408, 671, 308, 381, 275, 654, 64, 422, 975, 1022, 857, 553, 233, 522,
655, 215, 1006, 258, 331, 827, 128, 465, 669, 74, 645, 172, 912, 661, 254, 844, 470, 662,
491, 779, 19, 766, 409, 83, 164, 360, 81, 1021, 913, 315, 519, 544, 530, 501, 802, 861, 305,
931, 302, 974, 1005, 947, 123, 893, 585, 377, 713, 31, 16, 181, 810, 35, 947, 196, 119, 88,
556, 200, 85, 446, 515, 605, 990, 21, 82, 769, 883, 387, 676, 161, 338, 657, 85, 461, 527,
670, 838, 216, 701, 854, 397, 488, 890, 321, 684, 1009, 409, 216, 185, 494, 662, 701, 75,
629, 722, 158, 374, 581, 545, 26, 743, 883, 683, 828, 320, 186, 474, 135, 403, 151, 989, 800,
639, 855, 97, 299, 840, 506, 516, 2, 1001, 154, 703, 52, 783, 401, 210, 133, 983, 756, 159,
702, 615, 843, 506, 936, 5, 980, 47, 408, 107, 12, 185, 747, 868, 282, 22, 684, 789, 538,
686, 766, 693, 365, 818, 452, 767, 5, 586, 726, 761, 745, 404, 352, 564, 910, 264, 570, 866,
311, 978, 973, 324, 139, 696, 168, 422, 719, 852, 187, 233, 515, 953, 926, 880, 747, 355,
623, 752, 941, 325, 489, 662, 729, 842, 203, 615, 82, 773, 457, 394, 727, 407, 718, 867, 79,
886, 265, 798, 714, 452, 8, 205, 381, 934, 62, 104, 265, 685, 857, 182, 1011, 322, 845, 716,
140, 24, 308, 223, 797, 765, 617, 500, 148, 311, 343, 228, 173, 608, 2, 887, 36, 10, 69, 417,
945, 131, 522, 186, 816, 355, 369, 803, 677, 190, 496, 818, 214, 804, 17, 1011, 545, 634,
487, 694, 945, 831, 922, 94, 415, 924, 981, 452, 935, 26, 869, 856, 157, 367, 18, 974, 722,
387, 753, 376, 577, 225, 170, 791, 5, 187, 778, 551, 821, 242, 221, 742, 49, 119, 836, 464,
19, 793, 916, 954, 820, 762, 786, 977, 105, 805, 927, 828, 168, 657, 180, 746, 882, 350, 513,
888, 537, 268, 415, 334, 510, 636, 52, 559, 755, 888, 1023, 774, 657, 916, 705, 453, 654,
467, 407, 759, 248, 310, 563, 417, 967, 743, 139, 826, 69, 652, 690, 606, 920, 81, 940, 406,
717, 992, 965, 448, 856, 965, 198, 490, 857, 903, 943, 487, 347, 326, 222, 595, 637, 786,
1012, 580, 505, 127, 382, 575, 780, 48, 157, 676, 129, 74, 59, 846, 42, 0, 270, 899, 965,
469, 365, 798, 348, 284, 261, 695, 611, 484, 267, 224, 246, 255, 804, 751, 383, 163, 302,
139, 211, 460, 815, 341, 534, 874, 163, 576, 875, 434, 451, 816, 903, 816, 591, 227, 77, 852,
923, 688, 312, 166, 912, 558, 421, 692, 286, 804, 855, 588, 943, 43, 24, 735, 384, 558, 585,
547, 111, 436, 981, 562, 229, 860, 355, 820, 64, 432, 648, 987, 96, 961, 129, 1008, 495, 550,
676, 781, 331, 508, 346, 250, 551, 370, 985, 935, 929, 547, 458, 16, 983, 416, 578, 188, 252,
933, 1008, 316, 341, 633, 279, 437, 570, 408, 421, 41, 959, 74, 823, 266, 582, 145, 516, 109,
515, 478, 20, 420, 1, 478, 436, 984, 894, 1015, 149, 123, 924, 133, 439, 242, 766, 719, 679,
312, 103, 77, 354, 38, 151, 153, 304, 733, 298, 821, 842, 813, 275, 862, 210, 276, 316, 646,
236, 187, 637, 385, 310, 538, 519, 749, 780, 261, 444, 435, 574, 548, 512, 928, 586, 663, 57,
891, 372, 355, 688, 190, 144, 963, 28, 354, 215, 345, 1001, 451, 532, 614, 837, 842, 128,
332, 567, 908, 593, 1012, 320, 143, 536, 832, 47, 98, 472, 104, 989, 844, 459, 653, 11, 604,
592, 39, 958, 807, 384, 935, 235, 916, 526, 48, 734, 654, 380, 278, 539, 973, 266, 859, 93,
802, 667, 140, 900, 115, 245, 866, 960, 704, 495, 971, 284, 64, 1010, 219, 871, 371, 130, 82,
263, 656, 130, 998, 287, 510, 252, 826, 460, 518, 661, 553, 296, 304, 693, 172, 420, 938, 14,
356, 619, 510, 303, 903, 574, 289, 98, 421, 660, 229, 504, 924, 885, 634, 898, 148, 121, 126,
974, 581, 644, 611, 110, 940, 916, 803, 88, 312, 718, 103, 668, 313, 613, 971, 192, 163, 236,
291, 584, 897, 520, 64, 797, 381, 699, 671, 530, 820, 797, 480, 377, 417, 68, 487, 333, 984,
266, 421, 272, 984, 524, 940, 273, 113, 887, 466, 276, 99, 757, 861, 996, 253, 925, 769, 634,
600, 416, 140, 396, 189, 621, 773, 606, 689, 236, 939, 649, 503, 337, 921, 463, 861, 837,
737, 975, 700, 179, 227, 799, 936, 64, 772, 165, 990, 517, 799, 566, 934, 940, 963, 99, 537,
712, 706, 202, 949, 621, 851, 428, 958, 748, 891, 796, 561, 604, 747, 237, 783, 974, 12, 695,
15, 784, 860, 1005, 278, 636, 547, 188, 552, 486, 287, 65, 175, 993, 267, 100, 591, 94, 528,
525, 842, 395, 297, 379, 1000, 20, 616, 759, 995, 628, 431, 1010, 389, 267, 991, 667, 903,
514, 855, 431, 1001, 118, 496, 152, 88, 763, 252, 679, 857, 780, 180, 675, 151, 478, 30, 127,
498, 646, 887, 469, 251, 294, 455, 640, 561, 422, 283, 441, 937, 114, 872, 914, 232, 345, 42,
320, 84, 294, 999, 942, 50, 156, 593, 201, 634, 624, 329, 108, 246, 192, 578, 497, 486, 9,
113, 23, 432, 396, 464, 345, 510, 313, 235, 743, 658, 277, 39, 742, 571, 15, 660, 621, 171,
230, 822, 805, 854, 127, 913, 76, 319, 467, 574, 805, 477, 687, 829, 909, 60, 269, 230, 570,
582, 465, 289, 216, 742, 329, 959, 289, 344, 595, 910, 515, 825, 708, 296, 655, 836, 185,
732, 131, 653, 282, 937, 106, 969, 742, 1015, 5, 1011, 221, 576, 570, 686, 865, 786, 404,
170, 721, 693, 514, 293, 579, 5, 94, 263, 301, 750, 75, 487, 458, 207, 116, 740, 120, 222,

31 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

685, 862, 213, 691, 849, 434, 243, 395, 96, 84, 158, 500, 255, 879, 169, 769, 148, 748, 775,
243, 1011, 52, 993, 63, 539, 427, 270, 655, 143, 390, 877, 828, 228, 66, 495, 53, 500, 738,
449, 596, 823, 607, 72, 54, 462, 241, 823, 611, 989, 574, 854, 977, 627, 823, 16, 142, 226,
286, 798, 369, 676, 651, 173, 904, 718, 669, 957, 194, 383, 382, 791, 182, 989, 863, 236,
428, 81, 36, 15, 46, 610, 869, 1023, 213, 668, 15, 356, 894, 301, 130, 239, 977, 781, 412,
857, 475, 57, 791, 670, 441, 149, 437, 623, 115, 276, 860, 543, 357, 896, 558, 404, 482, 403,
403, 696, 47, 419, 28, 941, 720, 158, 156, 674, 939, 568, 507, 391, 626, 274, 37, 43, 424,
474, 666, 539, 750, 502, 58, 84, 374, 616, 488, 857, 1019, 891, 529, 42, 286, 557, 983, 1007,
715, 115, 657, 630, 683, 140, 1021, 285, 415, 34, 328, 839, 508, 995, 354, 235, 473, 412,
319, 848, 4, 807, 681, 1023, 674, 186, 41, 961, 743, 0, 944, 434, 115, 577, 40, 798, 717, 38,
60, 108, 72, 388, 947, 581, 359, 277, 816, 833, 689, 111, 657, 693, 918, 314, 692, 568, 500,
733, 505, 219, 733, 425, 653, 848, 1002, 693, 623, 696, 731, 683, 804, 804, 47, 728, 361,
407, 1005, 153, 216, 671, 264, 873, 340, 158, 163, 9, 726, 663, 742, 208, 882, 452, 633, 511,
276, 612, 180, 899, 284, 912, 558, 64, 692, 606, 792, 29, 1013, 774, 182, 205, 421, 446, 54,
761, 604, 217, 770, 306, 880, 489, 514, 738, 941, 124, 225, 193, 736, 405, 69, 1020, 293,
627, 60, 985, 209, 853, 1014, 198, 603, 172, 403, 0, 618, 457, 761, 198, 674, 508, 505, 530,
997, 1019, 244, 914, 119, 469, 83, 855, 875, 152, 851, 144, 780, 912, 106, 989, 741, 96, 164,
320, 269, 567, 320, 887, 1, 57, 62, 675, 565, 567, 182, 538, 562, 426, 428, 682, 896, 512,
513, 747, 664, 341, 891, 420, 229, 997, 386, 970, 70, 550, 266, 339, 93, 586, 202, 94, 643,
264, 770, 185, 831, 952, 723, 370, 354, 128, 28, 226, 640, 541, 973, 280, 882, 841, 701, 87,
814, 63, 33, 884, 613, 299, 199, 706, 885, 402, 801, 505, 666, 547, 690, 474, 475, 389, 844,
829, 517, 872, 32, 133, 389, 1005, 414, 248, 822, 91, 335, 613, 154, 369, 473, 767, 668, 673,
449, 530, 51, 226, 11, 717, 773, 701, 167, 224, 66, 1011, 30, 584, 859, 62, 717, 225, 43,
107, 473, 866, 198, 808, 455, 352, 153, 928, 95, 822, 577, 545, 328, 628, 771, 339, 322, 521,
16, 489, 745, 82, 477, 775, 666, 312, 837, 360, 537, 881, 467, 1010, 723, 666, 795, 154,
1018, 948, 58, 90, 746, 636, 635, 50, 240, 382, 389, 562, 903, 405, 28, 625, 488, 505, 376,
130, 817, 190, 490, 331, 47, 958, 317, 770, 600, 88, 924, 594, 13, 982, 684, 759, 594, 295,
810, 835, 678, 175, 373, 557, 581, 401, 158, 45, 906, 535, 175, 700, 725, 666, 7, 772, 600,
324, 518, 176, 413, 418, 770, 426, 376, 431, 161, 971, 726, 971, 782, 380, 123, 131, 938,
704, 533, 72, 749, 415, 607, 924, 91, 308, 566, 98, 56, 142, 423, 574, 318, 836, 992, 65,
238, 345, 496, 399, 292, 198, 347, 50, 579, 470, 181, 493, 150, 714, 565, 899, 106, 149, 799,
197, 457, 342, 296, 514, 484, 719, 64, 803, 531, 33, 868, 769, 378, 340, 144, 670, 538, 491,
720, 93, 961, 901, 586, 87, 592, 128, 986, 698, 277, 762, 895, 734, 80, 167, 224, 564, 886,
289, 343, 393, 322, 187, 138, 700, 527, 283, 346, 42, 774, 42, 135, 712, 943, 722, 799, 511,
850, 762, 185, 103, 500, 57, 837, 580, 224, 38, 120, 87, 327, 464, 480, 649, 651, 619, 325,
155, 902, 671, 197, 652, 713, 332, 340, 632, 30, 116, 120, 880, 878, 305, 983, 354, 362, 797,
934, 587, 835, 30, 674, 138, 494, 130, 787, 122, 749, 88, 277, 627, 759, 474, 256, 448, 806,
596, 56, 837, 712, 176, 693, 566, 482, 653, 920, 844, 426, 830, 407, 237, 861, 57, 375, 331,
188, 138, 453, 937, 226, 730, 541, 985, 180, 797, 409, 987, 369, 465, 800, 58, 642, 469, 624,
100, 98, 521, 944, 524, 327, 328, 761, 164, 385, 112, 496, 573, 250, 949, 487, 476, 656, 4,
437, 836, 801, 846, 799, 146, 288, 575, 204, 930, 21, 829, 6, 119, 326, 950, 644, 653, 254,
381, 818, 640, 494, 290, 189, 744, 215, 676, 197, 871, 680, 634, 684, 457, 457, 459, 604,
745, 11, 808, 651, 32, 613, 657, 151, 939, 583, 795, 569, 838, 153, 363, 454, 647, 653, 643,
367, 868, 296, 564, 716, 976, 175, 376, 410, 632, 835, 1014, 353, 846, 798, 1004, 878, 388,
637, 6, 303, 196, 801, 872, 10, 954, 211, 464, 577, 864, 84, 945, 709, 380, 485, 401, 332,
660, 777, 742, 268, 588, 732, 621, 411, 507, 601, 265, 895, 214, 271, 174, 411, 49, 23, 421,
1003, 234, 886, 557, 75, 970, 478, 784, 326, 963, 161, 658, 600, 938, 377, 868, 502, 85, 466,
913, 592, 43, 155, 463, 258, 426, 638, 669, 475, 661, 66, 455, 895, 952, 1012, 970, 898, 466,
730, 200, 405, 891, 859, 1005, 805, 212, 850, 284, 297, 292, 173, 890, 335, 328, 329, 593,
755, 967, 238, 206, 604, 305, 661, 476, 233, 649, 422, 108, 91, 129, 308, 497, 1020, 143,
478, 802, 355, 304, 62, 653, 596, 235, 519, 932, 564, 848, 501, 295, 792, 740, 501, 372, 21,
139, 848, 254, 788, 247, 362, 880, 376, 671, 353, 372, 814, 831, 150, 146, 112, 212, 799,
708, 448, 294, 616, 1012, 118, 94, 283, 910, 834, 784, 259, 855, 923, 83, 85, 688, 330, 448,
544, 706, 95, 897, 55, 909, 704, 205, 31, 816, 418, 830, 501, 866, 100, 93, 854, 219, 187,
113, 105, 1021, 897, 364, 852, 797, 448, 938, 461, 778, 362, 1005, 461, 457, 878, 516, 342,
558, 721, 374, 351, 115, 180, 852, 981, 281, 945, 811, 500, 109, 924, 605, 106, 798, 970,
959, 571, 394, 873, 8, 148, 211, 1013, 609, 668, 867, 101, 1010, 401, 823, 360, 752, 938,
541, 580, 896, 822, 502, 683, 298, 611, 584, 903, 717, 358, 849, 652, 929, 219, 501, 937,
368, 712, 926, 977, 356, 769, 55, 343, 146, 878, 703, 899, 792, 220, 455, 664, 18, 957, 324,
316, 544, 908, 196, 238, 242, 21, 890, 147, 241, 368, 60, 609, 56, 986, 562, 413, 731, 617,
756, 877, 471, 435, 752, 240, 656, 184, 904, 674, 117, 204, 991, 662, 88, 163, 900, 330, 184,

32 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

766, 477, 425, 110, 537, 10, 167, 499, 573, 580, 206, 166, 312, 60, 638, 747, 812, 878, 379,
996, 758, 30, 90, 963, 1021, 752, 27, 160, 628, 358, 344, 370, 835, 770, 481, 349, 780, 648,
848, 329, 204, 31, 496, 516, 91, 110, 239, 903, 988, 619, 876, 722, 649, 966, 661, 646, 694,
689, 806, 298, 23, 126, 668, 858, 896, 125, 183, 653, 773, 8, 982, 977, 39, 454, 469, 130,
564, 709, 9, 528, 304, 885, 227, 953, 827, 888, 575, 497, 553, 357, 795, 576, 483, 440, 411,
356, 565, 594, 1009, 315, 602, 967, 268, 641, 398, 738, 771, 962, 423, 781, 467, 727, 642,
694, 656, 446, 558, 207, 943, 88, 564, 715, 664, 23, 131, 51, 379, 696, 646, 364, 1011, 224,
308, 256, 866, 706, 994, 613, 644, 393, 370, 87, 96, 1013, 781, 752, 435, 316, 959, 354, 404,
499, 45, 44, 522, 176, 96, 902, 873, 742, 242, 860, 966, 550, 92, 808, 232, 62, 398, 877,
455, 768, 964, 551, 757, 722, 279, 168, 14, 214, 523, 418, 713, 568, 462, 212, 745, 558, 90,
594, 276, 332, 430, 219, 883, 523, 3, 91, 585, 401, 968, 17, 146, 909, 568, 903, 607, 848,
48, 621, 38, 571, 15, 752, 115, 477, 964, 860, 12, 30, 430, 288, 362, 861, 507, 221, 360,
511, 313, 945, 912, 257, 962, 34, 142, 507, 938, 749, 331, 986, 346, 369, 533, 361, 97, 648,
839, 37, 485, 851, 67, 915, 115, 430, 752, 623, 651, 88, 110, 964, 10, 1022, 198, 972, 33,
340, 455, 971, 66, 786, 933, 412, 132, 442, 774, 229, 66, 589, 267, 551, 416, 334, 443, 531,
764, 171, 130, 392, 260, 240, 332, 270, 239, 530, 218, 272, 871, 674, 219, 937, 436, 128,
325, 568, 570, 75, 798, 636, 664, 41, 164, 56, 375, 607, 588, 116, 778, 718, 508, 14, 959,
840, 284, 174, 347, 503, 446, 194, 153, 665, 107, 589, 793, 432, 134, 339, 508, 932, 975,
148, 973, 115, 205, 324, 722, 793, 440, 477, 487, 948, 491, 422, 765, 776, 596, 88, 255, 18,
282, 408, 683, 389, 997, 452, 821, 107, 791, 305, 15, 743, 454, 988, 858, 659, 289, 557, 428,
729, 10, 915, 654, 501, 314, 395, 253, 910, 483, 508, 929, 765, 916, 588, 130, 890, 17, 951,
997, 808, 233, 1013, 527, 687, 977, 362, 322, 242, 919, 750, 972, 929, 641, 602, 406, 955,
997, 660, 842, 456, 144, 747, 197, 37, 311, 327, 927, 328, 254, 900, 113, 487, 889, 640, 150,
843, 1002, 472, 61, 897, 198, 9, 802, 840, 611, 185, 771, 584, 845, 589, 16, 989, 312, 213,
2, 624, 540, 929, 952, 795, 806, 41, 258, 671, 682, 409, 490, 660, 881, 552, 534, 56, 561,
312, 896, 149, 497, 643, 733, 318, 209, 750, 284, 521, 963, 286, 121, 480, 192, 50, 251, 998,
91, 509, 645, 773, 918, 112, 410, 776, 664, 944, 832, 201, 232, 704, 350, 730, 323, 60, 24,
532, 810, 308, 30, 749, 595, 151, 205, 787, 201, 456, 761, 293, 966, 382, 42, 860, 494, 452,
612, 134, 372, 420, 336, 605, 100, 686, 311, 424, 746, 335, 956, 532, 644, 986, 258, 215,
114, 463, 1002, 315, 920, 739, 608, 862, 97, 651, 698, 592, 79, 287, 726, 452, 707, 38, 33,
808, 725, 344, 208, 447, 679, 140, 980, 299, 103, 214, 514, 217, 677, 492, 532, 573, 207,
117, 411, 305, 768, 86, 897, 847, 373, 599, 275, 56, 638, 308, 864, 339, 652, 48, 786, 308,
189, 742, 607, 292, 956, 98, 509, 610, 590, 17, 159, 798, 134, 571, 79, 902, 657, 976, 726,
6, 551, 1001, 62, 165, 286, 927, 504, 938, 975, 267, 222, 140, 1009, 830, 432, 942, 928, 941,
528, 494, 959, 687, 268, 69, 234, 347, 972, 891, 299, 674, 897, 851, 651, 960, 1016, 937,
863, 497, 852, 814, 764, 50, 955, 749, 880, 363, 667, 784, 281, 171, 255, 216, 859, 523, 285,
69, 871, 233, 961, 146, 907, 834, 997, 535, 770, 990, 448, 609, 463, 276, 400, 203, 327, 331,
952, 183, 694, 596, 968, 975, 767, 199, 167, 602, 722, 453, 672, 569, 686, 609, 716, 570,
419, 689, 81, 166, 655, 529, 775, 94, 806, 151, 297, 109, 482, 226, 292, 153, 822, 236, 104,
565, 435, 272, 144, 134, 725, 816, 703, 387, 401, 395, 957, 820, 61, 14, 986, 716, 544, 738,
811, 326, 889, 84, 435, 348, 310, 727, 501, 108, 964, 605, 674, 375, 877, 818, 509, 578, 610,
189, 966, 1011, 584, 899, 807, 645, 914, 770, 338, 434, 484, 125, 760, 349, 209, 171, 697,
520, 898, 174, 628, 838, 780, 278, 190, 633, 72, 699, 188, 682, 888, 130, 669, 449, 5, 453,
70, 919, 199, 408, 329, 683, 533, 65, 8, 743, 236, 706, 239, 111, 880, 867, 949, 636, 122,
115, 246, 194, 815, 434, 877, 679, 564, 522, 104, 569, 975, 175, 465, 150, 583, 794, 833, 93,
860, 842, 836, 72, 524, 51, 183, 380, 918, 109, 1017, 16, 224, 239, 211, 15, 673, 64, 695,
213, 586, 799, 782, 538, 974, 223, 688, 534, 1018, 498, 627, 854, 316, 439, 926, 840, 490,
86, 196, 384, 195, 189, 401, 419, 428, 612, 435, 77, 676, 106, 290, 238, 905, 49, 776, 856,
272, 441, 366, 266, 939, 993, 96, 231, 408, 1023, 47, 898, 85, 243, 258, 280, 433, 659, 699,
861, 247, 110, 939, 923, 216, 205, 138, 98, 254, 914, 954, 527, 331, 296, 793, 246, 265, 890,
477, 673, 889, 524, 547, 974, 768, 805, 230, 177, 441, 929, 14, 688, 16, 953, 588, 232, 135,
726, 330, 389, 616, 260, 916, 948, 556, 686, 170, 821, 552, 648, 470, 417, 148, 1017, 367,
916, 799, 597, 69, 216, 502, 84, 904, 518, 13, 468, 751, 148, 170, 57, 538, 787, 318, 430,
711, 874, 92, 881, 672, 644, 505, 118, 37, 654, 112, 404, 546, 911, 1001, 616, 103, 480, 700,
1007, 998, 713, 452, 725, 862, 622, 783, 376, 385, 77, 806, 72, 951, 899, 954, 599, 519, 435,
718, 557, 65, 830, 961, 612, 717, 939, 204, 820, 395, 904, 803, 369, 593, 231, 71, 431, 854,
854, 807, 215, 931, 590, 288, 858, 465, 218, 434, 984, 653, 128, 517, 719, 958, 455, 307,
651, 370, 511, 447, 765, 391, 226, 110, 984, 458, 181, 392, 288, 11, 175, 503, 942, 765, 791,
777, 206, 1009, 187, 167, 639, 315, 684, 334, 249, 115, 641, 900, 485, 128, 323, 226, 519,
549, 337, 479, 1007, 518, 871, 271, 530, 23, 775, 448, 788, 542, 201, 995, 528, 388, 138,
143, 703, 822, 477, 952, 938, 94, 828, 399, 222, 127, 626, 741, 677, 963, 196, 660, 457, 44,

33 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

932, 987, 67, 683, 412, 855, 201, 613, 826, 729, 1002, 964, 872, 681, 763, 325, 610, 677,
419, 414, 52, 641, 542, 678, 358, 195, 617, 555, 855, 51, 599, 763, 14, 666, 422, 426, 497,
624, 16, 300, 329, 1018, 240, 178, 675, 1003, 503, 261, 656, 923, 676, 709, 540, 194, 363,
899, 389, 981, 430, 220, 8, 5, 984, 22, 671, 382, 449, 144, 1006, 465, 444, 312, 459, 685,
490, 110, 664, 993, 372, 297, 892, 24, 1006, 409, 218, 345, 284, 607, 302, 714, 827, 310,
719, 787, 333, 366, 146, 782, 510, 128, 223, 955, 440, 682, 616, 930, 792, 256, 900, 140,
553, 768, 164, 535, 153, 382, 881, 437, 989, 159, 127, 793, 470, 846, 556, 803, 188, 702,
561, 699, 831, 784, 630, 247, 442, 222, 154, 210, 478, 30, 351, 8, 798, 515, 543, 952, 898,
400, 365, 863, 560, 493, 632, 6, 315, 165, 809, 504, 867, 346, 179, 674, 106, 809, 922, 548,
7, 52, 758, 485, 82, 85, 493, 880, 601, 13, 808, 475, 413, 150, 314, 973, 643, 947, 979, 958,
88, 764, 438, 955, 86, 617, 606, 192, 402, 504, 740, 409, 556, 475, 895, 638, 560, 364, 494,
137, 377, 279, 612, 791, 429, 927, 740, 48, 850, 696, 1006, 938, 436, 421, 869, 523, 14, 451,
715, 417, 955, 432, 826, 487, 907, 697, 101, 443, 38, 596, 581, 415, 875, 169, 182, 280, 72,
923, 328, 922, 595, 310, 836, 7, 731, 682, 530, 746, 109, 222, 139, 41, 654, 965, 528, 537,
639, 630, 980, 677, 202, 537, 68, 53, 707, 251, 333, 779, 150, 661, 678, 745, 971, 490, 752,
679, 148, 259, 401, 258, 481, 540, 299, 111, 481, 827, 648, 96, 433, 604, 773, 635, 118, 842,
688, 825, 69, 1021, 580, 219, 658, 234, 964, 606, 725, 692, 261, 873, 951, 662, 107, 408,
178, 406, 519, 659, 210, 143, 756, 643, 748, 505, 255, 866, 323, 943, 667, 392, 941, 223,
611, 575, 458, 551, 157, 159, 220, 418, 8, 147, 56, 116, 556, 234, 522, 51, 894, 732, 195,
626, 352, 943, 107, 607, 785, 431, 526, 428, 823, 443, 651, 411, 1019, 85, 962, 152, 244,
158, 571, 253, 306, 627, 369, 862, 862, 891, 913, 732, 600, 84, 334, 952, 3, 441, 535, 788,
872, 37, 192, 672, 481, 844, 59, 476, 929, 1021, 628, 150, 156, 175, 403, 462, 803, 772, 300,
641, 639, 189, 349, 215, 274, 683, 143, 277, 100, 678, 42, 973, 716, 234, 621, 173, 54, 680,
649, 984, 677, 253, 110, 833, 429, 513, 271, 208, 261, 571, 849, 900, 761, 174, 92, 11, 857,
235, 288, 957, 914, 330, 906, 606, 565, 503, 779, 619, 159, 404, 579, 837, 657, 689, 646, 62,
178, 918, 270, 439, 465, 95, 316, 202, 269, 408, 213, 102, 643, 502, 36, 533, 832, 942, 115,
373, 422, 894, 993, 581, 274, 548, 394, 932, 214, 17, 994, 392, 935, 241, 832, 376, 336, 124,
579, 606, 532, 792, 708, 151, 270, 744, 685, 79, 663, 800, 452, 61, 671, 421, 642, 945, 970,
13, 853, 160, 30, 824, 552, 965, 41, 360, 317, 377, 484, 896, 983, 1016, 665, 668, 144, 935,
388, 829, 1014, 27, 605, 443, 88, 252, 864, 731, 174, 810, 744, 3, 970, 774, 827, 499, 715,
868, 859, 8, 222, 320, 905, 181, 312, 546, 849, 456, 457, 214, 261, 448, 241, 867, 891, 330,
95, 731, 37, 269, 518, 781, 273, 464, 531, 76, 963, 222, 945, 799, 230, 143, 95, 111, 324,
407, 657, 150, 864, 91, 364, 101, 539, 605, 968, 406, 935, 40, 113, 972, 309, 631, 729, 582,
72, 236, 659, 11, 458, 580, 810, 689, 723, 905, 800, 23, 289, 434, 173, 129, 525, 537, 230,
40, 119, 175, 446, 30, 215, 559, 1003, 524, 167, 708, 83, 239, 945, 742, 250, 379, 298, 37,
44, 1021, 942, 845, 20, 207, 255, 194, 336, 780, 731, 567, 820, 850, 742, 242, 881, 957, 801,
860, 457, 968, 544, 540, 183, 465, 258, 434, 845, 556, 471, 889, 553, 389, 710, 574, 597,
965, 768, 933, 721, 475, 476, 517, 302, 194, 759, 159, 127, 537, 1019, 585, 481, 539, 101,
665, 1005, 360, 75, 826, 916, 546, 691, 446, 935, 378, 1020, 508, 319, 764, 418, 17, 215,
894, 534, 517, 65, 270, 676, 192, 807, 671, 777, 264, 187, 879, 929, 168, 215, 1004, 994,
107, 526, 661, 553, 438, 15, 549, 946, 335, 289, 340, 352, 505, 211, 886, 1022, 276, 132,
675, 468, 939, 322, 222, 180, 509, 77, 85, 677, 292, 66, 647, 399, 592, 285, 953, 6, 300,
478, 953, 635, 768, 269, 987, 249, 480, 850, 247, 756, 982, 922, 201, 898, 221, 423, 54, 730,
500, 139, 384, 792, 205, 7, 167, 798, 292, 96, 804, 593, 575, 733, 204, 319, 1003, 168, 568,
459, 1018, 815, 192, 976, 714, 393, 850, 935, 816, 904, 641, 292, 20, 1, 60, 225, 9, 227,
1023, 301, 324, 804, 894, 899, 513, 75, 194, 492, 243, 762, 952, 237, 553, 120, 189, 243,
513, 16, 154, 305, 920, 796, 597, 940, 797, 657, 142, 806, 884, 141, 84, 184, 945, 978, 59,
435, 29, 253, 927, 272, 1015, 855, 509, 545, 975, 699, 788, 464, 715, 943, 769, 611, 715,
342, 528, 488, 999, 670, 271, 860, 811, 355, 20, 733, 309, 80, 144, 339, 333, 47, 611, 325,
903, 97, 870, 854, 796, 634, 295, 487, 553, 40, 74, 244, 383, 602, 733, 358, 248, 1004, 194,
36, 335, 215, 769, 644, 295, 913, 983, 628, 960, 571, 953, 839, 668, 799, 670, 440, 410, 965,
927, 963, 1005, 1001, 184, 364, 580, 917, 723, 828, 897, 917, 864, 208, 108, 609, 852, 403,
498, 812, 8, 435, 359, 961, 250, 3, 737, 920, 443, 123, 861, 346, 62, 843, 323, 246, 183,
903, 139, 906, 708, 12, 800, 548, 220, 908, 134, 49, 288, 632, 861, 296, 43, 196, 233, 294,
199, 970, 190, 642, 69, 28, 988, 132, 871, 287, 378, 30, 167, 518, 937, 875, 530, 713, 399,
751, 597, 533, 800, 885, 142, 637, 157, 185, 833, 391, 479, 8, 337, 670, 650, 407, 698, 614,
539, 545, 901, 917, 575, 44, 411, 488, 919, 942, 177, 295, 669, 775, 828, 445, 636, 970, 58,
794, 132, 891, 161, 611, 899, 498, 257, 525, 905, 955, 115, 420, 476, 1016, 314, 28, 37, 725,
516, 956, 643, 694, 227, 288, 445, 32, 733, 57, 1002, 791, 851, 110, 658, 1012, 722, 533,
487, 979, 34, 368, 911, 149, 789, 363, 142, 79, 391, 179, 804, 908, 111, 424, 578, 339, 712,
1023, 371, 422, 56, 349, 189, 908, 460, 848, 896, 158, 357, 359, 113, 392, 728, 0, 541, 493,

34 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

364, 683, 572, 755, 862, 352, 639, 974, 776, 193, 289, 465, 192, 660, 887, 249, 1009, 52,
133, 445, 900, 5, 603, 234, 365, 717, 626, 69, 717, 143, 562, 57, 827, 110, 813, 665, 462,
428, 615, 215, 622, 904, 680, 814, 540, 543, 39, 526, 595, 172, 971, 472, 178, 551, 706, 543,
244, 308, 612, 961, 451, 150, 1019, 254, 260, 808, 920, 722, 212, 511, 937, 834, 392, 593,
625, 932, 112, 664, 434, 708, 837, 382, 156, 1015, 933, 862, 534, 153, 146, 122, 90, 597,
272, 85, 852, 532, 893, 748, 230, 82, 235, 144, 916, 627, 737, 517, 536, 850, 158, 970, 534,
995, 328, 690, 986, 237, 528, 496, 390, 674, 618, 481, 247, 890, 566, 75, 398, 436, 823, 628,
518, 35, 772, 410, 662, 486, 928, 174, 312, 62, 121, 846, 33, 449, 512, 1019, 687, 16, 491,
53, 690, 85, 534, 937, 975, 77, 1013, 349, 513, 812, 977, 7, 847, 726, 417, 486, 188, 321,
660, 500, 383, 781, 322, 416, 207, 834, 411, 894, 850, 902, 947, 516, 987, 458, 429, 938,
535, 418, 263, 24, 207, 217, 31, 30, 943, 448, 516, 107, 770, 153, 607, 129, 934, 929, 546,
117, 739, 957, 1011, 565, 836, 935, 57, 799, 369, 486, 714, 904, 905, 977, 928, 88, 170, 959,
118, 89, 383, 635, 196, 129, 788, 803, 259, 698, 708, 805, 816, 423, 738, 803, 988, 550, 714,
21, 326, 59, 508, 16, 963, 389, 993, 867, 477, 140, 802, 595, 229, 162, 206, 426, 291, 994,
205, 550, 669, 914, 331, 461, 313, 46, 240, 278, 596, 955, 299, 922, 1014, 807, 938, 954,
172, 908, 797, 649, 24, 576, 221, 253, 738, 427, 679, 5, 398, 885, 556, 43, 775, 887, 504,
64, 933, 744, 342, 506, 675, 642, 404, 666, 425, 319, 596, 598, 203, 369, 223, 227, 945, 444,
480, 659, 872, 136, 665, 246, 1021, 197, 289, 772, 60, 793, 836, 994, 513, 155, 476, 165,
797, 880, 831, 198, 175, 403, 796, 378, 772, 1020, 605, 694, 440, 62, 329, 288, 198, 994,
534, 195, 167, 823, 967, 228, 592, 779, 198, 82, 934, 674, 247, 707, 530, 54, 906, 706, 457,
678, 60, 205, 674, 666, 899, 91, 728, 205, 379, 926, 175, 914, 97, 343, 713, 40, 571, 282,
819, 769, 364, 730, 419, 611, 413, 949, 665, 295, 631, 98, 974, 692, 303, 624, 334, 179, 715,
38, 384, 71, 964, 559, 985, 37, 902, 674, 77, 449, 956, 896, 194, 296, 602, 613, 907, 1016,
539, 548, 287, 146, 646, 237, 838, 950, 862, 148, 105, 553, 186, 489, 624, 126, 24, 585, 163,
927, 236, 240, 352, 168, 113, 547, 465, 715, 136, 348, 707, 675, 897, 995, 822, 519, 208,
636, 445, 46, 785, 550, 600, 971, 15, 200, 74, 40, 786, 237, 967, 1022, 478, 295, 166, 591,
842, 631, 282, 979, 980, 990, 630, 853, 961, 428, 348, 145, 41, 794, 192, 826, 320, 792, 773,
336, 992, 847, 376, 754, 61, 319, 752, 539, 614, 919, 106, 433, 526, 388, 388, 482, 354,
1018, 311, 291, 423, 660, 437, 464, 430, 629, 266, 750, 397, 15, 62, 365, 863, 438, 96, 924,
757, 848, 439, 348, 743, 545, 781, 246, 933, 145, 728, 264, 139, 16, 555, 562, 676, 992, 2,
82, 597, 268, 832, 994, 284, 895, 336, 123, 309, 432, 23, 43, 256, 462, 391, 1000, 1007, 148,
222, 916, 293, 950, 156, 432, 966, 712, 995, 618, 680, 997, 700, 254, 242, 509, 224, 526,
380, 560, 649, 689, 992, 672, 732, 225, 110, 99, 201, 93, 247, 423, 1009, 540, 349, 142, 973,
292, 854, 944, 910, 510, 917, 587, 764, 135, 72, 989, 661, 452, 525, 286, 117, 494, 958, 850,
719, 44, 949, 920, 137, 173, 319, 123, 713, 668, 265, 662, 960, 95, 582, 847, 605, 476, 410,
346, 611, 482, 311, 249, 934, 836, 535, 27, 306, 470, 877, 1, 514, 803, 921, 652, 976, 216,
775, 665, 885, 16, 304, 821, 111, 886, 644, 716, 338, 30, 38, 950, 512, 349, 175, 422, 162,
710, 450, 468, 156, 303, 470, 671, 82, 367, 299, 34, 584, 50, 700, 445, 66, 1004, 242, 177,
866, 887, 893, 181, 917, 932, 107, 406};

int tamanho_cache, words_por_linha;


double taxa_de_erro;
cout<<"Dados de analise de acessos a memoria cache com RAM de 1k: "<<endl;

//---Caso 1:
tamanho_cache = 128;
words_por_linha = 4;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 2:
tamanho_cache = 128;
words_por_linha = 8;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;

35 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

//---Caso 3:
tamanho_cache = 128;
words_por_linha = 16;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 4:
tamanho_cache = 128;
words_por_linha = 32;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//--------------------------------------------------------
//---Caso 5:
tamanho_cache = 256;
words_por_linha = 4;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 6:
tamanho_cache = 256;
words_por_linha = 8;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 7:
tamanho_cache = 256;
words_por_linha = 16;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 8:
tamanho_cache = 256;
words_por_linha = 32;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;

//--------------------------------------------------------
//---Caso 9:
tamanho_cache = 512;
words_por_linha = 4;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 10:
tamanho_cache = 512;

36 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

words_por_linha = 8;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 11:
tamanho_cache = 512;
words_por_linha = 16;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;
//---Caso 12:
tamanho_cache = 512;
words_por_linha = 32;
taxa_de_erro = buscaMemoria(tamanho_cache, endereco, words_por_linha);

cout<<"Memoria Cache com "<<tamanho_cache<<" words e cada linha contem


"<<words_por_linha<<" words. ";
cout<<"Taxa percentual de erros de acesso: "<<taxa_de_erro*100<<"%"<<endl;

return 0;
}

37 
Microcontrolador PIC 16F84A ‐ DCA‐UFRN 

Bibliografia
 
[1] Cartolano , E., & Avegliano , P. (2004). Experiência Microcontroladores PIC. Escola Politécnica
Universidade de São Paulo, Departamento de Engenharia de Computação, São Paulo.

[2] Microchip. Introdução aos Microcontroladores 16F84A . Microship.

[3] Microchip. (2013). PIC16F84A Datasheet. Microchip Technology Inc , USA.

[4] Oliveira , E., & Fideles, É. MICROCONTROLADORES PIC16F87x. Universidade Católica de


Goiás, Goiás.

[5] Stallings, W. (2010). Arquitetura e Organização de Computadores 8a Edição.

[6] Stallings, W. Top Level View of Computer Function and Interconnection. In: Computer
Organization and Architecture 8th Edition.

[7] Wilmshurst, T. (2006). Designing embedded systems with PIC microcontrollers: principles and
applications. Newnes.

 
 

38 

Você também pode gostar