pic18f84a e acesso a memoria cache c++
DESCRIPTION
PIC18F84A e Acesso a memoria cache c++Engenharia de computacaoTRANSCRIPT
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
2
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
3
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
4
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
Porta de I/O digital RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 Porta de I/O digital ou entrada de clock para o
contador
Pode ter Pull-up interno
habilitado por
software
RB0/INT 6 Porta de I/O digital / Interrupção externa RB1 7
Porta de I/O digital RB2 8 RB3 9 RB4 10 Porta de I/O digital ou interrupção na mudança de
estado RB5 11
RB6 12 Porta de I/O digital, interrupção na mudança de estado, ou clock da programação serial
RB7 13 Porta de I/O digital, interrupção na mudança de 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
5
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
6
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
7
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
8
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
f Registrador de endereço; Referência a um registrador
w Registrador temporário para as operaçõe na ULA (acumulador)
b Refere-se ao bit específico dentro de um byte
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
9
k Uma constante que pode ser escrita na forma decimal, hexa, ou binária
x Ultilizado pelo Microchip software tools
d Local onde é armazenada o resultado 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
10
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.
ADDWF f,d Soma o valor contido no acumulador W com o valor contido no registrador enderecado pelo para metro f.
ANDLW k Efetua o AND bit a bit entre o valor contido no
acumulador W e o valor constante k. O resultado sera memorizado no acumulador.
ANDWF f,d Efetua o AND bit a bit entre o valor contido no
acumulador W e o valor contido no registrador enderec ado pelo parametro f.
BCF f,b Zera o bit b do registrador no enderec o f. BSF f,b Coloca em 1 no bit b do registrador que esta no endereco f.
BTFSC f,b Testa o bit b contido no registrador no enderec o f e pula a pro xima instrucao se este valer 0.
BTFSS f,b Testa o bit b contido no registrador do enderec o f e pula a instrucao seguinte se este for 1.
CALL k
Chama uma subrotina memorizada no enderec o k. O parametro k pode ser especificado utilizando-se
diretamente o valor nume rico do enderec o ou entao o relativo label.
CLRF f Zera o valor contido no registrador enderec ado pelo parametro f.
CLRW Zera o valor contido no registrador W.
CLRWDT
Utilizada quando programarmos o PIC 16F84A com a opcao Watchdog. Nesta modalidade o microcontrolador
PIC habilita um timer que, uma vez transcorrido um determinado tempo, efetua o reset do mesmo. Para evitar o reset do nosso programa deveremos executar ciclicamente
a instrucao CLRWDT para zerar o timer antes deste tempo. Se nao zerarmos o WDT neste tempo, o circuito de
watchdog interpretara este como um bloco de programa em execuc ao e efetuara o reset para bloquea-lo.
COMF f,d Efetua o complemento do valor contido no registrador enderecado pelo para metro f.
DECF f,d Decrementa o conteu do do registrador endereçado pelo parametro f.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
11
DECFSZ f,b Decrementa o valor de registrador do enderec o f e se o resultado for zero pula a pro xima instrucao.
GOTO k Determina o desvio incondicional do programa em execucao para o enderec o k. O parametro k pode ser
especificado utilizando-se diretamente um valor nume rico do endereco ou entao o relativo label.
INCF f,d Incrementa o conteu do do registrador no enderec o f.
INCFSZ f,b Incrementa o valor do registrador f e se o resultado for zero pula a pro xima instrucao.
IORLW k Efetua o OR inclusive entre o valor contido no acumulador W e o valor da constante k.
IORWF f,d Efetua o OR inclusive entre o valor contido no acumulador
W e o valor contido no registrador enderec ado pelo parametro f.
MOVLW k Passa ao acumulador W um valor constante k.
MOVVF f,d Copia o conteu do do registrador enderec ado pelo parametro f para o para metro de destino d.
MOVWF f Copia o conteu do do registrador W no registrador de parametro f.
NOP Esta instrucao nao executa nenhuma operac ao mas e util para inserir atrasos de um ciclo de maquina ou mais.
RETFIE Esta instrucao deve ser colocada no te rmino de cada subrotina de controle de interrupc oes para retornar o
controle ao programa principal.
RETLW k Retorna o controle de uma rotina ao programa principal. A diferenca desta em relac ao a instrucao RETURN e que
retflw permite retornar, atrave s do acumulador W, o valor k ao programa principal.
RETURN Esta instrucao deve ser inserida no termino de cada subrotina para retornar a execucao ao programa principal.
RLF f,b
Rotaciona o bit contido no registrador do enderec o f para a esquerda (ou seja do bit menos significativo para o mais
significativo) passando pelo CARRY do registrador STATUS.
RRF f,b
Rotaciona o bit contido no registrador do enderec o f para direita (ou seja do bit mais significativo para o menos
significativo) passando pelo bit CARRY do registrador STATUS .
SLEEP Bloqueia a execuc ao do programa em andamento e coloca o PIC em standby.
SUBLW k Subtrai a constante k do valor memorizado no acumulador W.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
12
SUBWF f,d Esta instrucao subtrai o valor contido no registrador W do valor contido no registrador enderec ado pelo para metro f.
SWAPF f,d Troca o valor dos quatro bits mais significativo (D7-D4) contido no registrador do enderec 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.
XORWF f,d Efetua o OR exclusivo(XOR) entre o valor contido no
acumulador W e o valor contido no registrador enderec ado pelo parametro f.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
13
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
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
14
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
15
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
16
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
1284 = 𝟑𝟐 𝒍𝒊𝒏𝒉𝒂𝒔
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
17
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
1288 = 𝟏𝟔 𝒍𝒊𝒏𝒉𝒂𝒔
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
18
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
12816 = 𝟖 𝒍𝒊𝒏𝒉𝒂𝒔
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
12832 = 𝟒 𝒍𝒊𝒏𝒉𝒂𝒔
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
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
19
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
2564 = 𝟔𝟒 𝒍𝒊𝒏𝒉𝒂𝒔
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
2568 = 𝟑𝟐 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟑 𝒃𝒊𝒕𝒔 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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
25616 = 𝟏𝟔 𝒍𝒊𝒏𝒉𝒂𝒔
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
20
𝒏𝑩𝒊𝒕𝒔 = 𝟒 𝒃𝒊𝒕𝒔
Caso A: Linha com 32 words
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
25632 = 𝟖 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟓 𝒃𝒊𝒕𝒔 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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
5124 = 𝟏𝟐𝟖 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟐 𝒃𝒊𝒕𝒔
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
5128 = 𝟔𝟒 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟑 𝒃𝒊𝒕𝒔
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
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
51216 = 𝟑𝟐 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟒 𝒃𝒊𝒕𝒔
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
21
Caso A: Linha com 32 words
𝑛𝐿𝑖𝑛ℎ𝑎𝑠 =𝑇𝑜𝑡𝑎𝑙𝑊𝑜𝑟𝑑𝑠𝑤𝑜𝑟𝑑𝐿𝑖𝑛ℎ𝑎 =
51232 = 𝟏𝟔 𝒍𝒊𝒏𝒉𝒂𝒔
𝒏𝑩𝒊𝒕𝒔 = 𝟓 𝒃𝒊𝒕𝒔
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
22
Tabela 4 - Taxa de falhas de acesso
Tamanho da Cache
Words por Linha
Quantidade de Acessos
Quantidade de Falhas
Percentual de Falhas
128
4 10000 8681 86.81% 8 10000 8788 87.88% 16 10000 8729 87.29% 32 10000 8748 87.48%
256
4 10000 7488 74.88% 8 10000 7495 74.95% 16 10000 7500 75.00% 32 10000 7475 74.75%
512
4 10000 5067 50.67% 8 10000 4980 49.80% 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
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
23
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
24
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
25
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.
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
26
//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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
27
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
28
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
29
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
30
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
31
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
32
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
33
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
34
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,
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
35
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;
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
36
//---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;
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
37
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; }
Microcontrolador PIC 16F84A -‐ DCA-‐UFRN
38
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.