Anda di halaman 1dari 59

LIVRO

UNIDADE 1

Microcontroladores e
Microprocessadores
Introduo aos sistemas
embarcados

Victor Gonalves de Carvalho Feitosa Perim


2017 por Editora e Distribuidora Educacional S.A.
Todos os direitos reservados. Nenhuma parte desta publicao poder ser reproduzida ou transmitida de qualquer
modo ou por qualquer outro meio, eletrnico ou mecnico, incluindo fotocpia, gravao ou qualquer outro tipo
de sistema de armazenamento e transmisso de informao, sem prvia autorizao, por escrito, da Editora e
Distribuidora Educacional S.A.

2017
Editora e Distribuidora Educacional S.A.
Avenida Paris, 675 Parque Residencial Joo Piza
CEP: 86041-100 Londrina PR
e-mail: editora.educacional@kroton.com.br
Homepage: http://www.kroton.com.br/
Sumrio

Unidade 1 | Introduo aos sistemas embarcados 7

Seo 1.1 - Conceitos iniciais de microprocessamento 9


Seo 1.2 - Arquitetura AVR ATmega328 25
Seo 1.3 - Linguagem Assembly 41
Palavras do autor
Caro aluno,
Todos ns j estamos acostumados com a utilidade de aparelhos
eletrnicos no dia a dia. At mesmo nossos avs, que conheceram
um mundo totalmente sem eletrnicos e internet, inimaginvel para
os netos, esto conectados ao mundo virtual.
Pense em um mundo sem eletrnica. Difcil, no mesmo? Pois
saiba que a grande maioria desses produtos so desenvolvidos com
o conhecimento que teremos nesta disciplina.
De maneira mais ampla, o conjunto de estudos sobre sistemas
microprocessados foi dividido basicamente em duas partes: hardware
e software, ambos estudados em vrios cursos de Engenharia e
Informtica. A conexo dessas duas partes fundamental na elaborao
dos projetos aplicados para as mais diversas reas e estudada nesta
disciplina de microcontroladores e microprocessadores, o que a
torna fundamental para a formao dos profissionais que desejam
atuar nessa rea. Sendo assim, ao fim deste curso, cumprindo todas
as tarefas, voc estar pronto para desenvolver projetos de eletrnica
avanados, com processamento de dados, controle de perifricos
externos e comunicao entre dispositivos. Muitas reas referentes
automao e eletrnica atuam a partir de microcontroladores e cada
vez mais o profissional que domina bem essas reas mais requisitado
no mercado de trabalho, principalmente na rea de desenvolvimento
de projetos de sistemas embarcados, considerando que estamos
entrando na chamada Quarta Revoluo Industrial, em que os
sistemas ciber-fsicos assumem autonomia para tomar decises e se
comunicar entre si e com os humanos.
Agora, voc tem em mos, de fato, um caminho para se tornar um
excelente profissional, capaz de resolver vrios problemas complexos
desse ramo. Com esta finalidade, este livro foi escrito com muito
empenho e dedicao e todos os detalhes foram pensados para que
voc, prezado aluno, possa aprender de maneira agradvel e eficaz.
Este material est dividido em quatro unidades:
1. Apresentao: introduo dos principais conceitos sobre
sistemas computacionais, sua histria, aplicaes, estrutura
interna bsica e o funcionamento. Estudaremos em seguida
os aspectos do chip escolhido, o ATmega328, bem como
program-lo em linguagem assembly.
2. Programao: apresentao dos principais conceitos
da linguagem C, voltada para programao de sistemas
embarcados, e estudo dos fundamentos da linguagem, a
estrutura de um programa, fluxogramas e funes e depois
mtodos de simulao.
3. Perifricos bsicos: conhecimento dos perifricos mais
bsicos, presentes em praticamente qualquer projeto
microprocessado, as portas digitais de entrada e sada, os
temporizadores e as interrupes. Depois de entendido, sero
construdos projetos reais.
4. Perifricos avanados: estudo dos perifricos avanados
mais importantes, como o conversor A/D, os mdulos de
comunicao e a memria EEPROM. Este contedo ser
colocado em prtica em projetos mais avanados, com sinais
analgicos e transmisso de dados.
Para completar nosso objetivo, precisamos de muito empenho no
seu estudo!
Unidade 1

Introduo aos sistemas


embarcados

Convite ao estudo
Nesta primeira unidade, iniciaremos nossa jornada atravs do
mundo digital/virtual, paralelo ao nosso, e recm-descoberto por
ns. Vamos aprender como a eletrnica digital que voc estudou
pode ser organizada em memrias, processador, barramentos
e perifricos, permitindo que um sistema processado exista e
funcione. muito importante um bom aproveitamento no
estudo desta primeira parte, pois os fundamentos e todos os
outros assuntos posteriores remetero, direta ou indiretamente,
aos termos apresentados aqui.

Depois de conhecer um pouco sobre a histria do


computador, sua evoluo, seus perifricos internos e externos
e suas principais aplicaes e utilidades, estudaremos como
ele funciona em sua essncia, ou seja, conheceremos o seu
interior. Para utilizar toda a teoria estudada em projetos prticos,
empregados na indstria, foi escolhido o microcontrolador
ATmega328, presente na popular placa Arduino UNO.
Conheceremos quais so e como funcionam as suas partes
internas, principalmente o ncleo e saberemos como criar
programas em linguagem Assembly.

Esses conceitos abordados compem todo o contedo


terico necessrio para voc adquirir as competncias tcnicas
previstas para esta unidade, alm de capacit-lo para resolver
as situaes-problema enfrentadas. Novamente, pensando
em tornar esse estudo mais prximo da realidade da indstria,
embasaremos o contedo no seguinte cenrio: uma montadora
de veculos est no processo de criao de um novo automvel
e contratou algumas empresas para desenvolver as diferentes
partes que compem o veculo, como: motor, sistema de
transmisso mecnica, chassi, entre outros. Os mdulos
eletrnicos internos, que controlam o freio ABS, a injeo
eletrnica e at o computador de bordo, sero construdos a
partir de sistemas microprocessados e devem ser projetados
individualmente, compondo a placa com os perifricos
externos necessrios.

Ao final desta unidade, voc ser capaz de avaliar os


componentes destes mdulos eletrnicos, bem como
entender e explicar como os programas embarcados so
executados e quais so as relaes com as memrias e os
perifricos internos e externos.

Considere agora que voc o engenheiro contratado para


ser o responsvel pela parte de eletrnica embarcada do projeto
desta nova linha e deve estar preparado para tomar muitas
decises importantes, com sabedoria.

Seja muito bem-vindo! Estamos certos de que este ser um


timo estudo, esclarecedor e estimulante e esperamos que ao
fim do curso voc esteja ansioso para colocar em prtica vrias
ideias que surgiro, como automatizar seu quarto ou sua casa,
por exemplo.

8 U1 - Introduo aos sistemas embarcados


Seo 1.1
Conceitos iniciais de microprocessamento
Dilogo aberto

Como j vivenciamos uma era de total conectividade, voc


provavelmente deve estar familiarizado com aparelhos eletrnicos,
no ponto de vista de usurio, e o propsito aqui que voc comece
a conhecer os sistemas como um engenheiro desenvolvedor.
Inicialmente, aproveitando alguns conhecimentos j adquiridos no
curso, estudaremos e entenderemos como o funcionamento
bsico de um sistema computacional, bem como sua composio.
Para consolidar esse primeiro aprendizado, consideraremos a
situao proposta na apresentao da unidade, na qual voc colocar
em prtica os conceitos estudados. Nessa situao, uma empresa
montadora de veculos contratou voc para projetar os mdulos
eletrnicos internos de um novo modelo. Sabemos que, apesar de
parte destes mdulos eletrnicos atuarem a partir de um programa,
todos os carros possuem alguns mdulos ausentes de processamento.
Isso tambm ocorre em nossas residncias, como o ventilador, as
torradeiras e os liquidificadores mais simples no so considerados
sistemas embarcados, ao contrrio dos televisores digitais, mquinas
de lavar e secretrias eletrnicas. Ento, por que alguns aparelhos
eltricos so projetados para atuar sob um programa computacional,
e outros no? No caso do carro, quais critrios voc usar para definir
quais sero os mdulos microprocessados? Quais aspectos do projeto
devem ser ponderados para optar por um sistema microprocessado?
Para um sistema embarcado, quais so as consideraes para
escolher entre um microprocessador, um microcontrolador ou at
mesmo um hardware digital (FPGA Field Programmable Gate Array,
em portugus Arranjo de Portas Programveis em Campo)?

No pode faltar
Ao atingir o pensamento lgico, racional e abstrato, o homem
demonstrou necessidade de simbolizar, quantificar e classificar as
coisas ao seu redor, para realizar suas tarefas do dia a dia, cada vez

U1 - Introduo aos sistemas embarcados 9


mais elaboradas. Utilizamos o sistema de nmeros h muitos anos,
antes mesmo de eles ganharem nome, como quando o pastor usava
uma pequena corda com ns para saber quantas ovelhas tinha.
Depois da formalizao da Matemtica e modelagem de fenmenos
fsicos, surgiu a ideia de automatizar um trabalho ou um processo de
operao matemtica, como a soma de dois nmeros naturais, mas
a partir de elementos da natureza, devidamente combinados, ou seja,
uma mquina ao invs de um ser humano.
As primeiras mquinas para realizar processamentos, como a
calculadora, ainda no tinham o nome de computador e foram
inicialmente mecnicas e at hidrulicas, antes de se tornarem
eletrnicas. Inclusive computadores analgicos foram desenvolvidos
em paralelo com os digitais, ou discretos. O nome computers era
usado, no incio do sculo XX, para se remeter a funcionrios, na
grande maioria mulheres, que realizavam tarefas como calcular e
processar informaes, ou seja, computar (GRIER, 2005).
A computao moderna resultado de vrias transformaes,
sendo moldada pelo avano da cincia e da tecnologia. Muitas
descobertas contriburam para isso, mesmo sem a perspectiva de
quanto estas ajudariam no avano das mquinas. A lgica matemtica,
por exemplo, foi consolidada por Gottfriend W. Leibniz, em 1702, e
serviu para George Boole formular a lgebra booleana, usada nas
operaes computacionais hoje (IFRAH, 2001). No entanto, antes de o
computador assumir essa forma que conhecemos, muitas propostas
diferentes foram apresentadas, sendo que algumas realmente
cumpriram seu papel esperado e serviram de inspirao para futuras
geraes. As calculadoras mecnicas, como a de Pascal, Pascaline,
aceleravam o trabalho dos calculistas, mas ainda se mostravam lentas
e limitadas. A era da computao digital iniciou sua forte ascendncia
depois da Segunda Guerra Mundial, com os computadores
eletromecnicos, os quais usavam rels mecnicos para realizar seus
clculos e tiveram como protagonista o sistema Mark I.
Em 1943, cientistas americanos comearam o projeto do ENIAC
Electronic Numerical Integrator and Computer, ou computador
integrador numrico eletrnico, o primeiro computador eletrnico
digital fabricado em escala (REGAN, 2012). Ele era chamado de
crebro gigante e era capaz de resolver muitas classes de problemas
numricos atravs de reprogramao do seu sistema operacional,

10 U1 - Introduo aos sistemas embarcados


