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 Denies 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 Denies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Innita . . . . . . . . . . . . . . . . . . . . 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 especcos 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 especcos 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 Denies Gerais em Linguagem C 4
2 Denies Gerais em Linguagem C
2.1 A Linguagem C Case Sensitive
Case sensitive signica que a linguagem C diferencia as letras maisculas das minsculas.
Assim, os identicadores 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 oat 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
rmware 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 Denies 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 dene 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
oat 4 1, 5 10
45
3, 4 10
38
Valores com casas decimais (ponto utuante)
double 8 4, 9 10
324
1, 8 10
308
Valores com casas decimais (ponto utuante)
2 Denies Gerais em Linguagem C 6
Alm disso, temos os seguintes modicadores de tipo:
Tab. 3: Modicadores de Tipos de Dados
Tipo Modicao
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
long int 4 2
31
2
31
1
signed long int 4 2
31
2
31
1
unsigned long int 4 0 2
32
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 denir as constantes, possvel utilizar estas palavras como tendo o mesmo sig-
nicado do valor numrico atribudo.
2 Denies Gerais em Linguagem C 7
2.5.2 Denies
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 nal da sentena.
Assim, os comandos de denio #dene 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 denies 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 modicador 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 Denies 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 denies 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 Denies 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 denies
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 denies 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 modicar 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++;
Signicado: 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--;
Signicado: 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++;
Signicado: 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;
Signicado: 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--;
Signicado: 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 = x y 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 signica 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 signica 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 denir 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 dene 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 denimos 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 car 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 verica 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 m 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 Innita
Microcontroladores em geral so programados para executar uma tarefa indenidamente.
Dessa forma, o uso de laos innitos bastante comum. Uma maneira de criar um lao
innito 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 nal 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/.