mcu pedrosa 1a edicao

208

Click here to load reader

Upload: mayke2

Post on 23-Sep-2015

75 views

Category:

Documents


9 download

DESCRIPTION

E-book sobre Microcontroladores PIC.

TRANSCRIPT

  • Maracana - CE2014

  • Microcontroladores PICLinguagem C utilizando CCS para leigos

    1a Edio

    ii

    Pedro Pedrosa Rebouas Filho

    Maracana2014

  • Copyright 2014

    Este livro didtico e aplicado ao estudo das reas de Sistemas Embarcados, especificamente na rea de Microcontroladores e Dispositivos Perifricos, disponibilizando exemplos de prticas. Todo esse material protegido pela legislao brasileira de direitos autorais. possvel utilizar o contedo deste livro em outros meios de comunicao, seja na web ou em publicaes impressas, desde que tenha a citao explcita de que o material reproduzido de copyright deste livro ou tenha autorizao expressa do autor, o que inclui as imagens originais deste livro. Reprodues integrais ou parciais do contedo original deste livro em desrespeito a esses termos e sem autorizao constituem infrao da legislao de direitos autorais, ao passvel de punio legal. Estes termos se expandem para o ma-terial de aula disponibilizado pelo autor, como slides, vdeos e exemplos.

    Data de publicao: 01/01/2014

    ISBN: 978-85-63953-38-4

    Publicado pelo Instituto Federal de Educao, Cincia e Tecnologia do Cear (IFCE)

    Brasil, Cear, Maracana, Av. Contorno Norte, 10 - Distrito Industrial

    Link App Store:

    https://itunes.apple.com/br/book/microcontroladores-pic-linguagem/id768997487?mt=11

    Cdigo de barras:

    .

    iii

  • Crditos

    Autor

    Pedro Pedrosa Rebouas Filho

    Editor

    Pedro Pedrosa Rebouas Filho

    Designer Grfico

    Jeerson Silva Almeida

    Apoio Tcnico

    Alisson Monteiro

    Diego Moreira

    Edson Vieira

    Jeerson Silva Almeida

    Rafael Alves Barbosa

    Editora

    Instituto Federal de Educao, Cincia e Tecnologia do Cear - IFCE

    iv

  • ContatosOs contatos do grupo de desenvolvimento deste livro so:

    Grupo de Pesquisa em Sistemas Inteligentes

    Pgina do grupo: http://industriaifce.wordpress.com/grupos-de-pesquisa/gpsi/

    Email: [email protected]

    Laboratrio de Prottipos - IFCE Maracana

    Facebook: https://www.facebook.com/lprotifcemaracanau

    Email: [email protected]

    Contatos do autor Pedro Pedrosa Rebouas Filho

    Lattes: http://lattes.cnpq.br/4347965302097614

    Email: [email protected]

    v

  • Agradecimentos

    Agradeo Deus pela ddiva da vida, me proporcionando o prazer de viver cada dia fazendo o que amo;

    Agradeo minha esposa Elizngela pelo apoio incondicional em todos os projetos da minha vida, inclusive na dedicao e tempo empregados este livro;

    Agradeo aos meus pais, Pedro Pedrosa e Maria Palmira, pelo apoio ao longo de toda a minha vida me proporcionando a oportunidade de ter bons professores e educado-res, em que busco me espelhar;

    Agradeo aos amigos do departamento da Indstria do IFCE Maracana pelo apoio dirio todos os projetos de pesquisa e de ensino a qual me comprometo em executar;

    Agradeo aos meus alunos, bolsistas e amigos do Laboratrio de Prottipos e do Grupo de Pesquisa em Sistemas Inteligentes do IFCE pelo apoio tcnico na execuo das prticas e dos projetos que constituem este livro;

    Agradeo aos alunos do curso em Automao Industrial que contriburam diretamen-te me mostrando o norte que devia seguir no desenvolvimento deste livro, apresentando as principais dvidas e dificuldades da introduo aos microcontroladores;

    Agradeo ao Departamento de Extenso, Pesquisa, Ps-Graduao e Inovao, que conjuntamente com a Direo Geral do campus Maracana, forneceu apoio e incentivo na publicao deste livro.

    Agradeo Pr-Reitoria de Pesquisa e Ps-Graduao e Inovao do IFCE pelo apoio e incentivo publicao deste livro, alm de todo incentivo ao longo da minha for-mao como aluno, professor e pesquisador desta instituio.

    vi

  • ApresentaoEste livro foi desenvolvido por Pedro Pedrosa Rebouas Filho, o mesmo possui os ttulos de Doutorado (2013) e Mestrado (2010) em Engenharia de Teleinformtica pela Universida-de Federal do Cear (UFC), possui graduao em Tecnologia em Mecatrnica Industrial (2008) pelo Instituto Federal de Educao Cincia e Tecnologia do Cear (IFCE).

    Atualmente Professor do Ensino Bsico, Tcnico e Tecnolgico no IFCE, cargo que ocu-pa desde 2008 na mesma instituio. No IFCE, o autor atua ministrando aulas nas reas de Automao e Robtica, o que contempla diversas disciplinas, como Eletrnica Digital, Eletrnica Analgica, Eletrnica Industrial, Instrumentao, Controladores Lgicos Progra-mveis, Microcontroladores, Dispositivos Perifricos, Robtica com Manipuladores, Rob-tica Mvel, entre outras.

    Este livro surgiu do material das disciplinas de Microcontroladores e Dispositivos Perifri-cos, material este que abordava assuntos tericos e sugere prticas em diversas reas. A linguagem adotada ao longo do livro visa aproximar a teoria do leitor, visando que o mes-mo possa executar as prticas com sucesso, enriquecendo seu nvel nesta rea do conhe-cimento.

    As prticas deste livro so apresentadas e abordadas em forma crescente de complexida-de, portanto sugere-se a execuo das mesmas de forma gradativa, sem saltos. Deste modo, os degraus do conhecimento sero solidificados um a um, conforme planejado pelo autor.

    Bons estudos.

    vii

  • Introduo aos Microcontroladores

    1

    Nesta unidade sero apresentadas algumas teorias sobre Microcontroladores, enfatizando os PICs fabricado pela Microchip e descrevendo seus modos de funcionamento e suas ca-ractersticas.

    8

  • Caractersticas Bsicas

    Os Microcontroladores (MCU ou uC) esto praticamente em todo lugar: automveis, avi-es, brinquedos, TVs, etc. So dispositivos programveis na sua maioria auto-contidos (sistemas embarcados ou embutidos), possuindo um sistema dentro de um chip, gerando a sigla SOC do termo em ingls System on a chip.

    Estes dispositivos incluem dentro de um nico chip CPU, memria (de dados e de progra-ma), entrada/sada, temporizadores, relgio interno, entre outros herdares especficos. Deste modo, estes dispositivos de controle possuem baixo preo e alta eficincia. Possu-em outras funes diferenciadas e normalmente no encontradas em microprocessadores top de linha (temporizadores, conversores A/D e D/A, etc). O grande ganho deste dispo-sitivos possuir o Hardware e software integrados em um nico chip.

    Estes dispositivos compem sistemas computacionais que controlam os mais diferentes equipamentos, como por exemplo: controle de estacionamentos, sistemas de automao, sistemas de segurana.

    Possuem como principais caractersticas:

    Programao de memria no-voltil (EEPROM, Flash), deste modo, o programa do controlador pode ser regravado vrias vezes, inclusive podendo at mesmo se auto-gra-var para alguns PICs;

    Possui Interrupes, sendo assim, algumas funes podem ser executadas quando acontece algo importante, suspendendo a operao em execuo para que outras mais importantes possam ser executadas;

    Possui entradas e sadas (E/S) analgicas e digitais, permitindo a leitura e sada de tenso na faixa de 0 a 5 Volts corrente contnua;

    Possui E/S serial, permitindo transmisso e recepo com outros dispositivos atra-vs da comunicao serial, obedecendo os protocolos de comunicao RS232, I2C e SPI;

    9

  • Interface para memria externa/barramento, o que permite o aumento da memria de armazenamento quando necessrio em aplicaes especfica;

    Programao no sistema (ISP - In System Programming), o que permite a gravao do microcontrolador em sua prpria execuo, alm do normal que gravar previamente execuo.

    De forma resumida, o Microcontrolador possui as funcionalidade abaixo:

    Microcontrolador x Microprocessador

    O Microprocessador (MPU) um Circuito Integrado (CI) com milhes de transistores usados em conjunto para armazenamento e manipulao de dados, ele compem os computadores, sendo uma das suas peas inter-nas.

    Enquanto isto, o Microcontrolador (MCU) um processador especial, geralmente contm no mesmo chip diversos perifricos, sendo usado na maior parte das vezes como controle digital.

    Deste modo, as principais diferenas so:

    MPU necessita de perifricos externos para funcionar, ex. memria RAM, temporizadores.

    MCU integra todos os recursos em um nico chip.

    10

  • Caractersticas Bsicas

    Os Microcontroladores (MCU ou uC) esto praticamente em todo lugar: automveis, avi-es, brinquedos, TVs, etc. So dispositivos programveis na sua maioria auto-contidos (sistemas embarcados ou embutidos), possuindo um sistema dentro de um chip, gerando a sigla SOC do termo em ingls System on a chip.

    Estes dispositivos incluem dentro de um nico chip CPU, memria (de dados e de progra-ma), entrada/sada, temporizadores, relgio interno, entre outros herdares especficos. Deste modo, estes dispositivos de controle possuem baixo preo e alta eficincia. Possu-em outras funes diferenciadas e normalmente no encontradas em microprocessadores top de linha (temporizadores, conversores A/D e D/A, etc). O grande ganho deste dispo-sitivos possuir o Hardware e software integrados em um nico chip.

    Estes dispositivos compem sistemas computacionais que controlam os mais diferentes equipamentos, como por exemplo: controle de estacionamentos, sistemas de automao, sistemas de segurana. Pode-se citar que um carro mdio possui 15 MCU, um carro de luxo em torno de 64 MCU, alm dos diversos dispositivos como celulares, microondas, ventilador, porto automtico, entre tantos outros.

    Possuem como principais caractersticas:

    Programao de memria no-voltil (EEPROM, Flash), deste modo, o programa do controlador pode ser regravado vrias vezes, inclusive podendo at mesmo se auto-gra-var para alguns PICs;

    Possui Interrupes, sendo assim, algumas funes podem ser executadas quando acontece algo importante, suspendendo a operao em execuo para que outras mais importantes possam ser executadas;

    11

  • Possui entradas e sadas (E/S) analgicas e digitais, permitindo a leitura e sada de tenso na faixa de 0 a 5 Volts corrente contnua;

    Possui E/S serial, permitindo transmisso e recepo com outros dispositivos atra-vs da comunicao serial, obedecendo os protocolos de comunicao RS232, I2C e SPI;

    Interface para memria externa/barramento, o que permite o aumento da memria de armazenamento quando necessrio em aplicaes especfica;

    Programao no sistema (ISP - In System Programming), o que permite a gravao do microcontrolador em sua prpria execuo, alm do normal que gravar previamente execuo.

    De forma resumida, o Microcontrolador possui as funcionalidade abaixo:

    Microcontrolador x Microprocessador

    O Microprocessador (MPU) um Circuito Integrado (CI) com milhes de transistores usados em conjunto para armazenamento e manipulao de da-dos, ele compem os computadores, sendo uma das suas peas internas.

    Enquanto isto, o Microcontrolador (MCU) um processador especial, geralmente contm no mesmo chip diversos perifricos, sendo usado na maior parte das vezes como controle digital.

    12

  • Deste modo, as principais diferenas so:

    MPU necessita de perifricos externos para funcionar, ex. memria RAM, temporizadores.

    MCU integra todos os recursos em um nico chip.

    13

  • Elementos Bsicos de um MCU

    Os elementos bsicos de um MCU so:

    Processador

    Unidade de Controle

    Conjunto de Instrues

    Registradores

    Memria

    Barramentos de comunicao

    Deste modo, estes so detalhados a seguir.

    Processador

    Aes a serem executadas pelo processador so:

    Busca da instruo: l instruo da memria;

    Interpretao da instruo: decodificao para determinar ao requerida (sinais de controle que sero ativados);

    Busca de dados: leitura de dados da memria ou dispositivo de I/O;

    Processamento de dados: pode ser necessrio efetuar operaes aritmticas;

    Escrita de dados: pode ser necessrio escrever na memria ou dispositivo de I/O.

    14

  • Registradores

    So de dois tipos bsicos:

    Registradores visveis ao usurio permitem que o programador minimize referncias memria.

    Registradores de controle e de estado usados pela unidade de controle.

    ! Registradores visveis ao usurio

    o Reg. de propsito geral: usado pelo programador para fins diversos. Ex.: operan-do, informao de operao, operaes sobre a pilha, endereamento.

    o Reg. de dados: apenas para operandos.

    o Reg. de endereo: propsito geral e endereo.

    o Reg. de condio (flags): usados para interrupo ou resultado de operao.

    o Reg. de configurao: usados para configurar o funcionamento do MCU.

    ! Registradores de Configurao

    o Registrador das portas Input/Output (I/O)

    o Direo do fluxo (TRISA, TRISB, ...)

    o Valor da porta (PORTA, PORTB, ...)

    o Registrador de configurao do funcionamento do Microcontrolador. Exemplo:

    o T1CON: configura o funcionamento do timer 1.

    15

  • o RCON e INTCON configuram o funcionamento de interrupes.

    o Entre outros.

    ! Registradores de controle e de estado:

    o Variam de acordo com projeto

    o Tipos bsicos

    " Contador de programa (PC)

    " Registrador de Instruo (IR)

    " Registrador de Endereamento memria (MAR)

    " Registrador de armazenamento temporrio de dados (MBR)

    ! Contador de programa (PC)

    o Responsvel pelo controle de execuo das instrues, o PC aponta sempre para a prxima instruo a ser executada.

    o incrementado aps a execuo de cada instruo.

    o Quando ocorre uma interrupo, salto ou alguma parada na execuo do progra-ma, o PC que indica qual instruo ser executada, e qual ponto do programa a execuo est.

    ! Registrador de Instruo (IR)

    o Este registro contm o valor da prxima instruo a ser executada.

    o Muito utilizada na arquitetura Pipeline, pois este registro armazena a prxima ins-truo.

    16

  • Unidade de Controle

    Duas tarefas bsicas:

    # Sequenciamento: dirige o processador para que execute uma srie de microopera-es na sequncia apropriada.

    # Execuo: faz com que cada microoperao seja executada.

    Ela opera atravs da ativao de sinais de controle, sendo os sinais de entrada e de barra-mento do controle de sada.

    ! Entrada:

    o Relgio (Clock) - comanda as transies de operao

    o Registrador de Instruo (IR) - Nmero da instruo a ser executada

    o Flags - registros das funes dos MCU PIC.

    ! Sinais do barramento de controle Sada:

    o Sinais Internos

    o Sinais para barramento de controle

    ! Conjunto de Instrues

    o Cada instruo dada por uma sequncia de bits.

    o Para facilitar programao, criou-se representao simblica (mnemnicos), de-nominada de Linguagem Assembly.

    17

  • Arquitetura - CISC x RISC

    Estas duas arquiteturas so distintas e caracterizam o conjunto de instrues presen-tes em cada microcontrolador. As caractersticas de cada uma so:

    ! CISC (Complex Instructions Set Computers)

    o Conjunto de intrues complexas

    o Compiladores mais complexos

    ! RISC (Reduced Instructions Set Computers)

    o Conjunto menor de instrues

    o Grande nmero de registradores de propsito geral.

    o Instrues mais complexas so construdas a partir das mais simples

    o Utiliza Arquitetura Harward e Pipeline

    Montador x Compilador

    Os dois tipos de programa so usados para gerar o arquivo (*.hex) que serve para gravar os comandos de execuo dentro do Microcontrolador. Entretanto, as caractersticas bsi-cas de cada um dos programas so:

    ! Montador

    Utiliza apenas a linguagem Assembly, usando apenas as instrues do fabricante

    O PIC 18f2550 possui 77 instrues

    18

  • Apenas MONTA o cdigo com as funes reconhecidas pelo hardware, fazendo TUDO com elas.

    ! Compilador

    Utiliza outra linguagem para programao que o hardware no reconhece

    Decodifica uma linguagem em funes que o hardware reconhece.

    A Linguagem C muito utilizada para programar PIC

    Um exemplo de programa para gravar um dado na memria EEPROM:

    Assembly x Linguagem C

    As duas linguagens mais comuns para programao de Microcontroladores so Assembly e C, e as principais diferenas entre ambas so:

    A linguagem C torna a programao amigvel, facilitando a programao de aplica-es mais complexas;

    19

    Montador utilizando Linguagem Assembly

    Compilador utilizando Linguagem C

  • A linguagem C aumenta a portabilidade, uma vez que as instrues Assembly variam muito at mesmo entre os mesmos fabricantes;

    A linguagem C permite o aproveitamento de cdigo com uso de bibliotecas;

    necessrio controle do Hardware para programar em Assembly;

    O tamanho do cdigo em Assembly ser sempre menor;

    Os programas em Assembly tendem a ser mais rpidos.

    Tipos de memria

    Existem diversos tipos de memria quando se trata de Microcontroladores, em que as principais so apresentadas e descritas a seguir:

    ! RAM (Random Access Memory)

    o Memria de acesso aleatrio

    o O processador pode ler e escrever

    o Perde os dados sem alimentao

    ! ROM (Read Only Memory)

    o Memria somente de leitura

    o Gravada uma nica vez na fbrica

    o O processador s l os dados

    ! PROM (Programable Read Only Memory)

    o Memria somente de leitura

    20

  • o Gravadas 1 vez por gravador PROM

    o O processador apenas l esta memria

    ! EPROM (Erasable Programable Read Only Memory)

    o Memria apagvel por luz ultra-violeta

    o Pode ser gravada n vezes por gravador EPROM, em que

    o No definido pelo fabricante

    o O processador apenas l esta memria

    ! EEPROM (Electrical Erasable Programable Read Only Memory)

    o Memria apagvel por luz ultra-violeta e por tenso eltrica (15 a 30V)

    o Pode ser gravada n vezes por gravador EEPROM, em que n definido pelo fabri-cante

    o O processador apenas l esta memria

    Obs 1:Alguns MCU conseguem escrever nesta memria ao longo da execuo do programa, so chamados de memria EEPROM flash

    Obs 2: As memrias PROM, EPROM e EEPROM no apagam seu contedo quando reti-ra-se a alimentao.

    Arquitetura de hardware (Princeton - Harward)

    As duas principais principais arquitetura de hardware so Princeton e Harward. Estas du-as arquiteturas so distintas e caracterizam o hardware e as conexes presentes em cada microcontrolador.

    21

  • ! Arquitetura Princeton

    o Programa, Pilha e variveis na mesma memria

    o Barramentos nico para memria de programa e de dados.

    ! Arquitetura Harward

    o Programa, Pilha e variveis em unidades separadas

    o Barramentos diferentes para memria de programa e de dados.

    22

  • Linguagem C x Assembly

    As duas linguagens mais comuns para programao de Microcontroladores so Assembly e C, e as principais diferenas entre ambas so:

    A linguagem C torna a programao amigvel, facilitando a programao de aplica-es mais complexas;

    A linguagem C aumenta a portabilidade, uma vez que as instrues Assembly variam muito at mesmo entre os mesmos fabricantes;

    A linguagem C permite o aproveitamento de cdigo com uso de bibliotecas;

    necessrio controle do Hardware para programar em Assembly;

    O tamanho do cdigo em Assembly ser sempre menor;

    Os programas em Assembly tendem a ser mais rpidos.

    Montador x Compilador

    Os dois tipos de programa so usados para gerar o arquivo (*.hex) que serve para gravar os comandos de execuo dentro do Microcontrolador. Entretanto, as caractersticas bsi-cas de cada um dos programas so:

    ! Montador

    Utiliza apenas a linguagem Assembly, usando apenas as instrues do fabricante

    O PIC 18f2550 possui 77 instrues

    23

  • Apenas MONTA o cdigo com as funes reconhecidas pelo hardware, fazendo TUDO com elas.

    ! Compilador

    Utiliza outra linguagem para programao que o hardware no reconhece

    Decodifica uma linguagem em funes que o hardware reconhece.

    A Linguagem C muito utilizada para programar PIC

    24

    Montador utilizando Linguagem Assembly Compilador utilizando Linguagem C

  • Tipos de Memria

    Existem diversos tipos de memria quando se trata de Microcontroladores, em que as principais so apresentadas e descritas a seguir:

    ! RAM (Random Access Memory)

    o Memria de acesso aleatrio

    o O processador pode ler e escrever

    o Perde os dados sem alimentao

    ! ROM (Read Only Memory)

    o Memria somente de leitura

    o Gravada uma nica vez na fbrica

    o O processador s l os dados

    ! PROM (Programable Read Only Memory)

    o Memria somente de leitura

    o Gravadas 1 vez por gravador PROM

    o O processador apenas l esta memria

    ! EPROM (Erasable Programable Read Only Memory)

    o Memria apagvel por luz ultra-violeta

    o Pode ser gravada n vezes por gravador EPROM, em que

    25

  • o No definido pelo fabricante

    o O processador apenas l esta memria

    ! EEPROM (Electrical Erasable Programable Read Only Memory)

    o Memria apagvel por luz ultra-violeta e por tenso eltrica (15 a 30V)

    o Pode ser gravada n vezes por gravador EEPROM, em que n definido pelo fabri-cante

    o O processador apenas l esta memria

    Obs 1: Alguns MCU conseguem escrever nesta memria ao longo da execuo do pro-grama, so chamados de memria EEPROM flash

    Obs 2: As memrias PROM, EPROM e EEPROM no apagam seu contedo quando reti-ra-se a alimentao.

    26

  • Arquitetura

    Nesta seo sero apresentados modos de arquitetura, uma de software e outra de hardware, sendo que na seo de software ser enfatizada as arquiteturas CISC e RISC, enquanto que na de hardware ser enfatizado a Princeton e Harward.

    Arquitetura - CISC x RISC

    Estas duas arquiteturas so distintas e caracterizam o conjunto de instrues presentes em cada microcontrolador. As caractersticas de cada uma so:

    ! CISC (Complex Instructions Set Computers)

    o Conjunto de intrues complexas

    o Compiladores mais complexos

    ! RISC (Reduced Instructions Set Computers)

    o Conjunto menor de instrues

    o Grande nmero de registradores de propsito geral.

    o Instrues mais complexas so construdas a partir das mais simples

    o Utiliza Arquitetura Harward e Pipeline

    27

  • Arquitetura de hardware (Princeton - Harward)

    As duas principais principais arquitetura de hardware so Princeton e Harward. Estas du-as arquiteturas so distintas e caracterizam o hardware e as conexes presentes em cada microcontrolador.

    ! Arquitetura Princeton

    o Programa, Pilha e variveis na mesma memria

    o Barramentos nico para memria de programa e de dados.

    ! Arquitetura Harward

    o Programa, Pilha e variveis em unidades separadas

    o Barramentos diferentes para memria de programa e de dados.

    28

  • Funcionamento do Microcontrolador

    Para apresentar o funcionamento do Microcontrolador ser apresentado o modo de funci-onamento pipeline, os ciclos de mquina e por fim, um resumo de funcionamento do hardware.

    Pipeline

    Este modo de funcionamento de alguns Microcontroladores permitem utilizar alguns mo-dos de arquiteturas especficos de software e hardware, aumentando a velocidade de pro-cessamento do Microcontrolador. Deste modo, algumas caractersticas so apresentadas a seguir:

    Abordagem simples: instrues com dois estgios. Enquanto o sistema executa uma instruo, outra pode ser buscada na memria. Muito usada nos processadores atuais, agilizando a execuo de operaes.

    Problema: tempo de execuo , em geral, maior que tempo de busca (estgio de bus-ca tem que esperar algum tempo.

    29

  • Ciclos de mquina

    Toda instruo executada em um ciclo de mquina (CM), em que um ciclo constitudo pelas etapas Q1, Q2, Q3 e Q4, conforme descrito abaixo:

    Um exemplo de execuo utilizando pipeline segue abaixo:

    30

  • Funcionamento do Microcontrolador

    O funcionamento de um Microcontrolador o resultado de cada componente que o nte-gra, sendo assim, o funcionamento de cada um descrito a seguir.

    ! ALU (Unid. Lgica e Aritmtica): Realiza to-dos os clculos que envolvam registros e ou lgi-ca para tomada de decises. Ligada e controla-da pela CPU.

    ! Linhas de I/O: As linhas de I/O so respons-veis pela entrada ( I de input) e sada (O de output ) do mesmo. Podem coletar dados, e atu-ar em processos atravs das mesmas.

    ! Memria: Dividida em Memria de Programa, Memria de dados, Registradores de configura-o, Registradores Internos, Contador de progra-ma, registro de endereo e de dados, etc.

    ! CPU : Responsvel por todo o processamento de dados do Microcontrolador. Inter-preta os comandos. Faz a leitura de dados. Ativa as portas de I/Os ou perifricos. Possui conjunto de instrues prprio

    ! Disp. Perifricos: Permitem maior flexibilidade ao MCU. Exemplos: USARTs e ADC`s.

    31

  • Linguagem C para Microcontroladores PIC

    2

    Nesta primeira etapa, uma reviso sobre linguagem C realizada, abordando conceitos bsicos de sintaxe, tipos de dados, funes, vetores, entre outros pontos importantes. O compilador utilizado ao longo deste material o CCS C, sendo este utilizado pela facilida-de do uso e da fcil aplicabilidade da linguagem C na configurao e operao dos Micro-controladores.

    32

  • Compilador CCS C

    As principais caractersticas do CCS C so:

    Ambiente integrado de desenvolvimento (IDE): compilador PCWH;

    Plataforma: Windows;

    Abrangncia: sries PIC12, PIC14, PIC16 e PIC18;

    Previso: suporte para dsPIC;

    - Mdulos:

    PCB: para dispositivos de 12 bits (PIC12 e PIC16C5X);

    PCM: para dispositivos de 14 bits (PIC14000 e PIC16xXXX);

    PCH: para dispositivos de 16 bits (PIC18).

    Os mdulos podem ser adquiridos sepa-rados ou em um pacote completo;

    Compatibilidade com os padres ANSI (no completamente j que algumas ca-ractersticas so especficas para PICs) e ISO;

    Grande eficincia no cdigo gerado;

    Grande diversidade de funes e bibliote-cas da linguagem C (padro ANSI), tais como: Entrada/sada serial, manipulao de strings e caracteres, funes matem-ticas C, etc.

    33

  • Menu File

    34

    Item FunoNew Cria um novo arquivo

    OpenAbre um arquivo para o editor. Opes: Source, Project, Output, RTF, Flow Chart, Hex ou Text. Atalho: Ctrl+O

    CloseFecha o arquivo atualmente aberto na janela do editor. Note-se que enquanto um arquivo est aberto para edio do PCWH nenhum outro programa pode acess-lo. Atalho: Shift+F11

    Close All Fecha todos os arquivos abertos no PCWH

    Save Salva apenas o arquivo que est sendo editado. Atalho: Ctrl+S

    Save AsCompele o usurio a editar o nome e o local de armazenamento do arquivo que est em uso antes que ele seja efetivamente salvo

    Save All Salva todos os arquivos abertos no PCWH

    EncryptGera um arquivo criptografado. A diretiva #include do compilador padro aceita os arquivos com esta extenso e descriptografa durante a leitura. Isto permite distribuir arquivos sem repassar o cdigo fonte

    Print Imprime o arquivo atualmente selecionado

    Recent FilesO lado direito do menu apresentar uma lista com os arquivos recentemente utilizados no PCWH

    Exit Encerra o PCWH

  • 35

    Aba Project

    Item FunoProject Abre um arquivo de um projeto existente (.PJT)

    PIC Wizard

    Este comando uma via rpida para iniciar um novo projeto. Uma janela ser aberta com campos a serem preenchidos referentes a configurao de diversas caractersticas como definio da pinagem (entrada ou sada, analgicos ou digitais), interrupes, converso A/D, comunicao serial, etc.

    24 bit Wizard

    Tambm serve para iniciar um novo projeto, tal como o comando anterior, com a diferena que serve para as famlias PIC24 e dsPIC

    CreateCria um novo projeto com a habilidade de adicionar/remover arquivos-fonte, incluir definies globais etc

    Aba Compile

    Item FunoCompile Compila o programa atravs de erros, e gera o arquivo *.hex para carregar no Microcontrolador

  • 36

    Aba View

    Item FunoValid Interrupts Apresenta as interrupes vlidas para cada tipo de PIC.

    Valid Fuses Apresenta as configuraes vlidas para cada tipo de PIC

    Special Register Apresenta os registros especiais para cada tipo de PIC.

  • Estrutura bsica da Linguagem C

    As regras bsicas da Linguagem C so:

    Toda funo em C deve ser iniciada por um abre-chaves ({) e encerrada por um fecha-chaves (});

    O nome, os parnteses e as chaves so os nicos elementos obrigatrios de uma fun-o;

    Todas as instrues devem estar dentro das chaves;

    As instrues em C so sempre encerradas por um ponto-e-vrgula (;);

    Lembre-se de que as chaves tambm servem para separar um bloco de instrues.

    37

    Regras Bsicas

    Sintaxe da funo mainA palavra main em ingls significa principal, ento a funo main a funo

    principal. O compilador procura esta funo para executar os comandos deseja-dos em cada programa especfico. Deste modo, cada arquivo s deve ter ape-nas uma nica funo main, para no gerar dvidas na execuo do compilador. A priori, todos os comandos e funes a serem executados devem estar dentro desta funo main. Assim como todas as funes, a main delimitada por { no comeo e por } no fim, e todos os comandos devem estar dentro, deste modo a sintaxe exemplificada a seguir.

  • Comentrios

    Os comentrios so partes do arquivo que o compilador no ir executar, ig-norando-os na execuo. Para identificar existe duas maneiras, comentrio em linha e em bloco.

    Uma linha:

    O que estiver a direita de // no computado na execuo do compilador.

    Exemplo:

    charcontador; // Este um comentrio de uma linha, pois est depois do //

    Em bloco:

    O que estiver entre /* e */no computado na execuo do compilador.

    Exemplo:

    /*

    IFCE Maracana

    Microcontroladores

    Tudo que est em vermelho um comentrio em bloco

    */

    38

  • Identificadores so palavras usadas para declarar uma constante ou uma varivel, possu-indo as seguintes regras no compilador CCS utilizando a linguagem C:

    Um identificador no pode ter smbolos grficos, com exceo do underline (_);

    No poder haver acentuao grfica (acento grave, acento agudo, til, trema, circunflexo ou cedilha);

    Um identificador no pode ser iniciado por nmero;

    No pode ser uma palavra reservada;

    Identificadores da Linguagem C:

    Podem existir outros especficos de cada compilador.

    39

    Identificadores

    autodefaultfloat

    register struct volatile break

    do

    return switchwhile case

    double goto short

    typedef

    elseif

    signedunionconstenumint

    sizeof

    continueextern

    long static void

    unsigned char for

  • Variveis e tipos de dados

    Uma das principais limitaes e causas de falhas na programao de Microcontroladores utilizando a Linguagem C so os tipos de dados empregados em cada aplicao. Isto deve-se a alterao do tamanho dos tipos de dados quando comparados a compiladores para execuo em computadores.

    Tipos bsicos de dados

    Os tipos bsicos de dados e seus respectivos tamanhos em bits so:

    double: usada apenas em C ANSI, no usada nos Microcontroladores PICs.

    40

    TIPO TAMANHO EM BITS MNIMO MXIMO

    char 8 0 255

    int 8 0 255

    float, float32 32 -1,510-45 3,41038

    void 0 sem valor sem valor

  • Modificadores de tipo

    So usados para conferir caractersticas especiais aos tipos de dados bsicos. So eles:

    Tipos especficos do compilador CCS

    Alguns tipos de dados so especficos do compilador CCS, criados para facilitar a progra-mao e uso deste compilador. So eles:

    41

    MODIFICADOR

    DESCRIO

    signed Representa tanto nmeros positivos quanto negativos

    unsigned Representa nmeros sem sinal

    shortDetermina que a varivel tenha um tamanho menor que o tipo modificado

    longDetermina que a varivel tenha um tamanho maior que o tipo modificado

    TIPO DESCRIO

    int1 Especifica valores de 1 bit (equivale ao short int)

    boolean Especifica valores booleanos de 1 bit (equivale ao short int e ao int1)

    int8 Especifica valores de 8 bits (equivale ao int)

    byte Especifica valores de 8 bits (equivale ao int e ao int8)

    int16 Especifica valores de 16 bits (equivale ao long int)

    int32 Especifica valores de 32 bits

  • Resumo dos dados disponveis no CCS C

    42

    TIPO TAMANHO EM BITS FAIXA DE VALORES

    short int, int1, boolean 1 0 ou 1

    char 8 0 a 255

    signed char 8 -128 a 127

    unsigned char 8 0 a 255

    int, int8, byte 8 0 a 255

    signed int, signed byte 8 -128 a 127

    unsigned int, unsigned byte 8 0 a 255

    long int , int16 16 0 a 65.535

    signed long int 16 -32.768 a 32.767

    unsigned long int 16 0 a 65.535

    int32 32 0 a 4294967295

    signed int32 32-2147483648 a

    2147483647

    unsigned int32 32 0 a 4294967295

    float 32 -1,51045a 3,41038

  • Declarao de variveis

    Declarar varveis significa criar variveis para serem utilizadas como dados. Para o com-pilador significa alocar o espao de memria que ser utilizado. O local de memria atri-budo a cada dado separadamente para cada varivel criada, ou melhor, declarada. Para isto, existe duas maneiras:

    Ao mesmo tempo que se declara uma varivel tambm possvel inicializar as mesmas com algum valor. Deste modo, a inicializao de variveis na declarao pode ser feito da seguinte maneira:

    As variveis podem ser declaradas em 3 pontos distintos do programa: local, global e pa-rmetro formal de funo.

    Varivel global: declarada no corpo principal do programa (fora de qualquer funo, in-clusive da main), podem ser acessadas de qualquer ponto do programa;

    43

  • Varivel local: declarada dentro de uma funo (ou rotina), podendo ser acessadas so-mente enquanto a rotina estiver em operao ou execuo;

    Varivel parmetro de funo: tipo especial de variveis locais, que assumem os valo-res passados como entrada na chamada das funes.

    44

  • Declarao de constantes

    Existe alguns tipos de dados que so declarados e criados, porm no variveis. Estes da-dos so chamados de constantes e so declarados antes da funo main e seu valor ser o mesmo em toda a execuo do programa, no aceitando modificaes. Existe duas ma-neiras de declarar estes tipos de dados:

    Representao numrica de constantes

    As constantes podem ser representadas numericamente conforme os exemplos seguin-tes:

    45

    REPRESENTAO NUMRICA EXEMPLO

    Decimal 250

    Hexadecimal 0x55

    Binrio 0b10100011

    Octal 73

    CaractereString

    &teste

  • Operadores na Linguagem C

    Os operadores so smbolos que representam uma funo prpria na execuo de um programa da linguagem C. Sendo assim, os principais so:

    Atribuio;

    Aritmticos;

    Relacionais;

    Lgicos;

    Lgicos bit a bit;

    De memria.

    Atribuio

    Operador de atribuio =: atribuio de valores a variveis. A atribuio de um valor a uma varivel simplesmente armazenar na posio de memria desta varivel um valor conhecido. A varivel que ir receber o valor sempre fica esquerda do operador.

    Exemplo:

    x = 10; // Ao executar este comando a varivel x recebe o valor 10

    y = x; // Ao executar este comando a varivel y recebe o valor da varivel x, ou seja, 10.

    46

  • Aritmticos

    Realizam operaes matemticas em relao a um ou mais dados.

    Exemplo:

    int y, x, a, b; //declarando as variveis y, x, a e b como do tipo inteiro.

    x = 3; /* Atribuindo valor 3 para varivel x */

    y = 2; /*Atribuindo valor 2 paa varivel y */

    a = 5/y; /*Atribuindo para a o resultado da diviso de 5 por y, somente a parte inteira, pois as variveis so inteiras. Assim 5 dividido por 2 d 2 e sobra 1, ento a recebe o valor 2*/

    a = 5%y; /*Atribuindo para a o resto da diviso de 5 por y. Assim 5 dividido por 2 d 2 e sobra 1, ento a recebe o valor 1*/

    a = x - y; /*Atribuindo para a varivel a a diferena entre x e y. (3-2 = 1), ento a recebe 1*/

    a++; /* Incrementa a varivel a em uma unidade, ento era 1, somando 1, passa para 2*/

    47

    OPERADOR AO

    + Adio

    - Subtrao

    * Multiplicao

    / Diviso

    %Resto de diviso

    inteira

    ++ Incremento

    -- Decremento

  • x--; /* Decrementa em uma unidade a varivel x, ento era 3, diminuindo 1, passa para 2*/

    b = 3*4 + 2*1 - 3*1; /*Quando so chamadas diversas expresses aritmticas, prevalece a ordem da matemtica, sendo primeiro calculada a multiplicao e diviso, depois soma e subtraco. Deste modo, o resultado 12+2-3 = 9, ento b recebe o valo 9.*/

    Relacionais

    Utilizados em testes condicionais para determinar a relao existente entre dados. Isto ocorre principalmente para verificar se alguma condio est sendo obedecida, sendo co-mum nas estruturas if, for, while, entre outras que sero tratadas posteriormente.

    Lgicos Booleanos

    Realizam conjunes, disjunes ou negaes entre elementos em um teste condicional.

    48

    OPERADOR AO

    > Maior que

    >= Maior ou igual a

    < Menor que

    5 && x < 15) {y=1}; //se x maior que 5 e menor que 15, y=1else {y=0;} //se x menor que 5 ou maior que 15, y=0

  • Realizam operaes matemticas em relao a um ou mais dados, o resumo dos princi-pais tipos esto na tabela a seguir, e a descrio dos mesmos esto logo a seguir.

    Operador & (E)

    Definio: Este operador faz o equivalente a uma operao AND booleana, em que as operaes so realizadas bit a bit.

    Exemplo:

    Decorrncia:

    49

    Lgicos bit a bit

    OPERADOR AO

    & AND (E)

    | OR (OU)

    ^ XOR (OU exclusivo)

    ~ NOT (complemento de um)

    >> Deslocamento a direita

  • Operador | (OU)

    Definio: Este operador faz o equivalente a uma operao OR booleana, em que as ope-raes so realizadas bit a bit.

    Exemplo:

    Decorrncia:

    Operador ^ (OU exclusivo - XOR)

    Definio: Este operador faz o equivalente a uma operao XOR booleana, em que as operaes so realizadas bit a bit.

    Exemplo:

    Decorrncia:

    50

  • Operador ~ (NOT - Inversor)

    Definio: Este operador faz o equivalente a uma operao inversora booleana, em que as operaes so realizadas bit a bit.

    Exemplo:

    Decorrncia:

    Operador

  • Operador >> (Deslocamento direita)

    Definio: Este operador faz o equivalente a uma operao SHIFT REGISTER, em que as operaes so realizadas deslocando cada bit para esquerda.

    Exemplo:

    Decorrncia:

    10 decimal = 00001010

  • Funes de controle

    As declaraes de controles so as responsveis por executar comandos quando condi-es so ou no obedecidas. Os principais so descritos a seguir.

    Comando if-else

    O comando if verifica se uma condio foi obedecida. Quando esta obedecida todos os comando que estiverem dentro das chaves que delimitam esta declarao de controle se-ro executadas. J o comando else optativo, e os comandos dentro desta declarao de controle sero executados quando a condio do if no for obedecida. Quando existe apenas um comando no bloco do if, ento as chaves podem ser descartadas.

    Sintaxe bsica:

    Exemplo: Neste exemplo quando a varivel tecla possui valor 1, ento a varivel led rece-be valor 1, caso contrrio a varivel led recebe valor 0.

    53

  • Esta declarao de controle possui uma variao permitindo a criao de um if depois de um else, criando a estrutura if-else-if, em que o segundo somente ir ser analisado caso o primeiro if no tenha sua condio obedecida. Exemplo da estrutura if-else-if:

    Outra variao desta declarao de controle chamada de if aninhados, em que um if colocado dentro de outro, conforme apresentado a seguir:

    Comando switch

    O comando switch funciona como mltipla escolha, em que a varivel que est dentro dos parnteses do switch, seleciona quais comandos sero executados. As opes so apresentadas por cada case, e quando a varivel do switch assume o valor de um dos ca-ses, ento os comandos respectivos a este case sero executados. A sintaxe desta fun-o est apresentada a seguir.

    Sintaxe:

    54

  • Exemplo: Neste exemplo abaixo, a varivel sensor do tipo char, e por isto as mltiplas escolhas definidas em cada case esto entre aspas simples ( ), por se tratar de um ca-racter. Neste switch existem dois casos e um default, em que o primeiro caso ocorre quando a varivel sensor o caracter L, e quando isto ocorre apenas a funo liga_lam-pada( ) executada, e posteriormente a execuo do programa sai do switch. O segun-do caso quando a varivel sensor possui valor D, e quando isto ocorre apenas a fun-o desliga_lampada( ) executada, e posteriormente a execuo do programa sai do switch. Quando nenhuma alternativa corresponde a um case, ento a opo default executada, que neste caso executar a funo pisca_lampada( ).

    Comando while

    O comando while (palavra em ingls para enquanto), verifica se uma condio obedeci-da, executando um bloco de comandos quando verdade, do mesmo modo que o coman-do if. Entretanto, depois de executar o bloco, retorna para a condio, executando tudo novamente enquanto a condio for obedecida.

    Sintaxe:

    55

  • Exemplo 1: No exemplo abaixo a varivel tecla recebe valor 0, e no primeiro while ser avaliado se esta varivel possui valor 1, como no possui, ento ir saltar todos os coman-dos deste while, portanto a funo pisca_led_1( ) nunca ser executada. J quando for ser avaliado pelo segundo while, a varivel tecla estar com valor 0, obedecendo a condio deste while e executando suas funes, que no caso a pisca_led_2( ). Assim que os co-mandos do while forem executados, a condio volta a ser avaliada, e caso continue sen-do verdadeira ir executar novamente seus comandos. Deste modo, a funo pis-ca_led_2( ) ser executada infinitamente, j que tecla sempre ser 0, seguindo estes co-mandos listados dentro do while.

    Comando do-while

    Este comando semelhante ao while, sendo a diferena do do-while em relao ao whi-le que agora o teste da condio feito somente aps a execuo dos comandos. Des-te modo, os comandos so executados pelo menos uma vez, independente se a condi-o obedecida ou no.

    Exemplo 1: No exemplo abaixo a varivel tecla recebe valor 1, em seguida executa a fun-o pisca_led_1( ) e na condio do comando do-while ser avaliado se esta varivel pos-sui valor 0, como no possui, ento ir sair deste bloco de comandos, mas executou as instrues pelo menos uma vez, mesmo que a condio seja falsa desde o comeo.

    56

  • Comando for

    O comando for funciona como um loop, em que a quantidade de vezes que o bloco de co-mando executado definido por uma determinada varivel. O fluxo de execuo apre-sentado na sintaxe abaixo, seguindo a ordem de 1 a 4.

    Sintaxe:

    Esta varivel primeiramente inicializada (Etapa 1), em seguida verifica-se uma condio utilizando esta varivel (Etapa 2). Caso a condio seja obedecida, o bloco de comandos executado (Etapa 3), e, por fim, esta varivel incrementada (Etapa 4). As etapas 3 e 4 continuam a ser executadas enquanto a condio da etapa 2 for obedecida.

    Exemplo: No exemplo abaixo, a varivel x incivilizado com valor 0, em seguida verifica-do se x menor ou igual a 10, como a condio obedecida, ento a varivel y recebe 3 vezes o valor de x que zero. Posteriormente x incrementado em uma unidade, era 0 e passa para 1. A condio ser checada, obedecida, as instrues do for executada e x in-crementado sequencialmente, at que x deixe de ser menor ou igual que 10.

    57

  • Funes e Bibliotecas na Linguagem C

    Uma funo em Linguagem um conjunto de operaes predefinidas e organizadas de acordo com um fluxograma. A funo main obrigatria em todos os programas, sendo o exemplo mais conhecido. Entretanto, outras funes podem ser criadas para facilitar ope-raes especficas, inclusive com reaproveitamento de cdigo. Estas funes podem es-tar no mesmo arquivo da funo main, ou em arquivos separados, o que nestes casos, esse arquivo denominado biblioteca. Estes temas so abordados com mais detalhes a seguir.

    Funes

    Como j foi dito, uma funo um conjunto de comandos ordenados previamente. Estas so criadas para facilitar uma operao que repete-se rotineiramente, inclusive com rea-proveitamento em projetos distintos, facilitando a programao desta operao por neces-sitar fazer apenas uma vez, diminuindo o tempo de desenvolvimento de um projeto maior.

    A sintaxe de um funo sempre a mesma, possuindo uma entrada que ser proces-sada de acordo com os comando descritos na funo, gerando uma sada. Isto ocorre sempre que esta funo chamada.

    Sintaxe:

    58

  • Exemplo: Um exemplo de uso de uma funo descrito abaixo, em que a funo chama-da soma possui duas entradas do tipo inteiro (int) var1 e var2. Dentro da funo estas va-riveis so somadas e retornadas em forma de (int) na varivel res.

    Esta funo soma pode ser implementada no compilador CCS de duas maneiras, sendo estas descritas a seguir.

    Modo 1: Modo 2:

    No modo 1, a funo declarada antes da funo main, porm s implementada depois desta mesma funo. Esta declarao somente para indicar que a funo existe e que est implementada em algum ponto do arquivo.

    J o modo 2, j declara a funo e implementa antes da funo main, deste modo as du-as etapas do modo 1 so realizadas ao mesmo tempo. Neste modo, as variveis de entra-

    59

  • da j so somadas e retornadas, sem o armazenamento de uma varivel temporria, como a varivel res do modo 1.

    Nunca pode-se chamar uma funo sem que ela tenha sido declarada anteriormente. Isto ocorre devido a Linguagem C funcionar compilando o cdigo de cima para baixo, e ocor-rer um erro indicando que esta funo no existe caso nenhum dos modos descritos seja seguido.

    Ressalta-se que podem ser criadas funes com vrias entradas e tipos de dados, inclusi-ve alterando os tipos de retorno. Esta seco aborda apenas um conceito inicial necess-rio para entender alguns pontos mais frente neste livro.

    Bibliotecas

    Uma biblioteca um conjunto de funes agrupadas em um mesmo arquivo, servindo como um conjunto de funes que pode ser usada pelo usurio sempre que for necess-rio. Funciona como uma biblioteca de livros, que possui vrios a disposio, mas so usa-dos somente quando necessrio.

    As bibliotecas em Linguagem C so criadas com dois arquivos, um arquivo cabealho e um arquivo de implementao. O arquivo cabealho possui a extenso .h devido o termo header em ingls que significa cabealho. O arquivo de implementao possui a exten-so .c j que um arquivo compilvel. Os dois arquivos esto associados por possurem o mesmo nome.

    O arquivo cabealho utilizado para declarar todas as funes presentes na biblioteca, servindo para que usurio da biblioteca saiba as funes que esto disponveis. Fazendo a analogia a biblioteca de livros, funciona como um catlogo dos livros presentes na biblio-teca. Neste arquivo no realizado a implementao.

    A implementao de cada uma das funes declaradas no arquivo cabealho realizada no arquivo compilvel (.c) , pois somente um arquivo compilvel pode processar as entra-das e gerar sadas no compilador, que no nosso caso o CCS C.

    60

  • A seguir demonstrado uma biblioteca de uma calculadora chamada calc, nela existem quatro funes: soma, subtrao, multiplicao e diviso. No arquivo compilvel ou de im-plementao (calc.c) as funes so implementadas de acordo com suas entradas, opera-es e sadas. J o arquivo de cabealho (calc.h), possui todas as funes disponveis para o usurio da biblioteca da calculadora.

    1. Arquivo calc.h

    2. Arquivo calc.c

    61

  • 3. Arquivo main.c

    De forma resumida, tm-se que o arquivo que possui a funo main( ) chama as funes da biblioteca criada anteriormente. Para isto, basta adicionar a linha #include calc.h que inclui a biblioteca calc que est no mesmo diretrio do arquivo da funo main.

    62

  • Vetores (Arrays)

    Conjunto de elementos do mesmo tipo agrupados em uma mesma varivel. Estes elemen-tos so ordenados por um ndice, devendo ser declarados e trabalhados de maneira ade-quada, devido os mesmos serem tipos de dados distintos dos demais vistos anteriormen-te. A seguir so detalhados as maneiras adequadas de criar e manipular estes tipos de da-dos.

    Declarao ou instanciao

    Existe dois tipos de alocao do tamanho dos vetores, a dinmica e a esttica. A progra-mao para microcontraldores aceita apenas a esttica, em que o tamanho do vetor de-finido previamente e no ser alterado ao longo da execuo do cdigo inteiro. Isto ocorre visto que as variveis devem ser alocadas no comeo de cada programa para que o com-pilador CCS C no apresente nenhum erro. A alocao dinmica aloca a memria medi-da que ela ser necessria, porm esta metodologia no aceita pelo compilador utiliza-do devido o tamanho ser exigido no comeo da execuo. Sendo assim, seguem abaixo exemplo da alocao de memria no modo esttico.

    Exemplo:

    int vet1[30]; // declarao do vetor vet1 do tipo inteiro (int) e com 30 posies.

    float vet2[20]; // declarao do vetor vet2 do tipo inteiro (float) e com 20 posies.

    char vet3[10]; // declarao do vetor vet3 do tipo inteiro (char) e com 10 posies.

    63

  • Atribuio

    A atribuio a etapa de atribuir valores s posies do vetor criados previamente. Cada vetor com N posies de memria alocadas possui seu ndices de ordenao comeando com valor 0 e terminando em N-1.

    Por exemplo, um vetor com 30 posies possui seus ndices comeando em 0 e terminan-do em 29, o que totaliza 30 posies alocadas. Cada posio funciona como uma varivel comum, podendo receber algum valor ou ser usada para calcular outra varivel, conforme exemplos a seguir.

    Exemplo:

    int vet[30]; // declarao do vetor vet do tipo inteiro (int) e com 30 posies.

    vet[0]=10; // Atribuio da posio 0 do vetor vet com valor 10 .

    vet[1]=20; // Atribuio da posio 1 do vetor vet com valor 20 .

    vet[2]=vet[0]+vet[1]; // Atribuio da posio 2 do vetor vet com valor vet[0]+vet[1]

    // Considerando que vet[0] 10 e vet[1] 20, vet[2] receb 30.

    Percorrendo vetor completo (Varrendo vetor)

    Para percorrer um vetor completo basta criar um bloco utilizando o comando for e utilizar a varivel de incremento do for como varivel de indexao do vetor criado, ressaltando que este for deve percorrer toda a extenso do vetor, podendo ser na ordem crescente ou decrescente.

    O exemplo a seguir utiliza um for utilizando uma varivel k recebendo o valor 0 inicialmen-te e indo at o valor tam_vet, sendo incrementada de 1 em 1 ( k++ ). No exemplo 1, o ve-

    64

  • tor vet possui 30 posies, ento o valor tam_vet 30, mesmo valor da quantidade de po-sies, sendo todas as posies zero aps o comando for.

    Exemplo 1 - Zerando as 30 posies do vetor vet.

    Exemplo 2 - Atribuindo para cada posio de vet o valor do seu ndice

    Exemplo 3 - Zerando todas as posies de vetor vet. Reflita como!!!

    65

  • Diretivas do compilador

    As diretivas do compilador a seguir so comandos prprios do compilador CCS, podendo ser utilizadas para facilitar algumas configuraes e execuo de tarefas especficas. A se-guir so descritas algumas destas diretivas.

    #ASM e #ENDASM

    Utilizada para inserir cdigo assembly diretamente em um programa em C. Deste modo, algumas subrotinas j implementadas em Assembly podem ser incorporadas a um progra-ma em Linguagem C sem precisar ser implementado nesta nova linguagem de programa-o.

    Sintaxe:

    Exemplo:

    66

  • #define

    Utilizada para substituir o identificador pelo texto especificado imediatamente depois dele. Facilitando o uso de funes e variveis pelo usurio.

    Sintaxe:

    Exemplo:

    #fuses

    Utilizada para programar as opes da palavra de configurao dos PICs.

    Sintaxe:

    Exemplo:

    67

  • #use rs232

    Ativa o suporte a comunicao serial (RS-232). Alm disto apresenta as configuraes utili-zadas na comunicao via RS-232, entretanto este assunto ser abordado posteriormente com mais detalhes.

    Sintaxe:

    Exemplo:

    #use delay

    Informa ao compilador a velocidade de clock do sistema de destino. Deve ser o mesmo valor do cristal utilizado no hardware conectados aos pinos OSC1 e OSC2.

    Sintaxe:

    Exemplo:

    68

  • Projeto bsico de hardware e software

    3

    Nesta unidade iro ser apresentadas as configuraes bsicas de hardware e software para que as aplicaes do restante do livro possam ser executadas de forma adequada. Todas as aplicaes do livro devem ter este hardware bsico para poder funcionar adequa-damente, e devem seguir as orientaes do software bsico para que sejam executados com sucesso.

    69

  • Configurao bsica de hardware

    A configurao bsica do hardware do PIC 18F2550 so 3 componentes: reset, oscilador e alimentao. Estes elementos no podem faltar em nenhuma aplicao, sendo necess-rios para que qualquer uma funcione adequadamente. O que diferencia as aplicaes so os outros componentes acrescidos aos componentes bsicos. Este hardware bsico apresentado abaixo.

    1 - Pinos 20 e 19 - Alimentao

    Estes pinos devem ser alimentados com 0V o pino 19 e 5V o pino 20 para que o MCU possa funcionar adequadamente. Nunca troque os nveis de tenso ou passe de 5,5 V a alimenta-

    o do pino 20, pois nestes casos o MCU ir ser danificado.

    70

  • 2 - Pino 1 - Funo MCLR - Este pino serve para reset da aplicao, fazendo que a execuo do programa seja reini-ciada sempre que este pino for para 0V e retornar para 5V. Do modo que est apresentado no hardware ao lado, o programa ir apenas iniciar a execu-o, e para reset deve-se alterar este hardware.

    3 - Pinos 9 e 10 - Oscilador - Estes pi-nos controlam a execuo das instru-es, determinando os ciclos de mqui-na e incrementando o contador de progra-ma. Deve-se ligar um cristal e dois capa-citores cermicos do modo apresenta-dos, onde estes valores so determina-dos pelo fabricante. Abaixo so descritos os valores para o PIC 18F2550.

    Todos os projectos e exemplos deste livro foram testados com cristal de 20 MHz e capaci-tores de 22pF, obedecendo o que o fabricante pede, j que sua exigncia que seja mai-or do que 15 pF.

    71

  • Exemplo de fonte de alimentao

    Dentre as formas de alimentao, pode-se utilizar fontes de alimentao reguladas, 4 pi-lhas de 1,5V em sria, somando-se 6V e colocar um diodo em srie para cair 0,7 V e ficar com 5,3V. Outra maneira seria utilizar a prpria USB, mas necessrio circuito de prote-o adequado para no danificar o MCU e o PC. So vrias as alternativas, mas aconse-lha-se que utilize fontes reguladas de tenso ou bancadas com tenso reguladas em 5V. Embora no seja o foco deste livro, segue abaixo um exemplo de fonte de alimentao de 5V utilizando uma fonte de 12V, muito comum em aparelhos celulares diversos.

    Componentes:

    Capacitor 100uF/50V, Capacitor 10uF/25V, Conector KRE02, Regulador LM7805, Diodo 1N4007, 02 Capacitores 100nF, Fios e conectores.

    72

  • Configurao bsica de software

    Abaixo esto descritos os principais componentes do software e uma breve descrio de cada etapa necessrios para rodar o programa e gravar com sucesso no Microcontrolador PIC18F2550.

    73

  • Metodologia de debug, gravao e testes

    Todos as prticas desenvolvidas e apresentadas ao decorrer deste livro foram simula-das e testadas em Protoboard e, posteriormente, projetadas em placas de Circuito Impres-so.

    A simulao da execuo dos projetos deste livro foi realizada no software Proteus, que permite montar o circuito do hardware de cada aplicao, carregar o programa, alm de executar as operaes pr-programadas. Este software permite carregar o arquivo *.hex e o *.cof, sendo o primeiro arquivo para o modo EXECUO e o segundo para o modo DEBUG, onde possvel acompanhar a execuo das operaes e o valor das vari-veis passo-a-passo. Vale ressaltar que o simulador no prev algumas protees neces-srias para o sistema, como a necessidade de resistores e reguladores, por exemplo.

    A gravao dos programas no Microcontrolador PIC18F2550 foi realizada utilizando o PICKIT 2 da Microchip e seus programas. Aps gravar os Microcontroladores, todos os cir-cuitos e aplicaes foram testados em Protoboard, utilizando a fonte de tenso controla-da demonstrada na Seo 3.1.

    Vale ressaltar que todas as aplicaes devem ter o hardware bsico, uma fonte de ali-mentao controlada em 5V e obedecer ao software bsico para que a gravao e a exe-cuo sejam realizadas com sucesso.

    Detalhes e dvidas, por favor, contactar o autor, visto que este livro no tem este en-foque e todos estes softwares so bem difundidos e possuem material de fcil acesso.

    74

  • Entrada e sada de dados digitais

    4

    Nesta unidade sero abordados as funes bsicas do CCS, como funes de espe-ra, funes de entrada e sada digital para pinos e funes de entrada e sada digital para portas. A configurao do sentido das portas tambm ser abordada e exemplos sero apresentados.

    75

  • Funes de espera

    Como sugere o nome destas funes, elas implementam um atraso na execuo do pro-grama quando so chamadas. Estas funes param o programa quando so chamadas, esperando o tempo programado na linha de comando em que o comando foi executado. Este tempo de espera pode ser especificado em ciclos, microssegundos ou milissegun-dos, sendo a funo para cada um apresentado a seguir.

    Atraso em ciclos

    Descrio: Aguarda n ciclos de mquina.

    Observao: A escrita da funo tambm pode ser em minsculo.

    Atraso em microssegundos

    Descrio: Aguarda n microssegundos.

    76

    Funo: DELAY_CYCLES

    Sintaxe: DELAY_CYCLES ( n ) ;

    Exemplo: DELAY_CYCLES ( 5 ) ;

    Funo: DELAY_US

    Sintaxe: DELAY_US ( n ) ;

    Exemplo: DELAY_US ( 10 ) ;

  • Observao 1 : A escrita da funo tambm pode ser em minsculo.

    Observao 2: Quando n estiver com valor 1.000.000, isto representa 1 segundo. Entretan-to, esta relao s ir funcionar se o hardware e o software estiverem com valores de clocks iguais, o cristal no hardware e o #use delay no software.

    Atraso em milisegundos

    Descrio: Aguarda n milisegundos.

    Funo: DELAY_MS

    Sintaxe: DELAY_MS ( n ) ;

    Exemplo: DELAY_MS ( 10 ) ;

    Observao 1 : A escrita da funo tambm pode ser em minsculo.

    Observao 2: Quando n estiver com valor 1.000, isto representa 1 segundo. Entretanto, esta relao s ir funcionar se o hardware e o software estiverem com valores de clocks iguais, o cristal no hardware e o #use delay no software.

    77

  • Pinos de entrada e sada digitais no PIC 18F2550

    As funes de entrada e sada de dados em um Microcontrolador baseia-se nas funes de entrada e sada de bits em pinos especficos do hardware do mesmo. Cada um destes pinos pode assumir o valor de um bit, podendo ser 0 ou 1 no software, o que representa 0V ou 5V no pino do hardware, respectivamente. Cada grupo de 8 pinos forma uma porta, podendo ser processado como 1 byte.

    Isto possvel porque 1 byte so 8 bits, do mesmo modo que 1 porta so 8 pinos, e do mesmo modo que cada pino pode assumir os valores 0 e 1 por ser apenas 1 bit, ento uma porta pode assumir o valor de 8 bits, podendo assumir qualquer valor entre 0 e 255, que so os valores possveis de 1 byte.

    A seguir so apresentados os pinos de um microcontrolador PIC do tipo 18F2550, apre-sentando todas as funes dos 28 pinos presentes neste microcontrolador.

    De forma resumida, tem-se que o microcontrolador 18F2550 possui 3 portas, sendo que a porta A possui 7 pinos, a porta B 8pinos e a porta C so 7 pinos. Entretanto, todos os re-gistrados de dados destas portas possuem 8 bits, sendo que a porta que no possui 8 pi-

    78

  • nos deve-se ausncia apenas no hardware, pois no registrador esta sada teoricamente existe.

    Resumo:

    ! Porta A com 7 pinos

    ! Porta B com 8 pinos

    ! Porta C com 7 pinos

    ! Total de 22 pinos de I/O

    Pinos de Entrada/Sada digitais ( 1 bit )

    O Microcontrolador 18F2550 possui 22 pinos digitais de Entrada ou Sada de dados, sen-do cada um deles respectivo a 1 bit especfico na memria do Microcontrolador. Estes pi-nos so agrupados de 8 em 8 pinos, o que totaliza 3 portas digitais. Estes pinos so apre-sentados abaixo. Vale a penas ressaltar que todos pinos possuem mais de uma funo, e deve-se habilitar a instruo que deseja e desabilitar as demais. Em muitos casos o CCS j faz isto automaticamente, necessitando realizar estas configuraes em outros. Caso fossemos utilizar outro compilador precisaramos realizar TODAS as configuraes.

    79

  • Porta Digital A de Entrada/Sada (8 bits, mas somente 7 pinos)

    Ao lado so apresentados o gru-po de pinos que forma a porta A. O software possui a memria da porta A com 8 pinos, mas o hardware possui apenas 7, deven-do a ausncia deste pino ser pre-vista no software.

    Os pinos apresentam as funes RA0, RA1, RA2, RA3, RA4, RA5, RA6, faltando o RA7.

    Porta Digital B de Entrada/Sada (8 bits e 8 pinos)

    Abaixo so apresentados o grupo de pinos que forma a porta B. O software possui a memria da por-ta A com 8 pinos e o hardware tam-bm.

    Os pinos apresentam as funes RB0, RB1, RB2, RB3, RB4, RB5, RB6 e RB7, no faltando nenhum pino.

    80

  • Porta Digital C de Entrada/Sada (8 bits, mas somente 7 pinos)

    Ao lado so apresentados o grupo de pinos que forma a porta C. O softwa-re possui a memria da porta C com 8 pinos, mas o hardware possui ape-nas 7, devendo a ausncia deste pino ser prevista no software.

    Os pinos apresentam as funes RC0, RC1, RC2, RC4, RC5, RA6 e RC7, faltando o RC3.

    81

  • Funes I/O de pinos digitais

    Um pino pode possuir dois estados ( 0 ou 1, alto ou baixo, 0 ou 5V). Para aumentar sua funcionalidade, os mesmos pinos podem ser usados tanto como sada quanto como entra-da. Para definir um pino de uma porta como entrada ou sada, preciso definir os bits do registrador TRIS como 1, para entrada, ou 0, para sada. Cada pino tem o seu registrador TRIS correspondente e isto ser abordado adiante.

    Seguem abaixo as funes do compilador CCS para leitura e sada dos pinos do Micro-controlador.

    Colocar um pino para 0V, nvel lgico baixo

    Descrio: Coloca o pino especificado do microcontrolador em nvel lgico 0, que corres-ponde a tenso de 0V.

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao dos pinos dada pelo sufixo PIN_ , seguido por sua porta e por sua numerao. Deste modo, o exemplo apresentado est colocando para 0V o pino 1 da porta B atravs do nome PIN_B1.

    82

    Sintaxe: OUTPUT_LOW ( PINO ) ;

    Funo: OUTPUT_LOW

    Exemplo: OUTPUT_LOW ( PIN_B1 ) ;

  • Colocar um pino para 5V, nvel lgico alto

    Descrio: Coloca o pino especificado do microcontrolador em nvel lgico 1, que corres-ponde a tenso de 5V.

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao dos pinos dada pelo sufixo PIN_ , seguido por sua porta e por sua numerao. Deste modo, o exemplo apresentado est colocando para 5V o pino 1 da porta B atravs do nome PIN_B1.

    Colocar um pino especfico para o valor desejado

    Descrio: Coloca o pino especificado do microcontrolador em nvel lgico desejado, sen-do OV quando o valor for 0 e 5V quando o valor for 1. ( Resumo: 0->0V , 1->5V ).

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao dos pinos dada pelo sufixo PIN_ , seguido por sua porta e por sua numerao. Deste modo, o exemplo apresentado est colocando para 5V o pino 1 da porta B atravs do nome PIN_B1. Isto porque o valor colocado na funo 1.

    83

    Exemplo: OUTPUT_HIGH ( PIN_B1 ) ;

    Sintaxe: OUTPUT_HIGH ( PINO ) ;

    Funo: OUTPUT_HIGH

    Funo: OUTPUT_BIT

    Sintaxe: OUTPUT_BIT ( PINO , VALOR ) ;

    Exemplo: OUTPUT_HIGH ( PIN_B1 , 1 ) ;

  • Ler um pino especfico

    Descrio: Ler o pino especificado do microcontrolador, caso ele esteja com nvel lgico alto, a funo retorna 1. Caso ele esteja com nvel lgico baixo, retorna 0.

    Resumo:

    o Retorna 0 quando pino est 0V

    o Retorna 1 quando pino est 5V

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao dos pinos dada pelo sufixo PIN_ , seguido por sua porta e por sua numerao. Deste modo, o exemplo apresentado est lendo o pino 1 da porta B atravs do nome PIN_B1. Aps executar esta instruo, a varivel a assumir o valor 1 caso o pino esteja com 5V ou o valor 0 caso o pino esteja com 0V.

    84

    Funo: INPUT

    Sintaxe: INPUT ( PINO ) ;

    Exemplo: int a = INPUT ( PIN_B1 ) ;

  • Funes I/O de portas digitais

    Uma porta um conjunto de pinos em um MCU que podem ser acessados simultanea-mente. Para aumentar sua funcionalidade, os mesmos pinos de cada porta podem ser usados tanto como sada quanto como entrada, podendo ser parte destes usado como sada e o restante como entrada se for o caso. Para definir um pino de uma porta como entrada ou sada, preciso definir os bits do registrador TRIS como 1, para entrada, ou 0, para sada. Cada porta tem o seu registrador TRIS correspondente, que so a juno dos registradores individuais de cada pino. O PIC18F2550 tem trs portas: A, B e C.

    Colocar 8 bits (1 byte) na sada de uma porta

    Descrio: Coloca um byte na porta X do microcontrolador, em que X pode ser A, B ou C para o PIC18F2550. A varivel valor dos exemplos abaixo podem assumir qualquer valor da faixa de 0 a 255 j que corresponde a 1 byte.

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao da porta A, B ou C na posio onde se encontra a varvel X na apresentao da funo. Os valores enviados para a porta podem estar em qualquer sistema numrico (binrio, octal, decimal ou hexadecimal), desde que esteja entre 0 e 255 do sistema decimal.

    85

    Funo: OUTPUT_X

    Sintaxe: OUTPUT_A( valor ) ;! ! OUTPUT_B( valor ) ;! ! OUTPUT_C( valor ) ;

    Exemplo: OUTPUT_A ( 255 ) ;

  • Exemplos

    86

    Exemplo 1: OUTPUT_B ( 0X29

    Exemplo 2: OUTPUT_B ( 129 ) ;

    Exemplo 3: OUTPUT_B ( 0B10101010 ) ;

    129$$$$$$$$$$Decimal$$

    $1$$$0$$$0$$$0$$$0$$$0$$$0$$$1$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$RB7$$RB6$$RB5$$$RB4$$RB3$$RB2$$RB1$$RB0$128$$_64$$$32$$$$$$$$$$16$$$$$8$$$$$$$4$$$$$$$2$$$$$$$1$$$.$

  • Ler um valor de 8 bits da entrada de uma porta

    Descrio: Ler um byte da porta X do microcontrolador, em que X pode ser A, B ou C para o PIC18F2550. O valor de leitura da porta pode ser qualquer valor da faixa de 0 a 255 j que corresponde a 1 byte.

    Observao 1: A escrita da funo tambm pode ser em minsculo.

    Observao 2: A identificao da porta A, B ou C na posio onde se encontra a varvel X na apresentao da funo. Os valores enviados para a porta podem estar em qualquer sistema numrico (binrio, octal, decimal ou hexadecimal), desde que esteja entre 0 e 255 do sistema decimal.

    Analisando exemplo: supondo que a varivel var recebe o valor 121, ento isto quer dizer que a leitura dos 8 pinos da porta A 129. Converten-do este valor para binrio, tem-se que os pinos B7 e B0 esto com 5V, enquanto todos os ou-tros esto com 0V.

    87

    Funo: INTPUT_X

    Sintaxe: valor = INPUT_A ( ) ;! ! valor = INPUT_B ( ) ;! ! valor = INPUT_C ( ) ;

    Exemplo:

    ! ! ! unsigned int var;! ! ! var = input_a( );

    129$$$$$$$$$$Decimal$$

    $1$$$0$$$0$$$0$$$0$$$0$$$0$$$1$.$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$RB7$$RB6$$RB5$$$RB4$$RB3$$RB2$$RB1$$RB0$128$$_64$$$32$$$$$$$$$$16$$$$$8$$$$$$$4$$$$$$$2$$$$$$$1$$$.$

  • Configurao do sentido de I/O digitais

    Um pino pode possuir dois estados (0 ou 5V) e pode funcionar como entrada ou sada de dados. Cada porta possui um registrador TRIS, que controla a direo do fluxo de dados nos pinos. As configuraes do TRIS podem ser:

    Padro

    Fixo

    Rpido

    Modo Padro

    Descrio: Compilador adiciona cdigo para configurar o registrador TRIS e tornar um pino entrada ou sada conforme instruo executada.

    88

    Diretiva de configurao: ! !! ! #use standard_io (porta)

    Cdigo do compilador gerado:

    ! ! BSF! ! STATUS.5! !! ! BCF! ! TRISB.0!! ! BCF! ! STATUS.5!! ! BSF! ! TRISB.0

    Exemplo: OUTPUT_HIGH ( PIN_B0 ) ;

  • Compilador sempre gera cdigo de configurao do compilador TRIS, mesmo que o acesso seja sequencial.

    Desvantagem: operao mais lenta quando h intensa utilizao das portas de E/S;

    Vantagens: Facilidade de uso e Pino permanece sempre no ltimo estado configurado.

    Exemplo de aplicao no Modo Padro

    Neste exemplo, a porta C foi configurada no modo padro, deste modo os pinos so con-figurados automaticamente de acordo com o seu uso.

    Primeiramente, os pinos C0, C1 e C2 so colocados para alto, esperam 200 milisegun-dos. Em seguida, os mesmos pinos so colocados para baixo e esperam os mesmos 200 milisegundos.

    Devido sua configurao automaticamente, os pinos iro executar exatamente o que foi solicitado.

    89

    #include #fuses HS#use standard_io(c)#use delay(clock = 20000000)

    main(){! while (1)! {! ! output_high(pin_c0);! ! output_high(pin_c1);! ! output_high(pin_c2);! ! delay_ms(200);! ! output_low(pin_c0);! ! output_low(pin_c1);! ! output_low(pin_c2);! ! delay_ms(200);! }}

  • Modo Fixo

    Descrio: Determina ao compilador quais os pinos especificados sero utilizados sem-pre como sadas. Nenhuma funo de programao altera codificao prvia do registra-dor TRIS.

    Exemplo na execuo aps configurao do exemplo anterior, em vermelho:

    Sabendo que os pinos C0 e C1 so configurados como sada e os demais da porta C como entrada, ento as seguintes concluses so possveis:

    ! output_low(pin_c0): realmente atribui nvel lgico 0 a RC0;

    ! x = input(pin_c0):Refora a configurao de sada do pino; x recebe o estado de sa-da de RC0.

    ! output_low(pin_c2): RC2 no recebe valor 0, pois foi configurado como entrada.

    Diretiva de configurao: ! !! ! #use fixed_io (portaX_outputs = pinos)

    Exemplo:

    ! #use fixed_io (c_outputs = pin_c0, pin_c1 )

    ! int x;! output_low(pin_c0);! x = input (pin_c0);! output_low (pic_c2);

    90

  • Exemplo de aplicao no Modo Fixo

    Neste exemplo, a porta C foi configurada no modo fixo, deste modo os pinos C0 e C1 so configurados como sada e todos os demais da porta C como entrada.

    Primeiramente, os pinos C0, C1 e C2 so coloca-dos para alto, esperam 200 milisegundos. Em se-guida, os mesmos pinos so colocados para bai-xo e esperam os mesmos 200 milisegundos.

    Devido sua configurao apenas os pinos C0 e C1 vo obedecer os comandos, pois s os mes-mos funcionam como sada. O pino C2 no obe-decer os comandos j que foi configurado como entrada.

    Modo Rpido

    Descrio: Compilador no gera cdigo de configurao da direo para os registradores TRIS, acessando as portas substancialmente mais rpido. O programador deve providen-ciar toda a configurao necessria.

    Diretiva de configurao: ! !! ! #use fast_io (porta)

    Exemplo:

    ! #use fast_io ( A )

    91

    #include #fuses HS#use fixed_io(c_outputs=pin_c0, pin_c1)#use delay(clock = 20000000)

    main(){! while (1)! {! ! output_high(pin_c0);! ! output_high(pin_c1);! ! output_high(pin_c2);! ! delay_ms(200);! ! output_low(pin_c0);! ! output_low(pin_c1);! ! output_low(pin_c2);! ! delay_ms(200);! }}

  • Funes de configurao do modo rpido:

    Descrio: Funo para configurar manualmente a direo dos pinos das portas, como e n t r a d a o u s a d a . N e c e s s r i o s e m p r e q u e u s a r o m o d o r p i d o .

    Exemplo de aplicao no Modo Rpido

    No exemplo a seguir, a porta C foi configurada no modo rpido, deste modo os pinos so configurados de acordo com a funo set_tris_c.

    Primeiramente, o pino C1 configurado como entrada e todos os demais como sada. Em seguida, o software solicita que os pinos C0, C1 e C2 fiquem em nvel lgico alto, depois solicita a espera de 200 milisegundos. Em seguida, os mesmos pinos so colocados para baixo e esperam os mesmos 200 milisegundos.

    Devido sua configurao na funo set_tris_c, os pinos C0 e C2 iro executar exatamen-te o que foi solicitado. J o pino C1 no ir permitir sair nada que foi configurado como en-trada, ento a funo ser executada, no ir parar o programa, s no ir ser executada.

    Funo: set_tris_x (valor)

    Sintaxe: ! ! set_tris_a (valor)! !! ! set_tris_b (valor)

    Exemplo: set_tris_b(131);

    92

  • Exemplo:

    93

    #include #fuses HS#use fast_io(C)#use delay(clock = 20000000)

    main(){while (1){set_tris_c(0b00000010); // apenas o pino c1 como entrada //(c7=0 c6=0 c5=0 c4=0 c3=0 c2=0 c1=1 c0=0)output_high(pin_c0);output_high(pin_c1);output_high(pin_c2);delay_ms(200);output_low(pin_c0);output_low(pin_c1);output_low(pin_c2);delay_ms(200);}}

  • Leitura e escrita por endereo dos pinos e por-tas O CCS facilita a programao com uma interface e linguagem amigvel, alm de auxi-liar o usurio desde funes bsicas at funes avanadas. Um exemplo disto so as funes de entrada e sada de dados digitais apresentados. Entretanto, possvel progra-mar atravs do endereamento dos pinos, conforme realizado por outros compiladores.

    Para acessar os pinos deste modo, faz-se necessrio identificar o endereo das por-tas e de seus respectivos registradores TRIS. Para fazer isto deve-se acessar a aba View do programa CCS e seleccionar a opo Special Register.

    Aps seleccionar esta opo, a janela apresentada abaixo ir abrir. Voc deve selecio-nar o microcontrolador que est usando e procurar as portas e os registradores do mes-mo, conforme apresentado em destaque. O endereo estar na primeira coluna esquer-da.

    94

  • De forma resumida, tem-se os valores dos endereos das portas e dos registradores TRIS para o PIC18F2550 so:

    Para poder acessar diretamente estes endereos basta criar variveis constantes como variveis globais. Para endereos de portas e registradores TRIS necessrio criar uma constante do tipo byte e para pinos e registradores TRIS de um pino deve-se criar uma constante bit.

    Acesso s portas pelos seus endereos

    Sabendo que os endereos de porta A so F80 para a porta e F92 para o TRIS, ento para criar as variveis para acesso a esta porta, deve-se seguir a seguinte sintaxe:

    Estas variveis devem ser declaradas de forma global, conforme o exemplo abaixo:

    95

    Porta A TRIS A Porta B TRIS B Porta C TRIS C

    F80 F92 F81 F93 F82 F94

    Sintaxe: ! ! ! ! #byte PORTAA = 0xF80 ! ! ! ! #byte TRISA = 0xF92

    Exemplo parte 1:

    #include #fuses HS#use delay(clock = 20000000)#byte PORTAA = 0xF80 #byte TRISA = 0xF92 main(){! ...}

  • Deste modo para atribuir valores para o TRISA e para PORTA, pode-se atribuir direto para a varivel criada. Isto substitui as funes set_tris_a( ) e a funo output_a( ), isto pode ser observado no exemplo abaixo:

    Neste exemplo, TRISA = 0 equivale a set_tris_a(0), enquanto PORTAA = 255 equivale a output_a(255). Para acessar as outras portas, basta alterar os respectivos endereos j apresentados.

    Acesso aos pinos pelos seus endereos

    Sabendo que os endereos de porta B so F81 para a porta e F93 para o TRIS, ento para criar as variveis para acesso aos pinos desta porta, deve-se primeiramente criar as variveis que acessam a porta desejada, conforme a sintaxe apresentada anteriormente. A partir desta varivel deve-se criar o bit que poder acessar o pino desejado, que no exemplo abaixo o pino B1:

    96

    Exemplo:

    #include #fuses HS#use delay(clock = 20000000)#byte PORTAA = 0xF80 #byte TRISA = 0xF92 main(){! TRISA = 0; // equivale a 0b00000000, ou seja, todos os registradores com 0! while (1)! {! ! PORTAA = 255; // equivale a 0b11111111, ou seja, todos os pinos com 1! ! delay_ms(500);! ! PORTAA = 0; // equivale a 0b00000000, ou seja, todos os pinos com 0! ! delay_ms(500);! }}

    Sintaxe: ! ! ! ! #byte TRISB = 0xF93! ! ! !! ! ! ! #byte PORTAB = 0xF81 ! ! ! ! #bit B1 = PORTAB.1

  • O exemplo abaixo contm a configurao de todas as portas do PIC18f2550, alm de cri-ar as variveis de acesso dos pinos A0 e B5. Os pinos da porta B esto sendo usados como sada, e os da porta A como entrada. Neste exemplo, o pino A0 avaliado, se esti-ver com nvel lgico alto, os pinos da porta B so todos colocados para 5V, depois todos para 0V, depois somente B5 posto para 5V e para terminar este pino vai para 0V.

    #include #fuses HS#use delay(clock = 20000000)

    #byte PORTAA = 0xF80 #byte TRISA = 0xF92

    #byte PORTAB = 0xF81 #byte TRISB = 0xF93

    #byte PORTAC = 0xF82 #byte TRISC = 0xF94

    #bit B5 = PORTAB.5#bit A0 = PORTAA.0

    main(){! TRISB = 0; // equivale a 0b00000000, ou seja, todos os registradores com 0! TRISA = 255; // equivale a 0b11111111, ou seja, todos os registradores com 1! while (1)! {! if(A0 == 1)//Para ler o pino basta checar a varivel de acesso do mesmo! {! ! PORTAB = 255; // equivale a 0b11111111, ou seja, todos os pinos com 1! ! delay_ms(500);! ! PORTAB = 0; // equivale a 0b00000000, ou seja, todos os pinos com 0! ! delay_ms(500);! ! B5 = 1; // Colocou apenas o pino B5 para 1! ! delay_ms(500);! ! B5 = 0; // Colocou apenas o pino B5 para 0! ! delay_ms(500);! }! }}

    97

  • Acionamento de LED

    O termo LED a sigla em ingls de Diodo Emissor de Luz, deste modo, este dispositi-vo segue os mesmos princpios de um diodo, com a particularidade que ele emite luz.

    Um diodo apenas permite a passagem de corrente eltrica em um sentido, impedindo a passagem de corrente quando polarizado de forma inversa.

    Existe aplicaes com passagem de corrente com polaridade inver-sa, mas este livro adota apenas a regra geral dos diodos. Observan-do a figura ao lado, o LED s permite a passagem de corrente eltri-ca no sentido da corrente em verde, no permitindo a passagem da corrente quando a mesma possui o sentido da corrente em vermelho.

    Outro ponto importante que o LED no controla a intensidade da corrente eltrica, devendo ter em srie com o mesmo, antes ou depois, uma resistncia para limitar a cor-rente, evitando que o mesmo queime por sobrecorrente. Por outro lado, o LED precisa de uma corrente em torno de 15 mA para emitir luz, ento faz-se necessrio colocar um dos resistores comerciais 300, 330 ou 390 ohms. O circuito ligado ao MCU ficar assim:

    Sendo assim, quando o pino do MCU ligado ao circuito do LED estiver com 5V, ele acen-de. Caso esteja com 0V, o LED apaga.

    98

    i

    i

    PIC18F2550

    330 ohms

  • Leitura de um boto

    Um boto est associado mudana de estado de tenso de um determinado ponto do circuito, fazendo que este ponto esteja com uma tenso x quando estiver pressionado e uma tenso y quando estiver despressionado.

    Nas aplicaes deste livro, o boto estar sempre associ-ado em srie com um resistor, em que em uma ponta estar uma tenso de 5V e na outra a tenso de 0V. O ponto de leitu-ra desta tenso pelo microcontrolador entre o boto e o re-sistor, conforme apresentado ao lado pelo ponto A em azul. O resistor utilizado nos testes deste livro foi 1K Ohms.

    99

    +5V

    PIC18F25501K

    +5V

    PIC18F2550 A1K

    0V

    +5V

    PIC18F2550

    A1K

    Quando o boto est aberto, no existe tenso no resistor, ento a tenso proveniente do terra chega ao pino, fazendo com que o mesmo fique com 0V na entrada.

    Quando o boto est fechado, existe tenso no resistor de 5V, en-to a tenso proveniente da alimen-tao (VCC) chega ao pino, fazendo com que o mesmo fique com 5V

    5

  • Prticas

    Prtica 01: Projete um hardware e um software utilizando MCU 18f2550 que faa um led piscar de 1 em 1 segundo.

    Prtica 02: Projete um hardware e um software utilizando MCU 18f2550 que simule um se-mforo com leds verde, vermelho e amarelo, em que o tempo de verde e vermelho aceso so 10 segundos e o amarelo so 2 segundos.

    Prtica 03: Projete um hardware e um software utilizando MCU 18f2550 que implemente um ou exclusivo de 3 entradas e acione um led para demonstrar as sadas com nvel lgi-co alto.

    Observao: Todos os projetos devem ter o hardware bsico e obedecer o software bsi-co, apresentados no Captulo 3, para funcionar adequadamente. Quanto a leitura dos pi-nos com botes e o acionamento com LEDs, deve-se obedecer s Sees 6 e 7 deste mesmo Captulo.

    100

  • Display de 7 segmentos

    5

    Neste Capitulo ser apresentado o display de 7 segmentos, detalhando seu funcionamen-to, hardware bsico, software bsico, alm do uso de vetores para o software e da tcnica de multiplexao, que permite o uso de vrios displays com uma menor quantidade poss-vel de pinos.

    101

  • Funcionamento

    Existem dois tipos de display de 7 segmentos, o de anodo comum e o de catodo comum. O que diferencia os dois tipos est ligado ao sentido de corrente permitido pelo diodo, vis-to que este conduz somente quando est polarizado diretamente. Sendo assim, o display de anodo comum deve conectar o fio comum no +5V, enquanto o catodo comum deve li-gar o comum ao terra. Abaixo so apresentados os dois tipos de display de 7 segmentos:

    O display ctodo comum deve polarizar o fio comum com 0V, deve possuir um resistor de 330 Ohms em cada um dos 8 pinos para limitar a corrente em cada LED individualmente. O acionamento de cada LED ser feito com uma tenso de 5V e com 0V cada LED apaga.

    O display nodo comum deve polarizar o fio comum com +5V, deve possuir um re-sistor de 330 Ohms em cada um dos 8 pi-nos para limitar a corrente em cada LED individualmente. O acionamento de cada LED ser feito com uma tenso de 0V e com 5V cada LED apaga.

    Vale destacar que o LED precisa ter diferena de tenso para gerar corrente, e de um re-sistor para limitar a corrente. O pino pto o ponto do display de 7 segmentos, utilizado para apresentar as casas decimais.

    102

  • Para estudo e anlise das sadas de um display de 7 seg-mentos ser adotado, neste exemplo, o display de ctodo comum. Deste modo, o fio comum deve ser aterrado. Alm disto, deve-se conectar um resistor em cada entrada (de a at g) para limitar a corrente em cada diodo para que este no queime por sobre-corrente, porm que permita passar um corrente em torno de 200mA, visto que esta capaz de acender cada LED do display. Este resistor pode ser 300, 330 ou 390 ohms.

    Todo display de 7 segmentos, independente se ctodo ou nodo comum, possui a des-crio apresentada acima. Deste modo, quando faz-se necessrio aparecer o valor zero neste display, ento deve-se acender todos os LEDs, exceto o da letra g. Utilizando o mesmo princpio para aparecer o nmero 1, deve-se acender b e c, apagando todos os outros. Ressalta-se que no exemplo citado, utiliza-se o tipo ctodo comum, em que o fio comum aterrado(0V). Deste modo, para acender uma determinada sada, deve-se co-locar esta para 5V, que o nvel lgico alto (1). Do mesmo mesmo modo, para apagar uma sada, deve-se colocar esta para 0V, que o nvel lgico baixo (0). Neste sentido, fa-zendo o mesmo com todos os nmeros de 0 at 9, ento obtm-se a Tabela apresentada abaixo.

    103

  • Hardware e Software bsico de acionamento

    Abaixo apresentado o hardware especfico para acionamento de um display de 7 seg-mentos pela porta B. Vale ressaltar que o hardware bsico no est ilustrado para facilitar o entendimento, mas o mesmo obrigatrio para funcionamento do microcontrolador.

    Quanto ao circuito apresentado, cada resistor ligado entre a porta B e o display de 7 seg-mentos possui 330 Ohms. O pino B7 est livre e sem conexo, mas poderia estar conecta-do no pino do ponto do display.

    Vale ressaltar que os pinos do display foram conectados juntos na porta B para facilitar a lgica e o programa de acionamento, mas poderia estar em portas separadas.

    Para exemplificar o acionamento do hardware descrito, pode-se citar a Tabela de aciona-mento de 0 a 9 apresentada na Seo 2 deste mesmo captulo. Nesta tabela, para apre-

    104

    B7#B6#B5#B4#B3#B2#B1#B0#

    C7#C6#C5#C4#

    C0#C1#C2#

    A0#A1#A2#A3#A4#A5#

    A6#

    330 ohms

  • sentar o nmero 1 acende-se os LEDs b e c, apagando os demais. Como B4 e B5 esto ligados a b e c respectivamente, ento basta colocar estes pinos para 5V e os demais para 0V, conforme o acionamento abaixo:

    Para enviar este valor para a porta B, existe diversas maneiras j apresentadas anterior-mente, e uma destas utilizando a funo abaixo:

    O exemplo abaixo apresenta um contagem de 0 a 3 no display de 7 segmentos com hardware apresentado, utilizando 1 segundo entre cada valor.

    105

    !!!48!!!!!!!!!!!!!!!Decimal!!

    !0!!!0!!!1!!!1!!!0!!!0!!!0!!!0!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!TB7!!TB6!!TB5!!!TB4!!!TB3!!TB2!!!TB1!!TB0!!!!!!!!!!a!!!!!b!!!!!!!c!!!!!!d!!!!e!!!!!!f!!!!!!g!.!

    ! ! OUTPUT_B ( 48 ) ;

    ! ! OUTPUT_B ( 0b00110000 ) ;

    #include #fuses HS#use delay(clock = 20000000)main(){! while (1)! {! ! output_b(0b00110000);! ! delay_ms(1000);! ! output_b(0b01101101);! ! delay_ms(1000);! ! output_b(0b01111001);! ! delay_ms(1000);! }}

  • Software utilizando vetor

    O uso de vetores em determinadas aplicaes facilita a manipulao de dados. Entretan-to, muitos usurios de Microcontroladores em Linguagem C preferem no usar tal artifcio de programao devido no conhecer o uso adequado do mesmo.

    Neste sentido, o uso de vetores basicamente como descrito na Seo 7 do Capitulo 2, em que inicialmente necessrio sua declarao e instanciao, onde o vetor criado, de-clarado e dimensionado. Por exemplo, para criar um vetor chamado vetExemplo de tama-nho 3, em que o tipo de dados desse vetor inteiro (int), tm-se a seguinte linha de co-mando :

    Para alocar valores a cada posio desse vetor, pode-se utilizar o acesso individual a cada posio do mesmo modo que o apresentado anteriormente. Por exemplo, para atri-buir os valores 3, 5 e 7, respectivamente, para as 3 posies do vetor vetExemplo deve-se seguir as linhas de comando abaixo:

    Vale lembrar que o primeiro valor do vetor alocado na posio 0 e no na posio 1. Sendo assim, um vetor de trs posies, possui as posies 0, 1 e 2. No exemplo apre-sentado, a posio 0 possui o valor 3, a posio 1 o valor 5 e a posio 2 o valor 7.

    Um outro modo realizar as operaes anteriores de forma sucinta fazer em uma mesma linha de comando a declarao, instanciao e a atribuio. Um exemplo deste artifcio apresentado a seguir:

    106

    ! ! int vetExemplo [ 3 ];

    ! ! vetExemplo [ 0 ] = 3;

    ! ! vetExemplo [ 1 ] = 5;

    ! ! vetExemplo [ 2 ] = 7;

  • Na linha de comando apresentada ir gerar o mesmo vetor dos exemplos anteriores, ob-tendo o mesmo efeito. Entretanto, est mais organizado e prtico, sendo esta a metodolo-gia de uso dos vetores adotado neste livro.

    Vale ressaltar que no precisa especificar quantas posies existem neste vetor dentro dos colchetes, pois isto j feito de forma automtica pela quantidade de posies que j existem dentro das chaves. Quanto ao preenchimento das posies, tm-se que a posi-o 0 do vetor ser o primeiro valor apresentado, a primeira posio ser o segundo valor apresentado, e assim por diante. No exemplo apresentado seguir o mesmo do exemplo anterior, em que a posio 0 possui o valor 3, a posio 1 o valor 5 e a posio 2 o valor 7.

    Vetor no acionamento do display de 7 segmentos

    Assumindo que o hardware do display de 7 segmentos est montado de acordo com a Se-o 2 deste mesmo captulo, devemos acionar o display de 7 segmentos de acordo com a tabela abaixo para apresentar os nmeros de 0 a 9:

    Vale ressaltar que o pino B7 no est conectado nenhum pino no hardware, ento pode-se colo-car qualquer valor para seu acionamento. im-portante colocar um valor, mesmo que seja 0, para se acostumar a manipular os bits da porta, visto que posteriormente, algum pino pode faltar para acionamento, como no caso das portas A e C do PIC18f2550.

    107

    ! ! int vetExemplo [ ] = { 3 , 5 , 7 };

    DEC$