Buscar

APOSTILA MICROCONTROLADORES

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

APOSTILA MICROCONTROLADORES 
1. Introdução 
O microcontrolador também é chamado de “microcomputador de um só chip” porque 
reúne vários elementos que no caso dos microprocessadores são desempenhados por 
outros circuitos separados(externos) por ex. Memórias(RAM, ROM), temporizadores, 
comunicação serial,timers, conversores A/D e D/A etc. 
 Um microcontrolador inclui todos esses periféricos, mas na maioria dos casos 
são mais restritos, ou seja, endereçam menos memória. O microcontrolador é usado para 
compor dispositivos eletrônicos dedicados de baixo custo e com aplicações objetivas. 
Podemos citar algumas aplicações: 1) Injeção Eletrônica nos automóveis; 2) Controle 
interno de temperatura nos automóveis; 3) Máquinas de lavar roupa; 4)Forno de 
Microondas; 5) Controle de temperatura e alimentação de frangos em um aviário; 6) 
Robótica; entre muitas outras. 
 É inegável a propagação comercial dos microcontroladores nos últimos anos e 
nas diversas áreas: Automotiva, Residencial, Comercial, Industrial e Rural(Agricultura). 
 
2. Compreendendo alguns termos técnicos 
Na informática e na microeletrônica, encontramos alguns termos técnicos em comum 
que devem ser compreendidos para que haja um progresso rápido no aprendizado de 
microcontroladores e microprocessadores. 
 O maior entrave no aprendizado vem do acúmulo de dúvidas. Para um rápido 
desenvolvimento, vamos aprender o significado de alguns termos comuns. 
Termo Homem Máquina 
Dados Informações que utilizamos 
diariamente para nossas 
atividades (tudo o que ouvimos, 
vemos, sentimos, pensamos, 
etc.). 
Informações utilizadas na máquina 
para gerar alguma ação. Podem ter 
diversas origens mais são 
utilizadas e armazenadas na forma 
digital. 
Dispositivos de 
entrada de dados 
Os sentidos que utilizamos para 
captar as informações: olfato, 
paladar, tato e audição. 
A forma como o dado entra na 
máquina: teclado, disquete, etc. 
Dispositivos de 
saída de dados 
As formas como transmitimos 
os dados da nossa mente para o 
meio externo: fala, gestos, 
sinais, escrita, artes, etc. 
A forma como a máquina 
transmite os dados para o meio 
externo: impressora, monitor, 
modem, etc. 
Memória Local do cérebro onde 
guardamos as informações para 
que posteriormente sejam 
processadas. 
Local da máquina onde guardamos 
as informações para que 
posteriormente sejam processadas: 
disquete, HD, memória RAM, etc. 
Endereço de 
memória 
Posição no cérebro onde está a 
informação. 
Posição na memória onde está a 
informação. 
CPU (unidade 
central de 
processamento) 
Local do cérebro responsável 
por tomar as decisões baseadas 
nas informações que dispomos e 
na nossa personalidade. 
Local da máquina que toma 
decisões baseadas nos dados e no 
programa armazenado na 
memória. 
Instrução Ordem dada pelo cérebro para 
executar uma ação: amarrar o 
cadarço, saltar do ônibus, ligar a 
TV, etc. 
Ordem dada pela CPU para 
executar uma ação em função ou 
não dos dados: ligar uma saída se 
a entrada receber um sinal, limpar 
a memória, etc. 
Programa O nosso planejamento é um 
bom exemplo de programa. 
Quando saímos para passear, 
temos uma programação na 
mente que nos conduz a 
executar ações conforme vamos 
recebendo dados do meio 
externo. 
Série de instruções ordenadas de 
tal forma que a máquina gere uma 
resposta complexa: para imprimir, 
é necessário puxar o papel, 
posicionar a cabeça de impressão 
no ponto de início, fluir a tinta, 
deslocar a cabeça de impressão, 
etc. 
Barramento Meio pelo qual a informação é 
transmitida: o som se propaga 
no ar, etc. 
A via pelo qual a informação é 
transmitida. Exemplo genérico: 
para os dados chegarem da 
memória até a CPU, é preciso um 
conjunto de fios chamado 
barramento. 
Largura do 
barramento 
Limite do meio para a 
transmissão das informações. 
Quando você olha por uma 
luneta, você vê apenas uma 
parte do céu. Uma avenida de 3 
faixas permite a passagem 
simultânea de 3 carros. 
A quantidade de vias para a 
transmissão das informações. 
Exemplo genérico: uma via de 8 
bits pode transmitir 8 estados 
lógicos ao mesmo tempo. 
 
3. Iniciando o estudo dos microcontroladores 
 
Processamento 
Os microcontroladores são máquinas capazes de processar informações, como se 
fossem “pequenos computadores”. O processo consiste em ler as entradas, executar uma 
lógica e atualizar as saídas. Isso é feito através das instruções colocadas em ordem pelo 
programador. 
 
 
 
 
 
 
 
 
 
 
 
4. Arquiteturas 
Todos os microcontroladores usam um dos dois modelos de projeto básicos 
chamadosarquitetura Harvard e arquitetura von-Neumann. 
 
 
 
Na arquitetura Von Neumann, a unidade central de processamento busca os 
dados e as instruções na mesma unidade de memória. 
Desvantagens: diminuição da largura de banda (não é possível carregar dados e 
instruções no mesmo ciclo de máquina). 
 
Na arquitetura Harvard, a unidade central de processamento busca os dados e as 
instruções em unidades de memórias diferentes. 
Vantagens: aumento da velocidade de processamento (pode-se ler dados e 
instruções no mesmo ciclo de máquina), possibilidade de diferentes larguras de 
barramentos de dados e instruções. 
 
5. Microcontroladores x Microprocessadores 
Um microcontrolador difere de um microprocessador em vários aspectos. 
Primeiro e o mais importante, é a sua funcionalidade. Para que um microprocessador 
possa ser usado, outros componentes devem-lhe ser adicionados, tais como memória e 
componentes para receber e enviar dados. Em resumo, isso significa que o 
microprocessador é o verdadeiro coração do computador. Por outro lado, o 
microcontrolador foi projetado para ter tudo num só chip. Nenhum outro componente 
externo é necessário nas aplicações, uma vez que todos os periféricos necessários já 
estão contidos nele. Assim, nós poupamos tempo e espaço na construção dos 
dispositivos. 
 
6. Eletrônica Digital 
Algumas instruções encontradas nos programas de microcontroladores dão o mesmo 
resultado que portas lógicas. Sua operação será discutida em seguida. 
 Um sistema digital é um sistema no qual os sinais são compostos por um 
conjunto finito de valores discretos. Isso se contrapõe aos sistemas analógicos, nos 
quais os sinais possuem valores pertencentes a um conjunto infinito, ou seja, contínuo. 
Como exemplo elementar, uma balança digital mede o peso através de sinais discretos 
que indicam quilogramas e/ou gramas; por outro lado, uma balança analógica mede o 
peso através de um sinal correspondente à posição de um ponteiro sobre uma escala. 
 Os sinais digitais são usados no processamento da informação, também chamado 
de processamento de dados ou processamento de sinais, em que substituíram os 
sistemas analógicos anteriores. 
• A representação digital é bem adequada tanto para o processamento 
numérico como para o não numérico de informação. Um exemplo de 
informação digital não-numérica é a linguagem escrita, na qual as letras têm 
valores do alfabeto finito A, B, C,... etc. 
• O processamento da informação pode ser realizado através de um sistema 
para propósitos gerais, por exemplo, um computador, que seja programado 
para uma tarefa de processamento particular, eliminando a necessidade de 
haver um sistema diferente para cada tarefa; 
• O número finito de valores num sinal digital pode ser representado por um 
vetor de sinais com apenas dois valores, sinais binários. Por exemplo, os dez 
algarismos do sistema decimal podem ser representados pelos seguintes 
valores em binário: 
 
 
 Esta representação permite implementações nas quais todos os sinais são 
