Programando_Microcontroladores_PIC - Renato a. Silva - Blog - Conhecimentovaleouro.blogspot.com by...

178
Programando Microcontroladores PIC Linguagem “C”

Transcript of Programando_Microcontroladores_PIC - Renato a. Silva - Blog - Conhecimentovaleouro.blogspot.com by...

  • Programando Microcontroladores PIC

    Programando Microcontroladores PIC

    Linguagem C

  • Renato A. Silva

  • Programando Microcontroladores PIC

    Renato A. Silva

    Programando Microcontroladores PIC

    Linguagem C

  • Renato A. Silva

    Copyright 2006 by Jubela Livros LtdaCopyright 2006 by Renato A. Silva

    Produo: Ensino Profissional EditoraEditor Responssvel: Fbio Luiz DiasOrganizao: Julianna Alves DiasDesign da Capa: Renato A. SilvaDiagramao : Renato A. SilvaCorreo ortogrfica: Ligia Vaner da Silva

    Direitos reservados por:Jubela Livros Ltda.Rua Maestro Bortolucci, 9Vila Albertina - So Paulo - SPCep: 057-00Telefone: () 60 - 68Fax: () 66 - 9

    E-mail da Editora: [email protected]: www.ensinoprofissional.com.br

    Atendimento ao Consumidor: [email protected]

    Contato com o Autor:[email protected]

    http://www.renato.silva.nom.br

    Catalogao na publicao por: Onlia Silva Guimares CRB-14/071

    S586p Silva, Renato A. Programando microcontroladores PIC : Linguagem C / Renato A. Silva. So Paulo : Ensino Profissional, 2006. 7p.

    . Microcontroladores. . Microprocessadores. . C (Linguagem de Programao de Computadores). I. Ttulo.

    CDU: 68.

    Nenhuma parte desta publicao poder ser reproduzida sem autorizao prvia e escrita de Jubela Livros Ltda. Este livro publica nomes comerciais e marcas registradas de produtos pertencentes a diversas companhias. O editor utiliza estas marcas somente para fins editoriais e em benefcio dos proprietrios das marcas, sem nenhuma inteno de atingir seus direitos.

    Novembro de 2006

  • 5Programando Microcontroladores PIC

    PIC, PICmicro, e MPLAB so marcas registadas e protegidas da Microchip Technology Inc. USA. O nome e o logotipo Microchip so marcas registadas da Microchip Techno-logy. Copyright 2003, Microchip Technology Inc. Todas as outras marcas mencionadas no livro constituem propriedade das companhias s quais pertencem

    Quanto ao mais irmos, fortaleci-vos no Senhor, pelo seu soberano

    poder. Revesti-vos da armadura de Deus para que possais resistir s ciladas do Demnio. Porque ns no temos que lutar contra a carne e o sangue, mas contra os Principados, Potestades, contra os Dominadores deste mundo tenebroso, contra os espritos malignos espalhados pelos ares. Tomai portanto, a armadura de Deus para que possais resistir no dia mau, e ficar de p depois de terdes cumprido todo o vosso dever. Ficai firmes, tendo os vossos rins congidos com a verdade, revestidos com a couraa da justia, e os ps calados, prontos para ir anunciar o Evangelho da Paz.

    So Paulo, Efe 6,0-5

  • 6 Renato A. Silva

  • 7Programando Microcontroladores PIC

    SumrioPrefcio..................................................................................11Apresentao.........................................................................13Introduo:.............................................................................14

    1- Histria do transistor e do microchip1.1 O Transistor.....................................................................161.3 Tipos de transistor.......................................................... 181.4 O Nascimento do Microchip........................................... 19

    2- Portas Lgicas, Nmeros Binrios e Hexadecimais2.0- As Portas Lgicas...........................................................202.1- Nmeros Decimais.........................................................222.1.1- Nmeros Binrios........................................................222.1.2- Nmero Hexadecimal................................................. 232.1.3- Numerao Octal.........................................................24

    3- Memrias e Microcontroladores3.1- Memrias....................................................................... 263.2- Microcontrolador........................................................... 273.3- Histria dos microcontroladores ................................. 283.4- Apresentando o PIC 16F62x...........................................293.5- Alimentao................................................................... 303.6- Definio da CPU........................................................... 313.7- Arquitetura Interna........................................................ 323.8- Caractersticas do PIC 16F62x....................................... 333.9- Organizao da Memria.............................................. 343.10- A Pilha ou Stack........................................................... 343.11- Organizao da memria de dados............................. 353.12- Registradores de Funes Especiais............................ 363.13- Palavra de configurao e identificao..................... 413.14- Portas de Entrada / Sada...........................................423.15- Oscilador...................................................................... 443.16- Pipeline......................................................................... 44

  • 8 Renato A. Silva

    3.16.1 Oscilador com cristal modo XT, LP ou HS................ 463.16.2 oscilador com cristal paralelo.................................... 463.16.3 Oscilador com cristal em srie................................... 473.16.4 Clock externo.............................................................. 473.16.5 Oscilador com resistor externo.................................. 473.16.6 Oscilador interno 4 Mhz............................................ 483.16.7 Oscillator Start-Up timer (OST)................................. 483.17 Reset.............................................................................. 483.17.1- Reset Normal............................................................. 493.17.2- Reset Power-on (POR).............................................. 493.17.3- Power-up Timer (PWRT).......................................... 503.17.4- Brown-out detect (BOD)........................................... 503.17.5- Reset por transbordamento de WDT....................... 503.18- WatchDog Timer (WDT).............................................. 513.19- Set de instrues ......................................................... 52

    4- Construindo o Primeiro projeto:4.1 Pisca Led......................................................................... 544.1 MPLAB verso 7.0........................................................... 574.2- O Gravador.....................................................................634.3.1- IC-Prog........................................................................654.3.2- Gravando o programa................................................ 654.3.3- Erro de gravao......................................................... 664.3.4- Arquivo Hexa.............................................................. 66

    5- Linguagem C5.1- Linguagem de programao..........................................685.2- Comentrios................................................................... 695.3- Identificadores............................................................... 705.4- Endentao..................................................................... 705.5- Constantes...................................................................... 705.6- Variveis........................................................................ 705.7- Elementos definidos pela linguagem C:....................... 705.8- Operadores e Smbolos Especiais..................................715.9- Tipos de dados............................................................... 715.10- Comando IF.............................................................. 73

  • 9Programando Microcontroladores PIC

    5.11- Comando WHILE..................................................... 745.12- Comando DO............................................................ 755.13- Comando FOR.............................................................. 765.14- Comando SWITCH......................................................775.15- Comando RETURN...................................................... 785.16- Comando GOTO.......................................................... 785.17- Comando BREAK......................................................... 795.18- Comando CONTINUE................................................. 795.19- Estrutura de um Programa em C................................ 795.20- compilador CCS C Compiler................................... 80

    6- Temporizadores - timers6.1- Temporizador TMR0.....................................................856.1- Temporizador TMR1......................................................87 6.2- Temporizador Timer2.................................................... 896.3- Configurao do Timer..................................................91

    7- Comunicao7.1- Comunicao Serial RS232.............................................967.2- Funes para comunicao I2C................................... 1137.3- Comunicao SPI..........................................................115

    8- Captura, Comparao e PWM8.1- Modo captura............................................................... 1178.2- Modo comparao........................................................ 1198.3- Modo PWM Modulao por Largura de Pulso........... 120

    9- Comparadores e Tenso de Referncia9.1- Modulo Comparador................................................... 1239.2- Tenso de Referncia................................................... 126

    10- Displays10.1- Display LED de sete segmentos:................................12910.2- Display LCD............................................................... 134

  • 0 Renato A. Silva

    11- Motores de Passo11.1- Definio..................................................................... 14511.2- Motor de Passo Unipolar........................................... 14611.3- Motor de Passo Bipolar.............................................. 14711.4- Motor de Passo de Relutncia varivel..................... 14811.4- Modos de acionamento.............................................. 148

    ApndiceTabela de funes do compilador CCS...............................158Tabela de converso de caracteres .......................................166Layout da placa experimental..................................................170

    Referncia............................................................................173

  • Programando Microcontroladores PIC

    Prefcio Na atualidade uma diversidade de microcontroladores esta presente no mercado exigindo a efetiva busca por atualizao, para fins aplicativos operacionais e/ou didticos existe uma procura por aperfeioamento numa programao mais fcil. Cada dia se faz mais necessrio um conjunto de instrues que no sofra variaes bruscas e relevantes entre os microcontroladores. Logo, a sua aprendizagem deve possibilitar o entendimento dos demais. Com base nisto, o contedo da presente obra vem produzir uma documentao para uso como instrumento de aplicao pedaggica e operacional nos mais variados ambientes, bem como em desenvolver competncias no mbito das aplicaes de microcontroladores e motivar desenvolvedores a projetar, desenvolver e implementar sistemas microcontrolados de pequeno e mdio porte.

    O contedo deste livro apresenta a fundamentao terica sobre o microcontrolador PIC 6F67 e 6F68, realiza experimentaes prticas com esses microcontroladores e segue um tipo de metodologia cujo objetivo permitir ao desenvolvedor a familiaridade com componentes eletrnicos, a montagem em matrizes de contato e posterior anlise, testes e programao dos circuitos propostos.

    Mais uma vez, este livro dedica-se ao aprendizado da tecnologia de automao e robtica, utilizando microcontroladores para executar tarefas especficas. No decorrer do livro o leitor ter a oportunidade de inteirar-se da tecnologia dos microcontroladores da famlia PIC da Microchip, iniciando no mdulo bsico com o uso de transistores passando pelas portas lgicas e avanando passo-a-passo at os microcontroladores, onde aprender a fazer softwares em linguagem assembler e posteriormente utilizando a linguagem C.

    Finalmente, cabe ao leitor sempre, o esforo para aprender a programar microcontroladores e usa-los com criatividade e imaginao para o desenvolvimento de novos projetos. Aqui reforamos o pedido do autor no sentido de ter uma boa dose de pacincia no aprendizado e no desistir frente s dificuldades, pois com certeza, uma caminhada de enriquecimento de conhecimentos. E para aqueles que felizmente encontra-se em um degrau mais elevado, espera-se que a obra venha somar algo mais a sua carreira.

    Antonio Ildio Reginaldo da SilvaDiretor Escola Senai Catalo - GO

  • Renato A. Silva

  • Programando Microcontroladores PIC

    Apresentao

    Este livro, dedica-se ao aprendizado da programao de microcontroladores utilizando-se da linguagem C, de forma prtica, conduzindo o leitor a um aprendizado gradativo ao uso dos microcontroladores para executar tarefas especficas. No decorrer do livro o leitor ter a oportunidade de inteirar-se da tecnologia dos microcontroladores da famlia PIC MCU da Mi-crochip de forma terica e prtica. Com o auxlio da placa experi-mental proposta, cujo layout pode ser baixado gratutamente da internet no endereo http://renato.silva.nom.br e com a realizao dos exerccios complementares, o leitor encontrar em condies de desenvolver aplicaes de controle de microcontroladores PIC, utilizando-se da linguagem de programao C.

    A viso da obra consiste em apresentar o microcontrolador com os seus recursos e a medida que forem utilizados, indicar a forma de programao. Inicialmente apresentado a forma de programao em assembler de uma aplicao simples, e os meios de gravao no microcontrolador. Posteriormente a programao seguir em linguagem C, a medida que for sendo utilizado os recursos do microcontrolador e de alguns perifricos.

    As ferramentas aqui utilizadas so livres para uso com execesso do compilador CCS PIC C Compiler da CCS Inc. cujas informaes adcionais e sobre aquisio, podem ser adquiridas di-retamente do fabricante no endereo http://www.ccsinfo.com/

  • Renato A. Silva

    Introduo:

    O desenvolvimento atual da tecnologia nas reas de au-tomao e robtica deve-se principalmente ao desenvolvimento dos microcontroladores e processadores digitais de sinais (DSP), tendo estes memrias e estrutura que lembra os microcomputado-res atuais, executando um software escrito para uma determinada finalidade, sendo extremamente robustos, baratos e confiveis. Dentre os diversos fabricantes, encontramos os microcontroladores da Microchip, uma empresa norte americana, fundada em 1989, com sede na cidade de Chandler, Arizona (oeste dos E.U.A.) que fabrica os microcontroladores da famlia PIC, uma das mais variadas do mercado, tendo eles, uma filosofia de produto em comum, caracterstica que permite a compatibilidade de software e a estruturao das aplicaes, pois um cdigo escrito para um modelo de PIC poder ser migrado para outro modelo sem que sejam necessrias grandes mudanas no cdigo fonte. Isto facilita o trabalho de quem desenvolve e preserva o investimento de quem produz.

    Os microcontroladores PIC, rene em um nico chip todos os circuitos necessrios para o desenvolvimento de um sistema digi-tal programvel, dispondo internamente de uma CPU (Unidade central de processamento) que controla todas as funes realiza-das pelo sistema, tendo em seu interior diversos registradores e a Unidade Lgica Aritmtica (ALU) onde so executadas todas as funes matemticas e lgicas, basicamente toda movimentao de dados passa atravs da ALU. A CPU conta tambm com memria de programa PROM (Memria programvel somente de leitura), memria RAM (memria de acesso randmico) e registrador W (uso geral) dentre outros.

  • 5Programando Microcontroladores PIC

  • 6 Renato A. Silva

    1

    Histria do transistor e do microchip

    1.1 O Transistor

    Antes de PICarmos um pouco, faz-se necessrio uma pe-quena viso do desenvolvimento, iniciando no final dos anos 40, com a construo do primeiro transistor nos laboratrios da BELL em 23 de dezembro de 1947 por John Bardeen, Walter Houser Brattain, e William Bradford Shockley, os quais ganharam o pr-mio Nobel de fsica 1956. O transistor a contrao das palavras transfer resistor, resistncia de trans-ferncia. um dispositivo eletrnico semicondutor, componente chave em toda a eletrnica moderna, de onde amplamente utilizado formando parte de computadores, portas lgicas mem-rias e uma infinidade de circuitos. Este revolucionrio engenho transformou o mundo em pouco tempo.

    Cientistas em diversos laboratrios estavam procura de um componente que substitusse as vlvulas e reles antigos. Diversos materiais foram submetidos a testes fsico-qumicos e classificados em dois grupos, os condutores e os no condutores, isolantes ou dieltricos. Alguns materiais no se enquadravam em nenhum dos dois grupos, ora conduziam ora isolavam, foi ento classificado como semicondutor.

    Em 1945, por iniciativa de Mervin Kelly, ento diretor da Bell Labs, formou-se um grupo de pesquisa para o estudo dos semi-

  • 7Programando Microcontroladores PIC

    condutores. Um ano mais tarde o grupo j estava quase formado. William Bradford Shockley, fsico do MIT (instituto de pesquisa de Massasshussets), John Bardeen, engenheiro eltrico e Walter Houser Brattain, fsico.

    Dois anos mais tarde e depois de muito trabalho, os cientistas conseguiram em 16 de dezembro de 1947 cons-truir o transistor primordial construdo com duas folhas de ouro prensados em um cristal de germnio e com uma carga eltrica aplica-da, esta flua entre o cristal, obtendo o efeito de amplificao to desejado. A Bell Labs. Promoveu uma ampla difuso de informaes a fim de incentivar outros a pesquisarem, e fabricarem o transistor, chegando a ponto de vender a patente do transistor por apenas U$ 25.000,00. O objeti-vo era que outras empresas alavancassem o desenvolvimento de novas tecnologias que pudessem ser usadas em telecomunicaes, sua rea de atuao.

    Anos mais tarde, uma dessas companhias, a Texas Instru-ments, anunciou o primeiro transistor de silcio, material, que apresentava inmeras vantagens sobre o germnio, uma delas era a abundante matria prima o que reduziria os custos de fa-bricao. A Texas tornou-se assim uma poderosa concorrente no mercado.

    O transistor um dispositivo semicondutor de estado slido, ele foi assim chamado pela propriedade de trocar a resistncia pela corrente eltrica entre o emissor e o coletor. um sanduche de diferentes materiais semicondutores em quantidade e disposio diferentes intercalados. Pode-se obter assim transistores PNP e NPN. Estas trs partes so: Uma que emite eltrons (emissor) uma outra que recebe e os coleta (coletor) e uma terceira (base) que est intercalada entre as duas primeiras, regula a quantidade desses eltrons. Um pequeno sinal eltrico aplicado entre a base e o emissor modula a corrente que circula entre o emissor e coletor. O sinal base emissor por ser muito pequeno em comparao com o emissor base. A corrente emissor coletor aproximadamente

  • 8 Renato A. Silva

    da mesma forma que a da base emissor, mas amplificada por um fator de amplificao, chamado Beta. Todo transitor tem um fator beta sendo assim amplificador, pode tambm se usado para oscilar, para retificar, para comutar, sendo esta a principal funo do transistor na eletrnica digital.

    1.3 Tipos de transistor

    Existem diversos tipos de transistores, mais a classificao mais acertada consiste em dividi-los em transistores bipolares e transistor de efeito de campo FET, sendo est dividida em JFET, MOSFET, MISFET, etc. A diferena bsica entre os diversos tipos de transistores est na forma em que controla o fluxo de corrente. Nos transistores bipolares que possuem uma baixa impedncia de entrada, onde o controle se exerce injetando uma baixa corrente (corrente de base), ao passo que o transistor de efeito de campo que possui uma alta impedncia, tendo o controle atravs de tenso (tenso de gate).

    Os transistores de efeito de campo FET mais conhecidos so os JFET (Junction Field Effect Transistor), MOSFET (Metal-Oxide-Semiconductor FET) e MISFET (Me-tal-Insulator-Semiconductor FET). Este tem trs terminais denominados gate, dreno, supridouro. O gate regula a corrente no dreno, fornecida no supridouro.

    Indiscutivelmente com o surgimento do transistor os equi-pamentos eletrnicos ficaram mais leves, compactos e passaram a consumir menos energia, tendo estas caractersticas cada vez mais relevncia na indstria.

  • 9Programando Microcontroladores PIC

    1.4 O Nascimento do Microchip

    Apenas treze anos aps a inveno do transistor, houve ou-tro grande salto tecnolgico, a inveno do circuito integrado ou microchip, por Jack S. Kilby da Texas Instruments e Robert N. Noyce da Fairchild Semicondutor.

    No vero de 1958, Jack S. Kilby, entrou para a equipe da Texas Instruments, em Dallas, E.U.A, onde desenvolveu o primeiro micro-chip da histria, usando componentes ativos (transistores, diodos) e passivos (resistores, capacitores) em uma nica pea de material semicondutor do tamanho de um clips de papel. O sucesso da de-monstrao de laboratrio foi o nascimento do primeiro microchip simples da histria, em 12 de Dezembro de 1958.

    Paralelamente na Fairchild Semicondutor, Robert N. Noyce avanava em suas pesquisas, inspirado nas tcnicas de mascara-mento que empregavam dixido de silcio para a difuso de impu-rezas, e utilizando-se de trilhas de ouro ou alumnio aplicado com ajuda de mscara e fotolitogrfia, enquanto o processo de Kilby empregava pequenos fios nas ligaes internas do circuito.

    A tecnologia evoluiu, e tambm o nmero de empresas e em 1962 nasceu lgica TTL, e anos mais tarde a tecnologia MOS (metal-oxide semiconductor), seguida pela CMOS (complementary metal-oxide semiconductor), tecnologia atual hoje em dia. Com a tecnologia CMOS e a crescente miniaturizao do microchip, sur-giu em 1974 o primeiro microprocessador da histria denominado 1802 fabricado pela RCA, seguido pelo microprocessador de 4 bits da Texas Instruments, o TMS1000.

    A eletrnica digital baseia-se em tenso (definido como 1) e ausncia de tenso (definido como 0) onde o nvel alto ou 1 de 5 volts ou 2/3 da fonte e o nvel 0 zero volt ou um pouco acima, portanto, para a eletrnica digital somente importa o nvel alto ou baixo. Com esta tica as indstria desenvolveram blocos com a unio de centenas de transistores para realizao de uma tarefa especfica denominando-se circuito integrado.

  • 0 Renato A. Silva

    22

    Portas Lgicas, Nmeros Binrios e Hexadecimais

    2.0- As Portas Lgicas

    As portas lgicas formam a base da eletrnica digital inician-do um novo compndio na eletrnica e o seu estudo essencial ao entendimento e aprendizado dos microcontroladores e micro-processadores. Ao agrupar circuitos ativos e passivos em blocos, os cientistas criaram blocos que executavam uma determinada funo lgica. Estas funes so AND (E), NAND (NO E), OR (OU), XOR (OU EXCLUSIVO), XNOR (NO EXCLUSIVO) e NO (NO). Para trabalharmos com as portas lgicas faz-se o uso de uma tabela verdade, a qual cada funo tem a sua.

    Nas portas AND tm-se nvel alto (tenso) em sua sada so-mente se todas as suas entradas, tiverem nvel alto, obtendo assim um E em suas entradas, pr exemplo entrada E entrada b. Dizemos assim, que a sada o resultado da entrada A, E da entrada B.

    As portas NAND, ao contrrio das portas AND somente ter

  • Programando Microcontroladores PIC

    nvel alto em sua sada se as suas entradas tiverem nvel baixo.As portas lgicas do tipo OR tero nvel alto em sua sada se uma OU outra entrada tiver nvel alto.

    As portas l-gicas tipo NOR, ao contrrio da funo OR, so-mente ter nvel alto ou 1 em sua sada se as entradas forem zero. Observe a diferena bsica entre a funo OR e a NOR.

    As portas lgicas XOR, ga-rantem o nvel alto em sua sada se uma entrada tiver em nvel alto e outra em nvel baixo. Observe que diferentemente da AND se tivermos 1 e 1 a sada ser 0.

    As portas XNOR apresentam princpio semelhante funo XOR, apenas com o detalhe de ter sadas invertidas.

    As portas lgicas NO, so as mais fcil de todas, apresen-ta nvel alto em sua sada se sua entrada for nvel baixo, inverten-do assim os n-veis lgicos.

    Como j sabemos o nvel alto (normalmente 5 volts) repre-sentados pr 1 e o nvel baixo (zero volts) pr 0, assim a combi-nao de 1 e 0 em grupos de 8, formo um conjunto denominado byte. Veremos agora as vrias representaes de conjuntos numricos e as suas formas de converso.

  • Renato A. Silva

    2.1- Nmeros Decimais

    Desde cedo aprendemos a raciocinar com nmeros decimais, onde o conjunto matemtico contm 10 elementos [0..9], este sis-tema de numerao baseia-se em potencia de 10 onde cada dgito corresponde ao nmero 10 (base) elevado a uma potncia (expoente) de acordo com sua posio.

    2.1.1- Nmeros Binrios

    Da mesma forma os nmeros que os nmeros decimais, os nmeros binrios, so assim chamados porque o seu conjunto contm apenas 2 elementos [0,1]. Este conjunto numrico repre-senta os estados lgicos 0 e 1. Ao organizarmos os bits 0 e 1 em grupos de 8 temos um byte de oito bits, em grupos de 16 temos um byte de 16 bits e assim sucessivamente.

    A escrita do nmero binrio sempre feita da direita para a esquerda, dizemos que a parta da direita a mais significativa ou MSB (most significative bit) e a parte da esquerda a menos signi-ficativa ou LSB (louse significative bit), dai devemos elevar 2 ao expoente da casa correspondente ao 1 do bit. Observe na tabela de expoentes da figura que o primeiro expoente da direita 1, portanto 20 = 1 e o quarto expoente da direita para a esquerda o 3, portanto 23 = 8 agora fazemos a soma de todos os resultados, neste caso 1 + 8 = 9.

    Tudo uma questo de prtica, ao praticar um pouco voc entender melhor esta relao.

    Voc j deve ter percebido, aqui, que existe uma relao, uma forma de represen-tar o 0 e o 5 volts dos circuitos digitais em nmeros, desta forma, podemos conversar facilmente com as mquinas digitais utili-

  • Programando Microcontroladores PIC

    zando nmeros e realizar operaes com eles. Para convertemos uma representao decimal em binria, fazemos sucessivas divises por 2 e anotamos os resultados. Depois ordenamos de forma lgica da direita para a esquerda

    2.1.2- Nmero Hexadecimal

    A numerao hexadecimal que como as anteriores tem seu conjunto matemtico representado por 16 nmeros, facilita e acelera a decodificao de dados, economizando espao em ar-mazenamento de dados. Neste conjunto temos 16 nmeros sendo [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]. Utilizamos basicamente o conjunto de nmeros decimais (com10 elementos) e lanamos mos das le-tras (A,B,C,D,E,F) para complementar o conjunto atribuindo-lhe valor. Desta forma o nmero A passa a ter o valor 11 e o F o valor 16. O nmero 17 decimal igual a 11 hexadecimal e o nmero 23 decimal igual ao nmero 17 hexadecimal. Parece um pouco confuso mas no , acompanhe no apndice a tabela de nmeros decimais x binrio x hexadecimal. Assim o nmero 65535 (5 casas) em decimal, ficaria como 11111111.11111111 (16 casas) em binrio e FFFF (4 casas) em hexadecimal.

    A converso Hexadecimal para decimal multiplica o valor do digito pela potncia de 16, fazendo a soma-tria. Ex: 8AB1 = 35.505

    Para convertermos hexadeci-mal em binrio, a forma mais prtica termos em mente a tabela de nmeros de A at F em binrio e depois agrupar os dgitos binrios, veja 1A fica com 1 (primeiro dgito) e 1010 da tabela. Outro exemplo 3C convertido d 11(referente ao 3) e 1100(referente ao C).

  • Renato A. Silva

    Tabela hexadecimal x binria A - FA B C D E F

    1010 1011 1100 1101 1110 1111

    2.1.3- Numerao Octal

    O sistema de numerao octal um conjunto matemtico onde temos oito elementos [0,1,2,3,4,5,6,7] que apresenta grande importncia principalmente pela facilidade de converso de binrio para octal. A metodo-logia de converso semelhante as anteriores, para converso de numerao decimal para numerao octal, faz-se divises sucessivas por 8 at encontrar o menor quociente e pos-teriormente pegamos o resto da diviso em ordem inversa.

    Para converso de octal para decimal, multiplicamos o nu-meral por 8 elevado a potencia correspondente.

    A Converso de numerao octal para numerao binria faz-se uso da tabela octal onde temos o correspondente binrio de cada nmero octal, de-pois agrupamos os bytes correspondentes ao octal da direita para a esquerda.

    Tabela de converso entre diversas basesDecimal Hexadecimal Binrio Octal

    0 0 0000 0001 1 0001 0012 2 0010 010

  • 5Programando Microcontroladores PIC

    Decimal Hexadecimal Binrio Octal3 3 0011 0114 4 0100 1005 5 0101 1016 6 0110 1107 7 0111 1118 8 10009 9 1001

    10 A 101011 B 101112 C 110013 D 110114 E 111015 F 1111

    As funes lgicas booleanas so utilizadas quase que na totalidade das aplicaes com microcontroladores. No captulo anterior o leitor viu as diversas funes (portas lgicas), veja agora exemplo de aplicao destas funes em numerao binrio e hexadecimal.

    Neste captulo, tivemos uma viso geral da relao, converso e utilizao dos diversos conjuntos numricos e sua indiscutvel e relevante importncia para os sistemas computacionais. No prximo captulo veremos os diversos tipos de memrias e a suas utilizaes.

  • 6 Renato A. Silva

    3

    Memrias e Microcontroladores

    3.1 Memrias

    A memria a capacidade de reter, recuperar, armazenar e evocar informaes disponveis, neste caso em forma binria de 0 e 1. Transistores, portas lgicas e flip-flops so utilizados na implementao de memrias eletrnicas, sendo as principais tecnologias definidas como memrias ROM, PROM, EPROM, EEPROM, FLASH e RAM.

    Memrias ROM, memria somente de leitura, uma memria onde os dados gravados no podem ser modificados ou cancela-dos. Os dados so gravados na fabricao atravs de uma mscara colocada sobre o chip de modo a registrar nas clulas disponveis as informaes desejadas.

    Memrias PROM, memria somente de leitura programvel aquela onde os dados podem ser inseridos pr meio de gravadores especficos uma nica vez. Cada clula deve armazenar um bit de byte, como um fusvel onde o 1 seria o fusvel intacto e o 0 fusvel rompido, preciso muito cuidado ao programar este tipo de me-mria, pois se um bit ou um byte for gravado errado, no h como corrigir. A gravao feita utilizando uma tenso chamada VPP, cuja amplitude depende da memria, normalmente 25 volts.

    Memrias EPROM, memria somente de leitura apagvel, esta sem dvida bem mais comum dos que a PROM, pode ser apagada se exposta luz ultravioleta atravs de uma janelinha de quartzo (transparente a radiaes ultravioletas) e programada novamente

  • 7Programando Microcontroladores PIC

    pr meio de gravadores especficos, pr muitas vezes.Memrias EEPROM, memria somente de leitura apagvel

    eletricamente, pode ser apagada eletricamente e regravadas mi-lhares de vezes, utilizando gravadores especficos, no precisando exp-la a radiao ultravioleta, sendo muitas vezes menores que as EPROM, j que no tem a janelinha de quartzo.

    Memria FLASH, parecida em tudo com as do tipo EEPROM, podendo ser apaga e gravada eletricamente e gravada novamente, podendo ter at 100.000 ciclos de apagamentos

    Memria RAM, Constituda de transistores ou flip-flop, po-dem armazenar dados somente quando tiverem tenso, quando no houver tenso estaro zeradas, sendo volteis, tem seu uso no processo auxiliar ao processador armazenando informaes temporrias. Basicamente so constitudas de dois tipos: estticas e dinmicas.

    As memrias RAM estticas, muito utilizada no final dos anos 80, tinham como principal desvantagem o tamanho, pois cada chip podia armazenar pequena quantidade de bytes, algo em torno de 1k, 4k byte. Portanto para criar um banco de memria com certa capacidade, fazia-se necessrio projetar uma placa de propores considervel.

    As memrias RAM dinmicas, ao contrrio tinham alta densi-dade podendo armazenar por chip 1 megabyte facilmente, porm estas memrias necessitam de refresh constante e conseqente-mente circuitos de apoio. So estas empregadas hoje em dia nos computadores, normalmente tem entre 8 e 10 transistores por byte e um tempo de acesso da ordem de 7 nanosegundos !

    3.2 Microcontrolador

    Microcontrolador um circuito integrado programvel que contm todos os componentes de um computador como CPU (unidade central de processamento), memria para armazenar programas, memria de trabalho, portas de entrada e sadas para comunicar-se com o mundo exterior, sistema de controle de

  • 8 Renato A. Silva

    tempo interno e externo, conversores analgico digital, uart de comunicao e outros.

    Pode-se controlar qualquer coisa ou estar includo em uni-dades de controle para:

    - mquinas pneumticas, hidrulicas comandadas- mquinas dispensadoras de produtos- motores, temporizadores- sistemas autnomos de controle, incndio, umidade tem-

    peratura- telefonia, automveis, medicina, ...etcEstamos rodeados por mquinas que realizam algum trabalho

    ajudado por sensores e atuadores que recolhem as informaes.

    3.3 Histria dos microcontroladores

    Em 1965 a GI Microelectronics, deu seus primeiros passos, fabricando memrias EPROM e EEPROM, desenhou no incio dos anos 70 o microprocessador de 16 bits CP1600. Este trabalhava bem, mas de forma ineficaz , no controle de portas de entrada / sada. Para resolver este problema em 1975 desenhou-se um chip destinado a controlar portas de entrada / sada. Nascia assim o PIC (Peripherical Interface Controler), Com estrutura muito mais simples que um processador, este podia manejar as entradas e sadas com muita facilidade, rapidez e eficincia.

    Uma das razes do sucesso do PIC base de sua utiliza-o, ou seja, quando se aprende a trabalhar com um modelo, fica fcil migrar para outros modelos j que todos tm uma estrutura parecida.

    Um dos grandes fabricantes de microcontroladores a Mi-crochip que tem como fbrica principal em Chandler, Arizona, onde so fabricados e testados os ltimos lanamentos. Em 1993 foi construda outra fbrica em Tempe, Arizona, que tambm conta com centros de fabricao em Taiwan e Tailndia. Para se Ter uma idia de sua produo, s na famlia 16CSX, de aproximadamente 1 milho de unidades semanais.

  • 9Programando Microcontroladores PIC

    Cada tipo de microcontrolador serve para um propsito e cabe ao projetista selecionar o melhor microcontrolador para o seu trabalho. Dentre os mais populares, encontramos o 16F84, ainda fcil de se obter, mas est sendo substitudo pelo modelo 16F627 ou 16F628 por ter mais recursos e preo aproximado. A diferena entre o PIC 16F627 e o PIC 16F628 est na quantidade de memria.

    3.4 Apresentando o PIC 16F62x

    O microcontrolador PIC 16F62x, rene em uma pastilha to-dos os elementos de uma CPU RISC de alta performance, sendo fabricado em encapsulamento DIP (18 Pinos), SOIC (18 pinos) ou SSOP (20 pinos). Onde encontramos:

    - Set (conjunto) de instrues com 35 funes- 200 nanosegundos por instruo @ 20 Mhz.- Clock de at 20 Mhz.- 1024 bytes de memria de programa (16F627)- 2048 bytes de memria de programa (16F628)- Stack com 8 nveis- 16 registradores especiais de funes- Capacidade de interrupo- 16 portas de entrada / sadas independente- Alta corrente de sada, suficiente para acender um LED- Comparador analgico.- Timer0 de 8 bits com prescaler, postscaler- Timer1 de 16 bits com possibilidade de uso de cristal ex-

    terno- Timer2 de 8 bits com registro de perodo, prescaler e posts-

    caler- Captura com 16 bits e resoluo mxima de 12,5 nS.- Comparao com 16 bits e resoluo mxima de 200 nS.- PWM com resoluo mxima de 10 bits.- USART para comunicao serial- 16 bytes de memria RAM comum

  • 0 Renato A. Silva

    - Power On Reset (POR)- Power Up Timer (PWRT)- Oscillator start-up (OST) - Brow-out Detect (BOD)- Watchdog Timer (WDT)- MCLR multiplexado- Resistor pull-up programveis no PORTB- Proteo de cdigo programvel- Programao em baixa voltagem- Power save SLEEP- Oscilador- ResistorexternoER- Resistor interno - INTRC- ClockexternoEC- Cristal alta velocidade - XT- CristalbaixavelocidadeHS- CristalLP- Programao in-circuit- Baixo consumo- < 2.0 mA @ 5.0V, 4 Mhz.- 15 uA @ 3.0V, 32 Khz.- < 1 uA em repouso @ 3.0V.- Quatro localizaes para ID de

    usurio

    3.5 Alimentao

    Normalmente o PIC alimentado com uma tenso 5,0 volts provenientes de uma fonte DC com regulao positiva, um re-gulador 7805 ou 78L05 podem ser utilizados para tal funo, lembrando aqui que o 78L05 tem capacidade de suprir at 100ma, no devendo exceder 80% deste consumo pois aumenta muito o aquecimento do regulador. O consumo de corrente do microcon-trolador mnimo, consumindo menos de 2,0 mA com 5 volts, trabalhando a 4Mhz ou 15,0 micro amp com 3 volts, trabalhando

  • Programando Microcontroladores PIC

    a 32 Khz. Quando em modo StandBy, consome menos de 1,0 mi-cro amp. com 3.0V, porm devemos ver o consumos dos outros componentes do circuito.

    - PIC 16F62x - 3.0V a 5.5V- PIC 16LF62x - 2.0V a 5.5VEm suas portas de sadas temos uma corrente de aproxima-

    damente 10 mA, o suficiente para iluminar um led diretamente, no entanto, sempre devemos utilizar um resistor em srie na porta normalmente de 10k. Respeitando suas caractersticas o PIC tra-balhar sem problemas com grande estabilidade durante muito tempo sem necessidade de manuteno.

    3.6 Definio da CPU

    As CPUs dependendo do tipo de instrues que utilizam podem ser classificadas em:

    CISC:(ComplexInstructionSetComputer)processadorescom conjunto de instrues complexas, dispe de um conjunto com elevado nmero de instrues algumas sofisticadas e potentes. Em contrapartida requerem muitos ciclos de mquina para executar as instrues complexas.

    RISC: (Reduced Instruction Set Computer) processadores com conjunto de instrues reduzidos, em nosso caso so 35 ins-trues simples que executam em 1 ou 2 ciclos de mquina com estrutura pipeline onde todas as instrues executam na mesma velocidade.

    SISC.(Specific Instruction SetComputer) processadorescom conjunto de instrues especficas.

  • Renato A. Silva

    3.7 Arquitetura Interna

    Entende-se por arquitetura interna a forma como o circuito construdo, representada por blocos, isto como suas partes internas se interligam, podemos definir os PICs como sendo Ar-quitetura Harvard, onde a CPU interligada memria de dados (RAM) e a memria de programa (EPROM) por um barramento especfico.

    Tradicionalmente os microprocessadores tm como base estrutura de Von Neumann, que se caracteriza por dispor de uma nica memria principal em que se armazenam dados e instru-es. O acesso memria feito atravs de um sistema de uma nica via (bus de dados, instrues e de controle).

    A arquitetura interna do PIC do modelo Harvard,

  • Programando Microcontroladores PIC

    onde dispe de memrias de dados e de programas. Cada me-mria dispe de seu respectivo bus, o que permite, que a CPU possa acessar de forma independente a memria de dados e a de instrues. Como as vias (bus) so independentes estes podem ter contedos distintos na mesma direo. A separao da memria de dados da memria de programa faz com que as instrues possam ser representadas por palavras de mais que 8 bits, assim o PIC, usa 14 bits para cada instruo, o que permite que todas as instrues ocupem uma s palavra de instruo, sua arquite-tura ortogonal, onde qualquer instruo pode utilizar qualquer elemento da arquitetura como fonte ou destino.

    Todo o processo baseia-se em banco de registros onde todos os elementos do sistema como, temporizadores, portas de entrada/sada, posies de memrias, etc, esto implementados fisicamente como registros. O manejo do banco de registros, que participam ativamente na execuo das instrues, muito interessante ao ser ortogonal.

    3.8 Caractersticas do PIC 16F62x

    Conforme vemos no diagrama em blocos do PIC 16F627 e 16F628, podemos ressaltar as seguintes caractersticas:

    memria de programa EEPROM de 1Kb x 14 bits no 16F627.memria de programa EEPROM de 2Kb x 14 bits no 16F628.Memria de dados EEPROM de 64 bytes. memria de dados RAM com 224 bytes dividida em 4 ban-

    cos. Registro de propsito especfico (SFR) com 32 posies.Registro de propsito geral (GPR) com 224 posies.ALU de 8 bits e registro de trabalho W que normalmente re-

    cebe um operando que pode ser qualquer registro, memria, porta de entrada/sada ou o prprio cdigo de instruo.

    Pilha (Stack) de 8 nveis.Contador de programa (PC) de 13 bits (o que permite ende-

    rear at 8 KB de memria).

  • Renato A. Silva

    Recursos conectados al bus de dados:PortA de 8 bits PortB de 8 bits Temporizadores / contadores TMR0, TMR1, TMR2ComparadoresCaptura , Comparao e PWMVoltagem de referenciaUSART para comunicao serialMemria EEPROM

    3.9 Organizao da Memria

    O PIC contm um registrador de-nominado PC (Program Counter) que implementado com 13 bits, capaz de enderear at 8K de programa, mas que somente 1k implementado fisicamente no 16F627 (0000h 03FF) e 2K so im-plementados no 16F628 (0000H 07FFh). Este registrador ligado diretamente a Pilha (stack) armazena o endereo contm o endereo da instruo que vai ser executada. Ao incrementar ou alterar o contedo do PC, o microcontrolador tem um mapa seguro de onde esta e para onde ir.

    3.10 A Pilha ou Stack

    A pilha uma memria indepen-dente da memria de programa e da memria de dados, com estrutura LIFO (Last In First Out) ltimo dado a entrar

  • 5Programando Microcontroladores PIC

    ser o primeiro dado a sair com oito nveis de profundidade ou armazenamento com 13 bits cada um, sua funo guardar o valor do PC quando ocorre um salto do programa principal para o endereo de um subprograma a ser executado, fazendo assim com que o microcontrolador tenha total controle as chamadas de rotinas. Seu funcionamento como um buffer circular onde o endereo da ltima chamada o primeiro a retornar em uma chamada RETUR, RETLW ou RETIE, como no h nenhuma flag indicando o transbordamento da pilha se houver uma chamada de rotina aps outra coma mais de oito nveis a primeira ser sobres-crita, impossibilitando o retorno correto do programa causando um erro fantstico.

    3.11 Organizao da memria de dados

    A memria de dados divide-se em quatro bancos, contendo os registros de propsitos gerais (GPR), registros de funes especiais (FSR). A seleo do banco de memria feita atravs dos bits RP1 (STATUS ) e RP0 (STATUS ) conforme a seguinte tabela:

    RP1, RP0 Banco Endereo0 0 0 000h - 07Fh0 1 1 080h - 0FFh1 0 2 100h - 17Fh1 1 3 180h - 1FFh

    Em cada banco temos 7F posies de memrias (128 bytes) o que nos d 512 bytes, no entanto existe uma lacuna nos bancos onde temos endereos no implementados, assim para memria RAM, ou melhor, para os registro de propsito geral (GPR) temos 224 bytes. Os Registros especiais (FSR) ocupam os primeiros 32 bytes de cada banco e so utilizados pela CPU e pelos mdulos perifricos para controlar o funcionamento do dispositivo, onde alguns destes registros especiais esto duplicados nos 4 bancos

  • 6 Renato A. Silva

    para reduzir o cdigo e tornar o acesso mais rpido. Os registros que afetam a CPU so: STATUS, OPTION,

    INTCON, PIE1, PIR e PCON. Veremos agora descrio destes e outros registros.

    3.12 Registradores de Funes Especiais

    Registro de STATUS endereos 03h, 83h,103h e 183h, contm o estado da Unidade Lgica Aritmtica ALU (C, DC, Z), estado de RESET (TO, PD) e os bits para seleo do banco de memria (IRP, RP1, RP0).

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0IRP RP1 RP0 #TO #PD Z DC C

    bit descrioIRP Registrador de seleo de banco

    1 = banco 2 e 3 (100h-1FFh)0 = banco 0 e 1 (00h - FFh)

    RP1,RP0 Registrador de seleo de banco RAM

    RP1,RP0 banco localizao00 banco 0 00h 7Fh01 banco 1 80h FFh10 banco 2 100h 17Fh11 banco 3 180h 1FFFh

    TO TimeOut - bit somente leitura1 = depois de power-up, instruo CLRWDT ou SLEEP0 = ocorreu estouro de WDT

    PD Power Down - bit somente para leitura1 = depois de power-up ou CLRWDT0 = execuo da instruo SLEEP

    Z Zero1 = resultado da operao aritmtica ou lgica zero0 = resultado da operao aritmtica ou lgica no zero

    DC Digit Carry - Transporte de dgito1 = um valor menor subtrado de um valor maior0 = um valor maior subtrado de um menor

  • 7Programando Microcontroladores PIC

    bit descrioIRP Registrador de seleo de banco

    1 = banco 2 e 3 (100h-1FFh)0 = banco 0 e 1 (00h - FFh)

    C Carry - Transporte1 = um valor mais pequeno subtrado de um valor maior0 = um valor maior subtrado de um menor

    Registro OPTION ou OPTION_REG endereo 81h e 181h um registro de leitura e escrita que contm vrios bits de

    controle para configurar o funcionamento do prescaler ao timer0 e ao WDT, interrupo externa ao timer0 e os resistores de pull-up do PORTB.

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0RBPU INTED TOCS TOSE PSA PS2 PS1 PS0

    bit descrioRBPU habilitao dos resistores pull-up no portB

    1 = resistncias de pull-up desligadas0 = resistncias de pull-up ligadas

    INTDEG Interrupo no pino RB0/INT1 = interrupo ligada, sensvel descida do pulso0 = interrupo desligada, sensvel subida do pulso

    TOCS seleo da fonte de clock para o timer 0 TMR01 = tmr0 atua como contador por transio de RA4/TOCKL

    TOSE fonte de pulso para o timer 0 TMR01 = incrementa pulso alto para baixo (descendente)0 = incrementa pulso de baixo para alto (ascendente)

    PS2,PS1,PS0

    divisor de freqncia (prescaler)BIT 2, 1, 0 TMR0 WDT000 1:2 1:1001 1:4 1:2010 1:8 1:4011 1:16 1:8100 1:32 1:16101 1:64 1:32110 1:128 1:64111 1:256 1:128

  • 8 Renato A. Silva

    Registro INTCON - endereo 0Bh, 8Bh, l0Bh e 18Bh um registro de leitura e escrita que contm os bits de habi-

    litao das vrias interrupes (exceto do comparador), inclusive por mudana de estado no PORTB.

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0GIE PEIE TOIE INTE RBIE TOIF INTF RBIF

    bit descrioGIE interrupo global

    1 = habilita todas as interrupes0 = desabilita todas as interrupes

    PEIE interrupes de perifricos1 = habilita todas as interrupes de perifricos0 = desabilita todas as interrupes de perifricos

    TOIE interrupo por transbordamento (overflow) de timer0 TMR01 = habilita interrupo para TMR00 = desabilita interrupo para TMR0

    INTE interrupo externa1 = habilita interrupo externa de RB0/INT0 = desabilita interrupo externa de RB0/INT

    RBIE interrupo por mudana de estado no portB1 = habilita interrupo para o portB0 = desabilita interrupo para o portB

    TOIF flag de overflow para o TMR01 = ocorreu estou em TMR0 - deve ser zerado via soft0 = no ocorreu estouro

    INTF ocorrncia de interrupo externa em RB0/INT1 = ocorreu interrupo0 = no ocorreu interrupo

    RBIF ocorrncia de estado no portB1 = ocorreu mudana de estado em RB7:RB40 = no ocorreu mudana de estado em RB7:RB4

    Registro PIE1 - endereo 8Ch.Este registro contm os bits individuais de interrupes dos

    perifricos, sendo que para seu funcionamento o bit PEIE (IN-TCON ) deve estar habilitado.

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE

  • 9Programando Microcontroladores PIC

    bit descrioEEIE flag de interrupo de escrita na EEPROM completada

    1 = habilita interrupo de trmino de escrita0 = desabilita interrupo de trmino de escrita

    CMIE interrupo do comparador habilitada1 = habilita interrupo do comparador0 = desabilita interrupo do comparador

    RCIE interrupo de recebimento de caracter no USART1 = habilita interrupo de recebimento do USART0 = desabilita interrupo de recebimento do USART

    TXIE interrupo de envio de caractere no buffer do USART1 = habilita a interrupo de transmisso do USART0 = desabilita a interrupo de transmisso do USART

    CCP1IE interrupo do CCP1 para captura, comparao e PWM1 = interrupo habilitada0 = interrupo desabilitada

    TMR2IE interrupo1 = habilita interrupo0 = desabilita interrupo

    TMR1IE flag de overflow1 = habilita interrupo para estouro de TMR10 = desabilita interrupo de estouro de TMR1

    RegistroPIRIendereo0ChEste registro contm as flags individuais que indicam as in-

    terrupes provocadas por perifricos.

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0EEIF CMIF RCIF TXIF - CCP1IF TMR2IF TMR1IF

    bit descrioEEIF flag de interrupo de escrita na EEPROM

    1 = operao de escrita na eeprom terminou. limpar via soft0 = operao de escrita na eeprom no terminou

    CMIF flag de interrupo do comparador1 = houve mudana na sada do comparador0 = no houve mudana na sada do comparador

    RCIF flag de interrupo de recebimento no USART1 = buffer de recebimento est cheio0 = buffer de recebimento est vazio

    TXIF flag de interrupo de transmisso do USART1 = buffer de transmisso est vazio0 = buffer de transmisso est cheio

  • 0 Renato A. Silva

    bit descrioCCPIF flag de captura, comparao e PWM (no aplicado)

    modo captura modo comparao1 = ocorreu captura0 = no ocorreu captura

    1 = ocorreu comparao0 = no ocorreu comp.

    TMR2IF flag de interrupo do TMR21 = houve ocorrncia entre TMR2 e PR20 = no houve ocorrncia

    TMR1IF flag de interrupo do TMR11 = ocorreu estou em TMR1 - deve ser limpo via soft0 = no ocorreu estouro no TMR1

    Registro PCON - endereo 0ChEste registro contm as flags que permitem diferenciar entre

    um Power-on Reset (POP), um Brown-out Reset (BOD), um Reset por Watchdog (WDT) e um Reset externo por MCLR.

    bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0- - - - OSCF - POR BOD

    bit descrioOSCF freqncia do oscilador INTRC/ER

    1 = 4 Mhz.0 = 32 Khz.

    POR status Power-on-reset1 = no ocorreu0 = ocorreu (aps ocorrncia deve ser setado)

    BOD status do Brown-out1 = no ocorreu reset brown-out0 = ocorreu reset (aps ocorrncia deve ser setado)

    Os demais registros especiais relacionados com o funciona-mento dos perifricos sero utilizados junto dos perifricos.

  • Programando Microcontroladores PIC

    3.13 Palavra de configurao e identificao:

    um registrador com 14 bits que se escreve durante o pro-cesso de gravao do dispositivo que deve estar de acordo com o esquema / sistema em que ser utilizado, pois determina a forma do oscilador, se usar reset entre outros. Ocupa a posio reser-vada de memria 2007h.

    13 12 11 10 9 8 7

    CP1 CP0 CP1 CP0 - CPD LVP

    6 5 4 3 2 1 0BODEN MCLRE FOSC2 PWRTE WDTE FOSC1 FOSC0

    bit descrioCP1, CP0 bit 13,12,11,10 para 2K de mem. para 1k de mem.

    11 desativado desativado10 0400h - 07FFh desativado01 0200h - 07FFh 0200h - 03FFh00 0000h - 07FFh 0000h - 03FFh

    CPD bit de proteo de cdigo1 = desabilitada proteo da memria de cdigo0 = proteo habilitada

    LVP habilitao do modo de programao em baixa voltagem1 = habilitado em Rb.40 = desabilitado e Rb.4 usado como entrada/sada

    BODEN habilitao do reset por deteco Brown-out1 = reset habilitado0 = reset desabilitado

    MCLRE seleo do Master Clear Reset1 = reset habilitado em Ra.40 = reset desabilitado e Ra.4 como entrada

    PWRTEN termpo de estabilizao - POWER-UP1 = desabilitado0 = habilitado

    WDTE habilitao do WDT - WatchDog Timer1 = habilitado0 = desabilitado

  • Renato A. Silva

    bit descrioFOSC2FOSC1FOSC0

    bits 4, 1, 0 descrio000 LP cristal com baixa freqncia001 XT cristal/ressonador 4 Mhz011 EC clock em Ra.7 e I/O em Ra.6100 INTRC resistor/capacitor interno com I/O em

    Ra.7 e Ra.6101 INTRC resistor/capacitor com I/O em Ra.7110 ER resistor externo em Ra.7 - I/O em Ra.6111 ER resistor externo em Ra.7 clkout em Ra.6

    3.14 Portas de Entrada / Sada

    As linhas de comunicao de entrada ou sada de dados (io) no microcontrolador so chamadas de portas, conforme vemos na representao esquemtica do microcontrolador, encontramos 16 portas de entrada ou sada (I/O). Estas portas esto divididas em dois grupos, o grupo A com 8 portas e o grupo B com 8 portas. O grupo A chamado de PORTA e o grupo B de PORTB. Cada porta para ser identificada chamada de R seguido do grupo (A, B) e do nmero da porta, sempre iniciando em zero. Ex. RA0, RA1, RA2, RB0, RB1, RB2.

    Ao contrario de alguns modelos, o 16F62x pode utilizar oscila-dor interno, ou externo. Quando usar o oscilador interno, sobraro duas portas para utilizar como entrada ou sada.

    Porta Bidirecional A (PORTA)Consta de 8 linhas de entrada/sada multifuncionais com as

    seguintes funes:

    Pino Funo Tipo Sada DescrioRa0 Ra0

    AN0STNA

    CMOS-

    Entrada / sada bidirecionalEntrada do comparador analgico

  • Programando Microcontroladores PIC

    Pino Funo Tipo Sada DescrioRa1 Ra1

    AN1STNA

    CMOS-

    Entrada / sada bidirecionalEntrada do comparador analgico

    Ra2 Ra2AN2Vref

    ST NA-

    CMOS-AN

    Entrada / sada bidirecionalEntrada do comparador analgicoSada de voltagem de referncia

    Ra3 Ra3AN3CMP1

    STNA-

    CMOS -CMOS

    Entrada / sada bidirecionalEntrada do comparador analgicoSada do comparador 1

    Ra4 Ra4TOCKLCMP2

    STST-

    OD-OD

    Entrada / sada bidirecionalEntrada de sinal para o timer0Sada do comparador 2

    Ra5 Ra5MCLRVPP

    STST-

    ---

    Entrada / sada bidirecionalMaster Clear ResetVoltagem de programao

    Ra6 Ra6OSC2CLKOUT

    STXTAL-

    CMOS-CMOS

    Entrada / sada bidirecionalEntrada do oscilador a cristalSada de clock

    Ra7 Ra7OSC1CLKIN

    STSTXTAL

    CMOS- -

    Entrada / sada bidirecionalEntrada do oscilador a cristalEntrada de clock externo

    ST = Schmitt trigger, NA = Analgico, OD = Coletor Aberto

    Porta Bidirecional (PORTB)Consta de 8 linhas de entrada/sada multifuncionais com as

    seguintes funes:Pino Funo Tipo Sada DescrioRb0 Rb0

    INTTTLST

    CMOS Entrada / sada bidirecionalInterrupo externa

    Rb1 Rb1RXDT

    TTLSTST

    CMOS

    CMOS

    Entrada / sada bidirecionalRecebimento comunicao serial USARTEntrada / sada de dados sincromono

    Rb2 Rb2TXCK

    TTL

    ST

    CMOSCMOSCMOS

    Entrada / sada bidirecionalTransmisso comunicao serial USARTEntrada / sada de clock sincromono

    Rb3 Rb3CCP1

    TTLST

    CMOSCMOS

    Entrada / sada bidirecionalCaptura / comparao / PWM

    Rb4 Rb4PGM

    TTLST

    CMOSCMOS

    Entrada / sada bidirecionalProgramao em baixa voltagem

    Rb5 Rb5 TTL CMOS Entrada / sada bidirecionalRb6 Rb6

    T10S0T1CKLPGC

    TTL-STST

    CMOSXTAL--

    Entrada / sada bidirecionalSada do oscilador do timer1Entrada do oscilador do timer1Clock para programao

  • Renato A. Silva

    Pino Funo Tipo Sada DescrioRb7 Rb7

    T10SIPGD

    TTLXTALST

    CMOS

    CMOS

    Entrada / sada bidirecionalEntrada do oscilador do timer1 de SleepEntrada / sada de dados para progra-mao

    ST = Schmitt trigger, NA = Analgico, OD = Coletor Aberto

    3.15 Oscilador

    Todo microcontrolador ou microprocessador para que funcio-ne, necessita de um sinal de relgio (clock) para faz-lo oscilar j que todas as operaes internas ocorrem em perfeito sincronismo. No PIC o clock tem quatro fases, chamadas de Q1,Q2,Q3 e Q4. Estas quatro pulsaes perfazem um ciclo mquina (instruo), durante o qual uma instruo executada. Internamente o contador de programa (PC) incrementado a cada ciclo Q1 onde a instruo requisitada da memria de programa e armada na instruo registrada em Q4. A ins-truo decodificada e executada no perodo Q1 a Q4.

    No 16F62x temos 8 possibilidades para o clock, selecionado atra-vs da palavra de confi-gurao como vimos no item 4.13.

    3.16 Pipeline

    O processo pipelining uma tcnica de segmentao que permite ao microcontrolador realizar simultaneamente a busca de cdigo de uma instruo da memria de programa, num ciclo de instruo, enquanto que a sua decodificao e execuo, so feitos

  • 5Programando Microcontroladores PIC

    no ciclo de instruo seguinte. Consideramos que cada instruo armada e executada em um ciclo de mquina, contudo se uma instruo provocar uma mudana no contedo do contador de programa (PC), caso ele no aponte para o endereo seguinte na memria de programa, mas sim para outro (como acontece em saltos ou chamadas de sub-rotinas), ento dever considerar-se que a execuo desta instruo demora dois ciclos de mquina, porque a instruo dever ser processada de novo mas desta vez a partir do endereo correto. veja:

    T1 feita a busca da instruo MOVLW 0x05T2 executada a instruo MOVLW 0x05 e feita a busca da

    instruo MOVWF PORTBT3 executada a instruo MOVWF PORTB e feita busca da

    instruo CALL LEDT4 executado o salto (CALL) e feita a busca da instruo

    seguinte BSF PORTA,0 e como BSF PORTA,0 no a primeira instruo aps entrar na sub-rotina LED, faz-se necessrio uma nova leitura do salto, gastando um ciclo.

    T5 busca da instruo da subrotinaT6 execuo da primeira instruo da sub-rotina e busca da

    prxima instruo.

  • 6 Renato A. Silva

    3.16.1 Oscilador com cristal modo XT, LP ou HS

    O cristal ou ressonador cermico conectado em, paralelo nos pinos RA6(OSC1) e RA7(OSC2) com dois capacitores para massa, conforme a tabela

    seleo do capacitor para uso com cristal.Modo Freqncia OSC 1 - C1 OSC 2 - C2LP 32 Khz.

    200 Khz.68 - 100 pF.15 - 30 pF.

    68 - 100 pF.15 - 30 pF.

    XT 100 Khz.2 Mhz.4 Mhz.

    68 - 150 pF.15 - 30 pF15 - 30 pF.

    150 - 200 pF15 - 30 pF15 - 30 pF.

    HS 8 Mhz.10 Mhz.20 Mhz.

    15 - 30 pF15 - 30 pF.15 - 30 pF.

    15 - 30 pF15 - 30 pF.15 - 30 pF.

    seleo do capacitor para uso com ressonador cermicoModo Freqncia OSC 1 - C1 OSC 2 - C2XT 455 Khz.

    2 Mhz.4 Mhz.

    22 - 100 pF.15 - 68 pF15 - 68 pF.

    22 - 100 pF15 - 68 pF15 - 68 pF.

    HS 8 Mhz.20 Mhz.

    10 - 68 pF10 - 22 pF

    10 - 68 pF10 - 22 pF

    Modo de ligar o cristal

    3.16.2 oscilador com cristal paralelo

    Preparado com portas TTL, este circuito simples, apresenta boa estabilidade e performance, fazendo uso da fundamental do cristal. Necessita de um resistor de 4,7k para uma realimentao

  • 7Programando Microcontroladores PIC

    negativa para estabilidade do circuito e os potencimetros de 10k faz ajuste (bias) do 74AS04 em uma regio line-ar.

    3.16.3 Oscilador com cristal em srie

    Tambm desenhado para usar a fundamental do cristal, necessita de um resistor de 330k para prover realimen-tao negativa

    3.16.4 Clock externo

    Quando em uma determinada apli-cao, j existe um sinal de clock (mni-mo de 200Khz.), pode ser usado para o microcontrolador atravs do pino OSC1, conforme a imagem abaixo:

    3.16.5 Oscilador com resistor externo

    Sem dvida neste modo, temos uma economia no custo do projeto, com apenas um resistor para massa podemos controlar a freqncia do microcontrolador. O resistor drena a corrente bias DC de controle do oscilador e em adio a ao valor da resistncia a freqncia do oscilador ir variar de unidade em unidade, em funo da voltagem DC e da temperatura. O parmetro de controle corrente DC e no capacitncia.

  • 8 Renato A. Silva

    Resistor Freqncia0 10.4 Mhz.1k. 10 Mhz.10k. 7.4 Mhz.20k. 5.3 Mhz47k. 3 Mhz.100k. 1.6 Mhz.220k. 800 Khz.470k. 300 Khz.1M. 200 Khz.

    3.16.6 Oscilador interno 4 Mhz.

    Este modo prov 4Mhz fixo @5,0 volts e 25C podendo sofrer variaes no mnimo de 3,65 Mhz E de no mximo 4,28 Mhz con-forme alimentao e temperatura.

    3.16.7 Oscillator Start-Up timer (OST)

    O OST faz uma pausa de 1024 ciclos de clock atravs da entrada do OSC1, para que haja uma estabilizao de tenso e perifricos. Ocorre somente na utilizao de oscilador no modo XT, LP e HS.

    3.17 Reset

    O vetor RESET, localizao 0x00h, ativo em nvel baixo, leva o microcontrolador a reiniciar seus registradores para valores iniciais pr-definidos na fabricao e um dos mais importantes efeitos de um reset, zerar o contador de programa (PC), o que faz com que o programa comece a ser executado a partir da pri-

  • 9Programando Microcontroladores PIC

    meira instruo do software programado. Em suma Este reincio de atividade pode ocorrer de causa manual, por deficincia na alimentao ou mesmo erro no software. Para o microcontrolador funcionar corretamente deve ter seu pino MCLR em nvel alto. Caso ocorra uma variao para zero, ocorre a condio de RESET. Este evento pode ocorrer de seis formas:

    1 Nvel baixo em MCLR durante a operao normal.2 Power-on reset (POR).3 Brown-out detect (BOD).4 Reset durante o repouso (SLEEP).5 Estouro de WDT durante um repouso (SLEEP).6 Estouro de WDT em operao normal

    3.17.1- Reset Normal

    A condio de reset normal ocorre colocamos o pino MCLR em nvel baixo. Normalmente isto feito atravs de uma chave Push-Bottom, como mostrado no esquema ao lado.

    3.17.2- Reset Power-on (POR)

    Este reset segura o chip em condio de reset tempo at que VDD esteje em nvel suficiente para operao. selecionado pelo bit 1 do registro PCOM endereo 0Ch.

  • 50 Renato A. Silva

    3.17.3- Power-up Timer (PWRT)

    Este prov um tempo fixo nominal de 72ms (28ms a 132ms) para uso em power-on reset e brown-out.

    3.17.4- Brown-out detect (BOD)

    Se VDD cair abaixo de VBOD por mais tempo do que 100us (TBOD), ento ocorrer a situao do brown-out resetando o mi-crocontrolador. Se VDD cair abaixo de VBOD, por um perodo inferior a TBOD, ento a condio no ter garantias de ocorrer. Em qualquer reset (Power-on, brown-out, WDT, etc..) o chip con-tinuar em reset at que VDD suba acima de VBOD, invocando o power-on timer dando um atraso adcional de 72ms.

    Pode ser habilitado ou desabilitado pelo bit BODEN da pala-vra de configurao no endereo 2007h e sua ocorrncia pode ser monitorada pelo bit BOD do registro PCON endereo 8Eh

    3.17.5- Reset por transbordamento de WDT

    Quando ocorre transbordamento do WDT, normalmente em 18ms, este, leva o microcontrolador a condio de reset.

  • 5Programando Microcontroladores PIC

    3.18- WatchDog Timer (WDT)

    A traduo deste termo no faz sentido, mas pode ser enten-dido como co de guarda, um contador de 8 bits, preciso, que atua como temporizador e tem o objetivo de vigiar o microcontro-lador impedindo que este entre em alguma rotina ou alguma in-stabilidade, que o faria trabalhar em um loop infinito ou parasse de responder.

    O WDT tem um controle de tempo independente do oscilador principal com base em uma rede RC, causando normalmente o estouro, normalmente em de 18 ms. (podendo ser aplicado postscaler), causando um reset no microcontrolador.

    Para ativ-lo devemos colocar em 1 o bit WDTE da palavra de configurao, e estando ativo, caso seu software deixe de re-sponder por algum motivo, o WDT ir estourar causando um reset no microcontrolador carregando novamente o software. Devido a esta caracterstica talvez a melhor definio para este sinal co de guarda.

    Havendo necessidade pode-se aplicar o divisor de freqn-cia (postscaler) no WDT o qual poderia alcanar tempos de at 2 segundos.

    Para que o seu software no seje resetado a cada estouro de WDT, deve-se limpa-lo em perodos de tempo inferior ao calcu-lado para o estouro, utilizando-se a instruo CLRWDT ou SLEEP, sendo que esta ltima colocaria o microcontrolador em repouso.

    O projetista / programador deve colocar a instruo CLRWDT em pontos estratgicos de seu software de acordo com o fluxo lgico de maneira que o software vigie o WDT evitando o seu estouro. Por exemplo, se no software h uma rotina ou tempori-zao que gaste um determinado tempo vrias vezes maiores que

  • 5 Renato A. Silva

    o WDT, nesta rotina deve haver uma instruo CLRWDT.A instruo CLRWDT simplesmente zera o contedo do

    registrador WDT, reiniciando a contagem. J a instruo SLEEP alm de zerar o WDT, tambm detm todo o sistema entrando em repouso com baixo consumo de energia.

    3.19- Set de instrues

    Chamamos de Set de instrues o conjunto de instrues que comandam o microcontrolador. Estes comandos j vm gravados de fbrica e ficam na memria ROM. A CPU RISC contm um n-mero reduzido de instrues isto o torna mais fcil de aprender, pois temos menos instrues. No entanto temos que reutiliza-las mais vezes para realizar operaes diferentes, Ao contrrio outras CPU como o x86 base de todos os computadores INTEL tem um set de instrues gigantesco. Desta forma temos instrues separadas para cada operao, aumentando tambm o grau de aprendizado de seu assembler.

    No PIC o set de instrues divide-se em trs grupos:- Operaes orientadas para Byte- Operaes orientadas para bit- Operaes orientadas para literais.

    Conjunto de instrues para operaes orientadas por byteMnemnico Ciclos Afeta

    StatusDescrio

    ADDWF f,d 1 C,DC,Z soma W e f, resultado em WANDWF f,d 1 Z AND W com FCLRF f 1 Z CLear File f limpa o valor da varivelCLRW 1 Z CLeaR Work limpa o valor de WCOMF f,d 1 Z COMplementa FDECF f,d 1 Z DECrementa FDECFSZ f,d 1 ou 2 - DECrementa F e Salta se o result. for

    Zero

  • 5Programando Microcontroladores PIC

    Mnemnico Ciclos Afeta Status

    Descrio

    INCF f,d 1 Z INCrementa FINCFSZ f,d 1 ou 2 - INCrementa F e Salta se o result. For

    ZeroIORWF f,d 1 Z Inclusive OR W com FMOVF f,d 1 Z MOVe para FMOVWF f 1 - MOVe W para FNOP 1 - No faa nadaRLF f,d 1 Z Rotaciona F a esquerda (Left)RRF f,d 1 Z Rotaciona F a direita (Right)SUBWF f,d 1 C,DC,Z SUBtrai W de FSWAPF f,d 1 - Troca bits de posioXORWF f,d 1 Z Exclusive OR W com F

    Conjunto de instrues para operaes orientadas para bitBCF f,d 1 - Bit Clear File limpa (0) um bit do byteBSF f,d 1 - Bit Set File seta (1) um bit do byteBTFSC f,d 1 ou 2 - Bit Testa File Salta se for zero - ClearBTFSS f,d 1 ou 2 - Bit Testa File Salta se for um - Setado

    Operaes orientadas para literais e controle de operaes.ADDLW k 1 C,DC,Z Soma (ADD) Literal com WANDLW k 1 Z AND F com WCALL k 2 - Chama uma sub-rotinaCLRWDT 1 TO,PD Limpa WatchDog TimerGOTO k 2 - Go To Adress vai para um endereoIORLW k 1 Z Inclusive OR Literal com WMOVLW k 1 - MOVa Literal para WRETFIE 2 - Retorne de InterrupoRETLW k 2 - RETorne com Literal em WRETURN 2 - Retorne de uma sub-rotinaSLEEP 1 TO, PD Vai para o repousoSUBLW k 1 C,DC,Z SUBtraia Literal de WXORLW k 1 Z EXclusive OR Literal com W

  • 5 Renato A. Silva

    4

    Construindo o Primeiro projeto:

    4.1 Pisca Led

    Nosso primeiro projeto ser fazer um led piscar (oscilar) a uma certa freqncia. Neste primeiro exemplo, embora simples, serve perfeitamente para mostrar o uso das intrues vistas at aqui. Para tal usaremos o seguinte esquema ao lado:

    Neste caso a forma de controle do tempo em que o led per-manece aceso ou apagado atravs do artifcio de fazer com que o microcontrolador perca tempo, este artifcio chama-se Delay Time.

    A rotina abaixo faz um loop, determinado pelo valor no registrador w (work), assim o numero de ciclos de mquina deve ser colocado em W antes de chamar a rotina. Para um pe-rodo de tempo maior devemos utilizar varivel (registrador) declarada no incio do software, com valor antes de entrar na ro-tina de tempo. Veja:

    milisegundos movlwmilisegdelay ;total1000ciclos movlw0xF8 ;248 callmicrosegundos ;(248x4)+2=994microsseg.nop ;995

  • 55Programando Microcontroladores PIC

    decfszmiliseg,F ;subtrai1,saltasefor0 gotodelay ;aindanozero,entocontinua retlw0;saidestarotinaevoltaarotinaprincipal ;call+movlw+loops+retlw;2+1+995+2=1000microsegundosmicrosegundos: addlw0xFF;subtrai1dewouw=w-1 btfssSTATUS,Z;saltasew=0 gotomicrosegundos;aindanozeroentorepete retlw0;retornaarotinaprincipal

    Este processo se repete quantas vezes for o valor da varivel miliseg colocada antes de chamar o procedimento milisegun-dos. Assim para um delay de 10 mSeg fazemos:

    Movlw0x10 Callmilisegundos

    Trabalhando com um cristal de 4Mhz temos 1 microsegun-dos por ciclo, ento no caso esta rotina no mximo, nos daria 255 milisegundos, o que seria suficiente para ver um flash rpido do led, porm, podemo ampliar esta faixa adcionando ajustando a rotina milisegundos para 250 e cham-la 4 vezes, assim teremos um segundo, mais precisamente 1.000035 segundos.

    umsegundo;estarotinairexecutarumloopquantasvezesfor;ovalordensegundos.Nestecaso(4x250)=1.000035seg.

    movlw0xFA;carregaWcom250callmilisegundos;executalooppor250milisegundosdecfsznsegundos,F;nmerodesegundos=zero?gotoumsegundo;no,entorepetearotinaretlw0;sim,entosai

    Veja o cdigo fonte de nosso exemplo.

    ;---------------------------------------------------;Projeto........:Pisca_Led;Cliente........:ProgramandoMicrocontroladoresPIC;Desenvolvimento:Renato;Verso:........:1.00;Modelo.........:16F627-16F628;Descrio......:Fazumledlig.naportaRB0piscara1Hz.

  • 56 Renato A. Silva

    ;---------------------------------------------------

    PROCESSOR16F627 #include

    __CONFIG_CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

    ORG0x0000;---------------------------------------------------;variveisdememriasmilisegequ0x20nsegundosequ0x21;---------------------------------------------------inicio: nop;ficaumciclosemfazernada movlw0x00;zeraoregistradorW movwfSTATUS;colocaovalordeWemStatus bsfSTATUS,RP0;Vaiparaobanco1daRAM movlwb00000000;coloca0noregistradorW movwfTRISA;determinaomododoPORTA movlwb00000000;coloca00000001emW movwfTRISB;Bit0dePORTBcomosada bcfSTATUS,RP0;retornaaobanco0 crlfPORTB;limpaobufferdoPORTB clrfPORTA;limpaobufferdoPORTAloop: bsfPORTB,0;ledacendeunaportaRB0 movlw0x04;carregaWcom4 movwfnsegundos;carregaovalorparavarivel callumsegundo;chamarotinadeumsegundo bcfPORTB,0;ledapagounaportaRB0 movlw0x04;carregaWcom4 movwfnsegundos;carregaovalorparavarivel callumsegundo;chamarotinadeumsegundo gotoloop;repeteoprocessoinfinitamente;---------------------------------------------------;estarotinairexecutarumloopquantasvezesfor;ovalordensegundos.(4x250)=umsegundo1.000035seg. movlw0xFA;carregaWcom250 callmilisegundos;executalooppor250milisegundos decfsznsegundos,F;nmerodesegundos=zero? gotoumsegundo;no,entorepetearotina retlw0;sim,entoretornacom0emw;---------------------------------------------------milisegundos movwfmiliSegDelay ;total1000ciclos movlw0xF8 ;248 callmicrosegundos ;(248x4)+2=994microssegundos nop ;995 decfszmiliSeg,F ;subtrai1esaltasefor0 gotoDelay;aindanozero,entocontinua retlw0;saidestarotinaevoltaarotinaprincipal

  • 57Programando Microcontroladores PIC

    ;---------------------------------------------------microsegundos: addlw0xFF;subtrai1dewouw=w-1 btfssSTATUS,Z;saltasew=0 gotomicrosegundos;aindanozeroentorepete retlw0;retornaarotinaprincipal;--------------------------------------------------- END;;---------------------------------------------------

    Este exemplo exemplifica o modo de controle de portas e funes internas do PIC. Ao invs do led, poderamos ter um mecanismo hidrulico fazendo uma determinada tarefa em per-odos de tempo iguais ou com variaes. Por exemplo mquina que coloca a tampinha em refrigerantes, cerveja e muitos outros produtos. Basicamente a mesma coisa do led onde voc aciona um dispositivo ou vrios, aguarda um determinado tempo ou aguarda sinal de outros sensores e depois de acordo com o seu sof-tware aciona a(s) sada(s). Poderia tambm ser uma esteira, onde a sada do PIC acionaria um rele, acionando o motor da esteira em perodos de tempos pr-determinados, enfim praticamente no h limites para o nmero de coisas que podem ser feitas, baseado ou derivado deste pequeno exemplo.

    Mas para voc que pensa que acabou, esta redondamente enganado, agora temos que converter este texto (programa) em nmeros hexadecimais e coloca-lo dentro da memria do PIC. Para tal usaremos o MPLAB.

    4.1 MPLAB verso 7.0

    MPLAB uma ferramenta da MicroChip para edio do software, simulao e at gravao do microcontrolador. Este tem a funo de auxiliar no desenvolvimento de projetos, faci-litando assim a vida do projetista. Esta ferramenta distribuda gratuitamente pela MicroChip, podendo ser baixado da internet diretamente do site do fabricante no endereo www.microchip.com ou em nosso site.

  • 58 Renato A. Silva

    O MPLAB integra em uma nica ferramenta, um editor de programa fonte, compilador, simulador e quando conectado s ferramentas da Microchip tambm integra o gravador do PIC, o emulador etc.

    O programa fonte digi-tado, ser convertido pelo MPLAB em cdigos de m-quina (veremos logo mais) que ser gravado e executa-do pelo microcontrolador. Normalmente todo software que converte uma seqncia de comandos em linguagem de mquina chamado de compilador. O compilador composto por diversos nveis desde analisador lxico at linkeditor.

    O ponto alto do MPLAB o simulador, que permite que voc rode (execute) seu programa sem a necessidade de grava-lo no microcontrolador, permitindo assim fazer diversas correes enquanto se desenvolve o software. No desanime se o primeiro software que voc fizer apresentar algum problema, lembre-se que nada acontece do dia para a noite, mas com dedicao e perseverana, far com que voc, caro leitor, supere as dificuldades que aparecerem.

    O conceito do MPLAB que voc leitor trabalhe com pastas de projetos, ao fazer um novo projeto, primeiro crie uma pasta em seu computador, depois inicie o MPLAB iniciando um novo projeto ou abrindo se o projeto j existir. Na pasta do projeto que o MPLAB mantm est armazenado todas as informaes do PIC utilizado, do clock utilizado da linguagem de programao, das posies das janelas, enfim o projeto de forma global. Para encerrar o projeto salve e feche apenas o projeto.

    Crie uma pasta em seu computador chamada c:\projeto\pis-ca_led, depois inicie o MPLAB, quando estiver no ambiente de

  • 59Programando Microcontroladores PIC

    trabalho do MPLAB voc ver o seu menu principal. Selecione a opo Project Wizard; esta janela permite criar um projeto em quatro passos:

    Passo 1)- Seleo do tipo do microcontrolador utilizado, se-lecione PIC16F628A

    Passo 2)- Seleo da linguagem a ser utilizada. Posteriormente faremos alterao nesta janela, por ora deixe como est. Microchip MPASM Toolsuite

    Passo 3)- Especifique o nome do projeto pisca_led e a pasta de armazenamento dos arquivos C:\projeto\pisca_led.

    Passo 4)- Seleo de arquivo fonte .ASM, a seleo de arquivos fontes que faro parte do projeto. Se j tiver o arquivo com a extenso .ASM poder adicion-los aqui, caso contrrio apenas avance e conclua esta fase.

    Depois no menu voc encontrar a opo Configure e a sub opo Configuration Bits, nesta janela ajuste os bits de configurao do projeto.

    - Oscilador = XT- Watchdog Timer = off- Power Up Timer = enabled- Brown Out Detect = disabled- Master Clear Enabled = enabled- Low Voltage Program = off- Data EE Read Protect = off- Code Protect = off

    Feche a janela Configu-ration Bits e Clique no Menu File e depois em New. Abrir ento a janela Code Editor onde voc ira escrever o programa fonte. Esta janela um editor de texto comum como o bloco de Notas do Win-dows, com a diferena que ele diferencia os comandos, literais

  • 60 Renato A. Silva

    e os labels com cores diferentes, tudo isso para ajuda-lo na hora da escrita do software.

    Depois de editar o soft, salve-o na pasta do projeto e clique com o boto esquerdo do mouse sobre Source Files na tela da esquerda e depois em Add File. localize na pasta o arquio digi-tado e adicione-o no projeto.

    Ajuste a freqncia de clock em Debugger e depois em Set-ting, na janela que se abre, na aba Clock, digite a freqncia do clock que estamos trabalhando. 4 Mhz.

    Digite o programa fonte com calma para evitar erros de di-gitao. A maneira de digita livre, particularmente acho que as letras minsculas deixam o texto mais legvel a medida que sobra mais espao entre elas, outros preferem tudo em maiscula,. O importante que voc mantenha uma forma constante, pois o MPLAB faz diferenciao entre minscula e maiscula. Se o leitor nomear uma rotina como UmSegundo e em alguma parte fizer a chamada call Umsegundo ir gerar um erro, j que o caractere S diferente. O mesmo vale para os comandos como movwf Status, rp0, aqui ser gerado dois erros um referente ao status e outro referente a RP0 que devem ser em maisculo. Para os exemplos vou utilizar letras minsculas, o importante o leitor ter cincia das diferenas para evitar estes erros e depois gastar o tempo procurando-os.

    Aps digitar o programa fonte, e se tudo estiver correto ,clique no menu Project e depois em Make ou use a tecla de atalho F10 para compilar seu programa fonte e gerar o to esperado arquivo hexa.

    Durante o processo de compilao o leitor ver a janela de progresso, e aps o trmino da compilao ser exibida a janela OutPut com indicao visual dos passos tomados pelo compi-lador.

    Caso o arquivo de cdigo fonte contenha algum erro, na com-pilao este ser detectado e o processo falhara com trmino do compilador, sendo o resultado exibido na janela OutPut para leitura do usurio e correes no arquivo de cdigo fonte.

    Neste exemplo eu coloquei intencionalmente uma virgula

  • 6Programando Microcontroladores PIC

    em uma linha aleatria e mandei compilar o projeto. A sada da janela OutPut foi a seguinte:

    Erro do arquivo de cdigo fonte, na linha 28: , CALL milisegundos ; led aceso por um tempo

    Erro reportado pelo MPLAB:Error[108] C:\PROJETO\PISCA_LED\LED.ASM 28 : Illegal

    character (,)Halting build on first failure as requested.BUILD FAILED: Sun Ago 07 01:39:56 2006

    Como se v o MPLAB reporta a linha onde encontrou o erro e ainda lhe diz porque est errado, neste caso, foi encontrado um caractere invlido na linha 28. Fazendo a correo (apagando a virgula) e compilando novamente o projeto obtivemos a mensa-gem:

    BUILD SUCCEEDED: Sun Ago 07 01:40:14 2006Neste caso a compilao foi um sucesso.

    Algumas vezes o software to pequeno e simples que quase impossvel haver erro, podendo ser gravado em seguida, mas na grande maioria das vezes uma boa idia fazer simula-o do funcionamento do software antes de gravar o dispositivo e colocar no PCB. Esta simulao feita no prprio MPLAB, da seguinte forma.

    No menu principal, clique no item Debugger depois no su-bitem Select Tool e finalmente em MPLAB Sim.

    No menu VIEW selecione as opes, File Register (Sym-bolic) e Special Function Register, procure organizar as janelas de modo que todas estejam visveis na tela.

    Para a simulao do programa conveniente, por uma ques-to de comodidade e velocidade, utilizar as teclas de atalho do MPLAB, as quais so aqui descritas com os seus respectivos usos, lembrando que estas opes esto dentro do menu Debugger.

  • 6 Renato A. Silva

    - F9(RUN)fazcomqueoprogramasejeexecutadoemve-locidade normal. Voc nem ao menos o ver na tela. Normalmente esta opo usada em conjunto com a tecla F2 (Breakpoint).

    - ANIMATEesta funonopossui tecladeatalho; fazcom que o programa siga passo a passo com indicao na tela da linha que est sendo executada, e nas outras janelas abertas as indicaes das respectivas funes.

    - F5(HALT)fazumaparadanaexecuodoprograma.- F7 (STEP INTO) esta funo faz comoprograma seje

    executado passo-a-passo como no ANIMATE com a diferena que a cada vez que pressionado esta tecla uma linha executada, cau-sando sua parada na linha seguinte da prxima instruo. Observe que a linha onde est parado o cursor ainda no foi executada.

    - F8(STEPOVER)muitoparecidacomafunoSTEPINTO,com a diferena~que executa a linha onde est o cursor, ou seja, a linha onde est parado o cursor j foi executada. A cada vez que esta tecla pressionada a prxima linha executada.

    - STEPOUTexecutaumasubrotina,sendomuitotilnocaso de rotinas demoradas como o caso do nosso exemplo. A sub rotina milisegundos chamada 4 vezes e a cada vez chama a sub rotina microeec que executa 255 subtraes. J pensou Ter que ficar teclando F7 ou F8 at sair desta sub rotina !

    - F6(RESET/PROCESSORRESET)estafunocausaumreset geral no programa posicionando o cursor na primeira linha de comando, zerando as memrias e os registradores.

    - F2(BREAKPOINT)semdvidaalgumaumasdasmaisteis; esta funo causa pontos de paradas no programa. Este procedimento pode ser feito de duas formas. A forma fcil dar dois cliques bem no canto da linha onde deve ficar o ponto de parada, ser colocado um cone vermelho com um B, indicando BreakPoint. A forma mais difcil teclar F2 e na janela digitar o nmero da linha em hexadecimal, onde ficar o ponto de parada. Na janela BreakPoint possvel desabilitar ou remover o bre-akpoint existente

    Algumas outras funes do MPLAB como veremos logo mais frente na medida que forem necessrias para o nosso estudo, por

  • 6Programando Microcontroladores PIC

    hora, aps simular o funcionamento do soft, chegou o momento de grav-lo no microcontrolador. Para isso necessrio ter em mo um gravador de microcontrolador para o modelo que estamos trabalhando.

    4.2- O Gravador

    O gravador um dispositivo projetado em concordncia com as caractersticas do microcontrolador. Existem muitos tipos de gravadores e softwares de aplicao. Alguns so muito simples e econmicos, outros so complexos e caros.

    Dentre os diversos tipos o que nos tem apresentado melhor resultado o gravado JDM (http://www.jdm.homepage.dk), cujo esquema original apresentado na figura abaixo e esquema , layout de circuito impresso melhorado pode ser encontrado em nosso site em www.renato.silva.nom.br ou a critrio do leitor tambm em forma de kit montado.

    A programao do Pic serial, feita por uns pinos especficos, reque-rendo uma tenso de alimentao VDD (4,5V a 5,0V) e uma tenso de programao VPP (12,0V a 14,0V) no modo alta voltagem e 4,5V a 5,5V no modo de baixa voltagem, ambos com uma variao mnima de 0,25V. A programao escreve na memria de

    programa, memria de dados, localizao especial para o ID e o byte de configurao.

    A memria de usurio vai de 0x0000 at 0x1FFF e no modo programao o espao se estende de 0x0000 at 0x3FFF, com a

  • 6 Renato A. Silva

    primeira metade (0x0000 a 0x1FFF) usada para o programa de usurio e a Segunda metade (0x2000 a 0x3FFF) inicia a memria de configurao.

    O espao da memria para configurao (0x2000 a 0x200F) fisicamente implementado mas somente estar disponvel o es-pao de 0x2000 a 0x2007, as outras posies esto reservadas. A posio 0x2007 poder ser fisicamente acessada pela memria do usurio. O usurio pode armazenar informao de identificao ID em quatro localizaes, de 0x2000 at 0x2003. Estas posies podem ser lidas normalmente mesmo aps a proteo de cdigo ativada.

    A programao opera com um simples comando, inserido bit a bit, na cadencia do pulso de clock. Os seis primeiros bits so de comando, seguido pelos 16 bits de dados do usurio.

    No incio da operao levanta-se o VPP em 13V e aps um perodo mnimo de 5uS, eleva-se VDD de 2,2V para 5,5V e aps 5uS o clock comea a oscilar, fazendo com que o PIC aceite os dados a uma freqncia mxima de 10 Mhz. importante manter o pino 10(RB4) em nvel baixo, pois uma flutuao poderia fazer com que ele entrasse inadvertidamente em modo de programao em baixa voltagem. No modo de baixa voltagem temos a mesma lgica acima com a diferena que no precisamos elevar MCLR para 13V bastando elev-lo para o nvel alto e levar tambm o

  • 65Programando Microcontroladores PIC

    PGM (RB4) no mesmo instante.

    4.3.1 IC-Prog

    Para efetuar a gravao, faremos uso do aplicativo ic-prog encontrado em http://www.ic-prog.com/. Este aplicativo de fcil operao e grava uma quantidade considervel de chips, dependendo claro do hardware de gravao.

    Antes de utiliz-lo, deve-se configura-lo e caso se utilize o windows 2000 ou windows XP, deve-se instalar o drive ic-prog.sys, iniciando o ic-prog no menu Configuraes/Opes na aba Diversos encontramos ativar drive NT/2000/XP. Marque esta opo e reinicie o ic-prog.

    Posteriormente faa a con-figurao do hardware JDM em configuraes/hardware, conforme a figura ao lado.

    4.3.2- Gravando o programa

    Selecione o modelo do PIC em Configurao/dispositivo/Microchip Pic, Depois abra o arquivo pisca_led.hex, selecione o modo do clock, e os fusveis de configurao. E finalmente clique no cone de gravao. Aps o processo de gravao, o leitor ser informado sobre o sucesso da gravao.

  • 66 Renato A. Silva

    4.3.3- Erro de gravao.

    Se aps a verificao voc obtiver e mensagem de erro, refe-renciando ao endereo 0x000, porque a comunicao falhou ou no h alimentao no circuito. No entanto a mensagem pode se referenciar a outro endereo, por exemplo ao endereo 0x0007. Um dos meus PICs passou a apresentar esta mensagem na verifi-cao. Eram alguns dados truncados na memria, bastou limpar o dispositivo e tudo voltou ao normal.

    4.3.4- Arquivo Hexa

    Alguns leitores podem estar se perguntando, o que so aqueles nmeros que vimos na tela principal do ic-prog, ou como funcionam ?

    Bom, primeiramente aqueles nmeros so do arquivo hexa que acabamos de compilar com o MPLAB. Esto organizados de dois em dois bytes, sendo a primeira instruo do microcon-trolador, gravado em sua rom durante o processo de fabricao e o segundo byte so dados do usurio e posies de memria. Vejamos:

    A organizao de oito em oito bytes, como o leitor pode ver na figura acima, portanto a primeira coluna representa nmeros octais de oito em oito, assim nosso programa tem 29 bytes, indo da linha 0018(8), coluna 5(8). O primeiro byte 0000 a nossa instruo NOP, nossa Segunda instruo MOVLW 0x00 (mova literal para registrador W) e valor movido para w 0 ento fica 3000. 30 a instruo MOVLW e 00 o valor movido.

    Outro exemplo; A instruo GOTO LOOP: da linha 31 foi alo-cada pelo compilador como GOTO 0xD, onde 0xD a localizao do label LOOP na memria do microcontrolador.

    A funo do compilador facilitar a escrita do programa e transforma-lo em nmeros hexadecimais em conformidade com a tabela rom do microcontrolador utilizado, mais precisamente em com o set de instrues.

  • 67Programando Microcontroladores PIC

    Desde o incio deste o leitor foi conduzido