Você está na página 1de 13

Revisão – Sistemas Digitais

Fagner de Araujo Pereira

Capítulo 1
Sistemas numéricos
Sistemas numéricos são sistemas de notação usados para representar quantidades abstratas denominadas
números. Um sistema numérico é definido pela base que utiliza. A base é o número de símbolos diferentes, ou
algarismos, necessários para representar um número qualquer, dos infinitos possíveis no sistema.

1.1 Introdução
Ao se programar microcontroladores, são usados diferentes sistemas de numeração para facilitar a
representação de quantidades, variáveis ou grandezas medidas e/ou controladas. Há situações em que é mais
conveniente fazer essa representação em um tipo de sistema do que em outro.
Os sistemas numéricos mais utilizados na prática com microcontroladores são descritos a seguir.

1.2 Sistema de numeração decimal


O sistema decimal é um sistema de numeração posicional que utiliza a base dez. Baseia-se em uma
numeração de posição, onde os dez algarismos indo-arábicos, 0 1 2 3 4 5 6 7 8 9, servem para contar unidades,
dezenas, centenas, etc., da direita para a esquerda.
Contrariamente à numeração romana, o algarismo árabe tem um valor diferente segundo sua posição no
número: assim, no número 111, o primeiro algarismo da esquerda para direita significa 100, o segundo
algarismo 10 e o terceiro 1, enquanto que em VIII (oito em numeração romana) os três “I” valem todos 1.
Assim:

Da direita para esquerda, o primeiro dígito representa as unidades, o segundo as dezenas, o terceiro as
centenas, e assim sucessivamente.
No sistema decimal o símbolo 0 (zero) posicionado à esquerda do número escrito não altera seu valor
representativo. Assim: 1, 01, 001, ou 0001 representam a mesma grandeza, neste caso a unidade. O símbolo zero
posto à direita implica multiplicar a grandeza pela base, ou seja, por 10 (dez).

1.3 Sistema de numeração binário


O que aconteceria se apenas dois dígitos fossem usados: 0 e 1, por exemplo? Ou se não soubéssemos
como determinar se algo é 3 ou 5 vezes maior do que qualquer outra coisa? Ou se estivéssemos restritos a
comparar dois tamanhos, ou seja, se só pudéssemos afirmar que algo existe (1) ou não existe (0)?
Gostaríamos de continuar a usar os números da mesma forma como fazemos no sistema decimal, mas
seria um pouco diferente. Por exemplo, considere o número 11011010. Quantas páginas de um livro são
representadas pelo número 11011010? A fim de aprender isso, temos apenas que seguir a mesma lógica que no
exemplo anterior, mas em ordem inversa. Tenha em mente que tudo isso é sobre matemática apenas com dois
dígitos, 0 e 1, ou seja, um sistema numérico de base 2 (sistema de números binários).
O sistema binário, ou base 2, é um sistema de numeração posicional em que todas as quantidades se
representam com dois algarismos: zero e um (0 e 1).

1
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Os computadores digitais, e também os microcontroladores trabalham internamente com dois níveis de


tensão, visto que o seu sistema de numeração natural é o sistema binário (ligado, desligado). O sistema binário é
a base para a álgebra booleana (de George Boole - matemático inglês), que permite fazer operações lógicas e
aritméticas usando-se apenas dois dígitos ou dois estados lógicos (sim e não, falso e verdadeiro, tudo ou nada, 1
e 0, ligado e desligado, etc.). Toda a eletrônica digital e computação moderna estão baseadas nesse sistema e na
lógica de Boole, que permite representar por circuitos eletrônicos digitais os números, caracteres, realizar
operações lógicas e aritméticas.

1.4 Sistema de numeração hexadecimal


No início do desenvolvimento dos computadores, foi percebido que as pessoas tinham muitas
dificuldades em lidar com números binários. Por esta razão, um novo sistema, com 16 símbolos diferentes foi
criado. É chamado sistema de numeração hexadecimal, consistindo dos dez dígitos que já estamos acostumados a
usar (0, 1, 2, 3, ... 9) e mais seis letras do alfabeto A, B, C, D, E e F.
Para ilustrar a vantagem de representar um número no sistema hexadecimal, consideremos o seguinte
caso: O maior número que pode ser representado por 4 dígitos binários é o número 1111. Ele corresponde ao
número 15 no sistema decimal, representado por dois dígitos, enquanto no sistema hexadecimal é representado
por um único dígito, ‘F’. F é o maior número de 1 dígito do sistema hexadecimal. O maior número escrito com oito
dígitos binários é, ao mesmo tempo o maior número de 2 dígitos hexadecimais.
Na figura 1.3 pode ser observado um exemplo da correlação existente entre números no sistema binário
e no sistema hexadecimal.