binários; conseqüentemente, os dispositivos que processam estes sinais são muito 
simples, fundamentalmente, apenas chaves com dois estados: aberto e fechado; 
• Os sinais digitaissão bastante insensíveis a variações nos valores dos parâmetros 
dos componentes e ao ruído elétrico, uma vez que são constituídos de dois 
estados bem definidos, na maioria dos casos 0 V para o estado lógico zero e 5 V 
para o estado lógico um; 
• Os avanços da tecnologia microeletrônica possibilitaram a fabricação de 
sistemas digitais extremamente complexos que são pequenos, rápidos e baratos. 
 O sinal de tensão apresentado na Figura 1 é chamado de sinal analógico. O nome 
deriva do fato de tal sinal ser análogo ao sinal físico que representa. A amplitude de um 
sinal analógico pode ter qualquer valor; isto é, a amplitude de um sinal analógico exibe 
uma variação contínua sobre sua faixa de atuação. A grande maioria dos sinais no 
mundo é analógica. Circuitos eletrônicos que processam tais sinais são conhecidos 
como circuitos analógicos. 
 
 
 Uma forma alternativa de representação de sinais é por meio de uma seqüência 
de números discretizados, cada número representando um valor de sinal em cada 
instante de tempo. O sinal resultante é chamado de sinal digital. Para entender como um 
sinal pode ser representado nessa forma, isto é, como os sinais podem ser convertidos 
da forma analógica para a forma digital, observe a Figura 2. Nela a curva representa um 
sinal de tensão, idêntico ao da Figura 1. Em intervalos iguais no eixo do tempo 
marcamos os instantes t0, t1, t2 e assim por diante. Em cada um desses instantes é 
medida a amplitude do sinal, em um processo conhecido como amostragem. O sinal da 
Figura 2 é definido apenas nos instantes de amostragem; ele já não é mais função 
contínua no tempo, em vez disso é um sinal discreto no tempo. Contudo, visto que a 
amplitude de cada amostra pode ser tomada com valores em uma faixa contínua, sobre o 
eixo v(t), o sinal da Figura 2 é ainda um sinal analógico. 
 
 
 
 Agora, se representarmos a amplitude de cada amostra do sinal na figura anterior 
por um número com dígitos finitos, então a amplitude do sinal não será mais contínua; 
ao contrário, ela será considerada quantizada, discretizada ou digitalizada, Figura 3. 
Então o sinal digital resultante será simplesmente uma seqüência de números que 
representa as amplitudes das sucessivas amostras do sinal. 
 
 
6.1 Sistemas de numeração 
Os sistemas de numeração classificam-se em dois grupos básicos que são os sistemas de 
numeração posicional e os sistemas de numeração não posicional. No sistema 
posicional o valor do dígito depende da posição que o mesmo ocupa no número. 
Quando se considera o número 1987 como exemplo, pode-se afirmar que se o número 
estiver escrito em decimal, pela ordenação dos quatro dígitos, “1o”, “2o”, “3o” e “4o” o 
número 1 não representa uma unidade, mas mil unidades; o número um representaria 
uma unidade somente se estivesse na posição mais à direita, no lugar do sete. O número 
1987 pode ser decomposto como a soma de 1000 (1x103) com 900 (9x102) com 80 
(8x101) com 7 (7x100), ou seja, há um peso para cada posição do número, com o peso 
crescendo da direita para a esquerda em potências de 10, a partir de 100. 
Na representação posicional obtém-se uma forma simplificada de escrita para os 
números. Ao invés de um símbolo para cada número, pode-se representar qualquer 
número com um “alfabeto” restrito de dígitos ou símbolos. O sistema decimal tem um 
“alfabeto” de dez dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Sendo que qualquer número pode 
ser representado com estes dígitos. Da mesma forma, podemos definir um sistema 
binário, ou sistema de base dois, como aquele que tem um “alfabeto” de dois dígitos: 0 
e 1. Analogamente a base 10, na qual o peso das posições é potências de 10, na base 2 
os pesos são potências de 2. O mesmo raciocínio pode ser utilizado para outras bases 
como apresentado nos exemplos a seguir: 
Exemplo 1: Sistema Posicional Decimal – Base 10 
“Alfabeto” = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 
 
Exemplo 2: Sistema Posicional Binário – Base 2 
“Alfabeto” = {0, 1} 
 
Exemplo 3: Sistema Posicional Octal – Base 8 
“Alfabeto” = {0, 1, 2, 4, 5, 6, 7} 
 
Exemplo 4: Sistema Posicional Hexadecimal – Base 16 
“Alfabeto” = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 
 
 Como sistema de numeração não posicional tem-se o sistema Romano, onde o 
valor dos símbolos não guarda nenhuma relação com a posição destes em um número. 
 
6.2 Mudança de base 
A seguir são apresentados os procedimentos para se obter uma transformação da base 
10 para outra base qualquer ou de uma base qualquer para a base 10. Uma 
transformação entre duas bases deferentes da base 10 pode ser feita passando-se 
intermediariamente pela base 10. 
• Transformação de decimal, base 10, para uma base qualquer: 
Deve-se dividir o inteiro decimal repetidamente pela nova base, para a qual se deseja a 
transformação. A cada divisão deve-se guardar o resto, que será o dígito correspondente 
do alfabeto da nova base. A divisão deve ser interrompida quando o quociente inteiro 
for menor que o divisor. O último quociente e os restos de cada divisão, tomados no 
sentido do último para o primeiro, representam o número transformado, de acordo com 
os exemplos abaixo: 
 
Exemplo 1 – Decimal para a base 5: Transformar (342)10 para a base 5. 
 
 Ressalta-se que o processo de divisões sucessivas é interrompido no instante em que se 
obtém o quociente menor que o divisor. Na última divisão (13÷5) o quociente obtido 2 é 
menor que o divisor 5. Neste instante o processo é interrompido. Lendo no sentido do 
último quociente para o primeiro resto tem-se 2332 e então (342)10 = (2332)5. 
 
Exemplo 2 – Decimal para base 16: Transformar (2798)10 para a base 16. 
 
Para a base 16 é importante ressaltar que 10 equivale a ‘A’, 11 a ‘B’, 12 a ‘C’, 13 a ‘D’, 
14 a ‘E’, 15 a ‘F’. Portanto, (2798)10 = (AEE)16. 
 
Exemplo 3 – Decimal para binário: Transformar (55)10 para a base 2 
 
• Transformação de uma base qualquer para decimal, base 10: 
Neste tipo de transformação deve-se converter cada um dos algarismos que compõem o 
número em seu equivalente decimal, de acordo com a estrutura posicional, e efetuar as 
somas dos números obtidos para obter o número na base decimal. Alguns exemplos são 
apresentados a seguir: 
 
Exemplo 1 – Binário para decimal: Transformar (1101)2 para a base 10. (1101)2 = 
1x23 + 1x22+0x21+1x20 = 8 + 4 + 1 = 13!(1101)2 = (13)10 
Exemplo 2 - Octal para decimal: Transformar (23)8 para a base 10. (23)8 = 2x81 + 
3x80 = 16 + 3 = 19!(23)8 = (19)10 
Exemplo 3 - Hexadecimal para decimal: Transformar (10B5)16 para a base 10. 
(10B5)16 = 1x163 + 0x162 + 11x161 + 5x160 = 4277!(10B5)16 = (4277)10 
 
6.3 Álgebra de Boole 
George Boole (1814-1864), matemático e filósofo britânico, no século XIX investigou 
as leis fundamentais das operações da mente humana ligadas ao raciocínio e criou a 
Álgebra Booleana, base da atual aritmética computacional. O objetivo da Álgebra de 
Boole passa pela definição de uma série de símbolos, com a finalidade de representar 
objetivos ou fenômenos que, encadeados convenientemente, dão lugar a expressões 
matemáticas mais complexas denominadas funções. 
 Enquanto que a álgebra tradicional opera com relações quantitativas, a álgebra 
