Você está na página 1de 21

RESUMO

Linguagem C para Microcontroladores

Prof. Glauber G. O. Brante

UTFPR Universidade Tecnolgica Federal do Paran


DAELT Departamento Acadmico de Eletrotcnica
Sumrio
1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Definies Gerais em Linguagem C . . . . . . . . . . . . . . . . . . . . . 4
2.1 A Linguagem C Case Sensitive . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Palavras Reservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Representao Numrica . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Tipos de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5.1 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5.2 Definies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.6 Variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.6.1 Variveis Locais . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.6.2 Variveis Globais . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.7 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.8 Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.1 Operadores Aritmticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Operadores Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Operadores Lgicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 Associao de Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4 Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.1 A Estrutura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 A Estrutura if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.3 A Estrutura if-else if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.4 A Estrutura switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 Estruturas de Repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.1 O Lao for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.1.1 O Comando break . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.2 O Lao while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2.1 Estrutura de Repetio Infinita . . . . . . . . . . . . . . . . . . . . 19
5.3 O Lao do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6 Comentrios Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1 Introduo 3

1 Introduo
O objetivo desse documento fornecer um resumo sobre a linguagem C com nfase em
aplicaes para microcontroladores. O emprego da linguagem C na programao de mi-
crocontroladores no complicado, mas exige conhecimento mnimo da estrutura de pro-
gramao, alm de conhecimentos especficos sobre as estruturas internas do microcon-
trolador em questo. Este resumo apresentar as estruturas de programao mais comuns,
necessrias para se programar microcontroladores. Para os conhecimentos especficos de
cada microcontrolador, uma leitura do datasheet do componente se faz necessria.
A estrutura bsica de um programa em C para microcontroladores a seguinte:
void main()
{
// inicializaes de hardware e software

while(1) // loop infinito


{
/* tarefas a serem executadas pelo microcontrolador
durante o funcionamento */
}
}

Com o uso inteligente dos comentrios e funes, a programao se torna de mais f-


cil compreenso. Programas extensos podem ser divididos em sub-rotinas (funes) que
ocasionalmente consumiro menos memria do microcontrolador e tornaro o se proces-
samento mais rpido.
2 Definies Gerais em Linguagem C 4

2 Definies Gerais em Linguagem C

2.1 A Linguagem C Case Sensitive


Case sensitive significa que a linguagem C diferencia as letras maisculas das minsculas.
Assim, os identificadores CONTADOR, contador e Contador so diferentes entre si. De-
vemos prestar bastante ateno a esse fato, pois se criarmos uma varivel de uma maneira
e escrevermos de outra na hora de utiliz-la teremos um erro de compilao.
Essa regra tambm se aplica a todos os comandos da linguagem C, que devem ser
escritos em letras minsculas, e.g., while, for, if.

2.2 Palavras Reservadas


A linguagem C possui um conjunto de palavras reservadas que no podem ser usadas como
variveis de programa. As palavras reservadas da linguagem C, no padro ANSI, so:

Tab. 1: Palavras Reservadas em Linguagem C


auto break case char const
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef union unsigned void
volatile while main

Como j comentado, uma palavra reservada da linguagem C no pode ser utilizada pelo
programador como varivel do programa. A seguir temos um exemplo de erro no emprego
de variveis:
while = 1;
int = 200;

2.3 Comentrios
Os comentrios auxiliam na documentao do programa e so fundamentais para enten-
dimento futuro de sua funcionalidade, especialmente se quem vai fazer a manuteno do
firmware no o prprio programador que o criou. Alm disso, os comentrios tambm
so teis excluso de linhas de cdigo durante a compilao, facilitando os testes durante a
programao.
Em geral, grande parte dos compiladores aceita dois tipos de comentrios, os de linha
simples e os de mltiplas linhas. Os comentrios de linha simples sempre so iniciados
com // (dupla barra), fazendo com que o compilador ignore tudo o que estiver na mesma
linha depois da dupla barra. Por exemplo:
// Este um comentrio de linha simples.
2 Definies Gerais em Linguagem C 5

