programa--o microcontroladores 8051 utilizando linguagem c

80
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

Upload: vjstarck

Post on 28-Oct-2015

231 views

Category:

Documents


36 download

TRANSCRIPT

Page 1: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 2: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 3: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 4: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 5: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 6: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 7: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 8: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 9: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 10: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 11: Programa--o Microcontroladores 8051 Utilizando Linguagem c

10

CAPÍTULO 1

CONSIDERAÇÕES INICIAIS

Page 12: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 13: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 14: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 15: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 16: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 17: Programa--o Microcontroladores 8051 Utilizando Linguagem c

16

CAPÍTULO 2

SISTEMAS EMBARCADOS

Page 18: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 19: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 20: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 21: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 22: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 23: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 24: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 25: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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)

Page 26: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 27: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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,

Page 28: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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:

Page 29: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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)

Page 30: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 31: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 32: Programa--o Microcontroladores 8051 Utilizando Linguagem c

31

CAPÍTULO 3

MICROCONTROLADORES

Page 33: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 34: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 35: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 36: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 37: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 38: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 39: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 40: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 41: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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;

Page 42: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 43: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 44: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 45: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 46: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 47: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 48: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 49: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 50: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 51: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 52: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 53: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 54: Programa--o Microcontroladores 8051 Utilizando Linguagem c

53

CAPÍTULO 4

FERRAMENTAS DE PROGRAMAÇÃO

Page 55: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 56: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 57: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 58: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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,

Page 59: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 60: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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;

Page 61: Programa--o Microcontroladores 8051 Utilizando 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.

Page 62: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 63: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 64: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 65: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 66: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 67: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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

Page 68: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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)

Page 69: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 70: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 71: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 72: Programa--o Microcontroladores 8051 Utilizando Linguagem c

71

CAPÍTULO 5

CONSIDERAÇÕES FINAIS

Page 73: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 74: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 75: Programa--o Microcontroladores 8051 Utilizando Linguagem c

74

REFERÊNCIAS

Page 76: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 77: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 78: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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: <

Page 79: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.

Page 80: Programa--o Microcontroladores 8051 Utilizando Linguagem c

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.