of 46/46
LINGUAGEM C PARA MICROCONTROLADORES PIC ANDERSON VICENTE BURACOV PROGRAMAÇÃO DE MICROCONTROLADORES PIC BASEADO NO PIC 16F628A Módulo Básico 1 Piracicaba 2013

Apostila Pic(Anderson)

  • View
    72

  • Download
    10

Embed Size (px)

Text of Apostila Pic(Anderson)

  • LINGUAGEM C PARA MICROCONTROLADORES PIC

    ANDERSON VICENTE BURACOV

    PROGRAMAO DE MICROCONTROLADORES PIC

    BASEADO NO PIC 16F628A

    Mdulo Bsico 1

    Piracicaba

    2013

  • SUMRIO INTRODUO .............................................................................................................. 01 1 - Os Microcontroladores ......................................................................................... 02 2- Arquitetura Harvard e a tradicional ...................................................................... 06 2.1- Arquitetura Harvard .............................................................................................. 07 3 - Microcontrolador PIC 16F628a ............................................................................. 08 3.1- Alimentao do PIC .............................................................................................. 08 3.2- Devices Flags ........................................................................................................ 08 4 - PORTA E PORTB ................................................................................................. 13 5 - Caractersticas Principais ..................................................................................... 14 6 - Introduo linguagem C .................................................................................... 17 7 - Controle de Fluxo ................................................................................................. 17 8 - Introduo ao Mikro C ........................................................................................... 25 8.1 -Escrevendo programas em C ................................................................................ 25 8.2 -O papel do Compilador ....................................................................................... 26 8.3 -Edio e Compilao ............................................................................................ 27 8.4 -O Programa Compilado......................................................................................... 28 8.5 -Gravao do Programa no PIC ............................................................................. 28 8.6 -Criao de um projeto no Mikro C ......................................................................... 28 8.7 -Conhecendo o Ambiente Mikro C ......................................................................... 30 8.8 -Code Editor ( Editor de Cdigo) ........................................................................... 31 8.9 Mesages Window ( Janela de mensagens) ......................................................... 32 8.10-Project Setup ........................................................................................................ 32 9 -Primeiro Projeto ................................................................................................ 36 10 - Funes ................................................................................................................ 39 10.1-Acionamento de botes utilizando o IF ................................................................. 40 10.2-Else ....................................................................................................................... 40 10.3-Funo Button ...................................................................................................... 40 11 REFERNCIAS ..................................................................................................... 40

  • 1

    INTRODUO

    Esta pequena apostila esta orientada para os profissionais que

    necessitam de conhecimentos bsicos do PIC. Abordaremos noes da estrutura do

    PIC16F628A e depois nosso foco ser o estudo da linguagem C para

    microcontroladores.

    A linguagem C provavelmente a linguagem mais conhecida e tem

    muitas vantagens sobre a linguagem assembler no nvel tcnico.

    Primeiramente trataremos sobre a instalao dos programas necessrios

    para poder trabalhar.

    Existe no mercado vrios compiladores para desenvolvimento de

    programas na linguagem C como Hi-Tech, CCS, PICmicro C, etc. Adotamos para

    nosso treinamento o compilador MikroC da Microelektronika por ser uma ferramenta

    bastante poderosa e fcil de trabalhar (permite Editar, Simular e Compilar programas

    das famlias 12, 16 e 18 da Microchip) alm de tambm possuir uma vasta biblioteca

    de controle de perifricos dos Microcontroladores. Alm disso, a verso estudante

    gratuito para desenvolvimento de programas de at 2Kwords( 2mil palavras) , o que

    torna bastante atraente tambm para uso educacional.

    Pode-se fazer download em www.mikroe.com.

    Contudo, uma das grandes vantagens de se programar em C que o

    programador no precisa se preocupar com o acesso a bancos, localizao de

    memria e perifricos dos Microcontroladores pois o Compilador responsvel por

    gerenciar esses controles.

    Toda essa eficincia da Linguagem C proporciona ao programador

    preocupar-se apenas com o programa em si e o compilador traduz da Linguagem C

    para a Linguagem de mquina hexadecimal (.HEX) que a linguagem que os

    Microcontroladores,conseguem,entender.

  • 2

    1- OS MICROCONTROLADORES

    Os principais fabricantes de microcontroladores disponveis no mercado

    so descritos a seguir:

    Atmel: - Famlia AVR, 8051

    Microchip - Famlia PIC

    Freescale (Motorola) - Famlia HS908

    NXP (Phlips) - Famlia ARM (LPC)

    Texas Instruments - Famlia MSP, TMS e C2000

    Zilog - Famlia F8

    National - Famlia COP

    Cypress - Famlia PSOC

    Intel - Famlia 8051, 8052, 8096

    Analog Device - Famlia ADuc

    ... etc.

    Os Microcontroladores so chips inteligentes que tm pinos de entradas e

    sadas que so utilizadas para controlar equipamentos e ou dispositivos.

    Atravs de programao, estas entradas e sadas so conectadas ao

    mundo exterior atravs de sensores e atuadores controlando mquinas ou sistemas.

  • 3

    O PIC produzido pela Microchip technology Inc

    (http://www.microchip.com).

    PIC origina-se de Programmable Integrated Circuit (Circuito Integrado

    Programvel).

    Estes circuitos integrados esto cada dia mais barato e poderosos,

    contendo internamente circuitos de processamento, memrias PROM

    (Programmable Read Only Memory memria programvel somente de leitura) ,

    Memrias RAM (Random Access Memory memria de acesso aleatrio),

    EEPROM (Electrical Eraseble Programmable Read Only Memory Memria

    somente de leitura regravvel eletronicamente) memria Flash (mesma que a

    EEPROM), circuitos contadores, circuitos comparadores, conversores

    analgico/digital (ADC) conversores digital/analgico (DAC), etc.

    Existem basicamente 03 famlias diferenciadas pelo tamanho de palavra

    de memria de programa: so as famlias 12, 14 e 16 bits onde, todos os

    dispositivos possuem barramento de dados de 8 bits.

    Recentemente a Microchip inseriu no mercado a nova famlia DsPIC com

    memria de programa de 16 bits , 24 bits e futuramente 32 bits para barramento de

    dados.

    Trabalharemos com o PIC de 18 pinos, PIC 16F628A operando com

    Clock de 4MHz o que implica em 1MIPS (1 milho de instrues por segundo).

    O PIC PIC16F628A operam com Clock de 20MHz o que implica em

    5MIPS (5 milhes de instrues por segundo).

    Os Microcontroladores da Srie 12, 14 e 16 possuem memria interna e

    os da srie 17 e 18 podem funcionar tambm com Memria de Programa externa.

    Existem 4 tipos de tecnologias na fabricao das Memrias de Programa dos PICs:

    ROM tipo Mscara: Chips programados de fbrica viveis para grandes quantidades e so identificados com o prefixo CR.

    OTP: so Memrias de Programa tipo PROM onde, sai de fbrica virgem e permite uma nica gravao. Estes dispositivos so identificados pelo sufixo C.

    EPROM: so indicados para etapas de desenvolvimento e so identificados pela janela de vidro caracterstica das EPROMs. Utilizam sufixo JW ou CL.

  • 4

    FLASH: so os mais indicados tanto para desenvolvimento como implantao final. Permitem mais de 1000 ciclos de gravao/apagamento. So identificados pelo prefixo F.

    Hoje, os Microcontroladores so uma revoluo na eletrnica assim como

    ocorreu quando foram introduzidos os primeiros Amplificadores Operacionais.

    Antigamente, para se fazer um amplificador transistorizado com ganho 4

    por exemplo, era necessrio realizar vrias contas para polarizar o transistor,

    estudar parmetros do transistor, etc; com a chegada dos famosos Amp. Ops, tudo

    isto ficou muito fcil, sem falar de todas as outras funes que os Amplificadores

    Operacionais oferecem como somador, diferenciador, integrador, filtros, etc...

    Os Microcontroladores invadiram os equipamentos eletrnicos onde,

    podemos encontr-los em vrios eletrodomsticos como mquinas de lavar, micro-

    ondas, aparelhos de som e imagem, etc. Sem falar no seguimento automobilstico

    sendo usado em sistema de injeo eletrnica, alarme, controle de temperatura,

    automao de vidros e fechaduras, etc.

    Devido a esta expanso dos sistemas Microcontroladores, hoje mais

    que uma necessidade de tcnicos e engenheiros saberem como funcionam e como

    tirar proveito do seu potencial.

    Principalmente para a rea de desenvolvimento e projetos, pois as

    vantagens so realmente muito atraentes. Comeando pelo custo - PIC 16F628a por

    exemplo custa aproximadamente R$8,00 e tem um poder de processamento

    excelente para um clock de 4MHz ( 1.000.000 de instrues por segundo) Caramba!!

    Escolhemos para este curso de PIC o modelo 16F628A. Esta escolha

    est relacionada com a facilidade de encontr-lo no mercado, baixo custo, facilidade

    de manuseio e compatibilidade entre os modelos de 18 pinos.

    Abaixo, temos a foto do PIC 16F628a e, como pode-se observar, parece

    como qualquer circuito integrado comum, porm, vamos descrever agora o que ele

    apresenta internamente:

  • 5

    Vista geral do PIC 16F628a

    - CPU (Unidade Central de processamento) que a responsvel por

    gerenciar todas as funes e decises referente a programao.

    - Possui uma ULA (Unidade lgica e Aritmtica) que a responsvel por

    desenvolver operaes de soma, subtrao, deslocamento de bits, etc).

    1024 posies de memria x 14 bits

    124 posies x 8 bits de RAM

    64 posies x 8 bits de EEPROM

    13 pinos de entrada/sada (configurveis)

    1 Timer / Contador de 8 bits

    No decorrer do curso vamos entrar em mais detalhes, importante agora

    se ter em mente que o Microcontrolador um Circuito Integrado composto de vrios

    Circuitos Lgicos que nos ajudaro bastante em desenvolvimentos de circuitos

    eletrnicos e controle de processos ou sistemas.

    Vejamos um exemplo de aplicao:

    Digamos que temos interesse em fazer um contador de pulsos crescente

    onde o mesmo far a contagem de 0000 a 9999. Utilizando-se de componentes

    discretos, a princpio precisaremos de contadores, decodificadores para display, etc.

    Imagine que este circuito foi projetado e em determinado momento deseja-se

    modificar o projeto para fazer a contagem de 0000 at 0750. Puxa, teria que se

    desenvolver outro Hardware ou adapt-lo dificultando bastante o desenvolvimento.

    Agora, se no projeto utilizamos Microcontroladores, isto pode ser implantado

    modificando-se apenas o Software pois o Hardware poder ser mantido. Isto ajuda

  • 6

    bastante os desenvolvedores de sistemas pois um mesmo circuito pode receber

    modificaes e melhorias modificando apenas o software.

    Esse apenas um exemplo que apresenta algumas vantagens de se

    utilizar circuitos Microcontrolados. Observa-se com isso como diminui o trabalho

    oneroso de desenvolver circuitos discretos ganhando tempo tambm de

    desenvolvimento e deixando tambm margem para futuras melhorias ou ajustes do

    circuito. Outro exemplo poderia citar uma aplicao automotiva. Desenvolvido um

    circuito de controle para determinado modelo de automvel, para outro modelo

    mudaria apenas os parmetros via software (Ex: controle de

    injeo de combustvel do Gol 1.0 para o Gol 1.6) O circuito seria o

    mesmo s mudaria a programao entre os modelos do Gol. Observou a grande

    vantagem disso?

    Os Microcontroladores so encontrados em vrios tamanhos e

    capacidades onde o projetista dever determinar qual utilizar em seu respectivo

    projeto. Eles variam desde 8 pinos (PIC12Cxx) passando pelos 18 pinos

    (PIC16Fxxx) indo at 40 pinos (PIC18Fxxx).

    Existem muitos modelos de PIC onde cada um tem suas caractersticas

    peculiares como nmero de I/Os (entradas/sadas), conversores A/D, Contadores,

    timers, memria, etc.

    2- ARQUITETURA HARVARD E A TRADICIONAL

    A Arquitetura Tradicional de Computadores e Microprocessadores se

    baseia no esquema proposto por John Von Newman, no qual a CPU (Unidade

    Central de Processamento) est conectada a uma nica memria que contm as

    Instrues de Programas e os Dados. Com isso, temos um nico barramento para o

    trfego de Dados e Instrues o que limita a velocidade de operao do

    Microprocessador.

    Outro fator importante que esta configurao trabalha com a filosofia

    CISC (Complex Intruction Set Computer Computador com Set de Instrues

    complexos). Sendo assim, temos centenas de comandos para trabalhar a

    programao. O Microcontrolador 8051 trabalha com esta filosofia e possui 115

    Instrues.

  • 7

    Abaixo temos o Diagrama da Arquitetura Von Newman:

    Arquitetura Von Newmann

    2.1- ARQUITETURA HARVARD

    Consiste simplesmente na separao do barramento de Dados e

    Instrues. Uma das memrias possui somente Instrues de programa e

    chamada de Memria de programa.

    A outra Memria responsvel pelo armazenamento dos Dados e por

    isso chama-se memria de Dados.

    Arquitetura Harvard

    Um Processador com Set de Instrues reduzido (RISC Reduced Set

    Instruction Computer) contm ento barramentos diferentes como 12 ou 14 bits para

    Instrues e 8 bits para Dados. Os Microcontroladores PIC trabalham com esta

    Filosofia e possuem em mdia 35 Instrues, o que facilita bastante o entendimento

    e o desenvolvimento. Muitos acham isso ruim pois como o nmero de instrues

    pequeno, precisa-se criar muitas funes que

    na Filosofia CISC j est pronta.

  • 8

    3- MICROCONTROLADOR PIC16F628A

    3.1- ALIMENTAO DO PIC

    Esta tambm uma questo que requer certa ateno. Importante no

    termos uma fonte com muita variao (riplle) e ruidosa. Como a alimentao pode

    estar entre 3,0 a 5,5V, sugiro que seja utilizado o Circuito Integrado Regulador de

    Tenso 7805 que garante uma excelente regulagem em 5,0V.

    3.2- DEVICE FLAGS

    Fusveis ou bits de configurao, o local onde podemos configurar vrias funes

    atravs de bits de configurao.

    Funes estas que podem ser tipo de oscilador, habilitar WatchDog, Cdigo de

    proteo, etc.

    Clock:

    Vamos inicialmente falar do Clock. Todo Microcontrolador necessita de

    um circuito gerador de Clock. O Clock quem d todo o sincronismo para os

    circuitos internos. Pode ser comparado ao Corao humano. Abaixo temos a

    configurao utilizando oscilador a Cristal.

    Neste caso temos um Oscilador XT. Sem dvida esta a melhor opo

    pois a estabilidade dos cristais so excelentes.

  • 9

    Note que existe dois capacitores ligados em paralelo com o cristal. O valor

    desses capacitores variam de acordo com a freqncia do cristal utilizado. Abaixo

    segue uma tabela apresentando os valores dos capacitores:

    Tipo de

    oscilador

    Freqncia do cristal

    Valores tpicos para o capacitor

    C1 C2

    LP (cristal de baixa

    freqncia)

    32kHz 33pF

    33pF

    200KHz 15pF 15pF

    XT (cristal)

    200KHz 22-68pF 22-68pF

    1.0MHz

    15pF

    15pF

    4.0Mhz

    15pF 15pF

    HS (cristal de alta

    freqncia)

    4.0MHz

    15pF 15pF

    8.0 MHz 15-33pF 15-33pF

    20.0MHz 15-33pF 15-33pF

    25MHz 15-33pF 15-33pF

    cristal de quartzo

    Ressonador Cermico

  • 10

    Podemos tambm utilizar os osciladores internos do PIC para fazer a

    funo de oscilao.

    Este oscilador interno do tipo RC e possui uma preciso razovel entre

    1 e 5% com clock tpico de 4MHz.

    Vale ressaltar que quando no utilizamos o Clock interno, ganhamos em

    preciso mas em compensao perdemos 1 ou 2 pinos de I/O (entrada/sada).

    Realmente tudo tem um preo! Voc ter que decidir por isso na definio

    do seu projeto.

    Sinal de clock

    Vale lembrar que para cada 4 ciclos de Clock temos um ciclo de instruo,

    para os oscilador de 4MHz, temos 1MHz de ciclo de instruo:

    -ciclo de instruo = Fosc/4

    -Tempo de instruo = 1/Ciclo de instruo.

    Exemplo:

    Para um cristal de 20MHz temos:

    Ciclo de instruo = 5MHz

    Tempo de instruo = 200ns = 0,0000002 segundos para fazer uma instruo.

    Rapidinho no acha?

    Pwrten: (system clock switch bit)

    o temporizador de Power-Up que faz o microcontrolador aguardar certo tempo

    assim que o chip energizado. Este tempo de 72ms deixando assim o

    microcontrolador inoperante, tempo ideal para que o circuito oscilador estabilize sua

    freqncia.

  • 11

    Uma maneira bem simples para garantir este tempo colocar o pino 4

    (MCLR Master Clear on Reset) em nvel um conectando-o ao VCC (+5V) ,

    atravs de um resistor com um valor entre 5K e 10K .

    Brow-out: detector

    um interessante circuito para resetar o Microcontrolador caso ocorra uma queda

    de tenso no mesmo. Restabelecido a tenso, o programa reiniciado. Podemos

    escolher os seguintes limites de tenso: 2,0V, 2,7V, 4,2V ou 4,5V.

    Boren:

    Este bit responsvel por habilitar/desabilitar o Brown-out.

    Wdt: Watchdog Timer Enable

    Aqui temos um recurso bastante interessante. Um temporizador de 8 bits que no

    pode estourar pois caso isso ocorra o programa ser resetado. Imagina que por

    algum motivo

    o programa trava ou entra em algum loop infinito. A funo do watchdog no

    deixar o programa travado.

    Lvp: (low voltage programming)

    Temos aqui uma opo de poder gravar o Microcontrolador com 5V. O usual

    colocar tenso de 13,5V no pino MCLR. Portanto, possvel deixar o MCLR em 5V e

    fazer a gravao mas, o pino RB4 no poder mais ser utilizado como I/O.

  • 12

    Stvren: (Stack Full / Underflow Reset Enable Bit)

    O Microcontrolador 16F628a possui 8 endereos de pilha. Este bit serve para

    habilitar o chip para ser resetado caso a limite da pilha seja ultrapassado.

    A pilha ( Stack) nada mais que uma memria RAM com algumas localidades,

    dentro do PIC 16F628a uma subrotina pode ser chamada no mximo 8 vezes, se o

    limite for ultrapassado a memria da pilha fica cheia fazendo o PIC travar.

    Code Protect : (CP Cdigo de proteo)

    Habilitando este bit, a regio de memria fica protegida contra leitura, ficando

    impossvel de ler o que tem dentro do PIC.

    Reset: Resetar o PIC significa coloc-lo no incio da programao novamente. As vezes

    isso feito pelo usurio porm, isso pode acontecer tambm quando ocorrer uma

    interrupo. O importante que quando acontecer um Reset, j est pr-definido o

    que o PIC deve fazer.

    Existem vrias maneiras de Resetar o Microcontrolador:

    Reset no instante em que o PIC alimentado.

    Reset quando o pino 4 (MCLR) colocado em nvel zero.

    Reset colocando o PIC no modo de economia instruo Sleep.

    Reset quando Whatchdog (WDT) transborda - muda de FF para 00.

    Precisamos aqui ressaltar que quando ocorre um Reset, o importante que o PC

    (Program Counter Contador de Programa) aponte para a posio inicial 0000 e

    que todos os Registros (memria RAM) no so alterados. Porm, os SFRs (Special

    Function Registers Registradores de Funes Especiais), estes sim so reiniciados

    com um valor inicial pr determinado.

  • 13

    4.0- PORTA e PORTB (entradas e sadas)

    So responsveis por trabalharem com o mundo exterior, ou seja, so por

    eles que recebemos sinais de sensores, chaves, teclados e tambm por eles que

    atuamos rels, solenides, acopladores pticos, transistores, etc. Eles que fazem a

    interface para acionarmos lmpadas, sirenes, motores, leds, displays de cristal

    lquido, etc.

    Vale lembrar aqui que o sinal de sada de cada porta limitado e, no

    entanto, no podemos simplesmente ligar um rel ou um contator diretamente no

    pino do PIC. Precisamos muitas vezes fazer um driver para poder drenar uma certa

    intensidade de corrente. Mas, isto ser analisado em outra oportunidade, o

    importante no momento saber que so por estas portas bidirecionais onde faremos

    toda comunicao para enviar e receber dados.

    Pelo PORTA temos 5 pinos de controle e pelo PORTB temos 8 pinos.

    Para definirmos cada pino para direo do PORTA utilizamos o Registro

    TRISA e para o PORTB utilizamos do Registro TRISB.

    A direo do fluxo de dados ser 0 para sada (OUTPUT) e 1 para

    entrada (INPUT).

    Mais adiante trabalharemos melhor este detalhe onde iremos definir quais

    pinos sero entrada e quais dos pinos sero definidos como sada de dados.

    Abaixo temos um exemplo de circuito utilizando PIC

  • 14

    Acredito que as principais informaes foram analisadas e j podemos

    comear a estudar os Microcontroladores 16F628a. Vamos ento verificar

    inicialmente suas caractersticas .

    5.0- CARACTERSTICAS PRINCIPAIS

    O Microcontrolador PIC 16F628A pode operar at 20MHz

    - 2K (2048) palavras de 14 bits para programas;

    - 224 bytes de RAM para uso geral;

    - 128 bytes de EEPROM para dados;

    - Stack com 8 nveis;

    - Oscilador 4MHz / 37KHz interno;

    - Apenas 35 instrues;

    - 15 Registros especficos em RAM para controle interno e externo;

    - 1 Timer 8 bits;

    - 1 Timer / contador de 8 bits;

    - 1 Timer / Contador de 16 bits;

    - 1 canal PWM com captura e amostragem (CCP);

    - 1 canal de Comunicao Serial;

    - 2 Comparadores Analgicos com referncia interna programvel de tenso;

    - 16 pinos com flexibilidade de operar como entrada ou sada;

    - Intensidade de corrente nos PORTs de 25mA por sada;

    - Capacidade de gerenciar interrupes;

    - Watch Dog para recuperar travamentos no software;

    - Memria de programa com proteo contra cpias;

    - Modo Sleep para economia de energia;

    - Vrias opes de osciladores (interno/externo);

    - Alimentao 3V a 5,5V Tpico de 5V;

    - Consumo menor que 2mA em 5V a 4MHz.

    - Compatvel com 16F84 e outros PICs de 18 pinos.

  • 15

  • 16

  • 17

    6.0- INTRODUO LINGUAGEM C

    Estrutura Bsica de um programa:

    Programas em C so baseados em uma ou mais funes que sero executadas, no

    entanto, a funo Main() a primeira a ser executada.

    /* -------------------------------------------------

    abaixo temos um exemplo de estrutura

    Bsica de um programa em Linguagem C

    ----------------------------------------------------- */

    Main() // esta a primeira funo que ser executada

    { // inicializa a funo

    Trisb=0x00; // aqui entram os comandos que sero executados

    Portb=0xFF;

    } // finaliza a funo

    Observaes:

    Toda funo deve iniciar abrindo chave e finalizar fechando-se a chave.

    Toda instruo deve ser finalizada com ponto e vrgula (obrigatoriamente)

    Logo aps /* so inseridos os comentrios para mltiplas linhas e deve-se

    Colocar */ para fechar o bloco de comentrios.

    Utilizamos // para comentrios em apenas uma linha.

    Representao Numrica: Decimal: Contador=125; Binrio: Portb=0b11010011; Hexadecimal: Varivel1=0xA4; Octal: Teste=075; String: Unsigned char *texto=Piracicaba-SP

  • 18

    Caracter:

    Usart_write(&);

    Dado: Tipo:

    int Nmeros inteiros

    char Caracteres

    float e double Nmeros decimais (ponto flutuante)

    void valores nulos

    Modificadores:

  • 19

    Declarao de variveis:

    Podemos declarar da seguinte maneira:

    + + + ;

    Obs: valor pode ou no necessariamente ser inicializado.

    Exemplos:

    int contador;

    short var1;

    unsigned int contagem = 30500;

    Observe agora como atribuir valores s variveis:

    Contador = 10; // atribui o valor 10 varivel contador

    Var1 = 25; // atribui o valor 25 varivel Var1

    Varivel local: Esta declarada dentro da funo e s pode ser utilizada pela funo portanto,

    uma varivel temporria.

    Exemplo:

    Void subrotina_soma ()

    {

    Unsigned Int valor1, valor2;

    Valor1=A;

    Valor2=B;

    Return(valor1+valor2);

    }

    Varivel Global: Esta declarada fora da funo e s pode ser utilizada por qualquer funo em

    qualquer momento. Todas as funes tm acesso s variveis globais.

  • 20

    Exemplo:

    unsigned int valor1, valor 2

    Void subrotina_soma ()

    {

    Valor1=A;

    Valor2=B;

    Return(valor1+valor2);

    }

    Operadores Matemticos: Aritmticos:

    Relacionais:

    Lgicos:

  • 21

    Operadores bit a bit:

    7- CONTROLE DE FLUXO

    DELAY: ( Atraso de tempo)

    Comando de atraso de tempo, ou contagem de tempo de uma maneira bem simples.

    Exemplo:

    Delay_ms(500); // Atraso de tempo de segundo.

    Delay_us(500); // Atraso de tempo de 500 microsegundos.

    DECISO IF: // A deciso IF a mesma coisa da pergunta: Se ?

    Sintaxe: if (expresso) comando;

    A expresso avaliada e se for verdadeiro executa o comando.

    Podemos ter tambm mais que um comando:

    Sintaxe if (expresso)

    {

    comando1;

    comando2;

    comandoN;

    }

    Exemplo:

    If (conta == 5) // Se a conta for igual a 5

    {

    a=a++; //Soma na varivel a

  • 22

    portb=0xFF; //e coloca todo portb nvel alto

    }

    DECISO IF-ELSE:

    Sintaxe: if (expresso) comando1;

    else comando2;

    Neste caso, temos duas possibilidades. Se comando for verdadeiro, comando1

    executado, caso seja falso, comando2 ser executado.

    Podemos ter tambm vrios comandos:

    if (expresso)

    {

    comando1;

    comando2;

    comando3;

    }

    else

    {

    comando4;

    comando5;

    }

    Exemplo:

    if (a>22) // Se a for maior que o numero 22

    {

    Valor1=x; //O valor1 ser igual a x

    y=contador+10; //e y soma 10 no contador

    }

    Else //Seno

    {

    Valor2=x; // O valor 2 que ser igual a x

    Y=contador-5; // e y vai decremantar 5 no contador

    }

  • 23

    LOOP FOR:

    Este um comando de lao (loop ou repetio).

    Sintaxe:

    for (inicializao; condio (trmino); incremento) comando;

    Podemos tambm ter um bloco de comandos:

    For (inicializao; condio (trmino); incremento)

    {

    comando1;

    comando2;

    comandoN;

    }

    Exemplo:

    void main ()

    {

    int contador;

    int a = 0;

    for (contador=0; contador

  • 24

    Exemplo:

    void main( )

    {

    int a=15;

    While (a>10)

    {

    a--;

    delay_ms(100);

    }

    }

    LOOP DO - WHILE:

    Neste caso, diferente do loop anterior (while), o do - while executa pelo menos uma

    vez o bloco de comando antes de fazer a avaliao se continua a executar os

    comandos ou sai do loop.

    Sintaxe:

    do

    {

    comando1;

    comando2;

    }

    while (expresso);

    Exemplo:

    void main( )

    {

    int a=0;

    do

    {

    a++;

    delay_ms(100);

  • 25

    }

    while (a

  • 26

    Sabemos que hoje temos computadores portteis com capacidades de

    centenas de gigabytes de memria, nesses aspectos o "tamanho" do cdigo no

    to importante para o programador.

    Agora, quando estamos falando de microcontroladores devemos tomar

    certas preocauses, pois microcontroladores como: PIC12C508 e PIC16C54

    possuem apenas 512byte de memria de programa e 25 byte de RAM, fato que

    exige do programador otimizao do cdigo e eficincia na elaborao lgico do

    programa.

    8.2- O PAPEL DO COMPILADOR

    A nica maneira de se comunicar com o microcontrolador atravs da

    linguagem de mquina, ou melhor dizendo, atravs de cdigos de mquinas. Por

    tanto os programas em C devem necessariamente serem interpretados e compilados

    a fim de termos como resultado os comandos de mquinas a serem gravados na

    memria de programa do microcontrolador.

    Existem no mercado diversos compiladores de programas em C para

    microcontroladores PIC, tais como: HI-TECH PICC, C18, C30, CCS, SDCC, WIZ-C,

    mikroC, CC5, PICmicro C, entre outros.

    Em nosso curso iremos utilizar a IDE MikroC desenvolvido pela empresa

    Mikroelektronika (www.mikroe.com), no qual permite editar, compilar e simular

    programas em C para microcontroladores PIC da familia 12, 16 e 18.

    IDE mikroC - Editor, compilador, simulador e debugador para PIC em linguagem C

  • 27

    Iremos utilizar o mikroc devido a sua eficincia e flexibilidade. Alm disso,

    este compilador possui uma extensa biblioteca de funes prontas para controle de

    diversas perifricos conectados ao nosso microcontrolador PIC.

    Aos escrevermos e compilarmos um programa em nosso compilador,

    caso o programa no tenha erros de sintaxe, ou algum outro erro cometido pelo

    programador, teremos como resultado a criao do arquivo de mquina hexadecimal

    (extenso .hex). Este arquivo .hex conhecido como cdigo de mquina, e ser

    este o arquivo a ser gravado na memria do microcontrolador.

    8.3- EDIO E COMPILAO DO PROGRAMA EM C

    A partir das informaes e funes elaborada no fluxograma, escreva seu

    programa em linguagem C na IDE mikroC, compile e simule seu programa

    (estudaremos detalhadamente cada funo e ferramenta do mikroC mais adiante).

    8.4- O PROGRAMA COMPILADO

    Aps a compilao do seu programa em C, o compilador criar o arquivo

    de mquina .hex (nomedoprograma.hex). Este o arquivo que dever ser gravado

    no microcontrolador PIC.

  • 28

    8.5- GRAVAO DO PROGRAMA NO PIC

    Gravar o arquivo compilado .hex no microcontrolador atravs de um

    gravador de microcontroladores PIC, ou atravs de um Kit de desenvolvimento.

    Estudaremos com mais detalhes nas unidades seguintes do nosso curso

    os processos de edio, compilao e gravao de programas.

    8.6- Criao de um projeto no mikroC

    Para criarmos uma aplicaes no mikroC muito fcil, acompanhe o modelo passo

    a passo:

    Abra o mikroC e v ao menu Project > New Project. A tela seguinte aparece:

  • 29

    Figura 02 - criao de um projeto no mikroC

    >> Em

    Project Name digite o nome do seu projeto, em Project Path. Todos os arquivos de

    sada (list, hex, ASM) tero o mesmo nome do campo Project Name.

    Nota: No crie projetos com nomes com acentuao, caracteres especiais, espaos

    entre caracteres, e nomes reservados pelo compilador, como por exemplo: Button.

  • 30

    >> Em Description

    Flag, ajuste os configurantions bits do microcontrolador, que informam como o

    microcontrolador deve operar. Com ele possvel alterar o tipo de oscilador utilizado

    pelo projeto, assim como se vai usar o watchdog ou acionar a proteo contra leitura

    do chip. Esses bits so conhecidos como "fusveis".

    Description opcional. Neste campo podemos descrever de forma resumida o

    funcionamento de nosso projeto, assim como colocar verses ou informaes

    adcionais que o programador ache necessrio.

    >> Em Device podemos selecionar o modelo do microcontrolador PIC que

    utilizaremos em nosso projeto.

    >> No campo Clock especificamos o valor da frequencia de trabalho de nosso

    microcontrolador. No caso de aplicaes com o Kit PICgenios PIC18F, utilizaremos o

    valor de 8MHz (frequencia do cristal externo conectado ao chip).

    Aps ter configurado todos os parmentros e campos, basta clicar no boto ok

    para salvar seu projeto. Pronto, nosso projeto est pronto e podemos

    inserir os cdigos do programa no editor.

    8.7- Conhecendo o ambiente mikroC

    Observe o ambiente mikroC na figura abaixo:

  • 31

    O compilador

    O compilador mikroC permite o desenvolvimento rpido de aplicaes complexas

    graas aos recursos do editor avanado Code Editor. Alm disso, permitido utilizar

    as bibliotecas includas na linguagem para aumentar a velocidade e a facilidade de

    desenvolvimento dos projetos como comunicao serial, displays, aquisio de

    dados, memria, etc.

    Aps a compilao de nosso programa, o mikroC tambm gera arquivos LIST,

    cdigo em assembly e arquivo .HEX. Integrado ao compilador, temos um debugador

    para testes do programa no ambiente.

    8.8- Code Editor (editor de cdigo)

    O editor de cdigo do compilador mikroC oferece grandes auxlios no

    desenvolvimentos de projetos.

    Alguns aspectos desse editor so:

    Sintaxe ajustvel

    Assistentes de parmetros

    Cdigo modelo

    Autocorreo para tipos comuns

    Funo para saltos de linhas.

  • 32

    Assistentes de cdigos

    8.9- Messages Window (janela de mensagens)

    Nos casos de erros encontrados durante a compilao, o compilador reporta o erro e

    no gera o arquivo .hex. Alm disso, o Message Window informa o tamanho do

    cdigo de programa (ROM) gerado pelo sistema, assim como a memria de dados

    (RAM) usada pelo programa. Para visualizar a janela de

    mensagens, v em View > Messages.

    Figura 4- Janela de menssagens

    8.10- Project Setup

    Em Project Setup podemos alterar as configuraes dos projetos criado no mikroC.

    Para acess-lo pressione Project > Edit Project.

    Criao de um projeto no mikroC passo a passo

    Vamos aprender passo a passo como criar um projeto no mikroC:

    1. O primeiro passo abrir o mikroC;

  • 33

    2. Acesse o menu Project > New Project...

    3. No menu New Project, coloque o nome do seu projeto, a pasta onde sero salvos

    os arquivos-fontes do programa, escolha o microcontrolador que deseja programar,

    o valor da freqncia do cristal, e configure os fusveis do PIC selecionado.

    Neste exemplo, colocamos no nome de meu_programa em nosso

  • 34

    projeto, os arquivos -fontes do projeto sero salvos em

    C:\...\Meu_programa\ , o microcontrolador que iremos utilizar no

    projeto o PIC18F452, a freqncia do cristal utilizado de 8 MHZ, e os fusveis

    configurados so:

    Oscilador -> XT (definimos o tipo de oscilador utilizado no projeto)

    Watchdog -> OFF (Watchdog timer desligado)

    LVP -> OFF (Low Voltagem Programming - desligado)

    Brown Out -> OFF (Brown-out desligado)

    4. Clique no boto ok do painel New Project para salvar as configuraes do

    projeto.

    A tela seguinte ir aparecer, edite seu programa no Code Editor (painel

    de edio).

    Para exemplificar copie e cole o programa abaixo no painel de edio

    do mikroC.

    // o programa abaixo tem por funo escrever no PORTB do PIC o valor FF void main() { TRISB = 0x00; PORTB = 0xff; while (1); }

  • 35

    5. Salve seu programa atravs do cone salvar na barra de ferramentas do mikroC e

    pressione o cone Build Project ou pressione as teclas de atalho CTRL + F9 para

    compilar seu programa;

    6. Seu programa ser compilado e seu resultado poder ser visualizado atravs da

    Janela de mensagens:

    Pronto, seu projeto foi criado e compilado com sucesso; O compilador mikroC gerou

    na compilao o arquivo .HEX, este arquivo que dever ser gravado no

    microcontrolador PIC.

    Arquivo meu_programa.hex gerado pelo mikroC na compilao do nosso projeto.

  • 36

    9- PRIMEIRO PROJETO Inicialmente deve-se criar um projeto onde :

    Project Name: Led_1

    Project Path: C:/Pasta_aluno

    Description: Programa circuito acende led no port B0

    Device: P16F628a

    Clock: 004.000000

    Device Flags: _XT_OSC, _PWRT_ON, _WDT_OFF, _LVP_OFF, _CP_OFF

    RA7/OSC1/CLKIN16

    RB0/INT6

    RB1/RX/DT7

    RB2/TX/CK8

    RB3/CCP19

    RB410

    RB511

    RB6/T1OSO/T1CKI12

    RB7/T1OSI13

    RA0/AN017

    RA1/AN118

    RA2/AN2/VREF1

    RA3/AN3/CMP12

    RA4/T0CKI/CMP23

    RA6/OSC2/CLKOUT15

    RA5/MCLR4

    U1

    PIC16F628A

    D1LED-RED

    R1330R

    R210k

    Devemos ento escrever o cdigo e compilar o projeto para assim poder gravar o

    programa no Microcontrolador.

    /**********************************************************************

    Microcontroladores PIC

    Linguagem C Compilador MikroC

    Programa teste

    Objetivo: Programa de um circuito que acende o led no PORTB 0

    *********************************************************************/

    void main()

  • 37

    {

    cmcon=0x07;

    trisb= 0b00000000; // Port B como saida

    portb= 0; //estado inicial do port B

    trisa= 0b00000000; // todo o porta como saida

    porta= 0;

    while(1) //loop infinito

    {

    portb.f0=1; //ativa sada RB0

    }

    }

    Uma vez escrito o programa, para compilar basta pressionar CTRL + F9 ou, clicar

    em Menu Project e em seguida a opo Build.

    No apresentando nenhum erro, na tela de mensagens dever aparecer o seguinte

    mensagem na cor verde:

    SUCCESS ( Release Build)

    Esta mensagem garante que o programa foi compilado e que foi gerado o cdigo de

    mquina para ser gravado no Microcontrolador (arquivo.HEX).

    Gravando o Projeto:

    O Programa WinPIC verso 3.62 ser utilizado para gravar o programa no

    Microcontrolador.

    Primeira coisa a se fazer selecionar o Chip PIC16F628a.

  • 38

    Porm, precisamos ainda configurar o WinPic 800 para o correto funcionamento com

    a placa JDM. Para isso, clica-se em Configurao, opo Hardware e selecione o

    programador (JDM PROGRAMMER)..

    Este Programa pago mais tem uma verso mais simples e gratuita e est disponvel no site: /www.winpic800.com. Identificao dos botes:

    - Ler Tudo: Usado para leitura do contedo gravado no Microcontrolador;

    - Programar Tudo: Usado para gravarmos o programa no Microcontrolador;

    - Limpar Tudo: Usado para limparmos o contedo gravado no Microcontrolador;

  • 39

    - Verificar: Usado para fazer uma comparao do contedo gravado no

    Microcontrolador com o programa aberto.

    Aps o trmino da gravao, se tudo deu certo aparecer seguinte mensagem:

    OK! O programa j est gravado no PIC. Agora s testar.

    Exerccios:

    1 - Fazer um programa onde o led de RB0 deve ficar aceso ao ligar o nosso Kit. 2 - Fazer um programa onde o led de RBO deve acender e apagar com intervalo de 500ms.

    10- FUNES

    DEFINE:

    A diretiva Define da nome ao bit do port em questo

    /********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 1 Objetivo: Apresentar o uso da diretiva define *********************************************************************/ #define led1 portb.f1 // define o label led1 para o pino RB1 #define led2 portb.f2 // define o label led2 para o pino RB2 void main()

    {

    cmcon=0x07;

    trisb= 0b00000000; // Port B como saida

  • 40

    portb= 0; //estado inicial do port B

    trisa= 0b00000000; // todo o porta como saida

    porta= 0;

    while(1) //loop infinito { led1=1; //ativa sada RB1 led2=1; // ativa sada RB2 }

    }

    10.1- ACIONAMENTO DE BOTES UTILIZANDO O IF

    /********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 2 Objetivo: Fazer leitura de um boto e utilizao do IF *********************************************************************/ void main ( ) { cmcon=0x07;

    trisa = 0b00000010; // configura RA1 entrada restante como sada portb = 0; // todos os pinos de sada do portb = nvel baixo while(1) //loop infinito { if (porta.f1==1) //Se porta 1 for igual a 1 { portb=255; //acende todo o portb } }

    }

    **Observe que se for pressionado o boto em RA1 todo o portB vai acende e no

    vai mais apagar, a no ser que o PIC seja Resetado ou desligado.

    10.2- ELSE: UTILIZANDO A FUNO ELSE OU SEJA SE NO

    /********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 4 Objetivo: Fazer leitura de um boto e utilizao do IF e else

  • 41

    *********************************************************************/ void main ( ) { cmcon=0x07;

    trisa = 0b00000010; // configura RA1 entrada restante como sada portb = 0; // todos os pinos de sada do portb = nvel baixo while(1) //loop infinito { if (porta.f1==1) //Se porta 1 for igual a 1 { portb=255; //acende todo o portb } Else { Portb=0; } }

    }

    **Observe que se for pressionado o boto em RA1 todo o portB vai acende, seno

    vai continuar apagado.

    Exercicio:

    3- Faa um programa que acenda um led a cada tecla pressionada em PORTA

    Teclas utilizadas: RA1, RA2, RA3 e RA5.

    10.3- FUNO BUTTON Button (&portX , pinoX , tempoX , Estado_Tecla)

    Onde:

    &portX = port da tecla (porta, portb, portc, portd ou porte);

    pinoX = o pino onde est conectado a tecla (varia de 0 7);

    tempoX = tempo de Debounce em milisegundos;

    Estado_Tecla = Valor do nvel lgico quando a tecla pressionada.

  • 42

    Acionamento de Botes: Abaixo temos o esquema bsico do nosso KIT de desenvolvimento:

    RA7/OSC1/CLKIN16

    RB0/INT6

    RB1/RX/DT7

    RB2/TX/CK8

    RB3/CCP19

    RB410

    RB511

    RB6/T1OSO/T1CKI12

    RB7/T1OSI13

    RA0/AN017

    RA1/AN118

    RA2/AN2/VREF1

    RA3/AN3/CMP12

    RA4/T0CKI/CMP23

    RA6/OSC2/CLKOUT15

    RA5/MCLR4

    U1

    PIC16F628A

    D1LED-RED

    R1330R

    R210k

    R31k

    + 5 volts+ 5 volts

    GND

    Boto 1

    Resistor de Pull-up

    /********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa: 3 Objetivo: Fazer leitura de um boto e utilizao da funo Button *********************************************************************/ void main() { cmcon=0x07; //Conf. bsicas trisb= 0b00000000; // Port B como saida portb= 0; //estado inicial de portb trisa= 0b00000010; // todo o porta como saida porta= 0; while(1) //loop infinito

  • 43

    { if (button(&porta, 1,20,1) //Se o boto RA1 pressionado { Portb=255; //acende todo o portb } Else { portb=0; //seno continua com as sadas em zero 0 } }

    }

    ** A funo Button utilizada como um recurso de software, para eliminar o

    problema de Debounce , ou seja um pequeno ruido ao acionar-mos a tecla.

    -Agora vamos testar vrias chaves individualmente sem o problema de Debounce

    utilizando a funo Button .

    /**********************************************************************

    Curso de Microcontroladores PIC

    Linguagem C Compilador MikroC

    Programa teste funo Button com vria chaves

    Objetivo: Testar vrias chaves sem ter problema de rudo (Debounce).

    *********************************************************************/

    void main()

    {

    cmcon=0x07;

    trisb=0; // define o PORTB como saida

    trisa=0b00011110; // define todo o PORTA 1,2,3 e 4 como entrada

    while(1)

    {

    if (button(&porta, 1, 20, 1)) // &port identifica o port, 1 identifica o pino,

    // 20ms o tempo e 1 nvel para tecla acionada

    portb.f0=1; // se pressionado aciona Rb0

    else if (button(&porta, 2, 20, 1))

  • 44

    portb.f1=1;

    else if (button(&porta, 3, 20, 1))

    portb.f2=1;

    else if (button(&porta, 4, 20, 1))

    portb.f3=1;

    delay_ms(200);

    }

    }

    Exerccio: 4) Imagine que vamos montar um circuito que controle atravs de 4 chaves

    (ligar/desligar) a iluminao de uma casa. Esse controle ficar no quarto do casal, ao

    lado da cama, podendo com praticidade controlar/monitorar a iluminao da casa.

    Ento teremos as chaves em RA1, RA2 ,RA3 e RA4 e as sadas para acionar os

    rels em RB0, RB1, RB2 e RB3.

    Pressionado RA1 acende iluminao da sala e pressionado RA1 novamente apaga.

    Idem para RA2 (cozinha), RA3 (quarto 1) e RA4 (quarto 2).

    11. REFERNCIAS

    Disponvel em:

    David Jos de Souza , Desbravando o PIC

    Disponvel em : Livro Microcontroladores PIC16F628A/648A Uma abordagem prtica objetiva Autor: Wagner da Silva Zanco

    Disponvel em:

    Microchip Technology Inc. (www.microchip.com)

    Acessado em 04 outubro 2013.