Representação no sistema hexadecimal

Representação no
sistema binário

Figura 1 – Mesmo número sendo representado por 8 dígitos binários e 2 dois dígitos hexadecimais.

1.5 Conversão entre sistemas de numeração


O sistema numérico binário é mais comumente usado no estudo de sistemas digitais, como os
microcontroladores. O sistema decimal, por sua vez, é mais compreensível, enquanto o sistema hexadecimal
seria algo como um meio termo. Portanto, é muito importante aprender como converter números de um sistema
numérico para outro.

Conversão binário-decimal
Dígitos em um número binário têm valores diferentes dependendo da posição que eles ocupam no
número. Além disso, cada posição pode conter 1 ou 0 e seu valor pode ser facilmente determinado através da
contagem de sua posição da direita para esquerda.
Para fazer a conversão de um número binário para decimal é necessário multiplicar os valores dos
dígitos correspondentes (0 ou 1) pelo seu respectivo peso na base binária e adicionar todos os resultados. Veja o
exemplo a seguir:

Número binário Mesmo número no sistema decimal

Note-se que, por exemplo, para representar números decimais de 0 a 3, são necessários apenas dois
dígitos binários. Para números maiores, dígitos binários extras devem ser usados. Assim, a fim de representar
números decimais 0-7, são necessários três dígitos binários, conforme o exemplo acima. Para os números 0-15
são necessários quatro dígitos, etc.

2
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Com n dígitos binários é possível representar 2n valores decimais. Para saber qual o maior número
decimal que pode ser representado com n dígitos binários, simplesmente calculamos o valor de 2n-1. Assim, por
exemplo, se n= 4:

24-1 = 16-1 = 15.

Assim, usando 4 dígitos binários, é possível representar números decimais de 0 a 15, o que equivale a 16
diferentes valores no total.

Conversão hexadecimal-decimal
A fim de fazer a conversão de um número hexadecimal em decimal, cada dígito hexadecimal deve ser
multiplicado pelo seu respectivo peso na base hexadecimal e adicionar todos os resultados, semelhante ao que
foi feito no sistema binário. Por exemplo:

Número hexadecimal

Mesmo número no sistema decimal

Conversão hexadecimal-binário
Não é necessário realizar nenhum cálculo a fim de converter números de hexadecimal para binário. Os
dígitos hexadecimais são simplesmente substituídos por dígitos binários equivalentes. Desde que o máximo
valor representado por um dígito hexadecimal é equivalente ao número decimal 15, nós precisamos usar quatro
dígitos binários para representar um dígito hexadecimal. Por exemplo:

O quadro comparativo mostrado na figura 2, na página seguinte, contém os valores dos números que vão
de 0 a 255 nos três diferentes sistemas numéricos apresentados. Esta é a maneira mais fácil de entender a lógica
comum aplicada a todos os sistemas. Observe que para representar os valores 0-255 nesses sistemas são
necessários:

* 3 dígitos no sistema decimal;


* 8 dígitos no sistema binário;
* 2 dígitos no sistema hexadecimal.

O sistema numérico decimal juntamente com os sistemas binário e hexadecimal são considerados os
sistemas numéricos mais importantes para as aplicações com microcontroladores.
É fácil fazer a conversão entre as bases. No entanto, essas conversões podem causar confusão. Por
exemplo, o que significa a frase “É preciso contar 110 produtos na linha de montagem”? Dependendo se tratar de
um valor binário, decimal ou hexadecimal, a quantidade de produtos a serem contados poderia ser 6, 110 ou 272,
respectivamente! Assim, a fim de evitar mal-entendidos, diferentes prefixos e sufixos são adicionados
diretamente aos números para distinguir cada uma das representações.
O prefixo $ ou 0x, bem como o sufixo h marcam os números no sistema hexadecimal. Por exemplo, o
número hexadecimal 10AF pode ser escrito como $10AF, ou 0x10AF, ou ainda 10AFh. Da mesma forma, os
números binários geralmente usam os prefixos 0b, como por exemplo 0b1011. Se um número não tem nem o
prefixo nem sufixo é considerado decimal. Infelizmente, esta maneira de marcar os números não é padronizada e
depende da concreta aplicação.