de Boole opera com relações lógicas. Como exemplo, podemos considerar os 
operadores “ + ” e “ x ”, e verificar que possuem significados diferentes conforme sejam 
utilizados na álgebra tradicional ou na Álgebra Booleana. 
 
 Enquanto que na álgebra tradicional as variáveis podem assumir qualquer valor, 
na álgebra booleana, as variáveis, aqui denominadas por variáveis binárias, apenas 
podem assumir um de dois valores binários, “0” ou “1”. Estes valores binários não 
exprimem quantidades, mas apenas, e somente, estados do sistema. 
 
3.1 – Função lógica binária 
A toda a variável binária, cujo valor depende de uma expressão algébrica, formada por 
outras variáveisbinárias relacionadas por operadores lógicos, dá-se o nome de função 
lógica. Temos como exemplo a equação abaixo, onde Y representa a variável binária 
dependente e a, b e c as variáveis binárias independentes. 
 
 
Tabela verdade 
Para uma função Y = f (a,b, ...) a tabela verdade é um quadro formado por tantas 
colunas quantas são as variáveis binárias independentes, as entradas (a, b, ...), e uma 
última coluna correspondente à variável binária dependente, a saída, Y. 
 O número de linhas de uma tabela verdade é dado por 2N, onde N é o número de 
variáveis binárias independentes, entradas, garantindo assim todas as combinações 
possíveis destas variáveis. 
 A tabela verdade representa o estado da saída, variável binária dependente Y, em 
função das entradas, variáveis binárias independentes. Para todas as combinações 
possíveis de estados das variáveis binárias independentes existe um estado da variável 
binária dependente, ou seja, para toda combinação das variáveis de entrada existe um 
valor, estado, para a variável de saída. Como exemplo, podemos ver a Tabela 3 que 
representa a função lógica binária apresentada anteriormente, Y = f (a, b, c) = a ⋅ b + b ⋅ 
c . 
 O número de entradas é 3 (a, b e c), logo a tabela tem 23 = 8 linhas. 
 
 
6.4 Funções Booleanas básicas 
A seguir são apresentadas as funções Booleanas básicas, suas tabelas verdade, 
símbolos e os diagramas elétricos equivalentes. 
 
a) Função de igualdade 
 
 
b) Função OU (OR) 
 
c) Função E (AND) 
 
d) Função NÃO (NOT) 
 
e) Função NÃO-E (NAND) 
 
f) Função NÃO-OU (NOR) 
 
g) Função OU-EXCLUSIVO (XOR) 
 
 
Conceito de BIT 
Um bit nada mais é que um dígito binário. Semelhante ao sistema de numeração 
decimal em que os dígitos de um número não têm o mesmo valor (por exemplo, os 
dígitos do número decimal 444 são os mesmos, mas têm valores diferentes), a 
significância de um bit depende de sua posição no número binário . Como não há 
sentido falar de unidades, dezenas etc, em números binários, seus dígitos são referidos 
como o bit zero (bit mais à direita), primeiro bit (o segundo da direita), segundo bit, 
terceiro bit, etc. Além disso, uma vez que o sistema binário utiliza dois dígitos apenas (0 
e 1), o valor de um bit pode ser 0 ou 1. 
 
Conceito de BYTE 
Um byte é composto por oito bits agrupados. Se um bit é um dígito, é lógico dizer que 
bytes representam números. Todas as operações matemáticas podem ser realizadas 
sobre eles, os bytes, igualmente aos números decimais. Semelhante a dígitos de um 
número qualquer, os dígitos de um bytes não tem o mesmo significado. O bit mais à 
esquerda tem o maior valor, e é chamado o bit mais significativo (MSB – Most 
Significant Bit). O bit mais à direita tem o menor valor e por isso é chamado o bit 
menos significativo (LSB – Least Significant bit). 
 Os 8 bits de um byte podem assumir valores 0 ou 1, independentemente. Assim, 
esses 8 bits podem ser combinados em 256 formas diferentes, o maior número decimal 
que pode ser representado por um byte é 255. 
 Um nibble é referido como metade de um byte. Dependendo de que metade do 
byte estivermos falando (esquerdo ou direito), dizemos que há 'alto' e 'baixo' nibble, 
respectivamente. Os conceitos de bit, byte e nibble podem ser entendidos observando a 
figura a seguir. 
 
 
7. Memórias 
A memória é a parte do microcontrolador utilizado para armazenamento de dados. 
A maneira mais fácil de explicar é compará-la com um armário de arquivo com muitas 
gavetas. Suponha-se, as gavetas estão claramente identificadas para que seu 
conteúdo possa ser encontrada com facilidade através da leitura da etiqueta na 
parte frontal da gaveta. 
 Da mesma forma, cada endereço de memória corresponde a um local de 
memória. O conteúdo de qualquer lugar pode ser acessado e lido pelo seu 
endereçamento. Memória pode ser escrita ou lida. Na figura 4 temos um representação 
de uma memória que pode ser escrita ou lida. Do lado esquerdo, temos o endereço de 
cada posição de memória, do lado direito, temos os dados. Ao endereçar uma posição 
específica, a linha de dados apresenta o conteúdo presente naquela posição endereçada. 
Esse conteúdo pode ser lido para ser usado em algum processamento, ou ainda, 
esse conteúdo pode ser alterado mediante a escrita de um novo dado naquele endereço. 
 
Figura 4 
Existem vários tipos de memória dentro do microcontrolador, tais como: 
• Memória apenas de leitura (Read Only Memory-ROM) - é usado para 
salvar permanentemente o programa sendo executado. O tamanho do programa 
que pode ser escrito depende do tamanho da memória. Microcontroladores 
atuais costumam usar 16 bits de endereçamento, o que significa que eles 
sãocapazes de endereçar até 64 Kb de memória, ou seja, 65.535 localidades. 
Para iniciantes, o programa irá raramente exceder o limite de várias centenas de 
instruções. Existem vários tipos de ROM. 
• Memória Flash- Este tipo de memória foi inventado nos anos 80 nos 
laboratórios da Intel e foi apresentada como o sucessor da EPROM UV(tipo de 
memória ROM que usa luz ultravioleta para ser apagada). Como o 
conteúdodessa memória pode ser escrito e apagado praticamente um número 
ilimitado de vezes, microcontroladores com memória Flash ROM são ideais 
para a aprendizagem, experimentação e produção em pequena escala. 
Devido à sua grande popularidade, a maioria dos microcontroladores são 
fabricados com tecnologia flash. Então, se você estiver pensando em 
comprar um microcontrolador, o tipo é definitivamente o Flash. 
• Memória de acesso aleatório (Random Access Memory-RAM) - Uma 
vez que a alimentação é desligada, o conteúdo da RAM é apagado. Ela é usada 
para armazenar dados temporários e resultados intermediários criados e 
utilizados durante a operação do microcontrolador. Por exemplo, se o 
programa realiza uma adição (de tudo), é necessário ter um registro que 
representa o que na vida cotidiana é a chamada "soma". Por esta razão, 
podemos ter um dos registros de memória RAM chamado de 'soma' e usado para 
armazenar os resultados da adição. 
• Memória ROM eletricamente apagável e programável (Electrically 
Erasable Programable ROM-EEPROM) – Lê-se E 2 PROM. O conteúdo da 
EEPROM pode ser alterado durante a operação (semelhante à RAM), mas é 
permanente, mesmo após a perda de alimentação (similar a ROM). Assim, 
EEPROM é freqüentemente usado para armazenar valores, criados durante a 
operação, que deve ser permanentemente guardados. Por exemplo, se você 
criar uma fechadura eletrônica ou um alarme, seria ótimo que este 
permitisse ao usuário criar e digitar uma senha. Mas é inútil se essa 
senha for perdida cada vez que a alimentação se apaga. A solução ideal 
é um microcontrolador com uma EEPROM embutida. 
 
