Prof. Stefano 1 PROGRAMAÇÃO EM LINGUAGEM C Prof. Stefano.

Post on 21-Apr-2015

123 views 6 download

Transcript of Prof. Stefano 1 PROGRAMAÇÃO EM LINGUAGEM C Prof. Stefano.

Prof. Stefano1

PROGRAMAÇÃO EM LINGUAGEM C

Prof. Stefano

• Histórico• Estrutura de um programa• Constantes e variáveis• Operadores• Declarações de Controle• Exercícios

2

• A primeira linguagem de programação de alto nível com real aceitação foi FORTRAN, na década de 50, para análise e resolução de problemas matemáticos;

• Em 1959 surgiu o COBOL, voltada para aplicações comerciais;

• A linguagem C foi desenvolvida em 1972, por Dennis Ritchie, para utilização com o sistema operacional UNIX;

3

Histórico

• Estrutura básica de um programa em C:

4

Estrutura de um programa

void main() {

}

void main() { TRISB = 0x00; do {

PORTB = 0; Delay_ms(500); PORTB= 255; Delay_ms(500); } while(1); }

5

Estrutura de um programaNo ambiente do MikroC digite o programa abaixo

void main() { TRISB = 0x00; do {

PORTB = 0; Delay_ms(500); PORTB= 255; Delay_ms(500); } while(1); }

6

Estrutura de um programaIdentificando os elementos do programa

Configura as portas

Laço do ....while(condição)

Escreve 0 nas portas

Espera 500 ms

Escreve 25510 nas portas

Espera 500 ms

Início do programa

• Exercício: Altere o programa para que os leds pares e ímpares pisquem alternadamente;

7

Estrutura de um programa em C

Constantes e variáveis• Identificadores: São nomes arbitrários dados as

funções, variáveis, constantes. Os identificadores podem ser1 letras de A à Z, números de 0 à 9 e “_“(underline). Não pode começar com número.– Exemplos:

• Temperatura_media• Temp• _T1• Contador

81 – Depende de cada compilador

Constantes e variáveis• Constantes: são elementos que tem um valor fixo,

não podendo ser mudados durante a execução do programa;– Exemplo: π = 3,1415927.... Em vez de escrever toda vez o

número podemos nomear uma constante PI = 3,1415927 e durante programa utilizar PI;

• Variáveis: são elementos que permitem a alteração do seu valor durante a execução do programa. É recomendável que no início do programa seja atribuído um valor inicial a elas, que elas sejam inicializadas;– Exemplo: Calcule consumo médio de combustível de um

automóvel. CONSUMO= KM/L9

Em linguagem C as variáveis podem assumir diferentes tipos, de acordo com a sua utilização:

10

Tipos de variáveis

Tipo Bits Faixa

unsigned char 8 0 até 255

signed char 8 -128 até 127

unsigned short int 8 0 até 255

signed short int 8 -128 até 127

unsigned int 16 0 até 65535

signed int 16 -32768 até 32767

unsigned long int 32 0 até 4294967295

signed long int 32 -2147483648 até 2147483647

float 32 ± 1,17549435082E-38 até ± 6,80564774407E38

double 32 ± 1,17549435082E-38 até ± 6,80564774407E38

long double 32 ± 1,17549435082E-38 até ± 6,80564774407E38

Representação numérica:

Decimal: não precisa de nenhuma representação especial, mas não pode começar com zero ou será considerado como base octal;

Hexadecimal: começa com 0x (0X): Exemplo: 0x3F;

Binário: começa com 0b (0B): Exemplo: 0b1100;

11

Tipos de variáveis

Operadores• Operador é um símbolo que faz com que

compilador execute alguma operação matemática ou lógica;

• Os principais operadores são aritméticos, de relação, lógicos e bit a bit;

• A seguir serão apresentados os principais elementos de cada operador. Este tópico será visto em maiores detalhes na linguagem de programação aplicado diretamente ao compilador utilizado;

12

Operadores• Operador Aritmético

13

Operador Operação realizada

+ Soma

- Subtração

* Multiplicação

/ Divisão

% Resto da divisão

+ + Incremento

- - Decremento

• Exercício: Altere o programa anterior para que os leds sejam incrementados utilizando um contador;

14

Operadores

void main() { unsigned char contador=0; TRISB = 0x00;PORTB=0; do {

Delay_ms(500); PORTB= contador; contador++; Delay_ms(500); } while(1); }

Qual o tempo totalentre cada

incremento?

• Exercício: Altere o programa anterior para que os leds mostrem o resultado da operação matemática;

15

Operadores

