Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

<p>Linguagem C</p><p>É uma linguagem de programação de propósito geral, estruturada, imperativa,</p><p>procedural de alto e baixo nível, criada em 1972 por Dennis Ritchie no AT&T Bell Labs,</p><p>para desenvolver o sistema operacional UNIX (que foi originalmente escrito em</p><p>Assembly). Desde então, espalhou-se por muitos outros sistemas e tornou-se uma das</p><p>linguagens de programação mais usadas influenciando muitas outras linguagens,</p><p>especialmente o C++, que foi desenvolvida como uma extensão para C.</p><p>Fonte: WIKIPEDIA</p><p>Programação de Microcontroladores em linguagem C</p><p>Atualmente, a maioria dos microcontroladores existentes nos mercado, contam</p><p>com compiladores em C para o desenvolvimento de software, pois a linguagem C</p><p>permite a construção de programas e aplicações muito mais complexas do que o</p><p>Assembly.</p><p>O compilador C tem a capacidade de “traduzir” com alto grau de inteligência e</p><p>velocidade o código em C para o código de máquina, portanto podemos dizer que a</p><p>linguagem C possui grande eficiência.</p><p>Essa eficiência da linguagem C faz com que o programador preocupe-se mais</p><p>com a programação em si e o compilador assume responsabilidades como localização</p><p>da memória, operações matemáticas e lógicas, verificação de bancos de memórias e</p><p>outros..</p><p>O compilador MPLAB C18</p><p>O MPLAB C18 é um compilador em linguagem C que produz códigos que podem ser</p><p>executados pela família de microcontroladores Microchip PIC18XXXX. Assim como o</p><p>compilador assembly, o C18 traduz a linguagem escrita pelo programador em ‘uns’ e</p><p>‘zeros’ para que o microcontrolador entenda e execute, ou seja, o MPLAB C18 converte</p><p>declarações, tipo “if(x==y)” e “temp=0x27” em código de máquina para os</p><p>microcontroladores PIC18XXXX.</p><p>O compilador pode otimizar códigos usando rotinas que são empregadas em uma</p><p>função para que seja utilizada por outras funções em C. O C18 pode rearranjar códigos,</p><p>eliminar códigos que nunca serão executados, compartilhar fragmentos de códigos</p><p>entre múltiplas funções e pode identificar dados e registros usados sem eficiência,</p><p>otimizando seu acesso.</p><p>O MPLAB C18 utiliza códigos escritos na notação padrão ANSI C e gera arquivos HEXA</p><p>(.hex) para que possam ser programados nos microcontroladors. A interface MPLAB é</p><p>utilizada para escrever, compilar e depurar os códigos escritos em C.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 2</p><p>www.acepic.com.br</p><p>Introdução à Linguagem C</p><p>Palavras Reservadas</p><p>Toda linguagem de programação possui um conjunto de palavras definidas para</p><p>interpretação do próprio compilador, sendo assim, essas palavras não deverão ser</p><p>utilizas pelo usuário para outras finalidades além das definidas pelo compilador.</p><p>Essas palavras são chamadas de reservadas e em linguagem C, temos as seguintes:</p><p>auto double if rom union</p><p>break else Int short unsigned</p><p>case enum long signed void</p><p>char extern near sizeof volatile</p><p>const far overlay static while</p><p>continue float ram struct</p><p>default for register switch</p><p>do goto return typedef</p><p>Identificadores</p><p>Os identificadores são nomes dados às funções, variáveis, constantes, etc e não devem</p><p>conter caracteres acentuados, espaços, ‘ç’ e devem sempre começar com uma letra ou</p><p>o símbolo ’_’ que é tratado como letra.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 3</p><p>www.acepic.com.br</p><p>Tipos de dados</p><p>Os tipos de dados suportados pelo compilador C18 são vistos na tabela abaixo:</p><p>Tipo Tamanho Valores</p><p>char 8 bits 128 a 127</p><p>unsigned char 8 bits 0 a 255</p><p>signed char 8 bits -128 a 127</p><p>int 16 bits -32768 a 32767</p><p>unsigned int 16 bits 0 a 65535</p><p>short 16 bits -32768 a 32767</p><p>unsigned short 16 bits 0 a 65535</p><p>short long 24 bits -8388608 a 8388607</p><p>unsigned short long 24 bits 0 a 16777215</p><p>long 32 bits -2147483648 a 2147483647</p><p>unsigned long 32 bits 0 a 4294967295</p><p>float 32 bits -1,17549435082e-38 a 6,80564774407e38</p><p>double 32 bits -1,17549435082e-38 a 6,80564774407e38</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 4</p><p>www.acepic.com.br</p><p>Variáveis</p><p>As variáveis são uma representação simbólica onde são armazenados dados do</p><p>programa ou dados externos como uma tecla pressionada ou uma tensão lida, etc. As</p><p>variáveis podem conter letras e números, sempre começando com letras e não devem</p><p>ter nome de palavras reservadas pelo compilador como, por exemplo, for, do, int, etc.</p><p>Declaração de Variáveis</p><p>Declarar uma variável é simplesmente informar ao compilador que uma variável</p><p>chamada “X” é do tipo “Y” e é declarada da seguinte forma:</p><p><tipo> + <nome da variável>;</p><p>Podemos também declarar e inicializar uma variável da seguinte forma:</p><p><tipo> + <nome da variável> = <valor da variável>;</p><p>Exemplos: unsigned int x = 12345;</p><p>int conta;</p><p>short x1;</p><p>Variáveis Globais</p><p>São declaradas no início de nosso código e que podem ser acessadas em qualquer</p><p>ponto do programa:</p><p>Exemplo:</p><p>int conta;</p><p>unsigned int c;</p><p>void main()</p><p>{</p><p>conta = 10;</p><p>c = c + 1;</p><p>while (1);</p><p>}</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 5</p><p>www.acepic.com.br</p><p>Variáveis Locais</p><p>São declaradas dentro de uma função e somente existe durante a execução da função.</p><p>Elas são descartadas depois de executada a função:</p><p>Exemplo:</p><p>void main()</p><p>{</p><p>int conta;</p><p>conta = conta++;</p><p>while(1);</p><p>}</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 6</p><p>www.acepic.com.br</p><p>Operadores</p><p>Temos, na linguagem C, vários operadores e podemos verificá-los abaixo:</p><p>Operadores de Atribuição</p><p>São utilizados para atribuir valores às variáveis:</p><p>Operador Descrição Exemplo</p><p>= Associa um valor à variável a = 2</p><p>Aritméticos:</p><p>Operador Descrição Exemplo</p><p>+ Soma dos argumentos a + b</p><p>+= Soma dos argumentos a += b</p><p>- Subtração dos argumentos a - b</p><p>-= Subtração dos argumentos a -= b</p><p>* Multiplicação dos argumentos a * b</p><p>*= Multiplicação dos argumentos a *= b</p><p>/ Divisão dos argumentos a / b</p><p>/= Divisão dos argumentos a /= b</p><p>% Resto da divisão (só pode ser utilizado com valores</p><p>inteiros)</p><p>a % b</p><p>%= Resto da divisão (só pode ser utilizado com valores</p><p>inteiros)</p><p>a %= b</p><p>++ Soma 1 ao argumento a++</p><p>-- Subtrai 1 ao argumento a--</p><p>e depois escolha “hardware”, será apresentada a seguinte tela:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 58</p><p>www.acepic.com.br</p><p>-Escolha o hardware “JDM Programmer” em “Selecionar Hardware” e clique no botão</p><p>marcado em vermelho conforme a figura abaixo:</p><p>A seguinte tela será mostrada:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 59</p><p>www.acepic.com.br</p><p>-Desabilite a opção “Bloquear configurações”</p><p>-Habilite a opção da coluna “Inv” em “Vpp”, conforme abaixo:</p><p>-Habilite novamente a opção “Bloquear configurações” e clique em Salvar.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 60</p><p>www.acepic.com.br</p><p>Conexão e gravação</p><p>-Se possuir o kit de desenvolvimento, conecte o cabo serial que acompanha o kit na</p><p>placa e à porta serial do PC.</p><p>-Ligue a fonte de alimentação.</p><p>-Pressionar a chave Grav/Run (deixá-la baixa) na Placa;</p><p>-Clique sobre o botão ‘Detectar PIC’ e, automaticamente o microcontrolador deverá ser</p><p>detectado.</p><p>Caso isso não ocorra, verificar as configurações para o gravador utilizado</p><p>Identificação dos botões:</p><p>Clicando no Botão “Detectar PIC” e se tudo estiver corretamente conectado, a tela</p><p>seguinte será mostrada:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 61</p><p>www.acepic.com.br</p><p>Outros botões que vamos utilizar são:</p><p>Gravando o microcontrolador</p><p>Abrindo o Arquivo</p><p>-Clique em “Arquivo”, logo após em “Abrir” e procure a pasta onde se encontram os</p><p>arquivos do projeto que acabamos de criar e abra o arquivo “PISCA_LED.hex”.</p><p>-Agora clique em “Programar Tudo”, deverá aparecer a janela abaixo:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 62</p><p>www.acepic.com.br</p><p>Pronto, o microcontrolador está gravado, vamos verificar o funcionamento e para isso</p><p>basta seguir a sequência:</p><p>-Pressione novamente a chave Grav/Run (deixá-la alta);</p><p>-Desconecte o cabo.</p><p>Ao desconectar o cabo o programa gravado no microcontrolador deverá “rodar”</p><p>mostrando o funcionamento.</p><p>Se sua aplicação utilizar a porta serial, basta conectar o cabo novamente.</p><p>Obs.: A versão do programa WinPic800 é a mais atual e ela só funciona em</p><p>computadores, cuja porta serial seja a COM1.</p><p>Obs.2: utilizando a placa ACEPIC 40, ligue a chave 1 (LED) do DIP SWITCH SW1</p><p>Acionamento de Botões</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 63</p><p>www.acepic.com.br</p><p>Vimos no projeto anterior que para acionar uma porta, é necessário configurar o</p><p>registrador TRISx para direcionar a porta como entrada ou saída.</p><p>Fizemos, portanto, o acionamento dos LED’s conectados à porta D configurando o</p><p>TRISD com nível 0 em todos os seus bits e agora neste próximo projeto precisamos</p><p>acionar um botão e, sendo assim, é necessário que a porta onde está conectado o</p><p>botão seja configurada como entrada.</p><p>Neste caso, o registrador TRISx deverá ser configurado com nível 1, fazendo assim com</p><p>que a porta correspondente seja também configurada como entrada.</p><p>Neste próximo projeto, faremos a leitura do pino 0 da porta B (RB0) e quando este for</p><p>igual a 0, acionaremos o bit 0 da porta D fazendo acender o LED L1 conectado a este</p><p>pino.</p><p>Veja no circuito apresentado que o pino RB0 está inicialmente em 1 e ao pressionarmos</p><p>o botão B0, este pino deverá ser levado para o nível 0.</p><p>Circuito:</p><p>Código:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 64</p><p>www.acepic.com.br</p><p>#include <p18F4520.h></p><p>// Frequencia do oscilador = 8MHz</p><p>// Ciclo de máquina = 1/(Fosc/4) = 0,5us</p><p>#pragma config OSC = HS //Configura o oscilador a cristal</p><p>#pragma config WDT = OFF //Desabilita o Watchdog Timer (WDT).</p><p>#pragma config PWRT = ON //Habilita o Power-up Timer (PWRT).</p><p>#pragma config BOREN = ON //Habilita Brown-out reset</p><p>#pragma config BORV = 1 //Tensão do BOR é 4,33V.</p><p>#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital.</p><p>#pragma config LVP = OFF //Desabilita o Low Voltage Program.</p><p>void main()</p><p>{</p><p>TRISBbits.TRISB0 = 1; //Direciona somente o pino 0 da porta B como entrada</p><p>TRISDbits.TRISD0 = 0; //Direciona somente o pino 0 da porta D como saída</p><p>while(1)</p><p>{</p><p>if (PORTBbits.RB0 == 0) //Se o botão for pressionado, se B0 for igual a ‘0’</p><p>PORTDbits.RD0 = 1; //Coloca em ‘1’ o bit ‘0’ da porta D (acende o led)</p><p>else //senão</p><p>PORTDbits.RD0 = 0; //Coloca em ‘0’ o bit ‘0’ da porta D (apaga o led)</p><p>}</p><p>}</p><p>Diretiva define</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 65</p><p>www.acepic.com.br</p><p>Podemos atibuir um outro nome a uma constante ou a um registrador através da</p><p>diretiva define. Esta diretiva é interessante ser utilizada quando o programa contém</p><p>muitas linhas de comando, assim facilita a identificação de um pino de controle ou um</p><p>registrador de acordo com o definido.</p><p>Ex.:</p><p>#define LED1 PORTBbits.RB0 //Define o nome LED1 ao bit 0 da porta B</p><p>#define VALOR_MAX 25 //Define um valor constante à variável VALOR_MAX</p><p>Aplicando a diretiva ao programa anterior:</p><p>#include <p18F4520.h></p><p>// Frequencia do oscilador = 8MHz</p><p>// Ciclo de máquina = 1/(Fosc/4) = 0,5us</p><p>#pragma config OSC = HS //Configura o oscilador a cristal</p><p>#pragma config WDT = OFF //Desabilita o Watchdog Timer (WDT).</p><p>#pragma config PWRT = ON //Habilita o Power-up Timer (PWRT).</p><p>#pragma config BOREN = ON //Habilita Brown-out reset</p><p>#pragma config BORV = 1 //Tensão do BOR é 4,33V.</p><p>#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital.</p><p>#pragma config LVP = OFF //Desabilita o Low Voltage Program.</p><p>#define DIR_BOT0 TRISBbits.TRISB0 //define o nome DIR_BOT0 para o bit 0 do TRISB</p><p>#define DIR_LED1 TRISDbits.TRISD0 //define o nome DIR_LED1 para o bit 0 do TRISD</p><p>#define BOT0 PORTBbits.RB0 //define o nome BOT0 para o bit 0 do PORTB</p><p>#define LED1 PORTDbits.RD0 //define o nome LED1 para o bit 0 do PORTD</p><p>void main()</p><p>{</p><p>DIR_BOT0 = 1; //Direciona somente o pino 0 da porta B como entrada</p><p>DIR_LED1 = 0; //Direciona somente o pino 0 da porta D como saída</p><p>while(1)</p><p>{</p><p>if (BOT0 == 0) //Se o botão for pressionado, se B0 for igual a ‘0’</p><p>LED1 = 1; //Coloca em ‘1’ o bit ‘0’ da porta D (acende o led)</p><p>Else //senão</p><p>LED1 = 0; //Coloca em ‘0’ o bit ‘0’ da porta D (apaga o led)</p><p>}</p><p>}</p><p>Funções</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 66</p><p>www.acepic.com.br</p><p>As funções em linguagem C são muito parecidas com as sub-rotinas da linguagem</p><p>assembly. O seu uso permite executar uma sequência de comandos sempre que</p><p>necessitarmos, sem a necessidade de repetí-los.</p><p>O formato geral de uma função é:</p><p>{tipo} nome_da_função ({parâmetros})</p><p>{</p><p>Comando_1;</p><p>Comando_2;</p><p>....</p><p>}</p><p>Onde:</p><p>tipo: Especifica o tipo de dado que a função retornará para onde ela foi chamada.</p><p>nome_da_função: Identifica a função, ou seja, como ela será chamada pelo programa.</p><p>Este nome não pode ter o mesmo nome utilizado por funções próprias do compilador</p><p>(palavras reservadas).</p><p>parâmetros: Utilizados para enviar valores para a função de modo que estes sejam</p><p>utilizados pela função para cálculos, atribuições, controle, etc.</p><p>Esses valores consistem em tipos de variáveis separados por vírgulas e são opcionais,</p><p>portanto, podemos escrever funções sem qualquer parâmetro.</p><p>Mesmo sem a existência dos valores, os parênteses devem ser utilizados.</p><p>Exemplo:</p><p>short soma (short a, short b)</p><p>{</p><p>return a + b;</p><p>}</p><p>void main ()</p><p>{</p><p>short c;</p><p>c = soma (2,3);</p><p>while(1);</p><p>}</p><p>Neste exemplo, definimos uma função soma que retornará o resultado da operação</p><p>dos parâmetros “a” + o parâmetro “b”. Note que o a função é do tipo short, isso então</p><p>especifica que a função retornará um valor do tipo short de 8 bits.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 67</p><p>www.acepic.com.br</p><p>No corpo da função, encontramos somente o código ‘return a + b’, onde o comando</p><p>“return” é utilizado para retornar o valor da operação dos parâmetros “a + b”.</p><p>No bloco principal, encontramos a chamada da função através de ‘c = soma (2,3)’, onde</p><p>a variável “c” receberá o valor do retorno da função (note que a variável também foi</p><p>declarada com o mesmo tipo da função) e os parâmetros são os valores “2” e “3”,</p><p>separados pela vírgula e dentro dos parênteses.</p><p>Então neste caso, a função soma recebe os valores “2” e “3” e estes serão atribuídos às</p><p>variáveis “a” e “b”, respectivamente e a função retornará o valor da soma entre eles,</p><p>portanto o valor “5” que será repassado para a variável “c” no corpo principal do</p><p>programa.</p><p>Protótipo de função</p><p>Um programa em linguagem C pode ficar muito grande e muito complexo e, às vezes,</p><p>uma função pode ser chamada antes que ela seja definida. Neste caso, o compilador</p><p>gera um erro, veja o exemplo abaixo:</p><p>void main ()</p><p>{</p><p>short c;</p><p>c = soma (2,3);</p><p>while(1);</p><p>}</p><p>short soma (short a, short b)</p><p>{</p><p>return a + b;</p><p>}</p><p>Veja que a função ‘soma’ está definida após a função principal (main). Neste caso,</p><p>como a função ‘soma’ foi definida após a sua chamada, o compilador retornará um</p><p>erro dizendo que o identificador ‘soma’ não foi declarado.</p><p>Podemos solucionar este tipo de problema ao declararmos previamente a função, ou</p><p>seja, informaremos ao compilador que existe uma função com aquele “nome” que</p><p>estamos “chamando”. Isto é conhecido como prototipagem de função.</p><p>O protótipo de função deve ser declarado obedecendo os mesmos tipos e parâmetros</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 68</p><p>www.acepic.com.br</p><p>da função seguido do ponto e vírgula (;) e, normalmente, são declarados logo no início</p><p>do programa.</p><p>Exemplo:</p><p>short soma(short a, short b);</p><p>void main ()</p><p>{</p><p>short c;</p><p>c = soma (2,3);</p><p>while(1);</p><p>}</p><p>short soma (short a, short b)</p><p>{</p><p>return a + b;</p><p>}</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 7</p><p>www.acepic.com.br</p><p>Relacionais:</p><p>São utilizados para comparação entre argumentos e retornam uma resposta verdadeira</p><p>ou falsa. Como em linguagem C não existe uma variável booleana para um resultado</p><p>verdadeiro ou falso, todo valor igual a 0 será considerado falso e todo valor diferente</p><p>de 0 (qualquer valor) será considerado verdadeiro.</p><p>Operador Descrição Exemplo</p><p>== Compara se igual a a == 5</p><p>!= Compara se diferente de a != 5</p><p>> Compara se maior que a > 5</p><p>< Compara se menor que a < 5</p><p>>= Compara se maior ou igual a a >= 5</p><p><= Compara se menor ou igual a a <= 5</p><p>Operadores lógicos bit-a-bit:</p><p>Operador Descrição</p><p>& E (AND)</p><p>| OU (OR)</p><p>^ OU EXCLUSIVO (XOR)</p><p>~ Complemento (NOT)</p><p>>> Deslocamento à direita</p><p><< Deslocamento à esquerda</p><p>Operadores lógicos relacionais:</p><p>Operador Descrição</p><p>&& Comparação lógica E (AND)</p><p>|| Comparação lógica OU (OR)</p><p>! Comparação lógica Complemento (NOT)</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 8</p><p>www.acepic.com.br</p><p>Declarações de controle:</p><p>Comando if (se):</p><p>O comando if é uma comando de decisão e é utilizado para avaliar uma determinada</p><p>condição e determinar se ela é verdadeira, caso seja, executa o bloco contido dentro</p><p>desta condição. Sua forma geral é:</p><p>if (exp) comando;</p><p>Se o resultado da condição referente a expressão (exp) for verdadeiro, o comando será</p><p>executado, caso contrário, o programa segue sem executar o comando.</p><p>if (exp)</p><p>{</p><p>comando1;</p><p>comando2;</p><p>}</p><p>Para o caso acima, a mesma explicação anterior se encaixa, sendo que agora, se a</p><p>condição da expressão for verdadeira, serão executados comando1 e comando2.</p><p>Exemplos:</p><p>if (conta>50) conta = 0;</p><p>Neste caso, se a variável conta atingir um valor maior que 50, o comando conta = 0 será</p><p>executado e a variável conta será zerada.</p><p>if (conta>50)</p><p>{</p><p>conta = 0;</p><p>conta1++;</p><p>}</p><p>Neste caso, se a variável conta atingir um valor maior que 50, os comandos</p><p>conta = 0 e conta1++ serão executados e assim a variável conta será zerada e a variável</p><p>conta1 será incrementada em 1, respectivamente.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 9</p><p>www.acepic.com.br</p><p>Comando if-else:</p><p>Neste caso, a condição if é utilizada da mesma forma anterior, sendo que agora, se a</p><p>condição da expressão for falsa a condição else será executada, ou seja, neste caso</p><p>existe a possibilidade de escolha de uma entre duas opções. Sua forma é:</p><p>if (exp) comando1;</p><p>else comando2;</p><p>Caso a expressão seja verdadeira, o comando1 será executado, caso seja falsa, o</p><p>comando2 será executado.</p><p>Exemplo:</p><p>if (conta>0)</p><p>{</p><p>conta = 0;</p><p>conta1++;</p><p>}</p><p>else conta++;</p><p>Para o exemplo, se o valor da variável conta for maior que 0, então os</p><p>comandos conta = 0 e conta1++ serão executados, porém caso o valor da variável</p><p>conta seja 0 ou menor que 0, então o comando conta++ será executado.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 10</p><p>www.acepic.com.br</p><p>Comando SWITCH-CASE:</p><p>Quando existem muitos valores para testar de uma só variável, o comando IF pode ficar</p><p>meio confuso ou sem muita eficiência, para isso podemos utilizar o SWITCH-CASE.</p><p>Segue sua forma:</p><p>switch(variável)</p><p>{</p><p>case valor1: comando1;</p><p>....</p><p>break;</p><p>case valor2: comando2;</p><p>....</p><p>break;</p><p>....</p><p>....</p><p>default: comandoN;</p><p>....</p><p>....</p><p>}</p><p>Neste caso, a variável será testada e se o valor dela for igual a valor1, o comando1 será</p><p>executado, se for igual ao valor2, o comando2 será executado e assim por diante, agora</p><p>se o valor for diferente de qualquer caso (case), o comandoN será executado.</p><p>Exemplo:</p><p>switch(conta)</p><p>{</p><p>case 10 : conta1++;</p><p>break;</p><p>case 15: conta2++;</p><p>break;</p><p>case 20: {</p><p>conta1++;</p><p>conta2++;</p><p>}</p><p>break;</p><p>default: conta3++;</p><p>}</p><p>Neste caso, se o valor da variável conta for igual a 10, a variável conta1 será</p><p>incrementado, se o valor da variável conta for igual a 15, o valor da variável conta2</p><p>será incrementado, caso o valor de conta seja igual a 20, tanto os valores de conta1</p><p>quanto de conta2 serão incrementados, para todos outros valores diferentes para a</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 11</p><p>www.acepic.com.br</p><p>variável conta, o valor de conta3 será incrementado.</p><p>Note que após cada comando, temos a cláusula break, cuja função é encerrar o teste</p><p>da variável tendo em vista já ter sido satisfeita a condição, assim, por exemplo:</p><p>switch(conta)</p><p>{</p><p>case 10 : conta1++;</p><p>break;</p><p>.</p><p>.</p><p>.</p><p>Se a variável conta tem seu valor igual a 10, o comando de incremento da variável</p><p>conta1 será executado, ou seja, a condição já foi atendida e não é preciso testar mais</p><p>vezes a variável conta. Então, a cláusula break, encerra os teste feitos por case e, assim,</p><p>o programa continua na próxima instrução após a estrutura switch.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 12</p><p>www.acepic.com.br</p><p>Laço FOR:</p><p>Este é um dos comandos de laço (loop ou repetição) disponíveis na linguagem C, a sua</p><p>forma é:</p><p>for(inicialização;condição(término);incremento) comando:</p><p>ou,</p><p>for(inicialização;condição(término);incremento)</p><p>{</p><p>comando1;</p><p>comando2;</p><p>}</p><p>onde:</p><p>inicialização: essa seção conterá uma inicialização para a variável;</p><p>condição: responsável por contar a condição de finalização do laço;</p><p>incremento: aqui pode conter uma ou mais variáveis para incremento da variável.</p><p>Exemplo:</p><p>int conta;</p><p>int a = 0;</p><p>for (conta=0;conta<10;conta++) a = conta;</p><p>Neste exemplo, a variável conta será iniciada com o valor 0, a expressão a = conta será</p><p>executada e após isso a variável conta será incrementada novamente. Essa repetição</p><p>ou laço se encerrará quando a condição conta < 10 for satisfeita, ou seja quando a</p><p>variável conta for igual a 9.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 13</p><p>www.acepic.com.br</p><p>Laço WHILE:</p><p>Neste laço, os comandos serão repetidos enquanto a expressão for verdadeira, sua</p><p>forma é:</p><p>while (exp)</p><p>{</p><p>comando;</p><p>}</p><p>Exemplo:</p><p>int x;</p><p>x = 0;</p><p>while(x<10) x++;</p><p>A programa ficará no laço de repetição whil, enquanto a variável x for menor</p><p>que 10 e o programa só continuará quando o valor de x for maior ou igual a 10.</p><p>Laço DO-WHILE:</p><p>Este laço é uma variação do comando WHILE, sendo que neste caso o comando será</p><p>executado antes de testar se a condição é verdadeira. Sua forma é:</p><p>do</p><p>{</p><p>comando;</p><p>}</p><p>while(exp);</p><p>O comando será executado pelo menos uma vez antes de verificar a condição da</p><p>expressão.</p><p>Exemplo:</p><p>int x;</p><p>int y;</p><p>do</p><p>{</p><p>x++;</p><p>} while(y!=1);</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 14</p><p>www.acepic.com.br</p><p>Notação numérica</p><p>Em linguagem C, podemos usar as 4 formas de representação numérica, decimal,</p><p>binária, hexadecimal e octal, sendo as mais comuns somente as 3 primeiras.</p><p>Notação decimal: a representação desta notação é direta, ou seja, como estamos</p><p>acostumados a escrever:</p><p>Ex.: PORTB = 10;</p><p>Notação binária: esta representação vem precedida de “0b” ou “0B”, indicando a</p><p>notação:</p><p>Ex.: PORTB = 0b00000010;</p><p>ou</p><p>PORTB = 0B00000010;</p><p>Notação Hexadecimal: esta representação vem precedida de “0x” ou “0X”, ex:</p><p>Ex.: PORTB = 0x0A;</p><p>ou</p><p>PORTB = 0X0A;</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 15</p><p>www.acepic.com.br</p><p>O PIC 18F4520</p><p>Introdução</p><p>O PIC 18F4520 é baseado na arquitetura Harvard com instruções do tipo RISC</p><p>(Conjunto reduzido de instruções). Este microcontrolador utiliza a tecnologia nanoWatt</p><p>desenvolvida pela Microchip, permitindo menor consumo de energia. Veja suas</p><p>características abaixo:</p><p>O modelo utilizado no curso possui 40 pinos, sendo que 36 podem ser</p><p>configurados como portas de entrada/saída (I/O);</p><p>Frequência de operação: DC a 40 MHz;</p><p>Memória Flash de 32KB;</p><p>Memória de dados RAM de 1536 bytes;</p><p>Memória de dados EEPROM de 256 bytes;</p><p>20 fontes de interrupção;</p><p>13 canais de conversão analógica-digital (A/D) de 10 bits cada;</p><p>1 módulo de comparação, captura e PWM (CCP);</p><p>1 módulo de comparação, captura e PWM melhorado (ECCP);</p><p>1 módulo SPI;</p><p>1 módulo I2C;</p><p>2 comparadores analógicos;</p><p>1 timer de 8 ou 16 bits (TIMER0), 2 timers de 16 bits (TIMER1 e TIMER3) e 1</p><p>timer de 8 bits (TIMER2);</p><p>1 comunicação EUSART (modo USART melhorado);</p><p>1 módulo de detecção de alta/baixa tensão (HLVD).</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 16</p><p>www.acepic.com.br</p><p>Pinagem do PIC 18F4520</p><p>Nomenclatura dos pinos</p><p>Pino Nome Tipo Descrição</p><p>1 MCLR/VPP/RE3 E</p><p>Master Clear Reset/ Entrada de tensão de</p><p>programação/ Entrada de uso geral (bit 3 PORTA E).</p><p>2 RA0/AN0 E/S Entrada/saída de uso geral (bit 0 PORTA A) / Entrada</p><p>do canal analógico 0</p><p>3 RA1/AN1 E/S Entrada/saída de uso geral (bit 1 da PORTA A) /</p><p>Entrada do canal analógico 1.</p><p>4 RA2/AN2/VREF-</p><p>/CVREF</p><p>E/S Entrada/saída de uso geral (bit 2 da PORTA A) /</p><p>Entrada do canal analógico 2 / Entrada de tensão</p><p>negativa de referência para o conversor A/D / Saída de</p><p>Vref do comparador analógico.</p><p>5 RA3/AN3/VREF+ E/S Entrada/saída de uso geral (bit 3 da PORTA A) /</p><p>Entrada do canal analógico 3 / Entrada de tensão</p><p>positiva de referência para o conversor A/D.</p><p>6 RA4/T0CKI</p><p>/C1OUT</p><p>E/S Entrada/saída de uso geral (bit 4 da PORTA A) /</p><p>Entrada de clock externo para o Timer 0 / Saída do</p><p>comparador 1.</p><p>7 RA5/AN4/SS</p><p>/HLVDIN/C2OUT</p><p>E/S Entrada/saída de uso geral (bit 5 da PORTA A) /</p><p>Entrada do canal analógico 4 / Selecão para o modo</p><p>SPI escravo / Entrada do módulo de detecção de alta</p><p>tensão / Saída do comparador 2.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 17</p><p>www.acepic.com.br</p><p>8 RE0/RD/AN5 E/S Entrada/saída de uso geral (bit 0 da porta E) / Controle</p><p>de leitura para comunicação paralela / Entrada do</p><p>canal analógico 5.</p><p>9 RE1/WR/AN6 E/S Entrada/saída de uso geral (bit 1 da porta E) / Controle</p><p>de escrita para comunicação paralela / Entrada do</p><p>canal analógico 6.</p><p>10 RE2/CS/AN7 E/S Entrada/saída de uso geral (bit 2 da porta E) / Controle</p><p>de seleção para comunicação paralela / Entrada do</p><p>canal analógico 7.</p><p>11 VDD Alimentação positiva do microcontrolador.</p><p>12 VSS Terra (Referência de alimentação).</p><p>13 OSC1/CLKI/RA7 E/S Entrada do cristal oscilador / Entrada para fonte de</p><p>clock externo / Entrada/saída de uso geral (bit 7 da</p><p>porta A).</p><p>14 OSC2/CLKO/RA6 E/S Saída do cristal oscilador / No Modo RC é configurado</p><p>como saída com ¼ da frequencia de CLKI/</p><p>Entrada/saída de uso geral (bit 6 da porta A).</p><p>15 RC0/T1OSO/</p><p>T13CKI</p><p>E/S Entrada/saída de uso geral (bit 0 da porta C) / Saída do</p><p>oscilador para o TIMER1 / Entrada para clock externo</p><p>para o TIMER1 e TIMER3.</p><p>16 RC1/T1OSI/CCP2 E/S Entrada/saída de</p><p>uso geral (bit 1 da porta C) / Entrada</p><p>do oscilador para o TIMER1 / Entrada para o módulo</p><p>capture2 e saídas para os módulos de compare2 e</p><p>PWM2 (entrada padrão).</p><p>17 RC2/CCP1/P1A E/S Entrada/saída de uso geral (bit 2 da porta C) / Entrada</p><p>para o módulo capture1 e saídas para os módulos</p><p>compare1 e PWM1 / Saída do módulo CCP1</p><p>estendido.</p><p>18 RC3/SCK/SCL E/S Entrada/saída de uso geral (bit 3 da porta C) /</p><p>Entrada/ saída do módulo serial síncrono SPI /</p><p>Entrada/saída do módulo serial síncrona I2C.</p><p>19 RD0/PSP0 E/S Entrada/saída de uso geral (bit 0 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela.</p><p>20 RD1/PSP1 E/S Entrada/saída de uso geral (bit 1 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela.</p><p>21 RD2/PSP2 E/S Entrada/saída de uso geral (bit 2 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela.</p><p>22 RD3/PSP3 E/S Entrada/saída de uso geral (bit 3 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela.</p><p>23 RC4/SDI/SDA E/S Entrada/saída de uso geral (bit 4 da porta C) / Saída de</p><p>dados para o módulo SPI / Entrada/saída de dados</p><p>para o módulo I2C.</p><p>24 RC5/SDO E/S Entrada/saída de uso geral (bit 5 da porta C) / Saída de</p><p>dados para o módulo SPI</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 18</p><p>www.acepic.com.br</p><p>25 RC6/TX/CK E/S Entrada/saída de uso geral (bit 6 da porta C) /</p><p>Transmissão para o módulo assíncrono USART</p><p>estendido / Clock para o módulo síncrono USART</p><p>estendido.</p><p>26 RC7/RX/DT E/S Entrada/saída de uso geral (bit 7 da porta C) /</p><p>recepção para o módulo assíncrono USART estendido</p><p>/ dado para o módulo síncrono USART estendido.</p><p>27 RD4/PSP4 E/S Entrada/saída de uso geral (bit 4 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela.</p><p>28 RD5/PSP5/P1B E/S Entrada/saída de uso geral (bit 5 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela /</p><p>Saída do módulo CCP1 estendido.</p><p>29 RD6/PSP6/P1C E/S Entrada/saída de uso geral (bit 6 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela /</p><p>Saída do módulo CCP1 estendido.</p><p>30 RD7/PSP7/P1D E/S Entrada/saída de uso geral (bit 7 da porta D) /</p><p>Entrada/saída de dados para comunicação paralela /</p><p>Saída do módulo CCP1 estendido.</p><p>31 VSS Terra (Referência de alimentação).</p><p>32 VDD Alimentação positiva do microcontrolador.</p><p>33 RB0/INT0/FLT0/</p><p>AN12</p><p>E/S Entrada/saída de uso geral (bit 0 da porta B) /</p><p>Interrupção externa 0 / Entrada de falha para o</p><p>módulo PWM estendido. / Entrada do canal analógico</p><p>12.</p><p>34 RB1/INT1/AN10 E/S Entrada/saída de uso geral (bit 1 da porta B) /</p><p>Interrupção externa 1 / Entrada do canal analógico 10.</p><p>35 RB2/INT2/AN8 E/S Entrada/saída de uso geral (bit 2 da porta B) /</p><p>Interrupção externa 2 / Entrada do canal analógico 8.</p><p>36 RB3/AN9/CCP2 E/S Entrada/saída de uso geral (bit 3 da porta B) / Entrada</p><p>do canal analógico 9 / Entrada para o módulo</p><p>capture2 e saídas para os módulos de compare2 e</p><p>PWM2 (entrada alternativa).</p><p>37 RB4/KBI0/AN11 E/S Entrada/saída de uso geral (bit 4 da porta B) / Pino de</p><p>interrupção na mudança de estado / Entrada do canal</p><p>analógico 11.</p><p>38 RB5/KBI1/PGM E/S Entrada/saída de uso geral (bit 5 da porta B) / Pino de</p><p>interrupção na mudança de estado / Pino de ativação</p><p>para a programação ICSP em baixa tensão.</p><p>39 RB6/KBI2/PGC E/S Entrada/saída de uso geral (bit 6 da porta B) / Pino de</p><p>interrupção na mudança de estado / Entrada de clock</p><p>para a programação ICSP.</p><p>40 RB7/KBI3/PGD E/S Entrada/saída de uso geral (bit 7 da porta B) / Pino de</p><p>interrupção na mudança de estado / Pino de dados</p><p>para a programação ICSP.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 19</p><p>www.acepic.com.br</p><p>Estrutura interna do PIC 18F4420 e 18F4520</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 20</p><p>www.acepic.com.br</p><p>Oscilador</p><p>No PIC18F4520, podemos encontrar 10 tipos de osciladores que podem ser</p><p>configurados através dos bits de configuração. Estes bits de configuração é conhecido</p><p>como fuses.</p><p>Os tipos de osciladores são:</p><p>LP – Cristal de baixa freqüência;</p><p>XT – Cristal com freqüências intermediárias;</p><p>HS – Cristal de alta freqüência;</p><p>HSPLL – Cristal de alta freqüência com PLL;</p><p>RC – Oscilador RC externo com saída de clock dividido por 4 no pino RA6;</p><p>RCIO – Oscilador RC externo com o pino RA6 como pino de entrada/saída;</p><p>INTIO1 – Oscilador interno com saída de clock no pino RA6 e pino RA7 como</p><p>entrada/saída;</p><p>INTIO2 – Oscilador interno com os pinos RA6 e RA7 como pinos de</p><p>entrada/saída;</p><p>EC – Oscilador externo com entrada de clock no pino RA7 e saída dividida por 4</p><p>no pino RA6;</p><p>ECIO – Oscilador externo com entrada de clock no pino RA7 e com RA6 como</p><p>entrada/saída.</p><p>Nos tipos LP, XT e HS são utilizados oscilador a cristal e a freqüência destes podem ser</p><p>verificadas nos datasheets dos microcontroladores.</p><p>No tipo HSPLL, o sinal de clock é utilizado como sincronismo para um circuito PLL</p><p>(Phase Locked Loop) que gera na saída deste circuito um sinal de 4 vezes a freqüência</p><p>do sinal de referência. Neste caso, é possível, por exemplo que o microcontrolador</p><p>opere em 40MHz utilizando um cristal de 10MHz.</p><p>Nos tipos RC e RCIO são utilizados um circuito RC externo, sendo que para o RC, é</p><p>gerado um sinal no pino RA6 com uma freqüência dividida por 4 da freqüência</p><p>originada pela fonte de clock.</p><p>Nos tipos INTIO1 e INTIO2, o sinal de clock é interno e gerado à partir de um oscilador</p><p>RC interno. O usuário pode escolher clocks de 31,25KHz, 125KHz, 250KHz, 500KHz,</p><p>1MHz, 2MHz, 4 MHz e 8MHz. Os sinal de 4MHz e 8MHz podem ser aplicados ao PLL e</p><p>assim, obter freqüências de 16MHz e 32MHZ, respectivamente. No tipo INTIO1, o sinal</p><p>de clock pode ser obtido no pino RA6.</p><p>Nos tipos EC e ECIO, o microcontrolador receberá um sinal de clock gerado por um</p><p>oscilador externo no pino RA7 e no tipo EC, este sinal dividido por 4 poderá ser obtido</p><p>no pino RA6.</p><p>Os registradores de controle responsáveis pela seleção e controle dos osciladores, são</p><p>OSCTUNE e OSCCON.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 21</p><p>www.acepic.com.br</p><p>RESET</p><p>O PIC18F4520, assim como a linha 18F, possui diversas fontes de reset, conforme</p><p>abaixo:</p><p>POR (Power-on-reset): Quando da detecção da alimentação do</p><p>microcontrolador;</p><p>Nível 0 no pino MCLR;</p><p>Nível 0 no MCLR com o microcontrolador em modo sleep;</p><p>Estouro do Watchdog;</p><p>BOR (Brown-out-reset): Queda de tensão de alimentação;</p><p>Instrução RESET;</p><p>Estouro da pilha.</p><p>Memória</p><p>Os microcontroladores PIC têm basicamente 3 tipos de memórias , sendo estas</p><p>memória de programa, memória de dados e memória EEPROM.</p><p>Na memória de programa são armazenadas as instruções (código do programa). Essa</p><p>memória é do tipo não volátil, ou seja, seus dados</p><p>não serão perdidos se a</p><p>alimentação do microcontrolador for retirada.</p><p>Abaixo segue o mapa da memória de programa para os PIC’s 18F2420/2520/4420/4520.</p><p>A memória de dados é responsável pelos dados dos registradores de funções especiais</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 22</p><p>www.acepic.com.br</p><p>(Special Function Registers – SFR) e também pelos registradores de propósito geral</p><p>(General Purpose Registers – GPR). Esta memória é do tipo volátil, ou seja, os seus</p><p>valores armazenados serão perdidos na retirada de alimentação do microcontrolador.</p><p>Obs.: Os SFRs contém a configuração, controle e status dos periféricos e portas de</p><p>entrada e saída e os GPRs conterá os dados do usuário.</p><p>Logo abaixo, temos o mapa de memória de dados para os PIC’s 18F2520 e 18F4520.</p><p>Abaixo, segue o mapa dos registradores de funções especiais (SFR’s).</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 23</p><p>www.acepic.com.br</p><p>A memória EEPROM que também é do tipo não volátil, permite o armazenamento e</p><p>manipulação de dados.</p><p>Primeiro projeto</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 24</p><p>www.acepic.com.br</p><p>Para o primeiro projeto, vamos utilizar o circuito abaixo, onde faremos os leds</p><p>conectados à PORTA D piscarem em intervalo de 500ms.</p><p>Circuito:</p><p>Antes de inicializarmos a escrita do código fonte, precisamos entender alguns detalhes</p><p>relacionados ao ciclo de máquina e as portas de entrada e saída, assim como a</p><p>configuração dos bits de controle, os chamados ‘fuses’.</p><p>Ciclo de Máquina</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 25</p><p>www.acepic.com.br</p><p>A entrada de clock para o microcontrolador, seja ela interna ou externa, é dividida</p><p>internamente por 4, gerando, assim, 4 fases (Q1, Q2, Q3 e Q4). Internamente, o</p><p>contador de programa (program counter – PC) é incrementado na fase Q1 onde a</p><p>instrução é localizada na memória de programa e carregada no registro de instrução na</p><p>fase Q4, então a instrução é decodificada e executada durante os ciclos Q2, Q3 e Q4.</p><p>Conforme podemos ver acima, cada ciclo de máquina executa duas funções ao mesmo</p><p>tempo, ou seja, ao mesmo tempo em que uma instrução é executada, a próxima</p><p>instrução é localizada e carregada no registro de instrução. A essa tecnologia é dado o</p><p>nome de PIPELINE e que resulta no aumento da velocidade de processamento.</p><p>Sendo assim, para obtermos a freqüência para o cálculo do ciclo, devemos então,</p><p>dividir o sinal de entrada de clock interno ou externo por 4.</p><p>Por exemplo:</p><p>Suponde que contamos com um cristal de 20MHz como fonte de clock para o</p><p>microcontrolador, então teremos:</p><p>Frequência de máquina:</p><p>Ciclo de máquina:</p><p>Portas de I/O</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 26</p><p>www.acepic.com.br</p><p>No PIC18F4520 contamos com 5 portas (A, B, C, D e E) e alguns pinos dessas portas</p><p>podem ter outras funções. De modo geral, quando o pino é utilizado para outra função,</p><p>este não poderá ser utilizado com pino de I/O.</p><p>Cada porta tem 3 registradores para sua correta operação:</p><p>- Registrador TRIS, que é o responsável pelo direcionamento (entrada ou saída) das</p><p>portas, onde se um bit estiver em 0, o pino referente será um pino de saída e se o bit</p><p>estiver em 1, o pino referente será um pino de entrada;</p><p>- Registrador PORT, responsável por escrever ou ler o nível dos pinos associados à</p><p>porta;</p><p>- Registrador LAT, responsável por armazenar o valor do último comando de escrita.</p><p>Registrador TRIS</p><p>O registrador TRIS, como já vimos, é o responsável pelo direcionamento no sentido do</p><p>fluxo de dados de uma determinada porta. Esse registrador possui 8 bits, sendo cada</p><p>bit correspondente a um determinado pino de I/O.</p><p>Podemos identificar os registradores de acesso como TRISA, TRISB, TRISC, TRISD e</p><p>TRISE.</p><p>Podemos ler ou escrever no registrador TRIS, conforme a sintaxe abaixo:</p><p>TRISx = valor;</p><p>Valor = TRISx;</p><p>Onde:</p><p>x: nome da porta (A, B, C, D ou E)</p><p>valor: valor de 8 bits.</p><p>Exemplo:</p><p>Vamos configurar a porta D da seguinte forma: Os pinos 0, 2 e 5 desta porta deverão</p><p>ser configurados como saída e o restante como entrada.</p><p>A sintaxe será conforme abaixo:</p><p>TRISD = 0b11011010;</p><p>Veja na próxima figura a representação dos bits deste registrador.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 27</p><p>www.acepic.com.br</p><p>É possível também acessar apenas um bit do registrador. Por exemplo, queremos</p><p>configurar como entrada ou saída somente um pino de uma determinada porta, então</p><p>podemos utilizar as sintaxes conforme abaixo:</p><p>TRISDbits.TRISD3 = 1; //Configura como entrada somente o pino 3 da porta D</p><p>TRISDbits.TRSID5 = 0; //Configura como saída somente o pino 5 da porta D</p><p>TRISBbits.TRISB0 = 1; //Configura como entrada somente o pino 0 da porta B</p><p>TRISCbits.TRISC4 = 0; //Configura como saída somente o 4 da porta C</p><p>Registrador PORT</p><p>O registrador PORT, assim como informado antes, é o responsável por informar o</p><p>estado dos pinos de uma porta. Este registrador também é de 8 bits e através dele é</p><p>possível escrever ou ler os pinos de uma determinada porta.</p><p>Sintaxe:</p><p>PORTx = valor;</p><p>valor = PORTx;</p><p>Onde:</p><p>x: Nome da porta (A, B, C, D ou E);</p><p>valor: valor de 8 bits;</p><p>Exemplo:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 28</p><p>www.acepic.com.br</p><p>Configurando todos os pinos da porta D como saída (TRISD = 0b00000000) e fazendo:</p><p>PORTD = 0b01001010;</p><p>É possível verificarmos os níveis de tensão na porta D conforme mostra a figura abaixo:</p><p>Assim como no registrador TRIS, é possível selecionar apenas um bit do registrador</p><p>PORT.</p><p>Exemplo:</p><p>PORTBbits.RD4 = 1; //Somente o pino 4 da porta B terá nível de tensão = VCC.</p><p>PORTEbits.RE2 = 0;</p><p>//Somente o pino 0 da porta E terá nível de tensão = 0V.</p><p>Configuração do PIC18F4520</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 29</p><p>www.acepic.com.br</p><p>Antes de iniciar na programação do código do programa, é preciso fazer a configuração</p><p>do microcontrolador para que ele funcione de acordo com a necessidade do usuário.</p><p>A configuração dos bits de controle para o PIC 18F4520 pode ser feita diretamente no</p><p>MPLAB (Configure -> Configure Bits) ou através da diretiva #pragma config.</p><p>Através dos bits de controle é possível configurar o tipo de oscilador, o watchdog,</p><p>proteção de código, master clear, etc.</p><p>Cada microcontrolador tem seus bits de controle específicos e estes podem ser vistos</p><p>no help do MPLAB em Help -> Topics -> PIC18 Config Settings.</p><p>Ao abrir o help de configuração, escolha o microcontrolador que deseja configurar na</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 30</p><p>www.acepic.com.br</p><p>lista configuration settings à esquerda.</p><p>Abaixo pode-se verificar a lista de configurações para o PIC 18F4520.</p><p>Oscilador</p><p>OSC LP Oscilador LP</p><p>XT Oscilador XT</p><p>HS Oscilador HS</p><p>RC Oscilador RC externo, pino RA6 configurado como CLK0.</p><p>EC Clock externo</p><p>ECIO6 Clock externo, pino RA6 configurado como I/O</p><p>HSPLL Oscilador HS com PLL habilitado</p><p>RCIO6 Oscilador RC externo, pino RA6 configurado como I/O</p><p>INTIO67 Oscilador interno, pinos RA6 e RA7 configurados como</p><p>I/O.</p><p>INTIO7 Oscilador interno, pino RA6 configurado como CLK0 e</p><p>pino RA7 configurado como I/O.</p><p>Monitoramento do sinal de clock</p><p>FCMEN OFF Desabilita o monitoramento do sinal de clock</p><p>ON Habilita o monitoramento do sinal de clock</p><p>Mudança do oscilador interno/externo</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 31</p><p>www.acepic.com.br</p><p>IESO OFF Desabilita a mudança do oscilador interno/externo</p><p>ON Habilita a mudança do oscilador interno/externo</p><p>Power-up Timer (PWRT)</p><p>PWRT ON Habilita o Power-up Timer</p><p>OFF Desabilita o Power-up Timer</p><p>Brown-out Reset (BOR)</p><p>BOREN OFF Brown-out desabilitado em hardware e software</p><p>ON Brown-out habilitado e controlado por software</p><p>NOSLP Brown-out habilitado em hardware e dasabilitado em</p><p>modo sleep.</p><p>SBORDIS Brown-out habilitado somente em hardware</p><p>Tensão do Brown-out Reset (BORV)</p><p>BORV 0 Aproximadamente 4,59V</p><p>1 Aproximadamente 4,33V</p><p>2 Aproximadamente 2,79V</p><p>3 Aproximadamente 2,05V</p><p>Watchdog Timer</p><p>WDT OFF Watchdog desabilitado</p><p>ON Watchdog habilitado</p><p>Seleção do postcaler para o Watchdog Timer</p><p>WDTPS 1 1:1</p><p>2 1:2</p><p>4 1:4</p><p>8 1:8</p><p>16 1:16</p><p>32 1:32</p><p>64 1:64</p><p>128 1:128</p><p>256 1:256</p><p>512 1:512</p><p>1024 1:1024</p><p>2048 1:2048</p><p>4096 1:4096</p><p>8192 1:8192</p><p>16384 1:16384</p><p>32768 1:32768</p><p>Master Clear Reset (MCLR)</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 32</p><p>www.acepic.com.br</p><p>MCLRE OFF Desabilita o MCLR e habilita o pino RE3 como entrada</p><p>ON Habilita o MCLR e desabilita o pino RE3 como entrada</p><p>Oscilador Low-Power do TIMER1</p><p>LPT1OSC OFF Timer1 configurado para operação em alto potência</p><p>ON Timer1 configurado para operação em baixa potência</p><p>Conversores A/D da porta B</p><p>PBADEN OFF Configura os pinos RB0, RB1, RB2, RB3 e RB4 como pinos</p><p>de entrada/saída de uso geral</p><p>ON Configura os pinos RB0, RB1, RB2, RB3 e RB4 como canais</p><p>de entrada analógico AN12, AN10, AN8, AN9 e AN11,</p><p>respectivamente</p><p>Multiplexação do pino do módulo CCP2</p><p>CCP2MX OFF Define o pino RB3 como pino de entrada/saída a ser</p><p>utilizado pelo módulo CCP2</p><p>ON Define o pino RC1 como pino de entrada/saída a ser</p><p>utilizado pelo módulo CCP2</p><p>Reset por Stack Full/Underflow</p><p>STVREN OFF Desabilita o Reset por Stack Full/Underflow</p><p>ON Habilita o Reset por Stack Full/Underflow</p><p>Programação por baixa tensão (ICSP)</p><p>LVP OFF Desabilita a programação por baixa tensão</p><p>ON Habilita a programação por baixa tensão</p><p>Instruções estendidas</p><p>XINST OFF Set de instruções estendido e modo de endereçamento</p><p>indexado desabilitado</p><p>ON Set de instruções estendido e modo de endereçamento</p><p>indexado habilitado</p><p>In-Circuit debugger</p><p>DEBUG ON Debugger habilitado, pinos RB6 e RB7 dedicados ao In-</p><p>Circuit debugger</p><p>OFF Debugger desabilitado, pinos RB6 e RB7 configurados</p><p>como pinos de entrada/saída</p><p>Proteção do código no bloco 0</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 33</p><p>www.acepic.com.br</p><p>CP0 ON Código no bloco 0 (000800-001FFFh) protegido</p><p>OFF Código no bloco 0 não protegido</p><p>Proteção do código no bloco 1</p><p>CP1 ON Código no bloco 1 (002000-003FFFh) protegido</p><p>OFF Código no bloco 1 não protegido</p><p>Proteção do código no bloco 2</p><p>CP2 ON Código no bloco 2 (004000-005FFFh) protegido</p><p>OFF Código no bloco 2 não protegido</p><p>Proteção do código no bloco 3</p><p>CP3 ON Código no bloco 3 (006000-007FFFh) protegido</p><p>OFF Código no bloco 3 não protegido</p><p>Proteção do código no bloco boot</p><p>CPB ON Código no bloco boot (000000-007FFFh) protegido</p><p>OFF Código no bloco 0 não protegido</p><p>Proteção do código na EEPROM</p><p>CDP ON Código na EEPROM protegido</p><p>OFF Código na EEPROM não protegido</p><p>Proteção de escrita no bloco 0</p><p>WRT0 ON Proteção de escrita no bloco 0 (000800-001FFFh)</p><p>habilitada</p><p>OFF Proteção de escrita no bloco 0 não habilitada</p><p>Proteção de escrita no bloco 1</p><p>WRT1 ON Proteção de escrita no bloco 1 (002000-003FFFh)</p><p>habilitada</p><p>OFF Proteção de escrita no bloco 1 não habilitada</p><p>Proteção de escrita no bloco 2</p><p>WRT2 ON Proteção de escrita no bloco 2 (004000-005FFFh)</p><p>habilitada</p><p>OFF Proteção de escrita no bloco 2 não habilitada</p><p>Proteção de escrita no bloco 3</p><p>WRT3 ON Proteção de escrita no bloco 3 (006000-007FFFh)</p><p>habilitada</p><p>OFF Proteção de escrita no bloco 3 não habilitada</p><p>Proteção de escrita no bloco boot</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 34</p><p>www.acepic.com.br</p><p>WRTB ON Proteção de escrita no bloco boot (000000-007FFFh)</p><p>habilitada</p><p>OFF Proteção de escrita no bloco 0 não habilitada</p><p>Proteção de escrita no registrador de configuração</p><p>WRTC ON Proteção de escrita no registrador</p><p>de configuração</p><p>(300000-30000FFh) habilitada</p><p>OFF Proteção de escrita no registrador de configuração não</p><p>habilitada</p><p>Proteção de escrita na EEPROM</p><p>WRTD ON Proteção de escrita na EEPROM habilitada</p><p>OFF Proteção de escrita na EEPROM não habilitada</p><p>Proteção de leitura da tabela no bloco 0</p><p>EBTR0 ON Bloco 0 (000800-001FFFh) protegido contra comando de</p><p>leitura da tabela executado por outro bloco</p><p>OFF Proteção não habilitada</p><p>Proteção de leitura da tabela no bloco 1</p><p>EBRT1 ON Bloco 1 (002000-003FFFh) protegido contra comando de</p><p>leitura da tabela executado por outro bloco</p><p>OFF Proteção não habilitada</p><p>Proteção de leitura da tabela no bloco 2</p><p>EBRT2 ON Bloco 2 (004000-005FFFh) protegido contra comando de</p><p>leitura da tabela executado por outro bloco</p><p>OFF Proteção não habilitada</p><p>Proteção de leitura da tabela no bloco 3</p><p>EBRT3 ON Bloco 3 (006000-007FFFh) protegido contra comando de</p><p>leitura da tabela executado por outro bloco</p><p>OFF Proteção não habilitada</p><p>Proteção de leitura da tabela no bloco boot</p><p>EBRTB ON Bloco boot (000000-007FFFh) protegido contra comando</p><p>de leitura da tabela executado por outro bloco</p><p>OFF Proteção não habilitada</p><p>Exemplo:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 35</p><p>www.acepic.com.br</p><p>#pragma config FOSC = HS //Oscilador de 8MHZ utilizado nos projetos</p><p>#pragma config WDT = OFF //Desabilita o Watchdog Timer</p><p>#pragma config PWRT = ON //Habilita Power-up Timer</p><p>#pragma config BOREN = ON //Habilita Brown-out reset</p><p>#pragma config BORV = 1 //Tensão de Brown-out é de 4,33V</p><p>#pragma config PBADEN = OFF //RB0, RB1, RB2, RB3 e RB4 como entrada/saída</p><p>#pragma config LVP = OFF //Desabilita programação por baixa tensão</p><p>Power-up Timer (PWRT)</p><p>O Power-up Timer faz com que o microcontrolador comece a operar em 72ms após a</p><p>sua alimentação, garantindo, assim a estabilização na fonte de aliementação.</p><p>Brown-out Reset (BOR) – BOREN</p><p>Quando habilitado, o BOR força um reset no microcontrolador caso a tensão de</p><p>alimentação caia para um valor menor do que o especificado e, BORV (Brow-out resete</p><p>voltage – Tensão de Brow-out) em um tempo maior de 100us.</p><p>BORV Tensão(V)</p><p>0 4,59</p><p>1 4,33</p><p>2 2,79</p><p>3 2,11</p><p>Criando o projeto no MPLAB</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 36</p><p>www.acepic.com.br</p><p>Antes de escrevermos o código do programa, precisamos criar um projeto no MPLAB</p><p>conforme segue abaixo:</p><p>Com o programa MPLAB aberto, selecione ‘Project’ no menu principal e escolha a</p><p>opção ‘Project Wizard’.</p><p>Será mostrada uma tela de boas vindas, clique em ‘Avançar’.</p><p>Neste primeiro passo, escolheremos o microcontrolador a ser utilizado, no caso o</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 37</p><p>www.acepic.com.br</p><p>PIC18F4520. Após a seleção, clique em ‘Anvançar’.</p><p>No segundo passo, selecionaremos o conjunto de ferramentas de compilação. Então,</p><p>escolheremos a opção ‘Microchip C18 Toosuite’. Logo em seguida, clique em ‘Avançar’.</p><p>No terceiro passo, informaremos o diretório onde será armazenado o projeto que</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 38</p><p>www.acepic.com.br</p><p>estamos criando, portanto, nesta tela, clique em ‘Browse’.</p><p>Em seguida, escolha o diretório onde pretende armazenar o projeto, dê um nome a ele</p><p>(não precisa colocar a extensão) e clique em ‘Salvar’.</p><p>Logo em seguida, clique em ‘Avançar’.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 39</p><p>www.acepic.com.br</p><p>No próximo passo, nos é solicitado a inclusão de algum arquivo ao nosso projeto,</p><p>porém como estamos começando a criação de um projeto, não temos nenhum arquivo</p><p>a ser associado ao projeto. Clique em ‘Avançar.</p><p>Bem, então agora temos o nosso projeto criado e esta tela mostra o resumo do que</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 40</p><p>www.acepic.com.br</p><p>acabamos de criar. Basta clicar em ‘Concluir’.</p><p>Agora devemos escrever o código fonte, salvá-lo e acrescentar ao projeto. Para isso,</p><p>clique em ‘File’ no menu principal e escolha a opção ‘New’.</p><p>Será mostrada esta tela que é, justamente, onde escreveremos o código do programa</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 41</p><p>www.acepic.com.br</p><p>fonte.</p><p>Escreva o código abaixo:</p><p>#include <p18F4520.h></p><p>#include<delays.h> //Inclui a biblioteca de delays</p><p>// Frequencia do oscilador = 8MHz</p><p>// Ciclo de máquina = 1/(Fosc/4) = 0,5us</p><p>#pragma config OSC = HS //Configura o oscilador a cristal</p><p>#pragma config WDT = OFF //Desabilita o Watchdog Timer (WDT).</p><p>#pragma config PWRT = ON //Habilita o Power-up Timer (PWRT).</p><p>#pragma config BOREN = ON //Habilita Brown-out reset</p><p>#pragma config BORV = 1 //Tensão do BOR é 4,33V.</p><p>#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital.</p><p>#pragma config LVP = OFF //Desabilita o Low Voltage Program.</p><p>void main()</p><p>{</p><p>TRISD = 0b00000000; //Direciona todos os bits da porta D como saída</p><p>while(1)</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 42</p><p>www.acepic.com.br</p><p>{</p><p>PORTD = 0b11111111; /*Faz todos os pinos da porta D igual a 1,</p><p>acendendo os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>PORTD = 0b00000000; /*Faz todos os pinos da porta D igual a 0,</p><p>apagando os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>}</p><p>}</p><p>Salve o código e, agora, não devemos esquecer da extensão ‘*.c’. Veja o exemplo</p><p>abaixo, onde o arquivo será salvo com o nome ‘pisca_led.c’.</p><p>Após salvar o código fonte, clique com o botão direito do mouse em ‘Source Files’ que</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 43</p><p>www.acepic.com.br</p><p>está na janela do projeto. Logo em seguida clique em ‘Add Files’.</p><p>Procure o arquivo que acabou de salvar e em seguida clique em ‘Abrir’.</p><p>A figura abaixo mostra o arquivo ‘pisca_led.c’ adicionada ao projeto.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 44</p><p>www.acepic.com.br</p><p>Antes de compilarmos o projeto, é necessário informar o caminho em que se encontra</p><p>os arquivos das bibliotecas para que o compilador funcione adequadamente.</p><p>Para isso, no menu principal, clique em ‘Project’ e escolha a opção ‘Build options...’,</p><p>logo em seguida clique em ‘Project’.</p><p>Na janela que abrirá, na aba ‘Directories’, escolha ‘Library Search Path’, conforme</p><p>abaixo e, em seguida, clique no botão ‘New’.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 45</p><p>www.acepic.com.br</p><p>Agora clique no botão com os três pontinhos que acabou de abrir.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 46</p><p>www.acepic.com.br</p><p>Procure a pasta ‘lib’ que está em “C:\MCC18” e clique em ‘OK’.</p><p>Clique em ‘Aplicar’ e logo em seguida em ‘OK’.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 47</p><p>www.acepic.com.br</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 48</p><p>www.acepic.com.br</p><p>Agora, basta compilarmos o projeto. Clique no menu principal em ‘Project’ e escolha a</p><p>opção ‘Make’ ou pressione a tecla ‘F10’ para compilar.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 49</p><p>www.acepic.com.br</p><p>Aqui está o resultado da compilação. Deverá ser mostrada a mensagem ‘BUILD</p><p>SUCEEDED’.</p><p>OBS.: Se a mensagem mostrada for ‘BUILD ERROR’, então reveja os passos para criação</p><p>do projeto e o código que você escreveu.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 50</p><p>www.acepic.com.br</p><p>Entendendo o código.</p><p>Na primeira linha do programa, utilizamos a diretiva #include. Esta diretiva faz a</p><p>inclusão de um arquivo ao projeto. Neste caso, estamos incluindo a biblioteca do PIC</p><p>18F4520 ao projeto. O arquivo p18F4520.h é chamado de ‘header’ (cabeçalho) e nele</p><p>temos funções e estruturas para o tratamento dos registradores.</p><p>#include <p18F4520.h></p><p>Em seguida fazemos a configuração dos bits de controle do microcontrolador. Esta</p><p>configuração será a forma como o microcontrolador trabalhará.</p><p>#pragma config OSC = HS //Configura o oscilador a cristal</p><p>#pragma config WDT = OFF //Desabilita o Watchdog Timer (WDT).</p><p>#pragma config PWRT = ON //Habilita o Power-up Timer (PWRT).</p><p>#pragma config BOREN = ON //Habilita Brown-out reset</p><p>#pragma config BORV = 1 //Tensão do BOR é 4,33V.</p><p>#pragma config PBADEN = OFF //RB0,1,2,3 e 4 configurado como I/O digital.</p><p>#pragma config LVP = OFF //Desabilita o Low Voltage Program.</p><p>Temos então:</p><p>Conectado ao microcontrolador, temos um cristal de 8MHz, então configuramos o</p><p>oscilador como ‘HS’ (oscilador à cristal de alta velocidade).</p><p>Desabilitamos o temporizador ‘watchdog’ (WDT = OFF);</p><p>Habilitamos a função que informa ao PIC que ele deve começar a rodar o programa</p><p>após 72ms de sua energização (PWRT = ON).</p><p>Habilitamos também o ‘Brown-out reset’ (BOREN = ON) e também definimos a tensão</p><p>de ‘Brown-out’ (BORV=1). Assim, se a tensão de alimentação para o PIC for menor do</p><p>que mais ou menos 4,3V, o microcontrolador será resetado.</p><p>Em seguia informamos que os pinos RB0, RB1, RB2 e RB3 deverão ser configurados</p><p>como portas de entrada e saída.</p><p>Finalizamos desabilitando a função de programação por baixa tensão.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 51</p><p>www.acepic.com.br</p><p>Após a configuração dos bits de controle, temos a função principal. Esta função deve</p><p>sempre existir e, através dela, faremos as configurações dos registradores e chamadas</p><p>para outras funções.</p><p>void main()</p><p>{</p><p>TRISD = 0b00000000; //Direciona todos os bits da porta D como saída</p><p>while(1)</p><p>{</p><p>PORTD = 0b11111111; /*Faz todos os pinos da porta D igual a 1,</p><p>acendendo os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>PORTD = 0b00000000; /*Faz todos os pinos da porta D igual a 0,</p><p>apagando os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>}</p><p>}</p><p>A primeira instrução desta função informa faz com que todos os bits do registrador</p><p>TRISD sejam levados a ‘0’. Assim, estamos configurando toda a PORTA D como saída.</p><p>TRISD = 0b00000000; //Direciona todos os bits da porta</p><p>D como saída</p><p>Em seguida, utilizamos a declaração de controle ‘while’ e utilizamos com expressão o</p><p>valor 1. Essa declaração, como vista antes, faz com que sejam executados os comandos</p><p>dentro de suas chaves, enquanto a expressão for verdadeira. Neste caso, a expressão</p><p>sendo igual a 1, ela será sempre verdadeira, então os comandos dentro das chaves</p><p>serão executados infinitamente. É o que chamamos de ‘loop infinito’ ou ainda ‘loop</p><p>principal’.</p><p>Este loop também deve sempre existir, pois a falta deste faz com que o contador de</p><p>programa vá se incrementando e ao chegar na posição máxima de memória do</p><p>microcontrolador, este será resetado.</p><p>while(1)</p><p>{</p><p>PORTD = 0b11111111; /*Faz todos os pinos da porta D igual a 1,</p><p>acendendo os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>PORTD = 0b00000000; /*Faz todos os pinos da porta D igual a 0,</p><p>apagando os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>}</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 52</p><p>www.acepic.com.br</p><p>Funções de atraso (Delay)</p><p>As funções de atraso (delay) geram um atraso no processamento do programa e este</p><p>atraso é baseado no ciclo de máquina.</p><p>Para utilizar as funções de atraso, é necessário a inclusão do arquivo “delays.h” através</p><p>da diretiva “#include”</p><p>Temos 5 opções de função de atraso, conforme seguem:</p><p>Delay1TCY() – Gera um atraso de 1 ciclo de máquina;</p><p>Delay10TCYx(valor) – Gera um atraso de 10 vezes o conteúdo do argumento ‘valor’.</p><p>Este argumento deve ter o tamanho máximo de 8 bits (0-255). O valor ‘0’ fará com que</p><p>o atraso gerado seja de 256 x 10 = 2560.</p><p>Ex.:</p><p>Delay10TCYx(152); //gera atraso de 1520 ciclos de máquina</p><p>Delay10TCYx(0); //gera atraso de 2560 ciclos de máquina</p><p>Delay100TCYx(valor) – Gera um atraso de 100 vezes o conteúdo do argumento ‘valor’.</p><p>Este argumento deve ter o tamanho máximo de 8 bits (0-255). O valor ‘0’ fará com que</p><p>o atraso gerado seja de 256 x 100 = 25600.</p><p>Ex.:</p><p>Delay100TCYx(123); //gera atraso de 12300 ciclos de máquina</p><p>Delay100TCYx(0); //gera atraso de 25600 ciclos de máquina</p><p>Delay1KTCYx(valor) - Gera um atraso de 1000 vezes o conteúdo do argumento ‘valor’.</p><p>Este argumento deve ter o tamanho máximo de 8 bits (0-255). O valor ‘0’ fará com que</p><p>o atraso gerado seja de 256 x 1000 = 256000.</p><p>Ex.:</p><p>Delay1KTCYx(56); //gera atraso de 56000 ciclos de máquina</p><p>Delay1KTCYx(0); //gera atraso de 256000 ciclos de máquina</p><p>Delay10KTCYx(valor) - Gera um atraso de 10000 vezes o conteúdo do argumento</p><p>‘valor’. Este argumento deve ter o tamanho máximo de 8 bits (0-255). O valor ‘0’ fará</p><p>com que o atraso gerado seja de 256 x 10000 = 2560000.</p><p>Ex.:</p><p>Delay10KTCYx(64); //gera atraso de 640000 ciclos de máquina</p><p>Delay10KTCYx(0); //gera atraso de 2560000 ciclos de máquina</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 53</p><p>www.acepic.com.br</p><p>Para gerar um atraso de 100ms e supondo a utilização de um cristal de 8MHZ:</p><p>Ciclo de máquina = 1 / (Fosc/4) = 1 / (8M/4) = 0,5us</p><p>Conclui-se que o número de ciclos de máquina necessários para um atraso de 100ms:</p><p>Ciclos de máquina100ms = 100ms / 0,5us = 200000;</p><p>Este valor, 200000, é múltiplo de 1000, portanto utilizaremos a função:</p><p>Delay1KTCYx(200); //gera atraso de 100ms com cristal de 8MHz</p><p>Atraso de 500ms com um cristal de 8MHz:</p><p>Ciclos de máquina500ms = 500ms / 0,5us = 1000000</p><p>O valor 1000000 é múltiplo de 10000, assim, a função será Delay:</p><p>Delay10KTCYx(100); //gera atraso de 500ms com cristal de 8MHz</p><p>#include <delays.h></p><p>void main()</p><p>{</p><p>TRISD = 0b00000000; //Direciona todos os bits da porta D como saída</p><p>while(1)</p><p>{</p><p>PORTD = 0b11111111; /*Faz todos os pinos da porta D igual a 1,</p><p>acendendo os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>PORTD = 0b00000000; /*Faz todos os pinos da porta D igual a 0,</p><p>apagando os leds*/</p><p>Delay10KTCYx(100); //Gera um delay de 500ms</p><p>}</p><p>}</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 54</p><p>www.acepic.com.br</p><p>Comentários.</p><p>Note que podemos escrever o que acontece em cada linha do programa colocando-se</p><p>duas barras (‘//’) antes do comentário. O conteúdo que estiver após as barras, não será</p><p>interpretado pelo compilador, ou seja, não será compilado.</p><p>Para escrevermos um comentário mais longo com mais de uma linha podemos</p><p>inicializar com o símbolo ‘/*’ e após finalizar o comentário, colocamos o símbolo ‘*/’</p><p>Ex.:</p><p>//Este é um comentário de uma linha</p><p>/*Este comentário também pode ter mais de uma linha e com os símbolos do</p><p>início, podemos escrever o conteúdo e finalizar com os símbolos */</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 55</p><p>www.acepic.com.br</p><p>Gravando o microcontrolador</p><p>Instalação do WinPic800</p><p>-Instale o programa WINPIC800 que está na pasta \Programas\WinPic.</p><p>Abrindo o arquivo WinPic800_V3_62.exe, será mostrada o seguinte quadro:</p><p>Escolha English (English) e clique em Next, depois configuraremos a lingua portuguesa,</p><p>aparecerá então:</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 56</p><p>www.acepic.com.br</p><p>Escolha o diretório para instalação e clique em Start. A seguinte tela será apresentada:</p><p>Se quiser criar um atalho na área de trabalho, deixe marcado como está e clique em</p><p>Ok. A tela seguinte aparecerá:</p><p>Clique em Next para a próxima tela:</p><p>Pronto, basta clicar em Ok e o programa estará instalado.</p><p>Microcontroladores PIC 18F4520 – Linguagem C</p><p>Compilador C18</p><p>______________________________________________________________________</p><p>______________________________________________________________________</p><p>ACEPIC tecnologia e Treinamento LTDA. P á g i n a | 57</p><p>www.acepic.com.br</p><p>Abra o programa e vamos configurar a linguagem.</p><p>Clique em “Language” e escolha Portugues_BR</p><p>Configuração para o gravador utilizado</p><p>-Clique em Opções</p>

Mais conteúdos dessa disciplina