Vous êtes sur la page 1sur 65

Prof.

Pedro Pedrosa
h"p://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4227622E1    
pedrosarf@ifce.edu.br
Prof. Pedro Pedrosa
Ø  Hardware

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware

22  pinos  E/S  
Digitais  (1  bit)  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware

Porta  A  
E/S  Digital  (8  bits)  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware

Porta  B  
E/S  Digital  (8  bits)  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware

Porta  C  
E/S  Digital  (8  bits)  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
+5V   1k 2 Ω  
B7  
A0   B6  
A1   B5  
A2   B4  
A3   B3  
A4   B2  
A5   B1  
B0   +5V  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
A1   B5  
Alimentação  
A2   B4  
A3   B3  
(  20=+5V  A4  
e  19=0V  )  B2  
A5   B1  
B0   +5V  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
A1  
A2  
B5  
B4   Reset  
A3   Inicia  o  programa  
B3  
A4   B2  
A5   B1  
B0   +5V  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
A1   B5  
A2   B4  
A3   B3  
A4   B2  
A5   B1  
B0  
Oscilador  
+5V  
Geração  de  clock  
A6  
C0   C7  
C1   C6  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
A1   B5  
A2   B4  
A3   B3  
A4   B2  
A5   B1  
B0   +5V  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  

1  –  Faltando  um  destes  componentes  o  MCU  não  funcionará  independente  do  programa.  
2  –  Cpedrosarf@ifce.edu.br
ada  aplicação  possui  estes  componentes  básicos  e  os  específicos  dProf.
e  cada  
Pedro aplicação.  
Pedrosa
+5V   1k 2 Ω  
B7  
A0   B6  
O  valor  
A1  
pelo  fA2  
dos  capacitores  
abricante.    
B5  
B4   Reset  
ualizados  com  o  cristal  são  definidos  

 
A3   B3   Inicia  o  programa  
No  caso  do  18f2550:  
A4   B2  
A5   B1  
Cristal  (  f  )   B0   Capacitor  
+5V  
4MHz   27  pF  
A6  
8MHz  
C0   C7   22  pF  
C1  
20MHz   C6   15  pF  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
O  valor  
A1  
pelo  fA2  
dos  capacitores  
abricante.    
B5  
B4   Reset  
ualizados  com  o  cristal  são  definidos  

 
A3   B3   Inicia  o  programa  
No  caso  do  18f2550:  
A4   B2  
A5   B1  
Cristal  (  f  )   B0   Capacitor  
+5V  
4MHz   27  pF  
A6  
8MHz  
C0   C7   22  pF  
C1  
20MHz   C6   15  pF  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