3
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

.
Figura 2 - Tabela comparativa mostrando os valores de 0 a 255 escritos em três diferentes sistemas numéricos:
decimal, binário e hexadecimal.

1.6 Conceito de bit


Um bit (binary digit) 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 e assim sucessivamente. 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.

1.7 Conceito de byte e nibble


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 os bytes, igualmente aos números
decimais.
Semelhante aos dígitos de um número qualquer, os dígitos de um byte não têm o mesmo significado. O
bit mais à esquerda tem o maior valor, e é chamado de bit mais significativo (MSB – Most Significant Bit). O bit
mais à direita tem o menor valor e é chamado de 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 28 = 256 formas diferentes. O maior número decimal que pode ser representado por um byte é,
por sua vez, 28-1 = 255.
Um nibble é referido como metade de um byte (4 bits). Dependendo de que metade do byte estivermos
falando (esquerda ou direita), nos referimos ao “nibble alto” (high nibble) ou “nibble baixo” (low nibble),
respectivamente.
Os conceitos de bit, byte e nibble podem ser entendidos observando a figura 3. ∎

Figura 3 – Representação dos conceitos de bit, byte e nibble.

4
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Capítulo 2
Conceitos de
eletrônica digital
Alguma vez você já se perguntou: O que há dentro de circuitos eletrônicos integrados digitais como
microcontroladores e microprocessadores? O que faz estes circuitos realizarem operações matemáticas complexas e
tomar decisões? Sabia que essa aparente complexidade inclui apenas alguns elementos chamados circuitos lógicos
ou portas lógicas?

2.1 Elementos de eletrônica digital


A operação dos circuitos lógicos é baseada em princípios estabelecidos pelo matemático britânico
George Boole em meados do século XIX, antes mesmo da primeira lâmpada ter sido inventada.
Originalmente, a ideia principal era expressar formulações lógicas através de funções algébricas. Tal
pensamento foi logo transformado em um produto prático, que hoje é conhecido como circuitos lógicos E (AND),
OU (OR) e NÃO (NOT), ou inversor. O princípio de operação desses circuitos é conhecido como álgebra booleana.
Algumas instruções encontradas nos programas escritos para microcontroladores dão o mesmo
resultado que as portas lógicas e, por isso, a operação desses elementos será discutida em seguida.

Porta lógica E (AND)


A porta lógica “E” tem duas ou mais entradas digitais e uma saída digital. Suponha que a porta usada
neste exemplo tem apenas duas entradas. A lógica um (1) irá aparecer em sua saída apenas se as duas entradas
(A e B) são acionadas com nível lógico alto (1). A tabela apresentada na figura 1, chamada de tabela da verdade,
mostra a dependência mútua entre as entradas e a saída.

Figura 1 – Porta lógica E e sua tabela da verdade.

Quando usada em um programa em um microcontrolador, uma operação lógica E é realizada por uma
instrução da linguagem de programação. Por ora, basta lembrar que a lógica E num programa refere-se à
operação lógica AND aplicada aos bits correspondentes a dois números que estão armazenados em posições de
memória chamadas de registradores, conforme se pode ver na figura 2. Nessa figura, há dois registradores de 8
bits, A e B, com os valores 0b11001001 e 0b01101000, respectivamente, fornecendo como resultado o valor
0b01001000.

5
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Figura 2 – Operação lógica AND sendo aplicada sobre dois registradores, A e B.

Porta lógica OU (OR)


Da mesma forma, a porta lógica “OU” também tem duas ou mais entradas e uma saída. Se a porta tem
apenas duas entradas, uma lógica um (1) irá aparecer em sua saída se uma entrada (A ou B) é acionada com nível
lógico alto (1). Ou seja, uma lógica um (1) aparece em sua saída, se pelo menos uma entrada é mantida alta (1).
Se todas as entradas estão à lógica zero (0), a saída também apresenta lógica zero (0).
Na figura 3 pode ser vista a tabela da verdade para a porta lógica OU, assim como uma operação OU
realizada com os valores de dois registradores, A e B.