armazenado em cartes perfurados. Comandada por uma mquina
de Turin completa, realizava seus clculos a partir de 7500 tubos de
vcuo e 17000 vlvulas terminicas e pesava 27 toneladas.
Essa primeira calculadora eletrnica usava aritmtica decimal
ao invs de binria, servindo inicialmente no processamento de
equaes diferenciais complexas para calcular trajetrias balsticas
para o exrcito. Anteriormente, seu trabalho era feito por um humano,
que demorava cerca de 2400 vezes mais tempo que o ENIAC.
Esse projeto deu origem ao EDVAC Electronic Discrete Variable
Automatic Computer, ou computador eletrnico automtico de
varivel discreta, que utilizava sistema de lgica binria. Foi construdo
pelos mesmos criadores do projeto ENIAC, visando aperfeioar vrios
problemas encontrados, alm de receber a contribuio de John von
Neumann, um matemtico hngaro de origem judaica, naturalizado
estadunidense. Esta foi a primeira vez que o cientista implementou
sua arquitetura: Von Neumann, que se tornou um padro para os
futuros computadores durante muitos anos, at surgir a arquitetura
Harvard, que ser estudada nessa seo.
Esse sistema contribuiu muito para a disseminao da computao,
pois j era usado, alm das foras militares, pelo governo e algumas
indstrias para realizar grandes processamentos. No entanto, o
uso do computador se tornou realmente livre quando, em 1951,
foi apresentado o UNIVAC Universal Automatic Computer, ou
computador automtico universal, o primeiro computador comercial
produzido, desenvolvido novamente pelos mesmos cientistas do
ENIAC (CERUZZI, 2003). Tambm operava a partir de programas
gravados em cartes perfurados e passou a receber as mais diversas
utilidades de processamento, apesar de ocupar uma sala de mais de
35 m. Depois da inveno e consolidao dos transistores, estes
substituram os tubos de vcuo nos projetos de computao e as
memrias de armazenamento magntico ou eltrico deram fim ao
uso de cartes perfurados para armazenar informao, gerando a
segunda gerao de computadores. Percebendo o suposto enorme
avano que isso traria, iniciou-se no mundo todo uma corrida cientfica
em busca de miniaturizao e otimizao em velocidade e energia
para sistemas digitais com semicondutores, ou seja, transistores
e memrias. Dessa forma, comearam a surgir os primeiros
circuitos integrados, os chips, que podiam realizar processamentos
avanados, consumindo pouca energia, tempo e espao e que se

U1 - Introduo aos sistemas embarcados 11


tornaram cada vez mais baratos, com a produo em larga escala.
Essa busca por incrementar e otimizar o computador parece no ter
fim, uma vez que, apesar de j dominarmos a computao para o
auxlio em muitas necessidades bsicas, ainda existem novas ideias
e aplicaes aguardando para se consolidar, como uma maior
velocidade de processamento ou o computador quntico. Estes
circuitos computacionais integrados tambm ganharam circuitos
adicionais especficos, reunindo todo o hardware necessrio para
a construo de um projeto, em uma nica placa ou chip. Com
a flexibilidade do programador escolher o comportamento do
software e o custo/tempo de projetos serem cada vez menores, os
sistemas computacionais foram absorvidos pela humanidade, o que
vivenciamos a partir das ltimas dcadas.

Computador, microprocessador e microcontrolador


Os sistemas embarcados, apesar de serem uma tecnologia
moderna, j esto disseminados e so amplamente utilizados em
nosso cotidiano. Praticamente todos os aparelhos eletrnicos que
compramos hoje so microprocessados ou controlados digitalmente.
Esses aparelhos podem ser controlados por trs ncleos distintos:
um microprocessador, um microcontrolador ou um sistema digital
sem software (FPGA). J os dispositivos digitais mais complexos,
denominados computadores, so basicamente todos feitos com
microprocessadores com os perifricos.

Assimile
Um sistema embarcado um dispositivo eletrnico e computacional
capaz de controlar perifricos a partir da execuo de um programa,
que no seja um computador. projetado para realizar tarefas
bem particulares, com grande restrio de recursos, memria e
processamento.

O computador geralmente muito mais caro que um sistema


embarcado, tem finalidades variadas e grande capacidade de
processamento e armazenamento. As calculadoras, por exemplo,
foram projetadas a partir de um processador para apenas calcular
e exibir os valores e com o mnimo de recursos possvel para
isto. J um computador, alm de tambm calcular, pode realizar

12 U1 - Introduo aos sistemas embarcados


milhares de outras tarefas. Desta forma, apesar de ser um sistema
computacional, classificamos uma calculadora como um sistema
embarcado e no um computador. Por outro lado, um sistema
eletrnico ausente de processamento, como um amplificador de
som, no considerado um sistema embarcado. No entanto, por
que alguns aparelhos possuem microcontroladores e outros no?
Na verdade, a definio do produto baseada nas necessidades de
processamento de dados e controle avanado. Um liquidificador, por
exemplo, devido natureza de sua funo, no necessita de nenhum
controle eletrnico, pois o chaveamento mecnico dos botes j
suficiente para encontrar a velocidade adequada. J o micro-ondas,
pela responsabilidade de ler as teclas, controlar o tempo e a potncia
de acionamento, um sistema embarcado, uma vez que o mesmo
sistema sem processamento teria muito mais componentes e seria,
consequentemente, mais caro e pior de ser construdo.

Exemplificando
Se pararmos para observar, podemos facilmente identificar quais dos
aparelhos que utilizamos possuem processamento, como o televisor
digital, os celulares e cmeras digitais, secretria eletrnica, micro-ondas,
MP3 player, carros, impressoras, mquina de lavar, entre muitos outros.
No entanto, alguns aparelhos no necessitam de processamento, como:
fogo, liquidificador, amplificador de som, interruptor, chuveiro, escova
de dentes eletrnica, etc.

Os microprocessadores so mais antigos que os


microcontroladores e, de fato, difcil falar em diferena entre eles,
pois dentro de todo microcontrolador h um microprocessador,
alm de outros componentes, e eles operam em aplicaes
muito semelhantes. O conceito sobre a diferena basicamente:
o microprocessador no possui perifricos e memria interna,
ao contrrio do microcontrolador. Os microcontroladores so
na verdade uma evoluo dos microprocessadores, uma vez que
se originaram devido a demanda da criao de SOCs System
On Chip (sistemas completos em um nico chip) para acelerar
o desenvolvimento de solues para controle eletrnico na
indstria. O processador no capaz de armazenar dados, acionar
perifricos, nem mesmo de tomar decises sozinho, sem um

U1 - Introduo aos sistemas embarcados 13


programa para conduzi-lo. Seus componentes internos so os
registradores de trabalho, unidade de controle central, a unidade
lgica e aritmtica, ponteiros e registrador de controle e status. Para
obter um sistema capaz de executar um programa para o controle
de algum perifrico, o processador deve se unir a outros elementos
atravs de barramentos, operando em conjunto. O cdigo fica em
uma memria no voltil e controla o UCP Unidade Central de
Processamento (o microprocessador). Por meio deste, o programa
comanda tambm as memrias e perifricos internos, realizando
as trocas de dados e controles da maneira correta, como foi
elaborado pelo programador do cdigo. O seu computador
pessoal um exemplo disso, pois apesar de ser um s, tem suas
partes internas separadas, conectadas por barramentos externos.
Voc com certeza j ouviu falar da memria RAM, do HD, da placa
de vdeo ou do processador. So os componentes que, juntos,
fazem seu computador funcionar plenamente, e que muitas vezes
so considerados perifricos internos, por estarem todos dentro
do gabinete. Para ns, corretamente, esses componentes so
classificados como perifricos externos, pois no foram construdos
dentro de um nico chip.

Reflita
Denominamos perifricos internos, os circuitos so embutidos dentro
do chip com o processador e se comunicam por barramentos internos.

Pense: quais so as razes para produzir computadores miniaturizado


em um nico circuito integrado? Quais so as restries desses sistemas,
comparados aos computadores pessoais?

Com a evoluo da tecnologia, a cincia e a indstria


trabalharam na integrao desses circuitos dedicados em um nico
chip, gerando o microcontrolador, capaz de controlar perifricos
externos de forma autnoma. Os microcontroladores so perfeitos
para a construo de sistemas automticos, pois so muito mais
baratos que um computador (geralmente menos que U$1,00),
tem todos os recursos necessrios para funcionar embutidos e
so fceis de ser projetados. Atualmente h inmeros modelos de
microcontroladores, o que permite uma escolha apropriada para
cada projeto, tendo em vista quais perifricos internos e quanto

14 U1 - Introduo aos sistemas embarcados


de memrias ser necessrio. A forma com que esses perifricos
internos esto dispostos e conectados denominada arquitetura
computacional e um modelo bsico pode ser visto na Figura 1.1.

Figura 1.1 | Arquitetura bsica de um microcontrolador

Perifricos Externos

Sensor LED Motor Boto Display


...

Perifricos Internos
Oscilador
Temporizador Porta Digital Interface Serial ...

Barramento de Endereo
CPU
Barramento de Instruo/Dado

Memrias
FLASH RAM EEPROM

Fonte: elaborada pelo autor.

Apesar de muitas arquiteturas diferentes terem sido apresentadas


e implementadas com sucesso, apenas duas delas se tornaram
um padro e ditaram os rumos da computao: a Harvard e a
Von Neumann. Esta ltima foi revelada pelo fsico e matemtico
hngaro-americano John von Neumann, que publicou seu modelo
de arquitetura no documento Primeiro rascunho de um relatrio
sobre o EDVAC, em 30 de junho de 1945 (REGAN, 2012). Essa
arquitetura caracterizada pelo compartilhamento das instrues
(ou programa) e dados em um nico espao de memria, alm de
utilizarem o mesmo barramento para transporte. Dessa forma, os
elementos internos se comunicam atravs de dois barramentos:
um para instrues e dados e outro para endereos, alm dos
outros dois essenciais, de controle e de relgio, ocultados na
Figura 1.2.

U1 - Introduo aos sistemas embarcados 15


Figura 1.2 | Arquiteturas de computador Von Neumann e Harvard
Von Neumann Harvard

CPU CPU

Instrues ou Endereo de Endereo de


Endereo

Instrues
Dados Instruo Dados

Dados
Memria de Memria de Memria de Memria de
Programa Dados Programa Dados

Fonte: elaborada pelo autor.

O fato das instrues e dados compartilharem a mesma memria


e barramento tornou-se um fator limitante para aplicaes que
precisavam de respostas mais rpidas, pois a busca de dados e de
instrues no podem ocorrer ao mesmo tempo. Pensando nisso,
foi criada a arquitetura Harvard, um modelo que armazena instrues
e dados em memrias diferentes, com barramentos individuais,
permitindo que instrues e dados sejam recebidos paralelamente
pelo ncleo. Depois este modelo, como o anterior, recebeu a
capacidade de processar uma instruo enquanto a prxima est
sendo lida, um processo denominado pipeline, ou canalizao.

Pesquise mais
O pipeline uma tcnica de processamento que trouxe muitos
benefcios para os processadores modernos. Pesquise mais sobre
esse procedimento e entenda como seu funcionamento bsico em:
<http://homepages.dcc.ufmg.br/~brunors/AOCII/pipeline.pdf>. Acesso
em: 8 jun. 2017.

Atualmente, a grande maioria dos processadores implementa a


arquitetura de Harvard modificada, muito parecida com a primria,
mas com adaptaes para otimizar a performance. Esta arquitetura
encontrada nos microcontroladores ARM Advanced Risc Machine
(ou mquina avanada de conjunto de instrues reduzido) e
processadores x86, bem como no ATmega328.

Memrias
Apesar de conter outros significados, para a computao,
memria significa componente de hardware capaz de armazenar

16 U1 - Introduo aos sistemas embarcados


informao digital, por tempo indeterminado, ou temporariamente,
apenas enquanto estiver ligada. As memrias so classificadas como:

EEPROM: atuais memrias de dados permanentes, que


podem ser apagadas e escritas eletricamente. So derivadas
das primeiras memrias, que s podiam ser gravadas no
momento da fabricao e por isso se chamavam ROM Read
Only Memory, ou memria de apenas leitura. Posteriormente
surgiu a PROM, adicionando a letra P de programmable, ou
programvel, que s pode ser gravada uma nica vez. Surgiu
ento a EPROM que pode ser gravada mais de uma vez, com
apagamento por luz UV e, por fim, a memria Electrically-
Erasable Programmable Read-Only Memory, ou memria
somente para leitura eletricamente apagvel e programvel.

RAM: so as memrias que armazenam dados


temporariamente, ou seja, memria voltil. Significa Random
Access Memory, ou memria de acesso aleatrio. Permitem
um acesso muito mais rpido, otimizando a resposta de
processamento. Dessa forma, os dados que sero utilizados
apenas um breve perodo e depois de processados perdem
a utilidade, ficam armazenados na RAM, bem como os
programas temporrios. As primeiras memrias RAM no
eram capazes de manter seu nvel de tenso lgico alto por
muito tempo e precisavam ter seus valores reatualizados.
Atualmente, as memrias RAM so estticas, chamadas de
SRAM (Static Random Access Memory) ou memria esttica
de acesso aleatrio. Tambm existem as DDRAM Dynamic
Random Access Memory, que so as memrias dinmicas,
presentes nos computadores e microcontroladores mais
avanados.

