Sei sulla pagina 1di 66

Curso em Linguagem C para microcontroladores PIC. (Compilador CCS) PIC16F877A e PIC16F887.

ACEPIC Tecnologia e Treinamento LTDA. Autor: Carlos Eduardo Sandrini Luz

Unidade 01

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Introduo Este curso baseado nos microcontroladores PIC16F877A e 16F887 da microchip (www.microchip.com), sendo utilizado o compilador em linguagem C CCS PCWHD. O compilador CCS mdulo PCWHD desenvolvido pela CCS Inc. (www.ccsinfo.com) e abrange toda a linha de microcontroladores PIC. Este compilador possui uma interface prpria onde possvel criar projetos, editar o cdigo fonte, compilar e, utilizando-se do Gravador e Depurador ICD-U64 (desenvolvido pela prpria CCS), possvel a programao e depurao do microcontrolador diretamente pela interface. Neste curso, utilizaremos para a programao e eventual depurao o gravador e depurador ACE ICD desenvolvido pela ACEPIC Tecnologia e Treinamento LTDA (www.acepic.com.br). O compilador CCS tambm pode ser integrado ao MPLAB atravs de um software plug-in que pode ser baixado sem custo atravs do link abaixo. Atravs desta integrao possvel editar, compilar, programar e depurar os projetos diretamente na interface de desenvolvimento MPLAB, assim possvel a utilizao de ferramentas que podem ser integradas a este software, como por exemplo, o gravador e depurador ACE ICD. A CCS oferece uma verso de demonstrao de seu compilador vlida por um perodo de 45 dias sem limite no tamanho do programa e totalmente funcional para toda a linha de microcontroladores PIC. Para baixar a verso de demonstrao basta seguir o link informado abaixo, lembrando que necessrio o preenchimento de um formulrio de cadastro pelo usurio. Neste curso, apresentaremos os exemplos feitos na interface PCWHD, porm em alguns casos utilizaremos a integrao ao MPLAB. Todos os exemplos de projetos criados, foram desenvolvidos e testados baseados nos Kits de desenvolvimento ACEPIC 40 V2.0 e ACEPIC PRO V2.1 tambm desenvolvidos pela ACEPIC Tecnologia e Treinamento
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |2 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

LTDA. Apesar deste curso ter como base os PICs 16F877A e 16F887, as explicaes e programas podem ser adaptadas facilmente para outros microcontroladores da microchip. Plug-In de integrao CCS MPLAB: http://www.ccsinfo.com/downloads.php Verso de demonstrao CCS PCWHD: http://www.ccsinfo.com/ccsfreedemo.php MPLAB IDE: http://www.microchip.com

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |3 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Linguagem C uma linguagem de programao de propsito geral, estruturada, imperativa, procedural de alto e baixo nvel, criada em 1972 por Dennis Ritchie no AT&T Bell Labs, para desenvolver o sistema operacional UNIX (que foi originalmente escrito em Assembly). Desde ento, espalhou-se por muitos outros sistemas e tornou-se uma das linguagens de programao mais usadas influenciando muitas outras linguagens, especialmente o C++, que foi desenvolvida como uma extenso para C.
Fonte: WIKIPEDIA

Programao de Microcontroladores em linguagem C

Atualmente, a maioria dos microcontroladores existentes nos mercado, contam com compiladores em C para o desenvolvimento de software, pois a linguagem C permite a construo de programas e aplicaes muito mais complexas do que o Assembly. O compilador C tem a capacidade de traduzir com alto grau de inteligncia e velocidade o cdigo em C para o cdigo de mquina, portanto podemos dizer que a linguagem C possui grande eficincia. Essa eficincia da linguagem C faz com que o programador preocupese mais com a programao em si e o compilador assume responsabilidades como localizao da memria, operaes matemticas e lgicas, verificao de bancos de memrias e outros..

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |4 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Introduo Linguagem C

Palavras Reservadas Toda linguagem de programao possui um conjunto de palavras definidas para interpretao do prprio compilador, sendo assim, essas palavras no devero ser utilizas pelo usurio para outras finalidades alm das definidas pelo compilador. Essas palavras so chamadas de Reservadas e em linguagem C, temos as seguintes:
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Identificadores Os identificadores so nomes dados s funes, variveis, constantes, etc e no devem conter caracteres acentuados, espaos, e devem sempre comear com uma letra ou o smbolo _ que tratado como letra

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |5 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Tipos de dados Os tipos de dados suportados pela linguagem C e utilizados no compilador CCS so identificados pela palavras reservadas: char, int, float e void.
Tipo de dado char Int float void Tamanho 8 bits 8 bits 32 bits 0 Intervalo 0 a 255 0 a 255 -38 38 3.4 x 10 a 3.4 x 10 0

O tipo char representa caracteres ASCII de 8 bits, sendo que cada varivel do tipo char pode representar somente um caracter ASCII. O tipo int representa nmeros inteiro de 16 bits. O tipo float representa nmeros fracionrios de 32 bits, sendo que este tipo de dado deve ser evitado tendo em vista o seu tamanho. O tipo void normalmente utilizado em funes para declarar que ela no deve retornar nenhum valor. Modificadores de Tipo Alm dos tipos de dados acima, podemos utilizar comandos especiais para modific-los e so chamados de modificadores de tipo, sendo eles: signed, unsigned, short e long. O modificador de tipo signed pode ser utilizado para representar um nmero positivo ou negativo, assim um tipo de dado signed int pode representar valores de -127 a 128. O modificador unsigned define um tipo de dado sem sinal, ou seja, somente a parte positiva de uma varivel, ento o tipo de dados unsigned int representa valores de 0 255. O modificador short utilizada para definir um valor menor do que o
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |6 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

