programa--o microcontroladores 8051 utilizando linguagem c
TRANSCRIPT
FACULDADE SETE DE SETEMBRO – FASETE Departamento de Sistemas de Informação
Curso: Bacharelado em Sistemas de Informação
Erick Barros Nascimento
APLICAÇÃO DA PROGRAMAÇÃO DE MICROCONTROLADORES 8051 UTILIZANDO
LINGUAGEM C
Paulo Afonso – BA
Novembro/2009
i
Erick Barros Nascimento
APLICAÇÃO DA PROGRAMAÇÃO DE MICROCONTROLADORES 8051 UTILIZANDO
LINGUAGEM C
Projeto apresentado ao curso de Bacharelado
em Sistemas de Informação para
cumprimento da disciplina Trabalho de
Conclusão de Curso - TCC, sob orientação
do professor Msc. Igor Medeiros Vanderlei
e co-orientação do professor Esp. Ricardo
Azevedo Porto.
Paulo Afonso – BA Novembro/2009
ii
Erick Barros Nascimento
APLICAÇÃO DA PROGRAMAÇÃO DE MICROCONTROLADORES 8051 UTILIZANDO
LINGUAGEM C
Projeto apresentado ao curso de Bacharelado
em Sistemas de Informação para
cumprimento da disciplina Trabalho de
Conclusão de Curso - TCC, sob orientação
do professor do professor Msc. Igor
Medeiros Vanderlei e co-orientação do
professor Esp. Ricardo Azevedo Porto.
Aprovada por: __________________________________________ Prof. Msc. Igor Medeiros Vanderlei (Orientador) __________________________________________ Membro convidado 1 __________________________________________ Membro convidado 2
Paulo Afonso – BA Novembro/2009
iii
NASCIMENTO, E. B. Aplicação da Programação de Microcontroladores 8051 utilizando
Linguagem C. 2009, 80p. Monografia (Curso Bacharelado em Sistemas de Informação).
Faculdade Sete de Setembro – FASETE, Paulo Afonso – BA.
Com o continuado avançado da tecnologia atualmente os Microcontroladores fazem
parte das nossas vidas. As aplicações desses dispositivos são as mais variadas, sendo
encontrados, por exemplo, em máquinas de lavar, televisores, DVDs, rádios, controles
remotos, microondas, entretenimento, segurança, controle de acesso, etc. Esses dispositivos
utilizam software que executam tarefas pré-programadas, são encontrados na maioria dos
equipamentos, e na maioria das vezes, os usuários não percebem sua presença. Com a
utilização da eletrônica digital nas grandes empresas, o emprego dos Microcontroladores vem
sendo muito requisitado para obter um controle preciso dos processos, gerando ganho de
produtividade para as empresas. Para desenvolvimento de software para Microcontroladores
são necessários software e hardware específicos para cada família de Microcontrolador.
Inicialmente, os Microcontroladores foram desenvolvidos para trabalharem com linguagens
de programação de baixo nível, mas ao longo dos anos, esses dispositivos passaram a
trabalhar com linguagens de alto nível, tornando o desenvolvimento de sistemas embarcados
mais flexíveis e mais portáveis em relação ao hardware. A proposta da pesquisa está em
apresentar um protótipo de um sistema embarcado funcionando na arquitetura de um
Microcontrolador. Para realizar essa proposta foi utilizada pesquisa bibliográfica tendo como
referências livros, artigos e sites além do uso de um KIT de programação para
Microcontroladores para mostrar o uso de linguagens de alto nível nessa arquitetura.
Palavras chave: Microcontroladores, software, hardware.
iv
NASCIMENTO, E. B. Application of the Programming of Microcontrollers 8051 using
Language C. 2009, 80p. Monograph (Course of Bachelor of Information Systems).
Faculdade Sete de Setembro – FASETE, Paulo Afonso – BA.
With the continued advancement of the technology currently Microcontrollers are part
of our lives. The applications of these devices are highly diverse, being found, for example,
in washing machines, televisions, DVDs, radios, remote controls, microwave, entertainment,
security, access control, etc. These devices use software that perform pre-programmed tasks,
are found in many devices, and in most cases, users do not notice their presence. With the use
of digital electronics in large companies, the use of microcontrollers has been a staple for
precise control of processes, generating productivity gains for companies. To develop
software for microcontrollers are necessary software and hardware specific to each family of
microcontroller. Initially, the microcontrollers are designed to work with programming
languages, low level, but over the years, these devices have to work with high-level
languages, making the development of embedded systems more flexible and more portable
compared to hardware. The research proposal is to present a prototype of an embedded system
running on the architecture of a microcontroller. To accomplish this proposal was used as
bibliographic references and books, articles and websites in addition to using a kit for
programming microcontrollers to show the use of high-level languages such architecture.
Keywords: Microcontrollers, software, hardware.
v
LISTA DE FIGURAS Figura 1: Lógica de funcionamento de um Sistema Embarcado ............................................ 18
Figura 2: Sensor de proximidade, ângulo e atuador para freios. ............................................ 20
Figura 3: Arquitetura das Linguagens de Programação......................................................... 30
Figura 4: Diferenças entre Microprocessador e Microcontrolador – Nº de circuitos .............. 34
Figura 5: Modelo simplificado de uma unidade de memória de um Microcontrolador ......... 35
Figura 6:Exemplo simplificado de uma unidade de E/S........................................................ 39
Figura 7: Diferença que existe entre a transmissão em série com a transmissão em paralelo . 40
Figura 8: Exemplo da arquitetura de Von Neumann ............................................................. 44
Figura 9: Núcleo de um Microcontrolador da família 8051................................................... 45
Figura 10: Demultiplexação de dados e endereços usando o port P0..................................... 47
Figura 11: Comprometimento do Port P3 sendo utilizado para funções especiais ................. 48
Figura 12:Organização de ROM interna/externa em função do valor lógico do pino EA....... 49
Figura 13: Esquema de circuito com Reset automático e Reset forçado ................................ 50
Figura 14: Eclipse com perspectiva para C/C++................................................................... 56
Figura 15: Perspectiva ajustada para Java e QuantumDB...................................................... 57
Figura 16: Simulação de contagem binária de 8 bits e gravação no PORT P2. ...................... 59
Figura 17: Tela Principal do SPI-Flash Programmer............................................................. 61
Figura 18: KIT8051LS em funcionamento ........................................................................... 64
Figura 19: Conexão do LCD e Potenciômetro ...................................................................... 65
Figura 20: Porta de expansão ligada ao Port P3 .................................................................... 65
Figura 21: Barramento com 8 LED's .................................................................................... 65
Figura 22: Teclados tipo push .............................................................................................. 66
Figura 23: Conector da alimentação e Porta serial ................................................................ 66
Figura 24: Microcontrolador AT89S8252............................................................................. 67
Figura 25: Cooler de Ventilação........................................................................................... 69
Figura 26: Cabo Serial e Esquema da pinagem..................................................................... 69
Figura 27: Desenho do circuito de um Microcontrolador acionando motor ........................... 70
vi
TABELAS Tabela 1: Resumo das Funções especiais do Port P3 ............................................................ 49
Tabela 2: Grandes fabricantes e principais informações sobre suas características ................ 51
Tabela 3:Tipos de variáveis contempladas pelo SDCC......................................................... 58
vii
LISTA DE ABREVIATURAS E SÍMBOLOS
AD Analógico / Digital
CMB Conjunto Motor Bomba
DA Digital /Analógico
EPROM Erasable Programmable Read Only Memory
ETA Estação de Tratamento de Água
GSM Global System for Mobile Communications
IHM Interface Homem - Máquina
ISO Organização Internacional para Padronização
LED Light Emitting Diode
RAM Random Access Memory
ROM Read Only Memory
SDCC Small Device C Compiler
USB Universal Serial BUS
viii
SUMÁRIO
LISTA DE FIGURAS .......................................................................................................... v TABELAS ........................................................................................................................... vi LISTA DE ABREVIATURAS E SÍMBOLOS.................................................................. vii 1. CONSIDERAÇÕES INICIAIS ..................................................................................... 11 1.1 Introdução ................................................................................................................ 11 1.2 Justificativa............................................................................................................... 12 1.3 Problema da Pesquisa .............................................................................................. 13 1.4 Hipóteses ................................................................................................................... 13 1.5 Objetivos ................................................................................................................... 14 1.5.1 Objetivo Geral............................................................................................................ 14 1.5.2 Objetivos Específicos ................................................................................................. 14 1.6 Metodologia da Pesquisa .......................................................................................... 15 1.7 Estrutura do Trabalho ............................................................................................. 15 2. SISTEMAS EMBARCADOS ........................................................................................ 17 2.1 Definições e Aplicações dos Sistemas Embarcados ..................................................... 18 2.2 Características dos Sistemas Embarcados .............................................................. 22 2.2.1 Interação com o ambiente........................................................................................... 22 2.2.2 Capacidade limitada de recursos................................................................................. 23 2.2.3 Forte acoplamento entre hardware s software............................................................. 24 2.2.4 Importância das respostas de tempo real nos sistemas embarcados ............................. 25 2.3 Linguagens de Programação para Sistemas Embarcados ...................................... 26 2.3.1 Linguagem de Máquina .............................................................................................. 26 2.3.2 Linguagem Assembly................................................................................................. 27 2.3.3 Vantagens e Desvantagens da linguagem Assembly ................................................... 28 2.3.4 Linguagens de Alto Nível........................................................................................... 29 2.3.5 Linguagem C.............................................................................................................. 29 2.3.6 Vantagens e Desvantagens da linguagem C ................................................................ 29 2.3.7 Linguagens de Quarta Geração ................................................................................... 30 2.3.8 Análise e escolha da linguagem .................................................................................. 30 3. MICROCONTROLADORES ....................................................................................... 32 3.1 O que são os Microcontroladores ................................................................................ 33 3.2 Microcontroladores versus Microprocessadores ........................................................ 34 3.3 Arquitetura dos Microcontroladores........................................................................... 35 3.3.1 Unidade de Memória .................................................................................................. 35 3.3.2 Unidade Central de Processamento – CPU ................................................................. 36 3.3.3 Barramentos ............................................................................................................... 36 3.3.4 Unidade de Entradas e Saídas ..................................................................................... 37 3.3.5 Comunicação Serial dos Microcontroladores .............................................................. 39 3.3.6 CLOCK – O relógio do Microcontrolador .................................................................. 40 3.3.7 TIMER....................................................................................................................... 41 3.3.8 WatchDog – Cão de Guarda ........................................................................................ 42 3.4 O Microcontrolador 8051......................................................................................... 43 3.4.1 Arquitetura física dos Microcontroladores 8051 ......................................................... 44 3.4.2 Organização da Pinagem dos Microcontroladores 8051 .............................................. 46 3.4.2.1 Port P0..................................................................................................................... 46 3.4.2.2 Ports uso geral para E/S e uso das memórias internas e externas-P1,P2,P3............... 47 3.4.3 Fabricantes do Microcontrolador 8051 ....................................................................... 51
ix
3.4.4 Microcontroladores 8051 mais potentes – Arquitetura ISAC ...................................... 52 4. FERRAMENTAS DE PROGRAMAÇÃO PARA 8051................................................ 54 4.1 Software de Desenvolvimento para Microcontroladores............................................ 55 4.1.1 Eclipse.... .................................................................................................................... 55 4.1.2 Small Device C Compiler – SDCC.............................................................................. 57 4.1.3 PDS – 52..................................................................................................................... 58 4.1.4 SPI – Flash Programmer............................................................................................. 60 4.1.4.1 Os lock-bits .............................................................................................................. 62 4.2 KIT de Programação 8051LS ...................................................................................... 62 4.2.1 O KIT8051LS ............................................................................................................. 63 4.2.2 Os seus componentes................................................................................................... 64 4.3 Protótipo de teste do Microcontrolador 8051.............................................................. 67 4.3.1 Sistemática do protótipo .............................................................................................. 68 4.3.2 Especificação técnica da parte física do protótipo ........................................................ 69 5. CONSIDERAÇÕES FINAIS ......................................................................................... 72 5.1 Conclusão ..................................................................................................................... 72 REFERÊNCIAS................................................................................................................. 75
10
CAPÍTULO 1
CONSIDERAÇÕES INICIAIS
11
1. CONSIDERAÇÕES INICIAIS
1.1 Introdução
Com o continuado avanço da tecnologia, atualmente os Microcontroladores fazem
parte de nossas vidas. Segundo Amadeu Souza (21-), cada um de nós tem acesso em média a
nove Microcontroladores por dia. As aplicações destes dispositivos são as mais variadas,
sendo utilizadas, por exemplo, em máquinas de lavar, televisores, DVDs, rádios, controles
remotos, microondas, entretenimento, segurança, controle de acesso, etc., acompanhado esses
Microcontroladores estão software instalados nos mesmos, executando tarefas que foram pré-
programadas em linguagens de programação. As combinações entre esses dois fatores
denominam-se os Sistemas Embarcados.
Sistemas Embarcados podem ser desde um sistema para uma boneca cantar, até
mesmo um sistema para controlar um elevador em um prédio. Basicamente, qualquer
equipamento autônomo que não seja um computador, acaba sendo considerado um Sistema
Embarcado. (SCHIMIDT 2007)
Segundo Sica (2006), um Microcontrolador é um computador-num-chip, contendo um
processador, memória e funções de entrada/saída. É um microprocessador que enfatiza a alta
integração, em contraste com os microprocessadores de uso geral (do tipo usado em
computadores pessoais). Além dos componentes lógicos e aritméticos, usuais de um
microprocessador de uso geral, o Microcontrolador integra no próprio chip elementos
adicionais tais como memória RAM, EEPROM ou Memória FLASH para armazenamento de
dados ou programas, dispositivos periféricos e interfaces de E/S que podem ir de um simples
pino digital do componente a uma interface USB ou Ethernet nos mais avançados. O software
escrito para Sistemas Embarcados, ainda segundo Sica (2006), é muitas vezes chamado de
firmware e não são armazenados em discos rígidos.
Logo, os Sistemas Embarcados são sistemas que executam funções dedicadas, ou seja,
são responsáveis por uma função específica ou um conjunto restrito de funções específicas e
co-relacionadas. Estão presentes na maioria dos equipamentos eletrônicos, embora em alguns
casos o usuário não chega a perceber sua presença.
Grande parte dos Microcontroladores utiliza a linguagem de programação Assembly, o
propósito deste projeto é apresentar os conceitos de desenvolvimento de software para
Sistemas Embarcados, utilizando os Microcontroladores da família 8051, mais
12
especificamente com o Microcontrolador da ATMEL, com a linguagem de programação C e o
compilador freeware SDCC. Serão apresentados detalhes do hardware, da linguagem de
programação e os resultados as experiências práticas do desenvolvimento de um protótipo
neste ambiente.
1.2 Justificativa
A automação de processos e o monitoramento remoto de equipamentos são
tecnologias que garantem ganho de produção devido ao controle preciso do processo. Com o
avanço da tecnologia e a utilização da eletrônica digital por grande parte das empresas, o
emprego de Microcontroladores vêm sendo muito requisitado para um melhor
desenvolvimento da produção, diminuindo os custos e trazendo benefícios para as empresas
que utilizam esse sistema. LOPES (2006/2007)
Como já dito anteriormente, os Microcontroladores são chips que tem um processador,
pinos de entradas/saídas e memória. Com o barateamento de Circuitos Integrados – CI e o
surgimento dos microprocessadores (CPUs) mais poderosos, começou-se a usar as CPUs mais
simples para implementar tarefas dedicadas. Estas aplicações tinham custo dependente da
CPU e dos periféricos (ROM, RAM, Portas, A/D, D/A, etc.) e também da quantidade de
conexões e do tamanho da placa. Para reduzir o custo, começou a surgir a idéia de colocar
todos estes periféricos dentro do chip da CPU, transformando-os nos Sistemas Embarcados.
BARRETO (2006)
No inicio da programação desses chips – CPU, a linguagem utilizada era Assembly. A
linguagem Assembly é orientada a máquina (ou melhor, para o processador), é necessário
conhecer a estrutura do processador para poder programar em Assembly, tornando em alguns
casos o desenvolvimento dos sistemas um pouco mais difícil e pouco portável. Essa
linguagem utiliza instruções de baixo nível que operam diretamente com registradores e
memórias, ou seja, as instruções são executadas diretamente pelo processador.
(MONSERRAT NETO)
Atualmente, os Microcontroladores estão sendo desenvolvidos para executarem
software em linguagens de alto nível, os software desenvolvidos em linguagens deste tipo,
mais especificamente C, terão mais flexibilidade e portabilidade, passando uma sintaxe mais
próxima da realidade humana, permitindo a manipulação dos dados nas mais diversas formas
13
(números inteiros, reais, vetores, etc.), enquanto Assembly trabalha com linguagem pura de
máquina bits, bytes, palavras em memória, etc.
Logo, a contribuição que este projeto trará para seus leitores, é conhecer a automação
de processos e/ou equipamentos que utilizam este tipo de programação. Serão explanados
conceitos de hardware e software para Microcontroladores da família 8051 e os conceitos
exemplificados através de uma aplicação exemplo para conhecimento de todos que se
interessem por assuntos ligados a Automação Industrial, Robótica e Eletrônica Digital.
1.3 Problema da Pesquisa
Como explicar fundamentos teóricos e práticos sobre os Microcontroladores?
Qual KIT de programação que será usado para exemplificar os exemplos práticos?
Este tipo de Microcontrolador possui alguma Interface Homem Máquina – IHM?
Será mostrado um exemplo na linguagem de programação Assembly, visto que o
trabalho que será apresentado utilizará a linguagem C?
1.4 Hipóteses
KIT 8051 com Placa ISP (In-System Programmable) é um KIT de desenvolvimento de
software para Microcontroladores, sua tecnologia de Dispositivos Montados em Superfície –
SMD aumenta a resistência mecânica, reduzindo o tamanho físico da placa, esses fatores
resultam em aumento da confiabilidade dos equipamentos que serão utilizados. Sua
programação através da porta USB, evita a necessidade de mudança de jumpers1 para
configuração de portas, etc.
1 Segundo Wikipédia, Jumper é uma ligação móvel entre dois pontos de um circuito eletrônico. É, geralmente, uma pequena peça plástica que contém um metal no seu interior, responsável pela condução de eletricidade.
14
Para exemplificar a saída de informações dos software gravados do Microcontrolador
Atmel AT89S8251 e/ou AT89S8252, seria necessário a utilização de uma fonte gráfica para
visualização, visto que este KIT disponibiliza um conector de pinos onde pode ser ligado um
display de LCD 2x6, LCD 4x16 com ou sem Back Light2.
Poderemos utilizar o Compilador C para Dispositivos Pequenos, Small Device C
Compiler – SDCC, que é open source, parcialmente portável, para Microcontroladores. Ele
contém funções do tipo: montador, depurador ou simulador.
1.5 Objetivos
1.5.1 Objetivo Geral
Exemplificar de forma clara e objetiva aos profissionais, técnicos e estudantes da área
de Tecnologia da Informação, conceitos teóricos e práticos sobre Microcontroladores. Tendo
como premissa ao final da mostra do projeto, a execução de uma aplicação para
Microcontroladores da família 8051, marca Atmel, modelo AT89S8251 e/ou AT89S8252.
1.5.2 Objetivos Específicos
Explicar o que são Sistemas Embarcados, para que possamos associar a pesquisa com
os controladores de dispositivos que estão em quase todos os equipamentos que
utilizamos no dia-a-dia;
Fazer uma abordagem rápida sobre as linguagens de programação Assembly e C
utilizada nos Microcontroladores 8051, e KIT físico para desenvolvimento dos
software. Mostrando fisicamente o que é utilizado na elaboração de softwares para
sistemas embarcados;
Executar aplicação exemplo mostrando o Microcontrolador 8051 em operação.
2 BackLight é quando um dispositivo de saída do tipo LCD possui luminosidade de fundo para enxergarmos as informações em salas escuras.
15
1.6 Metodologia da Pesquisa
A pesquisa se caracterizará por um estudo qualitativo, do tipo exploratório,
bibliográfico e instrumental, que poderá ser de revistas, livros, internet ou publicações
relacionadas baseadas em etapas como descrito abaixo:
Levantamento de bibliografias;
Análise das referências bibliográficas;
Observação de características e pressupostos teóricos;
Analise teórica das bases dos software de desenvolvimento para Microcontroladores;
Analise teórica e prática dos equipamentos que serão utilizados para desenvolvimento
da tarefa;
Desenvolvimento e testes no software de exemplo para uma sobrecarga de
equipamento.
1.7 Estrutura do Trabalho
O presente trabalho está dividido em 5 (cinco) capítulos como descritos a seguir:
No capitulo 1(um) faremos a introdução ao trabalho, mostrando onde os
Microcontroladores estão inseridos em nossas vidas, o que é um sistema embarcado e
Microcontroladores.
No capitulo 2(dois) falaremos sobre Sistemas Embarcados. Seu principais conceitos,
como surgiram, o que é, para que servem,sua importância na tecnologia.
No capitulo 3(três), colocaremos os conceitos sobre os Microcontroladores.
Explanaremos a arquitetura dos Microcontroladores 8051, ferramentas utilizadas para
programação dos mesmos bem como, programação especifica para os Microcontroladores
dessa família utilizando a linguagem C.
No capitulo 4(quatro), mostraremos as ferramentas utilizadas no desenvolvimento de
software para o Microcontrolador 8051, a integração do Eclipse, o compilador SDCC, o
recurso de conhecimento aberto para o SDCC e o modelo de uma aplicação escrita, o
simulador PDS-52 e o software de gravação SPI – Flash Programmer. Apresentação de um
programa escrito em linguagem de alto nível, o código Assembly gerado pela compilação do
SDCC e o KIT de programação com software em funcionamento.
16
CAPÍTULO 2
SISTEMAS EMBARCADOS
17
2. SISTEMAS EMBARCADOS
Atualmente se ouve muito falar de sistemas embarcados, só que esse tipo de sistema
não é novo. De acordo com a enciclopédia on-line Wikipédia, um dos primeiros sistemas
embarcados data do início dos anos 60. O primeiro que se tem notícia foi um computador-
guia para o projeto Apollo, o qual levou o primeiro homem à lua. Atualmente, os sistemas
embarcados já estão presentes em todo o mundo e hoje esses sistemas convivem com as
pessoas e em suas vidas. Eles já são universais porque estão presentes em muitos dispositivos,
desde eletrodomésticos até naves espaciais. Só que, usualmente, as pessoas não têm
conhecimento deles em sua totalidade, mas uma coisa é certa: grande parte das pessoas
utilizam computadores embarcados todos os dias e em diversas atividades cotidianas do seu
dia-a-dia. Em geral, a maioria não é vista pelas pessoas porque, como insinua o próprio nome,
estão embutidos dentro de outros sistemas que são usados no cotidiano do dia-a-dia dos seres
humanos. (BARRETO 2006)
Segundo Barreto (2006), Sistemas Embarcados usam algum tipo de elemento
processador. Entretanto, nesse contexto, esse processador é um mero detalhe, ou seja, eles não
são percebidos. Por exemplo, hoje as pessoas sabem responder qual configuração da CPU que
utilizam em casa ou no trabalho, porque as configurações são requisitos decisivos na hora que
uma pessoa vai efetuar a compra de um computador de uso geral. Entretanto, se perguntarem
qual CPU essas pessoas tem no seu carro ou no seu celular, certamente essas pessoas não
saberão responder. Logo, muitas dessas pessoas compram equipamentos de má qualidade pelo
fato de não atentarem para requisitos que também são importantes.
Em linhas gerais, os Sistemas Embarcados operam de forma semelhante aos dos
computadores de uso geral. Entretanto, os sistemas de computadores de uso geral, estão para
atender necessidades de produtividade dos usuários com o máximo de desempenho, enquanto
que os sistemas de tarefas dedicadas (como no caso dos Embarcados) estão para atender
condições de ambiente, utilizando-se de dispositivos para monitorar estados de clima, controle
de acesso, segurança, etc. Logo, nesse capítulo serão mostrados conceitos teóricos sobre
Sistemas Embarcados, suas principais características, linguagens computacionais utilizadas,
tipos de Sistemas Embarcados, benefícios e limitações desses sistemas.
18
2.1 Definições e Aplicações dos Sistemas Embarcados
Não existe uma definição universal para o termo “Sistema Embarcado”, a mais
comum é quando um sistema está dedicado a uma única tarefa e interage continuamente com
o ambiente a sua volta por meio de sensores e atuadores, independente se é dentro de um PC
de uso geral ou um controle remoto de uma TV, ainda sim este não seja um desktop comum, é
classificado como embarcado. A denominação “embarcada” (do inglês Embedded Systems)
vem do fato de que estes sistemas são projetados geralmente para serem independentes de
uma fonte de energia fixa como uma tomada ou gerador e ainda são embutidos tornando-se
abstratamente invisíveis. Todo sistema embarcado é composto por uma unidade de
processamento, que é um circuito integrado, fixado a uma placa de circuito impresso.
Possuem uma capacidade de processamento de informações vinda de um software que está
sendo processado internamente nessa unidade, logo o software está embarcado na unidade de
processamento. Software embarcado, dependendo do clock do Microcontrolador, é em muitos
casos classificado de firmware. (CHASE 2007)
Figura 1: Lógica de funcionamento de um Sistema Embarcado Fonte: CHASE, 2007, Sistemas Embarcados. Modificado por: Erick Barros Nascimento
As aplicações dos Sistemas Embarcados são as mais variadas, sendo utilizadas em
vários segmentos, dentre os quais estão alguns exemplos:
Aplicações Industriais: São utilizados nas industriais dos mais variados tipos,
geralmente aplicadas em sistemas de automação industrial, por exemplo: Sistemas de
controle de Estações de Tratamento de Água – ETA. Geralmente são aplicações mais
robustas, com placas dedicadas e múltiplos sensores de entrada e saída.
19
Considere o exemplo de um conjunto motor-bomba – CMB para bombeamento
de água que está com superaquecimento. Entre o cabo de alimentação elétrica
desse CMB está um equipamento chamado de relé térmico, segundo Gustavo
Roberto (2007), eles usados para proteger os motores elétricos contra
sobrecargas. Essas sobrecargas são elevações de corrente por tempo
prolongado, devido a um trabalho acima do previsto que pode ultrapassar a
corrente nominal do motor. Logo, é programado o parâmetro limite em que a
corrente pode chegar, o relé passa a monitorar essa corrente, se ela começar a
subir (ex. motor emperrando) o mesmo desliga a alimentação protegendo o
motor, e em muitos casos envia um pulso de sinal Analógico / Digital para
acender um LED, ou até mesmo um pulso para que o sistema escreva uma
mensagem na tela de uma IHM para avisar da sobrecarga.
Aplicações empresariais: A área empresarial também pode se beneficiar com a
utilização de sistemas embarcados. Dispositivos como Palm Tops, que executam
Sistemas Operacionais Embarcados, como o Windows Móbile, são capazes de realizar
boa parte das tarefas que geralmente são realizadas em PCs de uso geral, entretanto
proporcionam uma maior mobilidade que pode contribuir para a disponibilidade das
informações. Possuem aplicações básicas conhecidas em qualquer PC de uso geral,
tais como Excel e Windows Media Player.
Considere o exemplo de um vendedor de uma distribuidora de bebidas. Ele sai
pela cidade efetuando as vendas dos produtos da distribuidora, seja qualquer
produto que esteja disponível (cerveja, refrigerante, água mineral, etc.). As
informações sobre as vendas dos produtos (cliente que solicitou o pedido,
quantidade, etc.) são armazenadas no Palm Top na hora que ele faz a venda
corpo a corpo. Ao chegar à sede, as informações do Palm Top do vendedor são
descarregadas através de uma porta Serial e/ou USB para um PC de uso geral.
Com aplicações especificas, essas informações são condensadas e é emitida
ordem de entrega dos produtos e nota fiscal de venda a pessoa do despacho.
Assim, os produtos são entregues nos estabelecimentos que estão espalhados
pela cidade.
20
Aplicações Automotivas: Segundo Chase (2007), um veículo top de linha é um
excelente exemplo de um complexo sistema literalmente “embarcado”. Centenas de
sensores fornecem informações sobre todo o funcionamento do veículo. Várias
unidades de processamento independentes atuam em regiões diferentes e se
comunicam entre si, captando os sinais destes sensores e fazendo com que as ações
referentes a cada caso sejam tomadas. Esta comunicação geralmente se dá através de
redes, cujo protocolo CANbus3 tem se tornado o padrão. Isto acontece desde a central
que memoriza a posição dos bancos, espelhos, volante, etc. Para cada usuário do
veículo até a central que gerencia o funcionamento do motor.
Figura 2: Sensor de proximidade, ângulo e atuador para freios. Fonte: CHASE, 2007, Sistemas Embarcados. Modificado por: Erick Barros Nascimento
Aplicações residenciais: Segundo Fred Cox (2008), Sistemas Embarcados para
projetos de construção de alarmes residenciais, possuem as seguintes características de
interação, tais como:
Interagem com Teclados matriciais
Displays LCD
Discador via celulares GSM
Armazenamento de memória para alguns números de telefone
Sirenes
3 CANbus: é um protocolo de comunicação serial síncrono.é utilizado em Microcontroladores modernos que tem sua aplicabilidade quase a de um computador de uso geral.
21
Monitoramento de sensores de portas e janelas
Interface Serial ou USB para conexão com o PC de uso geral
Persistência no caso de quedas de energia
Aplicações de entretenimento: Segundo Bilar (2009), com a chegada dos Sistemas
Embarcados e que o Z80 foi um dos microprocessadores mais utilizados no mundo
por possuir um baixo consumo elétrico e, partindo do principio de que é impossível
colocar um Core 2 Duo em um controle remoto, o Microcontrolador Z80
desempenhou muitas funções importantes de processamento, um dos exemplos mais
importantes sobre esse processador é o game Boy que foi produzido com base no Z80,
que vinha integrado com controle de áudio externo e outros circuitos, outros exemplos
baseado no Z80 foi os antigos S1 MP3 players que tinha um formato de pendriver e
começou a ser produzido em massa por diversos fabricantes. Outro processador que
pode ser citado como exemplo é o da Motorola 68000 que tinha os mesmos chips de
32 bits usados nos Macintosh, não os primeiros feitos em 1979, mais sim em versões
modernas dele, que operam em freqüência mais alta, um grande exemplo são os chips
usados nos primeiros palms, são os chips Dragon Ball que incluíam um processador de
68000, controlador de vídeo e outros componentes, tudo no mesmo Wafer4 de
silício. Ainda segundo Bilar (2009), outro exemplo seria o de alguns MP4 players,
que utilizam apenas três chips, sendo um o controlador principal, outro um chip de
memória flash (usado para armazenamento) e o terceiro um sintonizador de rádio
AM/FM.
Aplicações na medicina: Quando os transplantes, como marca-passos, puderem ser
administrados remotamente. Esses sistemas serão tão compactos que o paciente nem
mesmo vai lembrar que eles são embutidos sem seu corpo. Usando microsensores
colocados em várias partes do corpo, o marca-passo poderá monitorar vários
parâmetros, como o fluxo sangüíneo, e a saturação do oxigênio no sangue. Ele
também poderá transmitir dados usando comunicação sem fio onde, no caso de uma
4 Wafer de Silício: São cilindros de silício fabricados para construção de componentes eletrônicos. As empresas fornecem o silício em cilindros, os mesmos, são fatiados em fatias muito finas que são repassadas para as empresas fabricarem seus circuitos.
22
anormalidade, o médico será contatado e poderá entrar em ação imediatamente, até
mesmo de locais remotos. (BARRETO 2006)
Aplicações no bem-estar dos deficientes físicos: Considere os sistemas que traduzem
imagens em sons para cegos. Já existe um sistema há quase 18 anos, foi desenvolvido
pelo cientista Peter Meijer, do Laboratório de Pesquisas Philips, na Holanda, e se
chama The vOICe. Segundo Barreto (2006), da mesma forma que sistemas traduziriam
imagens para cegos, um sistema de reconhecimento de gestos seria outra ajuda
importante para os surdos mudos interagirem com os computadores e outros
equipamentos.
2.2 Características dos Sistemas Embarcados
A principal característica comum a maioria dos sistemas embarcados, é que eles são
desenvolvidos para uma tarefa especifica ou um conjunto de tarefas dos quais a interferência
humana é muito pouca e, apesar da grande diversidade de aplicações para sistemas
embarcados, algumas características são comuns a todos os ambientes.
2.2.1 Interação com o ambiente
Segundo Ceolin (2007), uma característica marcante em um sistema
embarcado é sua interação constante com o meio a sua volta, seja de forma automática
ou por meio de interfaces. Para o projetista, a característica da interação contínua com
o ambiente traduz em um maior grau de dificuldade nas soluções, uma vez que além
de conhecimento de programação clássica, o mesmo deve conhecer sobre o hardware,
tecnologias de aquisição de dados, atuadores e interfaces é essencial.
Em um ambiente que interage fortemente com a realidade, os pontos chave são
a capacidade de modificar o ambiente real, com utilização de dispositivos que
implementam a monitoração física de um fenômeno que está acontecendo um
ambiente, os sensores nos sistemas embarcados, servem para diversas finalidades, tais
como: abertura de portas (porta de shopping), segurança nas portas de elevadores
(impedir que elas se fechem quando alguém estiver passando), medição de pH de
águas (para ver se a água está boa pra consumo), medição de presença (checar se algo
atravessou uma área não permitida), etc.
23
Contudo, os sensores estão diretamente ligados a outros dispositivos, esses que
vão realmente e a olho humano modificador o estado do ambiente em que se
encontram, esses dispositivos são chamados de atuadores. Os atuadores são elementos
que produzem movimento através de comandos que podem ser manuais (apertando-se
botões) ou automáticos, quando sensores enviam pulso de sinal para os
Microcontroladores e os mesmos fazem com que os atuadores modifiquem o estado do
ambiente.
A interação pode acontecer através de entidades presentes no ambiente real,
que atuam modificando o ambiente ou lendo o estado do ambiente. Essas entidades do
ambiente podem ser lâmpadas, motores, sensores (presença, luminosidade,
temperatura e etc.), câmeras e dispositivos hápticos5. Esses também controlam
sistemas mais complexos como sistemas de incêndio, sistemas elétricos e sistemas
hidráulicos.
2.2.2 Capacidade limitada de recursos
Os Sistemas Embarcados são implementados em arquiteturas muito restritas,
porque os Microcontroladores não dispõe de grandes quantidades de memória
RAM/ROM, o poder de processamento é somente de algumas dezenas de MHz, da
mesma forma que é muito comum os mesmos possuírem barramento de dados de 8
bits e de endereços de 16 bits. Portanto, o software tem que ser altamente otimizado
para funcionar com robustez nessa arquitetura. Logo, no inicio da implementação dos
Sistemas Embarcados os programadores/analistas de sistemas tiveram dificuldade para
programar os software que iriam ser executados nos Microcontroladores. (BARRETO
2006)
Ainda segundo Barreto (2006), no caso de muitos Sistemas Embarcados, o fato
de adotar um sistema operacional e se utilizar de recursos do tipo “Recursividade” é
totalmente proibitivo. Por isso é que a maioria dos software embarcados ainda é
implementado em Assembly ou C, porque essas linguagens consomem poucos
recursos computacionais. E mais, os sistemas embarcados não operam em um
ambiente estritamente controlado. Alguns não podem sofrer calor intenso, outros são
sensíveis à vibração, outros à iluminação, entre diversas outras características físicas.
5 Háptico: Significa que é próprio para tocar, como por exemplo, nos Sistemas Embarcados, o uso de teclados matriciais.
24
Tais sistemas têm que trabalhar todo o tempo e dentro do tempo esperado. Por
exemplo, considerando o ato de pisar no freio de um carro. Se o software que controla
o freio levasse alguns segundos para responder a frenagem, a sensação de desespero
por parte das pessoas que estão naquele veículo seria catastrófica.
2.2.3 Forte acoplamento entre hardware s software
Os Sistemas Embarcados possuem forte acoplamento entre hardware e
software. Isso significa que os software embarcados dependem muito de hardware
para executem tudo que lhe é proposto com qualidade e robustez . Múltiplos processos
são executados simultaneamente, sendo que a CPU atende cada processo por um
pequeno tempo, um a um em seqüência. Algumas das características deste forte
acoplamento podem ser identificadas, por exemplo:
Sistema voltado para uma tarefa especifica;
Todo o sistema é centralizado tudo funciona em um único
Microcontrolador;
Dispositivos de E/S gerenciados por um único microprocessador;
Alta dependência da resposta as solicitações de processos, no caso de
sistema aviônicos, a espera por uma resposta vinda de outro sistema pode
comprometer todos os sistemas.
Estes software, em sua maioria demanda alta qualidade de código, pois tendem
a operar em condições criticas de segurança e disponibilidade. O nível de exigência
em qualidade tende a ser muito maior que a exigência na maioria das aplicações
comerciais que vemos hoje nos computadores das empresas ou nas residências. Uma
falha no software de um desktop caseiro é apenas um incômodo para o seu usuário,
enquanto que uma falha em um sistema médico pode matar uma pessoa.
Além disso, a forte tendência de operarem em rede, interconectados e
integrados a outros equipamentos, aumenta a complexidade da tarefa e a demanda por
qualidade, pois um elo falhando eventualmente pode levar toda a rede a ser colocada
em cheque. (TAURION 2005)
25
2.2.4 Importância das respostas de tempo real nos sistemas embarcados
Segundo Taurion (2005), os Sistemas Embarcados de Tempo Real são
chamados de “Tempo Real”, porque são projetados para tarefas de controle
dependentes do tempo, devendo operar sobre restritas condições de desempenho. Os
Sistemas Embarcados que operam em tempo real são chamados de determinísticos,
pois devem executar suas tarefas em um conhecido e previsível período de tempo.
Ainda segundo Taurion (2005), não pode haver demoras ou imprevisibilidade
de tempo de resposta. Nestes sistemas os resultados não apenas devem estar corretos,
mas também devem ser gerados no momento correto. Não pode haver atraso ou
variações, ao contrário de sistemas computacionais de uso geral, que devem apresentar
um bom comportamento médio e inexiste a preocupação com previsibilidade
temporal. Nestes sistemas de uso geral, uma demora de resposta pode apresentar um
desconforto para o usuário, mais nunca afeta a vida física de ninguém.
Considerando o acionamento de flaps6 de uma aeronave, a resposta deve ser no
mesmo tempo em que o piloto movimenta o manche da aeronave, esse tempo muitas
vezes medido em microssegundos.
Nos sistemas computacionais de uso geral, cada processo tem acessos iguais ao
processador. Se um processo de alta prioridade precisa executar e um outro processo,
de menor prioridade, está ocupando o processador, o processo de alta prioridade
precisa esperar. Este mecanismo é chamado de “preemptive scheduling”. Já um
sistema de tempo real, um sistema de alta prioridade assume o controle do processador
de imediato sem espera. Processos de alta prioridade não esperam por processos de
prioridade inferior. (TAURION 2005)
Um sistema de tempo real pode ser hard real-time ou soft real-time. Um
sistema hard real-time opera sob requerimentos críticos de resposta, ou seja, se a
tarefa não for completada em um período de tempo determinado, a tarefa terá falhado.
Um exemplo simples seria a linha de montagem de veiculo, no qual se o robô não
reconhecer um objeto no instante preciso, quando estiver passando pelo ponto de solda 6 Flaps: São superfícies hipersustentadoras, ou seja, eles servem para aumentar a sustentação da asa do avião. Portanto, eles são usados em situações nas quais é necessário aumentar a sustentação das asas, como a decolagem e o pouso.
26
o mesmo seguirá para a próxima etapa sem ter sido soldado e a operação terá falhado.
No caso de aeronaves, uma falha, pode se perder centenas de vidas humanas. Já nos
sistemas soft real-time, alguma variação de tempo é permitida. (TAURION 2005)
Classificar sistemas de tempo real não é uma tarefa simples e muitos aspectos
técnicos devem ser levados em consideração, tais como: Ambiente de
desenvolvimento, linguagem de programação que foi desenvolvido, se tem uma boa
relação entre a arquitetura do sistema, qual a eficiência dos dispositivos de E/S, se
suportam comunicação síncrona e assíncrona, se possuem recursos de comunicação do
tipo: IPsec, IPv6,Bluetooth e mais.
2.3 Linguagens de Programação para Sistemas Embarcados
Segundo o ICEA (2005), uma linguagem de programação é um vocabulário e um
conjunto de regras gramaticais usadas para escrever programas de computador. Esses
programas instruem o computador a realizar determinadas tarefas específicas. Cada
linguagem possui um conjunto único de palavras-chave (palavras que ela reconhece) e
uma sintaxe (regras) específica para organizar as instruções (instruções mesmo) dos
programas.
Os Sistemas Embarcados são uma fusão entre um software desenvolvido em
alguma linguagem de programação e um hardware específico que no caso desse trabalho
será um Microcontrolador 8051. Para tanto, existe o alto nível de programação e o baixo
nível de programação para esses Microcontroladores, e novamente segundo o ICEA, as
linguagens de programação podem ser classificadas, em uma escala relativa à sua
semelhança com a linguagem humana em:
Linguagem de Máquina; Linguagem Assembly; Linguagem de Alto Nível; Linguagem C; Linguagem de Quarta Geração.
2.3.1 Linguagem de Máquina
É a linguagem de mais baixo nível de entendimento pelo ser humano e a única,
na verdade, entendida pelo processador (CPU). É constituída inteiramente de números,
27
o que torna praticamente impossível entendê-la diretamente. Cada CPU tem seu
conjunto único de linguagem de máquina, definido pelo fabricante do chip.
Uma instrução típica em linguagem de máquina seria algo como:
0100 1111 1010 0110
As instruções presentes na linguagem de máquina são as mesmas da linguagem
do nível mais acima (linguagem Assembly). Um programa em linguagem de alto nível
que foi compilado para executar determinada CPU precisa ser recompilado (e muitas
vezes reescrito), para que possa ser executado em outra CPU que não tenha o mesmo
conjunto de instruções, impactando na portabilidade de software entre diferentes
hardware. (ICEA 2005)
2.3.2 Linguagem Assembly
É a linguagem de nível imediatamente acima da linguagem de máquina. Ela
possui a mesma estrutura e conjunto de instruções que a linguagem de máquina,
porém permite que o programador utilize nomes (chamados mnemônicos) e símbolos
em lugar dos números. A linguagem Assembly é também única para cada tipo de
Microcontrolador, de forma que um programa escrito em linguagem Assembly para
um modelo de Microcontrolador poderá não ser executado em outro Microcontrolador
de uma família diferente.(ICEA 2005)
Ainda segundo o ICEA (2005), nos primórdios da programação todos os
programas eram escritos nessa linguagem. Hoje, a linguagem Assembly, é utilizada
quando a velocidade de execução ou o tamanho do programa executável gerado são
essenciais. Atualmente a maioria dos programas é escrita em linguagens de alto nível,
tal como C, Pascal , Delphi, Kylix, Visual Basic, etc. devido à facilidade de criação e
manutenção dos programas. No caso dos software para os Microcontroladores, hoje
temos, C, C++ e até mesmo JAVA. Todos os programas escritos nessas linguagens são
convertidos para a linguagem de máquina para serem executados pelo processador. A
conversão da linguagem Assembly para a linguagem de máquina se chama montagem,
e é feita por um programa chamado montador (ou assembler). Uma típica instrução em
Assembly seria:
28
ORG 100
LDAA # $10
END
Essa linguagem é também classificada como linguagem de segunda geração, e, assim
como a linguagem de máquina, é considerada uma linguagem de baixo nível.
2.3.3 Vantagens e Desvantagens da linguagem Assembly
Segundo Souza (2003), a programação em Assembly é o nível mais baixo em
que se pode programar com alguma comodidade. As desvantagens de uma linguagem
de baixo nível são:
Grande desproporção entre o conjunto de instruções e as tarefas que o
microprocessador normalmente é chamado a executar. Esta desproporção
obriga a decompor manualmente cada tarefa em operações elementares
que, alem de ser um processo demorado e sujeito a erros, não ajuda a
manter o código estruturado.
Grande dependência relativamente aos detalhes internos do hardware que
tem como conseqüência direta a reduzida portabilidade dos software.
Ainda segundo Souza (2003), a grande vantagem de programar em Assembly é
aproveitar ao máximo as características particulares do hardware onde vai ser
executado, conseguindo assim resultados otimizados quer em tempo de execução quer
em tamanho de código.
Outra vantagem é a existência de assembladores gratuitos ou de baixo custo
para a totalidade dos Microcontroladores pelo que é sempre possível programar em
Assembly, qualquer que seja o Microcontrolador escolhido. O mesmo já não acontece
com as linguagens de alto nível, onde nem sempre é possível encontrar um compilador
nessas condições para um dado Microcontrolador. SOUZA (2003)
29
2.3.4 Linguagens de Alto Nível
São as linguagens de programação que possuem uma estrutura e palavras-
chave que são mais próximas da linguagem humana, tornando os programas mais
fáceis de serem lidos e escritos. Esta é a sua principal vantagem sobre as linguagens de
nível mais baixo. Os programas escritos nessas linguagens são convertidos para a
linguagem Assembly através de um programa compilador ou de um interpretador.
ICEA (2005)
2.3.5 Linguagem C
Segundo Sá (2005), C é uma linguagem de programação profissional e é aceita
para criação de sistemas operacionais como o Windows, o Linux, o Unix, etc. Ela foi
criada para ser tão pequena quanto possível. Seu conjunto de comando é bastante
reduzido, mas, apesar disso, a linguagem é extremamente flexível e poderosa. A
filosofia de C é que desenvolvedor “sabe” exatamente o que quer e a maneira correta
de instruir a linguagem e a máquina, para alcançar esses objetivos.
Sua sintaxe é sucinta e não restringe as maneiras como um resultado pode ser
alcançado, permitindo ao desenvolvedor fazer praticamente o que quiser para alcançar
esses resultados, com geração mínima de código e uso de memória, o que a torna uma
linguagem muito mais rápida. SÁ (2005)
2.3.6 Vantagens e Desvantagens da linguagem C
As razões para a popularidade da linguagem C em aplicações embutidas são
bem conhecidas: o acesso fácil ao hardware, os baixos requisitos de memória e
elevado desempenho dos atuais compiladores facilitam o rápido desenvolvimento de
aplicações eficientes e de fácil manutenção. SOUZA (2003)
Ainda segundo Souza (2003), igualmente bem conhecidas são as desvantagens
da linguagem: sintaxe demasiadamente livre e propensa a erros difíceis de detectar e
demasiados pontos onde a norma ISO não define o comportamento da linguagem ou
remete para a implementação de cada compilador.
30
2.3.7 Linguagens de Quarta Geração
Usualmente abreviada por 4GL. São linguagens de programação com estrutura
mais próxima da linguagem humana do que as linguagens de programação de alto
nível. A maioria delas é usada para acessar banco de dados, a SQL (Select Query
Language) é um bom exemplo dessa geração. ICEA (2005) Um bom exemplo seria:
SELECT NOME MATRICULA FROM ALUNOS WHERE
NOME = "Carlos" AND ESTADO IN (“RJ”, ”SP”, ”MG”)
Figura 3: Arquitetura das Linguagens de Programação. Fonte: ICEA, 2005, EAD – Modulo V – Linguagens. Modificado por: Erick Barros Nascimento
2.3.8 Análise e escolha da linguagem
Diante das informações expostas nos subtópicos acima, a linguagem escolhida
para dar continuidade no estudo da Aplicação da Programação de Microcontroladores
8051 será a linguagem C. Porque além de se tratar de uma linguagem de alto nível,
está em alta com o mercado dos Microcontroladores e a tendência do mercado é
obrigar o encurtamento do tempo de desenvolvimento dos software e a produção de
um código que seja de fácil manutenção.
As aplicações em Assembly são mais usadas atualmente, quando requerem
eficiência de código e o tempo de resposta dos mesmos seja o alvo principal, no caso
deste trabalho, o objetivo maior é apenas explanar esses conceitos.
31
CAPÍTULO 3
MICROCONTROLADORES
32
3. MICROCONTROLADORES
Em 1969, uma empresa japonesa chamada Busicom iniciou um projeto de uma
calculadora eletrônica. Esta empresa enviou para os Estados Unidos uma equipe de
engenheiros responsáveis pelo projeto à procura de Marcian Hoff, da Intel Corporation.
Marcian Hoff que já tinha experiência com computadores e vislumbrou de forma diferente
aquele projeto. Ele pensou que ao invés de desenvolver um chip que somente seria uma
calculadora, desenvolver algo que funcionasse como um programa. Após a compra da licença
da empresa japonesa, em 1971, a Intel lança seu primeiro processador de 4 bits, denominado
4004. Esse foi o primeiro processador de 4 bits e conseguia processar 6000 operações por
segundo (6kHz). Já no próximo ano, mais precisamente em abril de 1972, a Intel anuncia seu
primeiro processador de 8 bits, o 8008. Este processador além de ter um barramento de dados
maior, conseguia processar até 300000 operações por segundo. (AMADEU SOUZA)
Nesta mesma época, já começam a aparecer os primeiros concorrentes da Intel, sendo
a primeira a Motorola Corporation. Ela lança o 6800. Um engenheiro da Motorola sai da
empresa e entra para a MOS Technology que em 1975, lança o 6501 e o 6502 por um preço
muito mais baixo do que os processadores da Intel e Motorola. Devido ao baixo custo dos
65xx, estes se tornaram rapidamente utilizados pelo mercado nos computadores da Apple,
Comodore e até no Atari. Em 1976, a Zilog (empresa fundada por um engenheiro ex-Intel)
lança o Z80, que era compatível com o 8080 da Intel e apresentava inúmeras vantagens frente
a este. Além de ser totalmente compatível com o 8080, conseguia rodar programas já
desenvolvidos para este processador com mais vantagens. No mesmo ano a Intel lançou o
8085, porém o Z80 ainda era superior devido sua relação RAM versus Circuitos, e registros
internos novos, tornando-se padrão no mercado dos processadores. (AMADEU SOUZA)
Logo, segundo a enciclopédia On-Line, Wikipédia, a Intel em 1977 lançou o
Microcontrolador 8051, que ficou conhecido por sua facilidade de programação em
linguagem Assembly, graças ao seu poderoso conjunto de instruções. É tido como o
Microcontrolador mais popular do mundo, pois existem milhares de aplicações para o mesmo,
e existem pelo menos dois mil fabricantes produzindo variantes e clones do modelo.
Atualmente possui diversos modelos clones sendo produzidos por empresas diversas à Intel.
Por ser um Microcontrolador CISC, oferece um conjunto de instruções muito vasto que
permite executar desde um simples programa que faz piscar um LED até um programa de
controle de acesso controlado por rede.
33
3.1 O que são os Microcontroladores
Os Microcontroladores são chips altamente integrados que incluem, num único chip,
todas ou a maior parte dos elementos necessários a um controlador. Eles podem ser definidos
como uma solução "de um único chip". Tipicamente incluem: CPU, RAM,
EPROM/RAM/ROM, dispositivos de E/S e controladores de interrupções para interfaces
paralelas e seriais. Por serem voltados para aplicações específicas, seu custo é relativamente
baixo. Um Microcontrolador típico tem instruções de manipulação de bits, acesso fácil e
direto aos dispositivos de E/S e processamento eficiente de interrupções.
Considerando a relação custo/benefício, os Microcontroladores não são usados apenas
em empresas de médio/grande porte, também são utilizados em vários projetos de eletrônica,
na substituição componentes digitais, obtendo-se assim no final do projeto um melhor
acabamento e um baixo custo, pois um Microcontrolador ocuparia um menor espaço físico e
daria uma maior eficiência e praticidade, uma vez que todos os comandos a tarefa dedicada
em si, são executados via software. MARINHO & MARINHO (2001)
Como já dito no capítulo 1, na década de 70 começaram a ser utilizados
microprocessadores em computadores para dar uma maior eficiência no processamento dos
dados. O microprocessador Intel foi um dos precursores, e partir daí, houve uma preocupação
em melhorar cada vez mais o sistema de processamento de dados através desses componentes.
Baseado na arquitetura de um microprocessador e seus periféricos, foi criado um componente
que (fisicamente em um chip de silício) comportasse todo um sistema e fosse equivalente a
um microprocessador e seus periféricos, assim surgiram os Microcontroladores. MARINHO
& MARINHO (2001)
Neste capítulo, o Microcontrolador que será abordado com mais detalhes será o da
família 8051. Este Microcontrolador é largamente utilizado no Brasil e no mundo e está
presente discretamente na vida dos seres humanos, sendo utilizado no cotidiano de tarefas
diárias tais como: Lavar roupas (maquinas de lavar), esquentar alimentos (forno microondas),
trocar de canal na TV (controle remoto), etc.
34
3.2 Microcontroladores versus Microprocessadores
Os Microprocessadores são componentes dedicados ao processamento de informações
com capacidade de cálculos matemáticos e endereçamento de memória externa. Utilizam
barramentos de dados, controle e endereços para fazer acesso aos periféricos de entrada e
saída, e conversor A/D para aquisição de dados analógicos de sensores e outros periféricos
necessários conforme aplicação do sistema. A vantagem dos Microprocessadores de uso geral
é que ainda possuem maior velocidade de processamento e são usados em soluções mais
complexas. (CHASE 2007)
Figura 4: Diferenças entre Microprocessador e Microcontrolador – Nº de circuitos Fonte: CHASE, 2007, Sistemas Embarcados, pág. 6
Segundo Chase (2007), os Microcontroladores englobam em um único chip: interfaces
de entrada/saída digitais e analógicas, periféricos importantes como a memória RAM,
memória FLASH, interfaces de comunicação serial, conversores analógico-digitais e
temporizadores/contadores.
A vantagem dos Microcontroladores é que além de possuir os periféricos integrados a
um único chip, são responsáveis por executar e armazenar os programas escritos para eles
(firmware), assim como a capacidade de absorver mais funções com o incremento de
periféricos, através de CI´s “driver´s”, como comunicação USB, pilha do TCP/IP,
comunicação Serial e porta PS/2.
Com o advento dos Microcontroladores de 16 e 32 bits (atualmente o padrão é de
8bits) a capacidade de gerenciar soluções mais complexas e maior velocidade de
processamento se iguala em alguns casos, ao do microprocessador de uso geral. Com o
35
estudo e avanço da tecnologia, o crescimento e funcionalidade dos Microcontroladores se
deve muito por conta dos microprocessadores de uso geral.
3.3 Arquitetura dos Microcontroladores
3.3.1 Unidade de Memória
A memória é a parte do Microcontrolador cuja função é guardar os dados. Cada parte
da memória de um Microcontrolador tem seu endereço de memória respectivo, de modo que
se um endereço “XXXX” for solicitado seu conteúdo será conhecido (READ) ou receberá
algum registro a ser armazenado (WRITE).
Figura 5: Modelo simplificado de uma unidade de memória de um Microcontrolador Fonte: MATIC, 2003, The PIC Microcontroller. Modificado por: Erick Barros Nascimento
Segundo MATIC (2003), os componentes da memória são basicamente a mesma
coisa. Dois conceitos básicos são apresentados: endereçamento e memória. A memória é o
conjunto de todos os locais de armazenamento de registros e endereçamento é a busca ou
armazenamento de um registro gravado em um endereço de memória específico. Isso significa
que, se for pedido pelo software o valor de um determinado endereço de memória, esse valor
é conhecido. Além disso, também é possível escrever um registro nesse endereço de memória,
isso é feito através de linhas de controle que podem ser exemplificadas como no exemplo:
utilizando a nomenclatura R/W (read/write – ler/escrever), nos Microcontroladores é usado o
seguinte modo: se r/w = 1, é executado uma operação de leitura, caso contrário é executada
uma operação de escrita no endereço de memória. Adiante, mais especificamente sobre o
36
Microcontrolador 8051, serão explanados os tipos de memórias existentes para
Microcontroladores.
3.3.2 Unidade Central de Processamento – CPU
Segundo Marinho & Marinho (2001), a Unidade Central de Processamento controla
todas as funções do sistema. A CPU de qualquer sistema computacional contém os seguintes
grupos de unidades funcionais:
Registradores e Contadores: Os registradores e contadores são unidades funcionais
usadas para o armazenamento temporário de bits dentro da CPU;
Unidade Lógica e Aritmética – ULA: A unidade lógica e aritmética é a unidade
funcional da CPU que executa as funções lógicas e aritméticas entre palavras
binárias, gerando uma outra palavra na saída;
Unidade de controle e sincronização: A unidade de controle e sincronização
coordena e controla todas as unidades funcionais em uma seqüência lógica e
sincronizada.
A memória e a CPU estão interligadas, quando a CPU solicita um registro que está
alocado em algum endereço de memória, utiliza-se um caminho para que esses dados sejam
transferidos, seja de ida ou de volta dessas solicitações de CPU. Esse caminho é chamado de
“Barramento”.
3.3.3 Barramentos
Esse “caminho”, por onde trafegam as informações e interligam todos os componentes
que formam um Microcontrolador, também é chamado de “bus”. Existem três tipos de bus:
O Barramento de Dados (Data Bus): transmite dados entre as unidades. Portanto, um
microprocessador de 8 bits requer um barramento de dados de 8 linhas para transmitir
dados de 8 bits em paralelo. Semelhantemente, um microprocessador de 64 bits
necessita de um barramento de dados de 64 linhas para transmitir dados de 64 bits em
37
paralelo. Se o barramento de dados para um microprocessador de 64 bits fosse
formado por 8 linhas, seriam necessárias oito transmissões sucessivas, tornando o
sistema mais lento. O Barramento de Dados é bi-direcional, isto é, pode transmitir em
ambas as direções; NOBREGA FILHO (1999)
O Barramento de Endereço (Address Bus): é usado para selecionar a origem ou destino
de sinais transmitidos num dos outros barramentos ou numa de suas linhas. Ele conduz
endereços. Uma função típica do Barramento de Endereço é selecionar um registrador
num dos dispositivos do sistema que é usado como a fonte ou o destino do dado;
NOBREGA FILHO (1999)
O Barramento de Controle (Control Bus): sincroniza as atividades do sistema. Ele
conduz o status e a informação de controle de/para o Microprocessador. Para um
Barramento de Controle ser formado, ao menos 10 (geralmente são mais) linhas de
controle são necessárias. NOBREGA FILHO (1999)
Mas para os Microcontroladores apenas o barramento de endereços e de dados são
mais utilizados.
Segundo Nóbrega Filho (1999), os Barramentos são implementados como linhas de
comunicação reais. Eles podem ser posicionados como parte do circuito no próprio Chip
(Barramentos internos) ou podem servir de comunicação externa entre os Chips (Barramentos
externos). Os barramentos externos podem ser expandidos para facilitar a conexão de
dispositivos especiais.
3.3.4 Unidade de Entradas e Saídas
A função desta unidade consiste em poder ler (entrada) ou escrever (saída) um sinal
digital (0 ou 1) em um pino de Microcontrolador. Apesar de parecer pouco, este recurso é um
dos mais importantes e mais utilizados.
É comum os Microcontroladores oferecerem uma grande quantidade de entradas e
saídas digitais. Mas nem todos os pinos podem ser utilizados para este fim; registradores de
configuração permitem definir quais pinos serão usados para entrada, quais para saída e quais
38
serão usados para outras funções. Logo, as entradas e saídas de um Microcontrolador podem
ser classificadas como:
Entradas Digitais: Um sinal digital só lê valores compreendidos entre “0 e 1”, logo
segundo Quadros (2008) um exemplo típico do uso de entradas digitais é para detectar se
um botão está pressionado. Obviamente no lugar do botão pode-se ter qualquer tipo de
sensor ou dispositivo com uma saída digital. Por exemplo, uma chave se fechando quando
um imã se aproxima. Prende-se o imã em uma porta e a chave no batente, logo essa
configuração torna um sensor que indica se a porta está aberta ou fechada.
Saídas Digitais: Ainda segundo Quadros (2008) um uso básico de uma saída digital é
acionar um LED. A capacidade de acionamento de uma saída digital normalmente é
limitada; um transistor ou um relê pode ser utilizado para controlar cargas maiores. Desta
forma uma saída digital pode controlar uma lâmpada, um motor, uma sirene, etc. O
software pode controlar mudanças rápidas e periódicas das saídas digitais. Por exemplo,
podemos ligar um alto-falante (buzzer7) a um pino digital do Microcontrolador e gerar
sons.
Entradas analógicas: Novamente segundo Quadros (2008) uma entrada analógica fornece
um número que depende da tensão que está presente no pino correspondente. O numero de
bits presente no número define a precisão da conversão; valores típicos estão
correspondidos entre 8, 10, 12 e 16 bits. As aplicações são as mais variadas, dentre as
quais podemos citar:
Verificar o nível da alimentação, para indicar bateria baixa;
Verificar o nível de sinal recebido, para circuitos com comunicação via rádio;
Verificar o nível de um aquário, para avaliar se está cheio ou vazio;
Verificar o pH da água, para decidir se é necessário a adição de sulfato ferroso.
Nas entradas e saídas analógicas, é comum que Microcontroladores utilizem
conversores para transformar um sinal analógico em digital. E também a casos, que o
Microcontrolador utilize apenas um conversor para todos os pinos. Só que está prática não
7 Buzzer: micro alto-falante que é também usado em grande variedade de placas-mãe para gerar sons de bips sonoros
39
muito aceitável segundo Quadros (2008), porque consome muita energia e o tempo de
conversão é um pouco demorado para um Microcontrolador.
Uma alternativa bastante usada são os comparadores analógicos, onde o
Microcontrolador indica somente se a tensão do pino é maior ou menor que um valor (fixo)
armazenado em uma variável interna. Ideal para monitoramento de sobrecarga de motores,
onde a função principal é alertar sobre a sobrecarga, insistindo a anomalia do motor é
desligado, evitando assim sua queima.
Saídas analógicas: Em uma saída analógica a tensão de um pino é controlada escrevendo
um valor em um registrador. Este tipo de recurso é mais incomum.
Figura 6:Exemplo simplificado de uma unidade de E/S Fonte: MATIC, Nebjosa, The PIC Microcontroller
3.3.5 Comunicação Serial dos Microcontroladores
Basicamente os Microcontroladores se comunicam da forma serial ou tecnicamente
RS-232. Segundo Matic (2003) eles trabalham apenas com três linhas onde uma é usada para
enviar dados, outra para receber esses dados e a terceira é usada como referência tanto do lado
da entrada dos dados como na saída dos dados. Esse conjunto de regras forma o protocolo
RS-232. O protocolo de comunicação deve ser bem definido de modo que não haja problemas
entre as partes que estão a se comunicar, logo considerando que se tem uma unidade lógica de
valor “1” e que é colocada na linha de transmissão até que a transmissão se inicie, assim que a
transferência se inicia, a unidade passa a ter valor lógico “0” durante um período “T” de
40
tempo. Então o lado da recepção fica a espera dos dados e um mecanismo de recepção entra
em atividade.
Essa troca de dados colocará os bits menos significativos e os mais significativos no
mecanismo de recepção, permaneceram na linha de transmissão por um período “T” de tempo
e após a passagem do oitavo bit a comunicação se dará por encerrada e a unidade lógica
receará o valor “1”.
A comunicação Serial RS-232 é chamada serial devido os bits de dados se moverem
bit a bit em série, ao contrário da transmissão em paralelo, que segundo Tugatronica (2007) a
transmissão paralela precisa de vários fios para transportar a informação. Esta informação
pode ser enviada em palavras de 4, 8, 16, 32 ou 64 bits simultaneamente ao receptor por
várias vias, entre as quais pinos, fios ou outros meios físicos.
Figura 7: Diferença entre a transmissão em série com a transmissão em paralelo Fonte: TUGATRONICA, http://www.tugatronica.com/introducao-a-porta-paralela/
3.3.6 CLOCK – O relógio do Microcontrolador
O processador e vários de seus periféricos necessitam de uma base de tempo (clock).
Existem diversas formas de gerar o Clock, com precisão e custo diferenciados:
Cristal de quartzo: é o mais preciso e está disponível em uma faixa grande de
valores. Por outro lado, é o mais caro;
41
Ressonador: uma alternativa mais barata e menos precisa aos cristais;
Circuito RC externo: pouco preciso, mais barato;
Oscilador interno ao Microcontrolador: o mais barato (está embutido), mas não
costuma ter muita precisão.
É comum um Microcontrolador suportar várias opções. Em alguns modelos é possível
ter mais de uma fonte de clock, permitindo usar clocks diferentes para o processador e
periféricos ou mesmo mudar dinamicamente o clock do processador conforme a tarefa requer
velocidade ou economia. Quadros (2008)
3.3.7 TIMER
O timer é um periférico básico encontrado praticamente em todo Microcontrolador.
Na forma mais simples é um contador que é incrementado ou decrementado pelo clock; ao
chegar a zero uma interrupção pode ser gerada. A partir desta interrupção o software gera as
temporizações necessárias.
Por exemplo, considerando um Microcontrolador operando a 1MHz com um timer que
interrompe o processador a cada 65536 ciclos do clock. Neste caso, o tempo entre as
interrupções será de 65536/1000000 = 65,535 milissegundos. A cada 15 interrupções teremos
aproximadamente 1 segundo.
Alguns timers permitem dividir o valor do clock antes do contador (útil para clocks
altos) e carregar automaticamente um valor inicial sempre que o clock der a volta (no exemplo
anterior, se pudermos carregar 10000, o contador for decrementado a cada clock e interromper
quando chegar à zero, o Microcontrolador terá uma interrupção precisamente a cada 10
milissegundos).
Um outro recurso disponível em alguns timers é a possibilidade de iniciar e parar a
contagem por um sinal externo. Isto permite usar o timer para medir o tempo entre as
variações em um sinal digital. Quadros (2008)
Logo, segundo Quadros (2008) a unidade básica do temporizador é um contador que é
na realidade um registro cujo conteúdo aumenta de uma unidade num intervalo de tempo fixo,
assim, anotando o seu valor durante os instantes de tempo supostamente T1 e T2 e calculando
a sua diferença, é descoberta a quantidade de tempo decorrida.
42
3.3.8 WatchDog – Cão de Guarda
Segundo PHPH [20-], o Watchdog timer (WDT) tem uma função muito importante
não apenas contra bugs de software, mas também em situações ambientais agressivas. O
WDT oferece a possibilidade de restabelecer o controle da aplicação pelo Microcontrolador
através da reinicializarão do sistema (um simples reset) mesmo que a falha esteja no próprio
oscilador do Microcontrolador (o WDT possui clock independente através de um RC8 interno
e, por isso, possui tempo de incremento constante). Esse insucesso do Microcontrolador de
manter o fluxo do programa adequadamente pode ter várias causas:
Condições Ambientais: que excedem os limites do Microcontrolador. Neste caso,
o estouro do temporizador pode ocorrer após um tempo maior do que o
especificado pelo postscaler, este é usado para prolongar um período de tempo que
o temporizador pode gerar (alguns segundos), porque o hardware do
Microcontrolador está exposto a uma condição que não tem garantia de
funcionamento;
Instabilidade de alimentação do Microcontrolador;
Falha no oscilador externo: A diferença do WDT em relação ao restante do
sistema é justamente o fato dele possuir um oscilador independente do clock
principal;
Bug no código do programa (um loop infinito, por exemplo). Embora o programa
deva ser testado corretamente antes de colocá-lo em produção, o WDT
proporciona uma opção de “programação defensiva” que deve ser utilizado em
aplicações críticas e mesmo em outras aplicações triviais. Mesmo que a aplicação
não tenha relevância, ninguém deseja ter o sistema travado inesperadamente
durante longos períodos.
Portanto o WDT deve ser utilizado em qualquer tipo de aplicação.
Essas são as características comuns a maioria dos Microcontroladores disponíveis no
mercado. E seu uso é imprescindível, quando se trata de automatização que requer tempo para
execução de tarefas e reinicio do sistema microcontrolado.
8 Segundo Ramos (2009), slide 25: RC (Resistor – Capacitor) que não requer componentes externos. Sob condições normais resseta o dispositivo no fim da contagem de tempo.
43
3.4 O Microcontrolador 8051
Segundo LEAL (2001, pag. 2), a família 8051 é constituída por Microcontroladores
robustos e flexíveis para o uso de aplicações de controle industrial e periféricos inteligentes.
Suas características de hardware, arquitetura e novas instruções fazem dele um controlador de
boa performance e de custo relativamente baixo para aplicações que requerem até 64 Kbytes
de memória de programa e 64 Kbytes de memória de dados. Basicamente existem três versões
(pino compatíveis) desse componente, o 8031, 8051 e 8071, aos quais reduzem os problemas
decorrentes de desenvolvimento ao mínimo e provêm a máxima flexibilidade.
Os Microcontroladores da família 8051 seguem a arquitetura de Von Neumann, que
segundo Marinho & Marinho (2001), os barramentos de dados e endereços são
compartilhados entre memórias de programa e memórias de dados na comunicação com a
CPU (figura 8). Nesse tipo de arquitetura, quando a CPU está acessando a memória de
programa não pode acessar a memória de dados, porque usam os mesmos barramentos para as
duas memórias. Essa arquitetura é denominadamente conhecida como: Complex Instruction
Set Computer – CISC ou “Computador com Conjunto Complexo de Instruções”.
Ter em um Microcontrolador com uma arquitetura que pode possuir um vasto
conjunto de instruções pode ser vantajoso no sentido de que se pode ter muitas instruções para
execução de várias tarefas, mas pode não ser tão vantajoso quando o conjunto de instruções
passa a ser grande demais, porque vai afetar diretamente o desempenho do Microcontrolador,
colocando em xeque aplicações que requerem por exemplo, respostas em tempo real.
Ao contrário da arquitetura de Von Neumann começaram a surgir microcontroladores
com a arquitetura de Harvard, que é também é conhecida por: Reduced Instruction Set
Computer – RISC ou “Computador com um Conjunto Reduzido de Instruções”, onde o
acesso as memórias de dados e de programas podem ser feitos simultaneamente, contudo seu
conjunto de instruções é projetado para tarefas mais dedicadas possíveis.
44
Figura 8: Exemplo da arquitetura de Von Neumann Fonte: MARINHO & MARINHO 2001. Modificado por Erick Barros Nascimento
3.4.1 Arquitetura física dos Microcontroladores 8051
Segundo Zelenovsky & Marinho (2002), a arquitetura 8051 especifica os recursos que
deverão estar presentes nos Microcontroladores compatíveis com esta família. Um ponto
interessante nesta arquitetura é que, ao contrário de computadores de uso geral, essa
arquitetura separa a memória de programa da memória de dados. Essa arrumação da memória
em blocos distintos oferece maior versatilidade às aplicações. A figura 9 apresenta um
diagrama em blocos com a arquitetura 8051.
Ainda segundo Zelenovsky & Marinho (2002), Microcontrolador 8051 está
especificada uma CPU de 8 bits, para a qual já foi definido um conjunto mínimo de
instruções. O contador de programa (PC) é de 16 bits, o que permite até 64 KB de memória de
programa. Um outro registrador de 16 bits é usado para acessar a memória de dados, o que
permite 64 KB de dados. Nota-se que existe a possibilidade da memória de programa (ROM
4KB) ser integrada junto com o chip do processador. A memória RAM interna tem 256 bytes
e está dividida em dois blocos de 128 bits. O bloco inferior destina-se a trabalhar como uma
outra memória de dados, enquanto que o bloco superior está dedicado aos registradores
especiais que controlam os diversos recursos do Microcontrolador.
45
A arquitetura 8051 oferece quatro portas paralelas de 8 bits, denominadas de P0, P1,
P2 e P3. Essas portas são bidirecionais e podem ser usadas para receber ou para gerar sinais
digitais. Elas também podem ser acessadas bit a bit, ou seja, cada bit da porta pode ser
programado como entrada ou como saída.
Quando se usa memória externa ao Circuito Integrado – CI, as portas P0 e P2 são
consumidas na construção dos barramentos de endereços e dados. Para a geração de pulsos
com duração precisa ou para a medição de intervalos de tempo em sinais digitais, existem
dois contadores e temporizadores de 16 bits, denominados de "Timers". O bloco denominado
"Controlador de Interrupções" trabalha com cinco interrupções. Duas dessas interrupções
podem ser pedidas externamente através dos pinos INT0 e INT1, sendo que outras duas
interrupções podem ser provocadas pelos contadores e temporizadores. A quinta interrupção é
gerada pela porta serial. Esta arquitetura especifica uma porta serial capaz de atender aos
requisitos mais usuais de comunicação, por isso a quantidade de bits e a velocidade é
programável, e a porta serial gera uma interrupção tanto na transmissão quanto na recepção de
um byte. ZELENOVSKY & MARINHO (2002)
Figura 9: Núcleo de um Microcontrolador da família 8051 Fonte: ZELENOVSKY & MARINHO. Modificado por Erick Barros Nascimento
46
3.4.2 Organização da Pinagem dos Microcontroladores 8051
Os Microcontroladores 8051 são compostos de 40 pinos. A maioria desses pinos estão
divididos em quatro partes que são chamadas de PORTS. Os Ports ou “Portas” são os um
conjunto de 8 pinos dos Microcontroladores e dependendo do Port seja ele P0, P1, P2 e P3,
terão funções de E/S, uso da RAM/ROM, alimentação do Chip, etc. Compõem-se os Ports, 32
pinos, os outros 8 pinos restantes são para funções especificas, tais como: Reset do sistema,
Alimentação VCC (alimentação elétrica), ALE (pino de demultiplexação), VSS (terra), etc.
3.4.2.1 Port P0
Segundo Nicolosi (2001), O port P0(decrementado de pino 39 a 32) é um port de
propósito geral desde que não se utilize de memória RAM, ROM ou EPROM internas do
chip. Isso porque o P0 é um port que serve de via multiplexada de tempos em tempos entre
dados e endereços quando se usa memória externa. Na mesma via num dado tempo estão
trafegando dados, e em outro dado tempo estão trafegando endereços, justificando assim sua
arquitetura baseada em Von Neumann. Os pinos que compõem o port P0 são os que
decrementam de 39 a 32, onde o pino 39 corresponde ao por P0.0 e o pino 32 é o port P0.7.
47
Ainda segundo Nicolosi (2001), utilizando-se de um pino chamado de ALE (Address
Latch Enable), que se esse pino do 8051 for ligado a um chip de latch, é possivel
demultiplexar externamente as vias de dados e endereço, isto é, o programador não precisa se
preocupar com uma determinada implementação que venha a fazer, no sentido que ocupará
em um determinado tempo a via de dados onde deveria passar endereços, porque um chip de
latch ligado ao pino ALE, você terá separado 8 via com endereços para dados e 8 vias de
endereços para trafegar endereços.
Figura 10: Demultiplexação de dados e endereços usando o port P0 Fonte: Microcontrolador 8051: Detalhado, pag. 77. Modificado por Erick Barros Nascimento
3.4.2.2 Ports uso geral para E/S e uso das memórias internas e externas-P1,P2,P3
Port P1 (pino 1 ao 8): Port de propósito geral como E/S, usando oito vias de
comunicação. Via software, eu posso ler ou escrever nesse port. Em alguns modelos de
Microcontroladores mais avançados, caso utilize Timers consecutivos pode-se ocupar 2
pinos do referido Port, por exemplo, se o port P1.0 é ocupado com Timer, os pinos P1.1 e
P1.2 também serão ocupados para realização da tarefa.
Port P2 (pino 21 ao 28): Port de uso geral, caso não use memórias RAM/ROM/EPROM,
externas ao chip. Em outras versões de Microcontroladores os pinos do Port P2 são
utilizados para endereçar RAM/ROM/EPROM externas ao chip.
Port P3 (pino 10 ao 17): Port de propósito geral como E/S, isso se não for utilizado
nenhum periférico externo ao chip, nenhuma interrupção externa e também se não utilizar
48
RAM externa. Esse port é utilizado entre os periféricos internos do chip para fora do
mesmo, além de ter entradas programáveis, como interrupção e dói pinos que gerencia a
memória RAM externa (pinos de READ – RD e Write – WR). Logo, esse port também,
em geral, é comprometido parcialmente com alguma utilização que se deseja dos
periféricos internos, interrupções, etc. Então se o programador não utiliza algum desses
pinos com propósito especifico eles estarão livres para serem utilizados como pinos de
E/S geral.
Figura 11: Comprometimento do Port P3 sendo utilizado para funções especiais Fonte: Microcontrolador 8051: Detalhado, pag. 78. Modificado por Erick Barros Nascimento
Nome Numero do Pino*
Função especial**
Função Normal Função especial Comentários da função especial
P3.0 10 RXD E/S RXD, Receive data Usado como recepto de dados serial
P3.1 11 TXD E/S TXD, Transmit data Usado como transmissor de dados serial
P3.2 12 INT 0 E/S Eternal interrupt 0 Usado para algum evento externo do tipo
interromper do Microcontrolador
P3.3 13 INT 1 E/S External interrupt 1 Usado para outro evento externo do tipo
interromper do Microcontrolador
P3.4 14 T0 E/S Timer/Counter 0:
External input
Usado quando se quer que o timer zero se
torne um contador de eventos externos
P3.5 15 T1 E/S Timer/Counter 1:
External input
Usado quando se quer que o timer um se
torne um contador de eventos externos
P3.6 16 WR E/S External data:
Memory Write strobe
Usado quando se conecta a RAM externa
no chip. Sinaliza que o microprocessador
vai ”escrever” na RAM
P3.7 17 RD E/S External data:
Memory Read strobe
Usado quando se conecta a RAM externa
no chip. Sinaliza que o microprocessador
vai ”ler” na RAM
49
* Observação 1: Os números dos pinos são referentes à pastilha de 40 pinos (DIP).
** Obeservação 2: Estas configurações devem ser programadas no chip para ativá-las.
Tabela 1: Resumo das Funções especiais do Port P3
Fonte: Microcontrolador 8051: Detalhado, pag. 78. Modificado por Erick Barros Nascimento
PSEN - Program Store Enable (pino 29): É um dos quatro pinos de controle do chip. Ele
aciona a ROM/EPROM externa (chamada memória de código) quando o
Microcontrolador vai fazer uma busca de instrução na ROM, para, em seguida, executá-la.
Também é acionado (sempre automaticamente) quando se faz uma consulta em alguma
tabela fixa, gravada na ROM, por meio de uma instrução especial para isto. Esse pino
também possui a característica de ser ativo quando seu valor lógico se encontra em “0”,
assim como os pinos de características especiais INT 0, INT 1, WR e RD.
ALE – Address Latch Enable (pino 30): Pino que comanda a demultiplexação das
informações de dados e endereços do port P0 e é automaticamente gerado pelo
Microcontrolador.
EA – External Access (pino 31): É um pino de comando externo, que determina se vamos
usar ROM/EPROM interna do chip ou se vamos ler somente uma ROM /EPROM externa
ao chip. Se o pino EA estiver setado com valor lógico em “1”, o chip irá ler sua
ROM/EPROM interna, e após acabar todo espaço de memória interna, irá trabalhar
automaticamente com a ROM/EPROM externa, caso ela exista. Com o pino EA setado
para valor lógico “0”, enxergará somente ROM/EPROM externa.
Figura 12:Organização de ROM interna/externa em função do valor lógico do pino EA
Fonte: Microcontrolador 8051: Detalhado, pag. 80. Modificado por Erick Barros Nascimento
50
RST – Resest (pino 9): É o disparador do chip quando se quer iniciar adequadamente sua
função. Ele organiza os valores internos do chip para iniciar o trabalho adequadamente e
sempre da mesma maneira (Watchdog). Deve-se ter um circuito no referido pino para que
no ligamento do chip em +Vcc de 5 volts, o RST fique ao menos dois ciclos de máquina
no estado “1” ou “High”, porque assim se terá a garantia que o sistema iniciou
corretamente. Também é ideal que o circuito tenha um reset forçado por chave.
Figura 13: Esquema de circuito com Reset automático e Reset forçado Fonte: Microcontrolador 8051: Detalhado, pag. 104. Modificado por Erick Barros Nascimento
XTAL1 e XTAL2 – Cristal/Oscilador (pinos 18 e 19): Os Microcontroladores 8051
possuem um sistema de oscilação interna que só exige do exterior o cristal e dois
capacitores para gerar o oscilação, que se tornará o clock ou padrão de tempo para o
Microcontrolador trabalhar.
VCC e VSS – Alimentação elétrica do chip: É por onde se alimenta o chip: +5Vdc em
Vcc, pino 40 e terra em Vss no pino 20.
Em placas programadoras que já vem prontas de fabrica, essas ligações já estão
prontas, cabendo apenas a quem vai implementar software para esse tipo de Microcontrolador
saber operá-la. A exemplo o KIT 8051LS oferecido pela Microgenios Soluções Eletrônicas
Ltda.
51
3.4.3 Fabricantes do Microcontrolador 8051
Segundo Zelenovsky & Mendonça (2002), são diversos os diversos fabricantes da
arquitetura 8051 e eles adicionam recursos extras, tais como conversores A/D e D/A,
geradores PWM, modos de baixo consumo e até relógio permanente, de acordo com o
mercado a que se dedicam. Esses recursos todos são mapeados e controlados através de
registradores na porção superior da RAM Interna. O projeto original especifica que este
processador deveria trabalhar com um relógio de 12 MHz. Entretanto, hoje em dia já se
oferece 8051 operando a 60 MHz, onde a maioria desses dispõe da arquitetura ISAC.
Logo, e ainda segundo Zelenovsky & Mendonça (2002), devido à sua grande
aceitação, a família dos Microcontroladores 8051 passou a ser produzida por outros
fabricantes e, é claro, cada um deles introduziu inovações, tais como: Interface serial (para
comunicação com PC’s), Vigilância de alimentação, protocolos de comunicação I²C e
CANBus, etc. Por isso, atualmente a família 8051 é uma das famílias de Microcontroladores
que oferece uma boa variedade de opções. Outra vantagem desta família é o fato da
independência de um único fabricante, pois existem grandes empresas fabricantes de produtos
eletrônicos que produzem chips desta família, como por exemplo, a Philips, a Maxim-Dallas,
a Atmel e a Analog-Devices.
Fabricante Microcontrolador Relógio RAM ROM Serial Timer AD
Intel 87C51-24 24 MHz 256 4K 1 2 não
Philips P80C31 12 MHz 128 B não 1 3 não
Philips P87C51 12 MHz 128 4 KB 1 3 não
Philips P87C51MB2 24 MHz 2 KB 4 KB 1 4 não
Philips P80C552 24 MHz 256 não 2 3 8/10 bits
Atmel AT87F51 24 MHz 128 4 KB 1 2 não
Atmel AT87F51RC 24 MHz 512 32 KB 1 3 não
Atmel AT89C5115 40 MHz 512 18 KB 1 3 8/10 bits
Dallas DS87C550 33 MHz 1 KB 8 KB 2 3 8/10 bits
Tabela 2: Grandes fabricantes e principais informações sobre suas características Fonte: ZELENOVSKY & MENDONÇA (2002). Pag. 3, Modificado por Erick Barros Nascimento
52
3.4.4 Microcontroladores 8051 mais potentes – Arquitetura ISAC
A Analog Devices vem oferecendo microconversores baseados na arquitetura 8051.
Um Microconversor é um Microcontrolador projetado para controle de processos e que, para
isso, conta com conversores AD e DA de alto desempenho, aliado a grandes quantidades de
memória Flash. O primeiro chamou-se ADuC812 e foi lançado em 1999. Normalmente, esses
chips trazem conversores AD de 12, 16 ou 24 bits multiplexados em 8 canais. Essa
quantidade de bits permite uma relação sinal-ruído perto de 70 dB. Usualmente, os dois
conversores DA são de 12 bits. Além disso, para garantir precisão nas conversões, existe um
circuito que oferece referência interna de 2,5V e um sensor de temperatura. Para fornecer
alguns dados mais técnicos, os conversores AD podem trabalhar na taxa de 20 mil conversões
por segundo e ainda têm capacidade de fazer transferência via DMA. O DMA é importante
para permitir que o conversor trabalhe à velocidade plena sem consumir recurso do
processador. ZELENOVSKY & MENDONÇA (2002)
A memória flash pode ter 64 KB destinados para programa e 4 KB para dados. Existe
ainda um circuito para carregamento de programas que via porta serial faz a gravação na
memória flash. Assim, não são necessários recursos externos para a gravação desta memória.
Também existem versões com memória de dados flash, o que é interessante para gravar dados
que serão mantidos mesmo na ausência de alimentação. A memória de dados externa pode
chegar a até 16 MB, quantidade mais que suficiente para qualquer aplicação de
microconversores. Dependendo da versão, esses microconversores podem trazer outros
recursos tais como cão de guarda, vigia para tensão de alimentação, interface serial, porta
USB, I2C e barramento CAN. Como já foi citado, cão de guarda – Watchdog, é um circuito
que periodicamente verifica o funcionamento do processador e, caso este fique preso em um
laço infinito, provoca o reset, obrigando assim o reinício do programa. A vigia de alimentação
monitora a tensão de entrada do processador e alerta quando esta atinge um certo limite
inferior, antecipando-se a uma falta de alimentação e dando tempo ao processador para
guardar na memória flash os dados essenciais. ZELENOVSKY & MENDONÇA (2002)
Logo, a utilização e o estudo de modernas tecnologias prevê Microcontroladores
operando sob clocks cada vez mais rápidos, atingindo em um único chip, clock de máquina
que era possível se ver nos antigos computadores de uso geral, que tinham clocks de 33 Mhz,
66 Mhz e foram e foram evoluindo com o passar do tempo.
53
CAPÍTULO 4
FERRAMENTAS DE PROGRAMAÇÃO
54
4. FERRAMENTAS DE PROGRAMAÇÃO PARA 8051
Segundo Danilo Oliveira (2009), é mais do que correto afirmar que software é um
termo que já está integrado ao vocabulário universal, apesar de não poder ser definido por boa
parte dos indivíduos que fazem uso do mesmo. Até dez anos atrás, Microcontrolador era uma
novidade no mercado da eletrônica, que até então era inundado de portas lógicas, o que fazia
do tamanho de um circuito proporcional à sua complexidade. Programar um Microcontrolador
era privilégio de raros profissionais. Além da linguagem de programação, o desenvolvedor de
sistemas para Microcontroladores deve possuir conhecimento acerca dos registradores
internos quando não puder contar com guias de consulta, além de se fazer necessário uma
noção, no mínimo, básica de eletrônica.
Novamente segundo Danilo Oliveira (2009), grandes empresas como a Microchip,
obtiveram grandes resultados ao dar ênfase na elaboração de softwares em Assembly para seus
Microcontroladores, inicialmente algumas versões de Microcontroladores PIC, utilizando-se
de uma ferramenta de desenvolvimento integrado chamada de MPLab. Para favorecer o
trabalho de programadores de linguagem C, uma empresa chamada Construction Computer
Software - CCS lançou um compilador C para Microcontroladores PIC, chamado PICC,
acelerando ainda mais sua expansão no mercado.
Entretanto, assim como no mundo dos computadores de uso geral, grande parte dessas
ferramentas de programação são proprietárias, tanto software de ambiente de
desenvolvimento integrado, como software de compilação, software de simulação e software
de gravação dos programas desenvolvidos. Porque estes software que são projetados para a
grande imensidão dos Microcontroladores, afinal, precisam ser gravados nos mesmos. Logo
até bem pouco atrás, encontrar ferramentas gratuitas para realizar estas tarefas era
praticamente impossível, até pelo fato da não portabilidade existente de um chip para o outro,
empresas acabaram por desenvolver seus ambientes de programação, afim de que os mesmos
só funcionem nos seus equipamentos.
Muitos desenvolvedores optaram por utilizar Microcontroladores da Microhip, mesmo
com seus altos custos de aquisição, devido à disponibilização de ferramentas de
desenvolvimento integrado próprios para seu chip. A empresa Atmel, que desenvolveu chips
de baixo custo e grande desempenho, em determinado momento teve seus chips um tanto
desprezados, porque os desenvolvedores não conseguiam encontrar ferramentas de
programação para os seus chips, principalmente para os modelos 8051. Mas o fato é que: com
55
o crescente e constante avanço dos software livres e/ou de código aberto acabaram atingindo
de forma bastante positiva o universo dos Microcontroladores. Ambientes de
desenvolvimento integrado capazes de realizar integrações com outros sistemas de
Microcontroladores, bastando apenas adição de plugins e download de atualizações para
possibilitar essa integração, elevou consideravelmente o desenvolvimento de software para
Microcontroladores.
Aliado a todos esses aspectos de desenvolvimento e de ambientes integrados de
desenvolvimento, também estão os Kits de Desenvolvimento, esses Kits são excelentes
fermentas para desenvolvimento de software microcontrolados, a exemplo o kit8051LS da
Microgenios, esse mesmo é projetado para a família dos Microcontroladores 8051. Essas
ferramentas já dispõem de grande parte do que é necessário para o desenvolvimento e testes
de aplicações para um Microcontrolador, vem equipados com placas controladoras, o próprio
Microcontrolador, portas de expansão, displays de LCD, etc. Assim tendo todo esse conjunto
de ferramentas e como hoje em dia, o estado da arte de eletrônica, ainda está carente do
profissional desenvolvedor de software para Microcontroladores. Isso porque em alguns
casos, quando se tem um desenvolvedor que implementa em linguagem C perfeitamente para
computadores pessoais, às vezes, pelo fato de desconhecer a eletrônica, fica mais complicado
desenvolver os mesmos software, com a mesma linguagem para os chips, então utilizando-se
de Kit de desenvolvimento e ambientes de desenvolvimento integrado ao alcance de todos,
novos profissionais nasceram para o universo da Automação Industrial.
4.1 Software de Desenvolvimento para Microcontroladores
4.1.1 Eclipse
Eclipse é uma IDE, do inglês Integrade Development Evironment (Ambiente de
desenvolvimento integrado), ou seja, é uma plataforma de desenvolvimento de software
composta por: editor, compilador, linker, depurador, suporte integração com outros software,
entre outras ferramentas.
O Eclipse tem tido grande repercussão e uso porque trata-se de um projeto “open
source”, logo não é necessário pagar licença de uso; outra característica importante é sua
capacidade de trabalhar com linguagens de programação diferentes (Java, C, C++, por
56
exemplo) e suas aplicações, além de trabalhar com linguagens de quarta geração (SQL)
utilizando-se do plugin QuantumDB.
Como já dito, o Eclipse é um Framework para integrar diferentes tipos de aplicações.
Uma das suas aplicações é a CDT – C/C++ Development Tooling, diferentemente da JDT –
Java Development Tooling, a qual já vem com o Eclipse. Para Microcontroladores 8051,
utiliza-se as aplicações CDT, porque a implementação que será utilizada para o
Microcontrolador 8051 será com a linguagem C.
Essas aplicações são oferecidas em forma de plugins e automaticamente se integram a
plataforma. Tendo seus próprios recursos para gerenciamento de mecanismo, que são
geralmente arquivos no disco rígido dos computadores de uso geral. Eles residem no seu
workspace, uma pasta especial localizada no seu sistema de arquivos. As aplicações instaladas
comunicam-se entre si, com isso, se uma aplicação altera um recurso qualquer, todas as outras
aplicações instaladas serão notificadas sobre essa mudança, garantindo uma consistência e
integração em todo o seu ambiente de desenvolvimento.
O projeto CDT provê um conjunto de plugins que implementa uma IDE de C/C++.
Ele adiciona uma perspectiva C/C++ ao Workbench do Eclipse, que suporta desenvolvimento
C/C++ com vários views, wizards, um editor, e um depurador. O CDT foi desenvolvido para
prover uma arquitetura extensível, que dará suporte a integração de ferramentas desenvolvidas
por distribuidores de software independentes. Perspectiva quer dizer qual configuração e
ajuste o usuário fará no Eclipse para utilizar a linguagem de programação desejada, por
exemplo: o usuário pode através de plugins, ter o mesmo Eclipse para desenvolver em C ou
Java, bastando apenas à adição dos mesmos nos lugares corretos. Outra curiosidade é o
Workbench, que é a parte visual do Eclipse, é onde o usuário trabalha. Se o usuário escolhe
uma perspectiva para trabalhar com Java, o Workbench ajusta sua interface visual e suas
barras de ferramentas para aquela perspectiva.
Figura 14: Eclipse com perspectiva para C/C++ Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
57
Figura 15: Perspectiva ajustada para Java e QuantumDB Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
O que torna o Eclipse uma IDE especial, é a extrema flexibilidade na qual podem ser
combinadas views e editores. Dessa forma o workbench pode ser arrumado de uma forma
livre e que melhor adapte o desenvolvedor. As views e editores podem ser adicionados em
uma perspectiva aberta (mesmo se eles foram definidos em um plugin totalmente diferente).
Portanto é possível ter a total liberdade para criar o ambiente de desenvolvimento que melhor
agrade ao desenvolvedor, de uma forma agradável e customizada.
Existem inúmeras versões do Eclipse, inclusive pacotes de instalação para ambientes
Windows e Linux pré-configuradas já para o propósito do desenvolvedor, nesse trabalho será
usado a versão Eclipse Europa 3.3.0. Existem outras tais como: Eclipse 32, Ganymede,
Europa fall, etc., e pacotes prontos para PHP, Móbile, entre outros.
4.1.2 Small Device C Compiler – SDCC
O compilador C para pequenos dispositivos – SDCC, é um otimizador do compilador
ANSI – C que permite trabalhar com Microcontroladores Intel 8051, Maxim 80DS390, Zilog
Z80, Atmel AT89S8252 e Motorola 68HC08, ambos baseados em MCU’s
(Microcontroladores de consumo ultra baixo). Como no Eclipse, também é um projeto open
source, distribuído sob a Licença Geral Publica (GPL – General Public License) da GNU.
Com uso de plugins é possível integrá-lo ao Eclipse e compilar software escritos no mesmo.
O seu analisador sintático (parser), segundo ROZA;BRUM & Silva (2001), pode ser
incrementador para manipular extensões de linguagem para outros tipos de
microprocessadores. O SDCC possui ainda eliminação internar de sub-expressões,
58
implementação de copy-propagation, que segundo a enciclopédia on-line Wikipédia, é o
processo de substituição das ocorrências de metas de trabalhos diretos com seus valores. A
atribuição direta é uma instrução da forma y = x, que simplesmente atribui o valor de x para y.
O SDCC também possui otimização de loop e eliminação de código morto. Já o seu back-end
utiliza um esquema de alocação global de registradores, que pode ser configurado para outros
processadores de 8 bits. Este sistema de alocação de registradores faz parte da otimização
realizada por este compilador.
Ainda segundo ROZA;BRUM & Silva (2001), o otimizador trabalha com regra
baseada em um mecanismo de substituição de registradores. Esta otimização ocorre durante o
processo de compilação, depois da geração da linguagem intermediária, fazendo com que a
otimização seja independente do tipo de microprocessador para qual se deseja gerar o código.
Tipo de Variável Qtd de bits / bytes Qtd de Bytes
SHORT 8 1
CHAR 8 1
INT 16 2
LONG 32 4
FLOAT 4 bytes IEEE – 754 em precisão simples
Tabela 3:Tipos de variáveis contempladas pelo SDCC Fonte: ROZA; BRUM & Silva, 2001, pag. 11. Modificado por Erick Barros Nascimento
As ferramentas ASXXXX (montador), ASLINK (linker) e SDCDB (debugador) são
parte do compilador SDCC. As plataformas suportadas pelo SDCC são Linux / Unix e
Windows. ROZA; BRUM & SILVA (2001)
A versão do SDCC que esta sendo utilizada neste trabalho é 2.9.0. Vale ressaltar que
existe pouca documentação para esse software, mais para o desenvolvimento deste trabalho as
informações são suficientes.
4.1.3 PDS – 52
O PDS-52 é um Simuldor e Debugger para microcontroladores 8051. Como o SDCC
também pode ser integrado ao Eclipse, pode-se fazer a simulação dos software desenvolvidos
59
no utilizando o Eclipse, bem como a debugação caso haja algum hardware especifico
conectado no PC. O PDS-52 é não é um projeto open source, mais é um software livre para
download caso seja utilizado para fins não comerciais. Caso o usuário deseje utilizado para
fins comerciais, deverá notificar a empresa mantenedora do software.
Figura 16: Simulação de contagem binária de 8 bits e gravação no PORT P2.
Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
A figura acima mostra o PDS-52 em tempo de execução de simulação de um
Microcontrolador Atmel AT89S52, com clock configurado para 20 Mhz, dentre as quais são
mostrados algumas peculiaridades da compilação feita pelo SDCC. Logo abaixo temos:
1. Janela do source: Exibe o código em C (apesar da possibilidade de alteração desse
código dentro do próprio PDS-52, não é aconselhável, porque pode haver conflito com
as versões dos “source files” gerados dentro do Eclipse, que estão armazenados no
workspace do mesmo;
2. Janela Disassembler: Apresenta o arquivo Assembly gerado pelo SDCC a partir do
arquivo escrito na linguagem C;
60
3. Janela Execution Time: Apresenta o clock do Microcontrolador durante a simulação;
4. Janela Peripherals: Exibe o dispositivo que se deseja análise na simulação, pode ser
exibido todos os Ports, todos os Timers, etc., no caso da figura 16, estão sendo
mostrado o armazenamento da contagem de 8 bits no Port P2.
Existem inúmeras funções de analise de software neste simulador, como execução
passo a passo, etc.
4.1.4 SPI – Flash Programmer
O SPI – Flash Programmer é um software de gravação próprio para
Microcontroladores da Atmel. Ele foi desenvolvido pelo Professor Mohammad Asim Khan, da
Escola Universitária de Medicina, Divisão de Reumatologia, na cidade de Cleveland, Ohio.
Trata-se de uma distribuição gratuita para uso independente do fim, apenas para transferência
do arquivo *.HEX gerado pelo compilador utilizado (neste caso SDCC), do PC ou Notebook
para o Kit de programação através da porta paralela (LPT1).
O SPI – Flash Programmer é compatível com os Microcontroladores Atmel modelo,
AT89S51, AT89S52, AT89S53, AT89S8252 e AT89S8253, entre outros da família 8051 da
Atmel.
61
Figura 17: Tela Principal do SPI-Flash Programmer Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
Sua tela principal é composta de onze botões para tratamento de arquivos *.HEX,
upload do software gravado no chip. Possuem 3 radios buttons para funções de proteção do
software que esta sendo gravado no chip e um combobox para escolha do Microcontrolador
que será efetuado a gravação do software. Os detalhes das funções de cada um serão descritos
abaixo:
1. READ: Efetua a leitura do programa gravado no Microcontrolador. Seu conteúdo é
salvo no buffer do programa;
2. PROGRAM: Efetua a gravação no KIT de programação;
3. ERASE: Apaga o programa que está gravado no Microcontrolador;
4. BLANK CHK: Informa se o Microcontrolador está apagado;
5. OPENFILE: Carrega no SPI o programa que será levado para o Microcontrolador;
6. DISP_BUFFER: Buffer com o mapa Hexadecimal do programa;
7. VERIFY: Verifica se o programa salvo na memória do Microcontrolador é igual aos
dados carregados no buffer de memória do SPI – Flsh Programmer, byte a byte;
8. WRITE LBS: Acione os Lock-Bits no Microcontrolador;
9. SIGNATURE: Verifica o modelo do Microcontrolador;
10. RESET CHIP: Reseta o Microcontrolador, sem a necessidade de pressionamento do
botão no mesmo;
11. RELOAD_FILE: Recarrega o programa no buffer de memória do SPI – Flash
Programmer.
62
4.1.4.1 Os lock-bits
São bits de proteção no Microcontrolador disponibilizados pelo fabricante para evitar
que outras pessoas, mal intencionadas, copiem o programa salvo na memória do
Microcontrolador e os reproduza ou venha a modificá-los. Existem 3 níveis de proteção
disponíveis no SPI – Flash Programmer:
1. Lock-Bit-1: Desabilita o uso de instruções MOVC (Assembly) executadas em
memória externa para ler bytes da memória interna, e desabilita gravação da memória
interna;
2. Lock-Bit-2: Contém todas as funções do Lock-Bit-1, e também desabilita a memória
de programa interna;
3. Lock-Bit-3: Contém todas as funções do Lock-Bit-2, e também desabilita a execução
de programas em memória externa.
Para acionar os Lock-Bits, basta acionar a proteção desejada (podem ser acionadas
mais do que uma proteção) e pressionar o botão WRITE_LSB no SPI – Flash Programmer,
ou antes de gravar o Microcontrolador através da função PROGRAM, acionar os Lock-Bits.
4.2 KIT de Programação 8051LS
Será utilizado um KIT8051LS da marca Microgenios. Este Kit é uma ótima
ferramenta para desenvolvimento de projetos microcontrolados na área da Eletrônica e
Informática baseada na família 8051. O KIT8051LS é composto por:
1 placa controladora 8051LS;
1 Microcontrolador AT90S52 (100% compatível com a família 8051);
1 Modulo LCD 16X2 com BackLight (LCD Padrão 44780A);
1 Fonte de alimentação 9V / 300mA – 110/220V;
1 cabo de gravação kit-pc.
63
4.2.1 O KIT8051LS
Vem com o Microcontrolador AT89S52 da Atmel, e tem como principais características:
Compatibilidade de 100% com a família 8051;
8 kbytes de memória flash (memória de programa);
256 bytes de memória RAM (memória de dados);
32 portas de entrada e saída;
Modo de programação serial ISP (In-system Programmable).
Desenvolvido especialmente para estudantes e profissionais da área de Eletrônica e
Tecnologia da Informação, que se interessem na programação, automação e controle de
equipamentos. Com um KIT8051LS será permitido:
Gravação do KIT utilizando a porta paralela do computador de uso geral;
Desenvolvimento de software embarcado com a utilização das linguagens
Assembly, C e Basic;
Armazenamento do software em memória flash, evitando a perda do programa em
caso de falta de energia no Microcontrolador;
Utilização do KIT como terminal RS232 conectado a um PC.
64
Figura 18: KIT8051LS em funcionamento Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
4.2.2 Os seus componentes
O KIT8051LS possui diversas ferramentas que tornaram mais fácil o desenvolvimento dos
projetos devido em uma única peça já se encontrar montado:
Teclado com 8 teclas do tipo push-botton;
Barramento com 8 LEDS coloridos;
Teclas de contadores e de interrupções;
Display de LCD 16X2 com backlight;
Cristal de 11,05920 Mhz;
Canal serial RS232.
As ilustrações abaixo detalharam visualmente cada parte do KIT 8051LS.
1. A conexão do LCD é de fácil instalação e remoção, eliminando o uso de solda e fios.
Neste tipo de KIT, a conexão para o LCD ainda vem com potenciômetro de ajuste de
contraste da luminosidade do LCD. Este conector está ligado ao barramento de 8 bits
P1 do Microcontrolador.
65
Figura 19: Conexão do LCD e Potenciômetro Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
2. Porta de expansão, permite que você expanda seus projetos utilizando um conector de
10 vias conectando outros periféricos para o KIT. A exemplo: uma placa controladora
de drive´s para motores de passo.
Figura 20: Porta de expansão ligada ao Port P3
Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
3. Barramento com 8 LED’s (indicador lógico), sendo fundamental para fixar a teoria
doe Microcontroladores 8051, assim como testar a programação visualmente. Os
LED’s estão ligados no Port P2 do Microcontrolador.
Figura 21: Barramento com 8 LED's Fonte: Microgenios. Manual de operação pag. 04
66
4. Possui teclado com 8 botões do tipo push-button para desenvolver aplicações de star-
up de equipamentos, bem como mais 4 botões também do tipo push-button para
utilização das interrupções de dos contadores através das teclas (INT0, INT1, T0, T1).
Sendo de grande utilidade na simulação de eventos externos, tais como: sensores e
contadores.
Figura 22: Teclados tipo push Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
5. Placa com conector de alimentação do tipo P4. Possui circuito de proteção que evita a
queima caso haja inversão de polaridade na alimentação. Utiliza regulador de tensão
com dissipador que permite fonte de 9V, 12V ou 15V DC / 300mA. Essa placa
também possui entradas de comunicação serial através do protocolo RS232
(comunicação com computadores), para desenvolver aplicações utilizando teclados
alfanuméricos e gravação do chip através da porta paralela do PC.
Figura 23: Conector da alimentação e Porta serial Fonte: Microgenios. Manual de operação pag. 04
67
6. Microcontrolador Atmel AT89S52, 12 Mhz de clock, memória RAM/ROM, 32 portas
de entrada e saída. O KIT8051LS é compatível com toda a família 8051 e também
grava e roda nos modelos AT89S51, AT89S53, AT90S8252 e AT90C51/52/53, sendo
esses últimos requerentes de programação externa.
Figura 24: Microcontrolador AT89S8252
Fonte: Microgenios. Manual de operação pag. 04
4.3 Protótipo de teste do Microcontrolador 8051
No meio industrial e de saneamento, a instalação de motores elétricos significa levar o
seu produto as casas dos clientes para poder gerar as contas de água, conseqüentemente os
clientes efetuarem o pagamento trazendo o lucro para a empresa. Porque de outra forma,
como a água chegaria nas caixas d’água e reservatórios. No entanto, segundo Tecnologia e
Eletrônica (1998), quando esses motores que movimentam as bombas de água são mal
instalados, significa dor de cabeça, interrupção na produção, manutenção constante, queimas
de componentes de proteção e comando, trazendo prejuízos financeiros e possibilidade de
acidentes com pessoas.
Vários são os passos que devem ser seguidos para que uma empresa não tenha
problemas com seus motores. O primeiro passo é a sua escolha correta, tais como: definição
da potência necessária, em cv; escolha da marca e fabricante; se o motor deve ser monofásico
ou trifásico; assim como a tensão de funcionamento; escolha da tensão; freqüência e outras
características. Depois vem a instalação; onde a construção correta da base deve ser de tal
forma que proporcione a menor vibração possível. Para os motores monofásicos não se deve
esquecer o dispositivo aliviador de partida. TECNOLOGIA E TREINAMENTO (1998)
68
Ainda Segundo Tecnologia e Treinamento (1998), um dos grandes problemas da
instalação de motores elétricos está nos custos elevados do sistema de proteção e comando e
por isto muitos deixam de implantá-lo corretamente. O sistema de comando define a vida útil
do motor. A proteção é constituída de dispositivos que desconectam o motor da alimentação
nos casos de curto-circuito e sobrecarga, não permitindo que o motor se queime nestas
condições adversas.
Logo, o uso de tecnologias lógicas com seu algoritmos monitorando o estado de
equipamentos e dando valores corretos acerca de operação de equipamentos e outras
atividades com baixo custo e automatizando processos que antes eram feito por operadores
corpo a corpo em quadros de comando, atualmente está sendo de grande valia. Evitando
assim, perdas financeiras consideráveis. Um dos principais motivos da queima de motores no
meio industrial é:
1. A Sobrecarga: O motor não possui as proteções contra sobrecarga e o operador exige
dele potência maior do que a especificada na placa. Por exemplo, um entupimento de
uma adutora de água, onde a bomba de água fica em estado de shut- off9 (girando sem
haver fluxo de passagem da água) sobrecarregando o motor e acontecendo a queima
do mesmo por conta da alta amperagem que o motor passa a ganhar.
Com um sensor medindo essa corrente e um Microcontrolador utilizando um
algoritmo com uma condição em que, quando passar de determinado valor, desligue a
alimentação elétrica do mesmo, emita uma mensagem em display ou dispare um sinal sonoro,
alertariam a equipe técnica sobre a manutenção do motor elétrico. Então a proposta desse
protótipo utilizando o Microcontrolador 8051 é mostrar fisicamente um efeito de sobrecarga
desligando a alimentação elétrica do motor.
4.3.1 Sistemática do protótipo
Para mostrar o resultado do estudo da Aplicação da Programação de Microcontroladores 8051
utilizando a linguagem C foram executado os seguintes procedimentos:
9 Shut-off: É o estado de uma bomba de água centrifuga, quando ela se encontra em funcionamento mais com a passagem da água interrompida, causando o elevamento da pressão da água ao máximo. Essa condição é importante para cálculos curvatura da bomba.
69
1. Levantamento dos requisitos para elaboração do projeto, tais como: KIT, Simulação,
Teste e execução;
2. Desenho da planta do circuito que será implementado na linguagem C;
3. Aquisição dos materiais para elaboração do circuito;
4. Desenvolvimento de um software escrito em C para acionamento de um moto elétrico
de 12V utilizando 1 cooler de gabinetes de computadores de uso geral;
5. Execução e mostra de uma simulação de sobrecarga de um motor elétrico.
4.3.2 Especificação técnica da parte física do protótipo
1. Motor elétrico do tipo Cooler: Mini Ventilador Cooler compatível com AMD /
DURON / ATHLON / INTEL / CELERON; 3500 RPM; Alimentação 12VDC.
Figura 25: Cooler de Ventilação
Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
2. Cabos e Conexões: Cabo Serial DB9 – macho e fêmea, para transações PC
Microcontrolador com leitura de teclado alfanumérico; Cabo DB25(macho) e
DB9(fêmea), para leitura e gravação no chip AT89S52;
Figura 26: Cabo Serial e Esquema da pinagem
Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
70
3. Kit de programação: KIT de programação 8051LS da Microgenios Soluções
Eletrônicas (descrito no tópico 4.2)
4. Computador Desktop ou Notebook: Notebook CCE TCLD5, 1.73 Ghz, 1.5 GB de
RAM.
5. Circuito que será implementado: Ligando um relé a um Microcontrolador através de
um transistor.
Figura 27: Desenho do circuito de um Microcontrolador acionando motor Fonte: NASCIMENTO, E. B.2009 , Aplicação da programação de Microcontroladores.
71
CAPÍTULO 5
CONSIDERAÇÕES FINAIS
72
5. CONSIDERAÇÕES FINAIS
5.1 Conclusão
Atualmente em quase todas as atividades humanas identificam-se a presença de
Software Embarcado, embora a grande maioria deles passe despercebida aos olhos humanos,
os exemplos de Software deste segmento são inúmeros. Eles estão presentes no uso de tarefas
cotidianas, como fornos microondas, máquinas de lavar, automóveis, TVs digitais, etc. A
automatização de tarefas rotineiras causou um impacto profundo nos processos das empresas,
porque antes, tarefas como ligar equipamentos, monitorar painéis, evitar danos a
equipamentos, eram exclusivamente feito por operadores que em muitos casos, devido ao não
seguimento de planos de segurança ou simplesmente o não comprometimento com horários e
tarefas, gerou perca de tempo e dinheiro. No caso das residências, com a chegada em massa
dos computadores as casas das pessoas, tarefas maçantes e demoradas, agora são executadas
em minutos ou mesmo segundos.
Durante décadas, desde o nascimento da linguagem de programação Assembly, os
software embarcados foram desenvolvidos para os Microcontroladores utilizando esse tipo de
linguagem. Mas com o avanço das linguagens de programação e o surgimento de
Microcontroladores mais portáveis, foram desenvolvidas ferramentas para acelerar o
desenvolvimento dos software, e utilização de linguagens de programação de alto nível, com
por exemplo: Java e C/C++.
Devido à existência vários tipos de Microcontroladores, foi escolhido para o estudo a
família de Microcontroladores 8051, devido seu baixo custo de aquisição, bem como sua
portabilidade de software com os demais chips pertencentes a esta família. Para
implementação e mostra da real da aplicabilidade de um sistema microcontrolado, houve o
uso de um KIT de programação para chips da família 8051, tendo assim uma visualização em
tempo real do que acontece por trás dos bastidores de muitos equipamentos eletrônicos, que
estão tão próximos das pessoas, mais a maioria dessas pessoas não se dá conta de sua
importância em suas vidas.
Nos software usados para implementação do protótipo, foi dado ênfase aos ambientes
de programação open-source, por trata-se de ferramentas robustas e de nenhum gasto
adicional para obtenção das mesmas, bem como a não existência de dificuldade em instalação
e configuração de parâmetros.
73
Contudo, o estudo realizado nos capítulos anteriores, tem o propósito de apoiar o
desenvolvimento de software embarcado para alavancar ainda mais a automatização de
processos e criação de ferramentas que ajudem na tomada de decisões, porque como software
é um grande potencial de mercado e gerador de oportunidades. Estas oportunidades podem
gerar desenvolvimento de novos profissionais que em muitos casos podem estar tão próximos,
mais que pelo desconhecimento do desenvolvimento de sistemas para Microcontroladores o
assunto cai em segundo plano ou até mesmo em esquecimento total.
74
REFERÊNCIAS
75
REFERÊNCIAS
AMADEU SOUZA, Vitor. Disponível em: <http://www.cerne-
tec.com.br/Artigo3_Historia.pdf> , [21-] acessado em 30 de agosto de 2009.
BARRETO, R. S. Barreto, Raimundo, Programação 8051. Disponível em:
<www.dcc.ufam.edu.br/.../se/.../ISE-05-Programacao-8051-parteI.pdf>, acessado em: 12 de
setembro de 2009.
BARRETO, R. S., 2006, Computação Brasil. Sistemas Embarcados: O novo boom da
informática? , <Disponível em www.sbc.org.br/bibliotecadigital/download.php?paper=419>,
acessado em 15 de setembro de 2009.
BILAR, Luis. 2009. Entendo os embarcados, disponível em:
<http://www.webartigos.com/articles/13366/1/entendendo-o-mundo-dos
embarcados/pagina1.html>, acessado em 19 de setembro de 2009.
CEOLIN Fabrício José Vieira, 2007. Sistemas embarcados, disponível em:
<http://www.ulevel.com/index.php?option=com_content&task=view&id=203&Itemid=235>,
acessados em 21 de setembro de 2009.
CHASE, O. A., 2007 Sistemas Embarcados. Disponível em: <
www.neoradix.com.br/_.../NEORADIX_01_Sistemas_Embarcados.pdf>, acessado em 12 de
setembro de 2009.
FRED COX, 2008, Projeto de Alarme residencial, disponível em:
<http://www.embarcados.com.br/Noticias/Ultimas-Noticias/Central-de-Alarme-Residencial-
com-PIC18F4620.html>,accessado em 19 de setembro de 2009.
76
ICEA, Instituto do Espaço Aéreo, 2005. EAD Modulo V-linguagens, disponível em:
<http://www.icea.gov.br/ead/anexo/23101.htm>, acessado em 23 de setembro de 2009.
Intel 8051, disponível em: <pt.wikipedia.org/wiki/Intel_8051>, acessado em 12 de setembro
de 2009.
GUSTAVO, Roberto, 2007. RELES DE SOBRECARGA – TERMICO BIMETALICO,
disponível em <http://www.gustavoroberto.blog.br/2007/07/06/reles-de-sobrecarga-
%E2%80%93-termico-bimetalico/>, acessado em 19 de setembro de 2009.
LOPES, Luis Claudio Gambôa, 2006/2007. Uso de Internet Embedded em
Microcontroladores para aplicações de monitoramento e automação de baixo custo.
Disponível em: <http://www.leopoldina.cefetmg.br/~gamboa/viewer.
php?/orientacoes/bicjr/intemb/index.html>, acessado em 12 de setembro de 2009.
MATIC, Nebojsa. The PIC microcontrollers, book 1, Editora: mikroElektronika, ano 2003.
MARINHO, José Edson dos Santos & MARINHO, Ednaldo dos Santos, Mini Curso de
Microcontrolador, Ed. Especial nº 2, Saber Eletrônica, Janeiro 2001. Disponível em:
www.ivair.com.br/download/minicurso.pdf, acessado em 23 de setembro de 2009
MICROGENIOS. Manual de operação: Kit Microcontrolador 8051 LS. V. 2.0 São Paulo, SP, 2006. 15 P.
MOURA SANTOS, Danilo, 2006. Projeto de sistemas embarcados: Um estudo de caso
baseado em Microcontrolador e seguindo AOSD, Disponível em:
<www.lisha.ufsc.br/~guto/teaching/theses/danillo-bsc.pdf>, acessado em 16 de setembro de
2009.
77
NOBREGA FILHO, Raimundo de Gouveia, 1999, Fundamentos de Hardware, disponível
em: <http://www.di.ufpb.br/raimundo/ArqDI/Arq5.htm>, acessado em 6 de outubro de 2009.
OLIVEIRA, Luis Danilo. 2009, Desenvolvimento de software para Microcontroladores,
disponível em: <
http://www.grupointegrado.br/conccepar2009/?pg=anais_resumo&codigo=401>, acessado em
10 de novembro de 2009.
PEREZ, Marcelo G. & SANTOS, Rafael R. A. 2004, Sensores de proximidade embutidos,
disponível em: <japuneis0.tripod.com/Tecnologia/sensores-parte_I.doc.>, acessado em 15 de
outubro de 2009.
PHPH – Engenharia e Informática, PIC Watchdog Timer, disponível em:
<http://www.phph.com.br/Microcontroladores/pic-watchdog.html>, acessado em 15 de
outubro de 2009. [20-]
QUADROS, Daniel. 2008, Microcontroladores – parte 5, disponível em:
<http://dqsoft.blogspot.com/2008/08/microcontroladores-parte-5.html>, acessado em 12 de
outubro de 2009.
RAMOS, Rodrigo. 2009, Microcontroladores e Microprocessadores – Temporizadores
(Timers), disponível em :
<http://www.univasf.edu.br/~rodrigo.ramos/MPU_MCU_files/PIC_Timers.pdf.> acessado
em 24 de novembro de 2009.
ROZA, Adriano Soli Rodrigues; BRUM, Carlos Eduardo Dutra & SILVA, Leonardo Santos.
Compilador Configurável para processadores embarcados. Disponível em: <
78
www.inf.pucrs.br/~moraes/my_pubs/papers/tc_retargetable.pdf> acessado em 12 de
novembro de 2009.
SA, Mauricio Cardoso de, Programação C para Microcontroladores 8051 / Mauricio
Cardoso de Sá. 1 ed. São Paulo: Érica, 2005.
SICA, Carlos. Sistemas Automáticos com Microcontroladores 8031/8051. 1.ed. São Paulo
- SP: Novatec, 2006
SCHIMIDT OLEQUES, Ernesto. SISTEMAS EMBARCADOS. Disponível em:
<http://www.scribd.com/doc/18503391/SISTEMAS-EMBARCADOS>, acessado em 25 de
agosto de 2009.
SOUZA, João Paulo, 2003. Programação em C e Assembly, disponível em:
<http://paginas.fe.up.pt/~jms/SUC/AulaLab3.pdf>, acessado em 24 de setembro de 2009.
TAURION, Cezar. 2005, Software Embarcado: oportunidade e potencial de mercado /
Cezar Taurion – Rio de Janeiro:Brasport 2005
TECNOLOGIA E TREINAMENTO: Instalação de motores elétricos, Viçosa – MG, n. 129.
Disponível em: <http://www.tecnologiaetreinamento.com.br/sessao.
php?go=materiastecnicas&mat=0129 > acessado em 26 de novembro de 2009.
TUGATRÓNICA, 2007, Introdução a porta paralela, disponível em:
<http://www.tugatronica.com/introducao-a-porta-paralela/>, acessado em 15 de outubro de
2009.
79
VIANNA, Alexandre & MACHADO, Liliane, 2009, CONTROLE E GERENCIAMENTO
DE AMBIENTES REAIS EDUCACIONAIS ATRAVÉS DE AMBIENTES VIRTUAIS,
disponível em: < www.de.ufpb.br/~labteve/publi/2009_icece1.pdf>, acessado em: 21 de
setembro de 2009.