Вы находитесь на странице: 1из 68

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 preocupe-se 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..

O compilador MPLAB C18


O MPLAB C18 um compilador em linguagem C que produz cdigos que podem ser
executados pela famlia de microcontroladores Microchip PIC18XXXX. Assim como o
compilador assembly, o C18 traduz a linguagem escrita pelo programador em uns e
zeros para que o microcontrolador entenda e execute, ou seja, o MPLAB C18 converte
declaraes, tipo if(x==y) e temp=0x27 em cdigo de mquina para os
microcontroladores PIC18XXXX.
O compilador pode otimizar cdigos usando rotinas que so empregadas em uma
funo para que seja utilizada por outras funes em C. O C18 pode rearranjar cdigos,
eliminar cdigos que nunca sero executados, compartilhar fragmentos de cdigos
entre mltiplas funes e pode identificar dados e registros usados sem eficincia,
otimizando seu acesso.
O MPLAB C18 utiliza cdigos escritos na notao padro ANSI C e gera arquivos HEXA
(.hex) para que possam ser programados nos microcontroladors. A interface MPLAB
utilizada para escrever, compilar e depurar os cdigos escritos em C.

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

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
far
float
for
goto

if
Int
long
near
overlay
ram
register
return

rom
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.
Pgina |2
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Tipos de dados
Os tipos de dados suportados pelo compilador C18 so vistos na tabela abaixo:
Tipo

Tamanho

Valores

char

8 bits

128 a 127

unsigned char

8 bits

0 a 255

signed char

8 bits

-128 a 127

int

16 bits

-32768 a 32767

unsigned int

16 bits

0 a 65535

short

16 bits

-32768 a 32767

unsigned short

16 bits

0 a 65535

short long

24 bits

-8388608 a 8388607

unsigned short long

24 bits

0 a 16777215

long

32 bits

-2147483648 a 2147483647

unsigned long

32 bits

0 a 4294967295

float

32 bits

-1,17549435082e-38 a 6,80564774407e38

double

32 bits

-1,17549435082e-38 a 6,80564774407e38

______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
Pgina |3
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

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 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 = 12345;


int conta;
short x1;

Variveis Globais
So declaradas no incio de nosso cdigo e que podem ser acessadas em qualquer
ponto do programa:
Exemplo:
int conta;
unsigned int c;
void main()
{
conta = 10;
c = c + 1;
while (1);
}

______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
Pgina |4
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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(1);
}

______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
Pgina |5
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

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

+=

Soma dos argumentos

a += b

Subtrao dos argumentos

a-b

-=

Subtrao dos argumentos

a -= b

Multiplicao dos argumentos

a*b

*=

Multiplicao dos argumentos

a *= b

Diviso dos argumentos

a/b

/=

Diviso dos argumentos

a /= b

Resto da diviso (s pode ser utilizado com valores


inteiros)

a%b

%=

Resto da diviso (s pode ser utilizado com valores


inteiros)

a %= b

++

Soma 1 ao argumento

a++

--

Subtrai 1 ao argumento

a--

______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
Pgina |6
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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.
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.
Pgina |7
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Declaraes de controle:
Comando if (se):
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;
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.
Pgina |8
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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.
Pgina |9
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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++;
}
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
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 10
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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 | 11
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Lao FOR:
Este um dos comandos de lao (loop ou repetio) disponveis na linguagem C, a sua
forma :
for(inicializao;condio(trmino);incremento) comando:
ou,
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: aqui pode conter uma ou mais variveis para incremento da varivel.
Exemplo:
int conta;
int a = 0;
for (conta=0;conta<10;conta++) a = conta;
Neste exemplo, a varivel conta ser iniciada com o valor 0, a expresso a = conta ser
executada e aps isso a varivel conta ser incrementada novamente. Essa repetio
ou lao se encerrar quando a condio conta < 10 for satisfeita, ou seja quando a
varivel conta for igual a 9.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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 whil, enquanto a varivel x for menor
que 10 e o programa s continuar quando o valor de x for maior ou igual a 10.

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 | 13
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

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, ou seja, como estamos
acostumados a escrever:
Ex.: PORTB = 10;
Notao binria: esta representao vem precedida de 0b ou 0B, indicando a
notao:
Ex.: PORTB = 0b00000010;
ou
PORTB = 0B00000010;
Notao Hexadecimal: esta representao vem precedida de 0x ou 0X, ex:
Ex.: PORTB = 0x0A;
ou
PORTB = 0X0A;

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

O PIC 18F4520
Introduo
O PIC 18F4520 baseado na arquitetura Harvard com instrues do tipo RISC
(Conjunto reduzido de instrues). Este microcontrolador utiliza a tecnologia nanoWatt
desenvolvida pela Microchip, permitindo menor consumo de energia. Veja suas
caractersticas abaixo:
O modelo utilizado no curso possui 40 pinos, sendo que 36 podem ser
configurados como portas de entrada/sada (I/O);
Frequncia de operao: DC a 40 MHz;
Memria Flash de 32KB;
Memria de dados RAM de 1536 bytes;
Memria de dados EEPROM de 256 bytes;
20 fontes de interrupo;
13 canais de converso analgica-digital (A/D) de 10 bits cada;
1 mdulo de comparao, captura e PWM (CCP);
1 mdulo de comparao, captura e PWM melhorado (ECCP);
1 mdulo SPI;
1 mdulo I2C;
2 comparadores analgicos;
1 timer de 8 ou 16 bits (TIMER0), 2 timers de 16 bits (TIMER1 e TIMER3) e 1
timer de 8 bits (TIMER2);
1 comunicao EUSART (modo USART melhorado);
1 mdulo de deteco de alta/baixa tenso (HLVD).

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Pinagem do PIC 18F4520

Nomenclatura dos pinos

Pino
Nome
1
MCLR/VPP/RE3
2

RA0/AN0

RA1/AN1

RA2/AN2/VREF/CVREF

RA3/AN3/VREF+

RA4/T0CKI
/C1OUT

RA5/AN4/SS
/HLVDIN/C2OUT