tipo modificado, ou seja, ao declaramos uma varivel com o tipo short int, a varivel tem seu tamanho reduzido para 1 bit. O modificador long o contrrio, ou seja, amplia o tamanho de uma varivel, ento uma varivel declarada com o tipo de dado long int passa a ter o tamanho de 16 bits. Temos abaixo, uma tabela com todos os tipos de dados e seus modificadores disponveis para o compilador CCS:
Tipo short int, int1, boolean char int, int8 signed int unsigned int long int, int16 signed long int, signed int16 unsigned long int, unsigned int16 int32 signed int32 unsigned int32 float Tamanho 1 bit 8 bits 8 bits 8 bits 8 bits 16 bits 16 bits 36 bits 32 bits 32 bits 32 bits 32 bits Valores 0 ou 1 0 a 255 -128 a 127 -128 a 127 0 a 255 -32768 a 32767 -32768 a 32767 0 a 65535 -2147483648 a 2147483647 -2147483648 a 2147483647 0 a 4294967295 1,5
-45

a 3,4

38

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |7 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Variveis As variveis so uma representao simblica onde so armazenados dados do programa ou dados externos como uma tecla pressionada ou uma tenso lida, etc. As variveis, como vimos acima, podem conter letras e nmeros, sempre comeando com letras e no devem ter nome de palavras reservadas pelo compilador como, por exemplo, for, do, int, etc. Declarao de Variveis Declarar uma varivel simplesmente informar ao compilador que uma varivel chamada X do tipo Y e declarada da seguinte forma: <tipo> + <nome da varivel>; Podemos tambm declarar e inicializar uma varivel da seguinte forma: <tipo> + <nome da varivel> = <valor da varivel>; Exemplos: unsigned int x = 123; int conta; short x1;

Variveis Globais So declaradas no incio de nosso cdigo e que podem ser acessadas em qualquer ponto do programa:
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |8 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Exemplo:
int conta; unsigned int c; void main() { conta = 10; c = 2; while(true); }

Variveis Locais So declaradas dentro de uma funo e somente existe durante a execuo da funo. Elas so descartadas depois de executada a funo: Exemplo:
void main() { int conta conta = conta++; while(true); }

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P gina |9 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Operadores Temos, na linguagem C, vrios operadores e podemos verific-los abaixo: Operadores de Atribuio So utilizados para atribuir valores s variveis:
Operador = Descrio Associa um valor varivel Exemplo a=2

Aritmticos:
Operador + * / % ++ -Descrio Soma dos argumentos Subtrao dos argumentos Multiplicao dos argumentos Diviso dos argumentos Resto da diviso (s pode ser utilizado com valores inteiros) Soma 1 ao argumento Subtrai 1 ao argumento Exemplo a+b a-b a*b a/b a%b a++ a--

Relacionais: So utilizados para comparao entre argumentos e retornam uma resposta verdadeira ou falsa. Como em linguagem C no existe uma varivel booleana para um resultado verdadeiro ou falso, todo valor igual a 0 ser considerado falso e todo valor diferente de 0 (qualquer valor) ser considerado verdadeiro.
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 10 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


Operador == != > < >= <= Descrio Compara se igual a Compara se diferente de Compara se maior que Compara se menor que Compara se maior ou igual a Compara se menor ou igual a Exemplo a == 5 a != 5 a>5 a<5 a >= 5 a <= 5

Operadores lgicos bit-a-bit:


Operador Descrio & | ^ ~ >> << E (AND) OU (OR) OU EXCLUSIVO (XOR) Complemento (NOT) Deslocamento direita Deslocamento esquerda

Operadores lgicos relacionais:


Operador && || ! Descrio Comparao lgica E (AND) Comparao lgica OU (OR) Comparao lgica Complemento (NOT)

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 11 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Declaraes de controle: Comando if O comando if uma comando de deciso e utilizado para avaliar uma determinada condio e determinar se ela verdadeira, caso seja, executa o bloco contido dentro desta condio. Sua forma geral : if (exp) comando; Se o resultado da condio referente a expresso (exp) for verdadeiro, o comando ser executado, caso contrrio, o programa segue sem executar o comando.
if (exp) { comando1; comando2; }

Para o caso acima, a mesma explicao anterior se encaixa, sendo que agora, se a condio da expresso for verdadeira, sero executados comando1 e comando2. Exemplos:
if (conta>50) conta = 0;

Neste caso, se a varivel conta atingir um valor maior que 50, o comando conta = 0 ser executado e a varivel conta ser zerada.
if (conta>50) { conta = 0;

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 12 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


conta1++; }

Neste caso, se a varivel conta atingir um valor maior que 50, os comandos conta = 0 e conta1++ sero executados e assim a varivel conta ser zerada e a varivel conta1 ser incrementada em 1, respectivamente.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 13 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Comando if-else Neste caso, a condio if utilizada da mesma forma anterior, sendo que agora, se a condio da expresso for falsa a condio else ser executada, ou seja, neste caso existe a possibilidade de escolha de uma entre duas opes. Sua forma :
if (exp) comando1; else comando2;

Caso a expresso seja verdadeira, o comando1 ser executado, caso seja falsa, o comando2 ser executado. Exemplo:
if (conta>0) { conta = 0; conta1++; } else conta++;

Para o exemplo, se o valor da varivel conta for maior que 0, ento os comandos conta = 0 e conta1++ sero executados, porm caso o valor da varivel conta seja 0 ou menor que 0, ento o comando conta++ ser executado.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 14 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Comando switch-case Quando existem muitos valores para testar de uma s varivel, o comando IF pode ficar meio confuso ou sem muita eficincia, para isso podemos utilizar o SWITCH-CASE. Segue sua forma:
switch(varivel) { case valor1: comando1; .... break; case valor2: comando2; .... break; .... .... default: comandoN; .... .... }

Neste caso, a varivel ser testada e se o valor dela for igual a valor1, o comando1 ser executado, se for igual ao valor2, o comando2 ser executado e assim por diante, agora se o valor for diferente de qualquer caso (case), o comandoN ser executado. Exemplo:
switch(conta) { case 10 : conta1++; break; case 15: conta2++; break; case 20: { conta1++; conta2++;

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 15 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


} break; default: conta3++; }