void main() {unsigned char soma=0; TRISB = 0x00; do {

soma= 16 + 6/3 -3; //15 PORTB= soma; Delay_ms(1000); soma= (6*2 + 8)/10 + 40; //42 PORTB= soma; Delay_ms(1000); } while(1); }

Operadores• Operador de Relação: eles testam as relações nas

expressões. Seu resultado é 1 se for verdadeiro ou 0 se for falso;

16

Operador Operação realizada

= = Igual a

! = Não igual a

> Maior que

< Menor que

> = Maior ou igual a

< = Menor ou igual a

Operadores• Exemplos de Operador de Relação: • 4 = = 3; retorna 0 - FALSO• 3 = = 3; retorna 1 - VERDADEIRO• 7 > = 3; retorna 1 – VERDADEIRO• 4 < = 3; retorna 0 - FALSO• 4 ! = 3; retorna 1 – VERDADEIRO• 4 > 3; retorna 1 – VERDADEIRO

17

• Exercício: Altere o programa anterior para que quando o contador chegar em 255 o programa saia do laço e termine a execução;

18

Operadores

void main() {unsigned char contador=0; TRISB = 0x00;do {

PORTB = 0; Delay_ms(500); PORTB= contador; contador++; Delay_ms(500); } while(contador < 255);

}

Operadores• Operadores lógicos: realizam operações lógicas nas

expressões. Os operandos são considerados verdadeiros(1) ou falsos(0). Seu resultado é 1 se for verdadeiro ou 0 se for falso;

19

Operador Operação realizada

& & AND

| | OR

! NOT (Negado)

Operadores• Exemplos de Operador Lógico: a) (3 > 1) & & (2= = 2); 1 & & 1; resulta em 1 - verdadeiro

b) (3 > 7) | | (2= = 2); 0 | | 1 ; resulta em 1 - verdadeiro

c) !{(3 > 1) & & (2= = 2)} ; !{ 1 & & 1}; !{ 1} ; - resulta em 0 - falso

20

Operadores• Operadores Bit a Bit: eles testam as relações dos

operadores nas expressões bit a bit;

21

Operador Operação realizada

& AND

| OR

^ XOR

~ NOT

> > SHIFT RIGHT,desloca bits a direita

< < SHIFT LEFT, desloca bits a esquerda

Operadores• Exemplos de Operador Bit a Bit: a) v1= 101101, v2=110011, v3 = v1 & v2; AND v1 = 1 0 1 1 0 1 v2 = 1 1 0 0 1 1 v3 = 1 0 0 0 0 1

b) v1= 110001, v2=010111, v3 = v1 | v2; OR v1 = 1 1 0 0 0 1 v2 = 0 1 0 1 1 1 v3 = 1 1 0 1 1 1

22

• Exemplo: Implemente o programa abaixo e acompanhe a variação na saída de acordo com a variação na entrada;

23

Operadores

void main() { TRISA = 0xFF; TRISB = 0x00;TRISC= 0x00; do {

PORTB = PORTA & 0x0F; PORTC = PORTA && 0x0F;

} while(1); }

Operadores• Exemplos de Operador Bit a Bit: c) v1= 101101, v2=110011, v3 = v1 ^ v2; XOR v1 = 1 0 1 1 0 1 v2 = 1 1 0 0 1 1 v3 = 0 1 1 1 1 0

d) v1= 110001, v2 = ~ v1 ; NOT v1 = 1 1 0 0 0 1 v2 = 0 0 1 1 1 0

24

• Exemplo: Implemente o programa abaixo e acompanhe a variação na saída;

25

Operadores

void main() { TRISB = 0x00; do {

PORTB = ~PORTB; Delay_ms(500);

} while(1); }

Operadores• Exemplos de Operador Bit a Bit: e) v1= 000101, v2=v1 << 2; SHIFT LEFT (x 2) = 001010; <<1 v2 = 010100; <<2

f) v1= 010100, v2=v1 >> 2; SHIFT RIGHT (÷ 2) = 001010; >> 1 v2 = 000101; >> 2

26

• Implemente um programa que desloca os leds do PORTB para direita;

27

Operadores

void main() { TRISB = 0x00; PORTB = 0xA0; do {

PORTB = PORTB>>1; Delay_ms(100); } while(1); }

Acompanhe asimulação para

ver o que acontececom a saída

• Exercício: Implemente um programa que desloca os leds do PORTB para a esquerda;

28

Operadores

• O controle do fluxo normal de um programa é um poderoso recurso em qualquer linguagem de programação;

• A seguir veremos as diferentes formas de fazer este controle;

29

Controle de fluxo de um programa

Controle de fluxo de um programa