Figura 3 – Porta lógica OU, sua tabela da verdade e operação lógica sendo aplicada sobre dois registradores, A e B.

Porta lógica NÃO (NOT)


A porta lógica “NÃO” (NOT) tem apenas uma entrada e uma única saída. Ela opera de maneira
extremamente simples: Quando a lógica zero (0) aparece em sua entrada, uma lógica um (1) aparece em sua
saída, e vice-versa. Isso significa que esta porta inverte o sinal e, por isso, é frequentemente chamada de porta
inversora.
Em um programa, essa operação lógica é feita sobre o valor armazenado em um registrador, ou apenas
um bit. O resultado é o valor com os bits invertidos.
Se o valor que está sendo operado é considerado como um número, o valor invertido, na verdade, é um
complemento do mesmo. O complemento de um número binário de n bits é um valor que adicionado ao número
original resulta no maior número possível de ser representado pelos n bits. Por exemplo, a soma de um número
de 8 bits e seu complemento é sempre 255, que é o maior valor capaz de ser representado utilizando 8 bits.
Na figura 4 pode ser vista a tabela da verdade para a porta lógica NÃO, assim como uma operação NÃO
realizada com o valor de um registrador.

Figura 4 – Porta lógica NÃO, sua tabela da verdade e operação lógica sendo aplicada sobre um registrador.

6
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Porta lógica OU-EXCLUSIVO (XOR)


A porta “OU EXCLUSIVO” (XOR) é um pouco mais complicada para se entender em comparação com as
outras portas. A lógica um (1) aparece em sua saída somente quando suas entradas têm estados lógicos
diferentes.
Em um programa, esta operação é comumente usada para comparar dois bytes. A subtração pode ser
utilizada para o mesmo fim (se o resultado for 0, os bytes são iguais). Ao contrário da subtração, a vantagem
desta operação lógica é que não é possível a obtenção de resultados negativos.
Na figura 5 pode ser vista a tabela da verdade para a porta lógica OU EXCLUSIVO, assim como uma
operação realizada com os valores de dois registradores.

Figura 5 – Porta lógica XOR, sua tabela da verdade e operação lógica sendo aplicada sobre dois registradores, A e B.

Registradores
Em suma, um registrador, ou uma célula de memória, é um circuito eletrônico que pode memorizar o
estado de um byte (ou de n bits). Dentro de um microcontrolador há vários registradores que são usados para
armazenar as informações do programa. Essas informações podem ser variáveis de controle do programa, estado
das entradas ou saídas, resultado de uma operação matemática, etc.
Graficamente, podemos ver como funciona um registrador através da figura 6. Nessa figura, a unidade
central de processamento (CPU) pode armazenar um byte numa posição de memória, ou registrador. O valor
armazenado nesse exemplo é o 0b10110011. Para armazenar esse valor, a CPU envia os bits para o registrador
através de 8 linhas de dados e utiliza um sinal de escrita para que o registrador retenha a informação. Esse valor
armazenado pode, posteriormente, ser utilizado pela própria CPU para um novo cálculo ou processamento.

Figura 6 – CPU comunicando-se com um registrador e armazenando o valor 0b10110011.

Além de registradores de uso geral, como o mostrado na figura 6, cada microcontrolador também possui
uma quantidade de registradores especiais (Special Function Registers-SFR), cuja função é pré-determinada pelo
fabricante. Seus bits são conectados (literalmente) com os circuitos internos do microcontrolador, tais como
temporizadores, conversores A/D, osciladores, entre outros, o que significa que eles são usados diretamente no
controle da operação destes circuitos periféricos. O estado dos bits dos registradores especiais é alterado a partir
do programa e, com isso, permite o controle dos pequenos circuitos dentro do microcontrolador, como ilustrado
na figura 7.

Figura 7 – CPU comunicando-se com um registrador de função especial.

7
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Portas de entrada/saída (portas de I/O)


