98
CENTRO FEDERAL DE EDUCAÇÃO TECNOLOGICA DO ESPIRITO SANTO PROF: MARCO ANTONIO APOSTILA DE: PROGRAMAÇÃO DE MICROCONTROLADORES PIC USANDO LINGUAGEM C UNED – SERRA / AUTOMAÇÃO INDUSTRIAL VITORIA, AGOSTO 2006

Apostila - Pic-c - Cefetes

Embed Size (px)

Citation preview

  • CENTRO FEDERAL DE EDUCAO TECNOLOGICA DO ESPIRITO SANTO

    PROF: MARCO ANTONIO

    APOSTILA DE: PROGRAMAO DE

    MICROCONTROLADORES PIC USANDO LINGUAGEM C

    UNED SERRA / AUTOMAO INDUSTRIAL

    VITORIA, AGOSTO 2006

  • Microcontroladores - PIC 1

    MICROCONTROLADORES PIC EM C

    INTRODUO ....................................................................................................................... 2 1. INTRODUO AOS MICROCONTROLADORES ...................................................... 3

    1.1. O que um Microcontrolador? ................................................................................. 3 1.2. Qual a diferena do Microcontroladores e dos Microprocessadores? ...................... 3 1.3. O que significa PIC? ................................................................................................. 3 1.4. Programao do PIC ................................................................................................. 5 1.5. O que o MpLab?..................................................................................................... 6

    2. O PIC 16F877A ................................................................................................................ 7 2.1. NOMENCLATURA DOS PINOS ........................................................................... 8 2.2. QUE SCHMITT-TRIGGER?.............................................................................. 10 2.3. GERADOR DE RELGIO OSCILADOR ......................................................... 12 2.4. Oscilador XT........................................................................................................... 12 2.5. Oscilador RC........................................................................................................... 13

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

    4. INTRODUO LINGUAGEM C O PRIMEIRO PROGRAMA........................... 25 5. USO DO MPSIM PARA SIMULAO ....................................................................... 29 6. AS VARIVEIS NO COMPILADOR CCS .................................................................. 43

    6.1. O que so Variveis? .............................................................................................. 43 6.2. Tipos de variveis ................................................................................................... 43 6.3. OS MODIFICADORES.......................................................................................... 43 6.4. Declarao de Variveis ......................................................................................... 44 6.5. Inicializando Variveis ........................................................................................... 45 6.6. Variveis Locais e Globais ..................................................................................... 46 6.7. Constantes ............................................................................................................... 46 Exerccios 6.1:..................................................................................................................... 47

    7. OPERADORES EM C.................................................................................................... 48 7.1. O Operador de Atribuio....................................................................................... 48 7.2. Os Operadores Aritmticos..................................................................................... 48 7.3. Operadores Relacionais e Lgicos.......................................................................... 50 7.4. Operadores de Incremento e Decremento............................................................... 51 7.5. Operadores Aritmticos de Atribuio ................................................................... 52 7.6. Operadores Bit a Bit................................................................................................ 53 7.7. Interface com os interruptores ................................................................................ 55

    Exerccios 7.1: .............................................................................................................. 59 8. TEMPORIZAO NO PIC ........................................................................................... 61

    8.1. A funo Delay: ...................................................................................................... 61 8.2. Interrupo Temporizador: ..................................................................................... 64 8.3. O temporizador TIMER 0....................................................................................... 64

    Exerccios 8.1: .............................................................................................................. 68 9. SINAIS ANALGICOS NO PIC................................................................................... 70

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

    10. COMUNICAO SERIAL ....................................................................................... 79 10.1. Comunicao Serial Sncrona x Comunicao Serial Assncrona...................... 79 10.2. O RS232 no PIC.................................................................................................. 80 EXEMPLO:........................................................................................................................ 81 Exerccios: ....................................................................................................................... 82

  • Microcontroladores - PIC 2

    MICROCONTROLADORES PIC EM C

    INTRODUO

    Esta pequena apostilha esta orientada para os profissionais tcnicos que necessitam de conhecimentos bsicos do PIC. Abordaremos noes da estrutura do PIC16F877A 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. O compilar CCS ser o escolhido e o entorno ou editor ser o MatLab V 7.4. Uma vez com nosso ambiente instalado abordaremos as caractersticas bsicas do PIC 16F877A. importante mencionar que usaremos o mdulo de desenvolvimento SD-1700 que atualmente esta descontinuado, mas considerado pelo autor como uma excelente ferramenta. O estudo da linguagem C ser focado compreenso das funes bsicas e sua relao com o circuito de teste. Com esses espera-se que o leitor consiga entender a infinita utilizada destes magnficos dispositivos.

  • 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 processos lgicos. 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 de controles lgicos pois a operao do sistema baseia-se nas aes lgicas que devem ser executadas, dependendo do estado dos perifricos de entrada e/ou sada.

    1.2. Qual a diferena do Microcontroladores e dos Microprocessadores?

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

    1.3. O que significa PIC?

    o nome que a Microchip adotou para a sua famlia de microcontroladores, sendo que a sigla significa Controlador Integrado de Perifricos. O PIC um circuito integrado produzido pela Microchip Technology Inc., que pertence da categoria dos microcontroladores, ou seja, um componente integrado

  • Microcontroladores - PIC 4

    MICROCONTROLADORES PIC EM C

    que em um nico dispositivo contem todos os circuitos necessrios para realizar um completo sistema digital programvel. Internamente dispe de todos os dispositivos tpicos de um sistema microprocessado, ou seja: Uma CPU (Central Processor Unit ou seja Unidade de Processamento Central) e sua finalidade interpretar as instrues de programa. Uma memria PROM (Programmable Read Only Memory ou Memria Programavel Somente para Leitura) na qual ira memorizar de maneira permanente as instrues do programa. Uma memria RAM (Random Access Memory ou Memoria de Accesso Aleatrio) utilizada para memorizar as variveis utilizadas pelo programa. Uma serie de LINHAS de I/O para controlar dispositivos externos ou receber pulsos de sensores, chaves, etc. Uma serie de dispositivos auxiliares ao funcionamento, ou seja gerador de clock, bus, contador, etc. A presena de todos estes dispositivos em um espao extremamente pequeno, da ao projetista ampla gama de trabalho e enorme vantagem em usar um sistema microprocessado, onde em pouco tempo e com poucos componentes externos podemos fazer o que seria oneroso fazer com circuitos tradicionais. O PIC esta disponvel em uma ampla gama de modelos para melhor adaptar-se as exigencias de projetos especificos, diferenciando-se pelo numero de linha de I/O e pelo conteudo do dispositivo. Inicia-se com modelo pequeno identificado pela sigla PIC12Cxx dotado de 8 pinos, at chegar a modelos maiores com sigla PIC17Cxx dotados de 40 pinos. Uma descrio detalhada da tipologia do PIC disponivel no site da Microchip acessavel via , onde conseguimos encontrar grandes e variadas quantidades de informaes tecnicas, software de apoio, exemplos de aplicaes e atualizaes disponiveis. Para o nosso curso usaremos um modelo de PIC o PIC16F877. Este dotado de 40 pinos.

  • Microcontroladores - PIC 5

    MICROCONTROLADORES PIC EM C

    1.4. Programao do PIC

    Como o PIC um dispositivo programvel, o programa tem como objetivo deixar instrues para que o PIC possa fazer atividades definidas pelo programador. Um programa constitudo por um conjunto de instrues em seqncia, onde cada uma identificara precisamente a funo bsica que o PIC ira executar. Um programa escrito em linguagem assembler ou em C pode ser escrito em qualquer PC utilizando-se qualquer processador de texto que possa gerar arquivos ASCII(Word, Notpad etc). Um arquivo de texto que contenha um programa em assembler denominado de source ou codigo assembler. Uma vez preparado o nosso cdigo assembler ou C(veremos mais adiante), iremos precisar de um programa para traduzir as instrues mnemnicas e todas as outras formas convencionais com que escrevemos o nosso cdigo em uma serie de nmeros (o opcode) reconhecvel diretamente pelo PIC. Este programa se chama compilador assembler ou assemblador, o compilador usado neste curso ser o PCWH. Na figura seguinte est esquematizado o fluxograma de operaes e arquivos que devera 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

  • Microcontroladores - PIC 6

    MICROCONTROLADORES PIC EM C

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

    1.5. O que o MpLab?

    O MpLab um ambiente integrado de desenvolvimento (I.D.E.: Integrated Development Environment). No mesmo ambiente o usurio pode executar todos os procedimentos 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.

    Edio O MpLab possui um editor de texto para seus programas que possui diversas ferramentas de auxlio como localizar, substituir, recortar, copiar e colar.

    Compilao Compilar significa traduzir um programa escrito em assembly (mneumnicos) para linguagem 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 do PIC.

    Simulao O MpLab possui ferramentas para simulao do programa no prprio computador, possibilitando a execuo passo a passo, visualizao e edio do contedo dos registradores, edio de estmulos (entradas), contagem de tempo de execuo, etc.

    Gravao Para que o programa seja executado no microcontrolador, o arquivo hexadecimal deve ser gravado no PIC. O MpLab oferece suporte aos gravadores fabricados pela Microchip.

    Emulao A Emulao um recurso de desenvolvimento que possibilita testes em tempo real. O MpLab oferece suporte ao hardware necessrio para estar emulando um determinado programa. Esta emulao feita conectando-se (atravs do hardware mencionado) o computador ao sistema projetado, no lugar do PIC

  • Microcontroladores - PIC 7

    MICROCONTROLADORES PIC EM C

    2. O PIC 16F877A

    Dentro de todos os PICs este um dos que apresenta mais recursos e se adpata as necessidades de nosso curso, entre suas caratersticas principais podemos citar:

    Microcontrolador de 40 pinos, o que possibilita a montagem de um hardware complexo e capaz de interagir com diversos recursos e funes ao mesmo tempo.

    33 portas configurveis como entrada ou sada.

    15 interrupes disponveis.

    Memria de programao EPROM FLASH, que permite a gravao rpida do programa diversas vezes no mesmo chip, sem a necessidade de apag-lo por meio de luz ultravioleta, como acontece nos microcontroladores de janela;

    Memria de programa com 8Kwoeds, com capacidade de escrita e leitura pelo 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;

  • 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 devem ser ligados aos pinos OSC1 e OSC2.

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

    MCLR/Vpp 1 I/P ST Master Clear (reset) externo. O uC s funciona quando este 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 /C10OUT

    RA5/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 tenso negativa de referncia analgica.

    RA3: I/O digital ou entrada analgica AN3 ou tenso positiva 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 habilitao externa (slave select) para comunicao SPI ou sada do comparador 2.

    RB0/INT

    RB1

    RB2

    RB3/PGM

    RB4

    RB5

    RB6/PGC

    RB7/PGD

    33

    34

    35

    36

    37

    38

    39

    40

    I/O

    I/O

    I/O

    I/O

    TTL/ST(1)

    TTL

    TTL

    TTL

    TTL

    TTL

    TTL/ST(2)

    TTL/ST(2)

    PORTB: (I/Os digitais bidirecionais). Todos os pinos deste PORT possuem pull-up que podem ser ligado ou desligados 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 baixa tenso (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 estado ou clock da programao serial ou pino de in-circuit debugger.

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

  • 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 para TMR1 ou entrada de incremento para TMR1. RC1: I/O digital ou sada do oscilador externo para TMR1 ou entrada de Capture2 ou sadas para Compare2/PWM2. RC2: I/O digital ou entrada do Capture1 ou sadas para Compare1/PWM1. RC3: I/O digital ou entrada/sada de clock para comunicao serial SPI/IC. RC4: I/O digital ou entrada de dados para SPI ou via de dados (entrada/sada) para IC. RC5: I/O digital ou sada de dados para SPI. RC6: I/O digital ou TX (transmisso) para comunicao USART assncrona ou data para comunicao sncrona. RC7: I/O digital ou RX (recepo) para comunicao USART 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 de comunicao 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 paralela ou entrada analgica AN5. RE1: I/O digital ou controle de leitura da porta paralela ou entrada analgica AN6. RE2: I/O digital ou controle de leitura da porta paralela ou 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 TTL ST = Entrada tipo Schmitt trigger

  • Microcontroladores - PIC 10

    MICROCONTROLADORES PIC EM C

    Notas:

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

    (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 TTL quando 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" medida que o sinal de entrada passa pelo intervalo indefinido (1 ou 0), transportando para sada o mesmo efeito.

  • Microcontroladores - PIC 11

    MICROCONTROLADORES PIC EM C

    Um dispositivo interessante para a soluo deste problema lgico, so as portas Schmitt-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 lenta e 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).

  • Microcontroladores - PIC 12

    MICROCONTROLADORES PIC EM C

    2.3. GERADOR DE RELGIO OSCILADOR

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

    Tipos de osciladores

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

    Quando o oscilador de cristal, a designao da configurao de XT, se o oscilador for uma resistncia em srie com um condensador, tem a designao RC. Isto importante, porque h necessidade de optar entre os diversos tipos de oscilador, quando se escolhe um microcontrolador.

    2.4. Oscilador XT

    O oscilador de cristal est contido num envlucro de metal com dois pinos onde foi escrita a freqncia a que o cristal oscila. Dois condensadores cermicos devem ligar cada um dos pinos do cristal massa. Casos h em que cristal e condensadores esto contidos no mesmo encapsulamento, tambm o caso do ressonador 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 OSC2 do microcontrolador. Quando projetamos um dispositivo, a regra colocar o oscilador to perto quanto possvel do microcontrolador, de modo a evitar qualquer interferncia nas linhas que ligam o oscilador ao microcontrolador.

  • Microcontroladores - PIC 13

    MICROCONTROLADORES PIC EM C

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

    Ilustrao 3: Clock de um microcontrolador com um ressonador

    2.5. Oscilador RC

    Em aplicaes em que a preciso da temporizao no um fator crtico, o oscilador RC torna-se mais econmico. A freqncia de ressonncia do oscilador RC 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 um PIC16F877A. Com um valor para a resistncia R abaixo de 2,2 K, o oscilador pode tornar-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 rudo e aumentar a estabilidade. Qualquer que seja o oscilador que se est a utilizar, a freqncia de trabalho do microcontrolador a do oscilador dividida por quatro. A freqncia de oscilao dividida por 4 tambm fornecida no pino OSC2/CLKOUT e, pode ser usada, para testar ou sincronizar outros circuitos lgicos pertencentes ao sistema.

  • 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 um perodo de oscilao e uma amplitude instvel, mas, depois de algum tempo, tudo estabiliza.

    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 de reset enquanto o clock do oscilador no estabiliza. O diagrama em cima, mostra uma forma tpica do sinal fornecido por um oscilador de cristal de quartzo ao microcontrolador quando se liga a alimentao.

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

  • Microcontroladores - PIC 15

    MICROCONTROLADORES PIC EM C

    Ilustrao 7: Circuito de Reset atravs de um boto

  • Microcontroladores - PIC 16

    MICROCONTROLADORES PIC EM C

    3. AMBIENTE INTEGRADO DE DESENVOLVIMENTO (IDE) Como ambiente de desenvolvimentos ser usado o compilador PCWH da CCS. Este constitudo de um IDE grfico que pode ser executado em qualquer plataforma Windows. Este ambiente permitir uma programao dos PICs em linguagem C. Existe a possibilidade de se fazer uma integrao com o ambiente MPLAB da prpria microchip. Como vantagem do uso desse compilador pode-se citar a grande eficincia do cdigo gerado, compatibilidade com o padro ANSI e ISSO salvo algumas excees e a sua grande diversidade de funes e bibliotecas desenvolvidas em linguagem C. O objetivo deste captulo a compreenso do ambiente de programao e da seqncia para poder criar um novo projeto usando o MpLab como editor e o CCS como compilador.

    Ilustrao 8: Ambiente de desenvolvimento PCWH

    Atualmente, a maioria dos microcontroladores disponveis no mercado conta com compiladores de linguagem C para o desenvolvimento de software. O desenvolvimento em C permite uma grande velocidade na criao de novos projetos permite que o programador preocupe-se mais com a programao da aplicao em si, j que o compilador asssume para si tarefas como o controle e localizao das variveis, operaes matemticas e lgicas, verificao de bancos de memria, etc. Existe outra linguagem muito usada chamado Assembly que bastante eficiente, mas o programador ter que se preocupar pela localizao das variveis,

  • Microcontroladores - PIC 17

    MICROCONTROLADORES PIC EM C

    pelos estados dos registros controladores de hardware, exigindo do programador o conhecimento do hardware usado. Sendo nosso curso Tcnico escolho-se como principal opo a linguagem C para que o aluno possa aproveitar ao mximo o seu tempo, ampliando desta forma suas habilidades na programao de PICs. Quando um programa se faa crtico no sentido de precisar mais eficincia o programador dever escolher a linguagem Assembler. importante tambm sinalizar que este programa tem um excelente ambiente de programao (EDITOR), mas nosso curso usar como editor ou ambiente de escrita de programa o MPLAB, programa gratuito da MICROCHIP. O MPLAB como foi dito tem tambm um ambiente de simulao que ser bastante usado. 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.

  • Microcontroladores - PIC 18

    MICROCONTROLADORES PIC EM C

    Criar um projeto novo usando o assistente (Wizard), para isto clicar no menu

    Project / 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

  • 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 em

    avanar.

    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.

  • 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 por

    enquanto no incrementaremos nenhum arquivo e clicaremos em avanar diretamente.

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

  • 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 escrever

    o cdigo, para isto clicamos no menu File/New

    Ilustrao 17: Criao de um novo arquivo C

  • 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 e

    escrever em nome do arquivo Ejemplo1.c e clicar no boto Salvar.

    Ilustrao 19: Gravao do arquivo "C"

  • Microcontroladores - PIC 23

    MICROCONTROLADORES PIC EM C

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

    Com o mouse sobre Source Files clicar no boto direito do mouse, depois clicar 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.

  • Microcontroladores - PIC 24

    MICROCONTROLADORES PIC EM C

    Ilustrao 21:Seleo do arquivo.C para ser incrementado no projeto

  • 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 no ambiente de desenvolvimento, chegou a hora de estudar os fundamentos da linguagem C. No projeto criado, abrimos, salvamos e incrementamos um arquivo chamado Ejemplo1.C, neste arquivo podemos escrever o seguinte programa: EXEMPLO 1: Neste exemplo iremos desenvolver um exerccio e explicar a primeira parte do programa e a funcionalidade das funes. Desta forma no ser necessrio 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; } }

  • 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 compilador que anexe ao programa o arquivo especificado 16f877A.h. Arquivos .h so chamados de 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,nowrt Configurao 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 um capacitor e o cristal XT que mais preciso sendo tambm os mais caros. NOWDT: Watchdog timer ou co de guarda um recurso poderosssimo que deve ser utilizado. um contador automtico incrementado por meio de um oscilador prprio, independente do oscilador principal. Caso o WDT estoure, um reset 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 ms aps o pino /MCLR seja colocado em nvel alto. Brown-Out: utilizado para forar um reset quando a tenso de alimentao sofre uma pequena queda. Ele extremamente recomendado em projetos que possibilitam 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 ou sada que seguem. Esta diretiva tem efeito at que uma nova diretiva #use xxxx_IO seja encontrado. Este mtodo rpido de configurao de configurao de I/O a configurar corretamente a direo de I/O usando a instruo set_tris_X(). #byte porta = 0x05 #byte portb = 0x06

  • Microcontroladores - PIC 27

    MICROCONTROLADORES PIC EM C

    #byte portc = 0x07 #byte portd = 0x08 #byte porte = 0x09 No data sheet do PIC 16F877A podemos observar que as portas a,b,c,d, e esto associados a um endereo de memria. Depois destas linhas as portas tero como identificador as variveis porta, portb at porte. #bit botao = portb.0 #bit led = portb.1 As entradas devem ser associadas a nomes para facilitar a programao e futuras alteraes do hardware. De aqui em diante podemos nomear o pino portb.0 como boto por exemplo. void main () A declarao main() especifica o nome de uma funo. No caso, a funo main() padronizada na linguagem C e utilizada para definir a funo principal, ou corpo principal do programa. O sinal de abertura de chave { utilizado para delimitar o incio da funo e o sinal de fechamento de chave } indica o final da funo. Na verdade, as chaves delimitam o que chamamos de bloco de programa, ou bloco de cdigo. set_tris_a(0b11111111); set_tris_b(0b11111001); set_tris_c(0b11111111); set_tris_d(0b11111111); set_tris_e(0b00000111); Esta funo permite direcionar as I/O. Deve de ser usado com o comando fast_io e quando as portas de I/O esto acessveis, para isto deve ser usada a diretiva #BYTE para o acesso da porta. Cada bit no valor representa um pino. O 1(um) representa entrada e o zero sada. Exemplo: SET_TRIS_B( 0x0F ); similar a SET_TRIS_B( 0b00001111 ) // B7,B6,B5,B4 are outputs // B3,B2,B1,B0 are inputs porta=0x00; portb=0x00; portc=0x00; portd=0x00; porte=0x00; Inicializando as portas, todos os pinos das portas na execuo destas linhas tomaro o valor de zero ou desligado. while(TRUE) Este um comando de controle utilizado na repetio de um determinado bloco de instrues. Esse bloco ser repetido enquanto a avaliao da condio especificada entre parnteses for verdadeira. No caso, a avaliao explicitamente verdadeira (true). O bloco de instrues que ser repetido aquele especificado dentro das chaves que seguem o comando while. if(!botao) led = 1; else

  • 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 comando seguinte ser executado. Em caso de ser falsa (else) o comando depois da instruo else ser executado. Neste exemplo o a varivel booleana boto esta negada (!botao) quer disser se o boto estivesse em estado zero a condio ser falsa e o led ser igual a 1. Em caso que o boto seja 1 a condio ser falsa e o led 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 20mA por cada pino de sada. A tenso de alimentao do PIC de 5 v. Instale um boto 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 sendo bsico o incio do aprendizado de um recurso sem limites. At a prxima aula onde aprenderemos a simular programas sem a necessidade de um hardware.

  • 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 seu projeto. Em outras palavras sem necessidade do circuito eletrnico podemos conferir se o programa pode compilar, (esta sem erros de sintaxe) e responde da forma 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

  • Microcontroladores - PIC 30

    MICROCONTROLADORES PIC EM C

    3. Observe na janela OutPut o resultado da compilao, neste caso a compilao foi bem sucedida (build succeeded), mostrando o caminho aonde foram copiados os arquivos produto desta compilao. Tambm mostra o nmero de erros da compilao e de avisos (warnings). Em caso de erro este ser mostrado, e indicado em que linha se encontra. Se sua compilao contiver algum 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 na janela 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 um comentrio necessrio escrever while(TRUE) //Brasil. Estes caracteres // antecedem a um comentrio de linha simples. So utilizados para descrever o funcionamento 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.

  • Microcontroladores - PIC 31

    MICROCONTROLADORES PIC EM C

    Ilustrao 25: Botes de controle da simulao no MPSIM

    Run: Executa o programa, comea a simulao. Halt: Para a simulao. Animate: Anima a simulao, executa linha por linha o programa e indicado por uma zeta. Step Into: Executa linha, e se houver uma funo entra nela. Step Over: Executa a linha, e se houver uma funo executa o bloco todo e pula para a seguinte linha. Step out: Sa da funo Reset: reinicia a simulao a partir da primeira linha. Exerccios 5.2:

    1. Pressionar o boto Animate e anotar suas observaes. Para parar a animao clicar no boto halt.

    2. Clicar no boto Run e anotar suas observaes, que esta acontecendo? 3. Clicar vrias vezes o boto Step over e anotar suas observaes?

  • Microcontroladores - PIC 32

    MICROCONTROLADORES PIC EM C

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

    Ilustrao 26: Criao de um controle de estimulo

  • Microcontroladores - PIC 33

    MICROCONTROLADORES PIC EM C

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

    Ilustrao 27: Parametrizao de um estimulo ou entrada digital no simulador MPSIM

    Escolhemos 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 que existem 5 tipos de ao:

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

    Set Low: O Pino de referncia tomar o valor de 0. Para que seja novamente um(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. Esta ao 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 PIC que sero estimulados. As colunas Width e units, so usados em caso de que a ao selecionada seja 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 coluna fire.

  • Microcontroladores - PIC 34

    MICROCONTROLADORES PIC EM C

    As vezes a desorganizao faz perder as pessoas um valioso tempo, na programao a organizao esta relacionada entre outras coisas com os comentrios, A coluna comments serve para escrever comentrios ou at para simular entradas de mensagens pela porta serial. Agora o leitor deve estar preparado para simular o seu projeto com estmulos de 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. Na seguinte barredura estimule o varivel boto e verifique novamente a execuo desta linha. Anote suas observaes, que esta acontecendo?

    2) Incremente na janela de controle de estmulos aes de Set Low e Set high

    para o boto e visualize este funcionamento.

  • Microcontroladores - PIC 35

    MICROCONTROLADORES PIC EM C

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

    Ilustrao 28: Abrindo um visualizador de registros watch

    Watch, permite voc digitar uma varivel, ou qualquer expresso importante e visualizar o resultado. Neste caso escolhemos a varivel led e clicamos no boto Add Symbol, para poder mudar as caractersticas de visualizao clicar com o boto direito 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 boto Step 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 o programa observando detalhadamente os resultados.

  • Microcontroladores - PIC 36

    MICROCONTROLADORES PIC EM C

    2. Simular o seguinte programa e descrever o seu funcionamento. Existe um erro 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; } } }

  • Microcontroladores - PIC 37

    MICROCONTROLADORES PIC EM C

    3. Avalia o circuito seguinte e faz um programa para que apertando o boto SA14 possa ligar o led 0.

  • 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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 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 CONFIG setup_counters(RTCC_INTERNAL, WDT_2304MS); // configura os TRIS set_tris_a(0b00100000); set_tris_b(0b00001111); set_tris_c(0b10011001); set_tris_d(0b00000000); set_tris_e(0b00000000); // inicializa os ports porta=0x00; // limpa porta portb=0x00; // limpa portb portc=0x00; // limpa portc portd=0x00; // limpa portd porte=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 = 1 else Led0=0; // caso contrrio, led = 0 } // FIM DO PROGRAMA } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Fim do Programa * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • Microcontroladores - PIC 40

    MICROCONTROLADORES PIC EM C

    4. Lembrando do seguinte circuito:

    Faz um programa para que apertando o boto SA13 mostre no display DS4 o nmero 7 e com o boto SA14 o nmero 9. Escolhe outro boto para desligar todos os leds do display.

  • 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

  • Microcontroladores - PIC 42

    MICROCONTROLADORES PIC EM C

    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Configuraes do Microcontrolador * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ void main () { // configura CONFIG setup_counters(RTCC_INTERNAL, WDT_2304MS); // configura os TRIS set_tris_a(0b00100000); set_tris_b(0b00001111); set_tris_c(0b10011001); set_tris_d(0b00000000); set_tris_e(0b00000000); // inicializa os ports porta=0x00; // limpa porta portb=0x00; // limpa portb portc=0x00; // limpa portc portd=0x00; // limpa portd porte=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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 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 poder armazen-los na memria e poder referenci-los quando for preciso. para isso que existem as variveis, que nada mais so do que um espao reservado na memria, e que possuem um nome para facilitar a referncia. As variveis podem ser 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 a execuo do programa, ou seja, o programador tem a liberdade de atribuir valores ao decorrer da execuo.

    6.2. Tipos de variveis

    O C tem 5 tipos bsicos: char, int, float, void, double. Destes no todos os tipos fazem parte do compilador CCS. O double o ponto flutuante duplo e pode ser visto como um ponto flutuante com muito mais preciso. O void o tipo vazio, ou um "tipo sem tipo". A aplicao deste "tipo" ser vista posteriormente. Na seguinte tabela observaremos os tipos de dados do compilador CCS.

    Type-Specifier Num bits Coment

    int1 1 Define a 1 bit number int8 8 Defines an 8 bit number int16 16 Defines a 16 bit number int32 32 Defines a 32 bit number char 8 Defines a 8 bit character float 32 Defines a 32 bit floating point number short 1 By default the same as int1

    Int 8 By default the same as int8 long 16 By default the same as int16 byte 8 bit 1

    void 0 Indicates no specific type

    6.3. OS MODIFICADORES

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

    Os quatro modificadores podem ser aplicados a inteiros. A inteno que short e long devam prover tamanhos diferentes de nmeros inteiros, onde isto for prtico. 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

  • Microcontroladores - PIC 44

    MICROCONTROLADORES PIC EM C

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

    O modificador unsigned serve para especificar variveis sem sinal. Um unsigned int ser um inteiro que assumir apenas valores positivos. A representao de nmeros negativos feita tomando o bit MSB (Most Significant Bit ou bit mais significativo) da varivel para representar o sinal: bit MSB =1, sinal negativo, bit MSB = 0, sinal positivo. Note que devido ao fato de utilizar um bit para representao do sinal, a magnitude absoluta de representao do tipo modificado ser 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 por unsigned ou signed. Na seguinte tabela mostramos alguns exemplos de combinaes possveis dos tipos de dados do compilador CCS.

    Intervalo Tipo 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 255

    signed 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 forma geral de declarao de uma varivel a seguinte: tipo nome_da_variavel;

    Exemplos:

    Uma varivel de cada vez: int id;

  • 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 deve ser um nome dado pelo programador, sendo o primeiro caractere uma letra ou um "_", e os demais, letras, nmeros ou "_".

    num _carac peso 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 inicializar variveis 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 o valor (do lado direito) na varivel (lado esquerdo).

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

    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.

  • Microcontroladores - PIC 46

    MICROCONTROLADORES PIC EM C

    6.6. Variveis Locais e Globais

    As variveis podem ser locais ou globais. As variveis locais so aquelas declaradas dentro de uma funo, sendo somente "vistas" dentro desta funo. Se voc tentar acessar uma varivel local de fora da funo onde ela est, acontecer um erro. Aps a execuo desta funo, as variveis locais ali contidas so destrudas. Na aula sobre funes estudaremos mais sobre variveis locais, com exemplos.

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

    #include ***** int num; /* num uma varivel global */ int main() { int contador=0; //contador uma varivel local num= 10; printf("%d", n); return 0; }

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

    6.7. Constantes

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

    De maneira geral, qualquer tipo de dado pode ser utilizado para definir uma constante, cabendo apenas ao programador representar o valor dela adequadamente. const valor1 = 10 const valor1 = -3 const valor1 = 13.24 const valor1 = c const valor1 = CEFETES-Linhares As constantes so tambm utilizadas para impedir que uma funo altere um parmetro passado a ela.

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

  • Microcontroladores - PIC 47

    MICROCONTROLADORES PIC EM C

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

    Exerccios 6.1:

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

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

    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

  • Microcontroladores - PIC 48

    MICROCONTROLADORES PIC EM C

    7. OPERADORES EM C J aprendemos sobre a estrutura bsica de um programa em C, sobre os tipos de dados 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, sejam eles aritmticos, lgicos, relacionais, etc. Mostraremos vrios exemplos e finalizaremos a aula com exerccios.

    Ento, p na tbua!

    7.1. O Operador de Atribuio

    Na aula sobre variveis j foi falado sobre o operador de atribuio (o smbolo de igual "="). O que ele faz colocar o valor de uma expresso (do lado direito) em uma 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 Aritmticos

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

  • Microcontroladores - PIC 49

    MICROCONTROLADORES PIC EM C

    (adio), - (subtrao), * (multiplicao), / (diviso) e % (mdulo ou resto da diviso inteira), todos estes binrios (de dois operandos). Temos tambm o - unrio, que muda 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). Os resultados obtidos destas duas operaes so utilizados para resolver as duas ltimas operaes:

    5 + 6 - 2

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

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

    O Operador % equivalente ao mod em Pascal, e til em vrias situaes. Ele d como resultado o resto da diviso inteira de dois operandos. Assim, fica fcil, por exemplo, 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");

  • Microcontroladores - PIC 50

    MICROCONTROLADORES PIC EM C

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

    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 de verdadeiro e falso. Em C, verdadeiro qualquer valor diferente de zero, e falso zero. As expresses que usam operadores relacionais e lgicos retornam 0 para falso 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 varivel inteira */ 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... :)

  • 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 for menor 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 ! >, >=,

  • Microcontroladores - PIC 52

    MICROCONTROLADORES PIC EM C

    ou depois da varivel:

    n++;

    A diferena que, se o operador precede o operando (++n), o incremento ou decremento realizado antes do valor da varivel ser usado. E se o operador vem depois do operando (n++), o valor da varivel poder ser usado antes de acontecer a 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 a p. No exemplo 2, o valor de n atribudo a p antes de acontecer a operao de incremento. Essa a diferena de se colocar esses operadores antes ou depois da varivel.

    7.5. Operadores Aritmticos de Atribuio

    Algumas operaes de atribuio podem ser feitas de forma resumida. Por exemplo, 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:

  • 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 pelos profissionais que trabalham com C.

    7.6. Operadores Bit a Bit

    A linguagem C, ao contrrio de outras linguagens, suporta um amplo conjunto de operadores bit a bit. Como C precisava substituir a linguagem Assembly na maioria das 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, e essas operaes s podem ser feitas em variveis int e char (e suas variantes). Os tipos void, float, double e long double NO podem ser usados.

    Esses operadores so usados com mais freqncia em drivers de dispositivo, como rotinas 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

  • Microcontroladores - PIC 54

    MICROCONTROLADORES PIC EM C

    Para saber como se comportam os operadores bit a bit, segue abaixo uma tabela verdade dos operadores, com exceo dos operadores de deslocamento:

    p q p&q p|q p^q ~p

    0 0 0 0 0 1

    0 1 0 1 1 1

    1 0 0 1 1 0

    1 1 1 1 0 0

    O operador & compara os dois operandos bit a bit e cada bit do resultado 1 somente quando os dois bits do operando for 1. Caso contrrio, 0.

    O bits do resultado de uma operao | bit a bit s ser 1 quando um dos dois bits, ou os dois, forem 1. Na operao ^ s ser 1 quando os bits dos operandos forem diferentes. Se forem iguais (0^0 ou 1^1) ser 0.

    O operador de complemento (~) um operador unrio que inverte os bits do operando. 1 vira 0 e 0 vira 1.

    Vejamos um exemplo mais claro. Digamos que as variveis inteiras x e y recebem os valores 8 e 9, respectivamente:

    x= 8; /* 8 em binrio 1000 */ y= 9; /* 9 em binrio 1001 */

    Vamos fazer algumas operaes bit a bit nesses nmeros:

    x & y: 1000 1001 ---- 1000 => O resultado desta operao 8 (1000). x | y: 1000 1001 ---- 1001 => O resultado desta operao 9 (1001). x ^ y: 1000 1001 ---- 0001 => O resultado desta operao 1. ~x: 1000 ----

  • 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 operadores deslocam n bits para a esquerda ou direita:

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

  • Microcontroladores - PIC 56

    MICROCONTROLADORES PIC EM C

    portas de alta impedncia especialmente problemtico, uma vez que o valor lgico da 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.

  • Microcontroladores - PIC 57

    MICROCONTROLADORES PIC EM C

    Exemplos:

    1. Resolver o seguinte problema: Fazer o Projeto, para o controle da Bomba B1, sendo que o nvel sempre estar entre S1 e S2 (sensores bia). Quando o nvel atinge o motor S2 o seu contato fecha, e quando o nvel atinge S1 este tambm fecha, sendo que S2, j esta fechado porque o nvel esta sobre S2.

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

    Ilustrao 31: Circuito eltrico do exemplo 7.1

  • 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; } }

  • 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 = 30 b) 5*2/2 = 5 c) 4+6-8/2 = 6 d) (-3)*4 = 12

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

    a) 1 > 2 b) 2 >= 1 c) 3 != 3 d) 'c' == 'c' 4) Fazer um projeto para que a presso do vapor sempre permanea entre uma

    faixa especfica (histerese), sabendo que a histerese do pressostato calibrada no 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 a presso esteja entre os nveis de histereses determinado.

    . Ilustrao 32: Exerccio 7.4, controle de presso

  • Microcontroladores - PIC 60

    MICROCONTROLADORES PIC EM C

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

    Ilustrao 33: Exerccio 7.5, misturador, combinacionais

  • Microcontroladores - PIC 61

    MICROCONTROLADORES PIC EM C

    8. TEMPORIZAO NO PIC Los temporizadores los encontramos en muchos lugares de nuestra vida diaria, generalmente integrados en aparatos domsticos. Por ejemplo en los hornos de microondas para controlar el tiempo de calentamiento de nuestros alimentos, o en las lavadoras de ropa para seleccionar el tiempo lavado. Tambin a escala industrial las aplicaciones de los temporizadores son mltiples. Los hay para controlar el tiempo de arranque de algn proceso, se usan en mquinas herramientas, en dosificadores, fotografa, etc. La lista es interminable. Neste captulo aprenderemos a usar temporizadores, so duas formas bsicas: usando a funo delay e interrupes. A funo delay no permite a execuo de outras funes no decorrer do tempo, j usando interrupes isto no acontece. Desta forma, as interrupes tm muitas vantagens sobre a funo Delay.

    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 um nmero preciso de instrues para causar a demora pedida. O tempo de demora pode ser mais longo do que o pedido se uma interrupo for chamada durante a espera do tempo. O tempo gastado na interrupo no conta 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 funo RESTART_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 em nvel lgico 1) um pino do microcontrolador. Isto significa que o pino RB0 (da porta B) 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.

  • 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 que o 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

  • 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 CONFIG setup_counters(RTCC_INTERNAL, WDT_2304MS); // configura os TRIS set_tris_a(0b11111111); // configurao dos pinos de I/O set_tris_b(0b11111000); set_tris_c(0b11111111); set_tris_d(0b11111111); set_tris_e(0b00000111); // inicializa os ports porta=0x00; // limpa porta portb=0x00; // limpa portb portc=0x00; // limpa portc portd=0x00; // limpa portd porte=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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  • Microcontroladores - PIC 64

    MICROCONTROLADORES PIC EM C

    Ilustrao 34: Circuito para o Exemplo 2

    8.2. Interrupo Temporizador:

    As interrupes so mecanismos que o microcontrolador possui e que torna possvel 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 um microcontrolador e o mundo real que nos rodeia. Geralmente, cada interrupo muda a direo de execuo do programa, suspendendo a sua execuo, enquanto o microcontrolador corre um subprograma que a rotina de atendimento de interrupo. Depois de este subprograma ter sido executado, o microcontrolador continua 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 um microcontrolador, assim, necessrio gastar mais tempo a explic-los. Servindo-nos deles, possvel relacionar uma dimenso real que o tempo, com uma varivel que representa o estado de um temporizador dentro de um microcontrolador. Fisicamente, o temporizador um registro cujo valor est continuamente 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.

  • Microcontroladores - PIC 65

    MICROCONTROLADORES PIC EM C

    Este registro chamado de TMR0 que incrementado a cada ciclo de mquina (sem pr-escala: Clock/4). Se ocorrer uma escrita em TMR0, o incremento ser 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 um prescaler 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 registro TMR0 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 depois do estouro do registrador TMR0 e esta estoura depois de 255 vezes o tempo para cada 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 mdio de 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, e para fazer isto repetitivo reiniciado o registro TMR0 com 131 na propria sub-rotina de interrupo. Cada interrupo teria 125 ciclos, como cada ciclo tem um tempo de 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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

  • 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 facili