• Declaração de controle condicional IF

IF.......THEN....ELSESE......ENTÃO...SENÃO

• Ele é utilizado para executar um determinado comando se uma determinada condição for verdadeira. A opção ELSE não é obrigatória.

30

IF (true) THEN CommandsTrueELSE CommandsFalse

IF (verdadeiro) THEN ComandosVerdadeiroELSE ComandosFalso

• Caso 1: somente verdadeiro:

31

Controle de fluxo de um programa

void main() { TRISB = 0x00; TRISA = 0xFF;do { if (PORTA.F0 = = 1)

{ PORTB = 0X0F; }

Delay_ms(1000); PORTB = 0XF0 ;

} while(1); }

if (true) { CommandsTrue}

• Exercício: Implemente um programa para que toda vez que uma entrada (PORTA.0) estiver sendo acionada (1) um contador é incrementado e o valor mostrado em PORTB. O intervalo de incremento no contador é de 300ms.

32

Controle de fluxo de um programa

• Caso 2: com verdadeiro e falso:

33

Controle de fluxo de um programa

void main() { TRISB = 0x00; TRISA = 0xFF;do { if (PORTA.0 = = 1)

PORTB = 0X0F; else PORTB = 0XF0 ;

} while(1); };

if (true) { CommandsTrue}else{ CommandsFalse}

• Exercício: Implemente um programa para que toda vez que uma entrada (PORTA.0) estiver sendo acionada (1) somente os leds pares de PORTB devem estar ligados, caso contrário os ímpares.

34

Controle de fluxo de um programa

• Exercício: Implemente um programa que tenha um contador que é incrementado a cada 300 ms e seu valor mostrado na PORTB. Enquanto o valor do contador for menor que 50 a saída PORTC.0 fica em 1, caso contrário somente a saída PORTC.1 fica em 1.

35

Controle de fluxo de um programa

• Desafio: Considere que na saída PORTB tenhamos 8 leds ligados. Elabore um programa para que somente 1 led esteja ligado e que o acendimento se desloque entre os 8 leds, de uma ponta para outra, em um movimento de ida e volta. O incremento no deslocamento deverá ser a cada 300 ms e em laço infinito. Utilize o IF para selecionar o sentido do deslocamento do led.

36

Controle de fluxo de um programa

• Caso 3: IF aninhado:

37

Controle de fluxo de um programa

if (true1) { Commands1}else if(true2) { Commands2 } else if (true3) { Commands3 }

else { Commands4 }

true1 ?

Commands1

N

V

true2 ?

N

V

true3 ?

N

V

Commands2

Commands3

Commands4

38

Controle de fluxo de um programavoid main() {unsigned char contador=0; TRISB = 0x00; TRISC = 0x00;do { PORTB=contador; if (contador < 20)

PORTC = 0X01; else if (contador < 40) PORTC = 0X03 ; else if (contador < 70) PORTC = 0X07 ;

else PORTC = 0X0F ;contador++;

} while(1); }

• Exercício: Altere o programa anterior para que as saídas da PORTC (C.0, C.1 e C.2) tenha seu nível lógico alterado de acordo com a tabela abaixo.

39

Controle de fluxo de um programa

Contador C.0 C.1 C.2

Contador>127 0 0 0

31<NIVEL≤127 1 0 0

15<NIVEL≤31 1 1 0

NIVEL≤15 1 1 1

• Desafio: A) Considere que na entrada PORTA tenhamos 8 chaves ligadas simbolizando os sensores de segurança de uma casa. Elabore um programa, utilizando o IF aninhado para testar os sensores, um de cada vez, para que, enquanto algum dos sensores estiver atuado (1) todos os leds da saída PORTB devem ficar ligados, caso contrário desligados.

• B) Implemente um programa para resolver o problema acima sem utilizar o IF aninhado. Compare os dois programas e avalie qual é a melhor solução.

40

Controle de fluxo de um programa

Controle de fluxo de um programa

• Declaração de controle condicional WHILE

WHILE (true) { }ENQUANTO (verdadeiro) { }

• Faz a verificação da condição ANTES de executar o comando. Enquanto a condição permanecer verdadeira o(s) comando(s) é/são executados.

41

WHILE (true){Comandos}

42

Controle de fluxo de um programa

pergunta ?

Comandos

N

V

while(true){Comandos}

• Exemplo WHILE:

43

Controle de fluxo de um programa

void main() {unsigned char contador=0; TRISB = 0x00;while(contador < 31) { PORTB = contador;

Delay_ms(300); contador++;

}}

Qual é o valor finalque aparece na saída??

Controle de fluxo de um programa• Exercício: Na esteira abaixo quando o sensor S1 for

