You are on page 1of 346
FABIO PEREIRA | | PROGRAMAGCAO EM | Baseado nos compiladores CCS er et ards ee es oJ Piet Msr i itetce ee rte] comunicagao assincrona, SPI, 12C, ee eee ety al (eiteeheaele Dee cetemeniecata! (apade 12 esrqunos be “| | ft t i ‘| Fabio Pereira ® ra] tc co] a | Q iS F (2) 0 ie] i a 2 Ano: 2005 PROGRAMAGAO EM 2004 2003 Editor: 9 87654322 Editora Erica Ltda. ‘Conselho Editorial: Diretor Editorial: Diretor Comercial: Diretor de Publicidade: Capa Editoragéo: Revisao Interna: Rewvisio Gramatical: Desenhos: Revisdo ¢ Coordenagao: Microconi adores PIG Antonio Marco Vicari Clpelll Paulo Roberto Alves Waldir Jogo Sandrini Mauricio 5. de Franga Rosana Ap. Alves dos Santos Erica Regina A. Pagano Marlene Teresa Santin Aives Pedra Paulo V. Herruzo Flavia Eugénio de Lima Rosana Arruda da Silva + Programagia om ~ s de Catalogagaio na Publicagaio (CIP) lgira do Livro, SP, Brasil) : (Linguagem de pragramagiia para camputadores} 2, Micracontro!aceros cpp-005,133 Indices para Gatiloga Sistemitica: nguagem da pragramacao: AplicagSes com mictocontrolscors PIC: ‘Computadoras: Processamento de dados 005.133 Totios 03 direitos reservados. Froibida @ reprodugao totel ou parcial, por qusiquer meio ou proce Se, especialmente por sistemes griificos, microfilmicos, fotogréficos, reprograficos, fonogré‘lcas, wicaogtatices, intemet, ebooks, Vedsds 8 memorizngo o/ou recuperaggo total ou parcial em qualquer sistema de processaménto de dados o a inclusiio do qualquer carte da obra am qualquer Programs juscibeméves, Eases preibipdes aplicam-se também as caractortaticas grificas da obra: S.A pus eforople. A Matec cs aes aeralk 8 buried coune cteen Lar 44 o berbaafor do Coaigo Penal, cf. Lei n" 6.895, de 17. 12.60) som pana ce crnda o mus, corduaments com busca € apreensio © Indenizapses vivers jas {artigos 102, 109 pardgrafo Gnico, 104, 105, 106 ¢ 107 ena 1, 2 € 3 da Lei n* 9,610, de 19/06/98, Lei dos Dirsitos Autoreis). © Autor © 2 Editors ecrecitam que toces as informapies agul sprasentadas estBio covretas e sadam sar utilizades para qualquer tin legal. Entretento, ne existe quulquer garontia, explicit cu implieita, do quo © uso de tais infarmarBes eancuses sempre 86 resultado dese) names. da sites ¢ empresas, porventura mencionados, forem utiizades spenes para ilustrar os axempios, nc tendo vincula nanhum com o livro, she garantinds 8 sua existéncie nem divulga- 980, Evortuais ematas estardo disponivals no site da Exitora Eriea pare download. “Agumas imagens utilizadas naste livro foram obtidas a pamir do CorelDRAW 7, 8 e 9 e da Goippao da MastorClips/ MastarPhowosi oa IMS!, 1585 Frenciseo Biw. East, San Rafoo,, CA 949015506, USA.” Editora Erica Ltda. Rua Sio Gil, 159 - Tatu CEP: 03401.030 - S80 Pauilo - SP Fane: (11) 295-3066 - Fax: (11) 6197-4060 Site: www.editoraetica.com.br @ Micsaporteniadores PIC = Programagia om C -Requisitos de Hardware e de Hardware: Software: Microcomputador Pentium 200 MHz ou superior; 16 MB de meméria RAM; 50 Mbytes livres de HD; Acesso a Internet. Sistema operacional Windows 95 ou superior; Compilador CCS, PCWH, PCM, PCH ou PCW; Ambiente MPLAB; IC-PROG ou um software de programagao. Prefacio Existem diversas literaturas sobre a linguagem C disponiveis no mercado, mas quando procuramos um llvro que seja voltado para as aplicagies com microcontroladores, este universo reduz-se drasticamente, Foi para atender 2 esta lacuna que surgiu este livro, fruto de um extenso trabalho de pesquisa ¢ com uma abordagem simples e didética. Partinda dos principios gerals de programagao, até os detalhes mais pro- fundos € comolexos da linguagem C, sempre enfatizando os micracontrolado- res PIC, utilizando diversos exemplos ¢ exercicios. Sao também apresentadas as diretivas e fungdes internas dos compilado- res CCS, 05 mapas de meméria dos PICs utilizados no livre (1L2F675, 16F628, 16F876, 167877, 18F252 ¢ 18F452) ¢ os conjuntos de instrugdes assembly de 14 e 16 bits. Além disso, foi dedicado um capitulo do livro ao estudo de técnicas de programag’o, abrangendo otimizago de cédigo, interrupgaes, interfaceamento. (teclados © displays LCD), comunicagao serial (assincrona, SPI, FC, 1-Wire, além de uma visdo geral sobre CAN, LIN, etc.), geracdo de PWM, medi¢do de temperatura com o chip Dallas 18520, converséo analdgico/digital, dente outros. Trata-se de uma obra indispensdvel a todos aqueles que desejam tanto conhecer a linguagem C em maior profundidade, quanto a sua aplicagaio aos microcontroladores e pequenos sistemas em geral __ Micrncontreladores PIC - Programagfic ers C Sobre o Material Disponivel na Internet O material disponivel na Intemet contém os arquivos de exemplo e biblio- tecas apresentados no capttulo 12 e arquives de cabecalho com as definigdes de registradores utilizadas nos programas. Para utilizé-los, 6 necessario possuir instalados em sua maquina o compl lador PCWH (para utilizar os PICs das séries 12,16 e 18), 0 PCW (para utilizar 0s PICs das séries 12 e 16), ou ainda os compiladores PCM ou PCH, além do @mbiente MPLAB (para realizagiio de simulagées) e um software de programa. Gao (no caso do autor, o IC-PROG). Arquivos.EXE | 48 KB Procedimento para Download Acesse 0 site da Editora Erica Ltda.: wiw.editoraerica.com.br. A transfe- réncia do arquivo disponivel pode ser feita de duas formas: 1. Por meio do médulo pesquisa. Localize o livo desejado, digitanda palavreas-chaves (nome do livra qu do autor). Apareceréo os dados da livro € © arquivo para download, entdo dé um clique sobre o arquive executavel que serd transferido, 2. Por meio do botdo "Download". Na pagina principal da site, clique no item “Download”, Sera exibido um campo, no qual devem ser digita- das palavras-chaves (nome. do livro ou do auter), Serao exibides o nome do livro € 0 arquiva para download. D4 um clique sobre o arquivo executével que sera transfendo, Procedimento para Descompactacao Primeiro passo: apés ter transferide o-erquivo, verifique o diretério em que Se eneontra & dé um duplo-clique sobre © arquive. Sera sxibida uma tela do programa WINZIP SELF-EXTRACTOR que conduzira voo$ eo processo de des- compactago. Abalxa do Unzip To Folder, exist Um Campo que indica o desti- no do arquivo que sera coplado para o disco rigio Go seu computador. C:\Microcontroladores PIC Segundo passo: prossiga com a instalagao, elicando no botdo Unzip, o qual se encarrega de descompactar os arquives. Lego abaixo dessa tela, apa- rece a barra de status a qual monitora o process9 pera que vocé acompanhe. Apés o término, outra tela de informagdo surgiré, indicando que o arquivo foi descompactado com sucesso € esta no diretGrio criado. Para sair dessa tela, ‘clique no batéo OK. Para finalizar o programa WINZIP SELF-EXTRACTOR, clique fe botao Close. eo Microcenirolacorts PIG - Progranmaréo am C indice Analitico ‘Capitulo 2 - Introdugao. 1.4, Um Pouco de Historia. 1L2, Programago de PICs em 1.3. Mensagem aos Programa 1.4. Convengdes Deste Livro ... 15. Requisitos de Hardware e Sofware Capitulo 2 - Principios de Programagao: 2.1, Fluxogramas ... 2.2, Algebra Boolean: 2.3, Varigveis ¢ Dados . 2.4, Operadores: 2.5, Exercicios... Capitulo 3 + Compliador CCS C..... 3.1. Ambiente Integrada de Desenvolvimento (IDE). 3.2, Integragao com 0 MPLAB Capitulo 4 - Introdugia 4 Linguagem C.... 41, Polavras Reservadas da Linguagem. 4.2, Identificadores... 4.3, Comantios e Funpaes importantes 4.3.1. Comande It. 43,2. Gomando While. 4.3.4. Fungao Printf 4,3,4, Fungao GETC .. Capitulo § - Varlavels © Tipos de Dados... 5.1. Modificadores de Tipo §.2. Outres Tipas Especificas do Compilador CCS C... 5.3. Declaragae ce Varidwels .. 5.3.1. variavels Locais 5.4. Constantes. 5.4.1. COcigos tea 66 5.4.2. Constantes Binarias, Hexe: i 6? 5.5. Operadores ; 67 5.6, Expressées. 67 5.7. Conversao de Tipos.. 5.8, Modificadores de Acesso 5.9. Modificadores de Armazenamento.... 5.10, Alocagao de Memérla. 5.11. Redefinindo Tipes de 5.12. Exercicios... rcrocoriraladores PIC - Pregrarnagiio em C oO Capitulo 6 - Operadores 8.4. AtribuigSo. 6.2. Aritméticos. 6.3, Relacionais 6.5.2. Operadar | (OR), 6.5.3. Operador * (XOR}, 6.5.4. Operador ~ (NOT 6.5.5, Operaderes de Deslocamenta << E >> 6.6. Meméria ... 6.6.1. Operador &..., 6.6.2. Operador * 6.7, Outros Operacoras. 6.7.4, Operacior? ... 6.7.2. Operador Virgula 6.7.3. Operador Ponto .. 6.7.4, Operadar > Bia et ative 6.7.5. Operador de Medelagem do Tipo. oO 6.7.6, Operador Sizaof.. 6.8. Associagdo de Operadores... 6.9. Precedéncia dos Operadore: 6.10. Exercicias., Capitulo 7 - Declaragies de Controle. 7.4, Comande If... 7,2, Comande Switch, 7.2.1, Clausula Break 7,3, Estruturas de Repetigao. 7.3.4, Lago For... 7.3.2, Lago While 7.3.3, Lago De-While 7.4. Camando Goto .. 7.5, Exereicios.... Capitulo 8 - Tipos ¢ Dados Avangades .. 8.1. Ponteiros 8.1.1. Operagdes com Ponteiros.. 8.1.2. Topices Importantes Sobre ‘8.2. Matrizes de Dados. 8.2.1. Matrizes Multidimension: 8.2.2. Strings de Caracteres. 8.2.3, Matrires ¢ Ponteiros 8.3. Estruturas de Dados..... 8.3.1, Operagdes com Estruturas: e Microoonioladores PIC ~ Pregramagiioen 6 5.3.2. Ponteiros para Estruturas 8.5, Enumeracdes. 8.6, Streams .. 8.7, Exercicios... Capitulo 9 - Fungies 9.1. Forma Geral.., 9.2. Regras da Escapa 9.3, Passagem de Paramevos. 9.4. Matrizes com Argumentos de uma Fungo 9.5, Estruturas come Argumentos ce uma Fungi 9.6, Fungdes com Nimero de Pardmetros Variavel 9.7. Retomo de Valores ... 9.8. Retorno ce Valores am FungSes Assemb! 9.9. Protétipos de Fungae. 9,10. Recursividade .. 8.11. Exercicios.... ‘Capitulo 10 - Diretivas do Compllador ‘Capitulo 14 - Fungées do Compliador... 11.1. Matematicas ... 11.2. Maniputagdo de Carecteres , 11.3. Meméria. LL.4, Atraso, 11.5. Manipulaggo. 11.6, Entrada / Saida, 11.7. Analogicas, 11.8. Manipulagao de Timers .. 11.9. Comperagio / Captura / PWM. 11.10. Manipulagéo da EEPROM Intema 11.11. Controle co Pracessador . 11.22, Porta Paralela Escrava.. 11.13. Comunicagao Serial Assincrona.. 11.14, Comunicagio FC 11.15. Comunicagao SPI... Capitulo 12 - Tépicas Avangaddos... 42.1. Escrevendo Codigo Eficiente em C. (12.1.1. Utilizagdo de Varidveis Booleanas E kg Testes Condicionals .. nde Assembly no Cadigo C. _ Microcenivoladores FIC - Propramagio em C 12.2, Entrada ¢ Saida em C 12.2.1. Modo Padrao 12.2.2. Modo Fixe 42.2.3. Modo Rapido. 12.2.4. Outra Modalidade de Acesso .. 12.3. interrupgdes em C 12.3.4. Tratamento “Automstico” 12.3.2. Tratamente "Manual " 12.2.3. Priorizagao de Interrupges...... 12.4. Utlizando os Timers Internos,, 12.4.1, TimerO 12.4.2. Timer 1 12.4.3, Obtence Mals Pracisie das Timers 12.5. Comunicanco-se com o FIC... 12.5.1. Comunicagao Serial Assincrona .. 12.5.2. Protocolo SFI. a 5.3, Protocolo (°C .. . Protocolo LAVIRE: Ee 5.5. LIN. 12.5.6, Protecole CAN ... 12.5.7. Interfaces Elétricas.., 12.6. Leitura de Teclas e de Teciados, 12.7. Apresentagao. em Display... 12.7.1. Displays LED de Sete Segmentos .. 22.7.2. MEGUIG LEDs sesrissersesnsenensen 12.8, Leitura de Tensdes Analégicas. com o PIC 42.8.1. Conversor A/D Intemo... 12.8.2. Conversor A/D Delta - Sigma 12.9. Médulo PWM. Apéndice A+ Tabela ASCII. Apandice B - Fungdes C - Referéncia Rapida... Apéndice C - Instrugées Pi Apéndice D- Mapas de Memiria........... Apéndice E- Respostas dos Exerciclos.. indice Remissivo Reteréncias Bibliograficas.......... oe Microcantiolacioras PIC - Programagiio om © Introducao A criagao de programas para microcontroladores e microprocessadores pode ser uma tarefa desgastante & medida que aumenta @ complexidade da aplicagao sendo desenvolvida. Os primeiros dispositivos programavels tinham seus programas escritos com cédigos chamados codigos de m&quina, que consistiam normalmente em digitas binérios que eram Inseridas por meio de um dispositive de entrada de dados (teclado, leitora de cartées, fitas perfuradas ou discos magnéticos) para entéo serem executados pela maquina, Desnecessdrio dizer que a programagao em eddigo de maquina era ex- tremamente complexa, o que Implicava em um elevado custo, além de muito tempo para o desenvolvimento de uma aplicagao. Diante da necessidade crescente de programagao de sistemas, fol natural 9 surgimento de uma nova forma de programagao de sistemas. Esta fol a orl gem da linguagem Assembly, Assembly consiste em uma forma altemativa de representagdo dos cédi- gos de maquina usando mneménicos, ou seja, abreviagdes de termos usunis que descrevem a opera¢do efetuada pelo comanda em cddiga de maquina. A conversio dos mnemdnicos em cédigos bindrios executaveis pela maquina é& feita por um tipo de programa chamado Assembler (montedor), Assim, em vez de escrevermos © comanda em codigo de maquina 0011000010001100, o programador poderia simplesmente utilizar 0 coman- do MOVLW Ox8C para realizar a mesma tarefa. Sem divida nenhuma, a representegso em Assembly da Instrugdo é muito mais simples do que aquela utllizando cédigo de maquina, no entanto a utill- Zagao do Assembly nao resolveu todos os problemas dos programadores. A linguagem Assembly é ce balxo nivel, ou seja, nao possui nenhum co- mando, instrugao ou fungae além daqueles definides no conjunto de instru lnredunio o ¢ gdes do processador utilizado. Isto implica em um trabalho extra do programa- dor para desenvolver rotinas e operacao que no fazem parte do conjunto de instrugGes do processador, produzindo, por conseguinte, programas. muito extensos e complexos com um fluxo muitas vezes dificil de ser seguide. E ai que entram as chamadas linguagens de alto nivel. Elas so criadas para permitir 2 programacao utilizanda comandos de alto nivel e que sdo pes- teriormente traduzidos para a linguagem de babi nivel (assembly ou direta- mente para codigo de maquina) do processacor utilizado. 1.1. Um Pouco de Histéria Como j6 vimos, as linguagens de baixo nivel, surgidas. praticamente junto com 4 éra dos compuledores digitais. possuem diversos aspectos negativos, como 4 complésidade, falta de compatibilidede entre diferentes sistemas, pouca legipilidade. A necessidade de uma abordagem mals concisa e simplificada para co- Mandar computadores surgiu naturalmente com a evoluco e utllizagéa dos computadores cigitais. Essa abordagem simplificada, mais préxima da forma humana de pensamento, 6 chamada de linguagem de alto nivel, A primeira linguagem de alto nivel com real aceitagZio pela comunidade de programadores fol FORTRAN (abreviacdo de FORmula TRANslator, ou tradutor de formulas), uma linguagem voltada para a andlise e resolugo de problemas: mateméaticos criada na metade da década de 50, por pesquisadares da IBM. Em seguida vieram linguagens como COBOL (abreviagao de COmman Business Orlented Language, ou linguagem comum para aplicagdes comer: siais) em 1959, voltada para o desenvolvimento de aplicagdes comerclais, ALGOL (ALGOrithmic Language, ou linguagem algoritmica) em 1960, linguagem: de programacao genérica ¢ poderosa que originou diversas. outras linguagens de alto nivel como PASCAL e C. A linguagem C, por sua vez, fol criada em 1972, por Dennis Ritchie, da Bell Laboratories, e consiste, na realidade, em uma linguagem de nivel inter mediatio entre o Assembly ¢ as linguagens de alto nivel, E ume linguagem de programagao genérica desenvolvida para ser tao efi clente € rapida quanto a linguagem Assembly ¢ to estruturada e légica quanto as linguagens de alto nivel (PASCAL, JAVA, ete.). Suas origens sao atribuidas a wés linguagens de programagdo: * ALGOL; * BCPL {Basic Combined Programming Language: linguagem de progra- macéo basica combinadal - derivada da linguagem CPL (que, por sua oe Mleroccrtoladores PIC Progréenaglin em C vez, foi derivada da ALGOL), fol desenvolvida em 1969, e alla a estny tura da ALGOL a eficiéncia do Assembly, no entanto BCPL era uma lin- guagem demasiado complexa e relativamente limitada, razdo pela qual nado teve éxito; * B: linguagem desenvolvida por Ken Thompson da Gell Laboratories, em 1970, Baseada na linguagem CPL, 8 foi uma tentativa de simplifi- car @ facilitar a linguagem CPL, no entanto também a B nao obteve éxito devide as sérias limitagdes que impunha ao programader, Até o desenvolvimento do C, no existiam linguagens de programagdo de alto nivel adequadas tarefa de criag&o de sistemas operacionais (programas: especiais utilizados para o controle genérico de um computador) ¢ outros softwares de baixo nivel, restando aos desenvolvedores utilizar o Assembly para a execucdo destas tarefas. No entanto, 0 Assembly apresenta pros @ contras em sua utilizagao. Ve- jamos alguns celes: Pros: + Eficiéncia: devido A proximidade com o hardware da maquina, o Assembly é sem divida uma linguagem extremamente eficiente (des- de que o programadior saiba o que esta fazendo !); * Velocidade: devido 4 sua grande eficiéncia, os programas em Assembly sao também muito mais répidas que os criados em outras linguagens. ‘Contras: + Complexidade; o Assembly necessita que o programador. possua um profundo conhecimento do hardware utilizado. Além disso, somente estGo disponiveis os comandos do processador utilizado. Qualquer Operagao mals complexa deve ser traduzida em um conjunto de co- mandos Assembly; + Partabilidade: programas Assembly, que pela sua natureza nfo sdo portavels. Isto significa que para utilizar um programa Assembly de um sistema em outro diferente, o programador deve execular a tradugao completa do programa para o sisterna de destino. Foi principalmente a partir das necessidades de reescrita do sistema ape- racional UNIX (que até entéo era escrito em Assembly) que surgiu a linguagem c. De fato, a implementagao da linguagem 4 tao poderosa que C fol a esco- thida para o desenvolvimente de outros sistemas operacionals além do UNIX, como o WINDOWS @ o LINUX. Ieteodui- © Assim como outras linguagens de alto nivel, C utiliza a filosofia de pro- framacao estruturada, ou seja, os programas sao divididos em médulos ou estruturas (que em C sao chamadas de fungdes) independentes entre si @ com © objetivo de realizar determinada tarefa. Desta forma, a programagiio estruturada permite uma canstrugdo mais simples e clara do software de aplicagao, o que permite a criagdo de progra: mas de maior complexidade (quando comparada a outras linguagens nao es- tnituradas como Assembly ou BASIC). 1.2. Programacado de PICs em C A utilizagdo de C para a programagao de microcontroladores com os PICS parece uma escolha natural @ realmente 4, Atualmente, a malorla dos microcontroladores disponiveis no mercado con- tam com compiladores de linguagem € para o desenvolvimento de software, O uso de C permite 4 construgao de programas e aplicagdes muito mais complexas do que seria viavel utilizando apenas o Assembly. Além disso, o desenvolvimento em C permite uma grande velocidade na criagdo dé novos projetos, devido as facilidades de programacdo oferacidas pela linguagem € também & Sua portabilidade, o que permite adaptar progra- Mas de um sistema para outro com um minime esfarco. ‘Outro aspecto favordvel da utillzagde da linguegem © é a sua éficiéncia. Eficléncla no jargo dos compiladores & a medida do grau de inteligénela com qué o compilador traduz um programa em C para a cédigo de maquina. Quanto menor e mais rapido o cédigo gerado, maior sera a eficléncia da lin- guagem e do compilador, Conforme ja dissemos, C, devido a sua proximidade com o hardware e o Assembiy, € uma linguagem extremamente eficiente, De fato, C é consicerada como a linguagem de alto nivel mals eficiente atualmente disponivel. Repare que 0 aspecto eficiéncla & realmente multe importante quando tra- tamos de microcontroladores cujos recursos $40 1&6 limitados como nos PICs, afinal, quando dispomos Ge apenas 512 palavras de memoria de programa ¢ 25 bytes de RAM (como no PIC12C508 € 16C54), & imprescindivel que se economize memérial Além disso, a utilizagdo de uma linguagem de alto nivel como C permite que 9 programador preocupe-se mais com a programagae da aplicagdo em si, j4 que o compilador assume pare si tarefas como © controle & locallzagao das varlavels, operagdes matematicas e légleas, verificagZo de bancos de memé- fla, etc. } icrocontroladores PIC » Programuciio om 1.3. Mensagem aos Programadores Pascal Alguns dos leltores deste Ivo, assim como © autor, podem Ter expe- Fiéncia de programagao com outras linguagens como BASIC, Pascal, ete. Especificamente em relagao A linguagem Pascal, acreditamos que o aprendizado de C seré feito sem maioras problemas. De fato, Ce Pascal sdo linguagens muito parecidas, sendo as principais diferengas: * Bloco de comandos: em Pascal, um bloco de comandos é delimitado pelas palavras begin ¢ end, em C pelos caracteres { ¢ ]; * 0 operador de atribuigiio em Pascal é o:=, em C é apenas =; * © operador relacional de igualdade em Pascal é 0 =, em C 60 = * Em Pascal, temas as fungdes (function) e procedimentos (procedure), sendo que um procedimento pode ser interpretade como uma fungao Que nao retoma valores. Em C, temos apenas as fungdes, que niio re- cebem identificador especial e podem ou nao retornar resultados; * Pascal é uma linguagem mals conservadora e rigida com uma forte checagem de tipos € variéveis, o que restringe em multos casos a li- berdade do programador. C, ao contrario, 6 uma linguagem altamente liberal, ou seja, permite ao programador realizar praticamente qual- quer coisa, inclusive erros classicos de programagaio; * A quantidade de operadores disponiveis em Pascal é menor que os disponiveis em C: * Pascal é uma linguagem menos eficiente que C, porém & mais sim- ples e de leitura mals agradavel que C. Estas sao apenas algunas das diferengas existentes entre C e Pascal, Oe qualquer forma, o leltor podera, por si mesmo, verificar as semelhangas & diferengas existentes entre a linguagem C e as demais linguagens existentes n@ atualidade. 1.4, Convengoes Deste Livro Antes de Iniciar os estudos sobre o compilador C, & necessdrio esclarecer ac leltor as convengoes adotadas neste livro. Os termos em lingua inglesa serao sempre escritos em caracteres ita 0s. As referéncias a nomes de fungdes e palavras reservadas da linguagem C Serdo sempre grafadas em negrito. Introdgka Os operandos, termos ou parametros opcionais de uma declaracado esta- ro sempre grafados em itélico. 1.5. Requisitos de Hardware e Software Os programas demonstrados neste livro foram testados com a versdo 3.127 do compilador CCS e a verso 5.7 do ambiente integrado MPLAB. Os exemplos didaticos dos capitulos 2 a 9, em sua maioria, foram escri- tos para utilizar o hardware minimo preposto nas figuras 1.4 @ 1.2, io] TN Tour THN Te00T Figura 1.2 E possivel utilizar 0 oscilador intemo Gisponivel nos PICs 16F62x, mes devido ao fate de os mesmos nao Possuirem uma callbracio confidvel, apta- MOS por utilizar um cristal extemo, ja que as rotinas de comunicagSo serial 340 muito afetadas pela imprecisao do clock, °} Micreconiroladeres PIC Programartio ee C Alguns dos exemplos foram projetados para utilizar o clreuito da figura 1.3 Figure 1.3 Alguns dos exemplos do capitulo 12 podem ser implementados direta- mente na placa laboratério PIC Aplicagdes ll da Symphony. Os softwares. programadores foram a IC-PROG ¢ o EPICWIN, utillzados. respectivamente com os programadores JDM & PIC Aplicagdes Il. Principios de Programacao Antes de iniciar o estudo da linguagem C propriamente dita, faz-se neces- sdrio relembrar os conceltos basicos de programagao de sistemas. Neste ca- pitulo vamos realizar um breve estudo sobre temas como algebra beoleana, algoritmos ¢ outros principios Importantes na programagao de sistemas. Podemos cizer que programagio, consiste na tredug&o do pensamento légico necessdrio para o cumprimento de determinada tarefa, em uma se- qgléncia de comandos que podem ser Interpretados @ executados por uma méquina. Esta afirmagao denota, desde ja, a idéia de que um programa é fruto do ordenamento ldgico e traduzido do raclocinia humana. De fato, @ tarefa de programagao constitui-se basi¢amente num processo de identificagao e solugao de problemas. Para isso o programador utiliza-se de um conjunte de procedimentos genéricas: 4) Exposic¢éo do problema: o programacor deve descrever detslhada- mente o problema a ser resolvido pelo programa; 2°) Andlise da solugado: sendo conhecido o problema, o programador deve elaborar a ou as solugdes que melhor resolvem o problema em questao; Godlficagado da solugdo: uma vez que 0 programador 6 capaz de des- crever tanto o problema quanto a solugao para ele, 6 necessario en- t&o a codificagao, ou seja, a descrigad Sequencial passo a passo da solugo que melhor resolve o problema. A isto da-se 0 nome de algo- ritmo; Tradugao do cédigo: partinco da seqd&ncia de camandos obtides do procedimento anterior, resta ao programador traduzir essa seqiéncia em comandos que possam ser corretamente interpretados pela lin- guagem de programagao utillzada; Princigies do Progeamagdo- © 34 5*) Depuragio (em inglés DEBUG): infelizmente, por mais experiente que $¢ja 0 programador, um programa nunea esta livre de erras, por isso, apés implementagdo do programa, séja qual for a linguagem ullliza- da, sera necess4rio proceder a sua depuragaio. Depuragao entdo é o processo de verificagdo e teste do programa de forma a localizar & solucionar todas as eventuais falhas ¢ erros de codificagao que te- nham acontecide em quaisquer cas fases anteriores. Utilizam-se diversas técni para facilitar estas tarefas listadas. Na analise e codifleagdo da solu¢&o, por exemplo, ulilizamrse diagramas e fluxo- Bremas para & constru¢do grafica de algoritmos, o que permite uma melhor visualizagdo dos passos envolvidos nele. Dependendo da complexidade do programa, pode ser necessario ulllizar alguns artificios de programaggo: * Um conjunte de comandos utilizado repetidamente, om diferentes par- tes do programa, pode ser codificado separadamente, formando um médulo ou fungdo. Desta forma, em vez de repetir a seqiiénela de comandes a cada neécessidade, o programador pode simplesmente executar a fungao especificada; + Umi conjunto de comandos executado diversas yezes numa mesma sequéncia constitui, no jargao dos programadores, um laco de repetl- ao ou em inglés LOOP. Mais adiante veremos as formas de codiflea- gao de um loop; + Normalmente em um programa 6 nécessério verificar ou testar deter- minada condi¢do, seja comparer dois nimeros, verificar uma senha, etc. A codificagao dos testes condicionals, baseados na algebra boo- leana, também obedece a algumas regras qué veremos adiante. Durante a fase de codificagao do algoritmo, o programador pode utilizar-se: de ferramentas, ou programas de computedor especiais, denominados gerado- res de programa, que fealizam automaticamente a tarefa de conversdo de um algoritmo em codigos ou mesmo comancos de determinada linguagen. Encontramos também alguns programas especiais € qué $80 ulilizados na fase de tradugdo de cédiga. Estes programas So Classificados em duas cate- gorlas: Interpretadores ¢ compiladores, As linguagens interpretadas séio aquelas 6m que @ tradugao da linguagem & feita em tempo real, durante a cxecugao de programa. Isto significa que as linguagens interpretadas sao mais lentas, pois 6 pracessa de tradugdo tem de ser felto para cada instrugéo do programa. Como sxemplos de linguagens in- lerpréetadas, podemos citar algumas versGes da linguagem BASIC, inclusive o BASIC STAMP, disponivel para os PIs. eo Microcontratadares PIC - Programacdo em C Ja as linguagens compiladas sdo aquelas em que o processo de tradugae. {compila¢ao) ¢ feito previamente e © codigo gerado pelo compilador (cédigo d= maquina) pode ser carregado na meméria e executado diretamente por ele. Fica clara a vantagem das linguagens complladas sobre as interpretadas, j@ que nas interpretadas, o trabalho de tradugao do cédigo-fonte, além de ser feito em tempo real, deve ser feito pelo proprio processador que ira executar o cddigo gerado, 0 que em muitos casos {come ne PIC em questdo) resulta em uma enorme diferenga, Outro tema interessante sobre as linguagens interpretadas 6 0 aspecto da otimizagao de cédigo: nas linguagens interpretadas, cada comando de alte nivel @ traduzide em uma respectiva seqiéncia de comandos de baixo nivel pelo programa interpretador. Se um mesmo comando for utilizado diversas. vezes mo programa, serao geradas tantas seqiéneias de comandos de baixe nivel Quantas forem as aparigdes do comanda de alto nivel. Por outro lado, em um compilador, isto j4 ndo acontece da mesma forma. De maneira geral, os compiladores so programas altamente complexos e utilizam diversas artificios para a otimizagéo do cédigo gerado, tanto em fun: g40 do espace ocupado, como também na velocidade de execugao. Por isso mesmo, © processo de compllagao é complex demais para ser embutide em um chie to pequeno coma os PICs, por exemplo, razGo pela qual devernos utilizar plataformas computacionais mais potentes para a execugSo de tais Softwares (denominacdo em inglés para programas de computador). Finalmente, na fase de depuragéo, encontramos também diversos. Programas & hardware (equipamentos) para auxlliar 0 programador na busca de erros ¢ falhas no programa. Alguns esses programas € equipamentos es- peciais so utilizados para simular a execugdo do programa, permitindo ao Programador a checagem a qualquer tempo do estado do programa, verifica- gio de varidvels, etc 2.1, Fluxogramas Como ja fai dito, os fluxogramas so ferramentas que auxiliam grande mente a tarefa de codificacao de um programa, Na realidade, fluxogramas so elementos graficos utilizados para estabe- lecer a sequéncia ce operagies necessérias para o cumprimente de determi- nada tarefa e, conseqientemente, a resolugéo de um problema. A seguir, veremos alguns exemplos de elementos utilizades na construgao de fluxogramas, bem como alguns exemplos deles. Prineinios a Progremasko So Inicio ou terminagada: este tipo de simbolo é utilizado para representar o Inicio ou térming do programa ou algoritmo, Processo: este simbolo é utilizado para cescrever a realize ‘ga de uma determinada tarofa. Dados: normalmente este simbolo utilizado para cescrever um processa de entrada de dados. Tomada de decisio: este simbalo € utilizade para represen- tar um ponto de tomada de decisio, ou teste condicional. A tomada de decisSo pode conduzir sempre a um resultado: verdadeiro ou falso, Em um dos casos o fluxo do programa & desviado @ no outro, normaimente, o programa seguira na sua seqléncia nonmal, | Vejamas um exempio de um fluxograma para a solugaio de um problema simples: somar dois nimeros (A e 8) e armazenar o resultado em C. O fluxograma da figura 2.1 representa os passos necessarios para solu. cionar 0 problema descrita, Figura 2.1. Um outro exemplo: um programa para contar de ‘Oaté 10. } erbeonirelaceves PIG - Prograsacdo em 0 2.2, Algebra Booleana Agora que | vimos alguns detalhes sobre o funcionamento © aplicagéo ~ dos fluxogramas no planejamento da solugdo de um problema, 6 necessario verlficarmos alguns conceltos importantes sobre a resolugéo de problemas légicos: a Algebra booleana, um ramo da matemética encarregado da resolu: gio de problemas légicos. Este nome & devido ao fato de ter sido o inglés George Boole (1815-1864) um cos seus principais articuladores. A algebra booleana é baseada em regras e concsites légicos simples: proposigaes € operadores ldgicos relacionais, Uma proposigae nada mals é do que qualquer afirmagao verbal passivel de ser classificada como sendo verdadeira ou falsa. Assim, a afirmagao "Hoje & domingo” pode ser considerada uma proposigao, j& que pode ser classifice- da como verdadelra ou falsa. Ja a frase "Que dia é hoje?" nao é ume proposi- $0, pois nao pode ser classificada como verdadeira ou false. Duas ou mais proposigdes podem ser relacionadas com o uso dos opera- dores légicos relacionais E, OU e NAO, © operador relacional E ¢ utilizado para conectar duas ou mals proposi- gdes, resultando na chamada CONJUNCAO. A conjungéo de duas ou mais pro Rosi¢ées somente sera verdadeira se TODAS as Proposigies forem verdadel- ras. Em segulda temos a tabelaverdade, que demonstra o relacionamento en- tre as proposigies "A" 6 "B", o que resulta na conjun¢de C, Imagine entao que lenhamos @ seguinte afirmagao: “Se for no. domingo E o tempo estiver bom, iremos @ praia." Se considerarnos a afimmagao “Se for no domingo" como sendo a propo- si¢éo "A" @ a afirmago “o tempo estiver bom" como sendo a Proposicao "B", @ conjungado C que iré determinar a ida ou nao a praia pode ser verificada da seguinte forma: a B c (E domingo?) | (0 tempo esta bom?) | (Vamos a praia?) Ja 0 operador OU & também utllizado para relacionar duas ou mais propo- sigdes, resultando em uma nova proposigdo chamada DISJU NCAO. A disjungaio de dues ou mais proposicdes ser verdadeira se QUALQUER das proposicies for verdadeira. No exemplo seguinte, temos a utilizagao da DISJUNCAO. Imagine um sis- tema de alarme composto de dois sensores (Ae B). A saida do alarme (c) Sera verdadeira (alarme disparado) se qualquer dos sensores estiver ativedo {verdadeira). Velames a tabela-verdade pata a disjungdo: Podemos verificar que a proposigao € (6 alarme esta disparado) sera ver- dadeira se um dos sensores (A ou B| for vardadeiro, eo. Microcortoledares PIG - Programssio.om C Finalmente, temos 0 operador légico NAO utillzado para negar uma « minada proposigao, fazendo com qué & proposi¢go possua sentido a a0 original. Assim, considerando a proposicao original: "Hoje @ domingo”, se verdadelra, conciuiriamos que & domingo e se falsa, que no &. Negando a proposigao, temos: “Hoje NAO é domingo". Observe que agora, se a nova pro- posic¢ao for verdadeira, concluiremos que nao é domingo ¢ se falsa, que & domingo, ao cantrario portanto, da proposigao original, Em seguida temos a tabela-verdade para a fungao NAO: ate] F Vv v = Tabela 2.3 Observe ainda que a negagdo de B também pode ser expressa como nao Apés esta breve explanagao sobre alguns dos principios gerais de pro- gramagaéo, vejamos um pouco mais sobre as linguagens de programagao. 2.3. Variaveis e Dados Variavel @ uma representacdo simb6lice pare elementos pertencentes a um determinado conjunto. As variaveis sdo armazenadas na memoria da ma quina e padem assumir qualquer valor dentre o conjunto de valores possiveis. Sempre que necessitarmos armazenar algum tipo dé dado, seja ele pro- venlente do mundo exterior (uma tecla pressionada, uma tensdo lida externa mente, etc.) como do préprio programa (0 resultado de uma equacdo, por exemplo) sera utilizada uma variavel. De fato, as varidvels ficam localizadas na meméria do equipamento, nfo ‘em qualquer tipo de memoria, mas nas chamadas memérias RAM. Isto signifi- a que num computador, boa parte da sua meméria RAM é ocupada por varid- veis, definidas pelos programas em execu¢do no computador. Um outro aspecto importante sobre as varidveis 6 que durante a execugdo de Um programa, uma vari@vel pode assumir diversos valores diferentes, mas nunca dois ou mais valores simultaneamente. As variaveis. sGo classificadas segundo 9 tipo de conteido que armaze- nam @ padem ser: numéricas, caractere, alfanuméricas e légicas. AS werlaveis numéricas $40 evidentemente utilizadas para o armazena- mento dé dedes numéricos e podem ser classificas em: Principios de Pragramago 8 asi ile * Inteiras: quando utilizadas para armazenar valores inteiros. Exempla: 0, 5, 156, etc. + Reals ou ponto flutuante: quando utilizadas para armazenar valores nao intelros, ou seja, ndmeros reais. Normalmente, este tipo de varié- vel utiliza uma notago bindria especial para o seu armazenamenta e utilizam mais posigdes de memdéria que as varldveis inteiras. A quantidade de meméria utilizada para armazenar uma varidvel depende do Seu tipo: variavels inteiras sdo normalmente encontradas com tamenhos de 8, 16 ou 32 bits. Uma varidvel intelra de 8 bits pode anmazenar um valor entre Q@ 255, uma variavel de 16 bits pode armazenar um valor entre 0 e 65535 e uma variével de 32 bits pode armazenar um valor entre 0 e 4.294,967.295. ‘Observe que os némeros representados acima sio somente positives, no caso de representacao de ndmeros com sinal, a magnitude de representagdo reduz-se & metade daquela sem sinal. Ja as variaveis do tipo real ou de ponte flutuante sao normalmente encan- tradas em tamanhos de 16, 32, 64 ou 80 bits! A titulo de exemplificagao, uma variavel de ponto flutuante de 80 bits pode representar valores entre 3,42 @ 1,182] Vale lembrar ainda que num sistema de 8 bits, uma variavel de 16 bits vai ocupar duas posigdes de meméria e, conseqientemente, uma variével de 32 bits ocupara quatro posigées de memGria. 4a as varlaveis do tipo caractere sao utilizadas para representar um carac- tere, utilizando normalmente para isso um cédigo especial (normalmente o cddigo ASCI|). As variavels do tipo caractere podem Ser agrupadas em conjuntos de va- riavels para formar frases. ou textos. As variavels do tipo alfanumérica sao utilizadas para armazenar tanto ce- racteres como valores numéricos, mas nunea 6s dols simullaneaments. Sendo assim, uma veriavel alfanumérica pode num dado momento canter un velor numérico © em outro ponte do programa, Ser willizeda para armazenar um ca- ractere. Finalmente, temos as variéveis do tipo Kigheo, capazes de amnazenar um estado ldgico: verdadeiro ou falso. 2.4, Operadores Muitas vezes necessitamos relacionar 6U modificar um ou mais elemen- tos como variaveis ou dados em um programa. ©} Mlcrocontaoladones PIC » Programagaaem ©

You might also like