Tipo
Descrio
E
Master Clear Reset/ Entrada de tenso de
programao/ Entrada de uso geral (bit 3 PORTA E).
E/S
Entrada/sada de uso geral (bit 0 PORTA A) / Entrada
do canal analgico 0
E/S
Entrada/sada de uso geral (bit 1 da PORTA A) /
Entrada do canal analgico 1.
E/S
Entrada/sada de uso geral (bit 2 da PORTA A) /
Entrada do canal analgico 2 / Entrada de tenso
negativa de referncia para o conversor A/D / Sada de
Vref do comparador analgico.
E/S
Entrada/sada de uso geral (bit 3 da PORTA A) /
Entrada do canal analgico 3 / Entrada de tenso
positiva de referncia para o conversor A/D.
E/S
Entrada/sada de uso geral (bit 4 da PORTA A) /
Entrada de clock externo para o Timer 0 / Sada do
comparador 1.
E/S
Entrada/sada de uso geral (bit 5 da PORTA A) /
Entrada do canal analgico 4 / Seleco para o modo
SPI escravo / Entrada do mdulo de deteco de alta
tenso / Sada do comparador 2.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
8
RE0/RD/AN5
E/S
Entrada/sada de uso geral (bit 0 da porta E) / Controle
de leitura para comunicao paralela / Entrada do
canal analgico 5.
9
RE1/WR/AN6
E/S
Entrada/sada de uso geral (bit 1 da porta E) / Controle
de escrita para comunicao paralela / Entrada do
canal analgico 6.
10
RE2/CS/AN7
E/S
Entrada/sada de uso geral (bit 2 da porta E) / Controle
de seleo para comunicao paralela / Entrada do
canal analgico 7.
11
VDD
Alimentao positiva do microcontrolador.
12
VSS
Terra (Referncia de alimentao).
13
OSC1/CLKI/RA7
E/S
Entrada do cristal oscilador / Entrada para fonte de
clock externo / Entrada/sada de uso geral (bit 7 da
porta A).
14
OSC2/CLKO/RA6 E/S
Sada do cristal oscilador / No Modo RC configurado
como sada com da frequencia de CLKI/
Entrada/sada de uso geral (bit 6 da porta A).
15
RC0/T1OSO/
E/S
Entrada/sada de uso geral (bit 0 da porta C) / Sada do
T13CKI
oscilador para o TIMER1 / Entrada para clock externo
para o TIMER1 e TIMER3.
16
RC1/T1OSI/CCP2 E/S
Entrada/sada de uso geral (bit 1 da porta C) / Entrada
do oscilador para o TIMER1 / Entrada para o mdulo
capture2 e sadas para os mdulos de compare2 e
PWM2 (entrada padro).
17
RC2/CCP1/P1A
E/S
Entrada/sada de uso geral (bit 2 da porta C) / Entrada
para o mdulo capture1 e sadas para os mdulos
compare1 e PWM1 / Sada do mdulo CCP1
estendido.
18
RC3/SCK/SCL
E/S
Entrada/sada de uso geral (bit 3 da porta C) /
Entrada/ sada do mdulo serial sncrono SPI /
Entrada/sada do mdulo serial sncrona I2C.
19
RD0/PSP0
E/S
Entrada/sada de uso geral (bit 0 da porta D) /
Entrada/sada de dados para comunicao paralela.
20
RD1/PSP1
E/S
Entrada/sada de uso geral (bit 1 da porta D) /
Entrada/sada de dados para comunicao paralela.
21
RD2/PSP2
E/S
Entrada/sada de uso geral (bit 2 da porta D) /
Entrada/sada de dados para comunicao paralela.
22
RD3/PSP3
E/S
Entrada/sada de uso geral (bit 3 da porta D) /
Entrada/sada de dados para comunicao paralela.
23
RC4/SDI/SDA
E/S
Entrada/sada de uso geral (bit 4 da porta C) / Sada de
dados para o mdulo SPI / Entrada/sada de dados
para o mdulo I2C.
24
RC5/SDO
E/S
Entrada/sada de uso geral (bit 5 da porta C) / Sada de
dados para o mdulo SPI
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 17
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
25
RC6/TX/CK
E/S
Entrada/sada de uso geral (bit 6 da porta C) /
Transmisso para o mdulo assncrono USART
estendido / Clock para o mdulo sncrono USART
estendido.
26
RC7/RX/DT
E/S
Entrada/sada de uso geral (bit 7 da porta C) /
recepo para o mdulo assncrono USART estendido
/ dado para o mdulo sncrono USART estendido.
27
RD4/PSP4
E/S
Entrada/sada de uso geral (bit 4 da porta D) /
Entrada/sada de dados para comunicao paralela.
28
RD5/PSP5/P1B
E/S
Entrada/sada de uso geral (bit 5 da porta D) /
Entrada/sada de dados para comunicao paralela /
Sada do mdulo CCP1 estendido.
29
RD6/PSP6/P1C
E/S
Entrada/sada de uso geral (bit 6 da porta D) /
Entrada/sada de dados para comunicao paralela /
Sada do mdulo CCP1 estendido.
30
RD7/PSP7/P1D
E/S
Entrada/sada de uso geral (bit 7 da porta D) /
Entrada/sada de dados para comunicao paralela /
Sada do mdulo CCP1 estendido.
31
VSS
Terra (Referncia de alimentao).
32
VDD
Alimentao positiva do microcontrolador.
33
RB0/INT0/FLT0/ E/S
Entrada/sada de uso geral (bit 0 da porta B) /
AN12
Interrupo externa 0 / Entrada de falha para o
mdulo PWM estendido. / Entrada do canal analgico
12.
34
RB1/INT1/AN10 E/S
Entrada/sada de uso geral (bit 1 da porta B) /
Interrupo externa 1 / Entrada do canal analgico 10.
35
RB2/INT2/AN8
E/S
Entrada/sada de uso geral (bit 2 da porta B) /
Interrupo externa 2 / Entrada do canal analgico 8.
36
RB3/AN9/CCP2
E/S
Entrada/sada de uso geral (bit 3 da porta B) / Entrada
do canal analgico 9 / Entrada para o mdulo
capture2 e sadas para os mdulos de compare2 e
PWM2 (entrada alternativa).
37
RB4/KBI0/AN11 E/S
Entrada/sada de uso geral (bit 4 da porta B) / Pino de
interrupo na mudana de estado / Entrada do canal
analgico 11.
38
RB5/KBI1/PGM
E/S
Entrada/sada de uso geral (bit 5 da porta B) / Pino de
interrupo na mudana de estado / Pino de ativao
para a programao ICSP em baixa tenso.
39
RB6/KBI2/PGC
E/S
Entrada/sada de uso geral (bit 6 da porta B) / Pino de
interrupo na mudana de estado / Entrada de clock
para a programao ICSP.
40
RB7/KBI3/PGD
E/S
Entrada/sada de uso geral (bit 7 da porta B) / Pino de
interrupo na mudana de estado / Pino de dados
para a programao ICSP.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 18
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Estrutura interna do PIC 18F4420 e 18F4520

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Oscilador
No PIC18F4520, podemos encontrar 10 tipos de osciladores que podem ser
configurados atravs dos bits de configurao. Estes bits de configurao conhecido
como fuses.
Os tipos de osciladores so:
LP Cristal de baixa freqncia;
XT Cristal com freqncias intermedirias;
HS Cristal de alta freqncia;
HSPLL Cristal de alta freqncia com PLL;
RC Oscilador RC externo com sada de clock dividido por 4 no pino RA6;
RCIO Oscilador RC externo com o pino RA6 como pino de entrada/sada;
INTIO1 Oscilador interno com sada de clock no pino RA6 e pino RA7 como
entrada/sada;
INTIO2 Oscilador interno com os pinos RA6 e RA7 como pinos de
entrada/sada;
EC Oscilador externo com entrada de clock no pino RA7 e sada dividida por 4
no pino RA6;
ECIO Oscilador externo com entrada de clock no pino RA7 e com RA6 como
entrada/sada.
Nos tipos LP, XT e HS so utilizados oscilador a cristal e a freqncia destes podem ser
verificadas nos datasheets dos microcontroladores.
No tipo HSPLL, o sinal de clock utilizado como sincronismo para um circuito PLL
(Phase Locked Loop) que gera na sada deste circuito um sinal de 4 vezes a freqncia
do sinal de referncia. Neste caso, possvel, por exemplo que o microcontrolador
opere em 40MHz utilizando um cristal de 10MHz.
Nos tipos RC e RCIO so utilizados um circuito RC externo, sendo que para o RC,
gerado um sinal no pino RA6 com uma freqncia dividida por 4 da freqncia
originada pela fonte de clock.
Nos tipos INTIO1 e INTIO2, o sinal de clock interno e gerado partir de um oscilador
RC interno. O usurio pode escolher clocks de 31,25KHz, 125KHz, 250KHz, 500KHz,
1MHz, 2MHz, 4 MHz e 8MHz. Os sinal de 4MHz e 8MHz podem ser aplicados ao PLL e
assim, obter freqncias de 16MHz e 32MHZ, respectivamente. No tipo INTIO1, o sinal
de clock pode ser obtido no pino RA6.
Nos tipos EC e ECIO, o microcontrolador receber um sinal de clock gerado por um
oscilador externo no pino RA7 e no tipo EC, este sinal dividido por 4 poder ser obtido
no pino RA6.
Os registradores de controle responsveis pela seleo e controle dos osciladores, so
OSCTUNE e OSCCON.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