Por sua vez, os comentrios de mltiplas linhas devem ser sempre iniciados com /* e
terminados com */. Por exemplo:
/* Este um
comentrio de
mltiplas linhas.
*/

2.4 Representao Numrica


Nessa subseo apresentaremos um resumo das representaes numricas para microcon-
troladores PIC, baseados no compilador MikroC Pro. Os tipos numricos so os mesmos
para todos os microcontroladores, porm a representao numrica pode variar entre os
diversos compiladores existentes.

Decimal:
valor_decimal = 125;

Binrio:
PORTA = 0b11110001;

Hexadecimal:
valor_hexa = 0xFF;

Octal:
valor_octal = 075;

Caractere:
caracter = a;

2.5 Tipos de Dados


Toda varivel usada em um programa deve ser declarada como de um determinado tipo,
que define seu tamanho (em nmero de bits) e suas caractersticas. As variveis podem ser:

Tab. 2: Tipos de Dados


Tipo Bytes Mnimo Mximo Representa
void Zero Sem valor Sem valor Valores nulos
char 1 -128 127 Caracteres
int 2 -32768 32767 Inteiros
45 38
float 4 1, 5 10 3, 4 10 Valores com casas decimais (ponto flutuante)
324 308
double 8 4, 9 10 1, 8 10 Valores com casas decimais (ponto flutuante)
2 Definies Gerais em Linguagem C 6

Alm disso, temos os seguintes modificadores de tipo:

Tab. 3: Modificadores de Tipos de Dados


Tipo Modificao
signed Com sinal
unsigned Sem sinal
short Inteiro menor que o padro
long Inteiro maior que o padro

Portanto, temos os seguintes tipos de dados inteiros:

Tab. 4: Tipos de Dados Inteiros


Tipo Bytes Mnimo Mximo
char 1 -128 127
signed char 1 -128 127
unsigned char 1 0 255
short int 2 -128 127
signed short int 2 -128 127
unsigned short int 2 0 255
int 2 -32768 32767
signed int 2 -32768 32767
unsigned int 2 0 65535
short 2 -32768 32767
signed short 2 -32768 32767
unsigned short 2 0 65535
31
long int 4 2 231 1
signed long int 4 231 231 1
unsigned long int 4 0 232 1

2.5.1 Constantes
Servem para criar smbolos de valor constante que auxiliam na programao. No momento
da compilao, o compilador se encarrega de atribuir os valores corretos aos smbolos
criados. Por exemplo:
const LIGADO = 1;
const DESLIGADO = 0;
const TMAX = 100;

Aps definir as constantes, possvel utilizar estas palavras como tendo o mesmo sig-
nificado do valor numrico atribudo.
2 Definies Gerais em Linguagem C 7

2.5.2 Definies
Alm de dar nome a valores constantes, tambm podemos atribuir outros nomes a smbolos
j existentes no microcontrolador. Por exemplo, imagine que voc tenha um LED ligado
ao bit 0 da porta A do seu microcontrolador, alm de um motor DC ligado ao bit 1 dessa
mesma porta. Para facilitar a programao, pode-se fazer:
#define LED PORTA.B0
#define MOTOR PORTA.B1

Observe que na Linguagem C os comandos iniciados pelo caractere # so os nicos


que no recebem ponto-e-vrgula no final da sentena.
Assim, os comandos de definio #define e const servem para tornar o programa
mais compreensvel. Alm disso, estes comandos so sempre eliminados pelo compilador,
ou seja, no consomem memria extra do microcontrolador.
Para visualizar sua utilizada, considere o cdigo abaixo utilizando definies e cons-
tantes:
#define LED PORTA.B0
#define MOTOR PORTA.B1

const LIGADO = 1;
const DESLIGADO = 0;

void main()
{
LED = LIGADO;
MOTOR = LIGADO;
}

2.6 Variveis
Uma varivel sempre deve ser declarada da seguinte forma:
(<modificador>) <tipo de dado> <nome da varivel> (= <valor>);

Note que a utilizao do modificador e da inicializao da varivel so opcionais.


Exemplos:
unsigned int valor = 123;
char letra = a;
int contador;

As variveis podem ser do tipo locais ou globais, conforme veremos a seguir.