+5V   1k 2 Ω  
B7  
A0   B6  
O  valor  
A1  
pelo  fA2  
dos  capacitores  
abricante.    
B5  
B4   Reset  
ualizados  com  o  cristal  são  definidos  

 
A3   B3   Inicia  o  programa  
No  caso  do  18f2550:  
A4   B2  
A5   B1  
Cristal  (  f  )   B0   Capacitor  
+5V  
4MHz   27  pF  
A6  
8MHz  
C0   C7   22  pF  
C1  
20MHz   C6   15  pF  
C2   C5  
C4  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()  
{  
  While(1)  
  {  
   
   
   
  }  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>   PIC  ualizado  
#fuses  HS   Indicação  do  
#use  delay  (clock  =  20000000)  
  microcontrolador  para  
main()   configurar  o  compilador  com  
{   as  definições  deste  MCU  
  While(1)  
  {  
   
   
   
  }  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()  
Configuração  do  
{  
  While(1)  
PIC  indicando    
  {  
   
clock  >  4MHz  
   
   
  }  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()  
{  
  While(1)  
  {  
   
Configurando  o  
   
   
clock  para  20MHz  
  }  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()  
{   Função  main,  
  While(1)  
  {   função  que  o  
   
    compilador  
   
  }   procura  para  gerar  
 
}   o  arquivo  *.hex    

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()  
{  
  While(1)  
  {  
   
    Corpo  principal  do  
   
  }   programa  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


#include  <18f2550.h>  
#fuses  HS  
#use  delay  (clock  =  20000000)  
 
main()   Geralmente  coloca-­‐se  
{  
  While(1)   um  loop  infinito  para  
  {   executar  por  tempo  
   
    indeterminado  
   
  }  
 
}  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Fonte de +5V

Fonte  de  12V  conectada  ao  


conector  com:    
 +  Conectada  a  CN1:1  
   -­‐    Conectada  a  CN1:2  
Componentes:

•  Capacitor 100uF/50V; •  Regulador LM7805;


•  Capacitor 10uF/25V; •  Diodo 1N4007;
•  Conector KRE02; •  02 Capacitores 100nF;
•  Fios e etc.
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Ø  Atraso
DELAY_CYCLES( )

Aguarda n ciclos de máquina.

Sintaxe:

delay_cycles(n)

Exemplos:

delay_cycles (5); //atrasa 5 ciclos de máquina

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Atraso
DELAY_US( )

Aguarda n microsegundos.

Sintaxe:

delay_us(n)

Exemplos:

delay_us (10); //aguarda 10 microsegundos

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Visão Geral
•  Um pino pode possuir dois estados ( 0 ou 1, alto ou baixo, 0 ou 5V)
•  Para aumentar sua funcionalidade, os mesmos pinos podem ser usados
tanto como saída quanto como entrada.
•  Para definir um pino de uma porta como entrada ou saída, é preciso
definir os bits do registrador TRIS como 1, para entrada, ou 0, para saída.
•  Cada pino tem o seu registrador TRIS correspondente.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Entrada e saída digitais
OUTPUT_LOW( )

Coloca o pino especificado do microcontrolador


em nível 0.

Sintaxe:

output_low(pino);

Exemplos:
output_low(pin_b1); //coloca o pino RB1 em nível
baixo
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Entrada e saída digitais
OUTPUT_HIGH( )

Coloca o pino especificado do microcontrolador


em nível 1.

Sintaxe:

output_high(pino);

Exemplos:

output_high(pin_b1); //coloca o pino RB1 em nível alto

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Entrada e saída digitais
OUTPUT_BIT( )

Coloca o pino especificado do microcontrolador


em um determinado nível lógico.

Sintaxe:

output_bit(pino, valor);

Exemplos:

output_bit(pin_b1, 0); //configura o pino RB1 em 0

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Visão Geral
•  Uma porta é um conjunto de pinos em um MCU que podem ser
acessados simultaneamente.
• Para aumentar sua funcionalidade, os mesmos pinos de cada porta
podem ser usados tanto como saída quanto como entrada.
•  Para definir um pino de uma porta como entrada ou saída, é preciso
definir os bits do registrador TRIS como 1, para entrada, ou 0, para saída.
•  Cada porta tem o seu registrador TRIS correspondente.
•  O PIC18F2550 tem três portas: A, B e C.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Entrada e saída digitais
OUTPUT_X( )
Escreve um byte completo em uma determinada
porta do microcontrolador.

Sintaxe:

output_a(valor);
output_b(valor);
output_c(valor);
Exemplos:

output_b (0x29); //escreve o valor 0x20 na porta B

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Entrada e saída digitais
OUTPUT_X( )
Escreve um byte completo em uma determinada
porta do microcontrolador.

Sintaxe:

output_a(valor); 0x29                    Hexadecimal  


output_b(valor);
       41                    Decimal  
output_c(valor);  

 0      0      1      0      1      0      0      1  .                                                          
Exemplos: RB7    RB6    RB5      RB4    RB3    RB2    RB1    RB0  
128    _64      32                    16          8              4              2              1      .  
output_b (0x29); //escreve o valor 0x20 na porta B

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Entrada e saída digitais
OUTPUT_X( )
Escreve um byte completo em uma determinada
porta do microcontrolador.

Sintaxe:

output_a(valor);
output_b(valor);
output_c(valor);
Exemplos:

output_b (0b10101010); //escreve o valor 0x20 na porta B


pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Entrada e saída digitais
OUTPUT_X( )
Escreve um byte completo em uma determinada
porta do microcontrolador.

Sintaxe:

output_a(valor);
output_b(valor);
0b10101010                    Binário  
output_c(valor);  

 1      0      1      0      1      0      1      0  .                                                              
Exemplos: RB7    RB6    RB5      RB4    RB3    RB2    RB1    RB0  
128    _64      32                    16          8              4              2              1      .  
output_b (0b10101010); //escreve o valor 0x20 na porta B
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Entrada e saída digitais
INPUT_X( )
Lê um byte completo em uma determinada porta do
microcontrolador.

Sintaxe:

valor = input_a( );
valor = input_b( );
valor = input_c();
Exemplos:

short int x;
x = input_b( ); //lê o estado da porta B
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Ø  Visão Geral
•  Um pino pode possuir dois estados (0 ou 5V) e pode funcionar como
entrada ou saída de dados.
•  Cada porta possui um registrador TRIS, que controla a direção do fluxo
de dados nos pinos.
•  As configurações do TRIS podem ser:
ü  Padrão
ü  Fixo
ü  Rápido

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


DireLva:  

#use standard_io(porta)

•  Compilador  adiciona  código  para  configurar  o  registrador  TRIS  e  tornar  


um  pino  entrada  ou  saída  conforme  instrução  executada;  
Código  do  compilador:  
Exemplo:  
BSF STATUS.5
output_high(pin_b0); BCF TRISB.0
BCF STATUS.5
BSF TRISB.0
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
•  Compilador  sempre  gera  código  de  configuração  do  compilador  
TRIS,  mesmo  que  o  acesso  seja  sequencial;  
•  Desvantagem:  operação  mais  lenta  quando  há  intensa  ualização  
das  portas  de  E/S;  
•  Vantagens:  
–  Facilidade  de  uso;  
–  Pino  permanece  sempre  no  úlamo  estado  configurado.  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


DireLva:  

#use fixed_io(porta_outputs = pinos)

•  Determina  ao  compilador  que  os  pinos  especificados  serão  


ualizados  sempre  como  saídas;  
•  Resultado:  nenhuma  função  de  programação  altera  codificação  
prévia  do  registrador  TRIS.  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Exemplo:  
boolean x;
#use fixed_io(c_outputs = pin_c0, pin_c1);
output_low(pin_c0);
x = input(pin_c0);
output_low(pin_c2);
•  output_low(pin_c0):  realmente  atribui  nível  lógico  0  a  RC0;  
•  input(pin_c0):  
–  Reforça  a  configuração  de  saída  do  pino;  
–  “x”  recebe  o  estado  de  saída  de  RC0.  
•  output_low(pin_c2):  RC2    não  recebe  valor  0,  pois  foi  configurado  como  
entrada.  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
DireLvas:  

#use fast_io(porta)
set_tris_X(valor);

•  Compilador  não  gera  código  de  configuração  da  direção  para  os  
registradores  TRIS;  
•  Resultado:  acesso  às  portas  se  torna  substancialmente  mais  rápido;  
•  Ressalva:  programador  deve  providenciar  todo  o  código  necessário.  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


SET_TRIS_X( )
Configura os pinos da porta X como entrada ou saída.
Sintaxe:

set_tris_a(valor);
valor  é  uma  variável  de  1  byte  
set_tris_b(valor);                                          0-­‐255  
set_tris_c(valor);

Exemplos:      131                              Decimal  


 

set_tris_b (131);  1      0      0      0      0      0      1      1  .                                                
TB7    TB6    TB5      TB4      TB3    TB2      TB1    TB0  
128    _64      32                    16          8              4              2              1      .  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
SET_TRIS_X( )
Configura os pinos da porta X como entrada ou saída.
Sintaxe:
B6,  B5,  B4,  B3  e  B2                            Saída  
set_tris_a(valor);
set_tris_b(valor);
set_tris_c(valor);
B7  ,  B1    e    B0                                Entrada    

Exemplos:      131                              Decimal  


 

set_tris_b (131);  1      0      0      0      0      0      1      1  .                                                            
TB7    TB6    TB5      TB4      TB3    TB2      TB1    TB0  
128    _64      32                    16          8              4              2              1      .  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Exemplo:  

#include <18f2550.h>
#FUSES HS, NOWDT, PUT, NOBROWNOUT, NOMCLR, NOLVP
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use delay(clock=20000000)

void main( )
{
set_tris_a(0x01); //Todos os pinos como saída exceto RA0
set_tris_b(0x01); //Todos os pinos como saídaexceto RB0
set_tris_c(0x80); //Todos os pinos como saída, exceto RC7
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Atraso
DELAY_MS( )

Aguarda n milissegundos.

Sintaxe:

delay_ms(n)

Exemplos:

delay_ms (5); //aguarda 5 milissegundos

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Prática 01: Projete um hardware e um software utilizando
MCU 18f2550 que faça um led piscar de 1 em 1 segundo.
+5V  
B7  
A0   B6  
A1   B5  
A2   B4  
A3   B3  
A4   B2  
A5   B1  
+5V  
B0  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Prática 02: Projete um hardware e um software utilizando
MCU 18f2550 que implemente um ou exclusivo de 3 entradas e
acione um led para demonstrar as saídas com nível lógico alto.
+5V  
B7   A  
B6   B   A   B   C   S  
A0  
A1   B5   C   0   0   0   0  
A2   B4   0   0   1   1  
A3   B3   S  
A4   B2   0   1   0   1  
A5   B1   0   1   1   0  
+5V  
B0   1   0   0   1  
A6   1   0   1   0  
C0   C7   1   1   0   0  
C1   C6   1   1   1   0  
C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Prática 03: Projete um hardware e um software utilizando MCU
18f2550 que implemente um codifcador BCD para display de 7
segmentos.
+5V  
B7   Sa  
D A0   B6  
C   A1   B5  
B   A2   B4   Sg  
A A3   B3  
A4   B2  
Exemplos:   Sd  
A5   B1  
B0  
0 2 4 +5V  
D 0   0   0   A6  
C   0   1   0   C0   C7  
B   0   0   1   C1   C6  
A 0   0   0   C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Relembrando:
DEC   BCD   7    Segmentos  
Sa   ND   A B   C   D   Sa   Sb   Sc   Sd   Se   Sf   Sg  
0   0   0   0   0   1   1   1   1   1   1   0  
1   0   0   0   1   0   1   1   0   0   0   0  
Sg   2   0   0   1   0   1   1   0   1   1   0   1  
3   0   0   1   1   1   1   1   1   0   0   1  
4   0   1   0   0   0   1   1   0   0   1   1  
Sd   5   0   1   0   1   1   0   1   1   0   1   1  
6   0   1   1   0   1   0   1   1   1   1   1  
__
7   0   1   1   1   1   1   1   0   0   0   0  
Sa = A+C+BD+BD 8   1   0   0   0   1   1   1   1   1   1   1  
_ __ 9   1   0   0   1   1   1   1   1   0   1   1  
Sb = B+CD+CD
_ 10   1   0   1   0   X   X   X   X   X   X   X  
11   1   0   1   1   X   X   X   X   X   X   X  
Sc = B+C+D 12   1   1   0   0   X   X   X   X   X   X   X  
_ _ __ _
13   1   1   0   1   X   X   X   X   X   X   X  
Sd = A+CD+BC+BD+BCD 14   1   1   1   0   X   X   X   X   X   X   X  
__ _
15   1   1   1   1   X   X   X   X   X   X   X  
Se = BD+CD
_ __ _
Sf = A+BC+CD+BD
_ _ _
Sg = A+BC+BC+CD
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Relembrando:

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa