You are on page 1of 23

Ferramentas e conceitos

As figuras seguintes resumem as ferramentas (programas, dispositivos) e


conceitos (conhecimentos) necessrios para implementar a programao de
um microcontrolador.

Ferramentas e conceitos
A programao de microcontroladores demanda diversos conhecimentos.

Linguagem C Estrutura de um programa


diretivas para o pr-processador
declarao de variveis globais
prototipagem de funes
void main ()
{
decalarao de variveis locais da
funo main
comandos da funo main // incluem
tambm chamadas para funes

tipo funo (lista de argumentos)


{
declarao das varivies locais da
funo
comandos;
}

Linguagem C Gerao de arquivo .hex

Linguagem C Diretivas de pr-processamento


So regras de como o compilador ou montador dever processar o cdigo fonte.
Importantes diretivas da linguagem C
# define e # undef definio de macros e constantes
Ex.: # define MSG calendrio 2015
# include inclui um arquivo externo ao cdigo fonte, tal arquivo pode ser
outro cdigo fonte, arquivo de cabealho ou arquivo de definies.
Ex.: # include c:\Meus Documentos\Projetos\file.h
Ex.: # include <stdio.h>
# pragma usada para compatiblidade de compilador
# if realiza testes
6

Linguagem C Operadores e variveis


Operador de atribuio e os aritmticos

Tipos de Variveis

Operador

Exemplo

Descrio

Operador

Exemplo

Descrio

char

1 byte

-128 a 127

k = 8.745

Atribuio

Unsigned
char

1 byte

0 a 255

a + 8 + tempo

Soma

Tempo -c

Subtrao

int

2 bytes

-32768 a
32767

Tempo / a

Diviso

Unsigned
int

2 bytes

0 a 65535

a*b

Multiplicao

Tempo % b

Resto da
diviso

++

x = x + 1 (++x)

Incremento

--

x = x -1 (--x)

Decremento

float

4 bytes

Ex.:
1) char lista;

-1.7x1038 a
1.7x1038

2) int a, b, c;

Ex.:
1) c = a + b 7;

3) float temperatura;

2) y = ++ x ( y = x+ 1);
3) m += n (m = m + n ) // atrib. composta

Linguagem C Controle de Fluxo


Comando "IF" ou "IF-ELSE"
if ( expresso )
{
comando;
}

Ex.:

if ( temp > 70 ) {
liga_saida = 1 ;
}
else
{
cont = ++ cont ;
}

if ( expresso )
{
comando 1;
}
else
{
comando 2;
}

Comando "IF" - "ELSE-IF"


if ( expresso )
{
comando 1;
}
else if (expresso 2)
{
comando 2;
}
else (expresso 3)
{
comando 3;
}
Ex : if ( temp <= 30 ) {
v = ++ v ;
}
else if ( (temp > 30) && (temp <=70) ) {
controle = y + 2y + a;
}
else {
liga_saida = 1;
}
8

Linguagem C Controle de Fluxo