2 Definies Gerais em Linguagem C 8

2.6.1 Variveis Locais


So variveis declaradas dentro de um bloco de instrues (ou funo) e s podem ser
acessadas dentro desse bloco. Exemplo:
int media()
{
int valor1 = 5;
int valor2 = 7;

return (valor1+valor2)/2;
}

Uma observao importante que todas as definies de variveis locais devem apare-
cer logo no incio do bloco/funo.

2.6.2 Variveis Globais


So declaradas fora dos blocos de funo e podem ser acessadas por todas as funes e
blocos de instrues. Exemplo:
int valor1 = 5;
int valor2 = 7;

int media()
{
return (valor1+valor2)/2;
}

int soma()
{
return valor1+valor2;
}

Mas ateno, apesar de parecer uma boa ideia declarar funes globais devemos ter
bastante cuidado com sua utilizao. Uma vez que estas variveis podem ser acessadas
por todas as funes, difcil manter o controle sobre seus valores medida que o cdigo
vai sendo executado. Por essa razo, declarar variveis globais no considerada uma boa
prtica de programao, devendo ser utilizadas apenas quando estritamente necessrias, e
de forma bastante cuidadosa.

2.7 Funes
Quando temos trechos de cdigos que so repetidos vrias vezes, podemos isolar estes tre-
chos em funes. Assim, podemos chamar uma funo em diferentes pontos do programa
principal, evitando reescrever aquele trecho de cdigo repetidamente.
Uma funo deve ser declarada antes de ser chamada. Por isso importante escrever
todas as novas funes antes da funo principal (main). Por exemplo:
2 Definies Gerais em Linguagem C 9

void piscaLED() // declara o incio da funo piscaLED


{
PORTA.B0 = 1; // liga o pino A0
delay_ms(1000); // aguarda 1000ms (1 segundo)
PORTA.B0 = 0; // desliga o pino A0
delay_ms(1000); // aguarda 1 segundo
}

void main(void) // incio do programa principal


{
while(1)
{
piscaLED(); // chama a funo piscaLED
}
}
O void, que traduzido para portugus quer dizer vazio, um tipo de dado utilizado em
funes que no retornam nenhum parmetro. A funo main sempre do tipo void, pois
no retorna nem recebe nanhum valor.
Entretanto, as funes podem muitas vezes conter parmetros de entrada que carregam
informaes para dentro do bloco da funo, alm de parmetros de sada, devolvendo
informaes ao programa principal. Por exemplo:
int media(int a, int b) /* declara o incio da funo media.
Essa funo recebe dois valores
do tipo int (a e b) */
{
return (a + b)/2; // retorna um valor do tipo int
}

void main(void) // incio do programa principal


{
int valor1 = 10;
int valor2 = 20;
int result;

result = media(valor1, valor2); /* A funo mdia retorna


seu valor do tipo int
na varivel result */
}

2.8 Header
Em muitos compiladores, necessrio incluir um arquivo que contm todas as definies
do microcontrolador sendo utilizado. Isto feito atravs do comando #include. Em geral,
temos a seguinte sintaxe que deve ser includa logo no incio de qualquer programa:
#include<microcontrolador.h>
Alm deste arquivo com as definies do microcontrolador, podemos utiliza a instruo
#include para incluir algum arquivo denominado cabealho, contendo funes auxiliares
a serem utilizadas. Por exemplo:
#include<nome_do_arquivo.h>
3 Operadores 10

3 Operadores
A linguagem C possui operadores para atribuir, comparar ou modificar dados e variveis.
Podemos dividir estes operadores em quatro categorias principais:

Aritmticos: para clculos;

Relacionais: para comparar valores numricos;

Lgicos: para testar condies ou manipular bits;

Booleanos: para realizar operaes lgicas com mais de um bit.

3.1 Operadores Aritmticos


Em linguagem C temos os seguintes operadores aritmticos:

Tab. 5: Operadores Aritmticos


Smbolo Operao
+ Soma
- Subtrao
* Multiplicao
/ Diviso
% Resto inteiro da diviso
++ Incremento em um
Decremento em um

Os operadores aritmticos sempre usam duas variveis e retornam um terceiro valor


