Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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.
*/
Decimal:
valor_decimal = 125;
Binrio:
PORTA = 0b11110001;
Hexadecimal:
valor_hexa = 0xFF;
Octal:
valor_octal = 075;
Caractere:
caracter = a;
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
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>);
return (valor1+valor2)/2;
}
Uma observao importante que todas as definies de variveis locais devem apare-
cer logo no incio do bloco/funo.
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
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:
Subtrao:
int a = 10;
int b = 5;
int c = 0;
Multiplicao:
int a = 1;
int b = 20;
int c = 2;
Diviso:
int a = 0;
int b = 20;
int c = 2;
Incremento em um:
int contagem = 0;
Decremento em um:
int contagem = 0;
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
}
}
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--;
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;
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;
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;
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
5 Estruturas de Repetio
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/.