Apostila Pic C(1)

Embed Size (px)

Citation preview

  • 7/23/2019 Apostila Pic C(1)

    1/98

    CENTRO FEDERAL DE EDUCAOTECNOLOGICA DO ESPIRITO SANTO

    PROF: MARCO ANTONIO

    APOSTILA DE:PROGRAMAO DE

    MICROCONTROLADORES PICUSANDO LINGUAGEM C

    UNED SERRA / AUTOMAO INDUSTRIAL

    VITORIA, AGOSTO 2006

  • 7/23/2019 Apostila Pic C(1)

    2/98

    Microcontroladores - PIC 1

    MICROCONTROLADORES PIC EM C

    INTRODUO ....................................................................................................................... 21. INTRODUO AOS MICROCONTROLADORES ...................................................... 3

    1.1. O que um Microcontrolador?................................................................................. 31.2. Qual a diferena do Microcontroladores e dos Microprocessadores? ...................... 31.3. O que significa PIC? ................................................................................................. 31.4. Programao do PIC ................................................................................................. 51.5. O que o MpLab?..................................................................................................... 6

    2. O PIC 16F877A ................................................................................................................ 72.1. NOMENCLATURA DOS PINOS ........................................................................... 82.2. QUE SCHMITT-TRIGGER?.............................................................................. 102.3. GERADOR DE RELGIO OSCILADOR ......................................................... 122.4. Oscilador XT........................................................................................................... 122.5. Oscilador RC........................................................................................................... 13

    3. AMBIENTE INTEGRADO DE DESENVOLVIMENTO (IDE) .................................. 163.1. CRIAO DE UM PROJETO:.............................................................................. 17

    4. INTRODUO LINGUAGEM C O PRIMEIRO PROGRAMA........................... 255. USO DO MPSIM PARA SIMULAO ....................................................................... 296. AS VARIVEIS NO COMPILADOR CCS.................................................................. 43

    6.1. O que so Variveis? .............................................................................................. 436.2. Tipos de variveis ................................................................................................... 436.3. OS MODIFICADORES.......................................................................................... 436.4. Declarao de Variveis ......................................................................................... 446.5. Inicializando Variveis ........................................................................................... 456.6. Variveis Locais e Globais ..................................................................................... 466.7. Constantes ............................................................................................................... 46Exerccios 6.1:..................................................................................................................... 47

    7. OPERADORES EM C.................................................................................................... 487.1. O Operador de Atribuio....................................................................................... 487.2. Os Operadores Aritmticos..................................................................................... 487.3. Operadores Relacionais e Lgicos.......................................................................... 507.4. Operadores de Incremento e Decremento............................................................... 517.5. Operadores Aritmticos de Atribuio ................................................................... 527.6. Operadores Bit a Bit................................................................................................ 537.7. Interface com os interruptores ................................................................................ 55

    Exerccios 7.1: .............................................................................................................. 598. TEMPORIZAO NO PIC ........................................................................................... 61

    8.1. A funoDelay: ...................................................................................................... 61

    8.2. Interrupo Temporizador: ..................................................................................... 648.3. O temporizador TIMER 0....................................................................................... 64

    Exerccios 8.1: .............................................................................................................. 689. SINAIS ANALGICOS NO PIC................................................................................... 70

    9.1. CONCEITOS BSICOS DOS CONVERSORES ................................................. 709.2. Tratamento de Entradas Analgicas no PIC ........................................................... 72Exemplo 9.2: ....................................................................................................................... 74Exerccios:........................................................................................................................... 76

    10. COMUNICAO SERIAL ....................................................................................... 7910.1. Comunicao Serial Sncrona x Comunicao Serial Assncrona...................... 7910.2. O RS232 no PIC.................................................................................................. 80

    EXEMPLO: ........................................................................................................................ 81Exerccios: ....................................................................................................................... 82

  • 7/23/2019 Apostila Pic C(1)

    3/98

  • 7/23/2019 Apostila Pic C(1)

    4/98

    Microcontroladores - PIC 3

    MICROCONTROLADORES PIC EM C

    1. INTRODUO AOS MICROCONTROLADORES

    1.1. O que um Microcontrolador?

    Podemos definir o microcontrolador como um "pequeno" componente eletrnico,dotado de uma "inteligncia" programvel, utilizado no controle de processoslgicos. O controle de processos deve ser entendido como o controle de perifricos,tais como: leds, botes, display's de cristal lquido (LCD), resistncias, rels,sensores diversos (presso, temperatura, etc.) e muitos outros. So chamados decontroles lgicos pois a operao do sistema baseia-se nas aes lgicas quedevem ser executadas, dependendo do estado dos perifricos de entrada e/ousada.

    1.2. Qual a diferena do Microcontroladores e dos Microprocessadores?

    Um microcontrolador difere de um microprocessador em vrios aspectos. Primeiro eo mais importante, a sua funcionalidade. Para que um microprocessador possaser usado, outros componentes devem-lhe ser adicionados, tais como memria ecomponentes para receber e enviar dados. Em resumo, isso significa que omicroprocessador o verdadeiro corao do computador. Por outro lado, omicrocontrolador foi projectado para ter tudo num s.Nenhuns outros componentes externos so necessrios nas aplicaes, uma vezque todos os perifricos necessrios j esto contidos nele. Assim, ns poupamostempo e espao na construo dos dispositivos.

    1.3. O que signi fica PIC?

    o nome que a Microchip adotou para a sua famlia de microcontroladores, sendoque a sigla significa Controlador Integrado de Perifricos.

    O PIC um circuito integrado produzido pela Microchip Technology Inc., quepertence da categoria dos microcontroladores, ou seja, um componente integrado

  • 7/23/2019 Apostila Pic C(1)

    5/98

    Microcontroladores - PIC 4

    MICROCONTROLADORES PIC EM C

    que em um nico dispositivo contem todos os circuitos necessrios para realizar umcompleto sistema digital programvel.

    Internamente dispe de todos os dispositivos tpicos de um sistemamicroprocessado, ou seja:Uma CPU (Central ProcessorUnit ou seja Unidade de Processamento Central) esua finalidade interpretar as instrues de programa.

    Uma memria PROM (Programmable Read Only Memory ou Memria ProgramavelSomente para Leitura) na qual ira memorizar de maneira permanente as instruesdo programa.

    Uma memria RAM (Random Access Memory ou Memoria de Accesso Aleatrio)utilizada para memorizar as variveis utilizadas pelo programa.

    Uma serie de LINHAS deI/O para controlardispositivos externos oureceber pulsos desensores, chaves, etc.Uma serie de dispositivosauxiliares aofuncionamento, ou sejagerador de clock, bus,contador, etc.

    A presena de todos estesdispositivos em um espaoextremamente pequeno,da ao projetista amplagama de trabalho eenorme vantagem em usarum sistemamicroprocessado, onde empouco tempo e compoucos componentesexternos podemos fazer o

    que seria oneroso fazer com circuitos tradicionais.O PIC esta disponvel em uma ampla gama de modelos para melhor adaptar-se asexigencias de projetos especificos, diferenciando-se pelo numero de linha de I/O epelo conteudo do dispositivo. Inicia-se com modelo pequeno identificado pela siglaPIC12Cxx dotado de 8 pinos, at chegar a modelos maiores com sigla PIC17Cxxdotados de 40 pinos.Uma descrio detalhada da tipologia do PIC disponivel no site da Microchipacessavel via , onde conseguimos encontrar grandes e variadas quantidades deinformaes tecnicas, software de apoio, exemplos de aplicaes e atualizaesdisponiveis.Para o nosso curso usaremos um modelo de PIC o PIC16F877. Este dotado de

    40 pinos.

  • 7/23/2019 Apostila Pic C(1)

    6/98

    Microcontroladores - PIC 5

    MICROCONTROLADORES PIC EM C

    1.4. Programao do PIC

    Como o PIC um dispositivo programvel, o programa tem como objetivo deixarinstrues para que o PIC possa fazer atividades definidas pelo programador.Um programa constitudo por um conjunto de instrues em seqncia, onde cadauma identificara precisamente a funo bsica que o PIC ira executar.Um programa escrito em linguagem assembler ou em C pode ser escrito emqualquer PC utilizando-se qualquer processador de texto que possa gerar arquivosASCII(Word, Notpad etc). Um arquivo de texto que contenha um programa emassembler denominado de source ou codigo assembler.Uma vez preparado o nosso cdigo assembler ou C(veremos mais adiante), iremosprecisar de um programa para traduzir as instrues mnemnicas e todas as outrasformas convencionais com que escrevemos o nosso cdigo em uma serie denmeros (o opcode) reconhecvel diretamente pelo PIC. Este programa se chama

    compilador assemblerou assemblador, o compilador usado neste curso ser oPCWH.Na figura seguinte est esquematizado o fluxograma de operaes e arquivos quedevera ser realizado para passar um cdigo assembler a um PIC a ser programado.

    Ilustrao 1: Fluxograma de compilao de um programa e gravao de um PIC

  • 7/23/2019 Apostila Pic C(1)

    7/98

    Microcontroladores - PIC 6

    MICROCONTROLADORES PIC EM C

    Para poder programar um PIC precisaremos de um Editor (Mplab ou o PCWH), umcompilador (PCWH) e um programador (PICStar Plus).

    1.5. O que o MpLab?

    O MpLab um ambiente integrado de desenvolvimento (I.D.E.: IntegratedDevelopment Environment). No mesmo ambiente o usurio pode executar todos osprocedimentos relativos ao desenvolvimento de um software para o PIC (edio,compilao, simulao, gravao), tornando o trabalho do projetista mais produtivo.Este programa totalmente gratuito e pode ser pego no site www.microchip.com.

    EdioO MpLab possui um editor de texto para seus programas que possui diversasferramentas de auxlio como localizar, substituir, recortar, copiar e colar.

    CompilaoCompilar significa traduzir um programa escrito em assembly (mneumnicos) paralinguagem de mquina (nmeros). A compilao gera um arquivo com extenso.hex (hexadecimal) a partir dos arquivos de cdigo fonte (.asm) e de projeto (.pjt). o contedo do arquivo hexadecimal que gravado na memria de programa doPIC.

    SimulaoO MpLab possui ferramentas para simulao do programa no prprio computador,possibilitando a execuo passo a passo, visualizao e edio do contedo dosregistradores, edio de estmulos (entradas), contagem de tempo de execuo,

    etc.

    GravaoPara que o programa seja executado no microcontrolador, o arquivo hexadecimaldeve ser gravado no PIC. O MpLab oferece suporte aos gravadores fabricados pelaMicrochip.

    EmulaoA Emulao um recurso de desenvolvimento que possibilita testes em tempo real.O MpLab oferece suporte ao hardware necessrio para estar emulando umdeterminado programa. Esta emulao feita conectando-se (atravs do hardware

    mencionado) o computador ao sistema projetado, no lugar do PIC

  • 7/23/2019 Apostila Pic C(1)

    8/98

    Microcontroladores - PIC 7

    MICROCONTROLADORES PIC EM C

    2. O PIC 16F877A

    Dentro de todos os PICs este um dos que apresenta mais recursos e seadpata as necessidades de nosso curso, entre suas caratersticas principaispodemos citar:

    Microcontrolador de 40 pinos, o que possibilita a montagem de um hardwarecomplexo ecapaz deinteragir comdiversosrecursos efunes aomesmo tempo.

    33 portasconfigurveiscomo entradaou sada.

    15interrupesdisponveis.

    Memria deprogramaoEPROMFLASH, quepermite agravaorpida doprogramadiversas vezes no mesmo chip, sem a necessidade de apag-lo por meio deluz ultravioleta, como acontece nos microcontroladores de janela;

    Memria de programa com 8Kwoeds, com capacidade de escrita e leiturapelo prpio cdigo interno;

    Memria EPROM (no voltil) interna com 256 bytes;

    Memria RAM com 368 bytes;

    Ts timers (2x8bits e 1x16 bits);

    Comunicaes seriais: SPI, IC e USART;Conversores analgicos de 10 bits(8x) e comparadores analgicos (2x);

    Conversores analgicos de 10 bits (8x) e comparadores analgicos (2x);

    Dois mdulos CCP: Capture, Compare e PWM;

  • 7/23/2019 Apostila Pic C(1)

    9/98

    Microcontroladores - PIC 8

    MICROCONTROLADORES PIC EM C

    2.1. NOMENCLATURA DOS PINOS

    Nome do Pino Nm.Pino

    I/O/P TIPO Descrio

    OSC1/CLKIN 13 I ST/CMOS Entrada para cristal. Osciladores externos(RC)

    OSC2/CLKOUT 14 O - Sada para cristal. Os cristais ou resonadores devemser ligados aos pinos OSC1 e OSC2.

    Sada com onda quadrada em da frequencia impostaem OSC1 quando em modo RC. Essa frequenciaequivale aos ciclos de mquina internos.

    MCLR/Vpp 1 I/P ST Master Clear (reset) externo. O uC s funciona quandoeste pino encontra-se em nvel alto.

    Entrada para tenso de programao 13V.

    Vss 12/31 P - GND

    Vdd 11/32 P - Alimentao positiva

    RA0/AN0

    RA1/AN1

    RA2/AN2/VREF-/CVREF

    RA3/AN3/VREF+

    RA4/TOCKI

    /C10OUTRA5/SS/AN4

    /C2OUT

    2

    3

    4-

    5-

    6

    -7

    I/0

    I/0

    I/0-

    I/0-

    I/0

    -I/0

    TTL

    TTL

    TTL-

    TTL-

    ST

    -TTL

    PORTA (I/O digitais bidirecionais e sistema analgico)

    RA0: I/O digital ou entrada analgica AN0

    RA1: I/O digital ou entrada analgica AN1

    RA2: I/O digital ou entrada analgica AN2 ou tensonegativa de referncia analgica.

    RA3: I/O digital ou entrada analgica AN3 ou tensopositiva de referncia analgica.

    RA4: I/O digital (open drayn), ou entrada externa do

    contador TMR0 ou sada do comparador 1.RA5: I/O digital ou entrada analgica AN4 ou habilitaoexterna (slave select) para comunicao SPI ou sadado comparador 2.

    RB0/INT

    RB1RB2

    RB3/PGM

    RB4

    RB5

    RB6/PGC

    RB7/PGD

    33

    3435

    36

    37

    38

    39

    40

    I/O

    I/OI/O

    I/O

    TTL/ST(1)

    TTLTTL

    TTL

    TTL

    TTL

    TTL/ST(2)

    TTL/ST(2)

    PORTB: (I/Os digitais bidirecionais). Todos os pinosdeste PORT possuem pull-up que podem ser ligado oudesligados pelo software:

    RB0: I/O digital com interrupo externa.

    RB1: I/O digital.RB2: I/O digital.

    RB3: I/O digital ou entrada para programao em baixatenso (5v).

    RB4: I/O digital com interrupo por mudana de estado

    RB5: I/O digital com interrupo por mudana de estado

    RB6: I/O digital com interrupo por mudana de estadoou clock da programao serial ou pino de in-circuitdebugger.

    RB7: I/O digital com interrupo por mudana de estadoou data da programao serial ou pino de in-circuitdebugger.

  • 7/23/2019 Apostila Pic C(1)

    10/98

    Microcontroladores - PIC 9

    MICROCONTROLADORES PIC EM C

    RC0/T1OSO/TICK1

    RC1/T1OSI/CCPS

    RC2/CCP1

    RC3/SCK/SCL

    RC4/SDI/DAS

    RC5/SDO

    RC6/TX/CK

    RC7/RX/DT

    15

    16

    17

    18

    23

    24

    25

    26

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    ST

    ST

    ST

    ST

    ST

    ST

    ST

    ST

    PORTC (I/Os digitais bidirecionais):

    RC0: I/O digital ou sada do oscilador externo paraTMR1 ou entrada de incremento para TMR1.

    RC1: I/O digital ou sada do oscilador externo paraTMR1 ou entrada de Capture2 ou sadas paraCompare2/PWM2.

    RC2: I/O digital ou entrada do Capture1 ou sadas paraCompare1/PWM1.

    RC3: I/O digital ou entrada/sada de clock paracomunicao serial SPI/IC.

    RC4: I/O digital ou entrada de dados para SPI ou via dedados (entrada/sada) para IC.

    RC5: I/O digital ou sada de dados para SPI.

    RC6: I/O digital ou TX (transmisso) para comunicaoUSART assncrona ou data para comunicao sncrona.RC7: I/O digital ou RX (recepo) para comunicaoUSART assncrona ou data para comunicao sncrona.

    RD0/PSP0

    RD1/PSP1

    RD2/PSP2

    RD3/PSP3

    RD4/PSP4

    RD5/PSP5

    RD6/PSP6

    RD7/PSP7

    19

    20

    21

    22

    27

    28

    29

    30

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    I/O

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    PORTD (I/Os digitais bidirecionais) ou porta decomunicao paralela:

    RD0: I/O digital ou dado 0 (comunicao paralela).

    RD1: I/O digital ou dado 1 (comunicao paralela).

    RD2: I/O digital ou dado 2 (comunicao paralela).

    RD3: I/O digital ou dado 3 (comunicao paralela).

    RD4: I/O digital ou dado 4 (comunicao paralela).

    RD5: I/O digital ou dado 5 (comunicao paralela).

    RD6: I/O digital ou dado 6 (comunicao paralela).

    RD7: I/O digital ou dado 7 (comunicao paralela).

    RE0/RD/AN5

    RE0/RD/AN6

    RE0/RD/AN7

    8

    9

    10

    I/O

    I/O

    I/O

    TTL/ST(3)

    TTL/ST(3)

    TTL/ST(3)

    PORTE (I/Os digitais bidirecionais e sistema analgico):

    RE0: I/O digital ou controle de leitura da porta paralelaou entrada analgica AN5.

    RE1: I/O digital ou controle de leitura da porta paralelaou entrada analgica AN6.

    RE2: I/O digital ou controle de leitura da porta paralelaou entrada analgica AN7.

    Legenda:I =Input (entrada) O = Output(sada)I/O = Input/OutPut (entrada ou sada) P = Power(Alimentao)

    - = no utilizado TTL = Entrada tipo TTLST = Entrada tipo Schmitt trigger

  • 7/23/2019 Apostila Pic C(1)

    11/98

    Microcontroladores - PIC 10

    MICROCONTROLADORES PIC EM C

    Notas:

    (1): Esta entrada do tipo ST, somente quando configurado como interrupoexterna.

    (2): Esta entrada do tipo ST, somente durante o modo de programao serial.

    (3): Esta entrada do tipo ST, quando configurado como I/O de uso geral e TTLquando usado em modo de porta paralela.

    (4): Esta entrada ST quando em modo RC e CMOS nos demais casos.

    2.2. QUE SCHMITT-TRIGGER?

    Observe o grfico de transio da porta lgica "NO" abaixo.

    Verifica-se pelo grfico que a transio de nvel lgico baixo (LOW) para alto (HIGH) muito longa, implicando na oscilao da sada da porta lgica "NO" medidaque o sinal de entrada passa pelo intervalo indefinido (1 ou 0), transportando parasada o mesmo efeito.

  • 7/23/2019 Apostila Pic C(1)

    12/98

    Microcontroladores - PIC 11

    MICROCONTROLADORES PIC EM C

    Um dispositivo interessante para a soluo deste problema lgico, so as portasSchmitt-trigger.

    Portanto fica claro que no existe apenas porta lgica "NO" Schmitt-trigger,existem outras portas com essa tecnologia.

    Porta lgica Schmitt-trigger projetada para aceitar sinais cuja a transio lentae garante na sada nvel lgico livre de oscilaes.

    Analisando o grfico da figura anterior observa-se que a sada muda de nvel lgico

    alto (HIGH) para baixo (LOW) quando a tenso de transio superior a VT +(Positive-going threshold -limiar de tenso positiva de transio).

  • 7/23/2019 Apostila Pic C(1)

    13/98

    Microcontroladores - PIC 12

    MICROCONTROLADORES PIC EM C

    2.3. GERADOR DE RELGIO OSCILADOR

    O circuito do oscilador usado para fornecer um relgio (clock), aomicrocontrolador. O clock necessrio para que o microcontrolador possa executarum programa ou as instrues de um programa.

    Tipos de osciladores

    O PIC pode trabalhar com quatro configuraes de oscilador. Uma vez que asconfiguraes com um oscilador de cristal e resistncia-condensador (RC) soaquelas mais frequentemente usadas, elas so as nicas que vamos mencionaraqui.

    Quando o oscilador de cristal, a designao da configurao de XT, se ooscilador for uma resistncia em srie com um condensador, tem a designao RC.

    Isto importante, porque h necessidade de optar entre os diversos tipos deoscilador, quando se escolhe um microcontrolador.

    2.4. Oscilador XT

    O oscilador de cristal est contido num envlucro de metal com dois pinos onde foiescrita a freqncia a que o cristal oscila. Dois condensadores cermicos devemligar cada um dos pinos do cristal massa. Casos h em que cristal econdensadores esto contidos no mesmo encapsulamento, tambm o caso doressonador cermico ao lado representado. Este elemento tem trs pinos com o

    pino central ligado massa e os outros dois pinos ligados aos pinos OSC1 e OSC2do microcontrolador. Quando projetamos um dispositivo, a regra colocar ooscilador to perto quanto possvel do microcontrolador, de modo a evitar qualquerinterferncia nas linhas que ligam o oscilador ao microcontrolador.

  • 7/23/2019 Apostila Pic C(1)

    14/98

    Microcontroladores - PIC 13

    MICROCONTROLADORES PIC EM C

    Ilustrao 2: Clock de um microcontrolador a partirde um cristal de quartzo

    Ilustrao 3: Clock de um microcontrolador comum ressonador

    2.5. Oscilador RC

    Em aplicaes em que a preciso da temporizao no um fator crtico, ooscilador RC torna-se mais econmico. A freqncia de ressonncia do osciladorRC depende da tenso de alimentao, da resistncia R, capacidade C e da

    temperatura de funcionamento.

    Ilustrao 4: Ligao de umoscilador RC

    O diagrama acima, mostra como um oscilador RC deve ser ligado a umPIC16F877A. Com um valor para a resistncia R abaixo de 2,2 K, o oscilador podetornar-se instvel ou pode mesmo parar de oscilar. Para um valor muito grande R(1M, por exemplo), o oscilador torna-se muito sensvel umidade e ao rudo. recomendado que o valor da resistncia R esteja compreendido entre 3K e 100K.Apesar de o oscilador poder trabalhar sem condensador externo (C = 0 pF), conveniente, ainda assim, usar um condensador acima de 20 pF para evitar o rudoe aumentar a estabilidade. Qualquer que seja o oscilador que se est a utilizar, afreqncia de trabalho do microcontrolador a do oscilador dividida por quatro. Afreqncia de oscilao dividida por 4 tambm fornecida no pino OSC2/CLKOUTe, pode ser usada, para testar ou sincronizar outros circuitos lgicos pertencentesao sistema.

  • 7/23/2019 Apostila Pic C(1)

    15/98

    Microcontroladores - PIC 14

    MICROCONTROLADORES PIC EM C

    Ilustrao 5:Relao entre o sinal de clock e os ciclos de instruo

    Ao ligar a alimentao do circuito, o oscilador comea a oscilar. Primeiro com umperodo de oscilao e uma amplitude instvel, mas, depois de algum tempo, tudoestabiliza.

    Ilustrao 6:Sinal de clock do oscilador do microcontrolador depois de ser ligada a alimentao

    Para evitar que esta instabilidade inicial do clock afete o funcionamento do

    microcontrolador, ns necessitamos de manter o microcontrolador no estado dereset enquanto o clock do oscilador no estabiliza. O diagrama em cima, mostrauma forma tpica do sinal fornecido por um oscilador de cristal de quartzo aomicrocontrolador quando se liga a alimentao.

    Para ter um controle sobre o reset conveniente instalar um boto como se mostrana figura.

  • 7/23/2019 Apostila Pic C(1)

    16/98

    Microcontroladores - PIC 15

    MICROCONTROLADORES PIC EM C

    Ilustrao 7: Circuito de Reset atravs de um boto

  • 7/23/2019 Apostila Pic C(1)

    17/98

    Microcontroladores - PIC 16

    MICROCONTROLADORES PIC EM C

    3. AMBIENTE INTEGRADO DE DESENVOLVIMENTO (IDE)

    Como ambiente de desenvolvimentos ser usado o compilador PCWH daCCS. Este constitudo de um IDE grfico que pode ser executado em qualquerplataforma Windows. Este ambiente permitir uma programao dos PICs emlinguagem C. Existe a possibilidade de se fazer uma integrao com o ambienteMPLAB da prpria microchip. Como vantagem do uso desse compilador pode-secitar a grande eficincia do cdigo gerado, compatibilidade com o padro ANSI eISSO salvo algumas excees e a sua grande diversidade de funes e bibliotecasdesenvolvidas em linguagem C.

    O objetivo deste captulo a compreenso do ambiente de programao eda seqncia para poder criar um novo projeto usando o MpLab como editor e oCCS como compilador.

    Ilustrao 8: Ambiente de desenvolvimento PCWH

    Atualmente, a maioria dos microcontroladores disponveis no mercado contacom compiladores de linguagem C para o desenvolvimento de software. Odesenvolvimento em C permite uma grande velocidade na criao de novosprojetos permite que o programador preocupe-se mais com a programao daaplicao em si, j que o compilador asssume para si tarefas como o controle elocalizao das variveis, operaes matemticas e lgicas, verificao de bancosde memria, etc.

    Existe outra linguagem muito usada chamado Assembly que bastanteeficiente, mas o programador ter que se preocupar pela localizao das variveis,

  • 7/23/2019 Apostila Pic C(1)

    18/98

    Microcontroladores - PIC 17

    MICROCONTROLADORES PIC EM C

    pelos estados dos registros controladores de hardware, exigindo do programador oconhecimento do hardware usado.

    Sendo nosso curso Tcnico escolho-se como principal opo a linguagem Cpara que o aluno possa aproveitar ao mximo o seu tempo, ampliando desta formasuas habilidades na programao de PICs. Quando um programa se faa crtico nosentido de precisar mais eficincia o programador dever escolher a linguagemAssembler.

    importante tambm sinalizar que este programa tem um excelenteambiente de programao (EDITOR), mas nosso curso usar como editor ouambiente de escrita de programa o MPLAB, programa gratuito da MICROCHIP. OMPLAB como foi dito tem tambm um ambiente de simulao que ser bastanteusado. O compilador PCW necessrio na medida em que o MPLAB usar este.

    3.1. CRIAO DE UM PROJETO:

    Nesta sesso sero explicados os passos para poder criar um projeto: Abrir o MPLAB

    Ilustrao 9: Abrindo o MPLAB

    Tambm possvel abrir o MPLAB atravs do cone no DESKOP.

  • 7/23/2019 Apostila Pic C(1)

    19/98

    Microcontroladores - PIC 18

    MICROCONTROLADORES PIC EM C

    Criar um projeto novo usando o assistente (Wizard), para isto clicar no menuProject / Project Wizard .... como mostrado na seguinte figura.

    Ilustrao 10: Criao de um projeto usando o Assistente (Wizard)

    Avanar

    Ilustrao 11: Bem vinda do assistente para criao de projeto

  • 7/23/2019 Apostila Pic C(1)

    20/98

    Microcontroladores - PIC 19

    MICROCONTROLADORES PIC EM C

    Escolher o tipo de PIC e clicar em avanar

    Ilustrao 12: Seleo do PIC usando o assistente (wizard)

    Escolha o compilar CCS C compiler for PIC12/14/16/18 e depois emavanar.

    Ilustrao 13: Escolha do Compilador CCS no assistente (wizard)

    A localizao do arquivo Ccsc.exe muito importante. Neste caso esta localizado

    na pasta C:\Arquivos de programas\PICC\Ccsc.exe.

  • 7/23/2019 Apostila Pic C(1)

    21/98

    Microcontroladores - PIC 20

    MICROCONTROLADORES PIC EM C

    Escrever o nome do projeto e sua localizao, logo clicar em avanar.

    Ilustrao 14: Nome do Projeto - Assistente (Wizard)

    Incrementar algum arquivo existente no projeto em caso de ter. Para este curso porenquanto no incrementaremos nenhum arquivo e clicaremos em avanardiretamente.

    Ilustrao 15: Incremento de Arquivos no Assistente - (Wizard)

  • 7/23/2019 Apostila Pic C(1)

    22/98

    Microcontroladores - PIC 21

    MICROCONTROLADORES PIC EM C

    Clicar em concluir para criar o projeto com os parmetros mostrados na tela.

    Ilustrao 16: Sumrio do Projeto - Fim do Assistente (Wizard)

    Finalmente temos o projeto, mas precisamos de um arquivo onde possamos escrevero cdigo, para isto clicamos no menu File/New

    Ilustrao 17: Criao de um novo arquivo C

  • 7/23/2019 Apostila Pic C(1)

    23/98

    Microcontroladores - PIC 22

    MICROCONTROLADORES PIC EM C

    Escrevemos o programa em cdigo C

    Ilustrao 18: Escrita do programe em C

    Depois de escrever o programa dever salvar este. Clicar em salvar eescrever em nome do arquivo Ejemplo1.c e clicar no boto Salvar.

    Ilustrao 19: Gravao do arquivo "C"

  • 7/23/2019 Apostila Pic C(1)

    24/98

    Microcontroladores - PIC 23

    MICROCONTROLADORES PIC EM C

    At aqui o seu projeto esta vazio sem nenhum programa. O programa criado aindano esta associado ao projeto.

    Com o mouse sobre Source Files clicar no boto direito do mouse, depoisclicar na opo Add Files.

    Ilustrao 20: Incremento de arquivos ao projeto

    Em examinar escolha o caminho aonde foi gravado o arquivo anteriormente,neste caso C:\Temp\picc. Escolha o arquivo e clicar no boto Abrir.

  • 7/23/2019 Apostila Pic C(1)

    25/98

  • 7/23/2019 Apostila Pic C(1)

    26/98

    Microcontroladores - PIC 25

    MICROCONTROLADORES PIC EM C

    4. INTRODUO LINGUAGEM C O PRIMEIRO PROGRAMA

    Agora estamos em condies de poder comear a escrever um programa noambiente de desenvolvimento, chegou a hora de estudar os fundamentos da

    linguagem C.No projeto criado, abrimos, salvamos e incrementamos um arquivo chamadoEjemplo1.C, neste arquivo podemos escrever o seguinte programa:

    EXEMPLO 1: Neste exemplo iremos desenvolver um exerccio e explicar a primeiraparte do programa e a funcionalidade das funes. Desta forma no sernecessrio explicar nos exemplos posteriores os itens explicados neste exemplo.

    #include #use delay(clock=4000000, RESTART_WDT)

    #fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt#use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    #bit botao = portb.0#bit led = portb.1

    void main (){

    set_tris_a(0b11111111);set_tris_b(0b11111001);set_tris_c(0b11111111);set_tris_d(0b11111111);set_tris_e(0b00000111);

    porta=0x00;portb=0x00;

    portc=0x00;portd=0x00;porte=0x00;

    while(TRUE){

    RESTART_WDT();if(!botao)

    led = 1;else

    led=0;}

    }

  • 7/23/2019 Apostila Pic C(1)

    27/98

    Microcontroladores - PIC 26

    MICROCONTROLADORES PIC EM C

    Vejamos o significado de cada linha do programa.#include

    uma diretiva do compilador. Neste caso est determinando ao compiladorque anexe ao programa o arquivo especificado 16f877A.h.Arquivos .h so chamadosde arquivos de cabealho e so utilizados em C para definir variveis, tipos,

    smbolos e funes teis ao programa.O 16f877A.h. um arquivo com as definies relativas ao processador lavo,

    para o qual o programa ser compilado.

    #use delay(clock=4000000, RESTART_WDT)A seqncia #use especifica uma diretiva interna do compilador. Aqui

    determinado o valor de 4 MHz para a freqncia do clock.

    #fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrtConfigurao dos fusveis.XT: O oscilador, da maioria dos PIC, externo, sem ele nada funciona.

    Existem vrios tipos de osciladores como o RC composto por uma resistncia e umcapacitor e o cristal XT que mais preciso sendo tambm os mais caros.

    NOWDT: Watchdog timer ou co de guarda um recurso poderosssimo quedeve ser utilizado. um contador automtico incrementado por meio de umoscilador prprio, independente do oscilador principal. Caso o WDT estoure, umreset do sistema ir ocorrer imediatamente.

    noprotect: permite reprogramar o PIC e enxergar o cdigo.

    put: prev que o programa no comece antes que a alimentao seja

    inicializada. Esta opo ir fazer com que o PIC comece a operar cerca de 72 msaps o pino /MCLR seja colocado em nvel alto.

    Brown-Out: utilizado para forar um reset quando a tenso de alimentaosofre uma pequena queda. Ele extremamente recomendado em projetos quepossibilitam ao usurio desligar e religar rapidamente a alimentao.

    NOLVP Low Voltage Programming disabled

    Trabalho 4.1: Pesquisar para a prxima aula as outras diretivas no comentadas.

    #use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    Afeta como o compilador gerar cdigo para as instrues de entrada ousada que seguem. Esta diretiva tem efeito at que uma nova diretiva #use xxxx_IOseja encontrado. Este mtodo rpido de configurao de configurao de I/O aconfigurar corretamente a direo de I/O usando a instruo set_tris_X().

    #byte porta = 0x05#byte portb = 0x06

  • 7/23/2019 Apostila Pic C(1)

    28/98

  • 7/23/2019 Apostila Pic C(1)

    29/98

    Microcontroladores - PIC 28

    MICROCONTROLADORES PIC EM C

    led=0;O comando if (em portugus se) utilizado para avaliar a condio que esta

    entre parnteses. Em caso de que esta condio seja verdadeira o comandoseguinte ser executado. Em caso de ser falsa (else) o comando depois dainstruo else ser executado. Neste exemplo o a varivel booleana boto esta

    negada (!botao) quer disser se o boto estivesse em estado zero a condio serfalsa e o led ser igual a 1. Em caso que o boto seja 1 a condio ser falsa e oled ser igual a zero.

    Trabalho 4.2: Responda as seguintes perguntas: No programa do exemplo 1 disser como esta configurado o pino portb.4?.

    uma entrada ou uma sada e por qu? A varivel led esta associada a que pino do PIC?. Responder com o nmero

    do pino. Porque no exemplo 1 foram consideradas 5 portas?. Explicar olhando o

    desenho do PIC. No programa em que linha decide o tipo de PIC a ser usado? Que mudaria no programa para que quando boto = 1 o led seja 1? Incremente no exemplo1 a varivel botao1 e led1. Quando boto1 seja igual

    a 1 led1 dever de ser zero e quando boto1 seja zero, led1 ser 1. Esquematize o circuito eletrnico para testar este programa. Utilize um

    oscilador de cristal e lembre que o limite de corrente oscila entre os 20mApor cada pino de sada. A tenso de alimentao do PIC de 5 v. Instale umboto que aoi ser pressionado reiniciar o PIC (reset).

    At aqui se espera que o leitor consiga associar o pino do PIC s portas

    mencionadas no programa, e que possa entender este exemplo que mesmo sendobsico o incio do aprendizado de um recurso sem limites. At a prxima aulaonde aprenderemos a simular programas sem a necessidade de um hardware.

  • 7/23/2019 Apostila Pic C(1)

    30/98

    Microcontroladores - PIC 29

    MICROCONTROLADORES PIC EM C

    5. USO DO MPSIM PARA SIMULAO

    Neste captulo o objetivo que o leitor consiga aprender a simular o seuprojeto. Em outras palavras sem necessidade do circuito eletrnico podemos

    conferir se o programa pode compilar, (esta sem erros de sintaxe) e responde daforma que se quer (sem erros lgicos).O MpSim um utilitrio do MpLab e tem a finalidade de simular o projeto.

    Para poder fazer uso deste dever de seguir os seguintes passos:1. Escolher a ferramenta MpLab SIM no menu Debugger/Select Tool/MpLab SIM.

    Ilustrao 22: Escolha da ferramenta MpLab SIM

    2. Compilar o seu projeto, clicando no cone mostrado no grfico ou pressionando F10.

    Ilustrao 23: Compilao do projeto

  • 7/23/2019 Apostila Pic C(1)

    31/98

    Microcontroladores - PIC 30

    MICROCONTROLADORES PIC EM C

    3. Observe na janela OutPut o resultado da compilao, neste caso a compilaofoi bem sucedida (build succeeded), mostrando o caminho aonde foramcopiados os arquivos produto desta compilao. Tambm mostra o nmero deerros da compilao e de avisos (warnings). Em caso de erro este sermostrado, e indicado em que linha se encontra. Se sua compilao contiveralgum erro, proceda a sua localizao e correo.

    Ilustrao 24: Visualizao do resultado da compilao

    Exerccios 5.1:1. Incremente a palavra Brasil depois da linha de programa while(TRUE) e

    compile o projeto.2. Em que linha se apresentou o erro?. Verifique a barra de indicao inferior najanela do Mplab que mostra a linha e a coluna na qual se encontra o cursor.

    3. Porque ao incrementar esta palavra provocou ao compilador o erro?

    Nos programas comum o uso de comentrios para poder incrementar umcomentrio necessrio escrever while(TRUE) //Brasil. Estes caracteres //antecedem a um comentrio de linha simples. So utilizados para descrever ofuncionamento ao final de cada linha de cdigo.

    4. Agora hora de aprender a usar as ferramentas deste utilitrio, no seguinte

    grfico podemos observar que temos 7 botes que controlam a simulao.

  • 7/23/2019 Apostila Pic C(1)

    32/98

  • 7/23/2019 Apostila Pic C(1)

    33/98

    Microcontroladores - PIC 32

    MICROCONTROLADORES PIC EM C

    5. No tem sentido visualizar a simulao do programa se no conseguirestimular as entradas para poder observar o comportamento das sadas.Para isto existe uma ferramenta no MPSIM, clicar na opo do menuDebugger/Stimulus Controller/New Scenario como se mostra na ilustraoseguinte.

    Ilustrao 26: Criao de um controle de estimulo

  • 7/23/2019 Apostila Pic C(1)

    34/98

    Microcontroladores - PIC 33

    MICROCONTROLADORES PIC EM C

    6. Como as entradas tm que ser simuladas neste ambiente, criamos asentradas que sero estimuladas ou controladas nesta janela.

    Ilustrao 27: Parametrizao de um estimulo ou entrada digital no simulador MPSIMEscolhemos RB0 porque no exemplo 1 este representa a varivel boto, e o

    tipo de ao do estimulo ter reteno. Em outras palavras boto ser uma chave

    com reteno.Este ambiente pode ser salvo e aberto. Na ilustrao anterior observa-se queexistem 5 tipos de ao:

    Set High: O Pino de referncia tomar o valor de 1. Para que seja novamentezero necessariamente ter que ser executada a ao Set Low.

    Set Low: O Pino de referncia tomar o valor de 0. Para que seja novamenteum(1) necessariamente ter que ser executada a ao Set High.

    Toggle:Ao ser executada esta ao o pino de referncia mudar de estado,se estiver em zero este ir para um, se estiver em um ir para zero. Estaao atua como uma chave com reteno.

    Pulse high: Ao que manter ligado o pino respectivo s um instante. Em

    outras palavras enviar um pulso. Pulse low:Ao que manter desligado o pino respectivo s um instante. Em

    outras palavras enviar um pulso em sentido contrrio a Pulse high.

    Como j foi percebido na coluna PIN/SFR so selecionados os pinos do PICque sero estimulados.

    As colunas Width e units, so usados em caso de que a ao selecionadaseja o pulse high ou low, na coluna width (largura) especificada a largura do pulso,e na coluna units a unidade respectiva.

    Para que a ao seja executada o usurio dever clicar o boto da colunafire.

  • 7/23/2019 Apostila Pic C(1)

    35/98

    Microcontroladores - PIC 34

    MICROCONTROLADORES PIC EM C

    As vezes a desorganizao faz perder as pessoas um valioso tempo, naprogramao a organizao esta relacionada entre outras coisas com oscomentrios, A coluna comments serve para escrever comentrios ou at parasimular entradas de mensagens pela porta serial.

    Agora o leitor deve estar preparado para simular o seu projeto com estmulosde entrada.

    Exerccios 5.3:1) Pressionar o boto Step Over nos botes de controle de simulao e

    verifique se a linha de comando depois da instruo if executada. Naseguinte barredura estimule o varivel boto e verifique novamente aexecuo desta linha. Anote suas observaes, que esta acontecendo?

    2) Incremente na janela de controle de estmulos aes de Set Low e Set highpara o boto e visualize este funcionamento.

  • 7/23/2019 Apostila Pic C(1)

    36/98

    Microcontroladores - PIC 35

    MICROCONTROLADORES PIC EM C

    7. O fato de poder estimular as entradas no ajuda muito se no se visualizacom maior clareza a reao das sadas. Existem vrias formas de visualizaro comportamento das sadas, mas por enquanto se usar o opo localizadano menu View/Watch.

    Ilustrao 28: Abrindo um visualizador de registros watch

    Watch, permite voc digitar uma varivel, ou qualquer expresso importantee visualizaro resultado. Neste caso escolhemos a varivel led e clicamos no botoAdd Symbol, para poder mudar as caractersticas de visualizao clicar com o botodireito sobre a varivel em questo e selecionar properties e na janela emergente

    selecione o sistema de numerao binrio, feche a janela e simule usando o botoStep Over. O watch Permite visualizar tanto sadas como entradas.

    Ilustrao 29: Janela da opo Watch

    Exerccios 5.4:

    1. Inserir na janela watch o byte portb em binrio e simular novamente oprograma observando detalhadamente os resultados.

  • 7/23/2019 Apostila Pic C(1)

    37/98

    Microcontroladores - PIC 36

    MICROCONTROLADORES PIC EM C

    2. Simular o seguinte programa e descrever o seu funcionamento. Existe umerro neste programa identifique-lo.

    /********************************************************* CEFETES* Prof: Marco Antonio

    * Exemplo 2: Funo IF - reforo* Materia: MICROCONTROLADORES* Data: Julho 2006 /Linhares********************************************************/#include #use delay(clock=4000000, RESTART_WDT)#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt#use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    #bit BotaoLiga = portb.0#bit BotaoDesliga = portb.1#bit Motor1 = portb.2#bit Lampada = portb.3

    void main (){

    set_tris_a(0b11111111);set_tris_b(0b11111011);set_tris_c(0b11111111);set_tris_d(0b11111111);set_tris_e(0b00000111);

    porta=0x00;portb=0x00;portc=0x00;portd=0x00;porte=0x00;

    while(TRUE)

    { if(!BotaoLiga){

    Motor1 = 1;Lampada=1;

    }if(!BotaoDesliga){

    Motor1 = 0;Lampada=0;

    }

    }

    }

  • 7/23/2019 Apostila Pic C(1)

    38/98

  • 7/23/2019 Apostila Pic C(1)

    39/98

    Microcontroladores - PIC 38

    MICROCONTROLADORES PIC EM C

    /********************************************************* CEFETES* Prof: Marco Antonio* Exemplo 1: Estrutura Bsica de um programa em C* Materia: Microcontroladores* Data: Agosto 2006

    ********************************************************//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIO DAS VARIVEIS INTERNAS DO PIC ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include // microcontrolador utilizado

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Configuraes para gravao ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt // configurao dos fusveis

    #use delay(clock=4000000, RESTART_WDT)/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao das variveis ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///Neste bloco esto definidas as variveis globais do programa.//Este programa no utiliza nenhuma varivel de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Constantes internas ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de constantes facilita a programao e a manuteno.//Este programa no utiliza nenhuma constante de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Declarao dos flags de software ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de flags ajuda na programao e economiza memria RAM.//Este programa no utiliza nenhum flag de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao dos port's ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ENTRADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#bit BotaoSA14_b1 = portb.1

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** SADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 7/23/2019 Apostila Pic C(1)

    40/98

    Microcontroladores - PIC 39

    MICROCONTROLADORES PIC EM C

    #bit HabLed = porta.4#bit HabBotao = portb.7

    #bit Led0 = portd.0

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

    * Configuraes do Microcontrolador ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    void main (){// configura CONFIGsetup_counters(RTCC_INTERNAL, WDT_2304MS);

    // configura os TRISset_tris_a(0b00100000);set_tris_b(0b00001111);set_tris_c(0b10011001);set_tris_d(0b00000000);set_tris_e(0b00000000);

    // inicializa os portsporta=0x00; // limpa portaportb=0x00; // limpa portbportc=0x00; // limpa portcportd=0x00; // limpa portdporte=0x00; // limpa porte

    HabLed =1;HabBotao=1;

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Loop principal ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    while(TRUE){RESTART_WDT();if(BotaoSA14_b1) // testa boto

    Led0 = 1; // Se boto = 0, ento led = 1else

    Led0=0; // caso contrrio, led = 0

    }// FIM DO PROGRAMA

    }/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Fim do Programa ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 7/23/2019 Apostila Pic C(1)

    41/98

  • 7/23/2019 Apostila Pic C(1)

    42/98

    Microcontroladores - PIC 41

    MICROCONTROLADORES PIC EM C

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIO DAS VARIVEIS INTERNAS DO PIC ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include // microcontrolador utilizado

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

    * Configuraes para gravao ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt // configurao dos fusveis

    #use delay(clock=4000000, RESTART_WDT)/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao das variveis ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///Neste bloco esto definidas as variveis globais do programa.//Este programa no utiliza nenhuma varivel de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Constantes internas ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Declarao dos flags de software ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de flags ajuda na programao e economiza memria RAM.//Este programa no utiliza nenhum flag de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao dos port's ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ENTRADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#bit Botao7 = portb.1#bit BotaoDesLiga = portb.2#bit Botao9 = portb.3

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** SADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#bit HabLed = porta.4#bit HabBotao = portb.6

    #bit Led0 = portd.0#byte Display = portd

  • 7/23/2019 Apostila Pic C(1)

    43/98

    Microcontroladores - PIC 42

    MICROCONTROLADORES PIC EM C

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Configuraes do Microcontrolador ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    void main (){

    // configura CONFIGsetup_counters(RTCC_INTERNAL, WDT_2304MS);

    // configura os TRISset_tris_a(0b00100000);set_tris_b(0b00001111);set_tris_c(0b10011001);set_tris_d(0b00000000);set_tris_e(0b00000000);

    // inicializa os portsporta=0x00; // limpa portaportb=0x00; // limpa portbportc=0x00; // limpa portcportd=0x00; // limpa portdporte=0x00; // limpa porte

    HabLed =1;HabBotao=1;//rb7

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Loop principal ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    while(TRUE){RESTART_WDT();if(Botao9) // testa boto

    portd = 0b01101111;if(Botao7) // testa boto

    portd = 0b00000111;if(BotaoDesLiga)

    portd = 0b00000000; // caso contrrio, led = 0

    }// FIM DO PROGRAMA

    }/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Fim do Programa ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 7/23/2019 Apostila Pic C(1)

    44/98

    Microcontroladores - PIC 43

    MICROCONTROLADORES PIC EM C

    6. AS VARIVEIS NO COMPILADOR CCS

    6.1. O que so Variveis?

    Para voc poder manipular dados dos mais diversos tipos, necessrio poderarmazen-los na memria e poder referenci-los quando for preciso. para issoque existem as variveis, que nada mais so do que um espao reservado namemria, e que possuem um nome para facilitar a referncia. As variveis podemser de qualquer tipo visto nesta aula: int, char, float, double, etc.

    Como o prprio nome diz, as variveis podem ter o seu contedo alterado durante aexecuo do programa, ou seja, o programador tem a liberdade de atribuir valoresao decorrer da execuo.

    6.2. Tipos de variveis

    O C tem 5 tipos bsicos: char, in t, float, void, double. Destes no todos os tiposfazem parte do compilador CCS. O double o ponto flutuante duplo e pode servisto como um ponto flutuante com muito mais preciso. O void o tipo vazio, ouum "tipo sem tipo". A aplicao deste "tipo" ser vista posteriormente. Na seguintetabela observaremos os tipos de dados do compilador CCS.

    Type-Specifi er Num bits Coment

    int1 1 Define a 1 bit numberint8 8 Defines an 8 bit numberint16 16 Defines a 16 bit numberint32 32 Defines a 32 bit numberchar 8 Defines a 8 bit characterfloat 32 Defines a 32 bit floating point numbershort 1 By default the same as int1

    Int 8 By default the same as int8long 16 By default the same as int16byte 8bi t 1

    void 0 Indicates no specific type

    6.3. OS MODIFICADORES

    Para cada um dos tipos de variveis existem os modificadores de tipo. Osmodificadores de tipo do C so quatro: signed, unsigned, long e short. Ao floatno se pode aplicar nenhum.

    Os quatro modificadores podem ser aplicados a inteiros. A inteno queshort e long devam prover tamanhos diferentes de nmeros inteiros, onde isto forprtico. Inteiros menores (short) ou maiores (long). Assim, se especificamos uma

    varivel como sendo do tipo short int, este ser uma verso reduzida do tipo int, o

  • 7/23/2019 Apostila Pic C(1)

    45/98

    Microcontroladores - PIC 44

    MICROCONTROLADORES PIC EM C

    que no caso do compilador CCS cria uma varivel de apenas um bit. Umaespecificao long int criar uma varivel de 16 bits

    O modificador unsigned serve para especificar variveis sem sinal. Umunsigned int ser um inteiro que assumir apenas valores positivos. Arepresentao de nmeros negativos feita tomando o bit MSB (Most Significant Bitou bit mais significativo) da varivel para representar o sinal: bit MSB =1, sinalnegativo, bit MSB = 0, sinal positivo. Note que devido ao fato de utilizar um bit pararepresentao do sinal, a magnitude absoluta de representao do tipo modificadoser metade da magnitude do tipo no modificado.

    Assim, um tipo de dados signed int pode representar valores entre -128 e+127, em vez de 0 a 255.

    Todos os tipos, exceto o Float, por defeito so unsigned; porem pode estar

    precedido porunsigned ou signed. Na seguinte tabela mostramos alguns exemplosde combinaes possveis dos tipos de dados do compilador CCS.

    IntervaloTipo Num de bits

    Inicio Fim

    char 8 0 255

    unsigned char 8 0 255

    signed char 8 -128 127

    int, int8, byte 8 0 255

    unsigned int, unsignet byte 8 0 255signed int, signed int 8 -128 127

    long int 16 0 65.535

    signed long int 16 -32.768 32.767

    unsigned long int 16 0 65.535

    Int32, unsigned int32 32 0 4.294.967.295

    Signed int32 32 -2,147.483.648 2,147.483.647

    float 32 3,4E-38 3.4E+38

    6.4. Declarao de Variveis

    Todas as variveis em C devem ser declaradas antes de serem usadas. A formageral de declarao de uma varivel a seguinte:

    tipo nome_da_variavel;

    Exemplos:

    Uma varivel de cada vez:

    int id;

  • 7/23/2019 Apostila Pic C(1)

    46/98

    Microcontroladores - PIC 45

    MICROCONTROLADORES PIC EM C

    float aux;unsigned int i;char carac;

    Ou vrias do mesmo tipo em uma nica linha:

    int id, obj, n, t;char c1, c2, c3;

    Onde tipo pode ser qualquer tipo vlido da linguagem C, e nome_da_variavel deveser um nome dado pelo programador, sendo o primeiro caractere uma letra ou um"_", e os demais, letras, nmeros ou "_".

    num _caracpeso Id_obj

    aluno_1 AUX

    Lembrando que C diferencia maisculas de minsculas.

    No so nomes vlidos de variveis:

    1num -idade$aux id@al

    6.5. Inicializando Variveis

    Inicializar significa atribuir um valor inicial a uma varivel. Em C, podemos inicializarvariveis na declarao:

    int n=12;

    Neste exemplo, estamos declarando a varivel inteira n e atribuindo o valor 12 ela. O sinal de igual (=) em C o operador de atribuio. Ele serve para colocar ovalor (do lado direito) na varivel (lado esquerdo).

    Podemos tambm inicializar uma varivel no corpo do programa, aps suadeclarao:

    int n;n=12;

    Pode-se atribuir tambm variveis a variveis:

    num=i;

    Neste caso, a varivel num est recebendo o valor da varivel i.

  • 7/23/2019 Apostila Pic C(1)

    47/98

    Microcontroladores - PIC 46

    MICROCONTROLADORES PIC EM C

    6.6. Variveis Locais e Globais

    As variveis podem ser locais ou globais. As variveis locais so aquelasdeclaradas dentro de uma funo, sendo somente "vistas" dentro desta funo. Sevoc tentar acessar uma varivel local de fora da funo onde ela est, acontecerum erro. Aps a execuo desta funo, as variveis locais ali contidas sodestrudas. Na aula sobre funes estudaremos mais sobre variveis locais, comexemplos.

    As variveis globais so aquelas declaradas fora de qualquer funo, at dafuno main(). So reconhecidas pelo programa inteiro e podem ser usadas emqualquer lugar do cdigo, mesmo dentro de funes. Seus valores ficam guardadosdurante toda a execuo do programa. Veja um exemplo do uso de variveisglobais:

    #include *****int num; /* num uma varivel global */

    int main(){

    int contador=0; //contador uma varivel localnum= 10;printf("%d", n);return 0;

    }

    Assim como as variveis locais, veremos as variveis globais com mais detalhes naaula sobre funes.

    6.7. Constantes

    Constantes em C so valores fixos, que no mudam durante a execuo. Elaspodem ser de qualquer tipo bsico: inteiras, ponto flutuante, caractere, string.

    De maneira geral, qualquer tipo de dado pode ser utilizado para definir umaconstante, cabendo apenas ao programador representar o valor dela

    adequadamente.

    const valor1 = 10const valor1 = -3const valor1 = 13.24const valor1 = cconst valor1 = CEFETES-Linhares

    As constantes so tambm utilizadas para impedir que uma funo altere umparmetro passado a ela.

    Bem, nesta aula voc aprendeu sobre os tipos de dados que a linguagem C podemanipular. Tambm viu a forma de armazenar temporariamente estes dados, com o

  • 7/23/2019 Apostila Pic C(1)

    48/98

    Microcontroladores - PIC 47

    MICROCONTROLADORES PIC EM C

    uso de variveis, e como expressar constantes de vrios tipos em C. Na prximaaula estudaremos os operadores da linguagem C (aritmticos, relacionais, lgicos,etc.). No percam!

    Exerccios 6.1:

    1. Qual a faixa numrica de uma varivel in t? E de um unsigned int?

    2. Qual a diferena de um signed int para um in t?

    3. Por que a declarao de uma varivel como unsigned redundante?

    4. O que so variveis e qual sua utilidade?

    5. Qual a diferena entre as variveis locais e globais?

    8. O que so constantes? D exemplos.

    9. Assinale a alternativa que possui um nome de varivel CORRETO:

    $num -temp _carac_ 3aux

  • 7/23/2019 Apostila Pic C(1)

    49/98

    Microcontroladores - PIC 48

    MICROCONTROLADORES PIC EM C

    7. OPERADORES EM CJ aprendemos sobre a estrutura bsica de um programa em C, sobre os tipos dedados que C pode manipular, sobre o que so variveis e constantes. Na aula de

    hoje voc aprender a criar expresses em C com o uso de operadores, sejameles aritmticos, lgicos, relacionais, etc. Mostraremos vrios exemplos efinalizaremos a aula com exerccios.

    Ento, p na tbua!

    7.1. O Operador de Atr ibuio

    Na aula sobre variveis j foi falado sobre o operador de atribuio (o smbolo deigual "="). O que ele faz colocar o valor de uma expresso (do lado direito) emuma varivel (do lado esquerdo). Uma expresso neste caso pode ser um valor

    constante, uma varivel ou uma expresso matemtica mesmo.

    um operador binrio, ou seja, trabalha com dois operandos. Exemplos:

    Atribuio de uma constante a uma varivel:

    n= 10;ch= 'a';fp= 2.51;

    Atribuio do valor de uma varivel a outra varivel:

    n= num;

    Atribuio do valor de uma expresso a uma varivel:

    n= (5+2)/4;

    Atribuies mltiplas:

    x = y = z = 20;

    Em uma atribuio, primeiro processado o lado direito. Depois de processado,ento, o valor atribudo a varivel.

    Como voc viu no ltimo exemplo acima, C tambm permite atribuies mltiplas(como x = y = z = 20;). Neste caso, todas as variveis da atribuio (x, y e z)recebem o valor mais direita (20).

    7.2. Os Operadores Ari tmticos

    Estes so, de longe, os mais usados. Os operadores aritmticos em C trabalhampraticamente da mesma forma que em outras linguagens. So os operadores +

  • 7/23/2019 Apostila Pic C(1)

    50/98

    Microcontroladores - PIC 49

    MICROCONTROLADORES PIC EM C

    (adio), - (subtrao), * (multiplicao), / (diviso) e % (mdulo ou resto da divisointeira), todos estes binrios (de dois operandos). Temos tambm o - unrio, quemuda o sinal de uma varivel ou expresso para negativo. Veja a tabela a seguir:

    Operador Descrio Exemplo

    - unrio Inverte o sinal de uma expresso -10, -n, -(5*3+8)

    * Multiplicao 3*5, num*i

    / Diviso 2/6, n/(2+5)

    % Mdulo da diviso inteira (resto) 5%2, n%k

    + Adio 8+10, exp+num

    - Subtrao 3-6, n-p

    A precedncia dos operadores aritmticos a seguinte:

    Mais alta

    - unrio

    * / %

    + -

    Mais baixa

    Uma expresso deste tipo:

    5 + 2 * 3 - 8 / 4

    avaliada assim: primeiro a multiplicao (2*3), depois a diviso (8/4). Osresultados obtidos destas duas operaes so utilizados para resolver as duasltimas operaes:

    5 + 6 - 2

    adio e subtrao. Igualzinho matemtica aprendida no primrio...

    Tudo isso porque as operaes de multiplicao e diviso tm maior precedncia eestas so resolvidas primeiro em uma expresso. Para mudar a ordem deoperao, devem-se usar parnteses. Deve-se tomar cuidado ao construirexpresses, pois a falta de parnteses pode causar erros no resultado.

    O Operador% equivalente ao mod em Pascal, e til em vrias situaes. Ele dcomo resultado o resto da diviso inteira de dois operandos. Assim, fica fcil, porexemplo, saber se um nmero mltiplo de outro:

    if ((num%3)==0) /* se o resto da diviso entre num e 3 for igual a 0 ... */printf("Mltiplo de 3\n");

  • 7/23/2019 Apostila Pic C(1)

    51/98

    Microcontroladores - PIC 50

    MICROCONTROLADORES PIC EM C

    Este apenas um de vrios problemas que podem ser resolvidos com o uso dooperador%.

    7.3. Operadores Relacionais e Lgicos

    Os operadores relacionais e lgicos so usados em testes e comparaes,principalmente nos comandos de controle e nos laos.

    Para entender melhor esses operadores, temos que entender o conceito deverdadeiro e falso. Em C, verdadeiro qualquer valor diferente de zero, e falso zero. As expresses que usam operadores relacionais e lgicos retornam 0 parafalso e 1 para verdadeiro.

    Os operadores relacionais so 6:

    Operador Ao< Menor que

    Maior que

    >= Maior que ou igual

    == Igual

    != Diferente

    Veja um exemplo do uso de operadores relacionais:

    #include /* Incluso de stdio.h(necessrio para printf e scanf) */

    int main(){

    int n; /* Declarao de uma varivelinteira */

    printf("Digite um nmero: ");scanf("%d", &n); /* L o nmero e armazena na varivel n */if (n < 0) /* Se n for MENOR QUE 0... */

    printf("Nmero negativo\n"); /* ... escreve isto. */else /* Seno... */

    printf("Nmero positivo\n"); /* ... escreve isto. */return 0; /* Retorna 0 para o sistema (sucesso) */

    }

    Tente fazer alguns testes com os outros operadores relacionais. Sei l, seja criativo!Voc o programador... :)

  • 7/23/2019 Apostila Pic C(1)

    52/98

    Microcontroladores - PIC 51

    MICROCONTROLADORES PIC EM C

    Os operadores lgicos so 3:

    Operador Ao Formato da expresso

    && and (e lgico) p && q

    || or (ou lgico) p || q

    ! not (no lgico) !p

    Veja um exemplo, s do bloco if:

    if ((n > 0) && (n < 100)) /* se n for maior que 0 E n formenor que 100... */

    printf("Nmero positivo menor que 100\n"); /* ... imprime isto */

    Outro exemplo:

    if ((n == 0) || (n == 1)) /* se n for IGUAL a 0 OU n for igual a 1... */

    printf("zero ou um\n"); /* ... imprime isto. */

    A tabela seguinte mostra a precedncia dos operadores relacionais e lgicos:

    Maior!

    >, >=,

  • 7/23/2019 Apostila Pic C(1)

    53/98

    Microcontroladores - PIC 52

    MICROCONTROLADORES PIC EM C

    ou depois da varivel:

    n++;

    A diferena que, se o operador precede o operando (++n), o incremento oudecremento realizado antes do valor da varivel ser usado. E se o operador vemdepois do operando (n++), o valor da varivel poder ser usado antes de acontecera operao de incremento ou decremento. Veja estes dois exemplos:

    Exemplo 1:

    n= 5;p= ++n;printf("%d ",p); /* imprime na tela: 6 */

    Exemplo 2:n= 5;p= n++;printf("%d ",p); /* imprime na tela: 5 */

    No exemplo 1, a varivel n incrementada de 1 ANTES de seu valor ser atribudo ap. No exemplo 2, o valor de n atribudo a p antes de acontecer a operao deincremento. Essa a diferena de se colocar esses operadores antes ou depois davarivel.

    7.5. Operadores Ari tmticos de Atr ibuio

    Algumas operaes de atribuio podem ser feitas de forma resumida. Porexemplo, a atribuio:

    x= x+10;

    pode ser escrita:

    x+=10;

    A forma geral desse tipo de atribuio :

    varivel [operador]= [expresso];

    que igual a:

    varivel= varivel [operador] [expresso]

    Veja essa tabela com exemplos:

  • 7/23/2019 Apostila Pic C(1)

    54/98

    Microcontroladores - PIC 53

    MICROCONTROLADORES PIC EM C

    Forma longa Forma resumida

    x= x+10 x+=10

    x= x-10 x-=10

    x= x*10 x*=10

    x= x/10 x/=10

    x= x%10 x%=10

    Se familiarize com essa notao, pois um estilo largamente adotado pelosprofissionais que trabalham com C.

    7.6. Operadores Bit a Bit

    A linguagem C, ao contrrio de outras linguagens, suporta um amplo conjunto deoperadores bit a bit. Como C precisava substituir a linguagem Assembly na maioriadas tarefas, era de vital importncia que pudesse realizar essas operaes.

    As operaes bit a bit manipulam diretamente os bits de um byte ou uma palavra, eessas operaes s podem ser feitas em variveis in t e char(e suas variantes). Ostipos void, float, double e long double NO podem ser usados.

    Esses operadores so usados com mais freqncia em drivers de dispositivo, comorotinas de impressoras, modems, operaes com arquivos em disco, rotinas da

    porta serial e paralela, etc.

    Veja os operadores bit a bit:

    Operador Ao& and ("e" lgico)| or ("ou" lgico)^ exclusive or ("ou exclusivo")~ complemento de 1>> deslocamento direita

  • 7/23/2019 Apostila Pic C(1)

    55/98

  • 7/23/2019 Apostila Pic C(1)

    56/98

    Microcontroladores - PIC 55

    MICROCONTROLADORES PIC EM C

    0111 => O resultado desta operao 7 (111).

    ~y: 1001----0110 => O resultado desta operao 6 (110).

    A voc me pergunta: e os operadores de deslocamento? Esses operadoresdeslocam n bits para a esquerda ou direita:

    x>>1 0100 => resultado: 4x>>2 0010 => resultado: 2

    y

  • 7/23/2019 Apostila Pic C(1)

    57/98

    Microcontroladores - PIC 56

    MICROCONTROLADORES PIC EM C

    portas de alta impedncia especialmente problemtico, uma vez que o valor lgicoda porta poder oscilar continuamente entre nvel lgico alto e baixo.

    Ilustrao 30: a)Configurao com resistncia pull-up;b) Configurao com resistncia pull-down

    Estudem bastante e faam os exerccios e exemplos.

  • 7/23/2019 Apostila Pic C(1)

    58/98

    Microcontroladores - PIC 57

    MICROCONTROLADORES PIC EM C

    Exemplos:

    1. Resolver o seguinte problema: Fazero Projeto, para o controle da BombaB1, sendo que o nvel sempre estarentre S1 e S2 (sensores bia).Quando o nvel atinge o motor S2 oseu contato fecha, e quando o nvelatinge S1 este tambm fecha, sendoque S2, j esta fechado porque o nvelesta sobre S2.

    Para poder ter uma noo, de como poderia ser o circuito eletrnico, apresentado o esquemtico deste. O motor no pode ser ligado diretamentepelo PIC, por enquanto consideraremos que um Led (LMOTOR)representando oMotor.

    Ilustrao 31: Circuito eltrico do exemplo 7.1

  • 7/23/2019 Apostila Pic C(1)

    59/98

    Microcontroladores - PIC 58

    MICROCONTROLADORES PIC EM C

    Simular o seguinte programa escrito. Depois descrever o seu funcionamento.

    /********************************************************* CEFETES

    * Prof: Marco Antonio* Exemplo 2: Controle de Nvel num tanque de gua* Materia: MICROCONTROLADORES* Data: Julho 2006 /Linhares********************************************************/#include #use delay(clock=4000000, RESTART_WDT)#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt#use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    #bit LMotor = portb.0#bit S1 = portb.2#bit S2 = portb.3

    void main (){

    set_tris_a(0b11111111);set_tris_b(0b11110110);set_tris_c(0b11111111);set_tris_d(0b11111111);set_tris_e(0b00000111);

    porta=0x00;portb=0x00;portc=0x00;portd=0x00;porte=0x00;

    while(TRUE){

    if((!S1)&&(!S2))LMotor =1;

    if((S1)&&(S2))LMotor = 0;

    }}

  • 7/23/2019 Apostila Pic C(1)

    60/98

    Microcontroladores - PIC 59

    MICROCONTROLADORES PIC EM C

    Exerccios 7.1:

    1) Para que serve o operador de atribuio?

    2) Assinale a expresso aritmtica com resultado CORRETO:

    a) 2+3*5 = 30b) 5*2/2 = 5c) 4+6-8/2 = 6d) (-3)*4 = 12

    3) As expresses a seguir tm como resultado VERDADEIRO (1) ou FALSO (0)?

    a) 1 > 2b) 2 >= 1c) 3 != 3d) 'c' == 'c'

    4) Fazer um projeto para que a presso do vapor sempre permanea entre umafaixa especfica (histerese), sabendo que a histerese do pressostato calibradano instrumento. Os nveis do tanque sempre devem de estar entre S1 e S2,sabendo que a bomba 1 tem uma partida simples. V2 s abrira quando apresso esteja entre os nveis de histereses determinado.

    .

    Ilustrao 32: Exerccio 7.4, controle de presso

  • 7/23/2019 Apostila Pic C(1)

    61/98

    Microcontroladores - PIC 60

    MICROCONTROLADORES PIC EM C

    5) Um misturador permite a seleo entre 2 materiais atravs de um seletor S2. Naposio 1 (S2 = 0), o material A passa para o tanque de mistura se o boto S1esta atuado simultaneamente. Com o seletor S2 em posio 2 (S2=1) e S1atuado o material B passa para o tanque de mistura. As Vlvulas solenides VAe VB permitem a passagem dos materiais. Faa o projeto e simule.

    Ilustrao 33: Exerccio 7.5, misturador, combinacionais

  • 7/23/2019 Apostila Pic C(1)

    62/98

    Microcontroladores - PIC 61

    MICROCONTROLADORES PIC EM C

    8. TEMPORIZAO NO PIC

    Los temporizadores los encontramos en muchos lugares de nuestra vidadiaria, generalmente integrados en aparatos domsticos. Por ejemplo en los hornos

    de microondas para controlar el tiempo de calentamiento de nuestros alimentos, oen las lavadoras de ropa para seleccionar el tiempo lavado.

    Tambin a escala industrial las aplicaciones de los temporizadores sonmltiples. Los hay para controlar el tiempo de arranque de algn proceso, se usanen mquinas herramientas, en dosificadores, fotografa, etc. La lista es interminable.

    Neste captulo aprenderemos a usar temporizadores, so duas formasbsicas: usando a funo delay e interrupes. A funo delay no permite aexecuo de outras funes no decorrer do tempo, j usando interrupes isto noacontece. Desta forma, as interrupes tm muitas vantagens sobre a funoDelay.

    8.1. A funo Delay:

    Esta funo criar cdigo para executar uma demora do tempo especificado.O tempo especificado em milisegundos. Esta funo trabalha executando umnmero preciso de instrues para causar a demora pedida.

    O tempo de demora pode ser mais longo do que o pedido se uma interrupofor chamada durante a espera do tempo. O tempo gastado na interrupo noconta para o tempo de demora.

    Sintaxes da funo: delay_ms(time);

    Parmetros: time se for varivel de 0 a 255 se for constante de 0 a 65635.

    Exemplo 8.1: conveniente observar que neste exemplo o watch dog timer esta ativado,

    neste caso ser necessrio resetar o WDT para que o PIC no seja resetado e

    comece a ser executada a primeira linha do programa. Para isto usada a funoRESTART_WDT().

    Alem da funo Delay, existem outras funes que ainda no foram vistas.Trata-se das funes output_high(PIN_B0) e output_low(PIN_B0).

    A funo output_high(PIN_B0), utilizada para setar (ou seja, colocar emnvel lgico 1) um pino do microcontrolador. Isto significa que o pino RB0 (da portaB) ser setado.

    Note que PIN_B0 um smbolo predefinido para especificar o pino RB0.Este smbolo esta localizado no arquivo de cabealho do processador 16f877A.h.

  • 7/23/2019 Apostila Pic C(1)

    63/98

    Microcontroladores - PIC 62

    MICROCONTROLADORES PIC EM C

    Da mesma forma a funo output_high(PIN_B0), utilizada para resetar(ou seja, colocar em nvel lgico 0) um pino do microcontrolador. Isto significa queo pino RB0 (da porta B) ser resetado.

    /********************************************************* CEABRA* Prof: Marco Antonio* Exemplo 1: Pisca Pisca (Estrutura bsica de um programa)* Matria: Microcontroladores* Data: Julho 2006********************************************************//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIO DAS VARIVEIS INTERNAS DO PIC ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include // microcontrolador utilizado

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

    * Configuraes para gravao ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt // configurao dos fusve

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definies para uso de Rotinas de Delay ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use delay(clock=4000000, RESTART_WDT)/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao das variveis *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///Neste bloco esto definidas as variveis globais do programa.//Este programa no utiliza nenhuma varivel de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Constantes internas ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de constantes facilita a programao e a manuteno.//Este programa no utiliza nenhuma constante de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Declarao dos flags de software ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de flags ajuda na programao e economiza memria RAM.//Este programa no utiliza nenhum flag de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao dos port's ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07

  • 7/23/2019 Apostila Pic C(1)

    64/98

    Microcontroladores - PIC 63

    MICROCONTROLADORES PIC EM C

    #byte portd = 0x08#byte porte = 0x09

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ENTRADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    // As entradas devem ser associadas a nomes para facilitar a programao e//futuras alteraes do hardware.

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** SADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMAO E//FUTURAS ALTERAES DO HARDWARE.

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Configuraes do Microcontrolador ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    void main (){// configura CONFIGsetup_counters(RTCC_INTERNAL, WDT_2304MS);

    // configura os TRISset_tris_a(0b11111111); // configurao dos pinos de I/Oset_tris_b(0b11111000);set_tris_c(0b11111111);set_tris_d(0b11111111);set_tris_e(0b00000111);

    // inicializa os portsporta=0x00; // limpa portaportb=0x00; // limpa portbportc=0x00; // limpa portcportd=0x00; // limpa portdporte=0x00; // limpa porte

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Loop principal ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    while(TRUE){RESTART_WDT();

    output_high(PIN_B0);delay_ms(1000);output_low(PIN_B0);delay_ms(1000);output_high(PIN_B1);delay_ms(1000);output_low(PIN_B1);delay_ms(1000);

    }// FIM DO PROGRAMA

    }/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Fim do Programa ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  • 7/23/2019 Apostila Pic C(1)

    65/98

    Microcontroladores - PIC 64

    MICROCONTROLADORES PIC EM C

    Ilustrao 34: Circui to para o Exemplo 2

    8.2. Interrupo Tempor izador:

    As interrupes so mecanismos que o microcontrolador possui e que tornapossvel responder a alguns acontecimentos no momento em que eles ocorrem,qualquer que seja a tarefa que o microcontrolador esteja a executar no momento.Esta uma parte muito importante, porque fornece a ligao entre ummicrocontrolador e o mundo real que nos rodeia. Geralmente, cada interrupomuda a direo de execuo do programa, suspendendo a sua execuo, enquantoo microcontrolador corre um subprograma que a rotina de atendimento deinterrupo. Depois de este subprograma ter sido executado, o microcontroladorcontinua com o programa principal, a partir do local em que o tinha abandonado.

    8.3. O temporizador TIMER 0

    Os temporizadores so normalmente as partes mais complicadas de ummicrocontrolador, assim, necessrio gastar mais tempo a explic-los. Servindo-nos deles, possvel relacionar uma dimenso real que o tempo, com umavarivel que representa o estado de um temporizador dentro de ummicrocontrolador. Fisicamente, o temporizador um registro cujo valor estcontinuamente a ser incrementado at 255, chegado a este nmero, ele comea

    outra vez de novo: 0, 1, 2, 3, 4, ...,255, 0,1, 2, 3,..., etc.

  • 7/23/2019 Apostila Pic C(1)

    66/98

    Microcontroladores - PIC 65

    MICROCONTROLADORES PIC EM C

    Este registro chamado de TMR0 que incrementado a cada ciclo demquina (sem pr-escala: Clock/4). Se ocorrer uma escrita em TMR0, o incrementoser inibido pelos dois ciclos de mquina seguintes. A interrupo do Timer 0 gerada quando o contedo do registrador TMR0 passar de FFH para 00H.

    Exemplo 8.2:Vejamos neste exemplo como configurar o mdulo timer 0 para que uma

    sada pisque a cada segundo. Neste caso o clock de 4 MHz e utilizado umprescaler de 32, ento teremos uma freqncia de entrada no timer 0 de:

    Fosc/(4*preEscala) = 4 000 000/(4*32) = 31250

    Deste resultado podemos tirar uma concluso: a cada vez que o registroTMR0 se incrementa em 1, passa na verdade um tempo de 1/31250 seg.

    Agora a pergunta a cada quanto tempo chamada a funo de

    interrupo? A resposta simples como a funo de interrupo chamada depoisdo estouro do registrador TMR0 e esta estoura depois de 255 vezes o tempo paracada interrupo ser de:

    255*1/31250 = 0,00816 seg

    O tempo desejado de 1 seg, ento:

    #Interrup*0,00816 seg = 1 seg #Interrup = 122,549

    Como o nmero de interrupes inteiro, temos que encontrar outro mdiode ter maior exatido. Para isto, podemos iniciar o registro TMR0 com 13, de forma

    que a primeira interrupo acontea depois de 125 ciclos (256-131) de TMR0, epara fazer isto repetitivo reiniciado o registro TMR0 com 131 na propria sub-rotinade interrupo. Cada interrupo teria 125 ciclos, como cada ciclo tem um tempode 1/31250 cada interrupo ter um tempo de 125*1/31250 = 0,004 seg.

    O tempo desejado de 1 seg, ento:

    #Interrup*0,004 seg = 1 seg #Interrup = 250

    /********************************************************* CEFETES* Prof: Marco Antonio* Exemplo 8.2: Pisca - Pisca, usando interrupo Timer 0* Materia: Eletrnica Digital* Data: Setembro 2005********************************************************//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIO DAS VARIVEIS INTERNAS DO PIC ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include // microcontrolador utilizado

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Configuraes para gravao ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 7/23/2019 Apostila Pic C(1)

    67/98

    Microcontroladores - PIC 66

    MICROCONTROLADORES PIC EM C

    #fuses xt,wdt,noprotect,put,brownout,nolvp,nocpd,nowrt // configurao dos fusveis

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definies para uso de Rotinas de Delay ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use delay(clock=4000000, RESTART_WDT)/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao das variveis ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///Neste bloco esto definidas as variveis globais do programa.//Este programa no utiliza nenhuma varivel de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Constantes internas ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de constantes facilita a programao e a manuteno.//Este programa no utiliza nenhuma constante de usurio

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Declarao dos flags de software ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *///A definio de flags ajuda na programao e economiza memria RAM.int conta;

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Definio e inicializao dos port's ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    #use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

    #byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ENTRADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */// As entradas devem ser associadas a nomes para facilitar a programao e//futuras alteraes do hardware.

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** SADAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */// AS SADAS DEVEM SER ASSOCIADAS A NOMES PARA FACILITAR A PROGRAMAO E//FUTURAS ALTERAES DO HARDWARE.

    #bit led = portb.0 // Led correspondente ao boto 0

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Configuraes do Microcontrolador *

    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#int_timer0void trata_t0(){

  • 7/23/2019 Apostila Pic C(1)

    68/98

    Microcontroladores - PIC 67

    MICROCONTROLADORES PIC EM C

    //reinicia o timer 0 em 131 menos a contagem que j passouset_timer0 (131-get_timer0());conta++;//se j ocorreram 125 interrupesif (conta ==125){

    conta=0;led = !led; //inverte o led

    }}void main ()

    {// configura CONFIGsetup_counters(RTCC_INTERNAL, WDT_2304MS);

    //configura o timer 0 para o clock interno e prescaler dividindo por 32setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_32 );SET_TIMER0(131); //INICIA O TIMER 0 EM 131

    //HABILITA INTERRUPESENABLE_INTERRUPTS (GLOBAL | INT_TIMER0);

    // configura os TRISset_tris_a(0b11111111); // configurao dos pinos de I/Oset_tris_b(0b11111000);set_tris_c(0b11111111);set_tris_d(0b11111111);set_tris_e(0b00000111);

    // inicializa os portsporta=0x00; // limpa portaportb=0x00; // limpa portbportc=0x00; // limpa portcportd=0x00; // limpa portdporte=0x00; // limpa porte

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Loop principal ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

    while(TRUE){RESTART_WDT();

    }// FIM DO PROGRAMA

    }/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** Fim do Programa ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 7/23/2019 Apostila Pic C(1)

    69/98

    Microcontroladores - PIC 68

    MICROCONTROLADORES PIC EM C

    Exerccios 8.1:

    1) Qual a diferena entre usar a funo Delay e a interrupo do TMR0?2) Fazer um semforo, primeiro usando a funo Delay e depois usando a

    interrupo TMR0. Simular e testar na bancada.3) Utilizando seu conhecimento em temporizadores, automatizar o sinal de

    trnsito. Simular e testar na bancada.

    Red = O:2/00 Green = O:2/02 Amber = O:2/01 R

    Green = O:2/06 Amber = O:2/05 Red = O:2/04

    8 sec. 4 sec. 1s 8 sec. 4 sec. 1s

    4) O proprietrio de uma casa est cansado porque muitas vezes os ladresentram no quintal e decidiu pedir ajuda aos alunos do CEFETES-Linhares.Pediu uma forma barata de fazer um alarme. O professor orientou aos alunosda seguinte forma:

    Como o quintal era grande pediu para usar um diodo lazer paraconstruir um sensor de barreira, s que o lazer no podia estar ligadoconstantemente, devia ficar ligado o 10% do perodo a uma freqnciade 1 KHz.

    Para o receptor oriento trabalhar com uma resistncia LDR que temmaior rea sensora.

    O alarme no poderia disparar imediatamente ao ser cortada abarreira, dever esperar segundo para ter certeza que se trata deum ladro.

    Boa sorte galera. Vocs tero que montar o projeto.

  • 7/23/2019 Apostila Pic C(1)

    70/98

  • 7/23/2019 Apostila Pic C(1)

    71/98

    Microcontroladores - PIC 70

    MICROCONTROLADORES PIC EM C

    9. SINAIS ANALGICOS NO PIC

    Como os sinais dos perifricos so substancialmente diferentes daqueles queo microcontrolador pode entender (zero e um), eles devem ser convertidos num

    formato que possa ser compreendido pelo microcontrolador.

    9.1. CONCEITOS BSICOS DOS CONVERSORES

    Uma entrada analgica de tenso para que possa entrar no CLP, PIC oucomputador precisa ser amostrada e convertida num valor numrico atravs de umconversor A/D.

    A seguinte figura mostra como muda a tenso contnua sobre o tempo.Existem trs amostras indicadas na figura. O processo de amostragem dos dados

    no instantneo, existe um tempo inicial e final. O tempo requerido para a amostra chamado de tempo de amostragem.

    Ilustrao 35: Amostragem de um sinal analgico

    O conversor A/D pode s adquirir um nmero limitado de amostras porsegundo. O tempo entre cada amostra chamado de perodo de amostragem T e ainversa desse perodo a freqncia de amostragem. A freqncia de amostragemdepender de alguns fatores como do programa e do Clock.

    Existem vrios ranges de entradas analgicas padronizadas como de 0 a 5V,de 0 a10V, de -5 a 5V, de -10 a 10V, de 0 a 20 mA, de 4 a 20 mA. Quando o tipo dosinal analgico for corrente, necessrio colocar em serie uma resistncia de paratransformar este sinal em tenso. A resistncia recomendada de 250 ohms, destaforma ranges de 0 a 20ma e de 4 a 20 mA transformam-se em faixas de 0 a 5V e de1 a 5V respectivamente.

  • 7/23/2019 Apostila Pic C(1)

    72/98

    Microcontroladores - PIC 71

    MICROCONTROLADORES PIC EM C

    O nmero de bits do conversor A/D o nmero de bits da palavra resultado.Se o conversor A/D fosse de 8 bits, ento o resultado ter 256 nveis. O PIC queestamos usando tem conversores de 10 bits.

    No exemplo da figura seguinte vemos que se a freqncia de amostragemfosse menor que a freqncia do sinal o instrumento estaria perdendo informao.Para isto recomendado que a freqncia do CLP deve de ser pelo menos duasvezes a do sinal.

    Ilustrao 36: Amostragem de um sinal com freqncia muito maior a frequencia de amostragem

    Exerccios 9.1:a) Sendo que o range de uma entrada analgica de um CLP de 0 a10V, e o

    conversor tivesse uma resoluo de 10 bits. Qual seria o valor do nmeroresultante para uma entrada de 5 volts?

    b) No desenho temos um potencimetro que atua como sensor do braoMecnico construdo por alunos do CEFETES/AN3 2003, este potencimetrorepresenta a posio do brao, sendo que a posio do brao de 0 a 100%.

    E o potencimetro na posio 0% tem uma tenso de sada de 1V ena de 100% uma tenso de 4.5 V, e esta tenso representa a entradaanalgica do PIC na varivel SenAnalog1 (0/4095-10bits e de 0 a 5V), disserqual ser a