mantendo inalteradas as variveis originais. Exemplos:
Soma:
int y = 10;
int z = 5;
int x = 0;

x = y + z; /* Soma o contedo da varivel y com a


varivel z e armazena o resultado na
varivel x */

Subtrao:
int a = 10;
int b = 5;
int c = 0;

c = b - a; /* Subtrai da varivel b o contedo da


varivel a e armazena o resultado na
varivel c */
3 Operadores 11

Multiplicao:
int a = 1;
int b = 20;
int c = 2;

a = b*c; /* Multiplica o contedo da varivel b pelo da


varivel c e armazena o resultado na
varivel a */

Diviso:
int a = 0;
int b = 20;
int c = 2;

a = b/c; /* Divide o contedo da varivel b pelo da


varivel c e armazena o resultado na
varivel a */

Resto inteiro da diviso:


int a = 1;
int b = 25;
int c = 2;

a = b%c; /* Divide o contedo da varivel b pelo da


varivel c e armazena o resto da diviso na
varivel a */

Incremento em um:
int contagem = 0;

contagem++; // Incrementa a varivel contagem em um

Decremento em um:
int contagem = 0;

contagem--; // Decrementa a varivel contagem em um

3.2 Operadores Relacionais


Realizam operaes de comparao, retornando os valores FALSO (0) ou VERDADEIRO
(1). Esses operadores no afetam o contedo das variveis sendo comparadas.
3 Operadores 12

Tab. 6: Operadores Relacionais


Smbolo Descrio
== Igual a
!= Diferente de
< Menor que
> Maior que
<= Menor ou igual
>= Maior ou igual

Exemplo:
void main()
{
unsigned char cont = 0;
while(1)
{
if (PORTA.B0 == 1) // Se o pino A0 estiver ligado
if (cont < 9)
cont++; /* Se contagem for maior que 9,
incrementa */
else
cont = 0; // Caso contrrio, zera
}
}

3.3 Operadores Booleanos


So usados para realizar testes booleanos entre elementos em um teste condicional. Os
operadores so:

Tab. 7: Operadores Booleanos


Smbolo Descrio
&& E (AND)
|| OU (OR)
! NO (NOT)

Exemplo 1:
int A = 0;
if ((A > 0) && (A < 10))
A++;

Significado: se A for maior do que zero E A for menor do que dez, ento incremente
A em um.
3 Operadores 13

Exemplo 2:
int A = 0;
int B = 0;
int C = 0;
if ((A != B) || (A != C))
A--;

Significado: se A for diferente de B OU A for diferente de C, ento decremente A


em um.

3.4 Operadores Lgicos


So usados para realizar testes lgicos bit a bit. Os operadores lgicos so:

Tab. 8: Operadores Lgicos


Smbolo Descrio
& E (AND)
| OU (OR)
OU Exclusivo (XOR)
NO (NOT)
Deslocamento para a direita
Deslocamento para a esquerda

Exemplo 1:
int cont = 0;
if (PORTA.B0 & PORTA.B1)
cont++;

Significado: se PORTA.B0 for igual a um E PORTA.B1 for igual a um, ento cont
incrementado em uma unidade.
Exemplo 2:
int cont = 0b00000001;
if (PORTA.B0 | PORTA.B1)
cont = cont<<1;

Significado: se PORTA.B0 for igual a um OU PORTA.B1 for igual a um, ento o


valor de cont deslocado para a esquerda.
Exemplo 3:
int cont = 10;
if (PORTA.B0 & ~PORTA.B1)
cont--;

Significado: se PORTA.B0 for igual a um E PORTA.B1 no for igual a um, ento o


valor de cont decrementado de uma unidade.
3 Operadores 14

3.5 Associao de Operadores


Algumas abreviaes so comumente utilizadas com os operadores. Dentre elas podemos
citar:

Tab. 9: Abreviaes de Operadores


Forma Expandida Forma Reduzida
x=x+y x += y
x=x-y x -= y
x=x*y x *= y
x=x/y x /= y
x=x%y x %= y
x=x&y x &= y
x=x|y x |= y
x=xy x = y
x = x << y x <<= y
x = x >> y x >>= y
4 Estruturas Condicionais 15

4 Estruturas Condicionais

4.1 A Estrutura if
A estrutura if, que significa se em portugus, uma estrutura de deciso baseada no
resultado de um teste lgico. Sua forma geral :
if (condio)
{
comando 1;
comando 2;
...
comando n;
}

Se houver apenas uma instruo a ser executada aps o teste lgico, as chaves podem
desprezadas:
if (condio)
comando;

Em C, qualquer nmero diferente de zero considerado verdadeiro, o que significa que


a condio if s ser falsa se o teste lgico aplicado resultar em zero (0). Qualquer outro
valor, mesmo que negativo, considerado verdadeiro (1).
Exemplo:
void main()
{
int contagem = 0;
if (PORTA.B0)
contador++; /* Apenas se o valor da porta A0 for igual a
um, o contador ser incrementado */
}
Entretanto, em geral utilizamos uma expresso lgica como condio de entrada para a
estrutura if:
void main()
{
int contagem = 0;
if (PORTA.B0 == 0)
contador++; /* Apenas se o valor da porta A0 for igual a
zero, o contador ser incrementado */
}

Uma observao importante quanto a diferena entre o operador de atribuio (=) e


a operao booleana de igualdade (==). Para inicializar uma varivel utilizamos =, porm,
para testar o valor de uma varivel utilizamos ==. Por exemplo:
int a = 10; // Inicializamos a varivel a com o valor 10

if (a == 10) // Fazemos o teste booleano com a varivel a


a++;
4 Estruturas Condicionais 16

4.2 A Estrutura if-else


A estrutura if pode ser expandida com o uso de else (seno), que permite definir comandos
a serem executados caso o teste seja falso (0). Por exemplo:
int i = 10;
int j = 5;

if (i == 10) // Se i for igual a 10, incrementa j


j++;
else // Seno, decrementa j
j--;

Caso haja mais de um comando if na sequncia, o else estar sempre relacionado com
o ltimo if. Por exemplo:
int i = 10;
int j = 5;

if (i == 10) // Se i for igual a 10, incrementa j


j++;
else // Seno, decrementa j
j--;

4.3 A Estrutura if-else if


Este tipo de estrutura permite um nmero de alinhamentos de comandos, possibilitando
colocar estruturas if dentro de outras estruturas if com maior facilidade. Seu formato geral
:
if (condio 1)
{
comandos;
}
else if (condio 2)
{
comandos;
}
else if (condio 3)
{
comandos;
}

A estrutura if-else if uma alternativa para tornar tomadas de decises mais rpidas em
alguns casos, Isto ocorre porque, no momento em que alguma condio seja satisfeita, os
demais blocos if subsequentes no sero sequer testados.
4 Estruturas Condicionais 17

4.4 A Estrutura switch