8. Registradores 
Um registrador é responsável por memorizar o estado de um byte. Em um 
microcontrolador há vários registradores usados para armazenar as informações do 
programa. Ele verifica o estado das entradas ou saídas, e o resultado é de uma operação 
matemática. São registradores de Função especial (SFR), cujas funções são pré-
determinadas pelo fabricante: temporizadores, conversores A/D e osciladores (descritos 
nas próximas seções). 
 
 
9. Portas de entrada e saída (I/O) 
Os microcontroladores possuem um ou mais registradores de funções especiais 
chamadas de PORT conectados aos seus pinos de I/O. 
 
 
10. Interrupções 
A maioria dos programas usam interrupções em sua execução normal. O objetivo 
do microcontrolador é principalmente responder às mudanças no seu entorno. Em outras 
palavras, quando um evento ocorre, o microcontrolador faz alguma coisa. Por exemplo, 
quandovocê aperta um botão em um controleremoto, o microcontrolador irá registrá-lo 
e responder pela alteração de um canal, aumentar o volume para cima ou para 
baixo, etc. Se o microcontrolador passasse a maior parte de seu tempo 
infinitamente verificando alguns botões por horas ou dias, isso não seria prático. É por 
isso que o microcontrolador possui uma técnica de resposta a certos estímulos. 
Em vez de verificar cada pino ou bit constantemente, o microcontrolador delega 
essa função a circuitos específicos que só responderão quando algo específico 
acontece, por exemplo, o pressionamento de um botão. 
O sinal que informa a unidade de processamento central quando um evento como 
esse ocorre é chamado de uma interrupção. Quando a interrupção ocorre, o 
microcontrolador para de executar o programa e atende aquele evento em especial. As 
interrupções são recursos extremamente poderosos e práticos para o 
desenvolvimento de sistemas microcontrolados. 
 
 
11. Unidade Central de Processamento (CPU) 
Como o próprio nome sugere, esta é uma unidade quemonitora e controla todos os 
processos dentro do microcontrolador. É constituída por várias subunidades, das 
quais as mais importantes são: 
• Decodificador de Instruções (Instruction Decoder) é uma parte da 
eletrônica embutida no microcontrolador que decodifica as instruções do 
programa e ativa outros circuitos com base nisso. O "conjunto de instruções" que 
é diferente para cada família de microcontroladores expressa a capacidade do 
circuito; 
• Unidade Lógica Aritmética (ULA) realiza todas as operações matemáticas 
e lógicas sobre os dados; 
• Acumulador é um registrador de uso especial intimamente relacionada com a 
operação da ULA. É uma espécie de mesa de trabalho usada para 
armazenar todos os dados em que uma operação deve ser realizada 
(transferência, adição/mover etc.) Ele também armazena os resultados 
prontos para uso no tratamento posterior. Um dos SFR, chamado de 
Registrador de Status (Status Register), está intimamente relacionado com o 
acumulador. Ele mostra, em determinado momento o 'status' de um número 
armazenado no acumulador (se número é maior ou menor que zero, etc.). O 
acumulador é também chamado de registrador de trabalho e está marcado como 
registrador W, ou apenas W. 
Na figura 5 podem ser vistas as subunidades da CPU citadas. 
 
Figura 5. 
 Na figura 5, temos setas representando os fios que levam a informação de 
endereçamento de memória (Address), dos dados (Data) e das linhas de controle 
(Control Line). Cada seta, dependendo do tipo de microcontrolador, pode conter 8, 16 
fios ou até mais. Cada conjunto de fios que carregam uma informação do mesmo tipo é 
chamado de Barramento. Assim, temos os barramentos de endereço, de dados e 
controle. A constituição destes barramentos é a seguinte: 
• Barramento de Endereços, unidirecional, onde o CPU coloca o endereço de memória 
ou do dispositivo de onde quer ler ou onde quer escrever (p. ex. no Z80 é constituído 
pelas linhas A0..A15); 
• Barramento de Dados, bidirecional, onde circulam os dados resultantes da 
comunicação de ou para o CPU (p. ex. linhas D0..D7 no Z80); 
• Barramento de Controle, bidirecional, que contém os sinais necessários para uma 
correta implementação do protocolo de comunicação (p. ex. no Z80 as linhas WR, RD, 
MREQ, IOREQ, etc.). 
 
11.1 Barramento de DMA (Direct Memory Access) 
Na maior parte dos computadores, a transferência de dados entre os dispositivos de E/S 
e a memória pode ser feita sem a intervenção direta do CPU, libertando-o assim para 
outras tarefas que podem ser feitas em paralelo. Esta transferência de informação, que 
utiliza controladores específicos, é feita através do barramento de acesso direto à 
memória. 
12. Oscilador 
Para que o microcontrolador execute as instruções armazenadas em sua memória, 
é necessário a presença de um sinal pulsante, normalmente uma onda quadrada, 
para que as instruções sejam executadas acada pulso. Esse sinal é chamado de sinal de 
relógio (clock), e é proveniente de um circuito oscilador. O circuito oscilador é 
normalmente configurado de modo a utilizar um cristal de quartzo ou ressonador 
cerâmico, conectado a dois pinos do microcontrolador, para a estabilidade de 
freqüência, mas também pode operar como um circuitostand-alone (como um oscilador 
RC interno). É importante dizer que as instruções não são executadas ao ritmo imposto 
pelo oscilador em si, mas várias vezes mais lento. Isso acontece porque cada instrução é 
executada em várias etapas. Em alguns microcontroladores, o mesmo número de ciclos 
é necessário para executar todas as instruções, enquanto em outros, o número de ciclos é 
diferente para diferentes instruções. Assim, se o sistema usa um cristal de quartzo com 
uma frequência de 20 Mhz, o tempo de execução de uma instrução não é 50ns, mas 200, 
400 ou 800 ns, dependendo do tipo de microcontrolador! 
13. Circuito de alimentação 
Há duas coisas que merecem atenção sobre o circuito de alimentação do 
microcontrolador: 
• Brown out é uma condição potencialmente perigosa que ocorre no momento em que 
o microcontrolador é desligado ou quando a tensão cai para um valor mínimo 
devido a ruído elétrico. Como o microcontrolador é composto por vários circuitos, com 
diferentes níveis de tensão de funcionamento, este estado pode provocar um 
funcionamento fora de controle. Para evitar isso, normalmente o microcontrolador 
possui um circuito de reset que reinicia todos os circuitos assim que o 
microcontrolador incorre em um estado de emergência. 
• Pino de reset é normalmente marcado como MCLR (Master Clear Reset). É 
utilizado para reiniciar o microcontrolador atravésda aplicação de uma lógica de zero 
(0) ou um (1) nesse pino, o que depende do tipo do microcontrolador. 
14. Temporizadores/Contadores 
 O oscilador do microcontrolador utiliza cristal de quartzo para o seu 
funcionamento. Mesmo não sendo a solução mais simples para a obtenção de um sinal 
de relógio, existem muitas razões para usá-lo. A freqüência do oscilador é precisamente 
definida e muito estável, de modo que gera pulsos sempre da mesma largura, o que os 
torna ideais para a medição do tempo. Tais osciladores também são usados em relógios 
de quartzo. Se é necessário medir o tempo entre dois eventos, basta contar os 
pulsos gerados por este oscilador. Isto é exatamente o queo temporizador, ou timer, faz. 
 A maioria dos programas usam este cronômetro eletrônico em miniatura. Estes 
são geralmente registradores de funções especiais de 8 ou 16-bits, cujo conteúdo 
é automaticamente incrementado por cada impulso vindodo circuito oscilador. Uma vez 
que um registrador é completamente carregado, uma interrupção pode ser gerada. 
 Se o timer usa um oscilador de quartzo para o seu funcionamento interno, então 