RESET
O PIC18F4520, assim como a linha 18F, possui diversas fontes de reset, conforme
abaixo:
POR (Power-on-reset): Quando da deteco da
microcontrolador;
Nvel 0 no pino MCLR;
Nvel 0 no MCLR com o microcontrolador em modo sleep;
Estouro do Watchdog;
BOR (Brown-out-reset): Queda de tenso de alimentao;
Instruo RESET;
Estouro da pilha.

alimentao

do

Memria
Os microcontroladores PIC tm basicamente 3 tipos de memrias , sendo estas
memria de programa, memria de dados e memria EEPROM.
Na memria de programa so armazenadas as instrues (cdigo do programa). Essa
memria do tipo no voltil, ou seja, seus dados no sero perdidos se a
alimentao do microcontrolador for retirada.
Abaixo segue o mapa da memria de programa para os PICs 18F2420/2520/4420/4520.

A memria de dados responsvel pelos dados dos registradores de funes especiais


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
(Special Function Registers SFR) e tambm pelos registradores de propsito geral
(General Purpose Registers GPR). Esta memria do tipo voltil, ou seja, os seus
valores armazenados sero perdidos na retirada de alimentao do microcontrolador.
Obs.: Os SFRs contm a configurao, controle e status dos perifricos e portas de
entrada e sada e os GPRs conter os dados do usurio.
Logo abaixo, temos o mapa de memria de dados para os PICs 18F2520 e 18F4520.

Abaixo, segue o mapa dos registradores de funes especiais (SFRs).


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

A memria EEPROM que tambm do tipo no voltil, permite o armazenamento e


manipulao de dados.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Para o primeiro projeto, vamos utilizar o circuito abaixo, onde faremos os leds
conectados PORTA D piscarem em intervalo de 500ms.
Circuito:

Antes de inicializarmos a escrita do cdigo fonte, precisamos entender alguns detalhes


relacionados ao ciclo de mquina e as portas de entrada e sada, assim como a
configurao dos bits de controle, os chamados fuses.

Ciclo de Mquina
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 24
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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:
Suponde que contamos com um cristal de 20MHz como fonte de clock para o
microcontrolador, ento teremos:
Frequncia de mquina:

Ciclo de mquina:

Portas de I/O
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 25
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
No PIC18F4520 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 LAT, responsvel por armazenar o valor do ltimo comando de escrita.

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.
Podemos ler ou escrever no registrador TRIS, conforme a sintaxe abaixo:
TRISx = valor;
Valor = TRISx;
Onde:
x: nome da porta (A, B, C, D ou E)
valor: valor de 8 bits.
Exemplo:
Vamos configurar a porta D da seguinte forma: Os pinos 0, 2 e 5 desta porta devero
ser configurados como sada e o restante como entrada.
A sintaxe ser conforme abaixo:
TRISD = 0b11011010;

Veja na prxima figura a representao dos bits deste registrador.


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

possvel tambm acessar apenas um bit do registrador. Por exemplo, queremos


configurar como entrada ou sada somente um pino de uma determinada porta, ento
podemos utilizar as sintaxes conforme abaixo:
TRISDbits.TRISD3 = 1; //Configura como entrada somente o pino 3 da porta D
TRISDbits.TRSID5 = 0; //Configura como sada somente o pino 5 da porta D
TRISBbits.TRISB0 = 1; //Configura como entrada somente o pino 0 da porta B
TRISCbits.TRISC4 = 0; //Configura como sada somente o 4 da porta C

Registrador PORT
O registrador PORT, assim como informado antes, o responsvel por informar o
estado dos pinos de uma porta. Este registrador tambm de 8 bits e atravs dele
possvel escrever ou ler os pinos de uma determinada porta.
Sintaxe:
PORTx = valor;
valor = PORTx;
Onde:
x: Nome da porta (A, B, C, D ou E);
valor: valor de 8 bits;
Exemplo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 27
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Configurando todos os pinos da porta D como sada (TRISD = 0b00000000) e fazendo:
PORTD = 0b01001010;
possvel verificarmos os nveis de tenso na porta D conforme mostra a figura abaixo:

Assim como no registrador TRIS, possvel selecionar apenas um bit do registrador


PORT.
Exemplo:
PORTBbits.RD4 = 1; //Somente o pino 4 da porta B ter nvel de tenso = VCC.
PORTEbits.RE2 = 0; //Somente o pino 0 da porta E ter nvel de tenso = 0V.

Configurao do PIC18F4520
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 28
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Antes de iniciar na programao do cdigo do programa, preciso fazer a configurao
do microcontrolador para que ele funcione de acordo com a necessidade do usurio.
A configurao dos bits de controle para o PIC 18F4520 pode ser feita diretamente no
MPLAB (Configure -> Configure Bits) ou atravs da diretiva #pragma config.
Atravs dos bits de controle possvel configurar o tipo de oscilador, o watchdog,
proteo de cdigo, master clear, etc.
Cada microcontrolador tem seus bits de controle especficos e estes podem ser vistos
no help do MPLAB em Help -> Topics -> PIC18 Config Settings.

Ao abrir o help de configurao, escolha o microcontrolador que deseja configurar na


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
lista configuration settings esquerda.

Abaixo pode-se verificar a lista de configuraes para o PIC 18F4520.

OSC

LP
XT
HS
RC
EC
ECIO6
HSPLL
RCIO6
INTIO67
INTIO7

FCMEN

OFF
ON

Oscilador
Oscilador LP
Oscilador XT
Oscilador HS
Oscilador RC externo, pino RA6 configurado como CLK0.
Clock externo
Clock externo, pino RA6 configurado como I/O
Oscilador HS com PLL habilitado
Oscilador RC externo, pino RA6 configurado como I/O
Oscilador interno, pinos RA6 e RA7 configurados como
I/O.
Oscilador interno, pino RA6 configurado como CLK0 e
pino RA7 configurado como I/O.

Monitoramento do sinal de clock


Desabilita o monitoramento do sinal de clock
Habilita o monitoramento do sinal de clock

Mudana do oscilador interno/externo


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
IESO
OFF
Desabilita a mudana do oscilador interno/externo
ON
Habilita a mudana do oscilador interno/externo

PWRT

BOREN

ON
OFF

OFF
ON
NOSLP
SBORDIS

BORV

WDT

WDTPS

0
1
2
3

OFF
ON

Power-up Timer (PWRT)


Habilita o Power-up Timer
Desabilita o Power-up Timer
Brown-out Reset (BOR)
Brown-out desabilitado em hardware e software
Brown-out habilitado e controlado por software
Brown-out habilitado em hardware e dasabilitado em
modo sleep.
Brown-out habilitado somente em hardware
Tenso do Brown-out Reset (BORV)
Aproximadamente 4,59V
Aproximadamente 4,33V
Aproximadamente 2,79V
Aproximadamente 2,05V
Watchdog Timer
Watchdog desabilitado
Watchdog habilitado

Seleo do postcaler para o Watchdog Timer


1
1:1
2
1:2
4
1:4
8
1:8
16
1:16
32
1:32
64
1:64
128
1:128
256
1:256
512
1:512
1024
1:1024
2048
1:2048
4096
1:4096
8192
1:8192
16384
1:16384
32768
1:32768
Master Clear Reset (MCLR)

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
MCLRE
OFF
Desabilita o MCLR e habilita o pino RE3 como entrada
ON
Habilita o MCLR e desabilita o pino RE3 como entrada

LPT1OSC

OFF
ON

PBADEN

OFF
ON

CCP2MX

OFF
ON

STVREN

OFF
ON

LVP

OFF
ON

XINST

OFF
ON

DEBUG

ON
OFF

Oscilador Low-Power do TIMER1


Timer1 configurado para operao em alto potncia
Timer1 configurado para operao em baixa potncia
Conversores A/D da porta B
Configura os pinos RB0, RB1, RB2, RB3 e RB4 como pinos
de entrada/sada de uso geral
Configura os pinos RB0, RB1, RB2, RB3 e RB4 como canais
de entrada analgico AN12, AN10, AN8, AN9 e AN11,
respectivamente
Multiplexao do pino do mdulo CCP2
Define o pino RB3 como pino de entrada/sada a ser
utilizado pelo mdulo CCP2
Define o pino RC1 como pino de entrada/sada a ser
utilizado pelo mdulo CCP2
Reset por Stack Full/Underflow
Desabilita o Reset por Stack Full/Underflow
Habilita o Reset por Stack Full/Underflow
Programao por baixa tenso (ICSP)
Desabilita a programao por baixa tenso
Habilita a programao por baixa tenso
Instrues estendidas
Set de instrues estendido e modo de endereamento
indexado desabilitado
Set de instrues estendido e modo de endereamento
indexado habilitado
In-Circuit debugger
Debugger habilitado, pinos RB6 e RB7 dedicados ao InCircuit debugger
Debugger desabilitado, pinos RB6 e RB7 configurados
como pinos de entrada/sada