A fim de tornar o microcontrolador útil, este tem que ser ligado a uma eletrônica adicional externa ao
chip. Cada microcontrolador tem um ou mais registradores de função especial (chamados de portas) cujos bits
estão diretamente conectados aos pinos do chip.
Por que entrada/saída? Porque pode-se mudar a função do pino que se desejar. Por exemplo, suponha
que se deseja que um dispositivo ligue/desligue três LEDs de sinal e, simultaneamente, monitore o estado lógico
de cinco sensores, ou teclas. Algumas das portas precisam ser configuradas de modo que hajam três saídas
(ligadas aos LEDs) e cinco entradas (ligadas aos sensores). Esta configuração é simplesmente realizada por
software, ou seja, através do programa que o projetista escreve, o que significa que a função do pino pode ser
alterada durante a operação.
Podemos ilustrar o funcionamento de uma porta de um microcontrolador através da figura 8.

Figura 8 – CPU comunicando-se com uma porta de entrada/saída.

Uma importante especificação dos pinos de entrada/saída (I/O) é a corrente máxima que estes podem
suportar. Para a maioria dos microcontroladores atuais, a corrente obtida a partir de um pino é suficiente para
ativar um LED ou algum outro dispositivo de baixa corrente (1-20 mA). Quanto mais pinos de I/O, menor a
corrente máxima que pode ser suportada por um pino. Em outras palavras, a corrente máxima indicada na folha
de especificações de dados para o microcontrolador é compartilhada entre todas as portas de I/O.
Outra função importante de um pino de I/O é que estes podem ter resistências de pull-up externas. Essas
resistências conectam os pinos à tensão positiva de alimentação que pode ser diferente daquela que é usada para
alimentar o chip do microcontrolador. Isto é útil quando se deseja trabalhar com tensões distintas no mesmo
circuito.
Cada porta de I/O está normalmente sob o controle de um registrador especial que indica o sentido de
operação dos pinos, o que significa que cada bit do registrador determina o estado do pino correspondente. Por
exemplo, escrevendo uma lógica (1) para um bit do registrador de controle (SFR), o pino equivalente da porta é
automaticamente configurado como entrada e a tensão presente nele pode ser lida como nível lógico 0 ou 1. Caso
contrário, ao escrever zero a um bit desse SFR, o pino equivalente é configurado como uma saída.

Unidade de Memória
A memória é a parte do microcontrolador utilizada para armazenamento de dados de forma temporária
ou permanente. Memória é um termo genérico para designar componentes de um sistema capazes de armazenar
dados e programas.
A maneira mais fácil de explicar a operação de uma memória é compará-la com um armário de arquivo
com muitas gavetas. Suponha que as gavetas estão claramente identificadas para que seu conteúdo possa ser
encontrado 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 a partir de seu endereçamento.
As operações que podem ser realizadas em uma memória são: Operação de escrita, que ocorre quando
uma informação é armazenada em uma posição de memória, sobrescrevendo qualquer dado previamente
armazenado, o que chamamos de operação destrutiva, e a operação de leitura, que ocorre quando endereçamos
uma posição de memória e fazemos a leitura do dado armazenado previamente, o que chamamos de operação
não destrutiva, o que significa que os dados ainda permanecem armazenados naquela posição endereçada.
Na figura 9 temos uma representação de uma memória. Do lado esquerdo, temos o barramento de
endereços, do lado direito temos o barramento de dados e na parte de baixa temos o barramento de controle de
escrita/leitura. Ao endereçar uma posição específica, a linha de dados apresenta o conteúdo armazenado
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.

8
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Figura 9 – Memória de escrita/leitura de um microcontrolador.

Existem tipos distintos de memória dentro do microcontrolador, tais como:

* Memória apenas de leitura (Read Only Memory - ROM) - É usada 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ão capazes de
endereçar até 64 Kb de memória, ou seja, 65535 localidades. Para iniciantes, o programa irá raramente exceder o
limite de algumas centenas de instruções. Existem vários tipos de ROM.

* Memória flash - Este tipo de memória foi concebido 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údo dessa memória pode ser escrito e apagado praticamente um número ilimitado de vezes,
microcontroladores com memória flash são ideais para a aprendizagem, experimentação e produção em pequena
escala. Devido à sua grande popularidade, a maioria dos microcontroladores é fabricada com tecnologia flash. Os
microcontroladores da família Arduino utilizam memória flash para armazenamento do programa.