Neste caso, se o valor da varivel conta for igual a 10, a varivel conta1 ser incrementado, se o valor da varivel conta for igual a 15, o valor da varivel conta2 ser incrementado, caso o valor de conta seja igual a 20, tanto os valores de conta1 quanto de conta2 sero incrementados, para todos outros valores diferentes para a varivel conta, o valor de conta3 ser incrementado. Note que aps cada comando, temos a clusula break, cuja funo encerrar o teste da varivel tendo em vista j ter sido satisfeita a condio, assim, por exemplo:
switch(conta) { case 10 : conta1++; break; . . .

Se a varivel conta tem seu valor igual a 10, o comando de incremento da varivel conta1 ser executado, ou seja, a condio j foi atendida e no preciso testar mais vezes a varivel conta. Ento, a clusula break, encerra os teste feitos por case e, assim, o programa continua na prxima instruo aps a estrutura switch.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 16 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Lao for Este um dos comandos de lao (loop ou repetio) disponveis na linguagem C, a seu formato :
for(inicializao;condio(trmino);incremento) { comando1; comando2; }

onde: inicializao: essa seo conter uma inicializao para a varivel; condio: responsvel por contar a condio de finalizao do lao; incremento: conter a expresso para incremento da varivel. Exemplo:
int conta; int a = 0; for (conta=0;conta<10;conta++) a++;

Neste exemplo, a varivel conta ser iniciada com o valor 0, a varivel a ser incrementada e, como o resultado da expresso (conta<10) ainda verdadeiro, a varivel conta ser incrementada (conta++), assim como novamente a varivel a. Essa repetio ou lao se dar enquanto o resultado da expresso for verdadeiro.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 17 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Lao while Neste lao, os comandos sero repetidos enquanto a expresso for verdadeira, sua forma :
while (exp) { comando; }

Exemplo:
int x; x = 0; while(x<10) x++;

A programa ficar no lao de repetio while, enquanto a varivel x for menor que 10 e o programa s continuar quando o valor de x for maior ou igual a 10.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 18 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Lao do-while Este lao uma variao do comando WHILE, sendo que neste caso o comando ser executado antes de testar se a condio verdadeira. Sua forma :
do { comando; } while(exp);

O comando ser executado pelo menos uma vez antes de verificar a condio da expresso. Exemplo:
int x; int y; do { x++; } while(y!=1);

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 19 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Notao numrica Em linguagem C, podemos usar as 4 formas de representao numrica, decimal, binria, hexadecimal e octal, sendo as mais comuns somente as 3 primeiras. Notao decimal: a representao desta notao direta: Ex.: x = 10; Notao binria: esta representao vem precedida de 0b ou 0B, indicando a notao: Ex.: x = 0B00001010; Notao Hexadecimal: esta representao vem precedida de 0x ou 0X: Ex.: x = 0x0A;

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 20 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Microcontroladores PIC Famlia PIC16F

Caractersticas dos microcontroladores PIC16F877A e 16F887

Caractersticas Frequncia de Operao Memria de Programa Memria de dados RAM Memria de dados EEPROM Terminais de I/O Timers CCP ECCP Comunicao

Comparador Conversor AD

PIC16F877A DC 20MHz 8192 bytes 368 bytes 256 bytes 33 2 de 8 bits e 1 de 16 bits 2 0 SPI USART I2C 2 8 canais de 10 bits cada

PIC16F887 DC 20MHz 8192 bytes 368bytes 256 bytes 35 2 de 8 bits e 1 de 16 bits 1 1 SPI EUSART I2C 2 14 canais de 10 bits cada

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 21 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Pinagem dos microcontroladores

Pinagem do PIC16F877A

Pinagem do PIC16F887

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 22 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

O compilador CCS PCWHD

Interface de desenvolvimento do compilador CCS - PCWHD

Criando um programa utilizando o compilador CCS Podemos criar um projeto utilizando o PIC Wizard que est no menu Project da interface, conforme abaixo, porm criaremos somente o arquivo com extenso *.c e no MPLAB, montaremos um projeto.

Utilizando o PIC Wizard para criar um projeto no CCS

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 23 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Para isso, clique sobre a pasta que se encontra ao lado esquerdo do menu Project, em seguida escolha a opo New e na janela que se abre, escolha Source File, conforme segue:

Criando um arquivo *.c

Escolha a pasta onde ser armazenado o seu arquivo, d um nome a ele com a exteno .c, conforme abaixo e salve p arquivo.

Salvando o arquivo EX01.c

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 24 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Aps isso, teremos um editor de texto onde escreveremos o cdigo do programa. Neste editor, digite o seguinte:
#include<16F887.h> void main() { }

Escrevendo o cdigo fonte

Aps escrever o cdigo acima, pressione o boto F9 do computador ou clique no menu Compiler e em seguida no boto Compile conforme a figura abaixo:

Compilando o programa

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 25 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Com isso, o cdigo ser compilado:

Compilando o programa

Se no houver nenhum erro, a mensagem abaixo ser mostrada na janela Output, de acordo com a figura abaixo:

Programa compilado sem erros

Note que foi utilizado apenas 2% da memria RAM e 0% da memria ROM. Bem, esse primeiro programa foi feito somente para verificarmos como podemos escrever um cdigo fonte e compil-lo diretamente na interface do compilador CCS PCWHD.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 26 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Integrando o compilador CCS ao MPLAB Aps baixar e instalar o MPLAB IDE e aps a instalao do compilador CCS, necessrio baixar e instalar o software Plug-In (MPLAB IDE PLUGIN). Criando um projeto no MPLAB Ao abrirmos o programa MPLAB, esta ser a tela de apresentao:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 27 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Primeiramente, vamos verificar se tudo est correto com a instalao do plug-in. Para isso, clique em Project e em seguida em Set Language Tool Locations.... A tela abaixo dever ser mostrada:

Clique no sinal + em CCS C Compiler for PIC10/12......, logo em seguida, clique no sinal + em Executables e em CCS C Compiler(ccsc.exe) e confira no campo Location o caminho onde est instalado o compilador, conforme abaixo:

Estando tudo certo, vamos prosseguir com a criao do projeto. Clique em Project novamente e em seguida em Project Wizard para que a prxima tela seja mostrada:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 28 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Nesta janela, clique em Avanar e, na prxima tela, escolha em Device o microcontrolador PIC16F887 e clique em Avanar.

Na prxima tela, escolha, em Active toolsuite, a opo CCS C Compiler for....., conforme mostradado na figura seguinte e clique em Avanar:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 29 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Na tela seguinte dever ser informado o nome do novo projeto no campo Create New Project File. Clique em Avanar

Na prxima tela (Step Four) no acrescentaremos nenhum arquivo ao projeto que estamos criando, ento podemos clicar em Avanar. O Project Wizard nos mostrar um resumo do que acabamos de configurar, conforme mostrado na prxima figura:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 30 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Basta clicar em concluir para que o projeto seja criado. Agora, clique em View e Project para visualizarmos a janela do projeto, conforme abaixo:

Agora, adcionaremos o arquivo Ex01.c ao projeto. Este arquivo o mesmo criado anteriormente, na interface CCS. Para isto, clique com o boto direito do mouse em Source Files na janela do projeto, no caso abaixo, EX01.mcp, e escolha a opo Add Files.... Na janela de busca que aparecer, encontre o arquivo Ex01.c. Veja na figura abaixo:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 31 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Se quiser, voc pode salvar o projeto clicando em Project e depois em Save Project... Depois de criado o projeto e adicionado o arquivo a ele, vamos compilar este projeto clicando em Project e depois em Make ou simplesmente podemos pressionar a tecla F10. Toda vez que o projeto compilado, os arquivos sero salvos.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 32 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Estrutura de um programa em C Em linguagem C, os programas podem ter uma ou mais funes, isso faz com que tenhamos uma estrutura modular, ou seja, tenhamos blocos que podem ser acessados em qualquer parte do programa facilitando a visualizao e o entendimento do programa. Todo programa C tem uma funo principal (main) e a partir dela o programa ser inicializado. Estrutura bsica de um programa em C no compilador CCS:
#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) //Definio da frequncia do cristal para clculo //..dos delays #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle void main() { //Inicio da funo. //Este o bloco principal do programa. } //Final da funo.

Note a funo principal void main() e logo aps, abrimos a inicializao da funo com uma chave, logo aps vem o corpo do programa (onde ele ser escrito) e em seguida fechamos o programa com outra chave. Note tambm as duas barras (//) antes das explicaes. Essas barras iniciam um comentrio e tudo que vier aps estas barras no ser entendido pelo programa, ou seja, no ser compilado. Podemos tambm fazer comentrios de outra maneira, veja a seguir:
/*Temos aqui uma outra forma de comentar num programa. Esta maneira indicada quando precisamos escrever algum comentrio grande como este ou maior*/

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 33 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Neste caso, o comentrio tem seu incio com /* e finalizado com */. Antes de realizarmos nosso primeiro projeto, vamos verificar algumas diretivas: Diretivas so comandos internos e que no so compilados, sendo estes dirigidos ao pr-processador e executados pelo compilador antes da execuo do processo de compilao.

#include<16F887.h>

//Incluso do arquivo header (*.h) para o //microcontrolador utilizado #use delay (clock=8000000) //Definio da frequncia do cristal para clculo //..dos delays #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle

A primeira diretiva #include insere um arquivo ao programa ou ao projeto, no nosso caso, estamos incluindo o arquivo 16F887.h que um arquivo tipo header (cabealho) cuja finalidade definir o endereo na memria de algumas funes e identificaes para o microcontrolador PIC16F887. Este arquivo, geralmente, est localizado em C:\Arquivos de Programas\PICC\Devices. A diretiva #use delay, informa ao compilador a velocidade de clock do sistema, sendo necessria para as funes de atraso (delay_us() e delay_ms()). Este valor especificado em Hertz . Ex.: Para um cristal de 8MHz
#use delay(clock=8000000)

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 34 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Bits de controle (fuses) A diretiva #fuses, informa a configurao dos bits de controle (conhecidos como fusveis). Estes bits de controle so responsveis por informar ao microcontrolador como dever ser o seu funcionamento, ou seja, que tipo de oscilador, se ter algum tipo de proteo ou no, algumas opes de reset e temporizao, etc. No exemplo acima, temos a seguinte configurao: HS = Oscilador HS (oscilador a cristal >= 4MHz); NOWDT = Watchdog desabilitado PUT = Power Up Time habilitado BROWNOUT = Brownout reset habilitado NOLVP = Desabilitada programao por baixa tenso Como podemos notar, temos somente 5 bits de controle configurados, porm existem mais bits de controle que precisam ser configurados para que o funcionamento do microcontrolador seja adequado. Na realidade, o compilador CCS j possui uma pr configurao destes bits de controle e podemos v-las clicando no menu Compile e pressionando-se o boto C/ASM List. Esta opo nos mostrar o cdigo que compilamos em Assembly e no final deste arquivo, temos a informao Configuration Fuses, conforme a figura a seguir:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 35 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Configuraes dos bits de controle fuses

Verifica-se, atravs das configuraes mostradas na figura que agora temos todos os bits de controle configurados e tambm que as configuraes que fizemos pela diretiva fuses se mantm e as que no foram feitas pelo programador, sero feitas automaticamente pelo compilador mantendo um padro inicial. Para ver o padro utilizado pelo compilador, apenas comente a linha da diretiva fuses, compile novamente o arquivo e verifique o cdigo em assembly. Veja todas as opes de configurao dos bits de controle para os microcontroladores PIC16F877A e PIC16F887 a seguir: Bits de configurao para o PIC 16F877A
Fuse LP RC XT HS NOWDT WDT NOPUT PUT NOPROTECT PROTECT NOBROWNOUT BROWNOUT NOLVP Descrio Oscilador LP (< 200 KHz) Oscilador RC Oscilador XT (Oscilador a cristal <= 4MHz) Oscilador HS (oscilador a cristal >= 4MHz Watchdog desabilitado Watchdog habilitado Temporizador Power-up desligado Temporizador Power-up ligado Proteo de cdigo desabilitada Proteo de cdigo habilitada Reset por queda de tenso desabilitado Reset por queda de tenso habilitado Programao em baixa tenso desabilitada

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 36 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


LVP NOCPD CPD WRT_5% WRT_25% WRT_50% NOWRT Programao em baixa tenso habilitada. Proteo da EEPROM habilitada Proteo da EEPROM desabilitada Proteo dos primeiros 255 bytes da memria de programa habilitada Proteo de dos bytes totais da memria de programa habilitada Proteo de dos bytes totais da memria de programa habilitada Proteo da memria de programa desabilitada

Bits de configurao para o PIC 16F887


Fuse LP XT HS EC_IO INTRC_IO INTRC RC_IO RC NOWDT WDT NOPUT PUT NOMCLR MCLR NOPROTECT PROTECT NOBROWNOUT BROWNOUT BROWNOUT_NOSL BROWNOUT_SW BORV21 BORV40 NOLVP LVP NOCPD Descrio Oscilador LP (< 200 KHz) Oscilador XT (Oscilador a cristal <= 4MHz) Oscilador HS (oscilador a cristal >= 4MHz) Clock externo Oscilador RC interno, sem CLKOUT Oscilador RC interno Oscilador RC com CLKOUT Oscilador RC (Resistor/Capacitor) Watchdog desabilitado Watchdog habilitado Temporizador Power-up desligado Temporizador Power-up ligado Master Clear desabilitado, pino 1 configurado como entrada (RE3) Master Clear habilitado Proteo de cdigo desabilitada Proteo de cdigo habilitada Reset por queda de tenso desabilitado Reset por queda de tenso habilitado Reset por queda de tenso habilitado durante a operao e desabilitado durante o modo SLEEP Reset por queda de tenso controlado via software Reset por queda de tenso abaixo de 2,1V Reset por queda de tenso abaixo de 4,0V Programao em baixa tenso desabilitada Programao em baixa tenso habilitada. Proteo da EEPROM habilitada

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 37 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


CPD NOIESO IESO NOFCMEN FCMEN NOCPD CPD NOWRT WRT DEBUG Proteo da EEPROM desabilitada Mudana do oscilador interno/externo desabilidada Mudana do oscilador interno/externo habilitada Desabilita o monitoramento do sinal de clock Habilita o monitoramento do sinal de clock Cdigo na EEPROM no protegido Cdigo na EEPROM protegido Proteo da memria de programa desabilitada Proteo da memria de programa habilitada Depurao pelo ICD habilitada

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 38 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Ciclo de Mquina A entrada de clock para o microcontrolador, seja ela interna ou externa, dividida internamente por 4, gerando, assim, 4 fases (Q1, Q2, Q3 e Q4). Internamente, o contador de programa (program counter PC) incrementado na fase Q1 onde a instruo localizada na memria de programa e carregada no registro de instruo na fase Q4, ento a instruo decodificada e executada durante os ciclos Q2, Q3 e Q4.

Conforme podemos ver acima, cada ciclo de mquina executa duas funes ao mesmo tempo, ou seja, ao mesmo tempo em que uma instruo executada, a prxima instruo localizada e carregada no registro de instruo. A essa tecnologia dado o nome de PIPELINE e que resulta no aumento da velocidade de processamento. Sendo assim, para obtermos a freqncia para o clculo do ciclo, devemos ento, dividir o sinal de entrada de clock interno ou externo por 4. Por exemplo: Supondo que contamos com um cristal de 20MHz como fonte de clock para o microcontrolador, ento teremos:

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 39 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Frequncia de operao:

Ciclo de mquina:

Portas de I/O Nos PICs 16F877A e 16F887 contamos com 5 portas (A, B, C, D e E) e alguns pinos dessas portas podem ter outras funes. De modo geral, quando o pino utilizado para outra funo, este no poder ser utilizado com pino de I/O. Cada porta tem 3 registradores para sua correta operao: - Registrador TRIS, que o responsvel pelo direcionamento (entrada ou sada) das portas, onde se um bit estiver em 0, o pino referente ser um pino de sada e se o bit estiver em 1, o pino referente ser um pino de entrada; - Registrador PORT, responsvel por escrever ou ler o nvel dos pinos associados porta; Registrador TRIS O registrador TRIS, como j vimos, o responsvel pelo direcionamento no sentido do fluxo de dados de uma determinada porta. Esse registrador possui 8 bits, sendo cada bit correspondente a um determinado pino de I/O. Podemos identificar os registradores de acesso como TRISA, TRISB, TRISC, TRISD e TRISE.
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 40 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

O compilador CCS, por padro, faz automaticamente o direcionamento dos pinos dos registradores TRIS atravs das funes de sada ou de entrada, porm o programador tambm pode desabilitar esta forma de configurao e fazer, via programao, o direcionamento dos pinos. Diretivas de direcionamento dos pinos Para que possamos fazer a configurao dos registradores TRIS no compilador CCS, temos trs possibilidades atravs das diretivas abaixo:
#USE STANDARD_IO(port) Onde port pode ser A, B, C, D ou E.

Esta a configurao padro do compilador e no necessria sua utilizao a no ser que seja necessrio voltar configurao padro aps o uso de uma das diretivas de direcionamento abaixo. Com esta diretiva, o direcionamento dos pinos sero de acordo com a utilizao das funes de entrada e sada do prprio compilador.
#USE FAST_IO(port) Onde port pode ser A, B, C, D ou E.

Com o uso desta diretiva, o programador faz a configurao dos pinos de entrada e sada de acordo com o desejado, ou seja, o direcionamento deixa de ser automtico. Para o direcionamento dos pinos atravs da programao deve ser utilizada uma funo especfica para este fim conforme de utilizao abaixo:
#USE FAST_IO(D) /*O direcionamento dos pinos da porta D sero via ...programao*/

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 41 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


void main() { SET_TRIS_D(0B11011010); /*os pinos 0, 2 e 5 da porta D sero configurados como ... pinos de sada e os demais pinos sero configurados ... como pinos de entrada*/

while(true); }

Veja na prxima figura a representao dos bits deste registrador.

#USE FIXED_IO(port_output=pin,pin?) Onde port pode ser A, B, C, D ou E e pin o pino de entrada/sada a ser utilizado.

Esta diretiva faz com que o pino seja configurado como entrada ou sada de acordo com a utilizao das funes OUTPUT_X(value) e INPUT_X(value), ou seja, cada vez que uma das funes for encontrada o direcionamento do(s) pino(s) informado(s) na diretiva ser alterado para entrada ou sada. Registrador PORT O registrador PORT, assim como informado antes, o responsvel por informar o estado dos pinos de uma porta. Este registrador tambm
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 42 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

de 8 bits e atravs das funes de entrada e sada do compilador possvel escrever ou ler os pinos de uma determinada porta. Funo de entrada
x = INPUT_B(); //L os pinos da porta B e armazena em x

Funes de sada
OUTPUT_B(0b01001010); //Aciona os pinos da porta B

possvel verificarmos os nveis de tenso na porta D conforme mostra a figura abaixo:

Caso seja desejado alterar somente um bit de uma determinada porta para nvel lgico 0 ou 1, podemos utilizar a seguinte funo:
OUTPUT_BIT(PIN_RB0,0); //O pino 0 da porta B ter nvel lgico 0

Para levar um determinado pino de uma determinada porta ao nvel lgico 1, utilizamos a seguinte funo:
OUTPUT_HIGH(PIN_B1); //O pino 1 da porta B ter nvel lgico 1

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 43 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

A seguinte funo tem a finalidade de levar para o nvel lgio 0, um somente um pino de uma determinada porta:
OUTPUT_LOW(PIN_B2); //O pino 2 da porta B ter nvel lgico 0

Nesta prxima funo, ser invertido o nvel lgico de um pino de uma determinada porta, ou seja, o pino estando em 1 vai para 0 e estando em 0 vai para 1.
OUTPUT_TOGGLE(PIN_B3); /*Inverte o estado do pino 3 da porta B, ou seja, se tiver ...em nvel lgico 1 muda para nvel lgico 0 e vice...versa*/

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 44 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Primeiro Programa Acionamento de LEDS Para o primeiro programa, vamos utilizar o circuito abaixo, onde faremos os leds conectados PORTA D piscarem em intervalo de 500ms. Circuito:

Circuito piscaled

Cdigo fonte do arquivo EX02.c: Antes de digitarmos o cdigo, precisamos fechar todos o programas anteriores atravs da opo Close all na pastinha da interface CCS. Abra um novo cdigo fonte, conforme explicado anteriormente.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 45 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


#include<16F887.h> //Incluso do arquivo header (*.h) para o //microcontrolador utilizado #use delay (clock=8000000) //Definio da frequncia do cristal para clculo //..dos delays #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle #use fast_io(D) /*Direcionamento dos pinos da porta D sero feitos pelo programador*/

void main() { set_tris_d(0b00000000); output_D(0b00000000);

//Direciona todos os pinos da porta D como sada //Apaga todos os Led's da Porta D //Loop principal //Apaga todos os Led's da Porta D //Atraso de 500ms //Acende todos os Leds da Porta D //Atraso de 500ms

while (true) { output_D(0b00000000); delay_ms(500); output_D(0b11111111); delay_ms(500); } }

Digitando o cdigo acima no editor da interface CCS, podemos agora compilar para programar o microcontrolador e verificar o funcionamento. Para compilar o cdigo, clique em Compile no menu principal e logo em seguida no boto Compile, conforme mostrado na figura a seguir. Podemos tambm utilizar a tecla F9 do computador que a tecla de atalho para o boto Compile.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 46 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Digitao do cdigo fonte

Uma mensagem de erro ser mostrada na janela Output se algum erro acontecer, tal como uma palavra errada ou uma varivel que no foi declarada ou at mesmo a falta do ;. Veja abaixo um exemplo onde mostrado uma mensagem de erro e tambm informado qual o erro ocorrido, neste caso, faltou fechar com ; a ltima linha do programa (delay_ms(500)). Basta-nos corrigir o problema e compilar novamente o cdigo.

Apresentao de mensagens de erro

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 47 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Gravando o microcontrolador Quando o programa compilado, ser gerado um arquivo chamado hexa com a extenso *.hex (no caso do cdigo acima, ser gerado o arquivo EX02.hex) e este arquivo que utilizaremos para programar o microcontrolador. Existem vrios esquemas de gravadores e softwares de programadores livres na internet, os prprios kits que utilizamos possuem gravadores on-board e funcionam pela porta serial do computador. Porm neste curso, como dito anteriormente, faremos uso da ferramenta de gravao e depurao ACE ICD que tem as mesmas funes do gravador e depurador ICD2 da microchip, sendo assim este ser integrado ao MPLAB e assim facilitar a programao do microcontrolador. Abriremos a interface MPLAB e primeiramente, devemos verificar se o microcontrolador selecionado e apresentado na barra de status localizada na parte de baixo da interface o mesmo microcontrolador que vamos programar. Veja na figura abaixo o microcontrolador informado em destaque

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 48 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Microcontrolador PIC18F4620 selecionado

Caso no esteja selecionado o microcontrolador que desejamos, ento ser necessrio fazer esta seleo. Para isso, clique no menu superior em Configure e em seguida em Select Device, conforme mostra a prxima figura.

Selecionando o microcontrolador

Na janela de seleo que se abrir, selecione o microcontrolador PIC 16F887.


_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 49 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Selecionando o PIC 16F887

Aps, a seleo, clique sobre o boto OK. Note que agora, na barra de status, o microcontrolador PIC16F887 ser mostrado. Agora, conectaremos o gravador e depurador uma porta USB no computador e, atravs do cabo ICSP, conectaremos o gravador ao kit. Aps isso, selecionaremos no MPLAB o programador ICD2, selecionando no menu Programmer e em seguida clicando em MPLAB ICD2, conforme a prxima figura.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 50 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Selecionando o programador ICD2

Se o programador foi utilizado anteriormente para programar ou depurar um microcontrolador de outra famlia ou com caractersticas muito diferentes do PIC 16F887, pode acontecer a mensagem mostrada.

Mensagem de informao de download de novo sistema de operao

Esta mensagem informa que ser feito um download no programador de um novo sistema de operao e que isso poder levar alguns segundos, portanto, basta clicar no boto OK e aguardar o trmino da operao. Ao finalizar, a janela Output mostrar as informaes do microcontrolador selecionado e tambm a mensagem que o programador est pronto para prxima operao.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 51 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Veja na figura a seguir a informao mostrada.

Microcontrolador reconhecido e programador pronto para prxima operao

Agora, importaremos o arquivo hexa que o compilador gerou, programaremos o microcontrolador e verificaremos o funcionamento. No menu, clique em File e logo em seguida escolha a opo Import....

Importando o arquivo hexa

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 52 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Procure o arquivo compilado e clique em Abrir, conforme a figura abaixo:

Abrindo o arquivo hexa

Note que o caminho do arquivo hexa aberto ser mostrado na janela Output do MPLAB.

Janela Output com o caminho do arquivo hexa

Note tambm que sero habilitados os botes para programao do microcontrolador, conforme seguem:

Botes de programao

Basta-nos programar o microcontrolador pressionando o boto Program target device, conforme mostrado em destaque na figura a seguir:
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 53 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Boto de programao do microcontrolador

O resultado da programao tambm ser mostrado na janela Output. Para que o programa rode sem a necessidade de desconectar o programador, basta pressionar o boto Release from reset, conforme a prxima figura:

Resetando o microcontrolador

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 54 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Entendendo o cdigo fonte Primeiramente, no cdigo fonte, temos o cabealho, ou seja, a incluso do arquivo header, as informaes de frequncia, as configuraes dos bits de controle para o PIC 16F887 e finalmente a diretiva de direcionamento da porta D.
#include<16F887.h> //Incluso do arquivo header (*.h) para o //microcontrolador utilizado #use delay (clock=8000000) //Definio da frequncia do cristal para clculo //..dos delays #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle #use fast_io(D) /*Direcionamento dos pinos da porta D sero feitos pelo programador*/

Na funo principal (main), logo ao iniciarmos, temos a funo set_tris_d(0b00000000); que far o direcionamento dos pinos da porta D, neste caso, todos os pinos sero configurados como sada. Seguindo, temos o lao while e devido a este lao, conforme visto na introduo linguagem C, o programa ficar repetindo os comandos dentro do seu bloco infinitamente.
void main() { set_tris_d(0b00000000);

//Direciona todos os pinos da porta D como sada //Loop principal //Apaga todos os Led's da Porta D //Atraso de 1000ms (1 segundo) //Acende todos os Leds da Porta D //Atraso de 1000ms (1 segundo)

while (true) { output_D(0b00000000); delay_ms(500); output_D(0b11111111); delay_ms(500); } }

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 55 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Neste caso, atravs da funo output_d(0b00000000), faremos com que toda a porta D tenha nvel lgico 0, ou seja, de acordo com o esquema, todos os Leds estaro apagados. Em seguida, utilizamos a funo de atraso delay_ms(500) que far com que seja gerado um atraso de 500ms no programa para que a prxima funo, output_D(0b11111111), faa com que todos os pinos da porta D passem a ter nvel lgico 1, assim acendendo todos os Leds. Aps essa funo, temos mais uma funo de atraso de 500ms e fechamos o lao while fechando a chave do bloco e assim sendo, o programa executar estas 4 funes infinitamente.

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 56 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Funes de atraso (delay) So 3 as funes de atraso disponveis no compilador CCS. delay_ms(tempo); Esta funo gera um atraso no programa de 1 milisegundo vezes a varivel tempo, onde tempo uma varivel do tipo int16, e assim sendo, pode assumir valores de 0 a 65535. Ex.:
delay_ms(1000); //Gera um atraso de 1 x 1000 milisegundos, ou seja, 1 segundo

delay_us(tempo); Esta funo gera um atraso no programa de 1 microsegundo vezes a varivel tempo, onde tempo uma varivel do tipo int16, e assim sendo, pode assumir valores de 0 a 65535. Ex.:
delay_us(1000); //Gera um atraso de 1 x 1000 microsegundos, ou seja, 1 //milisegundo

delay_cycles(valor); Esta funo gera um atraso de ciclos de mquina de acordo com a varivel valor, sendo esta varivel do tipo constante, sendo que pode assumir valores de 1 a 255. Ex.:
delay_cycles(10); //Gera um atraso de 10 ciclos de mquina

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 57 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Acionamento de Botes Neste prximo projeto, faremos a leitura do pino 0 da porta B (RB0) e quando este for igual a 0, acionaremos o bit 0 da porta D fazendo acender o LED L1 conectado a este pino e, caso o nvel lgico no pino RB0 seja 0 novamente, apagaremos o LED L1. Assim, cada vez que pressionarmos o boto B0, mudaremos o estado do LED L1. Veja no circuito apresentado que o pino RB0 est inicialmente em nvel lgico 1 e, ao pressionarmos o boto B0, este pino dever ser levado para o nvel 0. Circuito:

Circuito acionamento de botes

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 58 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Cdigo fonte arquivo Ex03.c


#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) /*Definio da frequncia do cristal para clculo ..dos delays*/ #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle

#use fast_io(B) #use fast_io(D)

/*Direcionamento dos pinos da porta B sero feitos pelo programador*/ /*Direcionamento dos pinos da porta D sero feitos pelo programador*/

void main() { set_tris_b(0b00000001);

/*Somente o pino 0 da porta B ser direcionado como entrada*/ //Todos os pinos da porta D sero sada //Coloca em 0 toda a porta D

set_tris_d(0b00000000); output_D(0b00000000);

while(true) { if (input(PIN_B0)==0) { output_toggle(PIN_D0); delay_ms(300); } } }

//Se o boto for pressionado //Muda o estado do pino D0 (LED L1) //Atraso de 300ms

Note que neste cdigo, somente verificamos o pino 0 da porta B atravs da declarao de controle if e, quando o nvel de sinal no pino for 0 a condio (expresso input(PIN_B0)==0) ser verdadeira, assim sero executados os comandos (funes) contidos no bloco da declarao if. A primeira funo no bloco da declarao if (output_Toggle(PIN_D0);
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 59 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

), far a inverso lgica de 1 para 0 e vice-versa somente do pino 0 da porta D e logo em seguida temos a funo de atraso de 300ms para evitar o chamando debounce (rudo eltrico da chave). Agora, basta compilar o projeto e programar o microcontrolador com o arquivo hexadecimal gerado para verificar o funcionamento. Diretiva #define Podemos atribuir um nome a uma constante ou a um registrador usados com frequncia num programa atravs da diretiva #define conforme segue abaixo: Exemplos:
#define B0 PIN_B0 /*Informa ao compilador que o valor B0 ser substitudo ...por PIN_B0 toda vez que este for utilizado */ /*Informa ao compilador que a constante MAX, toda vez ...que for utilizada ter o valor 125 atribudo a ela*/

#define MAX 125

Abaixo podemos ver um exemplo de cdigo que faz a mesam funo do exemplo anterior, porm utilizaremos a diretiva #define para nomear o LED L1 e o Boto B0. Cdigo fonte arquivo Ex04.c
#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) /*Definio da frequncia do cristal para clculo ..dos delays*/ #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle #use fast_io(B) /*Direcionamento dos pinos da porta B sero feitos pelo programador*/

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 60 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________


#use fast_io(D) /*Direcionamento dos pinos da porta D sero feitos pelo programador*/ /*Informa ao compilador que o valor B0 ser substitudo por PIN_B0 toda vez que este for utilizado */ /*Informa ao compilador que o valor L1 ser substitudo por PIN_D0 toda vez que este for utilizado */

#define B0 PIN_B0

#define L1 PIN_D0

void main() { set_tris_b(0b00000001);

/*Somente o pino 0 da porta B ser direcionado como entrada*/ //Todos os pinos da porta D sero sada //Coloca em 0 toda a porta D

set_tris_d(0b00000000); output_D(0b00000000);

while(true) { if (input(B0)==0) //Se o boto for pressionado { output_Toggle(L1); //Muda o estado do pino 0 da porta D (LED L1) delay_ms(300); //Atraso de 300ms } } }

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 61 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Funes As funes em linguagem C so muito parecidas com as sub-rotinas da linguagem assembly. O seu uso permite executar uma seqncia de comandos sempre que necessitarmos, sem a necessidade de repetlos. O formato geral de uma funo :
{tipo} nome_da_funo ({parmetros}) { Comando_1; Comando_2; .... }

Onde: tipo: Especifica o tipo de dado que a funo retornar para onde ela foi chamada. nome_da_funo: Identifica a funo, ou seja, como ela ser chamada pelo programa. Este nome no pode ter o mesmo nome utilizado por funes prprias do compilador (palavras reservadas). parmetros: Utilizados para enviar valores para a funo de modo que estes sejam utilizados pela funo para clculos, atribuies, controle, etc. Esses valores consistem em tipos de variveis separados por vrgulas e so opcionais, portanto, podemos escrever funes sem qualquer parmetro. Mesmo sem a existncia dos valores, os parnteses devem ser utilizados.
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 62 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Exemplo:
#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) /*Definio da frequncia do cristal para clculo ..dos delays*/ #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle int soma (int a, int b) { return a + b; } void main () { int c; c = soma (2,3); while(true); }

Neste exemplo, definimos uma funo soma que retornar o resultado da operao dos parmetros a + o parmetro b. Note que o a funo do tipo short, isso ento especifica que a funo retornar um valor do tipo short de 8 bits. No corpo da funo, encontramos somente o cdigo return a + b, onde o comando return utilizado para retornar o valor da operao dos parmetros a + b. No bloco principal, encontramos a chamada da funo atravs de c = soma (2,3), onde a varivel c receber o valor do retorno da funo (note que a varivel tambm foi declarada com o mesmo tipo da funo) e os parmetros so os valores 2 e 3, separados pela vrgula e dentro dos parnteses. Ento neste caso, a funo soma recebe os valores 2 e 3 e estes sero atribudos s variveis a e b, respectivamente e a funo retornar o valor da soma entre eles, portanto o valor 5 que ser
_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 63 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

repassado para a varivel c no corpo principal do programa. Prottipo de funo Um programa em linguagem C pode ficar muito grande e muito complexo e, s vezes, uma funo pode ser chamada antes desta ter sido definida. Neste caso, o compilador gera um erro, veja o exemplo abaixo:
#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) /*Definio da frequncia do cristal para clculo ..dos delays*/ #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle void main () { int c; c = soma (2,3); while(true); } int soma (int a, int b) { return a + b; }

Veja que a funo soma est definida aps a funo principal (main). Neste caso, como a funo soma foi definida aps a sua chamada, o compilador retornar um erro dizendo que o identificador soma no foi declarado, veja a mensagens de erro na prxima figura:

Erro na funo soma

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 64 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

Podemos solucionar este tipo de problema ao declararmos previamente a funo, ou seja, informaremos ao compilador que existe uma funo com aquele nome que estamos chamando. Isto conhecido como prototipagem de funo. O prottipo de funo deve ser declarado obedecendo aos mesmos tipos e parmetros da funo seguido do ponto e vrgula (;) e, normalmente, so declarados logo no incio do programa. Exemplo:
#include<16F887.h> /*Incluso do arquivo header (*.h) para o microcontrolador utilizado*/ #use delay (clock=8000000) /*Definio da frequncia do cristal para clculo ..dos delays*/ #fuses HS, NOWDT, PUT,BROWNOUT, NOLVP //Configurao dos bits de controle int soma (int a, int b); void main () { int c; c = soma (2,3); while(true); } int soma (int a, int b) { return a + b; }

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 65 www.acepic.com.br

Linguagem C para microcontroladores PIC Compilador CCS _____________________________________________________________

_______________________________________________________________ ACEPIC tecnologia e Treinamento LTDA. P g i n a | 66 www.acepic.com.br

Potrebbero piacerti anche