FLASH: este tipo de memria um modelo hbrido dos outros


dois citados, apesar de ser classificada como EEPROM e
no-voltil. Foi desenvolvida pela empresa Toshiba na dcada
de 80 e possui um tempo de acesso menor que a antecessora
EEPROM, embora no to rpido como a RAM. a memria
de programa, onde fica armazenado o cdigo.

U1 - Introduo aos sistemas embarcados 17


Perifricos
Assim como os microprocessadores, os microcontroladores
tambm precisam de perifricos para atuarem propriamente na
soluo de um problema, apesar de j possuir internamente alguns
essenciais. Sendo assim, esses circuitos, amplamente utilizados
com microprocessadores, foram integrados ao chip, gerando o
microcontrolador, so chamados de perifricos internos. Estes so
usados para traduzir os sinais exteriores ao chip para o seu ncleo
digital e garantem o funcionamento central do sistema, mas, visto
de uma maneira geral, no so suficientes para criar uma soluo
completa. O papel fundamental dos sistemas embarcados controlar
elementos da natureza (estado das sadas), a partir dos sinais de
entrada, que tambm representam o estado do ambiente controlado.
Esses valores devem ser transcritos do mundo fsico para o mundo
virtual, por meio de sinais eltricos e vice-versa e essa a funo dos
perifricos externos.

Exemplificando
At mesmo os projetos mais primrios precisaro de perifricos externos.
O sistema de um semforo, por exemplo, utilizar minimamente
os perifricos externos: boto de pedestre e luzes do farol, alm dos
perifricos internos: temporizadores e entradas/sadas digitais.

Atualmente os fabricantes oferecem diversos modelos de


microcontroladores, agrupados em famlias, em que cada um
possui um seleto grupo de perifricos internos, pensado para
atender a um tipo de problema especfico. Isso muito til na
hora de escolher o modelo apropriado para cada projeto, pois
certamente existe algum que contempla apenas os perifricos
e tamanho de memria necessrios para a aplicao, evitando
desperdcio de hardware e custo.

Reflita
Considerando o seu conhecimento prvio e o pouco que vimos at
agora, voc saberia descrever quais seriam os perifricos internos e
externos necessrios no projeto de um mdulo de som automotivo, o
rdio digital que temos nos carros atuais?

18 U1 - Introduo aos sistemas embarcados


Os principais mdulos ou perifricos internos encontrados nos
microcontroladores so:
Circuito oscilador: a fonte de sinais de relgio, usados
tanto pelo processador quanto pelos perifricos internos ou
externos, que precisam de referncia temporal ou sincronismo.
Memria RAM: local onde so armazenadas as variveis
declaradas no programa.
Memria FLASH: rea em que ser guardado o programa no
formato de linguagem de mquina. Tambm pode ser usada
para guardar constantes.
Memria EEPROM: acessada quando se deseja armazenar
dados por perodos indeterminados, como a senha de um
usurio ou os coeficientes de um filtro.
Portas digitais: so os mdulos responsveis por configurar e
gerenciar os canais digitais de entrada e sada.
Temporizadores: so os circuitos que fornecem ao programa
meios de escolher o intervalo de tempo entre aes,
permitindo o sincronismo temporal de tarefas concomitantes.
Mdulo PWM: do Ingls Pulse Width Modulation, ou pulso
com modulao de largura, um perifrico que pode
gerar sinais de PWM, muito teis para o acionamento
gradual de cargas.
Conversor analgico-digital: capaz de fazer a aquisio
e a digitalizao de sinais analgicos por amostragem e
comparaes sucessivas, respectivamente, fornecendo os
valores para o programa principal processar.
Conversor digital-analgico: tem o mesmo papel do
perifrico anterior, mas de forma invertida.
Interrupes: presente em alguns casos dentro do CPU,
este mdulo responsvel por configurar e gerenciar os
sinais de interrupo.
Mdulos de comunicao: a grande maioria opera com
transmisso serial, que pode ser sncrona ou assncrona.
Servem para transmitir e receber informaes de sistemas
externos, permitindo operaes conjuntas e distribudas. Os
mais encontrados so: UART Universal Asynchronous
Receiver/Transmitter, ou transmissor/receptor universal

U1 - Introduo aos sistemas embarcados 19


assncrono; SPI Serial Peripheral Interface (ou interface
perifrica serial) e IC - Inter-Integrated Circuit (ou circuito
inter-integrado).

Provavelmente, alguns desses perifricos internos so novidade


para voc, mas quando observamos os perifricos externos,
percebemos que estamos bem familiarizados com eles, pois j
somos usurios dos aparelhos eletrnicos h um bom tempo.

Exemplificando
Pensando nos sistemas computacionais de uma maneira geral, ou seja,
sistemas embarcados e computadores, os perifricos externos mais
comuns so: boto, tecla e teclado, resistor, LED (light-emitting diode,
ou diodo emissor de luz), display, mostradores, mouse, memria externa,
conversor A/D ou D/A, buffer ou driver de corrente, optoacoplador,
transistor, rel, contator, motor, sensor digital ou analgico, impressora,
scanner, controle remoto, leitora de cdigo de barras, leitor de impresso
digital, touchpad, cmera digital, headphone, mdulos sem fio (wifi,
bluetooth, 4G, etc), MP3 player, pendrive, carto de memria, caixa de
som, entre muitos outros.

Sem medo de errar


Lembre-se de que voc o responsvel por projetar os mdulos
eletrnicos internos de um novo modelo de veculo. Sabemos que,
apesar de parte destes mdulos eletrnicos atuarem a partir de um
programa, todos os carros possuem alguns mdulos ausentes de
processamento. Por que alguns aparelhos eltricos so projetados
para atuar sob um programa computacional e outros no? No
caso do carro, quais critrios voc usar para definir quais sero os
mdulos microprocessados? Quais aspectos do projeto devem ser
considerados para optar por um sistema microprocessado? Para
um sistema embarcado, quais so as consideraes para escolher
entre um microprocessador, um microcontrolador ou at mesmo
um hardware digital (FPGA)?
Os mdulos eletrnicos presentes no automvel devem possuir,
ou no, um microcontrolador de acordo com a necessidade de

20 U1 - Introduo aos sistemas embarcados


processamento ou at mesmo de comunicao avanada com
outros conjuntos.

Figura 1.3 | Mdulo automotivo microprocessado para injeo eletrnica

Fonte: <https://goo.gl/GAqMtg>. Acesso em: 22 abr. 2017

Os interruptores dos vidros eltricos, por exemplo, apesar de


se comunicarem com os motores acionadores dos vidros, no
necessitam de processamento, uma vez que a comunicao
primria, informando apenas os estados liga, desliga e sentido,
e isso pode ser feito atravs de apenas trs fios e comutadores
eltricos. No entanto, alguns desses mdulos possuem a funo
de anti-esmagamento que, atravs de um perifrico externo, um
sensor de corrente do motor do vidro consegue detectar um
aumento na corrente do motor devido ao bloqueio do vidro atravs
de um perifrico interno, conversor A/D. J os mdulos de freio
ABS, por exemplo, precisam de um controle mais apurado para o
acionamento dos freios e de uma comunicao mais complexa
para permitir o sincronismo eficaz dos quatro atuadores. Hoje
em dia, praticamente todos os sistemas embarcados so feitos
a partir de um microcontrolador, devido sua praticidade, fcil
implementao, robustez e custo.
Os microprocessadores so utilizados em sistemas com maior
necessidade de processamento, maior complexidade, que se
aproximam mais de um computador. Esses aparelhos so bem
mais custosos e geralmente no so usados na automao de
controle simples, mas geralmente em processamentos intensos de
imagem, som ou grandes massas de dados, como um videogame
moderno, de alta resoluo grfica, por exemplo.
Pensando agora no problema do carro, o nico elemento que
poderia usar um microprocessador seria o computador de bordo e
caso seja detectado que apenas um microcontrolador, no ser o

U1 - Introduo aos sistemas embarcados 21


suficiente para colher e processar todas as informaes do veculo.
Para um sistema embarcado criado a partir de hardware digital, ou
seja, FPGAs, sua utilidade fica ainda mais restrita. Esses sistemas
so geralmente prottipos, usados como base para construir chips
posteriormente ou para casos que demandam velocidade de
resposta superior ao de programas embarcados, ou paralelismo,
como em alguns grandes roteadores. Voc pode explorar mais
o estudo sobre hardware digital em DAMORE, R. Descrio e
Sntese de Circuitos Digitais. 2 Ed. So Paulo: LTC. 2012.
Alguns aparelhos, apesar de aparentemente no apresentarem
necessidade, incorporaram um microcontrolador. Isso se d
pela necessidade de inovao e sofisticao dos sistemas. Uma
torradeira, por exemplo, pode ter sua temperatura controlada
digitalmente, alm de mostrar quantos segundos faltam para
a torrada estar pronta. Um vendedor que faz essa escolha tenta
agregar valor ao seu produto destac-lo entre os concorrentes, por
oferecer mais recursos. Apesar da adio de um microcontrolador
aumentar o custo de um produto, este pode ser vendido por muito
mais devido aos benefcios adquiridos.

Avanando na prtica
Definio do ncleo de um sistema embarcado
Descrio da situao-problema
Uma empresa de desenvolvimento de jogos contratou voc
para gerenciar o desenvolvimento de um novo modelo de
videogame porttil de bolso, construdo a partir de um sistema
microprocessado: o famoso jogo Tetris. Para tal sistema, as entradas
consideradas devem ser os sinais dos botes do controle, a chave
liga e desliga e obviamente os sinais de relgio e de energia. As
sadas a serem controladas so o display de LCD - Liquid-Crystal
Display (ou mostrador de cristal lquido), que exibir a imagem do
jogo, dois LEDs que sinalizam ligado/desligado e jogo em pause,
ou parado, alm do sinal de udio, que deve ser enviado para os
autofalantes do jogo ou para o conector de headphone.

22 U1 - Introduo aos sistemas embarcados


Figura 1.4 | Exemplar de uma placa-carto (ncleo apenas) para o jogo tetris

Fonte: <https://goo.gl/TqnWYb>. Acesso em: 22 abr. 2017.

O seu primeiro passo definir os componentes usados neste


projeto, comeando pelo mais importante: o ncleo. Sabendo que
este no ser um computador, pois no precisa de tantos recursos/
custo, porm, deve ser um sistema embarcado, pois necessita
de processamento, o projeto deve ser construdo a partir de um
microprocessador, um microcontrolador, uma FPGA, ou no faz
diferena. Por qu? Quais so as consideraes relevantes para
essa deciso sempre feita na criao de um sistema embarcado?

Resoluo da situao-problema
Podemos afirmar que existem diferenas em vrios aspectos
de tal escolha, como a quantidade de processamento ou o custo
final. Pelo fato deste tipo de jogo no exigir grficos elaborados
e nem elevados nveis de processamento, pode-se afirmar que
um microcontrolador seria suficiente para responder a todas as
requisies em tempo real. A escolha de um microprocessador
traria a necessidade de anexar todos os perifricos necessrios para
compor o conjunto mnimo, que no caso seriam os circuitos de:
controle de energia e hibernao; oscilao e gerao de sinais de
relgio; temporizao; buffer de interface digital (portas digitais);
memria de programa; memria de dados voltil; memria de
dados no voltil e de conexo entre todos eles (barramentos).
Isso traria muita complexidade na construo do sistema,
aumentando a demora, o custo e as chances de defeitos. O uso
de uma FPGA tornaria o projeto tambm muito mais complexo e,
consequentemente, caro de ser projetado. Entretanto, vale ressaltar
que, se houver demanda de milhares de unidades, a criao de um
hardware digital dedicado pode reduzir custos.

U1 - Introduo aos sistemas embarcados 23


Faa valer a pena
1. Dentro de um microcontrolador, considerado um sistema completo ou
autossuficiente, esto inclusos algumas memrias e perifricos de entrada/
sada, os quais armazenam e transmitem informaes constantemente.
Os programas executados no microcontrolador so armazenados:

a) Na memria RAM.
b) Na memria FLASH.
c) Nos barramentos.
d) Nos perifricos.
e) No CPU.

2. Apesar de algumas arquiteturas computacionais diferentes terem


