Académique Documents
Professionnel Documents
Culture Documents
1. O microcontrolador: 4. O Compilador:
Um microcontrolador (também denominado MCU) é O nome "compilador" é usado principalmente para os
um computador-num-chip, contendo um processador, programas que traduzem o código fonte de
memória e periféricos de entrada/saída. uma linguagem de programação de alto nível para
É um microprocessador que pode ser programado para uma linguagem de programação de baixo nível.
funções específicas, em contraste com outros Utilizamos o XC8, também da Microchip, por ser
microprocessadores de propósito geral (como os gratuito e de fácil utilização.
utilizados nos PCs). Eles são embarcados no interior
de algum outro dispositivo (geralmente um produto 5. Arquivos de Cabeçalho ou Bibliotecas:
comercializado) para que possam controlar as funções São arquivos .h com codigos criados para implementar
ou ações do produto. Um outro nome para o algumas funções ou ativa-las no microcontrolador.
microcontrolador, portanto, é controlador embutido. Muitos destes arquivos ja estão disponíveis quando
instalamos o compilador, mas podemos criar funções e
2. O microcontrolador PIC: utilizalas como arquivos de cabeçalho.
Os PIC são uma família Uma destas funções é a de configuração do PIC para
de microcontroladores fabricados pela Microchip utilização. Esta função foi disponibilizada pelo
Technology, que processam dados de 8 bits, de 16 bits professor da disciplina e encontra-se disponível em seu
e, mais recentemente, de 32 bits. Seu nome é oriundo blog e também no meu.
de "Programmable Interface Controller" (Controlador de #include "C:\headers\fuses\config_PIC18F4550.h"
Interface Programável). Contam com extensa //configura os fuses do pic
variedade de modelos e periféricos internos. Deve ser indicado o endereço onde se encontra a
função.
3. A IDE: #include <stdio.h> // entradas e saidas padrão do C
Utilizamos na disciplina a IDE MPLAB X, da Microchip, #include <stdlib.h> // não lembro quais funções são
que podemos obter gratuitamente atravez do site da liberadas
propria fabricante. Estas outras duas bibliotecas são mais conhecidas
IDE significa Integrated Development Evironment, ou pois também as utilizamos em Informática Básica.
seja Ambiente de Desenvolvimento Integrado. #include <p18f4550.h>// header especifico do 4550
#include <pic18.h>// header da familia 18
IC Salgado
SM1 - Parobé
IC Salgado
SM1 - Parobé
return (EXIT_SUCCESS); /*
} * Tentativa de ajuda
IC Salgado
SM1 - Parobé
Outra mania que tenho, e que acho válida é compilar o #include "adc.h" //conversor analógico digital
programa toda hora, para saber se tem algo errado no #include "C:\headers\fuses\config_PIC18F4550.h"
codigo que escrevi, fica mais facil de achar um erro se //configura os fuses do pic
você precisar verificar menos alterações entre cada #include "C:\headers\lcd\biblioteca_lcd_2x16.h"
compilação. //biblioteca padrão do lcd no PORTD
Para compilar um programa no MPLAB podemos clicar
no martelinho na barra superior de ferramentas ou no #include <xc.h> //não sei pq, mas tava no exemplo do
martelinho com a vassoura, ao lado do anterior. professor de interrupções
IC Salgado
SM1 - Parobé
12. Simulação:
#define Fosc 20 //define frequencia do oscilador Para simularmos esse programa na prática usaremos o
Software ISIS – PROTEUS, esse programa não é
#define led PORTAbits.RA0 //atribui a palavra led ao gratuito então é preciso compra-lo ou procurar
pino RA0 ‘soluções’ na internet.
- Em ‘devices’ clicamos no botão ‘P’ e procuramos pelo
/* PIC18F4550 e um LED – BLUE, ou de outra cor
* Tentativa de ajuda qualquer;
*/ - Clique duas vezes no componente encontrado e ele
aparecerá na barra de ferramentas lateral, depois
feche a janela de busca de componentes;
int main() - Clique em cima do componente desejado e depois
{ clique na area quadriculada o componente ira aparecer
TRISAbits.RA0 = 0x00; //define o pino RA0 como como sombra e com mais um clique ele fica onde for
saida desejado;
OpenADC (0x00, 0x00, ADC_0ANA);//Algo do - Posicione os componentes dentro do bloco quadrado
conversor analógico digital que aparece;
CloseADC ( );//só consigo usar os pinos AN com - Em ‘Terminals’ selecione ‘POWER’ e coloque proximo
isso do pino 1 do PIC (MCLR) e ‘GROUND’ proximo do
while(1) catodo do LED;
{ - Agora ligue os pontos entre os terminais;
led = 1; //atribui o valor 1 ao led que esta - Após, clique com o botão direito no POWER e em
conectado no pino RA0, este valor significa nivel alto string digite +5v;
} - Na simulação não é necessário o uso de resistores
limitadores de corrente para o led, mas na prática é
return (EXIT_SUCCESS); obrigatório o uso.
} - Agora vamos colocar o codigo HEX compilado dentro
do PIC clicando com o botão direito em cima do PIC,
Agora tente alterar os pinos e os ports para ligar este em Edit Properties, na pastinha ao lado de Program
led. File, depois encontre o programa com extensão .hex,
selecione e pronto, é só dar OK;
- Clique no Play e o LED deverá Acender.
IC Salgado
SM1 - Parobé
15. Prática 3 – Liga led com botão: #define led PORTAbits.RA0 //atribui a palavra led ao
O seguinte codigo liga o led quando o botão está pino RA0
ligado. Lembrando que o LED deve ser configurado #define botao PORTAbits.RA1 // atribui a palavra botão
como saida e o botão deve ser configurado como ao pino RA1
entrada. /*
/* * Tentativa de ajuda
* File: tutorial.c */
* Author: ICSalgado
* int main()
* Created on 16 de Novembro de 2013, 04:38 {
*/ TRISAbits.RA0 = 0x00; //define o pino RA0 como
saida
IC Salgado
SM1 - Parobé
TRISAbits.RA1 = 0xFF; // define RA1 como entrada * Created on 16 de Novembro de 2013, 04:38
OpenADC (0x00, 0x00, ADC_0ANA);//Algo do */
conversor analógico digital
CloseADC ( );//só consigo usar os pinos AN com #include <stdio.h> // entradas e saidas padrão do C
isso #include <stdlib.h> // não lembro quais funções são
while(1) liberadas
{
while(botao == 1) #include <p18f4550.h>// header especifico do 4550
{ #include <pic18.h>// header da familia 18
led = 1; //atribui o valor 1 ao led que esta
conectado no pino RA0, este valor significa nivel alto #include <delays.h>//Aciona a biblioteca de delay real
}
led = 0; // desliga o led #include "adc.h" //conversor analógico digital
} #include "C:\headers\fuses\config_PIC18F4550.h"
//configura os fuses do pic
return (EXIT_SUCCESS); #include "C:\headers\lcd\biblioteca_lcd_2x16.h"
} //biblioteca padrão do lcd no PORTD
16. Interrupções: #include <xc.h> //não sei pq, mas tava no exemplo do
As interrupções são funções que tem prioridade maior professor de interrupções
do que o codigo que esta rodando, quando ela é
chamado o programa para a execução do codigo #define Fosc 20 //define frequencia do oscilador
principal e executa a rotina de interrupção, ao fim desta
o programa volta ao codigo principal. #define led PORTAbits.RA0 //atribui a palavra led ao
Elas podem ser de alta e baixa prioridade e existem pino RA0
pinos especificos para as interrupções externas. #define ledint1 PORTAbits.RA1 // atribui a palavra
O seguinte programa implementa interrupções de alta ledint1 ao pino RA1
e baixa prioridade. #define ledint2 PORTAbits.RA2 // atribui a palavra
/* ledint2 ao pino RA2
* File: tutorial.c
* Author: ICSalgado #define int1 PORTBbits.RB1 // define RB1 como botão
* de interrupção
IC Salgado
SM1 - Parobé
led = 0;
void config_int2(void) { tempo(1);
INTCON3bits.INT2IE = 1; // Ativa a inerrupção }
externa INT2 (RB2)
INTCON3bits.INT2IF = 0; // Limpa o flag bit da return (EXIT_SUCCESS);
interrupção externa INT2 }
INTCON3bits.INT2IP = 0; // Define como "Baixa
prioridade"
INTCON2bits.INTEDG2 = 0; // Interrupção externa
INT2 na borda de descida
}
int main()
{
TRISA = 0x00; //define PORTA como saida
TRISB = 0xFF; //define PORTB como entrada