acionado por uma peça o motor M1 deve ser ligado e quando a peça acionar o sensor S2 o motor deve ser desligado. Implemente um programa em C que atenda o solicitado.

44

S1

M1

S2

S1 = PORTA.0S2 = PORTA.1M1 = PORTB.0

• Resolução:

45

Controle de fluxo de um programa

void main() { TRISB = 0x00; TRISA = 0xFF;do { while(PORTA.f0 = = 0);

PORTB.f0 = 1;

while(PORTA.f1 = = 0);

PORTB.f0 = 1;

} while(1); }

Controle de fluxo de um programa• Exercício: Na esteira abaixo a peça é colocada na posição

dada pelo sensor S1, e com isso o motor M1 é ligado, levando a peça até o sistema de aquecimento. Neste instante o motor M1 é desligado e a peça espera 3 segundos, sendo o motor M1 ligado novamente para levar a peça para o resfriamento, quando então o motor M1 é desligado novamente, aguardando agora 4 segundos neste estágio. Após decorrido o tempo o motor M1 é ligado novamente para levar a peça até a posição dada pelo sensor S4, quando o motor é desligado novamente. Implemente um programa em C que atenda o solicitado.

46

S1 = PORTA.0S2 = PORTA.1S3 = PORTA.2S4 = PORTA.3M1 = PORTB.0

• Resolução:

47

Controle de fluxo de um programa

Controle de fluxo de um programa

• Declaração de controle condicional DO ... WHILE

DO { }WHILE (true) FAÇA{ } ENQUANTO (verdadeiro)

• Executa a ação ANTES de verificar a condução. Enquanto a condição permanecer verdadeira o(s) comando(s) é/são executados.

48

DO { Comandos }WHILE (true);

49

Controle de fluxo de um programa

pergunta ?

Comandos

N

V

do { Comandos }while (true);

• Exemplo:

50

Controle de fluxo de um programa

void main() {unsigned char contador=0;

TRISB = 0x00;do {

PORTB= contador; contador++; Delay_ms(300); } while(contador < 31); }

• Exemplo:

51

Controle de fluxo de um programa

void main() { TRISB = 0x00;PORTB=0x01; do{ do {

PORTB= PORTB<<1; delay_ms(300); } while(PORTB!=128); do {

PORTB= PORTB>>1; delay_ms(300); } while(PORTB!=1); }while(1); }

EXERCÍCIOS DE REVISÃO

52

Exercícios de revisão

Exercícios de revisão• Exercício : No sistema abaixo quando uma peça é colocada na

posição dada pelo sensor S1 o motor M1 é ligado, levando a peça até o sensor S2 e caindo na caixa de saída. Sabe-se que a caixa suporta até 20 peças. Implemente um contador(CONT) para que somente quando somente 20 peças caírem na caixa o motor M1 é desligado e a lâmpada L1 é ligada, alertando ao operador da necessidade de trocar a caixa. Implemente um algoritmo que atenda o solicitado.

53

S1 = PORTA.0S2 = PORTA.1M1 = PORTB.0L1= PORTB.1

• Resolução:

54

Exercícios de revisão

Exercícios de revisão• Exercício: No exercício anterior foi acrescentado o

botão B1 no painel para que quando o operador trocar a caixa ele irá apertar o botão a lâmpada L1 irá apagar, o motor M1 é ligado novamente, o contador é zerado e o ciclo se inicia novamente.

55

S1 = PORTA.0S2 = PORTA.1B1= PORTA.2M1 = PORTB.0L1= PORTB.1

• Resolução:

56

Exercícios de revisão

Exercícios de revisão• Exercício: No sistema de seleção da página seguinte

quando uma caixa é colocada na posição dada pelo sensor S1 o motor M1 é ligado levando a caixa até o sensor S5, quando então é desligado. Implemente um programa para que de acordo com o tipo de caixa, dada pela figura e identificada no sistema através do acionamento dos sensores S2,S3 e S4, somente a lâmpada correspondente fique ligada. Esta lâmpada somente poderá ficar ligada até a caixa correspondente chegar ao sensor S5. O sistema é contínuo.

57

Exercícios de revisão

58

S1 = PORTA.0S2 = PORTA.1S3 = PORTA.2S4 = PORTA.3S5 = PORTA.4

M1= PORTB.0L1= PORTB.1L2= PORTB.2L3= PORTB.3

• Resolução:

59

Exercícios de revisão

60

REFERÊNCIAS

• Robert Schildt. C completo e total.• User´s Manual MikroC• Fábio Pereira. Programação em C• Notas de aula do Prof. Stefano