Proteo do cdigo no bloco 0


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
CP0
ON
Cdigo no bloco 0 (000800-001FFFh) protegido
OFF
Cdigo no bloco 0 no protegido

CP1

ON
OFF

Proteo do cdigo no bloco 1


Cdigo no bloco 1 (002000-003FFFh) protegido
Cdigo no bloco 1 no protegido

CP2

ON
OFF

Proteo do cdigo no bloco 2


Cdigo no bloco 2 (004000-005FFFh) protegido
Cdigo no bloco 2 no protegido

ON
OFF

Proteo do cdigo no bloco 3


Cdigo no bloco 3 (006000-007FFFh) protegido
Cdigo no bloco 3 no protegido

CP3

CPB

CDP

WRT0

ON
OFF

ON
OFF

ON
OFF

WRT1

ON
OFF

WRT2

ON
OFF

WRT3

ON
OFF

Proteo do cdigo no bloco boot


Cdigo no bloco boot (000000-007FFFh) protegido
Cdigo no bloco 0 no protegido
Proteo do cdigo na EEPROM
Cdigo na EEPROM protegido
Cdigo na EEPROM no protegido
Proteo de escrita no bloco 0
Proteo de escrita no bloco 0 (000800-001FFFh)
habilitada
Proteo de escrita no bloco 0 no habilitada
Proteo de escrita no bloco 1
Proteo de escrita no bloco 1 (002000-003FFFh)
habilitada
Proteo de escrita no bloco 1 no habilitada
Proteo de escrita no bloco 2
Proteo de escrita no bloco 2 (004000-005FFFh)
habilitada
Proteo de escrita no bloco 2 no habilitada
Proteo de escrita no bloco 3
Proteo de escrita no bloco 3 (006000-007FFFh)
habilitada
Proteo de escrita no bloco 3 no habilitada
Proteo de escrita no bloco boot

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
WRTB
ON
Proteo de escrita no bloco boot (000000-007FFFh)
habilitada
OFF
Proteo de escrita no bloco 0 no habilitada

WRTC

WRTD

EBTR0

Proteo de escrita no registrador de configurao


ON
Proteo de escrita no registrador de configurao
(300000-30000FFh) habilitada
OFF
Proteo de escrita no registrador de configurao no
habilitada

ON
OFF

ON
OFF

EBRT1

ON
OFF

EBRT2

ON
OFF

EBRT3

ON
OFF

EBRTB

ON
OFF

Proteo de escrita na EEPROM


Proteo de escrita na EEPROM habilitada
Proteo de escrita na EEPROM no habilitada
Proteo de leitura da tabela no bloco 0
Bloco 0 (000800-001FFFh) protegido contra comando de
leitura da tabela executado por outro bloco
Proteo no habilitada
Proteo de leitura da tabela no bloco 1
Bloco 1 (002000-003FFFh) protegido contra comando de
leitura da tabela executado por outro bloco
Proteo no habilitada
Proteo de leitura da tabela no bloco 2
Bloco 2 (004000-005FFFh) protegido contra comando de
leitura da tabela executado por outro bloco
Proteo no habilitada
Proteo de leitura da tabela no bloco 3
Bloco 3 (006000-007FFFh) protegido contra comando de
leitura da tabela executado por outro bloco
Proteo no habilitada
Proteo de leitura da tabela no bloco boot
Bloco boot (000000-007FFFh) protegido contra comando
de leitura da tabela executado por outro bloco
Proteo no habilitada

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PWRT = ON
#pragma config BOREN = ON
#pragma config BORV = 1
#pragma config PBADEN = OFF
#pragma config LVP = OFF

//Oscilador de 8MHZ utilizado nos projetos


//Desabilita o Watchdog Timer
//Habilita Power-up Timer
//Habilita Brown-out reset
//Tenso de Brown-out de 4,33V
//RB0, RB1, RB2, RB3 e RB4 como entrada/sada
//Desabilita programao por baixa tenso

Power-up Timer (PWRT)


O Power-up Timer faz com que o microcontrolador comece a operar em 72ms aps a
sua alimentao, garantindo, assim a estabilizao na fonte de aliementao.
Brown-out Reset (BOR) BOREN
Quando habilitado, o BOR fora um reset no microcontrolador caso a tenso de
alimentao caia para um valor menor do que o especificado e, BORV (Brow-out resete
voltage Tenso de Brow-out) em um tempo maior de 100us.

BORV
0
1
2
3

Tenso(V)
4,59
4,33
2,79
2,11

Criando o projeto no MPLAB


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Antes de escrevermos o cdigo do programa, precisamos criar um projeto no MPLAB
conforme segue abaixo:
Com o programa MPLAB aberto, selecione Project no menu principal e escolha a
opo Project Wizard.

Ser mostrada uma tela de boas vindas, clique em Avanar.

Neste primeiro passo, escolheremos o microcontrolador a ser utilizado, no caso o


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
PIC18F4520. Aps a seleo, clique em Anvanar.

No segundo passo, selecionaremos o conjunto de ferramentas de compilao. Ento,


escolheremos a opo Microchip C18 Toosuite. Logo em seguida, clique em Avanar.

No terceiro passo, informaremos o diretrio onde ser armazenado o projeto que


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
estamos criando, portanto, nesta tela, clique em Browse.

Em seguida, escolha o diretrio onde pretende armazenar o projeto, d um nome a ele


(no precisa colocar a extenso) e clique em Salvar.

Logo em seguida, clique em Avanar.


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

No prximo passo, nos solicitado a incluso de algum arquivo ao nosso projeto,


porm como estamos comeando a criao de um projeto, no temos nenhum arquivo
a ser associado ao projeto. Clique em Avanar.

Bem, ento agora temos o nosso projeto criado e esta tela mostra o resumo do que
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 39
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
acabamos de criar. Basta clicar em Concluir.

Agora devemos escrever o cdigo fonte, salv-lo e acrescentar ao projeto. Para isso,
clique em File no menu principal e escolha a opo New.

Ser mostrada esta tela que , justamente, onde escreveremos o cdigo do programa
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 40
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
fonte.

