Upload
internet
View
123
Download
6
Embed Size (px)
Citation preview
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