* 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, é
necessário ter um registro que representa a "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 E2PROM. 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 usada para
armazenar valores, criados durante a operação, que devem ser permanentemente guardados. Por exemplo, em
uma fechadura eletrônica ou um alarme, seria ótimo que este permitisse ao usuário criar e digitar uma senha,
mas seria inútil se essa senha fosse perdida cada vez que a alimentação fosse desligada. A solução ideal é um
microcontrolador com uma EEPROM embutida, como os microcontroladores da família Arduino.

Interrupções
O objetivo do microcontrolador é, principalmente, responder às mudanças no seu entorno. Em outras
palavras, quando um evento ocorre, o microcontrolador deve fazer alguma coisa. Por exemplo, quando se aperta
um botão em um controle remoto, o microcontrolador irá registrá-lo e responder pela alteração de um canal,
alteração do volume para cima ou para baixo, etc.
Não seria prático se o microcontrolador passasse a maior parte de seu tempo infinitamente verificando
alguns botões por horas ou dias. É 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, chamados de controladores de interrupção, que só responderão quando algo específico
acontecer, por exemplo, o pressionamento de um botão.

9
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

O sinal que informa a unidade de processamento central quando um evento como esse ocorre é chamado
de sinal de interrupção. Quando a interrupção ocorre, o microcontrolador para de executar o programa principal
e atende aquele evento em especial, executando uma tarefa específica.
As interrupções são recursos extremamente poderosos e práticos para o desenvolvimento de sistemas
microcontrolados. A maioria dos programas usam interrupções em sua execução normal.

Unidade Central de Processamento (CPU)


Como o próprio nome sugere, esta é uma unidade que monitora e controla todos os processos dentro do
microcontrolador. É constituída basicamente pelas seguintes subunidades: Unidade lógica e Aritmética (ULA),
Registradores, ou unidade de memória, e a unidade de controle.

* Unidade Lógica Aritmética (ULA) realiza todas as operações matemáticas e lógicas sobre os dados;

* A unidade de memória engloba os registradores de uso geral e os de função especial.

* A unidade de controle envia todos os sinais para os diferentes circuitos internos do microcontrolador, a fim de
garantir o seu correto funcionamento. O decodificador de Instruções (Instruction Decoder) é uma parte da
unidade de controle que decodifica as instruções do programa e ativa outros circuitos com base nessa
decodificação. O "conjunto de instruções", que é diferente para cada família de microcontroladores, expressa a
capacidade do microcontrolador em processar dados;

A unidade lógica e aritmética e o conjunto de registradores formam uma subunidade chamada de


caminho dos dados (Datapath). Assim, A CPU pode ser considerada como uma unidade de controle que opera
sobre uma seção de dados, como mostrado na figura 10.

Figura 10 – Unidade Central de Processamento e suas subunidades.

Oscilador
Para que o microcontrolador execute as instruções armazenadas em sua memória, é necessária a
presença de um sinal pulsante, normalmente uma onda quadrada, para que as instruções sejam executadas
sequencialmente a cada 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 garantir a estabilidade de frequência,
mas também pode operar como um circuito stand-alone (como um oscilador RC interno). É importante dizer que
as instruções não são executadas necessariamente ao ritmo imposto pelo oscilador em si, mas pode ser algumas
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 é necessariamente 50 ns, mas 200,
400 ou 800 ns, dependendo do tipo de microcontrolador.

10
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

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 como os
descritos.

* Pino de reset é utilizado para reiniciar o microcontrolador através da aplicação de uma lógica zero (0) ou um
(1) nesse pino, o que depende do tipo do microcontrolador.

Temporizadores/Contadores
O oscilador do microcontrolador utiliza cristal de quartzo para o seu funcionamento. Mesmo não sendo a
solução mais simples e barata para a obtenção de um sinal de relógio, existem muitas razões para usá-lo. A
frequê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 de tempo. Se for necessário medir o tempo entre dois eventos,
basta contar os pulsos gerados por este oscilador. Isto é exatamente o que um temporizador, ou timer, faz.
A maioria dos programas usa este cronômetro eletrônico em miniatura. Os temporizadores são
geralmente registradores de funções especiais de 8 ou 16-bits, cujo conteúdo é automaticamente incrementado
por cada pulso vindo do circuito oscilador. Uma vez que um registrador atinge seu limite de contagem, uma
interrupção, conhecida como estouro do contador, 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 ao resultado da subtração T2-T1). Se os
registradores usam pulsos provenientes de fontes externas conectadas a um pino do microcontrolador, então o
timer é transformado em um contador.

