Você está na página 1de 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

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 8 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

Tamanho

Intervalo

short int, int1, boolean

1 bit

0 ou 1

char

8 bits

0 a 255

int, int8

8 bits

-128 a 127

signed int

8 bits

-128 a 127

unsigned int

8 bits

0 a 255

long int, int16

16 bits

-32768 a 32767

signed long int, signed int16

16 bits

-32768 a 32767

unsigned long int, unsigned int16

36 bits

0 a 65535

int32

32 bits

-2147483648 a 2147483647

signed int32

32 bits

-2147483648 a 2147483647

unsigned int32

32 bits

0 a 4294967295

float

32 bits

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

Exemplo

Soma dos argumentos

a+b

Subtrao dos argumentos

a-b

Multiplicao dos argumentos

a*b

Diviso dos argumentos

a/b

Resto da diviso (s pode ser utilizado com valores inteiros)

a%b

++

Soma 1 ao argumento

a++

--

Subtrai 1 ao argumento

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

Exemplo

==

Compara se igual a

a == 5

!=

Compara se diferente de

a != 5

>

Compara se maior que

a>5

<

Compara se menor que

a<5

>=

Compara se maior ou igual a

a >= 5

<=

Compara se menor ou igual a

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

void main()

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

Linguagem C para microcontroladores PIC


Compilador CCS
_____________________________________________________________
{
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)

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

/*Direcionamento dos pinos da porta D sero feitos


pelo programador*/

//Direciona todos os pinos da porta D como sada


//Apaga todos os Led's da Porta D

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

//Loop principal
//Apaga todos os Led's da Porta D
//Atraso de 500ms
//Acende todos os Leds da Porta D
//Atraso de 500ms

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

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

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

_______________________________________________________________
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)

void main()
{
set_tris_b(0b00000001);

/*Direcionamento dos pinos da porta B sero feitos


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

/*Somente o pino 0 da porta B ser direcionado como


entrada*/

set_tris_d(0b00000000);

//Todos os pinos da porta D sero sada

output_D(0b00000000);

//Coloca em 0 toda a porta D

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

#define MAX 125

/*Informa ao compilador que a constante MAX, toda vez


...que for utilizada ter o valor 125 atribudo a ela*/

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

#define B0 PIN_B0

/*Informa ao compilador que o valor B0 ser substitudo


por PIN_B0 toda vez que este for utilizado */

#define L1 PIN_D0

/*Informa ao compilador que o valor L1 ser substitudo


por PIN_D0 toda vez que este for utilizado */

void main()
{
set_tris_b(0b00000001);

/*Somente o pino 0 da porta B ser direcionado como


entrada*/

set_tris_d(0b00000000);

//Todos os pinos da porta D sero sada

output_D(0b00000000);

//Coloca em 0 toda a porta D

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