sido apresentadas e implementadas com sucesso, apenas duas delas se
tornaram um padro e ditaram os rumos da computao: a Harvard e a
Von Neumann.
A arquitetura de computadores Harvard contornou o limitante do modelo
de Von Neumann, permitindo uma gerao de processadores muito mais
poderosa. correto afirmar que isto se deu na arquitetura Harvard devido:

a) A programas e instrues usarem espaos de memria e barramentos


distintos, permitindo paralelismo na buscas destes.
b) Ao processador possuir mais de um ncleo, possibilitando processamento
paralelo.
c) Ter sido implantado o uso da memria RAM, acelerando o acesso aos
dados.
d) s memrias voltil e no voltil serem unificadas em um nico espao de
memria, simplificando o acesso.
e) Aos processadores trabalharem em rede, otimizando o processamento
geral.

3. Com a evoluo da tecnologia, a cincia e a indstria trabalharam na


integrao de alguns circuitos dedicados em um nico chip, gerando
o microcontrolador, capaz de controlar perifricos externos de forma
autnoma.
Qual dos componentes pode ser considerado um perifrico interno?

a) LED.
b) Boto.
c) Portas digitais.
d) Display.
e) Sensor fim-de-curso.

24 U1 - Introduo aos sistemas embarcados


Seo 1.2
Arquitetura AVR ATmega328
Dilogo aberto

Agora que j sabemos os conceitos bsicos sobre sistemas


computacionais, comearemos a aprofundar nosso estudo,
conhecendo o ncleo e a estrutura interna do microcontrolador
ATmega328 e o chip da placa Arduino UNO. O conhecimento destas
partes internas muito importante para os programadores de sistemas
embarcados, para saber quais recursos esto disponveis, como so
configurados e como atuam no sistema. Por exemplo, fundamental
para um desenvolvedor que programa em linguagem assembly saber
que o espao de memria RAM para variveis se inicia a partir do
endereo 0x0100, como ser estudado nesta seo.
Dessa forma, esta seo foi escrita para voc compreender a
estrutura bsica do microcontrolador ATmega328, com as principais
informaes sobre a sua construo, necessrios para a elaborao
de projetos reais feitos nos prximos captulos.
Para consolidar o seu estudo, retomaremos a situao-problema
desta unidade: agora voc o responsvel pelo projeto dos mdulos
eletrnicos internos de um novo modelo de carro. Todos os detalhes
da fase desse projeto devem ser descritos em um relatrio interno,
usado para o catlogo de registro, como patrimnio intelectual,
bem como para a aquisio de patentes. Sabendo que os mdulos
microprocessados sero construdos a partir do microcontrolador
ATmega328, voc deve registrar as operaes mais bsicas e a
primeira que lhe foi incumbida a simples soma de duas variveis.
Considerando a operao de soma de duas variveis (valores na
memria RAM) e o armazenamento do resultado em uma terceira
varivel, descreva qual a relao e como atuam os elementos: CPU
(ULA, registradores e unidade de controle), barramentos, memria
de programa, memria de dados e contador de programa. Esse
apenas o comeo do relatrio interno que documentar a descrio
de todas as operaes presentes nos produtos da empresa.

U1 - Introduo aos sistemas embarcados 25


No pode faltar
Para colocar em prtica todo o conhecimento adquirido durante
este curso, foi escolhido como protagonista o microcontrolador
ATmega328, presente na popular placa de desenvolvimento Arduino
UNO e fabricado pela Atmel. Este microcontrolador da famlia
AVR, de 8 bits, de baixo consumo (low power), tecnologia CMOS
Complementary MetalOxideSemiconductor (semicondutor
complementar de xido e metal) e construdo sobre a arquitetura
AVR RISC Reduced Instruction Set Computer (computador com
um conjunto reduzido de instrues), com arquitetura Harvard
modificada. Pode alcanar uma velocidade de processamento de at
20 MIPS (milhes de instrues por segundo), operando em 20MHz.
Sua memria de programa (FLASH) de 32 kbytes, possui 2 kbytes
de memria RAM e 1 kbyte de EEPROM. Observe que sua arquitetura
bsica exibida na Figura 1.5. No se preocupe com os perifricos
que no foram apresentados e com os termos em Ingls, pois eles
esto presentes apenas para referncias no futuro, quando forem
estudados, e sero devidamente descritos.

Figura 1.5 | Arquitetura interna do ATmega328

Fonte: adaptada de https://goo.gl/wTs9iD>. Acesso em: 29 abr. 2017.

26 U1 - Introduo aos sistemas embarcados


possvel verificar na Figura 1.5 que esto presentes os principais
perifricos internos, apresentados anteriormente na Seo 1 desta
unidade, os quais sero estudados individualmente, comeando
pelo ncleo, ou CPU Central Processing Unit (unidade central de
processamento):

Ncleo
Apesar de no ter o papel de armazenar dados, algumas informaes
importantes ficam contidas em registradores internos ao ncleo. Os
dados a serem processados pela ULA (Unidade Lgica e Aritmtica), ou
seus endereos de memria, ficam nos Registradores de Propsito
Geral, enquanto informaes para gerenciamento do processo ficam
em outros registradores especiais, de propsitos especficos.
Devido famlia de microcontroladores com o ncleo AVR, como
o caso do ATmega328VR, possuir a arquitetura Harvard (modificada,
pois h mais de um barramento de dados), as instrues so buscadas
na memria de programa por um barramento exclusivo ao de dados
e so executadas por um processo de canalizao (pipeline) de nvel
unitrio: enquanto uma instruo est sendo executada, a prxima j
pr-carregada do programa de memria, permitindo que estas sejam
executadas continuamente, uma em cada ciclo de relgio ou clock.

Registradores de propsito geral


So 32 registradores de 8 bits que possuem exclusivamente acesso
direto ULA, permitindo que a maioria das operaes seja feita em
um nico ciclo de clock. Portanto, todos os dados processados na
ULA, tanto constantes na memria de programa, quanto variveis
na memria RAM, devem ser previamente transferidos para esses
registradores, para ento serem operados.
Na Figura 1.6 possvel ver o interior do ncleo. Vale ressaltar
que os nmeros mostrados com o prefixo 0x esto representados
na base hexadecimal, assim como feito na maioria das linguagens
de programao. As denominadas flags, ou bandeiras de indicao,
servem para anunciar informaes importantes sobre o processo em
andamento e sero explicadas logo adiante, no registrador de status.

U1 - Introduo aos sistemas embarcados 27


Figura 1.6 | Ncleo do ATmega328

Fonte: elaborada pelo autor.

Reflita
Os registradores de trabalho geral recebem esse nome porque so
utilizados em todas as instrues do processador. As operaes no
podem ser feitas diretamente sobre os dados na memria, pois no h
ligao direta. Dessa forma, todos os dados processados sempre passam
por esses registradores e a maioria das instrues em um programa so
de transferncia interna de dados.

Seis dos registradores gerais podem ser agrupados em duplas,


formando um trio de ponteiros de endereamento indireto, de
16 bits, para acessar o espao de dados, melhorando clculos de
endereamento. Um destes trs ponteiros de endereos pode
tambm ser usado como ponteiro para recolher contedos na
memria de programa (FLASH), como uma tabela de look-up ou
tabela hash.

Pesquise mais

Este tipo de tabela no possui uma traduo oficial, recebe o nome de


tabela de consulta (ou busca ou espalhamento), muito utilizada por
programadores de todas as reas e ns a implementaremos futuramente.

28 U1 - Introduo aos sistemas embarcados


Uma tabela de senos pode ser criada para buscar os valores do seno a
partir de seu ndice, por exemplo. Entenda como esta tcnica funciona
em: <http://dcm.ffclrp.usp.br/~augusto/teaching/icii/Hash-Tables-
Apresentacao.pdf> ou <https://www.ime.usp.br/~pf/mac0122-2002/
aulas/hashing.html>. Acesso em 9 jun. 2017.

Os registradores configurados dessa forma so denominados de


registradores de 16 bits X, Y e Z. Conforme visto na Figura 1.7, cada
registrador geral possui um endereo de memria, mapeando-os
diretamente nos primeiros 32 locais do espao de dados do usurio
RAM. Apesar de no serem implementadas fisicamente na memria,
esta organizao proporciona grande flexibilidade no acesso dos
registradores, j que os registros de ponteiros X, Y e Z podem ser
definidos para indexar qualquer registro no arquivo.

Os registradores X, Y e Z
Os registradores capazes de se agrupar so o R26 at o R31 e so
definidos como descrito na figura:

Figura 1.7 | Registradores de 16-bit X, Y e Z

XH (high) XH (low)
Registrador X: 7 ... 0 7 ... 0
R27 R26

YH YL
Registrador Y: 7 0 7 0
R29 R28

ZH ZL
Registrador Z: 7 0 7 0
R31 R30

Fonte: elaborada pelo autor.

Nos diferentes modos de endereamento, estes registradores


de endereos tm funes como deslocamento fixo, incremento
automtico e decremento automtico.

ULA
Conectada diretamente aos registradores gerais, a unidade
ULA responsvel por executar operaes entre estes, ou entre

U1 - Introduo aos sistemas embarcados 29


um registrador e uma constante, de acordo com o comando
decodificado da instruo correspondente, aplicado pela unidade
central de controle. As operaes podem tambm ser executadas
com um nico operando e so divididas em trs categorias principais:
aritmtica, lgica e funes de bit. Aps uma operao aritmtica,
o registrador de status atualizado para exibir informaes sobre o
resultado da operao.
Algumas implementaes da arquitetura AVR tambm fornecem
um hardware multiplicador para valores com sinal e fracionrios. Os
seguintes esquemas de transferncia interna ao UCP (unidade central
de processamento) so suportados, sobre ponto de vista da ULA:
Um operando de entrada de 8 bits e um resultado de sada
de 8 bits.
Dois operandos de entrada de 8 bits e um resultado de sada
de 8 bits.
Dois operandos de entrada de 8 bits e um resultado de sada
de 16 bits.
Um operando de entrada de 16 bits e um resultado de sada
de 16 bits.

Registrador de status
Armazena informaes sobre o resultado da instruo aritmtica
mais recentemente executada, que podem ser usadas para alterar
o fluxo do programa atravs de operaes condicionais. Quando
o programa sofre o desvio para uma rotina de interrupo, este
registrador deve ser armazenado na pilha, como ser estudado, pois
isso no feito automaticamente via hardware. Conheceremos a
descrio desse registrador especial.

Figura 1.8 | Registrador de status do ATmega328

SREG (Status register) Endereo memria de


dados

BIT 7 6 5 4 3 2 1 0
flags I T H S V N Z C 0X005F

Fonte: elaborada pelo autor.

30 U1 - Introduo aos sistemas embarcados


Bit 7 I: Global Interrupt Enable: Bit de Ativao de Interrupo
Global. Deve ser acionado para que as interrupes possam
ocorrer. Alm deste, as fontes de interrupo devem ser
acionadas individualmente. Este bit funciona como um
disjuntor geral das interrupes, quando objetiva-se desabilitar
todas (individualmente habilitadas) de uma nica vez; ele
automaticamente zerado por hardware quando ocorre uma
interrupo e reativado quando a rotina de interrupo
termina, para permitir que outras rotinas de interrupo sejam
tratadas, caso estejam pendentes.
Bit 6 T: Copy Storage: Bit Armazenamento de Cpia. Usado
por instrues de cpia de bits.
Bit 5 H: Half Carry Flag: Indicador de meio carregamento.
Aponta que ocorreu o fenmeno Half care em algumas
operaes aritmticas, como manipulao de dados na forma
BCD Binary-coded decimal (codificao binria decimal).
Bit 4 S: Sign Bit: Bit de sinalizao. S = N V. o resultado
da operao ou exclusivo entre o bit indicador de negativo N
e indicador de excesso em complemento de dois V.
Bit 3 V: Twos Complement Overflow Flag: Indicador de
excesso em complemento de dois para operaes aritmticas.
Bit 2 N: Negative Flag: Indicador de Negativo. Aponta se
o resultado das operaes negativo, tanto lgicas quanto
aritmticas.
Bit 1 Z: Zero Flag. Indicador de zero. Indica se o resultado de
qualquer operao zero. Muito usado em saltos condicionais.
Bit 0 C: Carry Flag. Indicador de excesso. Conhecida como
o sinal de vai um dos somadores digitais. Mostra que o
resultado de uma operao lgica ou aritmtica excedeu o
tamanho da palavra, de 8 bits.