ele pode ser usado para medir o tempo entre dois eventos (se o valor do registrador é T1 
no momento em que se inicia a medição, e T2, no momento em que termina, então o 
tempo decorrido é igual a o resultado da subtração T2-T1). Se os registradores 
usam pulsos provenientes de fontes externas conectados a um pino do 
microcontrolador, então o timer é transformado em um contador. Esta é apenas uma 
explicação simples da operação em si. No entanto, é um pouco mais complicado na 
prática. 
 
15. FUNÇÕES ESPECIAIS EM MICROCONTROLADORES 
15.1 Conversores (A/D) 
Sinais externos normalmente são fundamentalmente diferentes daqueles que o 
microcontrolador entende (zeros e uns) e têmde ser convertidos em valores 
compreensíveis para o microcontrolador. Um conversor analógico/digital é um circuito 
eletrônico que converte os sinais contínuos para discretos números digitais. Em outras 
palavras, este circuito converte um valor analógico em um número binário e o transfere 
para a CPU para processamento adicional. Este módulo é utilizado para a medição de 
tensão analógica em um pino de entrada (valor analógico). Na figura 6, por exemplo, 
temos uma representação do conversor A/D sendo controlado pela CPU. O gráfico 
ao lado mostra a relação de conversão de sinais analógicos de 0V até 5V em 
números binários que vão de 0x000 a 0x3FF. 
 
Figura 6. Operação de um conversor analógico/digital 
 
15.2 Geradores de PWM 
Modulação por largura de pulso. Permite simular uma saída analógica através de pulsos 
digitais rápidos e de tamanho regulável. 
 
16. Conhecendo o PIC16F877 (Microcontrolador de 8 bits da Microchip Co.) 
 
O microcontrolador PIC16F877 pode ser encontrado 
em diversos encapsulamentos: 
 
 
 
 
Este modelo (16F877) possui 40 pinos (veja 
imagem ao lado para o encapsulamento PDIP), sendo 
que destes 40 pinos, 7 pinos são usados para 
alimentação e controle do mesmo. 
PINO 1:Suporta 3 níveis de tensão. Quando este pino estiver recebendo 5V, o 
microcontrolador estará em condições de executar o programa. Quando este pino 
receber 0V (GND), o PIC será “resetado”. Quando este pino receber tensão de 13,4V, o 
PIC irá entrar em modo gravação. 
PINOS 11 e 32: Alimentação (máximo 5V) 
PINOS 12 e 31: Referência (GND) 
PINOS 13 e 14: Onde estará ligado o ressonador externo (cristal de clock). 
Os demais pinos são conhecidos por I/Os (lê-se Aiôus, e vem do inglês Inputs/Outputs, 
que significa entradas/saídas). Estas I/Os são agrupadas em PORTs(portos), de no 
máximo 8 pinos cada (limitação pois o componente possui um núcleo de 8 bits). 
 Há um total de 33 I/Os disponíveis, que podem ser configuradas como entradas 
ou saídas em tempo de execução. 
 Quando um pino é configurado como ENTRADA, ele pode ser conectado 
a algum sensor para detectar sinais digitais através de variação da tensão de 0 e 5V. 
Quando um pino é configurado como saída, o programa poderá acioná-lo, e com 
isso gerar uma corrente baixa (max. 20 mA) com os níveis de tensão de 0V ou 5V. 
Alguns pinos, porém, possuem outras funções além de serem entradas ou saídas digitais. 
Por exemplo, no diagrama ao lado podemos observar que os pinos 2 a 10 (exceto 
o pino 6) são entradas analógicas, e podem ser usados para detectar uma variação de 
tensão entre 0V e 5V, transformando esta 
variação em uma informação binária de 10bits. 
 Os pinos 39 e 40 também são pinos usados 
na gravação do microcontrolador, e os pinos 25 
e 26 são usados para comunicação SERIAL 
padrão RS232. Os pinos 16 e 17 são pinos 
geradores de pulso (PWM), que é similar a uma 
saída analógica. Muito útil para controle de 
velocidade de motores, por exemplo. O pino 6 é 
um pino usado para contagem rápida. 
 Tradicionalmente conhecemos os pinos do 
microcontrolador NÃO PELO SEU NÚMERO, 
mas sim pela sua IDENTIFICAÇÃO DE I/0. 
Os pinos são agrupados em PORTs, sendo: 
PORTa (com 6 I/Os disponíveis) PORTb (com 8 I/Os disponíveis) 
PORTc (com 8 I/Os disponíveis) PORTd (com 8 I/Os disponíveis) 
PORTe (com 3 I/Os disponíveis) 
Observações importantes: 
A letra F (PIC16F877) identifica que o microcontrolador em questão utiliza a tecnologia 
FLASH, ou seja, pode ser regravado. Alguns modelos (que utilizam a letra C no nome, 
como o PIC16C877) só podem ser gravados uma única vez e são mais baratos. 
 Outros modelos da família 16 (como o PIC16F870, PIC16F628, 
PIC16F84, ....) possuem variações em termos de recursos (com mais ou com 
menos pinos de I/Os, entradas analógicas, memória ROM, memória RAM, etc...), mas 
todos podem ser programados com a mesma linguagem. Modelos da família 18 são 
mais rápidos e um pouco mais caros, continuando a ser de 8 bits. 
 Modelos da família 24 são de 16 bits, e indicados para aplicações que exijam 
mais poder de processamento. 
 Os microcontroladores PIC são indicados para aplicações mais simples, que não 
necessitem de grande volume de dados manipulados, eque não necessitem 
processamento em tempo real de alta performance. 
 Quando transferimos um programa para o microcontrolador, este deve 
estar em linguagem de máquina (ARQUIVO HEX), e será armazenado na memória 
ROM do microcontrolador. Esta memória não será apagada até que outro programa 
seja enviado, mesmo que a alimentação de energia elétrica seja desativada. 
 
 
 
 
 
 
 
 
 
 
 