Escreva o cdigo abaixo:


#include <p18F4520.h>
#include<delays.h>

//Inclui a biblioteca de delays

// Frequencia do oscilador = 8MHz


// Ciclo de mquina = 1/(Fosc/4) = 0,5us
#pragma config OSC = HS
//Configura o oscilador a cristal
#pragma config WDT = OFF
//Desabilita o Watchdog Timer (WDT).
#pragma config PWRT = ON
//Habilita o Power-up Timer (PWRT).
#pragma config BOREN = ON
//Habilita Brown-out reset
#pragma config BORV = 1
//Tenso do BOR 4,33V.
#pragma config PBADEN = OFF
//RB0,1,2,3 e 4 configurado como I/O digital.
#pragma config LVP = OFF
//Desabilita o Low Voltage Program.
void main()
{
TRISD = 0b00000000;

//Direciona todos os bits da porta D como sada

while(1)
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 41
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
{
PORTD = 0b11111111;
/*Faz todos os pinos da porta D igual a 1,
acendendo os leds*/
Delay10KTCYx(100);
//Gera um delay de 500ms
PORTD = 0b00000000;
/*Faz todos os pinos da porta D igual a 0,
apagando os leds*/
Delay10KTCYx(100);
//Gera um delay de 500ms
}
}

Salve o cdigo e, agora, no devemos esquecer da extenso *.c. Veja o exemplo


abaixo, onde o arquivo ser salvo com o nome pisca_led.c.

Aps salvar o cdigo fonte, clique com o boto direito do mouse em Source Files que
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 42
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
est na janela do projeto. Logo em seguida clique em Add Files.

Procure o arquivo que acabou de salvar e em seguida clique em Abrir.

A figura abaixo mostra o arquivo pisca_led.c adicionada ao projeto.


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Antes de compilarmos o projeto, necessrio informar o caminho em que se encontra


os arquivos das bibliotecas para que o compilador funcione adequadamente.
Para isso, no menu principal, clique em Project e escolha a opo Build options...,
logo em seguida clique em Project.

Na janela que abrir, na aba Directories, escolha Library Search Path, conforme
abaixo e, em seguida, clique no boto New.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Agora clique no boto com os trs pontinhos que acabou de abrir.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Procure a pasta lib que est em C:\MCC18 e clique em OK.

Clique em Aplicar e logo em seguida em OK.


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Agora, basta compilarmos o projeto. Clique no menu principal em Project e escolha a
opo Make ou pressione a tecla F10 para compilar.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Aqui est o resultado da compilao. Dever ser mostrada a mensagem BUILD
SUCEEDED.

OBS.: Se a mensagem mostrada for BUILD ERROR, ento reveja os passos para criao
do projeto e o cdigo que voc escreveu.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Entendendo o cdigo.
Na primeira linha do programa, utilizamos a diretiva #include. Esta diretiva faz a
incluso de um arquivo ao projeto. Neste caso, estamos incluindo a biblioteca do PIC
18F4520 ao projeto. O arquivo p18F4520.h chamado de header (cabealho) e nele
temos funes e estruturas para o tratamento dos registradores.
#include <p18F4520.h>
Em seguida fazemos a configurao dos bits de controle do microcontrolador. Esta
configurao ser a forma como o microcontrolador trabalhar.
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config PWRT = ON
#pragma config BOREN = ON
#pragma config BORV = 1
#pragma config PBADEN = OFF
#pragma config LVP = OFF

//Configura o oscilador a cristal


//Desabilita o Watchdog Timer (WDT).
//Habilita o Power-up Timer (PWRT).
//Habilita Brown-out reset
//Tenso do BOR 4,33V.
//RB0,1,2,3 e 4 configurado como I/O digital.
//Desabilita o Low Voltage Program.