Assimile
O registrador de status muito importante para a execuo do programa,
pois todos os testes e desvios condicionais dependem das informaes
nele contidas.

U1 - Introduo aos sistemas embarcados 31


Ponteiro de pilha
A pilha usada principalmente para armazenar dados temporrios,
variveis locais e endereos de retorno aps interrupes e chamadas
de subrotina. O sistema de pilha implementado de maneira invertida,
parte do endereo mais alto e assume endereos menores a partir que
a pilha aumenta. A nica finalidade do ponteiro de pilha apontar para
endereo do ltimo dado armazenado na pilha e apenas este pode ser
retirado. Dessa forma, os primeiros dados a serem colocados sero os
ltimos a serem tirados, seguindo uma fila do tipo LIFO ou FILO First
Input, Last Output (primeiro a entrar, ltimo a sair).
A pilha deve ser definida na RAM pelo programa antes da ocorrncia
de qualquer subrotina ou interrupo. O valor do ponteiro de pilha inicial
igual ao ltimo endereo da RAM e este registrador implementado
como dois registos de 8 bits no espao de entradas e sadas. A pilha
efetivamente alocada na memria RAM e consequentemente o
tamanho da pilha limitado exclusivamente pelo tamanho de memria
RAM, alm de quanto dela ser utilizado por outras finalidades.

Contador de programa
Funciona tambm como um ponteiro, porm indica para o
processador qual o endereo da prxima instruo a ser executada
na memria de programa. incrementado automaticamente na
medida em que as instrues so executadas, exceto quando ocorrem
saltos, que tm seus endereos indicados na prpria instruo. Estes
saltos, diretos ou por chamadas de subrotina, determinam o fluxo do
programa e podem desvi-lo para qualquer endereo vlido. Tambm
pode ser diretamente manipulado pelo programa usurio.

Unidade central de controle


Considerado o ncleo do ncleo. Esta mquina de estados
responsvel por controlar de fato todos os outros componentes,
executando as operaes descritas pelas instrues, depois de
decodificadas. Opera a partir do princpio da Mquina de Turin
Universal, realizando as aes de busca, decodificao e execuo.

Barramentos
O barramento de dados de 8 bits, caracterizando o nmero de
bits do microcontrolador. As instrues do ATmega328 so de 16

32 U1 - Introduo aos sistemas embarcados


ou 32 bits (a maioria de 16 bits). Assim, cada instruo consome
dois ou quatro bytes na memria de programa (um byte par e um
mpar). O acesso s posies de memria, dado pelo contador de
programa (Program Counter PC), realizada de dois em dois bytes,
comeando sempre por uma posio par. Portanto, o barramento de
endereos deve ser capaz de enderear sempre posies pares da
memria de programa. Assim, o bit menos significativo do barramento
de endereos pode ser desprezado. Desta forma, para a memria de
32 kbytes ( 25 . 210 = 215 bytes) do Atmega328 so necessrios 14 bits
de endereamento ( 214 = 16.384 endereos) (LIMA; VILLAA, 2012).

Memrias e espaos
O espao de memria de programa dividido em duas sees:
a parte de Boot Program, ou programa de inicializao, e a parte de
programa de aplicao, ou programa usurio. Ambas as sees possuem
bit de travamento para protees de escrita ou leitura e escrita.
Durante interrupes e chamadas de subrotinas, o endereo de
retorno do PC armazenado na pilha. Assim como o ponteiro de
pilha, todos os programas usurios devem inicializar o SP na rotina
de reset, antes de subrotinas e interrupes ocorrerem, ou seja, a
primeira ao a ser feita quando ligado. Os dados na SRAM podem
ser facilmente acessados atravs de cinco diferentes modos de
endereamento suportados pela arquitetura AVR. Os espaos de
memria na arquitetura AVR so todos lineares e regulares.
Figura 1.9 | Espaos de memria de programa e de dados do ATmega328

Memria de Programa Memria de Dados


(FLASH) (RAM)
Endereo Endereo
0x0000 32 Registradores de 0x0000
trabalho geral
Seo do programa 0x001F
Usurio (aplicao) 0x0020
64 Registradores de
Entrada/Sada 0x005F
0x0060
160 Regis. de
extenso de E/S
Seo do programa 0x00FF
0x0100
de boot 2048 bytes Seo
de RAM para
0x3FFF aplicao (variveis) 0x08FF
16-bit 14-bit 8-bit 12-bit

Fonte: elaborada pelo autor.

U1 - Introduo aos sistemas embarcados 33


Tempo de execuo de instrues
O sinal de clock usado pelo ncleo AVR gerado diretamente pela
fonte de relgio selecionada para chip e nenhuma diviso de relgio
feita internamente. O paralelismo gerado pelo sistema de pipeline,
onde a busca e execuo de instrues ocorrem simultaneamente,
permitido pela arquitetura Harvard e prov o conceito de rpido
acesso ao arquivo de registros.

Exemplificando
Para entender como esse processo de pipeline funciona, observe a
imagem abaixo, que mostra em cada ciclo de relgio uma instruo e
executada e a outra seguinte j capturada pela CPU para ser executada
no ciclo seguinte.
Figura 1.10 | Execuo das primeiras instrues em pipeline

Fonte: elaborada pelo autor.

Tratamento do reset e interrupes


O sistema AVR fornece vrias fontes de interrupo diferentes.
Assim como o vetor de reset, essas interrupes possuem vetores
de programa individuais, que apontam, cada um, para sua respectiva
rotina no espao de programa. Isso significa que, assim que uma
interrupo ocorre, o programa salta para o endereo indicado no
vetor dessa interrupo, onde fica a devida rotina de tratamento, e

34 U1 - Introduo aos sistemas embarcados


retorna para onde estava antes do desvio. Todas as interrupes so
ativadas atravs de bits individuais, nos devidos registradores, alm do
bit habilitador global de interrupes, visto no registrador de status.

Pesquise mais
O sistema de interrupes e reset do ATmega328P possui mais detalhes
interessantes de serem observados. Leia o curto trecho a respeito no
seu datasheet, ou manual, na pgina 32: <http://www.atmel.com/pt/
br/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_
Datasheet.pdf>. Acesso em: 10 jun. 2017.

Sem medo de errar


Uma montadora de veculos est na fase de criao de um novo
modelo e, como esta trabalha com muitos servios terceirizados,
contratou algumas pequenas empresas de desenvolvimento
tecnolgico para construir as diversas partes do novo modelo. Nesse
contexto, voc funcionrio da instituio responsvel por projetar os
mdulos eletrnicos internos de toda a parte eltrica do carro. Todos
os detalhes da fase de projeto devem ser descritos em um relatrio
interno, usado para o catlogo de registro, como patrimnio intelectual,
bem como para a aquisio de patentes. Sendo assim, voc deve
documentar as primeiras operaes, as mais bsicas, descrevendo o
processo que ocorre internamente ao microcontrolador, ou seja, qual
a relao e como atuam os elementos: CPU (ULA, registradores e
unidade de controle), barramentos, memria de programa, memria
de dados e contador de programa, considerando a operao de
soma entre dois valores na memria RAM e a devoluo do resultado.
O contador de programa (PC), ou ponteiro de programa, que
um registrador especial dentro do ncleo (ver Figura 1.11), aponta
para instrues usadas para esta tarefa na memria de programa.
Isso feito diretamente atravs do barramento de endereo de
instrues (oculto na Figura 1.12, mas presente na Figura 1.13). Pelo
mecanismo interno, assim que o valor do PC atualizado, esse
valor transmitido pelo barramento de endereo de instrues e as
instrues correspondentes aos valores do PC so transferidas para o
processador (ncleo) atravs do barramento de instrues, indicado
pelo crculo amarelo nmero 1 na Figura 1.12.

U1 - Introduo aos sistemas embarcados 35


Figura 1.11 | Ncleo do ATmega328

Fonte: elaborada pelo autor.

A informao decodificada e executada efetivamente pela


unidade central de controle (UCC), que age autonomamente sobre
as partes internas CPU, como os barramentos de endereos. Para
o nosso caso, como sero buscados valores na RAM, a UCC coloca
o correspondente endereo no barramento de endereo de dados
(tambm oculto na Figura 1.12, mas presente na Figura 1.13) e no ciclo
de relgio seguinte busca o valor daquele endereo no barramento
de dados, indicado pelo crculo amarelo nmero 2, da Figura 1.12.
Figura 1.12 | Estrutura interna do microcontrolador ATmega328

Fonte: adaptada de <https://goo.gl/QH9wtt>. Acesso em 29 abr. 2017.

36 U1 - Introduo aos sistemas embarcados


De acordo com a instruo, a UCC colocar os valores das duas
variveis buscadas na RAM nos respectivos registradores de propsito
geral e, depois disso, realizar a soma desses dois operadores,
controlando quais registradores so conectados ULA e indicando a
esta que a operao a ser feita uma soma. De maneira automtica, a
ULA informa ao registrador de status o valor de todas as flags afetadas
pelo resultado desta ltima operao.
Figura 1.13 | Barramentos da arquitetura Harvard do ATmega328

CPU

Endereo de Instrues Endereo de


Instruo Dados
Dados

Memria de Memria de
Programa Dados

Fonte: elaborada pelo autor.

Dessa forma, necessrio um total de quatro aes para


completar essa tarefa computacional:
1. O primeiro operando carregado da memria de dados
para um dos registradores gerais.
2. O segundo operando carregado da memria de dados
para algum outro dos registradores gerais.
3. Os dois valores so processados (somados) pela ULA e o
resultado retornado para um dos dois registradores gerais
usados.
O resultado transferido para o devido endereo da memria
de dados.

Avanando na prtica
Definio de uma arquitetura de computador
Descrio da situao-problema
Uma empresa de microcontroladores est desenvolvendo um
novo modelo e contratou voc como engenheiro de arquitetura
de computadores para definir como ser a estrutura interna do

U1 - Introduo aos sistemas embarcados 37


conjunto. Para limitar o preo e a utilidade do novo chip, a empresa
usou os seguintes requisitos:
O processador de 16 bits.
As instrues so todas de 32 bits.
A memria de programa (FLASH) tem 32 kbytes.
A memria RAM (ou memria de dados temporrios) tem
4 kbytes.
Ambas as memrias tm largura de 8 bits, ou seja, um byte
em cada endereo.
Sabendo que esta ser uma mquina Harvard, defina quais
devem ser as larguras dos quatro barramentos: endereo de
instruo, instruo, endereo de dados e dados.

Resoluo da situao-problema
Considerando que o processador de 16 bits, significa que este
processa dois operadores de 16 bits em cada ciclo de operaos
e, portanto, o barramento de dados deve ser de 16 bits de largura.
Sabendo que as instrues so todas de 32 bits, necessrio que
o barramento de instrues seja de tambm 32 bits, para que o
processador possa buscar uma instruo completa em cada ciclo
de relgio. Foi dito que as memrias possuem 8 bits de informao
em cada endereo, portanto so necessrios 12 bits para enderear
os 4 kbytes de memria de dados, pois com 12 bits possvel gerar
4096 (=212) nmeros diferentes, ou seja, endereos de memria.
Esse nmero igual a 4K, pois 4k = 4* 210 = 212 . Isso define a
largura de 12-bits para o barramento de endereo de dados. Se
as instrues fossem tambm de 8 bits, a conta seria a mesma
para o barramento de endereo de instrues, pois cada instruo
estaria em um endereo de memria. Porm, cada instruo
ocupa exatamente quatro posies de memria, uma vez que
o enunciado diz que as instrues so todas de 32-bits, o que
significa que a primeira instruo estar no byte de endereo zero
e a segunda instruo estar no byte de endereo 4. Como esse
barramento de endereos acessar somente endereos mltiplos
de 4, os ltimos dois bits menos significativos no precisam ser
considerados e podem ser desprezados pelo sistema.

38 U1 - Introduo aos sistemas embarcados


Desse modo, os 32 kbytes de memria de programa, que
precisariam de 15 bits para acessar todos os endereos em bytes
(32k = 25 * 210 = 215), precisaro de apenas 13 bits para acessar apenas
endereos mltiplos de 4. Isso define o barramento de endereo de
instrues de 13 bits. Esse mesmo valor pode ser obtido por um
outro raciocnio equivalente: Se cada andar da memria FLASH
possusse 32 bits de largura, seria necessrio 32k/4 = 8k andares para
alocar os 32kbytes de memria de programa, ou seja, 8k endereos.
Assim, so necessrios 13 bits para gerar 8K endereos diferentes,
pois 8K= 8* 210 = 213.