Descrição detalhada do PIC16F877 
Desenvolvido pela MICROCHIP 
(www.microchip.com) 
CPU RISC de alta performance, 
baseado em uma arquitetura 
Haward modificada. Suas 
características mais significativas são: 
• Opera com somente 35 instruções 
(ASSEMBLY) 
• Operações com duração de um 
único ciclo, exceto pelas instruções 
de desvio que consomem dois ciclos 
de máquina. Cada ciclo equivale a 4 
pulsos do circuito oscilador (clock) 
• Operação em até 20 MHz (20 
milhões de pulsos de clock por 
segundo = 5 milhões de ciclos de 
máquina por segundo = 200 ns por 
ciclo) 
• 8 KWords de FlashROM (Word com 14 bits), suportando mais de 8 mil instruções em 
um programa. 
• 368 Bytes de memória RAM 
• 256 Bytes de memória EEPROM (regravável via software e não volátil) 
• Capacitado para interrupções com 14 fontes diferentes (timer, contagem, pulso 
externo, serial, etc...) 
• Pilha física com 8 níveis de profundidade 
• Endereçamento direto, indireto e relativo 
• Power-on Reset, power-on tiimer, oscillator start-up timer 
• Watch-dog Timer baseado em oscilador RC interno para tratar um possível 
travamento de software 
• Opção para proteção de código executável (Ativando-a, não é mais possível se ler a 
memória, evitando a duplicação do código em outro microcontrolador) 
• Modo SLEEP para poupar energia 
• Opções diferentes para circuito oscilador 
• Tecnologia CMOS FLASH/EEPROM de baixo consumo e alta velocidade, permitindo 
armazenamento não volátil na memória EEPROM interna em tempo de execução. 
• Programação ICSP (recurso embutido de gravação) através de dois pinos, 
facilitando a gravação do microcontrolador. 
• Capacidade opcional de gravação com tensão de 5V (LVP) 
• Opção de depuração in-circuit através de dois pinos 
• Tensão de trabalho de 2 a 5.5V 
• Baixo consumo de energia (abaixo de 1mA) 
• 3 timers (2 de 8 bits e 1 de 16 bits) 
• 8 canais analógicos para um AD de 10 bits 
• Porta serial sincrona com SPI (master) e I2C(master/slave) 
• Porta serial universal (RS232 ou RS485) com buffer via hardware (2 bytes) 
• Porta paralela escrava de 8 bits 
• Detector Brown-out 
• 33 pinos de entrada/saída configuráveis. 
Descrição dos pinos (muitos pinos possuem várias funções, não significando que as 
funções possam ser exercidas ao mesmo tempo): 
1. MCLR: Master Clear – Quando em nível 
baixo (0V), define situação de RESET. 
Quando em nível alto (5V), determina 
programa em execução. VPP: Tensão de 
programação – Quando este pino estiver em 
13.4V, o microcontrolador entra em modo 
gravação, permitindo a transferência de um 
programa via ICSP 
2. RA0– Entrada / saída digital. AN0– Entrada 
analógica canal 0 para o ADC interno. 
3. RA1 – Entrada / saída digital. AN1 – 
Entrada analógica canal 1 para o ADC interno. 
4. RA2 – Entrada / saída digital. AN2– Entrada 
analógica canal 2 para o ADC interno. Vref-- 
Uso do pino para definir a referência negativa 
para o conversor AD. 
5. RA3 – Entrada / saídadigital. AN3 – 
Entrada analógica canal 3 para o ADC interno. 
Vref+- Uso do pino para definir a referência 
positiva para o conversor AD. 
6. RA4 – Entrada / saída digital. TOCKI – 
Contador rápido 
7. RA5 –Entrada / saída digital. AN4 – Entrada 
analógica canal 4. SS – Slave Select para 
porta serial síncrona 
8. RE0 – Entrada / saída digital. RD – 
Entrada de controle de leitura para porta 
paralela escrava. AN5 – Entrada analógica 
canal 5. 
9. RE1 – Entrada / saída digital. WR – 
Entrada de controle de gravação para porta 
paralela escrava. AN6 - Entrada analógica canal 
6. 
10. RE2 – Entrada / saída digital. CS – 
“Chip Select” para porta paralela escrava. 
AN7– Entrada analógica canal 7. 
11. VDD – Alimentação (preferência 3V a 5V) 
12. VSS –Referência (0V / GND) 
13. OSC1/CLKIN – Pino para ligação do 
circuito oscilador externo (entrada). Usado em 
conjunto com o pino OSC/CLKOUT. 
Recomendado usar cristal de 4 a 20 MHz 
14. OSC2/CLKOUT – Pino para ligação do 
circuito oscilador externo (saída). 
15. RC0 – Entrada / saída digital. T1OSO 
– Saída do oscilador do TIMER1. T1CKI – 
Entrada de clock para TIMER1. 
16. RC1 – Entrada / saída digital. T1OSI – 
Entrada do oscilador do TIMER1. CCP2 – 
Entrada de captura 2, saída de comparador 2 ou 
PWM 2. 
17. RC2 – Entrada / saída digital. CCP1 – 
Entrada de captura 1, saída de comparador 1 ou 
PWM 1. 
18. RC3 – Entrada / saída digital. SCK/SCL 
– Entrada ou saída de sinal de clock serial 
síncrono para SPI e I2C. 
19. RD0 – Entrada / saída digital. PSP0 – Pino 
0 da porta paralela escrava. 
20. RD1 – Entrada / saída digital. PSP1 – Pino 
1 da porta paralela escrava. 
21. RD2 – Entrada / saída digital. PSP2 – Pino 
2 da porta paralela escrava. 
22. RD3 – Entrada / saída digital. PSP3 – Pino 
3 da porta paralela escrava. 
23. RC4 – Entrada / saída digital. SDI – 
Entrada de dados em SPI. DAS – Entrada/saída 
de dados em modo I2C. 
24. RC5 –Entrada / saída digital. SD0 – Saída 
de dados SPI. 
25. RC6 – Entrada / saída digital. TX – Pino 
para transmissão serial assíncrona. CK – 
Clock para transmissão síncrona. 
26. RC7 – Entrada / saída digital. RX – Pino 
para recepção serial assíncrona. DT – Dados da 
serial síncrona. 
27. RD4 – Entrada / saída digital. PSP4 – Pino 
4 da porta paralela escrava. 
28. RD5 – Entrada / saída digital. PSP5 – Pino 
5 da porta paralela escrava. 
29. RD6 – Entrada / saída digital. PSP6 – Pino 
6 da porta paralela escrava. 
30. RD7 – Entrada / saída digital. PSP7 – Pino 
7 da porta paralela escrava. 
31. VSS - Referência (0V / GND) 
32. VDD – Tensão de alimentação (mesma que 
pino 11) 
33. RB0 – Entrada / saída digital. INT – 
Entrada de sinal de interrupção via hardware. 
34. RB1 – Entrada / saída digital. 
35. RB2 - Entrada / saída digital. 
36. RB3 – Entrada / saída digital. PGM – 
Entrada de sinal para gravação em baixa tensão 
(5V) 
37. RB4 – Entrada / saída digital. 
38. RB5 – Entrada / saída digital. 
39. RB6 – Entrada / saída digital. PGC – 
Clock para programação ICSP ou pino para 
depuração. 
40. RB7 – Entrada / saída digital. PGD – 
Dados para programação ICSP ou pino para 
depuração. 
_____________________________________________________________________________________ 
Glossário de termos relacionados ao microcontrolador PIC16F877 
PORT :Agrupamento de pinos. Ex : PORT A : Pinos RA0 a RA5. PORT B : Pinos RB0 a RB7. 
PWM : Modulação por largura de pulso. Permite simular uma saída analógica através de pulsos digitais rápidos e de 
tamanho regulável. 
ADC :Conversor digital / analógico. 
ICSP :Recurso de programação serial embutida, permitindo que um gravador seja construído com custo relativamente 
baixo. 
RAM : Memória de acesso aleatório, volátil e de alta velocidade de acesso. 
ROM : Memória de programa, gravada quando se transfere o programa para o microcontrolador. 
EEPROM :Memória fixa que pode ser gravada e apagada em tempo de execução. 
SERIAL :Dispositivo de comunicação onde um bit é enviado de cada vez. 
I2C : Padrão de comunicação serial desenvolvido pela PHILIPS. 
SPI : Serial Peripheral Interface – Interface periférica serial : Padrão de comunicação serial que usa 4 fios. 
 
17. PROGRAMAÇÃO DE MICROCONTROLADOR 
 
Antes de começarmos a estudar o PIC é necessário entendermos como é feita a 
programação do mesmo e como é feita a transferência de arquivos para que o mesmo 
funcione conforme queremos. 
 
 Para programarmos o Pic temos que seguir os passos descritos conforme a figura 
acima: 
• 1o Passo deve-se gerar um arquivo fonte com as instruções do PIC, estas instruções 
podem ser escritas em qualquer editor de texto, mas quando for salvá-lo deve ter a 
extensão <arquivo>.ASM, isto significa que o programa foi editado em assembler. 
• 2o Passo, abre-se o programa chamado MPASM, fornecido gratuitamente pela 
Microchip, este programa irá converter o programa editado em assembler em: 
<arquivo>.OBJ → É arquivo compilado. 
<arquivo>.LST→ É a listagem do arquivo compilado. 
<arquivo>.ERR→ Erros de compilação. 
<arquivo>.HEX→ Gera o arquivo executável no formato Intel Hex. 
 Quando solicitamos ao MPASM ele gera todos os arquivos acima 
automaticamente e grava, isto ocorre caso não haja nenhum erro de programação. Se 
houver erro deve-se voltar ao programa <arquivo>.ASM e arrumar o mesmo. 
• 3o Passo, gravação no PIC, para gravar o <arquivo>.HEX é necessário ter 
programador/Hardware tipo(PICStart, PICLab, PICFly, etc) e um programa que 
faça a interface com este programador. 
 
