pic - programaÇÃoeducatec.eng.br/engenharia/eletiva i - microprocessadores e... · pic -...
TRANSCRIPT
PIC - PROGRAMAÇÃOLINGUAGEM C
AUTOR: ENG. ANTONIO CARLOS LEMOS JÚ[email protected]
UBERABA – MG1º SEMESTRE – 2009
FLUXOGRAMAS
FLUXOGRAMAS
Fluxograma para somar dois números e guardar em uma terceira variável
FLUXOGRAMASFluxograma para contar de 0 a 10
VARIÁVEIS E DADOS
Variáveis são classificadas segundo tipo de conteúdo em: numéricas, caractere, alfanuméricas e lógicas.
Numéricas: inteiras, reais ou ponto flutuante.
Caracteres: são utilizadas para representar um caractere, utilizando para isso um código especial (ASCII). Ex.: Frases ou textos.
VARIÁVEIS E DADOS
Alfanuméricas: utilizadas para armazenar tanto caracteres quanto valores numéricos. Um de cada vez.
Lógicos: capazes de armazenar um estado lógico: verdadeiro ou falso.
OPERADORES
Matemáticos: adição, subtração, etc.
Relacionais: maior, menor, igual.
Lógicos: função E, função OU, função Não
Lógicos bit a bit: função E, função OU, função Não
Memória: atribuição =, & e *.
INTRODUÇÃO À LINGUAGEM C#include <16f628.h>#use delay(clock=4000000)#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP,NOMCLR
void main(){
while (TRUE){int tempo;tempo=100;output_high(PIN_B0);delay_ms(tempo);output_low(PIN_B0);delay_ms(tempo);}
}
PALAVRAS RESERVADAS
IDENTIFICADORES
VARIÁVEIS E TIPOS DE DADOS
MODIFICADORES DE TIPO
Um tipo de dados signed int:-128 a +127
Um tipo de dados unsigned int:0 à 255
Um variável do tipo short int:Apenas um bit
MODIFICADORES DE TIPOUm tipo de dados long int:
Terá 16 bits: 65536
DECLARAÇÃO DE VARIÁVEIS#include <16f877.h>#use delay(clock=4000000)#fuses
HS,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP#use rs232(baud=19200, xmit=PIN_B2,rcv=PIN_B1)int somatorio; // variável global
void soma (int valor){int conta; // variável local}void main(){int conta; // variável localsomatorio = 0;}
CONSTANTES
const val1 = 10const val2 = -5const val3 = 55.12const val4 = 'a'const val5 = “teste”
CONSTANTES: binárias, hexadecimais e octais
OPERADORESAtribuição:
x = 10;y = x;
Aritméticos:
OPERADORESRelacionais:
OPERADORESLógicas booleanos:
int x,y;x=10if (x>5 && x<20)y=x;
int teste, teste_2;teste = 0;teste_2 = 0;if (!teste) teste_2++;
OPERADORESLógicas bit a bit:
OPERADORESLógicas bit a bit:
Operador ~ (not)
OPERADORES
Operadores de deslocamento:
<< e >>
Valor >> número de bits a deslocar à direita Valor << número de bits a deslocar à esquerda
int x,y,z;x = 10;y = x << 2;z = x >>1;
OPERADORES
Memória
& Endereço do operando* Conteúdo do endereço apontado pelo operando
Operador &endereco_a = &a
Operador *a = *endereco_a
OPERADORES
Operador ?
Variável = Expressão ? Expressão 2: Expressão 3
int x,y;x = 5;y = x == 7 ? 10:x+3;
ASSOCIAÇÃO DE OPERADORES
ASSOCIAÇÃO DE OPERADORESProcedência:
DECLARAÇÕES DE CONTROLE
Comando if, while e for:
if:
if (condição){comando A1;comando A2;}
else{comando B1;comando B2;}
DECLARAÇÕES DE CONTROLE
# cabeçalho
int x;
void main(){setup_adc_ports (no_analogs);while (TRUE)
{x=input_a();output_port_b(0);if (!x)
output_high(pin_b0);else if (x == 1)
output_high(pin_b1)}
}
DECLARAÇÕES DE CONTROLE
Switch:
switch (variável){case constante1:
comando A; break;
case constante2: comando B break;
default: comando z;}
DECLARAÇÕES DE CONTROLE
# cabeçalho
void main(){setup_adc_ports (no_analogs);while (TRUE)
{output_port_b(0);switch (input_a())
{case 0: output_high(pin_b0); break;case 1: output_high(pin_b1); break;case 2: output_high(pin_b2); break;default: output_high(pin_b4);}
}}
DECLARAÇÕES DE CONTROLE
For:
for (inicialização ; condição ; incremento){//bloco de comandos;comando 1;comando 2;}
DECLARAÇÕES DE CONTROLE
While:
while (condição){//bloco de comandos;comando 1;comando 2;}
DECLARAÇÕES DE CONTROLE
Do - While:
do{//bloco de comandos;comando 1;comando 2;}while(TRUE);
TIPOS E DADOS AVANÇADOS
Matrizes de dados:
tipo de dado nome_matriz [tamanho]
int nota [40];char nome [20];long outra [5];
int nota[5] = {0,0,0,0,0};int nota[5] = {4,9,2,3,7};
MATRIZES MULTIDIMENSIONAIS
Matrizes de dados:
tipo de dado nome_matriz [linhas][colunas]
int tabela[2][5];
tabela[2][5]={0,0,0,0,0,0,0,0,0,0}
MATRIZES MULTIDIMENSIONAIS
Strings de caracteres:
char teste [10];char teste2 [13] = {“Testando ...”};char teste3 [] = {“Outro teste”} ;char teste4 [4][15] = {“Domingo”,”Segunda”,”Terça”,”Quarta”};
ESTRUTURAS DE DADOS
Uma estrutura é um agrupamento de variáveis individuais, referenciadas por um nome comum.
struct NOME{tipo VARIÁVEL;tipo VARIÁVEL;};
ESTRUTURAS DE DADOS
struct tempo{int horas;int minutos;int segundos;};
struct tempo horario;
Acessando as variáveis:
horario.horas = 0;
FUNÇÕES
{tipo da função} nome_da_função ({parâmetros}){//bloco de comandoscomando 1;comando 2;};
int quadrado(int a) {return a*a;}
FUNÇÕES#include <16f628.h>#use delay(clock=4000000)#fuses INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR#use rs232(baud=19200,parity=N,xmit=PIN_B2,rcv=PIN_B1)
float divide(float a, float b){if (!b)
return 0;a/=b;return a;
}
void main(){float a,b,c;a = 7;b = 3;c = divide(a,b);printf(“a = %f, b = %f, c = %f”, a,b,c);}
FUNÇÕES
void soma (int matriz[20], int valor){int conta;for (conta=0 ; conta<20 ; conta++)
{matriz[conta] += valor;}
}
void main(){int valores[20];soma(valores, 1);}
FUNÇÕES
#include <16f628.h>#use delay <clock=4000000>#fuses INTRC_IO,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP
void muda_pino(int pino){
output_bit(pino,!input(pino));}
void main(){
muda_pino(pin_b3);}
FUNÇÕES
int soma(int a, int b){#asm
movf a,waddwf b,wmovwf _RETURN_
#endasm}
void main(){int a,b;a = 7;b = 3;a = soma(a,b);}