Temos ento:
Conectado ao microcontrolador, temos um cristal de 8MHz, ento configuramos o
oscilador como HS (oscilador cristal de alta velocidade).
Desabilitamos o temporizador watchdog (WDT = OFF);
Habilitamos a funo que informa ao PIC que ele deve comear a rodar o programa
aps 72ms de sua energizao (PWRT = ON).
Habilitamos tambm o Brown-out reset (BOREN = ON) e tambm definimos a tenso
de Brown-out (BORV=1). Assim, se a tenso de alimentao para o PIC for menor do
que mais ou menos 4,3V, o microcontrolador ser resetado.
Em seguia informamos que os pinos RB0, RB1, RB2 e RB3 devero ser configurados
como portas de entrada e sada.
Finalizamos desabilitando a funo de programao por baixa tenso.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Aps a configurao dos bits de controle, temos a funo principal. Esta funo deve
sempre existir e, atravs dela, faremos as configuraes dos registradores e chamadas
para outras funes.
void main()
{
TRISD = 0b00000000;
while(1)
{
PORTD = 0b11111111;
Delay10KTCYx(100);
PORTD = 0b00000000;
Delay10KTCYx(100);
}

//Direciona todos os bits da porta D como sada

/*Faz todos os pinos da porta D igual a 1,


acendendo os leds*/
//Gera um delay de 500ms
/*Faz todos os pinos da porta D igual a 0,
apagando os leds*/
//Gera um delay de 500ms

A primeira instruo desta funo informa faz com que todos os bits do registrador
TRISD sejam levados a 0. Assim, estamos configurando toda a PORTA D como sada.
TRISD = 0b00000000;

//Direciona todos os bits da porta D como sada

Em seguida, utilizamos a declarao de controle while e utilizamos com expresso o


valor 1. Essa declarao, como vista antes, faz com que sejam executados os comandos
dentro de suas chaves, enquanto a expresso for verdadeira. Neste caso, a expresso
sendo igual a 1, ela ser sempre verdadeira, ento os comandos dentro das chaves
sero executados infinitamente. o que chamamos de loop infinito ou ainda loop
principal.
Este loop tambm deve sempre existir, pois a falta deste faz com que o contador de
programa v se incrementando e ao chegar na posio mxima de memria do
microcontrolador, este ser resetado.
while(1)
{
PORTD = 0b11111111;
Delay10KTCYx(100);
PORTD = 0b00000000;
Delay10KTCYx(100);
}

/*Faz todos os pinos da porta D igual a 1,


acendendo os leds*/
//Gera um delay de 500ms
/*Faz todos os pinos da porta D igual a 0,
apagando os leds*/
//Gera um delay de 500ms

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Funes de atraso (Delay)
As funes de atraso (delay) geram um atraso no processamento do programa e este
atraso baseado no ciclo de mquina.
Para utilizar as funes de atraso, necessrio a incluso do arquivo delays.h atravs
da diretiva #include
Temos 5 opes de funo de atraso, conforme seguem:
Delay1TCY() Gera um atraso de 1 ciclo de mquina;
Delay10TCYx(valor) Gera um atraso de 10 vezes o contedo do argumento valor.
Este argumento deve ter o tamanho mximo de 8 bits (0-255). O valor 0 far com que
o atraso gerado seja de 256 x 10 = 2560.
Ex.:
Delay10TCYx(152); //gera atraso de 1520 ciclos de mquina
Delay10TCYx(0);
//gera atraso de 2560 ciclos de mquina
Delay100TCYx(valor) Gera um atraso de 100 vezes o contedo do argumento valor.
Este argumento deve ter o tamanho mximo de 8 bits (0-255). O valor 0 far com que
o atraso gerado seja de 256 x 100 = 25600.
Ex.:
Delay100TCYx(123); //gera atraso de 12300 ciclos de mquina
Delay100TCYx(0);
//gera atraso de 25600 ciclos de mquina
Delay1KTCYx(valor) - Gera um atraso de 1000 vezes o contedo do argumento valor.
Este argumento deve ter o tamanho mximo de 8 bits (0-255). O valor 0 far com que
o atraso gerado seja de 256 x 1000 = 256000.
Ex.:
Delay1KTCYx(56);
//gera atraso de 56000 ciclos de mquina
Delay1KTCYx(0);
//gera atraso de 256000 ciclos de mquina
Delay10KTCYx(valor) - Gera um atraso de 10000 vezes o contedo do argumento
valor. Este argumento deve ter o tamanho mximo de 8 bits (0-255). O valor 0 far
com que o atraso gerado seja de 256 x 10000 = 2560000.
Ex.:
Delay10KTCYx(64); //gera atraso de 640000 ciclos de mquina
Delay10KTCYx(0);
//gera atraso de 2560000 ciclos de mquina

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Para gerar um atraso de 100ms e supondo a utilizao de um cristal de 8MHZ:
Ciclo de mquina = 1 / (Fosc/4) = 1 / (8M/4) = 0,5us
Conclui-se que o nmero de ciclos de mquina necessrios para um atraso de 100ms:
Ciclos de mquina100ms = 100ms / 0,5us = 200000;
Este valor, 200000, mltiplo de 1000, portanto utilizaremos a funo:
Delay1KTCYx(200);

//gera atraso de 100ms com cristal de 8MHz

Atraso de 500ms com um cristal de 8MHz:


Ciclos de mquina500ms = 500ms / 0,5us = 1000000
O valor 1000000 mltiplo de 10000, assim, a funo ser Delay:
Delay10KTCYx(100); //gera atraso de 500ms com cristal de 8MHz

#include <delays.h>
void main()
{
TRISD = 0b00000000;
while(1)
{
PORTD = 0b11111111;
Delay10KTCYx(100);
PORTD = 0b00000000;
Delay10KTCYx(100);
}

//Direciona todos os bits da porta D como sada

/*Faz todos os pinos da porta D igual a 1,


acendendo os leds*/
//Gera um delay de 500ms
/*Faz todos os pinos da porta D igual a 0,
apagando os leds*/
//Gera um delay de 500ms

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Comentrios.
Note que podemos escrever o que acontece em cada linha do programa colocando-se
duas barras (//) antes do comentrio. O contedo que estiver aps as barras, no ser
interpretado pelo compilador, ou seja, no ser compilado.
Para escrevermos um comentrio mais longo com mais de uma linha podemos
inicializar com o smbolo /* e aps finalizar o comentrio, colocamos o smbolo */
Ex.:
//Este um comentrio de uma linha
/*Este comentrio tambm pode ter mais de uma linha e com os smbolos do
incio, podemos escrever o contedo e finalizar com os smbolos */

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Gravando o microcontrolador
Instalao do WinPic800
-Instale o programa WINPIC800 que est na pasta \Programas\WinPic.
Abrindo o arquivo WinPic800_V3_62.exe, ser mostrada o seguinte quadro:

Escolha English (English) e clique em Next, depois configuraremos a lingua portuguesa,


aparecer ento:

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Escolha o diretrio para instalao e clique em Start. A seguinte tela ser apresentada:

Se quiser criar um atalho na rea de trabalho, deixe marcado como est e clique em
Ok. A tela seguinte aparecer:

Clique em Next para a prxima tela:

Pronto, basta clicar em Ok e o programa estar instalado.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Abra o programa e vamos configurar a linguagem.
Clique em Language e escolha Portugues_BR

Configurao para o gravador utilizado


-Clique em Opes e depois escolha hardware, ser apresentada a seguinte tela:

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
-Escolha o hardware JDM Programmer em Selecionar Hardware e clique no boto
marcado em vermelho conforme a figura abaixo:

A seguinte tela ser mostrada:

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
-Desabilite a opo Bloquear configuraes
-Habilite a opo da coluna Inv em Vpp, conforme abaixo:

-Habilite novamente a opo Bloquear configuraes e clique em Salvar.

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Conexo e gravao
-Se possuir o kit de desenvolvimento, conecte o cabo serial que acompanha o kit na
placa e porta serial do PC.
-Ligue a fonte de alimentao.
-Pressionar a chave Grav/Run (deix-la baixa) na Placa;

-Clique sobre o boto Detectar PIC e, automaticamente o microcontrolador dever ser


detectado.
Caso isso no ocorra, verificar as configuraes para o gravador utilizado
Identificao dos botes:

Clicando no Boto Detectar PIC e se tudo estiver corretamente conectado, a tela


seguinte ser mostrada:

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Outros botes que vamos utilizar so:

Gravando o microcontrolador
Abrindo o Arquivo
-Clique em Arquivo, logo aps em Abrir e procure a pasta onde se encontram os
arquivos do projeto que acabamos de criar e abra o arquivo PISCA_LED.hex.

-Agora clique em Programar Tudo, dever aparecer a janela abaixo:


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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________

Pronto, o microcontrolador est gravado, vamos verificar o funcionamento e para isso


basta seguir a sequncia:
-Pressione novamente a chave Grav/Run (deix-la alta);
-Desconecte o cabo.
Ao desconectar o cabo o programa gravado no microcontrolador dever rodar
mostrando o funcionamento.
Se sua aplicao utilizar a porta serial, basta conectar o cabo novamente.
Obs.: A verso do programa WinPic800 a mais atual e ela s funciona em
computadores, cuja porta serial seja a COM1.
Obs.2: utilizando a placa ACEPIC 40, ligue a chave 1 (LED) do DIP SWITCH SW1

Acionamento de Botes
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 62
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Vimos no projeto anterior que para acionar uma porta, necessrio configurar o
registrador TRISx para direcionar a porta como entrada ou sada.
Fizemos, portanto, o acionamento dos LEDs conectados porta D configurando o
TRISD com nvel 0 em todos os seus bits e agora neste prximo projeto precisamos
acionar um boto e, sendo assim, necessrio que a porta onde est conectado o
boto seja configurada como entrada.
Neste caso, o registrador TRISx dever ser configurado com nvel 1, fazendo assim com
que a porta correspondente seja tambm configurada como entrada.
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.
Veja no circuito apresentado que o pino RB0 est inicialmente em 1 e ao pressionarmos
o boto B0, este pino dever ser levado para o nvel 0.

Circuito:

Cdigo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 63
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
#include <p18F4520.h>
// Frequencia do oscilador = 8MHz
// Ciclo de mquina = 1/(Fosc/4) = 0,5us
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config PWRT = ON
#pragma config BOREN = ON
#pragma config BORV = 1
#pragma config PBADEN = OFF
#pragma config LVP = OFF
void main()
{
TRISBbits.TRISB0 = 1;
TRISDbits.TRISD0 = 0;
while(1)
{
if (PORTBbits.RB0 == 0)
PORTDbits.RD0 = 1;
else
PORTDbits.RD0 = 0;
}
}

//Configura o oscilador a cristal


//Desabilita o Watchdog Timer (WDT).
//Habilita o Power-up Timer (PWRT).
//Habilita Brown-out reset
//Tenso do BOR 4,33V.
//RB0,1,2,3 e 4 configurado como I/O digital.
//Desabilita o Low Voltage Program.

//Direciona somente o pino 0 da porta B como entrada


//Direciona somente o pino 0 da porta D como sada

//Se o boto for pressionado, se B0 for igual a 0


//Coloca em 1 o bit 0 da porta D (acende o led)
//seno
//Coloca em 0 o bit 0 da porta D (apaga o led)

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
Podemos atibuir um outro nome a uma constante ou a um registrador atravs da
diretiva define. Esta diretiva interessante ser utilizada quando o programa contm
muitas linhas de comando, assim facilita a identificao de um pino de controle ou um
registrador de acordo com o definido.
Ex.:
#define LED1 PORTBbits.RB0 //Define o nome LED1 ao bit 0 da porta B
#define VALOR_MAX 25

//Define um valor constante varivel VALOR_MAX

Aplicando a diretiva ao programa anterior:


#include <p18F4520.h>
// Frequencia do oscilador = 8MHz
// Ciclo de mquina = 1/(Fosc/4) = 0,5us
#pragma config OSC = HS
//Configura o oscilador a cristal
#pragma config WDT = OFF
//Desabilita o Watchdog Timer (WDT).
#pragma config PWRT = ON
//Habilita o Power-up Timer (PWRT).
#pragma config BOREN = ON
//Habilita Brown-out reset
#pragma config BORV = 1
//Tenso do BOR 4,33V.
#pragma config PBADEN = OFF
//RB0,1,2,3 e 4 configurado como I/O digital.
#pragma config LVP = OFF
//Desabilita o Low Voltage Program.
#define DIR_BOT0 TRISBbits.TRISB0 //define o nome DIR_BOT0 para o bit 0 do TRISB
#define DIR_LED1 TRISDbits.TRISD0 //define o nome DIR_LED1 para o bit 0 do TRISD
#define BOT0 PORTBbits.RB0
#define LED1 PORTDbits.RD0
void main()
{
DIR_BOT0 = 1;
DIR_LED1 = 0;

//define o nome BOT0 para o bit 0 do PORTB


//define o nome LED1 para o bit 0 do PORTD

//Direciona somente o pino 0 da porta B como entrada


//Direciona somente o pino 0 da porta D como sada

while(1)
{
if (BOT0 == 0)
LED1 = 1;
Else
LED1 = 0;
}

//Se o boto for pressionado, se B0 for igual a 0


//Coloca em 1 o bit 0 da porta D (acende o led)
//seno
//Coloca em 0 o bit 0 da porta D (apaga o led)

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

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
As funes em linguagem C so muito parecidas com as sub-rotinas da linguagem
assembly. O seu uso permite executar uma sequncia de comandos sempre que
necessitarmos, sem a necessidade de repet-los.
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.
Exemplo:
short soma (short a, short b)
{
return a + b;
}
void main ()
{
short c;
c = soma (2,3);
while(1);
}
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.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 66
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
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 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 que ela seja definida. Neste caso, o compilador
gera um erro, veja o exemplo abaixo:

void main ()
{
short c;
c = soma (2,3);
while(1);
}
short soma (short a, short 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.
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 os mesmos tipos e parmetros
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA.
P g i n a | 67
www.acepic.com.br

Microcontroladores PIC 18F4520 Linguagem C


Compilador C18
______________________________________________________________________
da funo seguido do ponto e vrgula (;) e, normalmente, so declarados logo no incio
do programa.
Exemplo:
short soma(short a, short b);
void main ()
{
short c;
c = soma (2,3);
while(1);
}
short soma (short a, short b)
{
return a + b;
}

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

Вам также может понравиться