Professional Documents
Culture Documents
Ferramentas e conceitos
A programao de microcontroladores demanda diversos conhecimentos.
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
Ex.:
if ( temp > 70 ) {
liga_saida = 1 ;
}
else
{
cont = ++ cont ;
}
if ( expresso )
{
comando 1;
}
else
{
comando 2;
}
Comando FOR"
for (incio ; teste de trmino ; incremento)
{
comando;
}
Ex.:
for (cont = 10 ; cont < 100 ; cont ++)
{
a = b + 20
valor = a*1.2
}
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
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.
12
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.:
13
Clique em "Next".
14
15
16
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
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
19
Ex: TRISA = 0b00010000; // bit TRISA4 configurado como entrada e assim pino RA4 ser entrada.
Ex: PORTB = 0b00100000; // bit RA5 configurado como nvel lgica 1 (VCC).
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
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
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;
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
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