Faa valer a pena


1. O ncleo possui um pequeno espao de memria voltil, onde se
encontram os 32 registradores de propsito geral, ou registradores de
trabalho, muito utilizados durante a execuo do programa embarcado.
Os registradores de trabalho, ou registradores de propsito geral, so
usados para:

a) Armazenar os resultados dos processamentos por tempo indefinido


para futuras decises.
b) Calcular operaes lgicas e aritmticas e transferir os resultados para
a ULA.
c) Guardar instrues do programa que podem ser utilizadas em qualquer
momento.
d) Armazenar os valores que sero processados pela ULA, pois tm acesso
direto e exclusivo.
e) Receber as instrues das rotinas de interrupo para paralelizar o
tratamento.

2. Apesar do ncleo do microcontrolador no possuir o papel de


armazenar massas de dados, algumas informaes importantes ficam
temporariamente retidas, ou nos registradores de propsito geral, ou em
alguns registradores especiais, como os ponteiros de programa e de pilha
e o registrador de status.
As informaes contidas no registrador de status so importantes para o
programa porque:

a) Refletem como foi o resultado da ltima operao, decidindo e desviando


o fluxo do programa atravs de operaes condicionais.
b) Auxiliam o programa a decidir se as variveis sero guardadas na
memria RAM ou na memria EEPROM.

U1 - Introduo aos sistemas embarcados 39


c) Informam atravs de suas flags quais foram as ltimas cinco rotinas ou
funes chamadas pelo programa principal, til para o programa situar
sobre os caminhos percorridos no fluxograma.
d) Representam os dados mais importantes e que devem ficar armazenados
para processamentos futuros.
e) So os valores das constantes usadas pelo programa atual que devem
ficar no ncleo para rpido acesso.

3. A arquitetura de qualquer microcontrolador caracterizada, entre outas


coisas, pelas dimenses ou larguras dos barramentos internos, como so
as conexes entre o ncleo, memrias e perifricos internos e o tamanho
das memrias. No microcontrolador Atmega328, esses parmetros foram
escolhidos para prover uma estrutura eficiente para o conjunto de recursos
disponveis.
A respeito da arquitetura e barramento do ATmega328P, considere as
seguintes afirmaes:

I Os endereos das memrias so de 8 bits e armazenam dados de 16 ou


32 bits, o que define o nmero de bits do processador.
II O contador de programa (PC) s pode assumir valores pares, pois as
memrias armazenam dados de 8 bits em cada endereo e as instrues
so todas de 16 ou 32 bits.
III As memrias de dados e de programa possuem barramentos diferentes,
tanto para seus contedos quanto endereos, pois a arquitetura adotada
por esse chip do tipo Harvard.
IV As instrues so de 8 bits e manipulam dados que podem ser de 8, 16
ou 32 bits, dependendo da necessidade de processamento.
Considerando a sequncia, qual das alternativas abaixo retrata corretamente
quais afirmaes so falsas e quais so verdadeiras?

a) F, V, F, V.
b) F, F, V, F.
c) F, V, V, F.
d) V, V, F, F.
e) F, V, V, V.

40 U1 - Introduo aos sistemas embarcados


Seo 1.3
Linguagem Assembly
Dilogo aberto

Um entendimento aprofundado sobre o funcionamento dos


microprocessadores transcorre na programao em sua forma mais
fundamental: instruo por instruo. E para isso, antes de comear
a construir cdigos em Assembly, um programador deve conhecer
intimamente os recursos da mquina que estar operando. Voc
perceber que usaremos diretamente os conceitos de arquitetura
do AVR, estudados na segunda seo desta unidade. Agora, voc
entender a importncia desses conceitos e a utilizao deles para
a programao de sistemas embarcados. Depois de estudar essa
nova seo e de compreender o exemplo final, voc estar pronto
para criar novos programas em Assembly.
Estudaremos aqui os principais aspectos das instrues utilizadas
na programao em Assembly, para os microcontroladores AVR,
como o ATmega328. Para colocar esse conhecimento em prtica,
resolveremos as ltimas questes sobre a situao-problema
apresentada para esta unidade. Lembre-se de que uma empresa
montadora de veculos est na fase de criao de um novo modelo
e contratou voc como profissional responsvel para projetar os
mdulos eletrnicos internos desse carro. Todos os detalhes da fase
de projeto devem ser descritos em um relatrio interno, usado para
o catlogo de registro, como patrimnio intelectual, bem como
para a aquisio de patentes, como descrito na seo anterior.
O prximo trabalho ser registrar as etapas mais bsicas do
processamento executado nesses mdulos, porm agora em
termos de programao e no de funcionamento interno do
sistema. Dessa forma, voc foi incumbido de escrever o trecho de
cdigo correspondente ao de: buscar os valores contidos nos
endereos 0x0109 e 0x010A para os registradores R16 e R17, som-
los e devolver o resultado para o endereo 0x010B. Alm disso,
voc deve descrever como o processador atua para executar cada
instruo e quais so as consequncias indicadas pelo registrados de

U1 - Introduo aos sistemas embarcados 41


status. Toda a teoria necessria para isto est nessa seo estudada.
Vamos colocar todo esse conhecimento em prtica?

No pode faltar
Linguagem de mquina para o microcontrolador AVR
O desenvolvimento de projetos em linguagem de mquina
praticamente inexistente por se tratar de um trabalho lento e
tedioso, todavia ainda possvel encontrar vrias ferramentas que
auxiliam a desenvolver este tipo de trabalho. J o Assembly uma
linguagem que est um nvel acima de abstrao, nas camadas
de abstrao, quando comparada com a linguagem de mquina,
pois suas instrues so mnemnicas (rtulos ou apelidos) que
correspondem individualmente a comandos (ou instrues) em
linguagem de mquina. Existem, ainda, linguagens de mais alto nvel,
como C, que para tornar seus programas embarcveis na memria
devem ser convertidos por um compilador para um cdigo em
Assembly ou diretamente em linguagem de mquina. Vale salientar
que as instrues em linguagens de mais alto nvel geralmente
correspondem a muitas instrues em linguagem Assembly e isso
permite a construo em blocos padres, o que agiliza muito o
processo de programao.
A programao em linguagem de mquina (literalmente escrever
zeros e uns) exige um entendimento tcnico do programador de como
as instrues so representadas, formadas, escolhidas e executadas.
Todas as instrues computacionais seguem um padro bsico:
possuem um prefixo que identifica a instruo, ou seja, qual a ao
que deve ser executada pelo processador. Os bits desse prefixo so
chamados de bits de controle e indicam se aquela instruo uma
soma, uma multiplicao, uma operao lgica, uma transferncia de
dados ou um salto no programa. Seguido desse prefixo, na instruo
existe mais um ou dois campos, referentes aos operadores, ou seja,
quais elementos a serem processados na execuo da instruo.
Nesses campos so identificados: valores constantes, registradores
de trabalho e endereos da memria a serem acessados. Os bits
nesse campo so chamados de bits de dados.
Na criao de cdigos em linguagem de mquina, o programador
deve realizar operaes aritmticas a prprio punho para determinar

42 U1 - Introduo aos sistemas embarcados


alguns valores na instruo, alm de escolher individualmente os
bits de controle. A alterao de uma parte do programa pode causar
efeitos em outras instrues do cdigo, o que demanda algumas
anlises detalhadas do programa cada vez que este sofre alguma
edio. Porm, apesar da programao nessa forma ser algo
realmente trabalhoso e propenso a erros, importante apresent-
la inicialmente para que estudantes, como voc, possam entender
como os programas embarcados so construdos e executados.
Fique tranquilo porque no construiremos cdigos assim, apenas
abordaremos um pequeno exemplo para demonstrar como
construdo um programa na sua forma mais crua: apenas zeros e
uns. Nesse trecho de cdigo, somaremos 1 + 2 e, como aprendido
anteriormente, todos os valores a serem operados pela ULA devem
estar nos registradores de trabalho (dentro do ncleo). Para isso
usada a instruo LDI, que ser estudada mais adiante ainda nesta
seo, e possui o prefixo indicativo 1110 (0xE em hexadecimal).
Dessa forma, essa tarefa deve ser composta por trs instrues,
duas para armazenar os valores 1 e 2 em dois registradores de trabalho
e uma para realizar a soma e guardar o resultado, a instruo ADD,
de prefixo 000011. Essas instrues so de 16 bits e tm o seguinte
formato, apresentado na Figura 1.14. Nessa nomenclatura, Rd significa
registrador de destino, ou seja, onde armazenado o resultado da
instruo, alm de ser o primeiro operando em instrues lgicas
e aritmticas, como ser visto logo adiante. O segundo operador,
dependendo da instruo, pode ser o K ou o Rd, que correspondem
a uma constante e o registrador de origem, respectivamente.

Figura 1.14 | Formato das instrues LDI e ADD

1110 kkkk dddd kkkk LDI R(16+D), K

1110 0000 0010 0101 LDI R18, 5

0000 11rd dddd rrrr ADD RD, RR

0000 1111 0001 1111 ADD R17, R31

Fonte: elaborada pelo autor.

U1 - Introduo aos sistemas embarcados 43


Perceba que os campos no so contnuos e o programador
deve encontrar o valor do campo D=2 pela soluo 16+D=18,
pois para essa instruo o primeiro endereo (zero) corresponde
ao registrador R16. Portanto, considerando que este cdigo seja
a primeira parte do programa, ou seja, est no incio da memria
FLASH, ela estaria com os seguintes valores nos primeiros endereos,
apresentados na Figura 1.15:
Figura 1.15 | Valores contidos no incio da memria FLASH

Memria FLASH
Endereo Contedo Assembly equivalente
0 1110 0000 0000 0001 LDI R16, 1
1 1110 0000 0001 0010 LDI R17, 2
0000 1111 0000 0001
2 ADD R16, 17
...
3

Fonte: elaborada pelo autor.

Assembly
Realmente a linguagem de mquina no uma maneira
agradvel de criar um programa. Assim, agora estudaremos como
construir um programa em linguagem Assembly, bem prxima da
linguagem de mquina, pois tem uma relao direta, um a um,
para todas as instrues. No Assembly, as instrues de mquina
recebem mnemnicos, ou seja, apelidos, abstraindo o programador
de alguns detalhes e aumentando a legibilidade do cdigo. Cada
linha corresponde a uma instruo e segue o seguinte modelo:
[Rtulo] [Comando] Rd, k [;comentrio]
O rtulo representa um apelido para o endereo da memria
onde estar essa instruo, pode no existir e usado pelo programa
como referncia para as instrues de salto, que veremos mais
frente, nesta seo. O comando onde est o mnemnico, ou
seja, a instruo que o ncleo deve executar. O Rd representa o
registrador de destino, ou seja, qual dos registradores de propsito
geral receber o resultado da instruo. Para instrues de
deslocamento de dados para a memria, o Rd assume um endereo

44 U1 - Introduo aos sistemas embarcados


de memria, para onde o dado deve ser transferido, como ser visto
adiante. O K o registrador de origem ou a constante usada na
operao. Apesar de ser minoria, algumas instrues so de apenas
um operador, representado por Rd. O comentrio deve comear
com o ; (ponto e vrgula) e no causa nenhum efeito no programa.
Apesar de inicialmente parecer sem utilidade, muito importante
o hbito de comentar os programas enquanto so construdos,
para que outras pessoas possam entender mais facilmente ou at
mesmo o prprio programador, quando for rever o programa. Os
comentrios so facultativos.

Estrutura de um programa embarcado


Os programas embarcados possuem uma estrutura bsica
especfica, que os diferenciam dos programas tradicionais de alto
nvel (para computadores) basicamente por no serem encerrados.
Assim, como os sistemas operacionais, os programas embarcados
devem estar sempre em atividade, prontos para operar, at que o
sistema seja desligado. No entanto, existem algumas tcnicas de
hibernao que permitem o congelamento do processamento
para poupar energia. Os programas embarcados podem ser
construdos a partir de inmeros fluxogramas diferentes, mas todos
devem respeitar uma estrutura bsica, apresentada na Figura 1.16:

Figura 1.16 | Estrutura bsica de programas para sistemas embarcados

