Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Programação C para Microcontroladores 8051, Notas de estudo de Eletrônica

Programação C para 8051

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 22/05/2010

fabricio-bizetto-7
fabricio-bizetto-7 🇧🇷

4.7

(11)

8 documentos

1 / 335

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Programação C para Microcontroladores 8051 e outras Notas de estudo em PDF para Eletrônica, somente na Docsity!

Tarur 12MHz ol IGTPWR DSPIPAR Programação para Microcontroladores 8091 Compitador utilizado: Keil puVisionZ IDE pas Arquitetura interna do 8051 m Variáveis e tipos de dados m Estruturas de controle Funções m Diretivas de compilação m Exemplos práticos BRINDE HM Códiigos-fonte os exemplos do livro disponíveis na Internet. 4 énica A Seja Nosso Parceiro no Combate à Cópia Ilegal A cópia ilegal é crime. Ao efetuá-la, o Infrator estará cometendo um grave erro, que é inibir a produção de obras literárias, prejudicando profissionais que serão atingidos pelo crime praticado Junte-se a nós nesta corrente contra a pirataria. Diga não à cópia ilegal. Seu Cadastro É Muito Importante para Nós Ao preencher & remeter a ficha de cadastro constante no final desta publicação, você passará a receber informações sobre nossos lançamentos em sua área de preferência. Conhecendo melhor nossos leitores e suas preferências, vamos produzir títulos que aten- dam suas necessidades. Obrigado pela sua escolha. Fale Conosco! Eventuais problemas referentes ao conteúdo deste livro serão encaminhados ao(s) respectivo(s) autor(es) para esclarecimento, excetuando-se as dúvidas que dizem respeito a pacotes de softwares, as quais sugerimos que sejam encaminhadas aos distribuidores e revendedores desses produtos, que estão habilitados a prestar todos os esclarecimentos. Os problemas só podem ser enviados por: 1. E-mait producao Berica.com.br 2 Fax:(11) 6197.4060 3. Carta: Rua São Gil, 159 - Tatuapé - CEP 03401-030 - São Paulo - SP q INVISTA EM VOCÊ. | Programação G para Microcontroladores 8051 | Copyright O 2005 da Editora Érica Ltda. Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Sá, Maurício Cardoso de Programação € para microcontroladores 8051 /Maurício Cardoso de Sá. 1.ed, -- São Paulo: Érica, 2005. Bibliografia. ISBN 85-365-0077-8 1. C (Linguagem de programação para computadores) 2. Intel 8051 (Microprocessadores) 3. Microcontroladores 1. Título 05-4514 CDD-005.362 Índices para catálogo sistemático 1. Micracontroladores 8051: Programação: Linguagem C: Microcantroladores digitais: Ciências da computação 005.362 2. Linguagem C: Microcontroladores 8051: Programação: Microcontroladores digitais: Ciências da computação 005.362 Todos os direltos reservados. Proibida a reprodução total ou parcial, por qualquer meio ou processo, especialmente por sistemas gráficos, microfilmicos, fotográficos, reprográfi- cos, fonográfico, videagráficos, intemet, e-books. Vedada a memorização e/ou recupera- ção total ou parcial em qualquer sistema de processamento de dados e a inclusão de qualquer parte da obra em qualquer programa juscibernético. Essas proibições aplicam-se também às características gráficas da obra e à sua editoração. A violação dos direitos autorais é punível como crime (art. 184 e parágrafos, do Código Penal, conforme Lei nº 10.695, de 07.01.2003) com pena de reclusão, de dois a quatro anos, e multa, conjunta- mente com busca e apreensão é indenizações diversas (artigos 102, 103 parágrafo único, 104, 105, 106 e 107 itens 1, 2 e 3 da Lei nº 9.610, de 19/06/98, Lei dos Direitos Autorais). O Autor e a Editora acreditam que todas as informações aqui apresentadas estão corretas e podem ser utilizadas para qualquer fim legal. Entretanto, não existe qualquer garantia, explícita ou implícita, de que o uso de tais informações conduzirá sempre ao resultado desejado. Os nomes de sites é empresas, porventura mencionados, foram utilizados apenas para ilustrar os exemplos, não tendo vínculo nenhum com o livro, não garantindo a sua existência nem divulgação. Eventuais erratas estarão disponíveis no site da Editora Érica para download. Editora Érica Ltda. Rua São Gil, 159 - Tatuapé CEP: 03401-030 - São Paulo - SP Fone: (11) 2925-2066 - Fax: (11) 6197-4080 www editoraerica.com.br | Programação C para Microcontroladores 8051 | 3051 | Fabricantes Produto: Empresa: Produto: Empresa: Compilador Keil uVision2 IDE Keil Elektronik GmbH Bretonischer Ring 15 D-85630 Grasbrunn - Germany Fone: (++49) 89 456040-13 Fax: (++49) 89 468162 Site: www.keil.com Kit de desenvolvimento versão 8051LS MicroGenios - Soluções Eletrônicas Avenida Ataliba Leonel, 797 - Santana 02033-000 - São Paulo - SP Fone: (11) 6283-0059 Site: www.microgenios.com.br a Dedicatória Aos meus pais, grandes mestres; Aos meus filhos, Felipe e Camila, razões do meu viver. "Considero-me um privilegiado por viver neste tempo.” o autor “O que uma pessoa puder imaginar, outras pessoas serão capazes de fazê-lo.” Júlio Verne Agradecimentos A Texas Instruments e a Analog Devices pelas amostras cedidas; Ao engenheiro Jean Pereira Fernandes, grande mestre e grande companheiro das madrugadas, que me ofereceu muito mais do que eu pude retribuir; Ao engenheiro Fábio Pereira pelo apoio à idéia de criar este livro; A Keil Software pelo direito de uso dos materiais de seu compilador; A MicroGenios pelo envio do kit de desenvolvimento usado no livro; A Editora Érica, em nome de Rosana Arruda, que acreditou e confiou no meu trabalho, “O meu ensino não é meu, e sim daquele que me enviou.". Jesus Cristo João 7:16 8 | Programação G para Microcontroladores 8051 | Sobre os Arquivos Disponíveis na Internet O material disponível no site da Editora Érica contém o arquivo com os códigos- -fonte dos exemplos do livro. Para utilizar os arquivos, é necessário que você possua o compilador Keil HVisionZ IDE instalado em seu computador. O link para download se encontra no final do livro. Exercicios.EXE - 82,3 KB Procedimento para Download Acesse o site da Editora Érica: www.editorasrica.com.br. A transferência do arquivo disponível pode ser feita de duas formas: « Por meio do módulo pesquisa. Localize o livro desejado, digitando palavras-chave (nome do livro ou do autor). Aparecerão os dados do livro e o arquivo para download. Dê um clique sobre o arquivo executável que será transferido. = Por meio do botão "Download", Na página principal do site, clique no item "Download", Será exibido um campo, no qual devem ser digitadas palavras-chave (nome do livro ou do autor). Serão exibidos o nome do livro e o arquivo para download. Dê um clique sobre o arquivo executável que será transferido. Procedimento para Descompactação Primeiro passo: após ter transferido o arquivo para sua máquina, verifique o diretório em que se encontra e dê um duplo-clique sobre o arquivo. Será exibida uma tela do programa WinZip Self-Extractor que o conduzirá ao processo de descompactação. Abaixo da opção Unzip to Folder, existe um campo que indica o destino do arquivo que será copiado para o disco rígido do seu computador. CAProgramação C - 8051 Segundo passo: prossiga a instalação, clicando no botão Unzip, o qual se encarrega de descompactar o arquivo. Logo abaixo dessa tela, aparece a barra de status, a qual monitora o processo para que você acompanhe. Após o término da descompressão, outra tela de informação surgirá, indicando que o arquivo foi descompactado com sucesso e está no diretório indicado. Para sair dessa tela, clique no botão OK, e para finalizar o programa WinZip Self- “Extractor, clique no botão Close. 10 | Programação C para Microcontroladores 8051 | bes Prefácio Após vários estudos, pesquisas e desenvolvimento de projetos na área, desen- volvi esse livro com intuito de auxiliar os estudantes que também pretendem embarcar nesse fabuloso mundo da programação e de desenvolvimento de projetos, onde o conhecimento e a pesquisa são fundamentais. Espero que, ao finalizar seus estudos, o leitor possa imaginar, criar e executar seus próprios projetos. A linguagem é abordada com detalhes e exemplos práticos, sempre orientada a programação do 8051. O livro obedece a uma curva de aprendizado continua, para que no final você tenha prazer em utilizar esses pequenos frutos da inteligência humana, chamados de microcon- troladores 8051. Então, mãos à obra! O autor m Capítulo 4 - O Microcontrolador 8051 e Seus Derivados 4.1. Os Derivados do microcontrolador 8051 4.2. Arquitetura interna do Cl Atmel AT89552 4,3. Descrição da pinagem 4.4. Registradores de funções especiais (SFR) ea memória interna. 4.4.1. Descrição dos registradores 4.5. Interrupções 4.5.1. Tipos de disparo. 4.6. O Funcionamento dos temporizadores/contadores. 4.6.1. TIMERO 4.6.2. Modos de operação de TIMERO e TIMER! ... 4.6.3. Interrupções causadas por TIMERO e TIMER. 4.6.4, TIMER? 4.7. O funcionamento da porta seria a 4.7.1. Registrador de controle da porta serial - SCON....................... 4.7.2. Comunicações entre vários processadores - Multiprocessamento 4.7.3. Baud-rates..... 4.7.4. Utilizando TIMER! para gerar baud-rates... 4.7.5. Utilizando TIMER2 para gerar baud-rates... PN 4.7.6. Detecção de erro de quadro (Framing Error Detection) ........... 87 Capítulo 5 - Variáveis e Tipos de Dados. 5.1. Extensões da linguagem. 5.2. Áreas de memória. 5.2.1. Memória de dados interna 5.2.2. Memória de dados externa. 5.2.3. Memória distante (far memory). 5.2.4. Memória dos registradores especiais de função (SFRs) 5.2.5. Modelos de memória 5.2.6. Tipos de memória 5.3. Alocação de variáveis em endereços de memória absolutos . 5.4, Variáveis .... 5.4.1. Identificadores - Declarando va 5.4.2. Strings 5.4.3, Caracteres em C. 5.5. Constantes 5.5.1. Exemplos de constante: E" 5.6. Operadores... ererarracarecanereereaercenarereareeretasescerareneceiea 5.6.1. Operadores aritméticos e de atribuição. 5.6.2. Operadores relacionais e lógicos ... Capítulo 6 - Estruturas de Controle 6.1. A estrutura if (se) 6.2. A estrutura if, else... 6.3. A estrutura if, else, i 6.4. O operador interrogação (?) 6.5. A estrutura while 6.5.1. O comando while e o 8051. 6.6. A estrutura do, while 6.7. O comando for (para) 6.7.1. Loops infinitos .. 6.8. O comando break (quebrar) 6.9. O comando continue (continuar) 6.10. O comando switch 6.11. O comando goto... 137 Capítulo 7 - Funções............... ss errreaserecrerentacereaserarenaenrenierariaça 71. O comando return... 7.2. Protótipos de funções 7.3. O tipo VOID 7.4. Arquivos cabeçalho 7.5. Regras de escopo de variáveis. 7.5.1. Variáveis locais 7.5.2. Parâmetros formais 7.5.3. Variáveis globais .... 7.5.4. Passagem de parâmetros 7.6. Recursividade . 7.7. Funções de interrupção ............... tri iesesrerameeeeeesiriaaeeeeerneceeacaarar Capítulo 8 - Ponteiros... 8.1. Ponteiros & vetores e 8.2. Vetores de ponteiros... isrreaancasescrraneaania 167 Capítulo 9 - Diretivas de Compilação ................ rr 168 9.1. O pré-processador..........sciermatecerarasesarentereceerasemarrecaeererartataa 168 14 [ Programação C para Microcontroladores 8051 | Apêndice A - Tabela ASCII - Standard Apêndice B - O Conjunto de Instruções do 8051... Apêndice C - Funções - Guia de Consulta Rápida................stses 305 Apêndice D - Mapas de Memória, Vetores de Interrupção e SFRs............. 311 Índice Remissivo... entar anistia 324 Referências Bibliográficas ................. sr ceeeeneeeecereerereeneriers 329 16 | Programação C para Microcontroladores 8051 | Introdução 1.1. Alinguagem C Os pais da linguagem C são Brian Kernighan e Dennis M. Ritchie, da Bell Telephone Laboratories (hoje, AT&T) americana, que criaram a linguagem nos idos de 1970 a partir da linguagem B de Ken Thompson. C é uma linguagem de programação profissional e é aceita para a 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 comandos é bastante redu- zido, mas, apesar disso, a linguagem é extremamente ilexivel e poderosa. Essa flexibilidade também tem o inconveniente de permitir que se criem pro- gramas desorganizados e de difícil compreensão. Em outras linguagens de programação, erros no código são sinalizados no tempo de compilação, ins- truindo o programador e fazendo com que ele corrija esses erros de forma mais rápida. C não funciona assim! A filosofia de C é que o programador "sabe" exatamente o que quer e a maneira correta de instruir a linguagem e a máquina, para alcançar esses objetivos. A linguagem permite até a escrita de código com erros clássicos de programação! À linguagem € não faz verificação de tipos, erros no índice de matrizes nem verificação de erros com a utilização de ponteiros, necessitando de um cuidado especial quanto a esses itens. Sua sintaxe é sucinta e não restringe as maneiras como um resultado pode ser alcançado, permitindo ao programador fazer praticamente o que quiser para obter esses mesmos resultados, com geração mínima de código e uso de memória, o que a torna uma linguagem muito rápida, mas também muito frágil. À forma de codificação de programas mescla a estrutura de linguagens de alto nível com o estilo de comandos de baixo nível muito similares ao Assembly. Entre todas as linguagens, C apresenta a curva de aprendizado mais elevada, possibilita a criação de aplicações de forma extremamente rápida, possui progra- mação de forma estruturada, um código enxuto, possibilidade de modularização e de escrever código quase de forma coloquial, muita velocidade no produto final e uma grande economia de memória. fintrodução | 17 1.1.2. A família de microcontroladores 8051 Os exemplos descritos no livro são baseados no microcontrolador Atmel 89852. Esse chip possui internamente memória não-volátil do tipo Flash, na qual os programas serão gravados e posteriormente executados pela CPU do chip. Esse tipo de memória pode ser apagado e regravado por tensão elétrica. Para gravar esses chips, o autor utiliza os gravadores e os softwares PGM89v3.0 e também ISP Flash Microcontroller Programmer Ver 3.0a, ambos, do mesmo autor. Esses gravadores funcionam pela porta paralela do PC e rodando sob o Windows 98 não necessitam de nenhum outro driver para executar de forma eficiente. Na Internet existem diversos outros modelos de gravadores, cada um com suas características próprias. Dependendo do seu chip em particular, escolha o modelo de gravador que melhor atenda às suas necessidades. Na parte final do livro, dedicada aos links Internet, você encontra endereços de páginas que fornecem esquemas elétricos e softwares gratuitos para a contecção de gravadores para a linha 8051. 111.3. A linguagem C x Assembly Muitos programadores que programam em linguagem Assembly preferem essa linguagem de programação a outras, devido a alguns fatores, entre eles: a vantagem de maior controle sobre o hardware; a economia de código e, obviamente, de memória de programa; o tempo de execução de um programa escrito em Assembly é muito menor que os compilados por linguagens de alto nivel; além de outros. Estas são vantagens inquestionáveis em relação à linguagem Assembly. A desvantagem dessa linguagem de baixo nível é a impossibilidade de porta- bilidade dos programas para outras máquinas diferentes, o que significa que programas criados para determinada máquina, em Assembly, só serão execu- tados nessa máquina. Programas funcionais, envolvendo diversas tecnologias, em Assembly, costumam ser muito grandes. Quanto maior o programa, maior é a possibilidade de introduzir bugs. Interpretar programas em Assembiy pode se tornar uma tarefa entadonha, devido aos programas não carecerem de uma estruturação rígida. Pequenos resultados são obtidos com muitas instruções Assembly. São mais de 60 instruções que precisam ser conhecidas por seus mnemônicos, como MOV AH30H; não raro, muitas vezes necessitando-se ter em mãos tabelas com o conjunto de instruções e sua formatação. Um programa que é codificado por meio de uma linguagem de alto nível também oferece as suas vantagens. A principal vantagem é que normalmente podem ser portados para máquinas de plataformas diferentes, necessitando de poucos ajustes para adaptá-las. A portabilidade é bem maior que uma linguagem de baixo nível. fintrodução | 19 Poucos comandos devem ser memorizarizados e apenas alguns são neces- sários para obter um resultado. Menor quantidade de linhas de código, a forma quase coloquial de programar, modularização, uso de bibliotecas de comandos criadas pelo programador, utilização de rotinas de comandos independentes (funções), manipulação de números e cálculos matemáticos complexos e a possibilidade de portar um programa para máquinas diversas tornam as linguagens de alto nível uma escolha natural. Evidentemente que toda essa funcionalidade também cobra o seu preço. O código Assembler, compilado por essas linguagens, é bem maior do que se fosse programado puramente em Assembly, devido, obviamente, à maneira como os compiladores foram programados para traduzir esses programas, o que nunca será igual à forma como programadores Assembly trabalham. Os compiladores têm outra torma de interpretar os comandos das linguagens de alto nível. Gerando mais instruções, o tempo do programa também é aumentado propor- cionalmente. E, apesar de algumas linguagens de programação de alto nível (como o €, por exemplo), que permitem uma manipulação de hardware muito grande, chegando bem próximo do Assembly, estamos programando em alto nível, então, o código gerado por uma instrução de alto nível será maior que o equivalente em Assembly, em muitos casos. Veja o programa seguinte criado em €, cuja função é decrementar uma variável que inicialmente possui o valor 100 decimal até chegar a zero. Ao atingir zero, o programa paralisa sua execução. Em C poderíamos fazer: main() [4 char contador; for(contador = 100; contador > 0; contador--); wnile(1); Esse programa compilado gera o seguinte código Assembler: Lgmp INICIALIZA INICIAR: Mov 0x08, tOx64 LOOPO: mov A, 0x08 SETE c SUBB A, 40x00 Je FINAL DEC 0x08 SJMP LOOPO FINAL; SMP $ RET 20 | Programação C para Microcontroladores 8051 |