A fim de que o microcontrolador funcione adequadamente é necessário fornecer: 
• Alimentação elétrica; 
• Sinal de reset, e 
• Sinal de clock. 
 Mesmo que o PIC16F877 possa operar em tensões de alimentação diferentes, 
uma fonte de alimentação DC de 5V é a mais adequada. O circuito mostrado na figura 
abaixo utiliza um circuito integrado de três terminais LM7805, um regulador positivo 
que oferece alta qualidade de estabilidade de tensão e corrente suficiente para permitir 
que o microcontrolador e periféricos eletrônicos funcionem normalmente (o suficiente, 
aqui, significa 1A). 
 Para que o microcontrolador possa operar corretamente, uma lógica (VCC) deve 
ser aplicado sobre o pino de reset (pino 1). O botão conectando o pino MCLR ao GND 
não é necessário. No entanto, é quase sempre fornecido, pois permite que o 
microcontrolador seja resetado manualmente, fazendo com que este retorne às 
condições normais de funcionamento, caso algo dê errado. Ao pressionar este botão, o 
pino é levado a 0V, o microcontrolador é reiniciadoe começa a execução do programa 
desde o início. Um resistor de 10K é usado para permitir que o pino MCLR vá a 0V, 
através do botão, sem curto-circuitar com o nível de 5V DC. Esse resistor é chamado de 
resistor de “pull-up”, pois é conectado entre o VCCe o pino. 
 Mesmo que o microcontrolador possua um oscilador interno, ele não pode 
operar sem componentes externos que estabilizam o seu funcionamento e determinem 
sua freqüência (velocidade de operação do microcontrolador). Dependendo do elemento 
em uso para estabilizar a frequência, bem como suas freqüências, o oscilador 
pode operar em quatro modos diferentes: 
• LP - Cristal de Baixa Potência; 
• XT - Cristal/Ressonador; 
• HS - Cristal de Alta Velocidade e 
• RC - Resistor/Capacitor. 
 Quando o cristal de quartzo é utilizado para a estabilização da freqüência, 
o oscilador funciona com uma frequência precisa, que não é afetado por 
mudanças na temperatura e tensão de alimentação. Esta frequência é geralmente 
indicada na embalagem do cristal. Além do cristal, os capacitores C1 e C2 
também devem ser conectadosconforme esquema abaixo. Os valores previstos para 
C1 e C2 na tabela a seguir devem ser considerados como uma recomendação e não 
como uma regra rígida. 
 
 
 
17.1 Linguagem C 
Quatro elementos estão presentes em um programa C: 
• Comentários 
• Diretivas de compilação 
• Definições de dados 
• Blocos com instruções e funções 
Modelo básico 
#include<....> Diretivas de compilação 
#fuses...... 
 
// comentário ocupando uma linha Comentários 
 
/*comentários entre ‘/ *’e ‘*/’ 
podem ocupar mais de 
uma linha 
*/ 
 
char i , j ; Variáveis 
floatTempo; 
 
void main() 
{ 
 instruções do programa principal 
} 
void delay() 
{ 
 instruções da função (rotina) delay 
} 
• Comentários são informações anexadas ao programa fonte (*) que permitem ao 
programador ou outros entenderem o significado do que esta sendo feito. 
• Diretivas de compilação são instruções para o compilador, e não para o 
programa que será gerado. Um bom exemplo é a diretiva que inclui no processo 
de compilação as definições do chip. #include <16F84.H> 
• Indicador de fim de instrução. O compilador C não é um compilador de linha, 
como o assembler. O compilador C procura o sinal de que a instrução ou o bloco 
de instruções já acabou. Este sinal é o “ponto e virgula” para uma instrução ou o 
‘ } ‘ para o bloco. 
• Definição de variáveis, constantes e identificadores. Todas as variáveis e 
constantes usadas no programa devem ser devidamente definidas, com um nome 
e um tipo. O mesmo vale para identificadores de funções e rotinas. 
o Os dados básicos podem ser de 8, 16 e 32 bitsde comprimento, e devido 
as características peculiares dos microcontroladores,variáveis de 1 bit 
também podem ser 
o definidas. 
o Variáveis: tamanho faixa 
" variável de 8 bits: CHAR ( de 0 à 255) 
" variável de 16 bits: LONG INT ( de 0 à 65535 * ) 
" variável de 32 bits: FLOAT (____________________________) 
" variável de 1 bit: SHORT ( pode assumir 0 ou 1) 
IMPORTANTE: O compilador diferencia letras minúsculas de maiúsculas. 
17.2 Linguagem assembly 
"Assembly" significa montagem. "Assembler" significa montador. Montagem é o 
ato de transformar uma seqüência de código fonte (texto) em código objeto (linguagem 
de máquina), e montador é o programa que faz isso. 
Observe no diagrama abaixo que o PROGRAMADOR escreve uma lista de 
comandos em forma de texto, onde cada linha realiza uma função específica. 
No entanto, para o microcontrolador não entende estes comandos em modo texto. 
Eles precisam antes ser traduzidos para uma linguagem binária (linguagem de máquina), 
e isso é feito pelo programa montador (ASSEMBLER). 
 
 
Programar diretamente em linguagem de máquina até é possível, mas é muito, mas 
muito mais difícil do que programar em assembly. 
Usando esta linguagem e um programa montador, o programador não escreve em 
linguagem de máquina, e sim em uma linguagem textual, facilitando a construção dos 
programas. Embora fique mais fácil do que programar direto em linguagem de máquina, 
programar em ASSEMBLY ainda é uma das formas mais "difíceis" de programação, 
sendo conhecida como a linguagem de programação de "mais baixo nível". 
O arquivo fonte do diagrama acima (aquela lista de comandos digitada pelo 
programador) é composta de instruções (mnemônicos), parâmetros, rótulos, 
comentários e diretivas, e após são transformados em linguagem de máquina por um 
programa montador. 
Vamos conhecer cada um destes componentes do programa. 
INSTRUÇÃO : É o nome dado a uma operação que o microcontrolador pode 
realizar. Por exemplo, se o microcontrolador pode realizar a soma de dois valores, 
dizemos que existe no mínimo uma instrução para soma. No caso do microcontrolador 
PIC, as instruções que realizam soma são duas, a ADDWF e a ADDLW. Você consegue 
descobrir que instruções estão disponíveis para programação assembly no datasheet do 
microcontrolador em questão. 
MNEMÔNICO : É uma representação textual de uma instrução. As instruções 
são, na verdade, códigos binários, e para serem entendidos pelos programador devem 
ser representados na forma textual. Se os mnemônicos não fossem utilizados, teríamos 
que programar assembly utilizando códigos numéricos difíceis de memorizar. Desta 
forma, uma das instruções de adição citadas anteriormente possui o mneumônico 
ADDWF, e sua representação binária é 000111xxxxxxxx onde x . 
PARÂMETROS : São as informações manipuladas por uma instrução. Isso é 
necessário sempre que precisarmos informar à instrução quais os elementos envolvidos 
na operação. Por exemplo, se desejarmos somar dois valores, a instrução poderá ser 
ADDWF ou ADDLW, mas os valores a serem somados também deverão ser 
informados, sendo estes últimos os que chamamos de "parâmetros." 
 
DIRETIVAS : São linhas que determinam como o programa montador irá 
trabalhar. Não geram efeito direto no código binário gerado. Por exemplo, a diretiva 
LIST p=16F877 determina qual o microcontrolador que será usado. 
RÓTULOS : São nomes dados as linhas do programa, e servem para que em uma 
instrução de desvio possa se determinar o ponto para onde se deseja ir no programa. Os 
rótulos sempre são alinhados na coluna 0 (sem espaços antes do mesmo), enquanto que 
as instruções devem ser escritas após uma margem (obrigatoriamente após a coluna 0). 
COMENTÁRIOS : São trechos de texto escritos após um sinal de ponto e vírgula 
(;). São úteis para que possamos adicionar pequenos lembretes no programa, facilitando 
a manutenção futura. Não interferem no tamanho do programa binário gerado. 
Outros termos importantes : 
MONTADOR : É o programa que transforma um programa fonte assembly em 
um programa executável. Um exemplo é o MPASM, que faz parte do MPLAB, uma 
ferramenta de desenvolvimento distribuída pela MicroChip (fabricante dos 
microcontroladores PIC) 
 
AS INSTRUÇÕES 
Por se tratar de um microcontrolador RISC, o PIC oferece um número reduzido de 
instruções. No entanto, ainda podemos dividir as instruções utilizadas pela família 16 
dos microcontroladores PIC em 6 grupos : 
• Instruções para manipulação de bytes de memória (B) 
• Instruções para manipulação de bits de memória (b) 
• Desvios incondicionais (Di) 
• Desvios condicionais (D) 
• Instruções com valores constantes (K) 
• Instruções de controle (G) 
Instrução e 
Parâmetros 
Mneumônicos 
Descrição Tipo Ciclos Bits de status afetados 
ADDWF f, d Adição : W + F. B 1 C, DC, Z 
ANDWF f, d E binário (AND) entre W e F, bit a bit. B 1 Z 
CLRF f Zera todos os bits de F. B 1 Z 
CLRW Zera todos os bits de W. B 1 Z 
COMF f, d Complemento de F. (bits com valores invertidos 
no byte) 
B 
1 
Z 
DECF f, d Decrementa F B 1 Z 
DECFSZ f, d Decrementa F e pula próxima linha se resultar 
zero 
B,Dc 
1 (2) 
 
INCF f, d Incrementa F B 1 Z 
INCFSZ f, d Incrementa F e pula próxima linha se resultar 
zero 
B,Dc 
1 (2) 
 
IORWF f, d OU inclusivo (OR) de W com F B 1 Z 
MOVF f, d Move F (geralmente usado para mover F para 
W) 
B 
1 
Z 
MOVWF f Move W para F B 1 
NOP Operação nula. Nada é executado. G 1 
RLF f, d Rotaciona F para esquerda com Carry Flag B 1 C 
RRF f, d Rotaciona F para direita com Carry Flag B 1 C 
SUBWF f, d Subtrai W de F : (f-W) B 1 C,DC,Z 
SWAPF f, d Troca os nibbles de f. Ex: (0xA3, após swap fica, 
0x3A) 
B 
1 
 
XORWF f, d Ou exclusivo (XOR) entre W e F B 1 Z 
BCF f, b Apaga (clear) um bit de F b 1 
BSF f, b Liga (set) um bit de F b 1 
BTFSC f, b Testa um bit de F, pulando se for zero b,Dc 1 (2) 
BTFSS f, b Testa um bit de F, pulando se for um b,Dc 1 (2) 
ADDLW k Adiciona uma constante K em W B 1 C,DC,Z 
ANDLW k E (and) lógico de uma constante com W B 1 Z 
CALL k Faz uma chamada a uma subrotina Di 2 
CLRWDT Limpa o Watchdog Timer (relógio do cão de 
guarda)G 
1 
~TO, ~PD 
GOTO k Vá para. Um desvio para um outro ponto do 
programa. 
Di 
2 
 
IORLW k Ou inclusivo (OR) de uma constante com W B 1 Z 
MOVLW k Move uma constante para W B 1 
RETFIE Retorna de uma interrupção Di 2 
RETLW k Retorna de uma subrotina, movendo uma const. 
para W 
B,Di 
2 
 
RETURN Retorna de uma subrotina Di 2 
SLEEP Vai para o modo standby G 1 ~TO, ~PD 
SUBLW k Subtrai uma constante de W B 1 C,DC,Z 
XORLW k Ou exclusivo (OR) entre W e uma constante B 1 Z 
 
Como entender a tabela acima : 
 
1ª Coluna : INSTRUÇÃO - Descreve todas as instruções utilizadas pelo 
microcontrolador PIC16F877. As instruções geralmente possuem nomes relacionados a 
suas funções. Por exemplo, GOTO lembra GO TO, que em inglês significa VÁ PARA 
... Já SLEEP significa DORMIR. ADDLW lembra ADD que em inglês significa 
adicionar.... e assim por diante. 
 
2ª Coluna : PARÂMETROS - Descreve os operandos utilizados pela instrução. 
Nesta coluna aparecem as letras f, d, b, k. 
O (f) identifica que o parâmetro deve ser uma posição da memória RAM interna 
(que chamaremos de registradores). Os registradores serão explicados em breve e 
expressos em uma tabela. 
O (d) identifica um parâmetro de destino, e pode valer W ou F. W é o registrador 
principal, e F é qualquer outro registrador. 
O (b) é um parâmetro de identificação de um bit (0 a 7). Por exemplo, BSF PORTD,0 
onde o (b) vale 0 ativa o bit menos significativo (bit 0) do registrador PORTB. 
O (k) identifica que o parâmetro em questão é uma constante (rótulo ou valor fixo). Por 
exemplo, MOVLW 10 onde o valor de K é 10, move a constante 10 para o registrador 
principal. 
 
3ª Coluna : DESCRIÇÃO - Descreve a função dos operandos. 
 
4ª Coluna - TIPO. Define o grupo onde a instrução se encaixa. Veja a legenda no 
texto acima da tabela. 
 
5º Coluna - CICLOS - Uma instrução pode consumir 1 ou 2 ciclos de máquina. 
Cada ciclo de máquina, no caso dos microcontroladores PIC16F8xx, correspondem a 4 
pulsos de clock. Portanto, se o cristal utilizado no microcontrolador for de 4MHz, 
ocorrerão 1MegaCiclos por segundo, ou seja, 1 milhão de ciclos por segundo (também 
usa-se 1mips - 1 milhão de instruções por segundo). Algumas instruções, portanto, 
demorarão 1/1000000 de segundos (1 microsegundo) para serem executadas, e outras 
demorarão 2/1000000 segundos (2 microsegundos). Algumas instruções (como os 
desvios condicionais) podem demorar 1 ou 2 ciclos, dependendo da condição avaliada 
pela instrução. 
6ª Coluna - BITS DE STATUS AFETADOS - Inicialmente, devemos entender o 
que são BITS DE STATUS. De uma forma resumida, são "indicadores" existentes na 
memória do microcontrolador que registram informações sobre as operações realizadas 
(Exemplo :se a última operação resultou em zero ou não, se houve estouro no valor 
computado, etc...). Esta coluna visa descrever quais destes BITS DE STATUS são 
afetados pela instrução. Para saber mais sobre estes bits de status, procure bibliografia 
complementar. 
 
 
REFERÊNCIAS 
 
PEREIRA, Fábio. Microcontroladores PIC: técnicas avançadas. São Paulo. São Paulo: 
Érica. 2002. 
PEREIRA, FÁBIO. Microcontroladores PIC.5.ed., SAO PAULO:Érica.2007. 
SOUZA, DAVID JOSÉ DE. Desbravando o PIC.11.ed., SAO PAULO:Érica.2007. 
CORTELETTI, D. Linguagem de Programação Assembly – Parte I. Disponível em: 
http://goo.gl/UcC6ZA 
SILVA JUNIOR, V. P. Linguagem C para microcontroladores PIC. Disponível em: 
http://usuarios.upf.br/~fpassold/PIC/C_PIC.PDF 
Bibliografia Complementar 
ZELENOVSKY, Ricardo; MENDONÇA, Alexandre. PC: um guia prático de hardware 
e interfaceamento. 2. ed. rev. e ampl. São Paulo, MZ, 1999.

Outros materiais

Outros materiais