Comando "SWITCH-CASE"
switch ( varivel )
{
case valor1:
comando 1;
break;
case valor2:
comando 2;
break;
default:
comando_n;
}
Ex.: switch ( pressao )
{
case 1:
printf ( "valor 1 \n );
break;
case 2:
printf ( "valor 2 \n );
break;
default:
printf ("valor = %f", 'n');
}

Comando FOR"
for (incio ; teste de trmino ; incremento)
{
comando;
}

Ex.:
for (cont = 10 ; cont < 100 ; cont ++)
{
a = b + 20
valor = a*1.2
}

Linguagem C Operadores e variveis


Operadores relacionais

Operadores Lgicos

Operador

Exemplo

Descrio

Operador

Exemplo

Descrio

==

a == 8

Avalia se
igual

&&

m && valor

Funo "e"

!=

a != 8

Avalia se
diferente

||

m || valor

Funo "ou"

>

a>8

Avalia se
maior

!a

Funo
negao

<

a<8

Avalia se
Menor

a >= 8

Avalia se
maior ou
igual

>=

<=

a <= 8

Avalia se
menor ou
igual

Ex.:
1) if ( temperatura >= valor) { ...
2) while ( tempo != 100 ) { ...

Ex.:
1) a = 1;
b = ! a ( b= 0);
2) while (( x && y ) > 2) { ..
Operador Condicional
(testa-expr) ? faa-se-1 ? faa-se-0 ;
( x % 2 != 0 ) ?
printf ("%d e Impar \ n", x):
printf ("%d e Par \n", x);

10

Linguagem C Controle de Fluxo


Comando WHILE"
while ( expressao )
{
comando;
}

Ex.: while ( a < 100 )


{
a += 10; // a = a + 10
cont = cont++;
}
// Testa a condio para depois
executar ou no a instruo

Comando DO-WHILE"
do
{
comando;
}
while ( expressao )
Ex.: do
{
t -= 0.5 ; // t = t 0.5
}
while ( t > 20 )
// Executa-se uma instruo e depois
testa-se a condio

11

Linguagem C Funes
Funes
tipo nome ( tipo1 arg1, ..., tipon argn )
{

Parmetros da funo

declaraes;
comandos;
return expressao (opcional)

Ex.:
int maximo ( int x , int y )
{
int z;
z = ( x >= y )? x : y;
return z;
}
Obs: Toda funo pode receber
parmetros (variveis) e retornar um
parmetro) , no obrigatioriamente.

Exemplos de chamadas para funes


Sem parmetro e sem retorno
calcula ( );
Sem parmetro e com retorno
x = calcula ( );
Com parmetro mas sem retorno
calcula (a, b );
Com parmetro e com retorno
x = calcula (a, b);

12

Linguagem C Passagem de parmetros


Passagem por "VALOR"

Passagem por REFERNCIA"

int a, b, c;
int calcula (int x, int y)
{
x= x + (++y)
return x;
}
int main (void)
{
a =5
b= 10
c = calcula (a, b);
}

Int a, b, c;
Int calcula ( int *x, int *y)
{
x = x + (++y)
Return x;
}
Int main (void)
{
a=5;
b = 10 ;
c = calcula ( &a, &b);
}

Obs.:

Obs.:

O valor de "a" copiado para "x";


O valor de "b" copiado para "y".
A funo recebe o contedo de "a" e de
"b".
Ainda que os valores de "a" e "b"
mudem na funo main, os valores de
"x" e "y" no sero atualizados.

O contedo do endereo de "a passado


para "x".
O contedo do endereo de "b" passado
para "y".
A funo recebe o contedo dos
endereos de "a" e de "b".
Se "a" e "b" mudarem na funo main, os
valores de "x" e "y" sero atualizados.

13

Criao de projeto no MPLAB X

Para criar um novo projeto, clique em "


File " "New Project".

Clique em "Next".

14

Criao de projeto no MPLAB X

No campo "Family" escolha o tipo de PIC


e no campo " Device" escolha o modelo.
Em seguida pressione "Next".

Selecione o gravador que ser usado para


gravar o PIC e clique em "Next".

15

Criao de projeto no MPLAB X

Clique com o boto direito do mouse


sobre a opo "Source Files", em seguida
selecione "New" "Empty File".

Selecione o compilador que ser usado


para e clique em "Next".

16

Criao de projeto no MPLAB X

Nomeio o arquivo que ter o cdigo


fonte, colocando a extenso .c e em
seguida clique em "Finish".

Aps a escrita do cdigo fonte, v ao


menu "Run" e clique em "Build main
project" para compilar o programa.
17

Microncontrolador PIC18F4520
um microcontrolador de 8 bits da Microchip da famlia 18F.
Alguns recursos : memria flash de 32 K, 36 pinos de I/O, 13 canais A/D de
10bits, 4 temporizadores, suporte a RS232 e Rs485.

18

PIC18F4520 Bits de Configurao


Alguns bits de configurao do PIC

PWRT gera atraso de 65,6 ms para iniciar o cdigo do microncontrolador


ON/OFF

OSC - Define modo de oscilao.


LP / XT / HS / RC / EC / ECI06 / HSPLL / RCIO6 / INTIO67 / INTI07

BOR - Provoca reset da CPU no caso da tenso cair abaixo de certo limite.
ON/OFF

WDT - Sistema interno que evita que o programa pare em um determinado ponto.
ON/OFF

LVP - Se a opo estiver ativa, para gravar o PIC basta ter nvel lgico.
ON/OFF

Para configurar todos os bits de configurao de formao prtica, v ao menu


"Window" e em seguida selecione "Pic memory views" e clique em "Configuration
bits.

19

PIC18F4520 Alguns registradores e suas configs.


TRIS (A,B,C,D,E) - configura sentido do fluxo de dados da porta. (0 = Sada; 1= Entrada)

Ex: TRISA = 0b00010000; // bit TRISA4 configurado como entrada e assim pino RA4 ser entrada.

PORT (A,B,C,D,E) escreve/l o nvel dos pinos associados porta. (0 = 0 V; 1= VCC)

Ex: PORTB = 0b00100000; // bit RA5 configurado como nvel lgica 1 (VCC).

LAT (A,B,C,D,E) - armazena o valor do ultimo comando de escrita.


Ex: LATA = 0x00; //Limpa PORTA

ADCON (0,1,2) - conversor analgico digital; atravs dos 4 bits PCFG0:PCFG3 pode-se
configurar os pino digital ou analgico.
Desliga A/D canal 1:
ADCON1 = 0b00001111;
Liga A/D canal 1:
ADCON1 = 0b00000000;

20

Compilador C18 Algumas funes


Cada compilador diferente na forma de programao, embora todos
suportem a mesma linguagem C.
O compilador MPLAB C18 projetado para gerar executveis para
microcontroladores PIC18, com suporte ao padro ANSI C.

FUNES:
strcatpgm2ram - Anexa uma cpia da string fonte para o fim do string destino.
ConvertADC Inicia o processo de converso A/D.
BusyADC Indica se perifrico A/D est em processo de converso.
Delay10KTCYx - efetua um atraso em mltiplos de 10000 ciclos de instruo
(TcT). Cada ciclo corresponde a 1us.
21

Leitura de sinal de entrada digital e


acionamento de sada
Hardware

Cdigo Fonte
# include <p184520.h> // Define o PIC184520
#pragma config OSC = XT
// Clock interno
#pragma config WDT = OFF // Desliga Watchdog
#pragma config LVP = OFF
// Desliga prog.baixa tenso
#define LED
PortDbits.RD7
#define BOTAO PortAbits.RA4
void main (void)
{
ADCON1 = 0b00001111;
TRISA = 0b00010000;
TRISB = 0b00000000;
TRISD = 0b00000000;
PORTD = 0b00000000;
PORTB = 0b00100000;

Obs.: Sada RB5 aciona base do


transistor, que libera passagem de
corrente do coletor para o emissor.
Porm a sada RD7 s fica em nvel
lgico 1 quando o boto pressionado.

while (1) {
if (BOTAO == 0) {
LED = 1;
}
else {
LED = 0;
}}}

// Desliga AD
// Configura PORTA
// Configura PORTB
//Configura PORTD
//Limpa PORTD
// Habilita LEDS

// Botao pressionado ?
//Sim, ento liga o led

// No, ento apaga o led


22

Uso de delay no acionamento de sada


Hardware

Cdigo Fonte
# include <p184520.h> // Define o PIC184520
# include <delays.h>
#pragma config OSC = XT
// Clock interno
#pragma config WDT = OFF // Desliga Watchdog
#pragma config LVP = OFF
// Desliga prog.baixa tenso
#define LED PortDbits.RD0
void main (void)
{
ADCON1 = 0b00001111;
TRISDbits.RD0 = 0;
TRISBbits. RB5 = 0;
PORTBbits.RB5 = 1;

// Desliga AD
// RD0 como sada
// RB5 como sada
// Habilita LEDS

while (1) {

Obs.:
Sada RB5 aciona base do
transistor, que libera passagem do
coletor para o emissor. Isso permite
acionamento do led, pois RD0 est em
nvel lgico 1.

LED = 1;
Delay10KTCYx (100);
LED = 0;
Delay10KTCYx (100);
}}

23