Você está na página 1de 26

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 Informações utilizadas na máquina
diariamente para nossas para gerar alguma ação. Podem ter
atividades (tudo o que ouvimos, diversas origens mais são
vemos, sentimos, pensamos, utilizadas e armazenadas na forma
etc.). digital.
Dispositivos de Os sentidos que utilizamos para A forma como o dado entra na
entrada de dados captar as informações: olfato, máquina: teclado, disquete, etc.
paladar, tato e audição.
Dispositivos de As formas como transmitimos A forma como a máquina
saída de dados os dados da nossa mente para o transmite os dados para o meio
meio externo: fala, gestos, externo: impressora, monitor,
sinais, escrita, artes, etc. modem, etc.
Memória Local do cérebro onde Local da máquina onde guardamos
guardamos as informações para as informações para que
que posteriormente sejam posteriormente sejam processadas:
processadas. disquete, HD, memória RAM, etc.
Endereço de Posição no cérebro onde está a Posição na memória onde está a
memória informação. informação.
CPU (unidade Local do cérebro responsável Local da máquina que toma
central de por tomar as decisões baseadas decisões baseadas nos dados e no
processamento) nas informações que dispomos e programa armazenado na
na nossa personalidade. memória.
Instrução Ordem dada pelo cérebro para Ordem dada pela CPU para
executar uma ação: amarrar o executar uma ação em função ou
cadarço, saltar do ônibus, ligar a não dos dados: ligar uma saída se
TV, etc. a entrada receber um sinal, limpar
a memória, etc.
Programa O nosso planejamento é um Série de instruções ordenadas de
bom exemplo de programa. tal forma que a máquina gere uma
Quando saímos para passear, resposta complexa: para imprimir,
temos uma programação na é necessário puxar o papel,
mente que nos conduz a posicionar a cabeça de impressão
executar ações conforme vamos no ponto de início, fluir a tinta,
recebendo dados do meio deslocar a cabeça de impressão,
externo. etc.
Barramento Meio pelo qual a informação é A via pelo qual a informação é
transmitida: o som se propaga transmitida. Exemplo genérico:
no ar, etc. para os dados chegarem da
memória até a CPU, é preciso um
conjunto de fios chamado
barramento.
Largura do Limite do meio para a A quantidade de vias para a
barramento transmissão das informações. transmissão das informações.
Quando você olha por uma Exemplo genérico: uma via de 8
luneta, você vê apenas uma bits pode transmitir 8 estados
parte do céu. Uma avenida de 3 lógicos ao mesmo tempo.
faixas permite a passagem
simultânea de 3 carros.

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 digitais sã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áveis biná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,
quando você 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êm de 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 17. RC2 – Entrada / saída digital. CCP1 –
baixo (0V), define situação de RESET. Entrada de captura 1, saída de comparador 1 ou
Quando em nível alto (5V), determina PWM 1.
programa em execução. VPP: Tensão de 18. RC3 – Entrada / saída digital. SCK/SCL
programação – Quando este pino estiver em – Entrada ou saída de sinal de clock serial
13.4V, o microcontrolador entra em modo síncrono para SPI e I2C.
gravação, permitindo a transferência de um 19. RD0 – Entrada / saída digital. PSP0 – Pino
programa via ICSP 0 da porta paralela escrava.
2. RA0– Entrada / saída digital. AN0– Entrada 20. RD1 – Entrada / saída digital. PSP1 – Pino
analógica canal 0 para o ADC interno. 1 da porta paralela escrava.
3. RA1 – Entrada / saída digital. AN1 – 21. RD2 – Entrada / saída digital. PSP2 – Pino
Entrada analógica canal 1 para o ADC interno. 2 da porta paralela escrava.
4. RA2 – Entrada / saída digital. AN2– Entrada 22. RD3 – Entrada / saída digital. PSP3 – Pino
analógica canal 2 para o ADC interno. Vref-- 3 da porta paralela escrava.
Uso do pino para definir a referência negativa 23. RC4 – Entrada / saída digital. SDI –
para o conversor AD. Entrada de dados em SPI. DAS – Entrada/saída
5. RA3 – Entrada / saída digital. AN3 – de dados em modo I2C.
Entrada analógica canal 3 para o ADC interno. 24. RC5 –Entrada / saída digital. SD0 – Saída
Vref+- Uso do pino para definir a referência de dados SPI.
positiva para o conversor AD. 25. RC6 – Entrada / saída digital. TX – Pino
6. RA4 – Entrada / saída digital. TOCKI – para transmissão serial assíncrona. CK –
Contador rápido Clock para transmissão síncrona.
7. RA5 –Entrada / saída digital. AN4 – Entrada 26. RC7 – Entrada / saída digital. RX – Pino
analógica canal 4. SS – Slave Select para para recepção serial assíncrona. DT – Dados da
porta serial síncrona serial síncrona.
8. RE0 – Entrada / saída digital. RD – 27. RD4 – Entrada / saída digital. PSP4 – Pino
Entrada de controle de leitura para porta 4 da porta paralela escrava.
paralela escrava. AN5 – Entrada analógica 28. RD5 – Entrada / saída digital. PSP5 – Pino
canal 5. 5 da porta paralela escrava.
9. RE1 – Entrada / saída digital. WR – 29. RD6 – Entrada / saída digital. PSP6 – Pino
Entrada de controle de gravação para porta 6 da porta paralela escrava.
paralela escrava. AN6 - Entrada analógica canal 30. RD7 – Entrada / saída digital. PSP7 – Pino
6. 7 da porta paralela escrava.
10. RE2 – Entrada / saída digital. CS – 31. VSS - Referência (0V / GND)
“Chip Select” para porta paralela escrava. 32. VDD – Tensão de alimentação (mesma que
AN7– Entrada analógica canal 7. pino 11)
11. VDD – Alimentação (preferência 3V a 5V) 33. RB0 – Entrada / saída digital. INT –
12. VSS –Referência (0V / GND) Entrada de sinal de interrupção via hardware.
13. OSC1/CLKIN – Pino para ligação do 34. RB1 – Entrada / saída digital.
circuito oscilador externo (entrada). Usado em 35. RB2 - Entrada / saída digital.
conjunto com o pino OSC/CLKOUT. 36. RB3 – Entrada / saída digital. PGM –
Recomendado usar cristal de 4 a 20 MHz Entrada de sinal para gravação em baixa tensão
14. OSC2/CLKOUT – Pino para ligação do (5V)
circuito oscilador externo (saída). 37. RB4 – Entrada / saída digital.
15. RC0 – Entrada / saída digital. T1OSO 38. RB5 – Entrada / saída digital.
– Saída do oscilador do TIMER1. T1CKI – 39. RB6 – Entrada / saída digital. PGC –
Entrada de clock para TIMER1. Clock para programação ICSP ou pino para
16. RC1 – Entrada / saída digital. T1OSI – depuração.
Entrada do oscilador do TIMER1. CCP2 – 40. RB7 – Entrada / saída digital. PGD –
Entrada de captura 2, saída de comparador 2 ou Dados para programação ICSP ou pino para
PWM 2. 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 conectados conforme 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 Tipo Bits de status
Descrição Ciclos
Mneumônicos 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 1


B
no byte) Z

DECF f, d Decrementa F B 1
Z

DECFSZ f, d Decrementa F e pula próxima linha se resultar 1 (2)


B,Dc
zero

INCF f, d Incrementa F B 1
Z

INCFSZ f, d Incrementa F e pula próxima linha se resultar 1 (2)


B,Dc
zero
IORWF f, d OU inclusivo (OR) de W com F B 1
Z

MOVF f, d Move F (geralmente usado para mover F para 1


B
W) 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, 1


B
0x3A)

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 1


G
guarda) ~TO, ~PD

GOTO k Vá para. Um desvio para um outro ponto do 2


Di
programa.

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. 2


B,Di
para W

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.

Você também pode gostar