para microcontroladores
PIC.
(Compilador CCS)
PIC16F877A e PIC16F887.
ACEPIC Tecnologia e Treinamento LTDA.
Autor: Carlos Eduardo Sandrini Luz
Unidade 01
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
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
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
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P gina |4
www.acepic.com.br
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
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
Tamanho
Intervalo
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
16 bits
-32768 a 32767
16 bits
-32768 a 32767
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
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:
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
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
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
a+b
a-b
a*b
a/b
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
Descrio
Exemplo
==
Compara se igual a
a == 5
!=
Compara se diferente de
a != 5
>
a>5
<
a<5
>=
a >= 5
<=
a <= 5
E (AND)
OU (OR)
OU EXCLUSIVO (XOR)
Complemento (NOT)
>>
Deslocamento direita
<<
Deslocamento esquerda
Descrio
&&
||
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 11
www.acepic.com.br
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;
}
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 12
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 13
www.acepic.com.br
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;
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 14
www.acepic.com.br
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
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;
.
.
.
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 16
www.acepic.com.br
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++;
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 17
www.acepic.com.br
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++;
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 18
www.acepic.com.br
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);
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 19
www.acepic.com.br
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
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
Pinagem do PIC16F877A
Pinagem do PIC16F887
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 22
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 23
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 24
www.acepic.com.br
Compilando o programa
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 25
www.acepic.com.br
Compilando o programa
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 26
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 27
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 28
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 29
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 30
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 31
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 32
www.acepic.com.br
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>
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 33
www.acepic.com.br
#include<16F887.h>
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 34
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 35
www.acepic.com.br
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
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
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 38
www.acepic.com.br
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.
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 39
www.acepic.com.br
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
void main()
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 41
www.acepic.com.br
while(true);
}
#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
Funes de sada
OUTPUT_B(0b01001010);
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 43
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 44
www.acepic.com.br
Circuito piscaled
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 45
www.acepic.com.br
void main()
{
set_tris_d(0b00000000);
output_D(0b00000000);
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
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 46
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 47
www.acepic.com.br
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
Selecionando o microcontrolador
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 50
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 51
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 52
www.acepic.com.br
Botes de programao
Resetando o microcontrolador
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 54
www.acepic.com.br
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
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 56
www.acepic.com.br
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);
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
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:
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 58
www.acepic.com.br
#use fast_io(B)
#use fast_io(D)
void main()
{
set_tris_b(0b00000001);
set_tris_d(0b00000000);
output_D(0b00000000);
while(true)
{
if (input(PIN_B0)==0)
{
output_toggle(PIN_D0);
delay_ms(300);
}
}
}
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 60
www.acepic.com.br
#define B0 PIN_B0
#define L1 PIN_D0
void main()
{
set_tris_b(0b00000001);
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
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
Exemplo:
#include<16F887.h>
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:
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 64
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 65
www.acepic.com.br
_______________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 66
www.acepic.com.br