Aula 06 - Estruturas de Repetição (while, for e do while)
Nesta aula vamos estudar as estruturas de repetição da linguagem C. Elas permitem que um trecho do programa seja executado várias vezes, de forma controlada ou contínua.
1. O que é uma repetição?
Uma repetição, também chamada de laço ou loop, faz o programa executar o mesmo bloco de código mais de uma vez.
Exemplo prático:
- Ler um botão continuamente.
- Piscar um LED várias vezes.
- Contar pulsos de um sensor.
- Atualizar uma saída enquanto uma condição for verdadeira.
2. Estrutura while
O comando while executa um bloco de código enquanto uma condição for verdadeira.
while(condicao)
{
// Comandos executados enquanto a condição for verdadeira
}
Exemplo:
int contador = 0;
while(contador < 10)
{
contador++;
}
Nesse exemplo, o contador começa em zero e vai aumentando até chegar a 10.
3. while(1) no PIC
Em programação de microcontroladores, é muito comum usar while(1). Esse comando cria um laço infinito.
while(1)
{
// Programa principal
}
Esse é o funcionamento normal de um PIC: depois da configuração inicial, ele entra no laço principal e fica executando o programa continuamente.
4. Exemplo com leitura de botão
#include <xc.h>
void main()
{
TRISA = 0xFF; // PORTA como entrada
TRISB = 0x00; // PORTB como saída
while(1)
{
if(PORTAbits.RA0 == 1)
{
PORTBbits.RB0 = 1;
}
else
{
PORTBbits.RB0 = 0;
}
}
}
O programa fica verificando continuamente o botão ligado ao pino RA0. Se o botão for acionado, o LED no RB0 acende. Caso contrário, o LED apaga.
5. Estrutura for
O comando for é usado quando sabemos quantas vezes queremos repetir uma ação.
for(inicio; condicao; incremento)
{
// Comandos repetidos
}
Exemplo:
int i;
for(i = 0; i < 10; i++)
{
// Executa 10 vezes
}
Explicação:
- i = 0: valor inicial.
- i < 10: condição para continuar repetindo.
- i++: incrementa a variável a cada repetição.
6. Exemplo de repetição com for
int i;
for(i = 0; i < 5; i++)
{
PORTBbits.RB0 = 1;
__delay_ms(500);
PORTBbits.RB0 = 0;
__delay_ms(500);
}
Esse exemplo pisca o LED conectado ao RB0 cinco vezes.
7. Exemplo com _XTAL_FREQ
#include <xc.h>
#define _XTAL_FREQ 4000000
void main()
{
TRISB = 0x00;
while(1)
{
PORTBbits.RB0 = 1;
__delay_ms(500);
PORTBbits.RB0 = 0;
__delay_ms(500);
}
}
Nesse código, o LED fica piscando continuamente com intervalo de 500 milissegundos.
8. Estrutura do while
O comando do while executa o bloco de código pelo menos uma vez antes de testar a condição.
do
{
// Comandos executados pelo menos uma vez
}
while(condicao);
Exemplo:
int contador = 0;
do
{
contador++;
}
while(contador < 10);
A diferença principal é que o teste da condição acontece no final da estrutura.
9. Comparando while, for e do while
- while: usado quando a repetição depende de uma condição.
- for: usado quando sabemos a quantidade de repetições.
- do while: usado quando o bloco precisa executar pelo menos uma vez.
10. Erros comuns
Erro 1: esquecer de alterar a variável dentro do while.
int contador = 0;
while(contador < 10)
{
// contador nunca muda
}
Esse erro cria um laço infinito sem intenção.
Correção:
int contador = 0;
while(contador < 10)
{
contador++;
}
Erro 2: ponto e vírgula após o for.
for(i = 0; i < 10; i++);
{
PORTBbits.RB0 = 1;
}
O ponto e vírgula encerra o comando for antes do bloco.
11. Exercício prático
Complete mentalmente o que acontece no código abaixo:
int contador = 0;
while(contador < 3)
{
contador++;
}
Resposta: o contador começa em 0, passa para 1, depois 2, depois 3. Quando chega a 3, a condição deixa de ser verdadeira e o laço termina.
Resumo da Aula
- Estruturas de repetição executam comandos várias vezes.
- while repete enquanto a condição for verdadeira.
- while(1) cria o laço principal infinito do PIC.
- for é ideal para repetições com quantidade definida.
- do while executa primeiro e testa a condição depois.