Escolar Documentos
Profissional Documentos
Cultura Documentos
Fonte: WIKIPEDIA
O MPLAB C18 é um compilador em linguagem C que produz códigos que podem ser
executados pela família 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
declarações, tipo “if(x==y)” e “temp=0x27” em código de máquina para os
microcontroladores PIC18XXXX.
O compilador pode otimizar códigos usando rotinas que são empregadas em uma
função para que seja utilizada por outras funções em C. O C18 pode rearranjar códigos,
eliminar códigos que nunca serão executados, compartilhar fragmentos de códigos
entre múltiplas funções e pode identificar dados e registros usados sem eficiência,
otimizando seu acesso.
O MPLAB C18 utiliza códigos escritos na notação padrão ANSI C e gera arquivos HEXA
(.hex) para que possam ser programados nos microcontroladors. A interface MPLAB é
utilizada para escrever, compilar e depurar os códigos escritos em C.
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Introdução à Linguagem C
Palavras Reservadas
Identificadores
Os identificadores são nomes dados às funções, variáveis, constantes, etc e não devem
conter caracteres acentuados, espaços, ‘ç’ e devem sempre começar com uma letra ou
o símbolo ’_’ que é tratado como letra.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |2
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Tipos de dados
Os tipos de dados suportados pelo compilador C18 são vistos na tabela abaixo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |3
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Variáveis
Declaração de Variáveis
Variáveis Globais
São declaradas no início de nosso código 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. Página |4
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Variáveis Locais
São declaradas dentro de uma função e somente existe durante a execução da função.
Elas são descartadas depois de executada a função:
Exemplo:
void main()
{
int conta;
conta = conta++;
while(1);
}
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |5
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Operadores
Operadores de Atribuição
Aritméticos:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |6
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Relacionais:
São utilizados para comparação entre argumentos e retornam uma resposta verdadeira
ou falsa. Como em linguagem C não existe uma variável 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 Descrição
& E (AND)
| OU (OR)
^ OU EXCLUSIVO (XOR)
~ Complemento (NOT)
>> Deslocamento à direita
<< Deslocamento à esquerda
Operador Descrição
&& Comparação lógica E (AND)
|| Comparação lógica OU (OR)
! Comparação lógica Complemento (NOT)
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |7
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Declarações de controle:
Comando if (se):
if (exp) comando;
if (exp)
{
comando1;
comando2;
}
Para o caso acima, a mesma explicação anterior se encaixa, sendo que agora, se a
condição da expressão for verdadeira, serão executados comando1 e comando2.
Exemplos:
if (conta>50) conta = 0;
Neste caso, se a variável conta atingir um valor maior que 50, o comando conta = 0 será
executado e a variável conta será zerada.
if (conta>50)
{
conta = 0;
conta1++;
}
Neste caso, se a variável conta atingir um valor maior que 50, os comandos
conta = 0 e conta1++ serão executados e assim a variável conta será zerada e a variável
conta1 será incrementada em 1, respectivamente.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |8
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Comando if-else:
Neste caso, a condição if é utilizada da mesma forma anterior, sendo que agora, se a
condição da expressão for falsa a condição else será executada, ou seja, neste caso
existe a possibilidade de escolha de uma entre duas opções. Sua forma é:
if (exp) comando1;
else comando2;
Caso a expressão seja verdadeira, o comando1 será executado, caso seja falsa, o
comando2 será executado.
Exemplo:
if (conta>0)
{
conta = 0;
conta1++;
}
else conta++;
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. Página |9
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Comando SWITCH-CASE:
Quando existem muitos valores para testar de uma só variável, o comando IF pode ficar
meio confuso ou sem muita eficiência, para isso podemos utilizar o SWITCH-CASE.
Segue sua forma:
switch(variável)
{
case valor1: comando1;
....
break;
case valor2: comando2;
....
break;
....
....
default: comandoN;
....
....
}
Neste caso, a variável 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 variável conta for igual a 10, a variável conta1 será
incrementado, se o valor da variável conta for igual a 15, o valor da variável conta2
será incrementado, caso o valor de conta seja igual a 20, tanto os valores de conta1
quanto de conta2 serão 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
______________________________________________________________________
variável conta, o valor de conta3 será incrementado.
Note que após cada comando, temos a cláusula break, cuja função é encerrar o teste
da variável tendo em vista já ter sido satisfeita a condição, assim, por exemplo:
switch(conta)
{
case 10 : conta1++;
break;
.
.
.
Se a variável conta tem seu valor igual a 10, o comando de incremento da variável
conta1 será executado, ou seja, a condição já foi atendida e não é preciso testar mais
vezes a variável conta. Então, a cláusula break, encerra os teste feitos por case e, assim,
o programa continua na próxima instrução após 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
______________________________________________________________________
Laço FOR:
for(inicialização;condição(término);incremento) comando:
ou,
for(inicialização;condição(término);incremento)
{
comando1;
comando2;
}
onde:
inicialização: essa seção conterá uma inicialização para a variável;
condição: responsável por contar a condição de finalização do laço;
incremento: aqui pode conter uma ou mais variáveis para incremento da variável.
Exemplo:
int conta;
int a = 0;
Neste exemplo, a variável conta será iniciada com o valor 0, a expressão a = conta será
executada e após isso a variável conta será incrementada novamente. Essa repetição
ou laço se encerrará quando a condição conta < 10 for satisfeita, ou seja quando a
variável 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
______________________________________________________________________
Laço WHILE:
Neste laço, os comandos serão repetidos enquanto a expressão for verdadeira, sua
forma é:
while (exp)
{
comando;
}
Exemplo:
int x;
x = 0;
while(x<10) x++;
Laço DO-WHILE:
Este laço é uma variação do comando WHILE, sendo que neste caso o comando será
executado antes de testar se a condição é verdadeira. Sua forma é:
do
{
comando;
}
while(exp);
O comando será executado pelo menos uma vez antes de verificar a condição da
expressão.
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
______________________________________________________________________
Notação numérica
______________________________________________________________________
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
Introdução
______________________________________________________________________
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
______________________________________________________________________
8 RE0/RD/AN5 E/S Entrada/saída de uso geral (bit 0 da porta E) / Controle
de leitura para comunicação paralela / Entrada do
canal analógico 5.
9 RE1/WR/AN6 E/S Entrada/saída de uso geral (bit 1 da porta E) / Controle
de escrita para comunicação paralela / Entrada do
canal analógico 6.
10 RE2/CS/AN7 E/S Entrada/saída de uso geral (bit 2 da porta E) / Controle
de seleção para comunicação paralela / Entrada do
canal analógico 7.
11 VDD Alimentação positiva do microcontrolador.
12 VSS Terra (Referência de alimentação).
13 OSC1/CLKI/RA7 E/S Entrada do cristal oscilador / Entrada para fonte de
clock externo / Entrada/saída de uso geral (bit 7 da
porta A).
14 OSC2/CLKO/RA6 E/S Saída do cristal oscilador / No Modo RC é configurado
como saída com ¼ da frequencia de CLKI/
Entrada/saída de uso geral (bit 6 da porta A).
15 RC0/T1OSO/ E/S Entrada/saída de uso geral (bit 0 da porta C) / Saída do
T13CKI oscilador para o TIMER1 / Entrada para clock externo
para o TIMER1 e TIMER3.
16 RC1/T1OSI/CCP2 E/S Entrada/saída de uso geral (bit 1 da porta C) / Entrada
do oscilador para o TIMER1 / Entrada para o módulo
capture2 e saídas para os módulos de compare2 e
PWM2 (entrada padrão).
17 RC2/CCP1/P1A E/S Entrada/saída de uso geral (bit 2 da porta C) / Entrada
para o módulo capture1 e saídas para os módulos
compare1 e PWM1 / Saída do módulo CCP1
estendido.
18 RC3/SCK/SCL E/S Entrada/saída de uso geral (bit 3 da porta C) /
Entrada/ saída do módulo serial síncrono SPI /
Entrada/saída do módulo serial síncrona I2C.
19 RD0/PSP0 E/S Entrada/saída de uso geral (bit 0 da porta D) /
Entrada/saída de dados para comunicação paralela.
20 RD1/PSP1 E/S Entrada/saída de uso geral (bit 1 da porta D) /
Entrada/saída de dados para comunicação paralela.
21 RD2/PSP2 E/S Entrada/saída de uso geral (bit 2 da porta D) /
Entrada/saída de dados para comunicação paralela.
22 RD3/PSP3 E/S Entrada/saída de uso geral (bit 3 da porta D) /
Entrada/saída de dados para comunicação paralela.
23 RC4/SDI/SDA E/S Entrada/saída de uso geral (bit 4 da porta C) / Saída de
dados para o módulo SPI / Entrada/saída de dados
para o módulo I2C.
24 RC5/SDO E/S Entrada/saída de uso geral (bit 5 da porta C) / Saída de
dados para o módulo 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/saída de uso geral (bit 6 da porta C) /
Transmissão para o módulo assíncrono USART
estendido / Clock para o módulo síncrono USART
estendido.
26 RC7/RX/DT E/S Entrada/saída de uso geral (bit 7 da porta C) /
recepção para o módulo assíncrono USART estendido
/ dado para o módulo síncrono USART estendido.
27 RD4/PSP4 E/S Entrada/saída de uso geral (bit 4 da porta D) /
Entrada/saída de dados para comunicação paralela.
28 RD5/PSP5/P1B E/S Entrada/saída de uso geral (bit 5 da porta D) /
Entrada/saída de dados para comunicação paralela /
Saída do módulo CCP1 estendido.
29 RD6/PSP6/P1C E/S Entrada/saída de uso geral (bit 6 da porta D) /
Entrada/saída de dados para comunicação paralela /
Saída do módulo CCP1 estendido.
30 RD7/PSP7/P1D E/S Entrada/saída de uso geral (bit 7 da porta D) /
Entrada/saída de dados para comunicação paralela /
Saída do módulo CCP1 estendido.
31 VSS Terra (Referência de alimentação).
32 VDD Alimentação positiva do microcontrolador.
33 RB0/INT0/FLT0/ E/S Entrada/saída de uso geral (bit 0 da porta B) /
AN12 Interrupção externa 0 / Entrada de falha para o
módulo PWM estendido. / Entrada do canal analógico
12.
34 RB1/INT1/AN10 E/S Entrada/saída de uso geral (bit 1 da porta B) /
Interrupção externa 1 / Entrada do canal analógico 10.
35 RB2/INT2/AN8 E/S Entrada/saída de uso geral (bit 2 da porta B) /
Interrupção externa 2 / Entrada do canal analógico 8.
36 RB3/AN9/CCP2 E/S Entrada/saída de uso geral (bit 3 da porta B) / Entrada
do canal analógico 9 / Entrada para o módulo
capture2 e saídas para os módulos de compare2 e
PWM2 (entrada alternativa).
37 RB4/KBI0/AN11 E/S Entrada/saída de uso geral (bit 4 da porta B) / Pino de
interrupção na mudança de estado / Entrada do canal
analógico 11.
38 RB5/KBI1/PGM E/S Entrada/saída de uso geral (bit 5 da porta B) / Pino de
interrupção na mudança de estado / Pino de ativação
para a programação ICSP em baixa tensão.
39 RB6/KBI2/PGC E/S Entrada/saída de uso geral (bit 6 da porta B) / Pino de
interrupção na mudança de estado / Entrada de clock
para a programação ICSP.
40 RB7/KBI3/PGD E/S Entrada/saída de uso geral (bit 7 da porta B) / Pino de
interrupção na mudança de estado / Pino de dados
para a programação 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
Nos tipos LP, XT e HS são utilizados oscilador a cristal e a freqüência 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 saída deste circuito um sinal de 4 vezes a freqüência
do sinal de referência. Neste caso, é possível, por exemplo que o microcontrolador
opere em 40MHz utilizando um cristal de 10MHz.
Nos tipos RC e RCIO são utilizados um circuito RC externo, sendo que para o RC, é
gerado um sinal no pino RA6 com uma freqüência dividida por 4 da freqüência
originada pela fonte de clock.
Nos tipos INTIO1 e INTIO2, o sinal de clock é interno e gerado à partir de um oscilador
RC interno. O usuário 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 freqüências 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.
______________________________________________________________________
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:
Memória
______________________________________________________________________
(Special Function Registers – SFR) e também pelos registradores de propósito geral
(General Purpose Registers – GPR). Esta memória é do tipo volátil, ou seja, os seus
valores armazenados serão perdidos na retirada de alimentação do microcontrolador.
Obs.: Os SFRs contém a configuração, controle e status dos periféricos e portas de
entrada e saída e os GPRs conterá os dados do usuário.
Logo abaixo, temos o mapa de memória de dados para os PIC’s 18F2520 e 18F4520.
______________________________________________________________________
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:
Ciclo de Máquina
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 24
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Conforme podemos ver acima, cada ciclo de máquina executa duas funções ao mesmo
tempo, ou seja, ao mesmo tempo em que uma instrução é executada, a próxima
instrução é localizada e carregada no registro de instrução. A essa tecnologia é dado o
nome de PIPELINE e que resulta no aumento da velocidade de processamento.
Sendo assim, para obtermos a freqüência para o cálculo do ciclo, devemos então,
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, então teremos:
Frequência de máquina:
Ciclo de máquina:
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
______________________________________________________________________
Registrador TRIS
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 deverão
ser configurados como saída e o restante como entrada.
TRISD = 0b11011010;
______________________________________________________________________
Registrador PORT
Sintaxe:
PORTx = valor;
valor = PORTx;
Onde:
______________________________________________________________________
Configurando todos os pinos da porta D como saída (TRISD = 0b00000000) e fazendo:
PORTD = 0b01001010;
Exemplo:
Configuração do PIC18F4520
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 28
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
A configuração dos bits de controle para o PIC 18F4520 pode ser feita diretamente no
MPLAB (Configure -> Configure Bits) ou através da diretiva #pragma config.
Através dos bits de controle é possível configurar o tipo de oscilador, o watchdog,
proteção de código, master clear, etc.
Cada microcontrolador tem seus bits de controle específicos e estes podem ser vistos
no help do MPLAB em Help -> Topics -> PIC18 Config Settings.
______________________________________________________________________
lista configuration settings à esquerda.
Oscilador
OSC LP Oscilador LP
XT Oscilador XT
HS Oscilador HS
RC Oscilador RC externo, pino RA6 configurado como CLK0.
EC Clock externo
ECIO6 Clock externo, pino RA6 configurado como I/O
HSPLL Oscilador HS com PLL habilitado
RCIO6 Oscilador RC externo, pino RA6 configurado como I/O
INTIO67 Oscilador interno, pinos RA6 e RA7 configurados como
I/O.
INTIO7 Oscilador interno, pino RA6 configurado como CLK0 e
pino RA7 configurado como I/O.
______________________________________________________________________
IESO OFF Desabilita a mudança do oscilador interno/externo
ON Habilita a mudança do oscilador interno/externo
Watchdog Timer
WDT OFF Watchdog desabilitado
ON Watchdog habilitado
______________________________________________________________________
MCLRE OFF Desabilita o MCLR e habilita o pino RE3 como entrada
ON Habilita o MCLR e desabilita o pino RE3 como entrada
Instruções estendidas
XINST OFF Set de instruções estendido e modo de endereçamento
indexado desabilitado
ON Set de instruções estendido e modo de endereçamento
indexado habilitado
In-Circuit debugger
DEBUG ON Debugger habilitado, pinos RB6 e RB7 dedicados ao In-
Circuit debugger
OFF Debugger desabilitado, pinos RB6 e RB7 configurados
como pinos de entrada/saída
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 32
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
CP0 ON Código no bloco 0 (000800-001FFFh) protegido
OFF Código no bloco 0 não protegido
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 33
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
WRTB ON Proteção de escrita no bloco boot (000000-007FFFh)
habilitada
OFF Proteção de escrita no bloco 0 não habilitada
Exemplo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 34
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
O Power-up Timer faz com que o microcontrolador comece a operar em 72ms após a
sua alimentação, garantindo, assim a estabilização na fonte de aliementação.
BORV Tensão(V)
0 4,59
1 4,33
2 2,79
3 2,11
______________________________________________________________________
______________________________________________________________________
PIC18F4520. Após a seleção, clique em ‘Anvançar’.
______________________________________________________________________
estamos criando, portanto, nesta tela, clique em ‘Browse’.
______________________________________________________________________
Bem, então 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 código fonte, salvá-lo e acrescentar ao projeto. Para isso,
clique em ‘File’ no menu principal e escolha a opção ‘New’.
Será mostrada esta tela que é, justamente, onde escreveremos o código 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.
#include <p18F4520.h>
#include<delays.h> //Inclui a biblioteca de delays
void main()
{
TRISD = 0b00000000; //Direciona todos os bits da porta D como saída
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 código e, agora, não devemos esquecer da extensão ‘*.c’. Veja o exemplo
abaixo, onde o arquivo será salvo com o nome ‘pisca_led.c’.
Após salvar o código fonte, clique com o botão 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’.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 43
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Na janela que abrirá, na aba ‘Directories’, escolha ‘Library Search Path’, conforme
abaixo e, em seguida, clique no botão ‘New’.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 44
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 45
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
opção ‘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 compilação. Deverá ser mostrada a mensagem ‘BUILD
SUCEEDED’.
OBS.: Se a mensagem mostrada for ‘BUILD ERROR’, então reveja os passos para criação
do projeto e o código 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 código.
#include <p18F4520.h>
Temos então:
Conectado ao microcontrolador, temos um cristal de 8MHz, então configuramos o
oscilador como ‘HS’ (oscilador à cristal de alta velocidade).
Desabilitamos o temporizador ‘watchdog’ (WDT = OFF);
Habilitamos a função que informa ao PIC que ele deve começar a rodar o programa
após 72ms de sua energização (PWRT = ON).
Habilitamos também o ‘Brown-out reset’ (BOREN = ON) e também definimos a tensão
de ‘Brown-out’ (BORV=1). Assim, se a tensão de alimentação 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 deverão ser configurados
como portas de entrada e saída.
Finalizamos desabilitando a função de programação por baixa tensão.
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 50
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Após a configuração dos bits de controle, temos a função principal. Esta função deve
sempre existir e, através dela, faremos as configurações dos registradores e chamadas
para outras funções.
void main()
{
TRISD = 0b00000000; //Direciona todos os bits da porta D como saída
while(1)
{
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
}
}
A primeira instrução desta função informa faz com que todos os bits do registrador
TRISD sejam levados a ‘0’. Assim, estamos configurando toda a PORTA D como saída.
while(1)
{
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
}
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 51
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Funções de atraso (Delay)
______________________________________________________________________
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 utilização de um cristal de 8MHZ:
#include <delays.h>
void main()
{
TRISD = 0b00000000; //Direciona todos os bits da porta D como saída
while(1)
{
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
}
}
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 53
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Comentários.
Note que podemos escrever o que acontece em cada linha do programa colocando-se
duas barras (‘//’) antes do comentário. O conteúdo que estiver após as barras, não será
interpretado pelo compilador, ou seja, não será compilado.
Para escrevermos um comentário mais longo com mais de uma linha podemos
inicializar com o símbolo ‘/*’ e após finalizar o comentário, colocamos o símbolo ‘*/’
Ex.:
//Este é um comentário de uma linha
/*Este comentário também pode ter mais de uma linha e com os símbolos do
início, podemos escrever o conteúdo e finalizar com os símbolos */
______________________________________________________________________
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
Instalação do WinPic800
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 55
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Escolha o diretório para instalação 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á:
______________________________________________________________________
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
______________________________________________________________________
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 botão
marcado em vermelho conforme a figura abaixo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 58
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
-Desabilite a opção “Bloquear configurações”
-Habilite a opção da coluna “Inv” em “Vpp”, conforme abaixo:
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 59
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Conexão e gravação
-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 alimentação.
-Pressionar a chave Grav/Run (deixá-la baixa) na Placa;
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 60
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Outros botões que vamos utilizar são:
Gravando o microcontrolador
Abrindo o Arquivo
______________________________________________________________________
Obs.2: utilizando a placa ACEPIC 40, ligue a chave 1 (LED) do DIP SWITCH SW1
Acionamento de Botões
______________________________________________________________________
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, é necessário configurar o
registrador TRISx para direcionar a porta como entrada ou saída.
Fizemos, portanto, o acionamento dos LED’s conectados à porta D configurando o
TRISD com nível 0 em todos os seus bits e agora neste próximo projeto precisamos
acionar um botão e, sendo assim, é necessário que a porta onde está conectado o
botão seja configurada como entrada.
Neste caso, o registrador TRISx deverá ser configurado com nível 1, fazendo assim com
que a porta correspondente seja também configurada como entrada.
Neste próximo 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 botão B0, este pino deverá ser levado para o nível 0.
Circuito:
Código:
______________________________________________________________________
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>
void main()
{
TRISBbits.TRISB0 = 1; //Direciona somente o pino 0 da porta B como entrada
TRISDbits.TRISD0 = 0; //Direciona somente o pino 0 da porta D como saída
while(1)
{
if (PORTBbits.RB0 == 0) //Se o botão for pressionado, se B0 for igual a ‘0’
PORTDbits.RD0 = 1; //Coloca em ‘1’ o bit ‘0’ da porta D (acende o led)
else //senão
PORTDbits.RD0 = 0; //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
______________________________________________________________________
Ex.:
#define LED1 PORTBbits.RB0 //Define o nome LED1 ao bit 0 da porta B
#include <p18F4520.h>
void main()
{
DIR_BOT0 = 1; //Direciona somente o pino 0 da porta B como entrada
DIR_LED1 = 0; //Direciona somente o pino 0 da porta D como saída
while(1)
{
if (BOT0 == 0) //Se o botão for pressionado, se B0 for igual a ‘0’
LED1 = 1; //Coloca em ‘1’ o bit ‘0’ da porta D (acende o led)
Else //senão
LED1 = 0; //Coloca em ‘0’ o bit ‘0’ da porta D (apaga o led)
}
}
Funções
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 65
www.acepic.com.br
Microcontroladores PIC 18F4520 – Linguagem C
Compilador C18
______________________________________________________________________
Onde:
tipo: Especifica o tipo de dado que a função retornará para onde ela foi chamada.
nome_da_função: Identifica a função, ou seja, como ela será chamada pelo programa.
Este nome não pode ter o mesmo nome utilizado por funções próprias do compilador
(palavras reservadas).
parâmetros: Utilizados para enviar valores para a função de modo que estes sejam
utilizados pela função para cálculos, atribuições, controle, etc.
Esses valores consistem em tipos de variáveis separados por vírgulas e são opcionais,
portanto, podemos escrever funções sem qualquer parâmetro.
Mesmo sem a existência dos valores, os parênteses devem ser utilizados.
Exemplo:
void main ()
{
short c;
c = soma (2,3);
while(1);
}
Neste exemplo, definimos uma função soma que retornará o resultado da operação
dos parâmetros “a” + o parâmetro “b”. Note que o a função é do tipo short, isso então
especifica que a função 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 função, encontramos somente o código ‘return a + b’, onde o comando
“return” é utilizado para retornar o valor da operação dos parâmetros “a + b”.
Então neste caso, a função soma recebe os valores “2” e “3” e estes serão atribuídos às
variáveis “a” e “b”, respectivamente e a função retornará o valor da soma entre eles,
portanto o valor “5” que será repassado para a variável “c” no corpo principal do
programa.
Protótipo de função
void main ()
{
short c;
c = soma (2,3);
while(1);
}
Veja que a função ‘soma’ está definida após a função principal (main). Neste caso,
como a função ‘soma’ foi definida após a sua chamada, o compilador retornará um
erro dizendo que o identificador ‘soma’ não foi declarado.
______________________________________________________________________
da função seguido do ponto e vírgula (;) e, normalmente, são declarados logo no início
do programa.
Exemplo:
void main ()
{
short c;
c = soma (2,3);
while(1);
}
______________________________________________________________________
ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 68
www.acepic.com.br