Fonte: elaborada pelo autor.

Podemos observar que a parte da inicializao ocorre apenas


uma vez, quando o programa iniciado. Em seguida, o sistema
entra em seu ciclo de operao, onde realizar o seu trabalho.

Assimile
Na fase de inicializao, feita toda a configurao do sistema,
preparando o conjunto para os trabalhos que sero realizados. Essas
primeiras aes so: definio de quais pinos do microcontrolador

U1 - Introduo aos sistemas embarcados 45


sero entradas ou sadas; configurao dos perifricos e definio de
como eles sero utilizados; declarao das variveis usadas pela funo
principal ou variveis globais; chamadas de funes ou rotinas que
devem ser executadas apenas no incio do processo.

Deve ficar claro que o cdigo pertencente a essa fase executado


apenas uma vez, tendo essa ao repetida apenas se o microcontrolador
for reiniciado. A partir disto, o sistema est pronto para iniciar sua fase de
trabalho propriamente dita, etapa que recebe o nome de loop infinito,
pois onde o programa deve permanecer enquanto o dispositivo estiver
energizado. Basicamente, as aes sequencias nesse lao so: leitura
das entradas, processamento dos dados e atualizao das sadas.

Diretivas de Assembly
Enquanto as instrues informam CPU o que ela deve fazer,
as diretivas de pr-compilao (tambm chamadas de pseudo-
instrues) so usadas pelo compilador no momento de gerar o
programa em linguagem de mquina. Esse tipo de comando no
se torna instrues executadas, mas cria amarraes que ajudam
muito na fase de programao. Por exemplo, voc pode definir a
constante MEIADUZIA = 6 e usar esse nome no programa. Na hora
da compilao, todos os nomes so antes substitudos pelo seu
valor definido. As principais so:
.EQU (equate), diretiva usada para definir constantes,
como a tradicional diretiva #define, utilizada por muitas
linguagens, como a C (MIZRAHI, 2008) e tambm define
endereos fixos da memria de dados, ou seja, as variveis
do programa. Desse modo, se um programa monitora o
sinal de temperatura, por exemplo, e armazena o seu valor
sempre no endereo 0x021A, a diretiva pode ser usada:
.EQU TEMPERATURA = 0x021A. Ou, para definir uma
constante, de nome MEIADUZIA, por exemplo, teramos:
.EQU MEIADUZIA = 6.

Voc pode perceber que para os dois casos, o comando igual,


o que diferencia a forma com que a definio usada, ou melhor,
se empregada no lugar de um valor ou de um endereo.
.SET (equate), diretiva que funciona da mesma maneira
que a .EQU, com a diferena de poder ser modificada

46 U1 - Introduo aos sistemas embarcados


posteriormente no programa, assumindo um novo valor dali
em diante.
.ORG XX (origin), diretiva usada para indicar, no programa
escrito, um endereo forado para as instrues abaixo,
ditado pelo valor XX. sempre empregado para definir onde
ser o incio do endereamento, com XX = 0, ou seja, que
a instruo abaixo dele ser a primeira e estar no endereo
0x0000. Serve tambm para definir endereos na memria
de dados.
.INCLUDE NomeArquivo, avisa ao compilador que o arquivo
indicado deve ser includo e seu contedo considerado na
compilao. Este arquivo pode conter outras rotinas usadas
pelo programa ou apenas um conjunto de definies, como
o arquivo que ser usado em todos os nossos programas em
Assembly, na primeira linha, a diretiva .INCLUDE m32def.inc,
permitindo o uso de nomes dos registradores no programa.

Exemplificando
Como foi mencionado, o Assembly, apesar de ser uma linguagem de
baixo nvel, traz consigo algumas facilidades, como o uso de definies.
Para exemplificar como as diretivas de compilao funcionam, considere
a instruo: IN R12, PINB. No lugar de PINB, o compilador insere o seu
endereo correspondente na hora de gerar o cdigo, que 0x0018.
Tanto essa quanto todas as outras definies para essa famlia de
microcontroladores est presente no arquivo que deve ser includo em
todos os programas em Assembly: m32def.inc.

Representao dos formatos de dados


Apesar de todos os dados serem armazenados no sistema na forma
de bits (ou sequncia de bits), existem outras formas de representar
valores na escrita do programa.
Nmeros binrios: so sequencias de bits iniciadas pelo prefixo
0b, portanto, se voc quiser carregar o valor 5 no registrador
R16, deve usar: LDI R16, 0b00000101.
Nmeros hexadecimais: algarismos hexadecimais (do 0 ao 9
e do A ao F) com o prefixo 0x. Assim, para armazenar o valor
17 no registrador R21, o comando : LDI R21, 0x11.

U1 - Introduo aos sistemas embarcados 47


Nmeros decimais: so os nmeros da forma que usamos
naturalmente e sem nenhum prefixo. A instruo para
armazenar o valor 150 no registrador R18 : LDI R18, 150.
Caractere ASCII: tambm possvel manipular caracteres
seguindo o padro da popular tabela ASCII, com o seu valor
binrio correspondente. Para isso, ao invs de prefixo, usamos
aspas simples. Para armazenar o caractere a (0x61) no
registrador R30 a instruo: LDI R30, a.

Conjunto de instrues AVR


Como foi visto na seo anterior, diferente da memria de dados,
que possui 8 bits de informao em cada endereo, a memria de
programa possui o dobro: 16 bits. Dessa forma, como a maioria das
instrues so de 16 bits (algumas tm 32), o endereo 0x0000
corresponde primeira instruo e o 0x0001 segunda, assim
sucessivamente. Pode-se perceber que uma instruo de 32 bits
ocupar dois andares (endereos) da memria de programa
Estudaremos agora as principais instrues do conjunto, divididas
em cinco grupos: lgicas e aritmticas; de salto; de transferncia
de dados; de bit e de teste de bit; de controle do microcontrolador.
Pensando na didtica, as instrues no sero apresentadas em
seus grupos, mas em uma sequncia voltada para a construo dos
primeiros trechos de programa.
LDI LoaD Immediate (carregamento imediato): esta
instruo basicamente copia o valor imediato presente na
instruo para algum dos registradores de propsito geral e
tem o seguinte formato: LDI Rd, k.
O valor k deve ser de 8 bits, ou seja, de 0 at 255, e apenas a
segunda metade dos registradores podem ser usados (R16 ao R32).
Como j foi visto, para armazenar o valor 0x25 (ou 37 em decimal) no
registrador R18, deve-se usar a expresso LDI R18, 0x25.
LDS LoaD direct from data Space (carregamento direto do
espao de dados): esta instruo armazena no registrador Rd
o contedo do endereo de dado K, que pode ser de 0x0000
at 0xFFFF. Depois dessa instruo, as posies da memria de
dados Rd e K tero o mesmo contedo e ela usada quando
se deseja buscar o valor de variveis para processamento.
STS Store direct to data Space (armazenamento direto no

48 U1 - Introduo aos sistemas embarcados


espao de dados): basicamente, o papel inverso da instruo
anterior, ou seja, armazena no endereo K o contedo do
registrador Rd no local na memria.
IN IN from I/O location (entrada de local de entrada/
sada): como foi visto na segunda seo desta unidade, o
ATmega328 possui um espao de memria de I/O, usada
para compartilhar dados entre os perifricos e o ncleo. Esse
espao de fato uma regio da memria de dados (RAM),
porm com endereamento diferente, usado em instrues
de I/O, como a IN: IN Rd, A.

O papel desta instruo trazer o contedo do endereo de I/O


representado por A (de 0 at 63) para o registrador Rd (de 0 a 31),
para ento ser tratado pelo programa. Como ser visto adiante, se
um boto estiver conectado ao sistema pelo perifrico PORTB (uma
das portas digitais), o seu estado pode ser verificado pelo programa
ao trazer o valor do registrador de I/O PINB para algum registrador, o
R12, por exemplo. IN R12, PINB.
Devemos perceber que a instruo IN pode ser usada com o
mesmo propsito da instruo LDS. No entanto, a instruo de I/O
possui as seguintes vantagens: executada mais rapidamente, pois
possui 16 bits, contra 32 da LDS, alm de permitir o uso dos nomes
dos registradores de I/O, como no exemplo acima do PINB.
OUT OUT to I/O location (sada para local de entrada/sada):
realiza troca de dados entre o programa e os perifricos internos,
assim como a anterior, mas de maneira invertida. Serve para
transmitir informao para o exterior, ou seja, controlar as sadas
do sistema. Dessa maneira, se um LED estiver conectado ao
conjunto atravs do perifrico PORTC, ele pode ser acionado
com os comandos: LDI R16, 0xFF OUT PORTC, R16
MOV MOVe instruction (instruo de movimento): serve
para transferir o contedo entre os registradores gerais. Por
exemplo: MOV R10, R22; R10 R22.
TST TeST instruction (instruo de teste): testa o operando
para a prxima instruo, que deve ser de salto, condicionado
ao resultado deste teste (compara se o valor igual a zero).
COM COMplement instruction (instruo de complemento):
inverte os bits de seu nico operando.

U1 - Introduo aos sistemas embarcados 49


INC INCrement instruction (instruo de incremento):
incrementa o seu nico operador. Exemplo: INC R2 ; R2
R2 +1. Vale salientar que se R2 estiver no seu valor mximo, o
incremento ir zer-lo.
DEC DECrement instruction (instruo de decremento).
Decrementa seu nico operador. Usando o mesmo princpio
da instruo INC, a instruo DEC faz uma varivel nula
assumir o mximo: 255.
ADD ADD Instruction (instruo de adio): adiciona dois
operadores e guarda a soma no primeiro.

Instrues de salto: veremos agora as instrues de salto, sendo


algumas delas condicionais, ou seja, sua ocorrncia depende de
algum resultado usado como critrio de deciso.
JMP JuMP instruction instruo de salto. Nesta instruo,
no h operadores, apenas o rtulo indicando para onde o
programa deve ser desviado, de maneira incondicional.
BREQ BRanch if EQual (salte se for igual): assim como a
anterior, no possui operandos, apenas o rtulo para onde o
programa deve ser desviado, caso a flag ZERO do registrador
de status esteja acionada. Essa instruo, portanto, atua em
conjunto com a instruo anterior, que deve ser aritmtica
(exceto pela TST) e que desvia o programa caso o seu
resultado seja nulo (zero). Se for desejado um salto caso o
resultado no seja nulo, usa-se a instruo inversa BRNE.
CALL Instruo de chamada de sub-rotinas: tambm
no possui operandos, apenas o rtulo, e atua de maneira
semelhante JMP, com exceo de retornar ao lugar no
programa onde foi chamada. Isso ocorre quando se executa
a instruo RET (retorno), encerrando aquela subrotina.

Reflita
primeira vista, o que aprendemos nesta seo pode no parecer
muita coisa, mas, se voc usar sua capacidade de criar algoritmos, ver
que pode construir qualquer programa em Assembly a partir de um
fluxograma, pois aqui esto todas as informaes necessrias para isso.

50 U1 - Introduo aos sistemas embarcados


As instrues de salto condicional que ditam os caminhos que o
programa seguir no fluxograma.

Exemplificando
Para aplicar essas instrues estudadas, consideraremos o simples
exemplo: Construir um algoritmo e um programa em Assembly para
inverter o estado de um LED (inicialmente apagado) cada vez que um
boto for pressionado, alm de armazenar quantas vezes o boto foi
acionado desde a inicializao do sistema. Para isso, abstrairemos
inicialmente como as portas digitais so manipuladas e consideraremos
que o boto est conectado em algum canal da porta A e o LED em
algum canal (pino) da porta B. Um atraso deve ser utilizado a cada
vez que o boto acionado, para no contabilizar vrias vezes. Um
simples circuito e um possvel fluxograma/algoritmo capaz de resolver
o problema mostrado na Figura 1.17.

Figura 1.17 | (a) Circuito; (b) fluxograma/algoritmo para o exemplo

Fonte: elaborada pelo autor.

O programa em Assembly correspondente pode ser visto na Figura 1.18.

Figura 1.18 | Programa em Assembly para o exemplo

Fonte: elaborada pelo autor.

U1 - Introduo aos sistemas embarcados 51


O que vemos at aqui so as principais instrues, suficientes
para fazer programas mais simples.

Pesquise mais
Infelizmente no conseguimos abordar todas as instrues aqui. Vale
apenas usar um pouco do seu tempo para ver o resumo do conjunto de
instrues oficial da AVR: <http://www.atmel.com/pt/br/Images/Atmel-
0856-AVR-Instruction-Set-Manual.pdf>. Acesso em: 22 abr. 2017.

Sem medo de errar


Nesta unidade, estudamos as instrues e programao em
Assembly para o microcontrolador da AVR ATmega328. Para usar
nosso estudo na prtica, resolveremos agora as ltimas questes
sobre a situao-problema apresentada para esta unidade: lembre-
se de que voc o responsvel por projetar os mdulos eletrnicos
internos de toda a parte eltrica do carro de uma montadora que est
na fase de criao de um novo modelo. Todos os detalhes da fase de
projeto devem ser descritos em um relatrio interno, que compor
o catlogo de registro, usado como patrimnio intelectual, bem
como para a aquisio de patentes. Voc j definiu quais mdulos
sero microprocessados e j registrou algumas operaes bsicas
em seu relatrio, como a descrio de como o processador e as
memrias internas devem se comunicar atravs dos barramentos
para realizar uma soma de duas variveis e devolver o resultado
para a memria. Agora nesta etapa, o seu trabalho ser novamente
registrar um dos processos mais bsicos do processamento
executado nesses mdulos, assim como a anterior, porm, agora
ser em termos de programao, e no de funcionamento interno
do sistema. Dessa forma, voc foi incumbido de escrever o trecho
de cdigo correspondente ao de: buscar os valores contidos nos
endereos 0x0109 e 0x010A para os registradores R16 e R17, som-
los e devolver o resultado para o endereo 0x010B. Alm disso,
voc deve descrever como o processador atua para executar cada
instruo e quais so as consequncias indicadas pelo registrados
de status. Apesar de se tratar de um pequeno trecho, escreveremos
um programa completo que est descrito na Figura 1.19:

52 U1 - Introduo aos sistemas embarcados


Figura 1.19 | Programa em Assembly para a situao-problema

Fonte: elaborada pelo autor.

A primeira instruo a LDS R16, OP1, a primeira linha abaixo do


.ORG 0, o qual indica o incio do programa. Como consequncia dessa
instruo, o valor contido no endereo 0x109 da memria de dados,
correspondente ao operando 1, transferido para dentro do ncleo,
no registrador de trabalho R16. Perceba que no o valor 0x0109
que transferido para o R16, mas sim o valor que est na memria de
dados, no endereo 0x0109. Isso definido pela instruo LDS, que
considera OP1 como um endereo, e no um valor.
Para transferir a constante 0x0109 para o R16, a instruo deveria
ser LDI R16, OP1. Na segunda instruo ocorre a mesma ao para
o segundo operador, trazido do endereo seguinte para o registrador
de trabalho seguinte. Com os valores a serem processados dentro
do ncleo, na terceira instruo os valores so somados na ULA e o
resultado da operao devolvido para o registrador geral R16. Na
ltima instruo, o resultado devolvido do ncleo para a memria
de dados, no endereo 0x10B. As operaes de transferncia interna
de dados, como a LDS e a STS no causam alteraes nas flags do
registrador de status. No entanto, como foi visto na Seo 2 desta
unidade, no registrador de status, as instrues aritmticas podem
acionar os bits ZERO, SIGN, OVERFLOW, NEGATIVE e CARRY, de
acordo com o resultado da operao.

Avanando na prtica
Controle do nvel de um reservatrio automtico
Descrio da situao-problema
Devido grande demanda que existe no seu estado, voc
decidiu, depois de formado, montar uma empresa de automao

U1 - Introduo aos sistemas embarcados 53


agrcola e j no seu primeiro projeto lhe foi solicitado, por um
comerciante local, que automatizasse o sistema de abastecimento
das caixas dgua e reservatrios, pois estes ainda eram abastecidos
manualmente. Voc deve, portanto, como projetista, entregar um
laudo tcnico descritivo (composto pelo fluxograma, algoritmo e
programa em Assembly, correspondente, que deve ser embarcado
no ATmega328) que permita a automao do sistema de nvel dos
reservatrios. Por se tratar de um sistema muito simples, voc
decidiu que faria um programa em Assembly, embarcado em uma
placa do Arduino para controlar a bomba da caixa dgua.
A partir do exposto, responda: qual nmero mnimo de sensores
de nvel deve ser usado, para que o sistema no permita que a
bomba seja acionada por curtos intervalos de tempo, ou em forma
de surtos (chaveamentos liga/desliga sequencias)? Considerando
que o sensor e a bomba devem estar conectados ao sistema pelas
portas digitais, construa o fluxograma e o algoritmo que o processo
deve seguir, bem como o programa em Assembly correspondente,
que deve ser embarcado no ATmega328.

Resoluo da situao-problema
Voc pode perceber que o uso de dois sensores de nvel seria
ideal para automatizar o sistema, um na parte superior (sensor
alto), e outro na parte inferior (sensor baixo) do reservatrio.
Aparentemente um sensor alto bastaria para orientar o sistema,
onde, de forma combinacional, a bomba est desligada caso o
sensor acuse contato com a gua, e ligada caso contrrio.
Considerando que o fluxo para o exterior no controlado pelo
sistema, pois ocorre de acordo com o uso da gua, quando a gua
atingir o nvel do sensor, a bomba seria desligada, mas logo que
algum usasse um pouco de gua, o nvel desceria e a bomba seria
religada, e por pouco tempo, pois o nvel de gua estaria prximo
do sensor. Alm do mais, caso o nvel dagua esteja poucos
milmetros abaixo da deteco do sensor, qualquer distrbio
no espelho dagua, como oscilaes, faria a bomba ser ligada e
desligada sequencialmente, podendo danific-la. Nesse tipo de
situao, ideal a criao de um sistema sequencial atravs de
uma mquina de estados. Desse modo, quando o processo est
no estado ENCHENDO = 1 (bomba ligada), ele deve permanecer
nesse estado at que a gua toque no sensor alto, fazendo o

54 U1 - Introduo aos sistemas embarcados


sistema desligar a bomba e migrar para o estado ENCHENDO =
0. Nesse estado, apenas o sensor baixo monitorado e o nvel de
gua vai descendo conforme o seu uso. Quando o SB no detecta
mais gua, significa que a reservatrio est vazio e a bomba e o
estado devem ser acionados novamente. Esse simples mecanismo
evita completamente os problemas que devem ocorrer com o uso
de um nico sensor, mencionados anteriormente.
Considerando que o sensor alto ser conectado no sistema
pelo perifrico PORTA, o sensor baixo pelo PORTB e a bomba ser
acionada pela PORTC, um possvel fluxograma e cdigo Assembly
para resolver este problema podem ser vistos na Figura 1.20:
Figura 1.20 | (a) Representao fsica do problema; (b) fluxograma e (c) programa
em Assembly

Fonte: elaborada pelo autor.

Faa valer a pena


1. Existem muitas formas de criar um programa computacional, o que
pode ser feito atravs de vrias linguagens de programao. Algumas
delas foram criadas para fins especficos, como desenvolvimento de jogos,
e outras serviram apenas de base para a construo de linguagens mais
avanadas. Apesar de algumas dessas linguagens no terem prosperado
como se imaginava, muitas delas, modernas ou no, se tornaram um
padro mundial e so usadas atualmente pelos desenvolvedores de
tecnologia da informao, como o Java.
Em relao construo de programas embarcados em linguagens de
mquinas, correto afirmar:
a) Que se perpetuou no mercado e usada at hoje com linguagem
predominante na construo de sistemas embarcados modernos.

U1 - Introduo aos sistemas embarcados 55


b) Que aplicada exclusivamente para protocolos de troca de informaes
entre computadores.
c) Que usada na criao de sistemas em rede, que devem empregar essa
linguagem nas mensagens trocadas.
d) Que era usada nos primeiros cdigos mas atualmente est em desuso,
uma vez que linguagens de mais alto nvel permitem um desenvolvimento
muito mais rpido e eficiente.
e) Que hoje usada apenas para a construo de mquinas de calcular,
pois esta linguagem permite um melhor aproveitamento dos recursos,
como display mostrador e botes numricos.

2. Todos os programas de computador escritos carregam consigo um


algoritmo correspondente, que pode ser representado em um fluxograma.
O que acontece na prtica que alguns programadores constroem o
fluxograma antes do cdigo, j outros preferem programar diretamente.
Esse fluxograma determina o comportamento do processo, de acordo com
a ocorrncia dos eventos tratados. Existem vrios padres de fluxogramas
e modelos de algoritmos j estabelecidos, que se aplicam para as mais
diversas situaes e finalidades.
Pensando exclusivamente em programao para sistemas embarcados,
considere as seguintes afirmaes sobre o fluxo do cdigo:

I O sistema inicia-se em um loop infinito, onde permanece at que


hardware seja todo ajustado e, em seguida, entra em uma fase de
finalizao, onde executa os comandos necessrios, encerrando assim
o seu trabalho.
II O programa principal se mantm sempre atualizando os valores das
sadas, independentemente dos estados das entradas, usadas apenas para
processamentos internos.
III Antes de o sistema entrar no seu ciclo de trabalho, em um loop
infinito, este deve ser inicializado, o que ocorre apenas uma vez e serve
para configurar o conjunto para operar propriamente.
III Os desvios condicionais do fluxo do programa no podem ser usados
em processos que controlam apenas uma sada, pois esta deve ser tratada
na funo principal do cdigo.

Considerando as afirmativas, assinale a alternativa que apresenta a


sequncia correta:
a) F, V, V, V.
b) F, F, V, V.
c) V, F, F, F.
d) F, V, V, F.
e) F, F, V, F.

56 U1 - Introduo aos sistemas embarcados


3. O microcontrolador ATmega328 atua sobre o conjunto de instrues da
AVR. Essas instrues esto classificadas basicamente em quatro grandes
grupos: instrues aritmticas/lgicas, instrues de transferncia de
dados, instrues de desvio de programa e instrues de controle interno
do microcontrolador.
Os caminhos percorridos pelo programa em seu fluxograma so feitos pelas
instrues de desvio, que podem ser incondicionais ou condicionadas a
algum resultado usado como critrio de deciso. Cada uma delas tem um
propsito especfico e deve ser empregada no contexto apropriado para
surtir o efeito desejado.
Em relao instruo em Assembly para o AVR de mnemnico BREQ,
est correto afirmar que:

a) Processar o ltimo dado que foi transferido para o ncleo, indicado pelo
rtulo com a instruo.
b) Desviar o programa para onde o seu rtulo aponta, caso o resultado da
ltima operao seja zero.
c) Transferir o dado que est onde o seu rtulo aponta, para que este possa
ser processado no ncleo.
d) Desviar o programa para onde seu rtulo indica, independentemente de
qualquer resultado anterior.
e) Invocar a subrotina, indicada pelo seu rtulo, independentemente de
qualquer resultado anterior.

U1 - Introduo aos sistemas embarcados 57


Referncias
ATMEL AVR. ATmega328/P Datasheet Complete. 2016. Disponvel em: <http://www.
atmel.com/pt/br/Images/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_
Datasheet.pdf>. Acesso em: 29 abr. 2017.
BAER, J. L. Arquitetura de microprocessadores. 1. ed. Rio de Janeiro: LTC. 2013.
CERUZZI, P. E. A history of modern computing. 2. ed. Massachusetts: The MIT press,
2003.
GRIER, D. A. When computers were women. New Jersey: Princeton University Press,
2005.
IFRAH, G. The universal history of computing: from the abacus to the quantum
computer. New Jersey: John Wiley and Son, 2001.
REGAN, G. O. A brief history of computing. 2. ed. New York: Springer, 2012.
LIMA, C. B. D; VILLAA, M. V. M. AVR e Arduino: tcnicas de projeto. Florianpolis, 2012.
MIZRAHI, V. V. Treinamento em linguagem C. New Jersey: Pearson, 2008.
STALLINGS, W. Arquitetura e organizao de computadores. 8. ed. So Paulo: Prentice
Hall, 2009.
DAMORE, R. Descrio e sntese de circuitos digitais. 2. ed. So Paulo: LTC. 2012.
MARGUSH, T. S. Some assembly required: assembly language programming with the
AVR microcontrollers. 1. ed. New York: CRC Press, 2011.

58 U1 - Introduo aos sistemas embarcados