pic - programaÇÃoeducatec.eng.br/engenharia/eletiva i - microprocessadores e... · pic -...

Post on 06-Feb-2018

238 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PIC - PROGRAMAÇÃOLINGUAGEM C

AUTOR: ENG. ANTONIO CARLOS LEMOS JÚNIORacjunior@facthus.edu.br

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);}

top related