A estrutura switch muito parecida com a estrutura if-else if. A diferena que switch no
aceita expresses lgicas para tomar decises, mas somente constantes. O comando switch
testa o valor de uma varivel e executa os comandos correspondentes a casos (cases) pr-
estabelecidos. Cada case define uma srie de comandos que sero executados at chegar na
instruo break. Quando nenhum caso correspondente for encontrado, a clusula default
ser executada. Porm, o uso da clusula default opcional.
Formato da estrutura switch:
switch(varivel)
{
case constante1:
comandos;
break;
case constante2:
comandos;
break;
...
case constante n:
comandos;
break;
default:
comandos;
break;

Exemplo de uso da estrutura switch:


int contador = read_ADC(); /* l o valor do conversor AD e armazena
na varivel contador */
switch(contador)
{
case 0:
x++;
PORTA.B0 = 1;
break;
case 1:
PORTA.B1 = 1;
break;
case 2:
PORTA.B0 = 0;
PORTA.B1 = 0;
break;
default:
break;
5 Estruturas de Repetio 18

5 Estruturas de Repetio

5.1 O Lao for


O lao for utilizado quando precisamos de uma ciclo controlado de repeties. Em sua
inicializao definimos uma varivel de controle, a qual damos um valor inicial, uma con-
dio de parada, e uma regra de incremento (ou decremento). Antes de serem executados
os comandos do lao for, avalia-se a condio de teste. Caso esta condio seja verdadeira,
os comandos so executados. A cada ciclo de execuo (iterao), a varivel de controle
incrementada ou decrementada de acordo com uma regra.
A estrutura geral do lao for :
for(inicializao; condio; incremento)
{
comandos;
}
Vejamos um exemplo de uso:
for(i = 0; i < 10; i++)
{
PORTA.B0 = 1; // liga o pino A0
delay_ms(1000); // aguarda 1 segundo
PORTA.B0 = 0; // desliga o pino A0
delay_ms(1000); // aguarda 1 segundo
}

Neste exemplo, a varivel i inicialmente carregada com o valor 0 (i = 0). Como


a condio inicial verdadeira (i < 10), os comandos do lao so executados. Aps a
execuo dos comandos do lao, a varivel i incrementada em uma unidade, dada pela
condio de incremento i++, e novamente os comandos do lao so executados. Isto
feito at que a condio se torne falsa, isto , quando i for igual a 10.
Ainda possvel utilizar o lao for em passos decrescentes. O mesmo cdigo acima
pode ser escrito de maneira equivalente como:
for(i = 10; i > 0; i--)
{
PORTA.B0 = 1; // liga o pino A0
delay_ms(1000); // aguarda 1 segundo
PORTA.B0 = 0; // desliga o pino A0
delay_ms(1000); // aguarda 1 segundo
}

5.1.1 O Comando break


o comando break utilizado para encerrar o lao for antes de se completar todas as itera-
es. Quando o lao quebrado, o programa pula para a prxima instruo aps o lao.
Exemplo:
void main()
{
int i = 0;
5 Estruturas de Repetio 19

for(i = 0; i < 10; i++)


{
if (PORTB.B0 == 1)
break;

PORTA.B0 = 1; // liga o pino A0


delay_ms(1000); // aguarda 1 segundo
PORTA.B0 = 0; // desliga o pino A0
delay_ms(1000); // aguarda 1 segundo
}
}
Neste exemplo, o pino A0 ficar piscando desde que o pino B0 seja diferente de 1.
Quando isto acontecer (quando B0 for ligado), o comando break ser executado e o lao
ser encerrado.

5.2 O Lao while


O lao while tem a seguinte estrutura:
while(condio)
{
comandos;
}
Dessa forma, o lao inicialmente verifica uma condio lgica. Se esta condio for
verdadeira, os comandos dentro do lao sero executados, caso contrrio, o programa salta
para a linha de comando imediatamente aps o fim do lao.
A condio pode ser uma operao relacional, ou um teste booleano. Por exemplo:
while(x<50) // Enquanto x for menor do que 50
{
x++; // incrementa x
}

5.2.1 Estrutura de Repetio Infinita


Microcontroladores em geral so programados para executar uma tarefa indefinidamente.
Dessa forma, o uso de laos infinitos bastante comum. Uma maneira de criar um lao
infinito fornecer uma condio sempre verdadeira ao while. Assim, uma estrutura tpica
de um programa em C para microcontroladores a seguinte:
void main()
{
// inicializaes de hardware e software

while(1) // loop infinito


{
/* tarefas a serem executadas pelo microcontrolador
durante o funcionamento */
}
}
onde a condio em while(1) sempre verdadeira (sempre igual a 1).
5 Estruturas de Repetio 20

5.3 O Lao do-while


O lao do-while nada mais do que uma variao do lao while. Sua estrutura geral :
do
{
comandos;
} while(condio);

A diferena aqui que os comandos so executados antes de se realizar o teste lgico


de condio. Caso o teste executado ao final seja verdadeiro, o lao executado novamente
do incio. Caso contrrio, o programa segue com a instruo imediatamente aps o lao.
6 Comentrios Finais 21

6 Comentrios Finais
Todo o material apresentado neste resumo material de livre acesso, baseado nas notas de
aula disponveis em http://paginapessoal.utfpr.edu.br/gbrante, bem como no livro Progra-
mao Linguagem C para Microcontroladores 8051, da iniciativa u8051, disponvel em
http://www.u8051.com.br/.