Conversor Analógico/Digital (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, ou 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) proveniente de sensores analógicos, por exemplo.
Na figura 11, a seguir, temos uma representação de um 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 valores numéricos
hexadecimais que vão de 0x000 a 0x3FF.

Figura 11 – Operação de um conversor analógico/digital.

11
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

Arquitetura Interna
Todos os microcontroladores usam um dos dois modelos de projeto básicos de sistemas digitais,
conhecidos como arquitetura Harvard e arquitetura Von-Neumann. Eles representam duas formas diferentes de
troca de dados entre a CPU e a memória.
Os microcontroladores com a arquitetura Von-Neumann (figura 12) têm apenas um bloco de memória e
um barramento de dados. Como todos os dados são trocados através dessas linhas, o barramento pode ficar
sobrecarregado e a comunicação se torna lenta e ineficiente. A CPU pode apenas executar uma instrução de
leitura ou gravação de dados para a memória. Ambas não podem ocorrer ao mesmo tempo, uma vez que
instruções e dados usam o mesmo barramento. Praticamente todos os computadores modernos adotam essa
arquitetura.

Figura 12 – Arquitetura Von-Neumann com barramento de 8 bits.

Os microcontroladores com arquitetura Harvard (figura 13) tem dois barramentos diferentes. Um deles
conecta a CPU com a memória de dados (RAM) e o outro conecta a CPU com a memória de programa. Assim, a
CPU pode ler uma instrução e ter acesso a dados da memória, ao mesmo tempo.
No caso do Arduino, durante o processo de escrita, um programa apenas manipula dados de 8 bits
(exceto no Arduino Due, cuja arquitetura é de 32 bits). Em outras palavras, tudo o que você pode mudar a partir
do programa é de 8 bits. Todos os programas escritos para estes microcontroladores serão armazenados na
memória flash do microcontrolador, depois de serem compilados em código de máquina. No entanto, as posições
da memória flash não tem apenas 8, mas um número maior de bits. O resto dos bits representa a instrução,
especificando para a CPU o que fazer com os dados de 8 bits.

Figura 13 – Arquitetura Harvard.

O Conjunto de Instruções
Todas as instruções compreensíveis para o microcontrolador formam o seu conjunto (set) de instruções.
Quando você escreve um programa em linguagem Assembly, por exemplo, na verdade você especifica uma série
de instruções do seu set, na ordem em que devem ser executadas.
De acordo com o número de instruções disponíveis no set, os fabricantes costumam considerar uma das
duas abordagens a seguir:

* Conjunto reduzido de instruções (RISC-Reduced Instruction Set Computer) - Neste caso, o microcontrolador
reconhece e executa apenas algumas operações básicas (adição, subtração, cópia, etc.). Outras operações mais
complexas são realizadas através da combinação delas. Por exemplo, a multiplicação é feita através da realização
de sucessivas adições. Os microcontroladores da família Arduino são máquinas RISC com uma arquitetura
Harvard modificada, conhecida como AVR.

12
Revisão – Sistemas Digitais
Fagner de Araujo Pereira

* Conjunto complexo de instruções (CISC-Complex Instruction Set Computer) - CISC é o oposto ao RISC. São
microcontroladores concebidos para reconhecer mais de 200 instruções diferentes, podendo realizar inúmeras
tarefas em alta velocidade. No entanto, é preciso entender como aproveitar tudo o que estas instruções oferecem,
o que não é nada simples. Processadores, como Intel Core 2 Duo, Intel I3, I5, I7 são do tipo CISC.

2.2 Modelo genérico de um microcontrolador


Todos os elementos de hardware vistos até agora, e tantos outros não apresentados aqui, fazem parte da
eletrônica embutida em um microcontrolador. Esses elementos estão todos interligados para desempenhar
diferentes tarefas, dependendo das necessidades do projetista. A figura 14 ilustra de forma simplificada como
esses elementos estão interligados para potencializar o uso de um microcontrolador.

Figura 14 – Elementos de hardware de um microcontrolador.

13

Você também pode gostar