Beruflich Dokumente
Kultur Dokumente
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 2 de 40
Prefcio
Esta obra foi concebida com o intuito de preparar os estudantes,
professores e profissionais da rea tcnica para a criao de projetos
utilizando como ferramenta uma linguagem de programao de alto nvel, neste
material escolhemos abordar a linguagem C, que uma das linguagens mais
poderosas
e
portveis,
fato
este
que
a
tornou
amplamente
utilizada,
primeiramente para a criao de programas aplicativos para PC e mais tarde em
sistemas embarcados microcontrolados.
Trabalhar com uma linguagem de alto nvel, como C, para criar programas
para microcontroladores, exige do profissional alm de um bom conhecimento de
lgica de programao e habilidade com ela, um slido conhecimento da estrutura
de hardware do microcontrolador a ser utilizado, de forma a extrair deste o
mximo da funcionalidade de seus perifricos internos.
Esta obra estuda o software, propiciando um conhecimento completo ao
profissional e tornando-o apto a desenvolver suas prprias aplicaes, alm
disso, vale a pena ressaltar a preocupao, por parte do Centro de Tecnologia
Microgenios, em priorizar um estudo gradual e prtico, para isso usamos os kits
de desenvolvimento, como base para a realizao de diversas experincias que
complementam e fixam o aprendizado.
Um ponto de destaque da abordagem do treinamento o uso e detalhamento da
IDE de desenvolvimento MikroC (www.mikroe.com) a qual apesar das limitaes da
verso
de
demonstrao
gratuita
mostra-se
uma
excelente
ferramenta
de
desenvolvimento e simulao.
De maneira alguma este material apresentado como nica fonte de estudo
sobre o assunto, devendo aqueles que necessitarem se aprofundar nos tpicos aqui
estudados buscar outras fontes de pesquisa.
Por fim a equipe Microgenios agradece a ateno de todos e deseja bons
estudos e projetos.
PREFCIO ............................................................................................................................3
INTRODUO A LINGUAGEM C ........................................................................................6
Um pouco de histria .................................................... 6
Conceito ................................................................ 7
Compilador .............................................................. 7
CAPITULO 1 .........................................................................................................................8
O que so variveis? .................................................... 8
Tipos de dados .......................................................... 8
Modificadores de Tipo ................................................... 8
Declarao de variveis ................................................. 9
Variveis globais: .......................................................... 10
Variveis locais: ........................................................... 10
decimal: ...................................................... 19
Hexadecimal: .................................................. 19
binria: ...................................................... 19
octal: ........................................................ 20
decimal: ...................................................... 20
binria: ...................................................... 20
hexadecimal: .................................................. 20
octal: ........................................................ 20
CAPITULO 2 .......................................................................................................................37
Padres de Formatao de Cdigo ........................................ 37
Declarao de variveis: .................................................... 37
Declarao de funes: ...................................................... 37
Identao: .................................................................. 37
Introduo a Linguagem C
Um pouco de histria
A primeira verso de C foi criada por Dennis Ritchie em 1972 nos
laboratrios Bell para ser includo como um dos softwares a serem distribudos
juntamente com o sistema operacional Unix do computador PDP-11, na equipe
certificada por Ken Thompson.
Pelo ponto de vista tcnico, o surgimento do C iniciou-se com a linguagem
ALGOL 60, definida em 1960.O ALGOL era uma linguagem de alto nvel, que permitia
ao programador trabalhar sem conhecimento especifico da mquina, sem se
preocupar com os aspectos de como cada comando ou dado era armazenado ou
processado na mquina.
O ALGOL no teve sucesso, talvez por tentar ser alto nvel em uma poca em
que a maioria dos sistemas operacionais exigiam do usurio um grande
conhecimento de hardware.
Em 1967 surgiu o CPL (Combined Programming Language) nas universidades de
Londres e Cambridge com o objetivo, segundo a equipe do projeto, de simplificar
o ALGOL. Da mesma forma que o ALGOL, o CPL no foi bem aceito, em especial pelos
projetistas
de
sistemas
operacionais
que
a
consideravam
difcil
sua
implementao.
Ainda em 1967, em Cambridge, Martin Richards criou o BCPL (Basic CPL), uma
simplificao do CPL, tentando manter apenas as partes funcionais do CPL.
Em 1970, Ken Thompson, chefe da equipe que projetou o UNIX para o PDP11 do
Bell Labs, implementou um compilador para uma verso mais reduzida do CPL. Que
batizou de linguagem de B.
Tanto o BCPL quanto o B mostraram-se muito limitadas, resolvendo apenas
para certos tipos de problemas. Isto foi sentido especialmente na primeira
verso do PDP11, lanado no mercado em 1971. Um dos fatores que levou a esta
constatao foi a inteno do grupo responsvel pelo UNIX de reescrev-lo todo
em uma linguagem de alto nvel, e para isto B era considerado lento.
Diante desses problemas a Bell Labs encarregou o projetista Dennis Ritchie
a projetar uma nova linguagem, sucessora do B, que viria ento, a ser chamada de
C.
A linguagem C buscou manter o poder de manipulao de hardware e ainda
assim dar ao programador novas condies para o desenvolvimento de programas em
reas diversas como, comercial, cientfica e engenharia.
Por vrios anos (aproximadamente 10) a sintaxe(padronizao de cdigo) tida
como padro da linguagem C foi aquela fornecida com o UNIX verso 5.0 do Bell
Labs. A principal documentao deste padro encontra-se na publicao "The C
Programming Language", de Brian Kernighan e Dennis Ritchie (K&R), tida como a
"bblia da linguagem C".
O mais interessante desta verso de C era que os programas-fonte criados
para rodar em um tipo de computador podiam ser transportados e recompilados em
outros sem grandes problemas. A esta caracterstica d-se o nome de
portabilidade. Com ela, uma empresa que desenvolve um programa pode faz-lo
rodar em diferentes computadores sem ter um elevado custo a cada vez que isto
for feito.
Em 1985, O ANSI (American National Standards Institute) estabeleceu um
padro oficial de C o chamado "C ANSI" que adotado at hoje.
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 6 de 40
Conceito
C uma linguagem estruturada, ou seja, existe um modo de organizao para
escrita do programa baseada no modelo ANSI C, a principal caracterstica dessa
linguagem a compartilhamento do cdigo e dos dados.
C chamada de linguagem de mdio nvel, pois une as facilidades de
linguagens de alto nvel(BASIC, PASCAL) com manipulao de hardware somente
obtida com a linguagem ASSEMBLY, mas mesmo tendo essas caractersticas uma
linguagem de fcil uso e aprendizagem.
A linguagem C "Case Sensitive", isto , ela faz a diferenciao das
letras maisculas e minsculas EX: MAin() ou mAIn() diferente de main(),
portanto utilize uma padronizao para escrita de seus cdigos
Compilador
A linguagem que seja os processadores, incluindo microcontroladores,
entendem chamada: "cdigo de mquina", a partir dessa linguagem os
processadores executam as tarefas programadas pelo programador. Mas como uma
tarefa muito complicada e improdutiva escrever programas em "cdigo de mquina",
foi criada uma ferramenta chamada compilador que nada mais que um tradutor
que pega seu cdigo escrito em C e traduz para "cdigo de mquina".
CAPITULO 1
Neste capitulo iremos aprender sobre variveis,
aritmticos alem de estruturas de controle e deciso.
operadores
lgicos
Para
facilitar
nossos
estudos
iremos
adotar
como
padro
os
microcontroladores de 8 bits, mas todos os conhecimentos adquiridos nesse curso
podero ser utilizados em qualquer tipo de processador ou microcontrolador.
Para iniciarmos nossos estudos vamos falar sobre variveis.
O que so variveis?
Varivel, do ponto de vista da rea de programao, uma regio de memria
previamente identificada que tem por finalidade armazenar os dados ou
informaes de um programa por um determinado espao de tempo. Uma varivel
limita-se a armazenar apenas um valor por vez.
Tipos de dados
Existem cinco tipos primitivos de dados na linguagem C: caractere (char),
inteiro (int), ponto flutuante (float e double) e sem valor (void). A tabela
abaixo representa o valor e a escala de cada tipo de dado em C.
TIPO
char
0 a 255
int
16
0 a 65535
long
32
0 a 4294967295
float ou double
32
void
nenhum valor
O tipo char pode ser utilizado tanto para manipulao de valores entre 0 e
255 quanto para representao de caracteres da tabela ASCII. Cada varivel do
tipo char pode representar somente um caractere ASCII.
O tipo int utilizado para representar nmeros inteiros de 16 bits (0 a
65535).
Esses dois primeiros tipos so os mais utilizados em linguagem C.
O tipo char e int representam nmeros inteiros e no podem ser utilizados
para representar nmeros fracionrios. Para isso, deve ser utilizado o tipo
float, tambm chamado de ponto flutuante.
O tipo float deve ser evitado ao mximo e restrito apenas s operaes que
realmente necessitarem de um tipo de dados como este.
Modificadores de Tipo
Podemos utilizar comandos especiais do C para obter outros tipos de dados.
Esses comandos especiais so chamados de modificadores de tipo e so os
seguintes:
signed, unsigned, short, e long.
O modificador de tipo signed utilizado para modificar um dado para que
ele represente valores positivos e negativos. Este tipo opcional, pois na
linguagem C a omisso do modificador unsigned o prprio compilador adota como
padro o modificador signed.
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 8 de 40
ao
compilador
que
varivel
trabalhar
O modificador short utilizado para definir uma varivel com tamanho menor
que o tipo modificado, ou seja, uma verso reduzida do tipo especificado.
O modificador long utilizado para ampliar a magnitude de representao do
tipo especificado.
TIPO
TAMANHO EM BITS
RANGE
unsigned char
(signed) char
(signed) short (int)
(unsigned) short (int)
signed int
unsigned int
(signed) long int
unsigned long int
8
8
8
8
16
16
32
32
float
32
double
32
long double
32
void
0 255
-128 +127
-128 +127
0 255
-32768 32767
0 65535
-2147483648 2147483647
0 4294967295
+/- 1.17549435082E-38 +/6.80564774407E38
+/- 1.17549435082E-38 +/6.80564774407E38
+/- 1.17549435082E-38 +/6.80564774407E38
sem valor
Declarao de variveis
Definir uma varivel cri-la na memria (aloc-la), dar a ela um nome e
especificar o tipo de dado que nela vai armazenar.
Sintaxe para criao de uma varivel em C;
<modificador> <tipo> nome_da_variavel;
O tipo deve ser um tipo de dado vlido em C tais como: char, int, float,
com
ou
sem
seus
modificadores,
unsigned,
signed,
short
e
long.
E
nome_da_variavel o nome da varivel adotada pelo programador.
As regras para a escrita de nomes de variveis e funes em C sero melhor
detalhadas mais a frente.
Em C, podemos declarar vrias variveis do mesmo tipo em um nica linha de
programa, bastando apenas separ-las por vrgulas, acompanhe:
int soma ;
unsigned char i,j,k ;
float salrio;
unsigned int idade;
short int y;
long caminho, estado;
unsigned valor;
Variveis globais:
Essas variveis so declaradas fora das funes do programa, podendo ser
acessadas em qualquer parte do programa.
Exemplo:
int contador;
char a;
void main()
//funo principal do programa
{
contador = contador + 10
}
Variveis locais:
Ao contrrio das variveis globais, uma varivel local somente existe no
escopo da funo em que foi declarada. Isto significa que uma varivel local
somente existe enquanto a funo esta sendo executada. No momento que ocorre o
retorno da funo, as variveis locais so descartadas;
Acompanhe o exemplo abaixo:
void main()
//funo principal do programa
{
int contador;
//define a varivel local "contador" como int
contador = contador + 10
}
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 10 de 40
Repare no programa exemplo acima que temos duas funes, a funo main() e
a funo subrotina(). Dentro de cada uma dessas funes foi criada uma varivel
chamada "tempo" do tipo int, essas variveis so locais e somente tem validade
dentro da funo que a declarou, ou seja, a varivel "tempo" da funo
subrotina() NO tem nenhuma ligao com a varivel "tempo" da funo main(),
pois so variveis locais;
Se por ventura cometermos o seguinte erro abaixo, acompanhe:
void subrotina () //funo de sub-rotina qualquer do programa
{
tempo = tempo * 2;
}
void main()
//funo principal do programa
{
int tempo;
}
Tipos de Operadores
A linguagem C faz uso de diversos operadores. Podemos classific-los em
algumas
categoria
principais:
aritmticos,
relacionais,
lgicos,
lgicos
bitwise(bit a bit) , outros.
Os Operadores Aritmticos:
Os operadores aritmticos so utilizados para efetuar operaes matemticas
entre dados e so classificados em duas categorias, sendo binrio ou unrio. Os
operadores binrios atuam em operaes de exponenciao, diviso, adio e
subtrao. Os unrios atua na inverso de valores, atribuindo o sinal de
positivo ou negativo.
operador
+
*
/
%
ao
Adio
Subtrao ou menos unrio
Multiplicao
Diviso
Resto da diviso inteira
++
--
Incremento
Decremento
Adio e Subtrao
Os operadores de adio e subtrao so muito simples de serem utilizados,
acompanhe:
c
d
c
a
=
=
=
=
a
d
c
d
+
+
-
b;
b;
a;
a + c;
Multiplicao e Diviso
Os operadores
assimilao;
c
d
c
a
=
=
=
=
de
multiplicao
de
diviso,
em
C,
so
de
fcil
a * b;
d * d;
c / a;
(d * a) / c;
O operador %
O operador % utilizado para retornar o mdulo(resto) de uma operao de
diviso inteira. Vejamos um exemplo:
7 / 3 = 2, em uma diviso inteira, sendo o resto igual a 1.
Assim, o valor de 7 / 3 = 2 e o valor de 7 % 3 = 1.
O operador de Incremento ++ e Decremento --:
O operador de incremento
subtrair 1 de uma varivel.
decremento
so
utilizados
para
somar
ou
EX:
C = C + 1;
No exemplo acima a varivel C foi incrementada em 1 unidade. Podemos ter o
mesmo resultado da operao acima atravs do operador de incremento ++ que
termos o mesmo resultado;
c++;
c++;
d--;
//equivale a c = c + 1;
//incrementa em 1 unidade o valor da varivel C
//incrementa em 1 unidade o valor da varivel D
variavel_a = variavel_b++;
diferente de
variavel_a = ++variavel_b;
a, b, c;
0;
a++;
++a;
Neste caso, aps a execuo dos trs comandos, o valor de "a" ser igual a
2, o valor da varivel "b" ser igual a 0 e o valor da varivel "c" ser igual a
2.
Operadores Relacionais;
Os operadores relacionais servem para comparar expresses. So muito
utilizado para comparar condies de controle do fluxo de execuo de programas.
Operador
>
>=
<
<=
==
!=
Operao realizada
maior que
maior ou igual a
menor que
menor ou igual a
igual a
diferente de
Estes
operadores
sero
muito
utilizado
para
condicionais, como veremos mais adiante em nosso curso.
construir
expresses
so
de
grande
importncia
para
Operao realizada
AND (E)
OR (OU)
NOT (NO)
Operao realizada
AND (E)
OR (OU)
XOR (OU exclusiva)
NOT (complemento de um)
deslocamento direita
deslocamento esquerda
a, b;
100;
28;
a & b;
01100100
AND (&)
b = 28
---->
00011100
O Operador OR (|)
O operador OR muito similar ao operador AND, sua operao tambm
realizada para cada bit do operando. Esse operando funciona da seguinte maneira,
verifica se nos dois operandos um respectivo bit, se em qualquer dos dois for 1
coloca no resultado 1 no bit respectivo, caso contrario coloca 0. Exemplo:
int
a =
b =
a =
a, b;
100;
28;
a | b;
01100100
OR (|)
b = 28
---->
00011100
a, b;
100;
28;
a ^ b;
01100100
XOR (^)
b = 28
---->
00011100
a, b, c;
1;
240;
~a
~b
0b11111110;
b = 0B11110000;
0b00001111;
a, b, c;
10;
10;
a >> 1;
b << 5;
// ----> 00001010
- valor 10 em binrio
>>
// ---->
Exemplo 1:
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 15 de 40
- valor 64 em decimal
>>
// ----> 1111 1000
Exemplo 2:
em b.
b = a << 4;
varivel a;
>>
pino RB0 em 1
1000 ms (milisegundos)
pino RB0 em 0
1 segundo
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 16 de 40
//
//
//
//
A operao PORTB.RB0 = 1 faz com que o pino RB0 do PORTB seja colocado em
nvel lgico 1; Para se referir a um pino das portas do PIC, PORTA, PORTB,
PORTC, PORTD, PORTE, devemos apresentar o nome do porta, mais o ponto ".", mais
a inicial "f" e o nmero do pino correspondente.
Exemplo:
PORTB.RB0 = 0; // Estamos nos referindo ao pino RB0 do PORTB
PORTD.RD5 = 1; // Estamos nos referindo ao pino RD5 do PORTD
PORTE.RE1 = 1; // Estamos nos referindo ao pino RE1 do PORTE
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 18 de 40
Representao decimal:
Para representarmos um nmero em decimal
nenhuma abreviatura, conforme o linha abaixo:
PORTB = 187;
basta
colocar
seu
valor
sem
//representao decimal
NOTA:
NUNCA DEVEMOS REPRESENTAR UM NMERO DECIMAL INICIANDO COM 0 (ZERO), POIS
MIKROC INTERPRETAR O NMERO COMO OCTAL.
EX:
PORTB = 25;
diferente de
PORTB = 025;
Representao Hexadecimal:
Para representar um nmero em hexadecimal devemos colocar o prefixo 0x (ou
0X) antes do nmero hexadecimal. (0 a F)
PORTB = 0xBB;
ou
PORTB = 0XBB; //representao hexadecimal do numero 187 decimal
Representao binria:
ou
PORTB = 0B10111011; //representao binria do nmero 187 decimal
B
-
1
RB7
MSB
0
RB6
1
RB5
1
RB4
1
RB3
0
RB2
1
RB1
1
RB0
LSB
Representao octal:
O sistema octal no um sistema muito difundido nos dias atuais. Apesar do
compilador MikroC suportar esse tipo de representao numrica, somente devemos
utiliz-la quando for realmente necessrio.
Para representar um nmero octal necessrio colocar o prefixo 0 (zero)
antes do valor numrico octal.
PORTD = 0273;
Exerccios de fixao:
Gostaramos de enviar aos pinos do PORTB os seguintes estados;
RB0 = 0; RB1 = 1; RB2 = 1; RB3 = 0; RB4 = 0; RB5 = 1; RB6 = 0; RB7 = 0
Representao decimal:
PORTB = 38;
Representao binria:
PORTB = 0b00100110;
Representao hexadecimal:
PORTB = 0x26;
Representao octal:
PORTB = 046;
caracteres
uma
NOTA:
COMANDOS QUE FAZEM PARTE DA ESTRUTURA DO C, COMO POR EXEMPLO: IF, WHILE, FOR,
SWITH , VOID MAIN, ENTRE OUTROS, OBRIGATRIAMENTE DEVERO SER DECLARADOS EM
MNSCULO.
PORTA.RA5
PORTD.RD7
TRISB.RB0
T0CON.PSA
=
=
=
=
Estrutura de um programa em C
Todo programa escrito em C consiste em uma ou mais funes, tendo como
particularidade deste fato a possibilidade de construir programas modulares e
estruturados. O programa principal escrito em C uma funo. O C uma
linguagem extremamente estruturada e exige do programador domnio adequado de
tal conceito. Veja a seguir, o menor programa possvel de ser escrito em C:
void main() // a primeira e principal funo a ser executada
{
//inicia ou abre o corpo da funo
}
//finaliza ou fecha o corpo da funo
Toda a informao situada entre colchetes "[" e "]" indica informaes que
podem ou no estar presentes em um programa.
Vamos comentar cada bloco de programa:
O primeiro bloco: Os comentrios gerais
[ blocos de comentrios de grande importncia na documentao do programa]
Este ltimo bloco trata-se de uma funo que carrega o nome nome_da_funcao.
Seu tipo pode ou no ser explicitado. Caso no seja, qualquer funo ser do
tipo int por default.
Esta funo no faz parte da funo main() e dever ser chamada em algum
momento pelas funo main() ou por outra funo para seja executados seus
comandos. Podemos no momento da chamada da funo enviar parmetros (estudaremos
mais sobre as funes a seguir).
No final da funo, encontramos o comando return, cujo objetivo retornar
a funo que a chamou um valor de retorno da funo.
No obrigatrio o uso do comando return, caso no precisemos retornar
nenhum valor na funo.
Exemplo de funo de subrotina:
void funcao(void) {
PORTB = ~ PORTB;
return;
}
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 22 de 40
void main([<parmetros>])
{
/*
Este trecho reservado para o corpo da funo, com a declarao de suas
variveis locais, seus comandos e funes de trabalho. Aqui esto os
primeiros comandos que sero executados no programa.
*/
}
NOTA:
ANTES DE CHAMARMOS QUALQUER FUNO DO PROGRAMA, COMO POR EXEMPLO EXECUTAR UMA
SUBROTINA QUALQUER, DEVEMOS GARANTIR QUE NOSSO COMPILADOR J A RECONHECEU. NO
MOMENTO DA COMPILAO, O PR-COMPILADOR, RESPONSVEL PELO RECONHECIMENTO DA
ESTRUTURA DO PROGRAMA, NO PODE ENCONTRAR UMA CHAMADA DE UMA FUNO SEM ANTES DE
RECONHECE-LA. PARA EVITAR ESSE ERRO DE COMPILAO, RECOMENDADO QUE COLOQUEMOS
O PROTTIPO DE FUNO NO PROGRAMA A CADA INSERO DE UMA NOVA FUNO.
Vamos analisar um exemplo de programa em linguagem C disponvel no prprio
compilador MikroC como exemplo. Em princpio, no quero que voc entenda o
funcionamento do programa, mas quero que voc identifique os principais blocos
de funes desse programa. Vejamos:
/*
* Project name:
PWM_Test_01 (PWM library Demonstration)
* Copyright:
(c) MikroElektronika, 2009.
* Test configuration:
MCU:
P18F4520
Dev.Board:
BIGPIC3
Oscillator:
HS, 10.0 MHz
Ext. Modules: SW:
MikroC PRO v2.50
* NOTES:
None.
*/
unsigned short j, oj;
void InitMain()
{
PORTB = 0;
TRISB = 0;
ADCON1 |= 0x0F;
PORTA = 255;
TRISA = 255;
PORTC = 0x00;
TRISC = 0;
PWM1_Init(5000);
}//~
void main()
{
initMain();
j
= 127;
oj = 0;
PWM1_Start();
while (1)
{
if (Button(&PORTA, 0,1,1))
j++ ;
if (Button(&PORTA, 1,1,1))
j-- ;
if (oj != j)
{
PWM1_Set_Duty(j);
oj = j;
PORTB = oj;
}
Delay_ms(200);
}
}//~!
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 24 de 40
/*
* Project name:
PWM_Test_01 (PWM library Demonstration)
* Copyright:
(c) MikroElektronika, 2009.
* Test configuration:
MCU:
P18F4520
Dev.Board:
BIGPIC3
Oscillator:
HS, 10.0 MHz
Ext. Modules: SW:
MikroC PRO v2.50
* NOTES:
None.
*/
parte
sero
void main()
{
initMain();
j
= 127;
oj = 0;
PWM1_Start();
while (1) {
if (Button(&PORTA, 0,1,1))
j++ ;
if (Button(&PORTA, 1,1,1))
j-- ;
if (oj != j)
{
PWM1_Set_Duty(j);
oj = j;
PORTB = oj;
}
Delay_ms(200);
}
}//~!
no
fiquem
grandes
demais
e,
por
Prottipos de Funes
No podemos usar uma funo sem declar-la previamente. Trata-se duma
instruo
geralmente
colocada
no
incio
do
programa
ou
do
arquivo,
obrigatoriamente antecedendo a definio e a chamada da funo. O prottipo
informa ao compilador o tipo que a funo retorna, o nome da funo, bem como os
parmetros que ela recebe.
Eis um exemplo:
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 26 de 40
Os identificadores
A linguagem C define identificadores como sendo nomes usados para se fazer
referncia a entidades do programa (variveis, funes, rtulos, etc.) definidas
pelo programador. Em C, um identificador composto de um ou mais caracteres,
sendo que, para identificadores internos, os 31 primeiros so significativos. O
primeiro caractere deve ser uma letra ou um sublinha (_) e os caracteres
subseqentes devem ser letras, nmeros ou sublinhas. Eis aqui alguns exemplos de
identificadores corretos e incorretos:
Corretos
Incorretos
Descrio
cont
1cont
valor23
al
totalGeral
valor-total
Estruturas de Controle
As estruturas de controle so usadas nos programas em lugares em que
necessitamos que a mquina faa repetidas operaes ou necessite de tomadas de
deciso.
O comando if (SE)
O if (SE, em portugus) uma estrutura de tomada de deciso baseada no
resultado lgico de um teste. Sua forma geral :
if (condio) comando;
ou
if (condio) { blocos de comandos};
A varivel "a" foi atribuda o valor 10, que diferente de zero (0).
Conseqentemente, o comando if ser executado e a condio de decremento da
varivel b ser executado;
if (a) b--;
Exemplo:
if (x > 5)
z = 10;
else
z = 20;
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 28 de 40
Observaes importantes:
O operador de atribuio de igualdade (=) em C diferente do operador
relacional de igualdade (==). Para testar a condio de uma varivel qualquer,
utilizamos o operador relacional de igualdade (==). Acompanhe:
if (a == b) c = 10;
diferente de
if (a = b) c = 10;
Exemplo:
void main()
{
int contador = 10;
int sinal = 5;
if (contador > sinal) sinal++; else
if (contador < sinal) sinal--; else
if (contador == sinal) sinal = 0;
}
Podemos tambm
chaves ( { e } ).
executar
blocos
de
comandos
utilizando
os
recursos
das
Exemplo:
void main()
{
int contador = 10;
int sinal = 5;
if (contador > sinal)
{ /*utilizao de blocos de comando na estrutura if-else-if*/
sinal++;
contador = 20;
}
else if (contador < sinal)
{
sinal--;
contador = 15;
}else if (contador == sinal)
sinal = 0;
}
O comando switch
O comando switch uma forma mais clara e elegante de tomar deciso dentro
de um programa em C. Diferente do comando if, a estrutura switch no aceita
expresso para a tomada de deciso, mas s aceita constante.
switch (varivel)
{
case constante1:
declarao1A;
declarao1B;
declarao1N;
break;
case constante2:
declarao2A;
declarao2B;
declarao2N;
break;
default;
declarao_default;
}
Acompanhe o exemplo:
void main()
{
int contador = 10;
int sinal = 5;
switch(contador)
{
case 2:
sinal++;
break;
case 1:
sinal = 2;
break;
case 10:
contador--;
break;
default:
sinal = 0;
}
}
Estruturas de Repetio
Os laos de repetio servem para repetir uma ou mais vezes determinada
instruo ou blocos de instrues. Existem basicamente trs tipos de estruturas
de repetio na linguagem C:
for
while
do - while
A estrutura for basicamente utilizada para laos finitos de contagem,
normalmente utilizando uma varivel de controle da contagem.
A estrutura while basicamente utilizado para repetio de um determinado
conjunto de instruo enquanto uma condio for verdadeira.
O comando do - while similar estrutura while, diferenciando apenas o
momento que analisada a condio.
Vamos conhecer sobre cada estrutura de repetio, acompanhe:
O comando For
O lao for utilizado quando necessitamos de um ciclo de repeties
controlado, pois em sua declarao podemos inicializar e incrementar ou
decrementar a varivel de controle. Antes de serem executados os comandos do
lao For-next, primeiramente avaliada a condio do teste. Caso seja
verdadeira, so executados os comandos do lao. A cada ciclo que executado o
fao for, a varivel de controle ser incrementada ou decrementada no valor
programado no incremento.
Veja a estrutura do comando For :
Microgenios Treinamentos, Kits de desenvolvimento e muito mais...
Pgina 31 de 40
ou
for (inicializao ; condio ; incremento/decremento)
{
...
comandoA1;
comandoA2;
...
}
em que:
inicializao: expresso vlida utilizada normalmente para inicializao da
varivel de controle do lao.
condio: condio para que decide pela continuidade ou no do lao de
repetio, enquanto esta condio for verdadeira, o lao for permanecer em
execuo.
Incremento/decremento: "valor incrementado em" a cada repetio do lao
for.
Exemplo:
int contador;
for (contador = 0 ; contador = 10 ; contador++ )
PORTB = contador;
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 32 de 40
PORTB.F0 ; n++)
No exemplo acima a varivel n ser incrementada 100 vezes, desde que o pino
RB0 permanea em estado lgico alto. Se o pino RB0 em algum momento do lao cair
para nvel lgico baixo, o loop ser imediatamente encerrado.
Programa Exemplo:
Aproveitando que estamos estudando as estruturas do lao de repetio for,
vamos elaborar um programa que pisca um led conectado ao pino RD0 do PIC
utilizando os recursos do lao for.
Acompanhe o esquema abaixo:
//**********************************************************
// programa de perda de tempo utilizando o lao de repetio for.
//**********************************************************
void atraso(void) // rotina de perda de tempo
{
int contador1, contador2;
for (contador1 = 0 ; contador1 < 100 ; contador1++) //lao de repetio for
for (contador2 = 0; contador2 < 1000; contador2++) ;
}
void main()
{
TRISD = 0;
while(1)
{
atraso();
PORTD = ~PORTD;
}
}
O lao while
Muitos dos programadores iniciantes no sabem do que iremos comentar agora.
Os microcontroladores no geral no possuem sistemas operacionais, os
programas que desenvolvemos para os microcontroladores PIC devem rodar
eternamente, ou possurem mecanismos que paralise a operao da CPU em alguns
momentos.
Isso necessrio, pois, por no possuir sistema operacional, o programa do
PIC no tem para onde sair, devendo ficar em operao, de preferncia eterna.
Esses um dos motivos pelos quais a funo principal main() dos programas para
microcontroladores deve ser do tipo void (valor nulo), pois no tem quem receba
os valores de retorno da funo principal main().
O comando while o comando ideal criar loops infinitos no nosso programa.
A estrutura while verifica inicialmente se a condio de teste
verdadeira. Em caso verdadeiro, todos os comandos dentro do lao while sero
executados. Ao retornar para o incio do lao, verificado novamente se a
condio de teste verdadeira, se for verdadeira, executa novamente os blocos
de comandos; se for falsa, o lao while finalizado.
Acompanhe o exemplo abaixo:
void main()
{
while (1) /* condio a ser testada. Neste exemplo a condio sempre ser verdadeira
(1);*/
{
declarao 1;
declarao 2;
declarao n;
}
}
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 34 de 40
void main()
{
int a = 25;
while (a = 5)
{
a++;
PORTB = a;
}
}
Repare que no exemplo acima o valor a condio do lao while falsa, neste
caso os comandos do lao no sero executados no programa at que a condio
seja verdadeira, ou seja, at que a = 5.
O lao do - while
O comando do - while forma uma estrutura de repetio diferente dos
comandos while e for estudado anteriormente. Sua diferena fundamental com
relao as outras tradicionais laos de loop while e for est no fato da
avaliao da condio de teste ser no final do lao de repetio, contrrio dos
outros laos que estudamos, que testam as condies no incio de cada ciclo.
formato geral:
do comando while (condio);
ou
do
{
comando 1;
comando 2;
} while (condio de teste);
void main()
{
int a = 0;
do
{
a++;
break;
PORTD = ~PORTD;
}while(a < 100);
executada.*/
}
//incrementa
//interrompe
//inverte os
/*enquanto a
Continue
O comando continue reinicia novamente o teste da condio do lao de
repetio. Toda a vez que no lao for encontrado o comando continue, os comandos
seguintes no sero executados no lao.
Exemplo:
void main()
{
int a = 0;
do
{
a++;
continue;
PORTD = ~PORTD;
} while(a < 100);
executada*/.
}
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 36 de 40
CAPITULO 2
Padres de Formatao de Cdigo
Nesse capitulo iremos sugerir algumas formas de padronizao de cdigo,
essa padronizao no pertence ao ANSI-C, mas facilita, em muito, a programao
e leitura de seus cdigos.
Declarao de variveis:
Nas variveis podemos declarar desta forma:
[modificador] [tipo] [letra_do_modificador][letra_do_tipo][nome_variavel];
EX:
unsigned char ucVariavel;
char scVariavel; // mesmo que signed char
Declarao de funes:
Podemos utilizar a mesma formatao para declarao de funes, excluindo a
funo main():
[modificador] [tipo] [letra_do_modificador][letra_do_tipo][nome_funcao]
[parametros];
EX:
void vFuncao1(unsigned char ucContador)
{
// comandos
}
unsigned char ucFuncao2()
{
// comandos
}
Identao:
Um dos recursos mais importantes e necessarios para a escrita de um
programa legvel, ela nada mais que o uso de recuos no seu cdigo para
identificao de blocos de cdigo.
Em nosso curso utilizaremos o recuo de 3 espaos.
Ex:
unsigned char ucFuncao2()
{
if (ucContador==1) // Recuo de 3 espaos
{
ucContador++;
// Recuo de 3 espaos em relao ao anterior
}
// comandos
}
ANEXOS
TABELA ASCII
Dec
Binrio
Hex
ASCII
Dec
Binrio
Hex
ASCII
Dec
Binrio
Hex
ASCII
Dec
Binrio
Hex
ASCII
0b00000001
0x01
SOH
65
0b01000001
0x41
129
0b10000001
0x81
193
0b11000001
0xC1
0b00000010
0x02
STX
66
0b01000010
0x42
130
0b10000010
0x82
194
0b11000010
0xC2
0b00000011
0x03
ETX
67
0b01000011
0x43
131
0b10000011
0x83
195
0b11000011
0xC3
0b00000100
0x04
EOT
68
0b01000100
0x44
132
0b10000100
0x84
196
0b11000100
0xC4
0b00000101
0x05
ENQ
69
0b01000101
0x45
133
0b10000101
0x85
197
0b11000101
0xC5
0b00000110
0x06
ACK
70
0b01000110
0x46
134
0b10000110
0x86
198
0b11000110
0xC6
0b00000111
0x07
BEL
71
0b01000111
0x47
135
0b10000111
0x87
199
0b11000111
0xC7
0b00001000
0x08
BS
72
0b01001000
0x48
136
0b10001000
0x88
200
0b11001000
0xC8
201
0b11001001
0xC9
202
0b11001010
0xCA
203
0b11001011
0xCB
0b00001001
0x09
HT
73
0b01001001
0x49
137
0b10001001
0x89
10
0b00001010
0x0A
LF
74
0b01001010
0x4A
138
0b10001010
0x8A
11
0b00001011
0x0B
VT
75
0b01001011
0x4B
139
0b10001011
0x8B
12
0b00001100
0x0C
FF
76
0b01001100
0x4C
140
0b10001100
0x8C
204
0b11001100
0xCC
13
0b00001101
0x0D
CR
77
0b01001101
0x4D
141
0b10001101
0x8D
205
0b11001101
0xCD
14
0b00001110
0x0E
SO
78
0b01001110
0x4E
142
0b10001110
0x8E
206
0b11001110
0xCE
15
0b00001111
0x0F
SI
79
0b01001111
0x4F
143
0b10001111
0x8F
207
0b11001111
0xCF
16
0b00010000
0x10
DLE
80
0b01010000
0x50
144
0b10010000
0x90
208
0b11010000
0xD0
17
0b00010001
0x11
D1
81
0b01010001
0x51
145
0b10010001
0x91
209
0b11010001
0xD1
18
0b00010010
0x12
D2
82
0b01010010
0x52
146
0b10010010
0x92
210
0b11010010
0xD2
19
0b00010011
0x13
D3
83
0b01010011
0x53
147
0b10010011
0x93
211
0b11010011
0xD3
20
0b00010100
0x14
D4
84
0b01010100
0x54
148
0b10010100
0x94
212
0b11010100
0xD4
21
0b00010101
0x15
NAK
85
0b01010101
0x55
149
0b10010101
0x95
213
0b11010101
0xD5
22
0b00010110
0x16
SYN
86
0b01010110
0x56
150
0b10010110
0x96
214
0b11010110
0xD6
23
0b00010111
0x17
ETB
87
0b01010111
0x57
151
0b10010111
0x97
215
0b11010111
0xD7
24
0b00011000
0x18
CAN
88
0b01011000
0x58
152
0b10011000
0x98
216
0b11011000
0xD8
25
0b00011001
0x19
EM
89
0b01011001
0x59
153
0b10011001
0x99
217
0b11011001
0xD9
26
0b00011010
0x1A
SUB
90
0b01011010
0x5A
154
0b10011010
0x9A
218
0b11011010
0xDA
27
0b00011011
0x1B
ESC
91
0b01011011
0x5B
155
0b10011011
0x9B
219
0b11011011
0xDB
28
0b00011100
0x1C
FS
92
0b01011100
0x5C
156
0b10011100
0x9C
220
0b11011100
0xDC
29
0b00011101
0x1D
GS
93
0b01011101
0x5D
157
0b10011101
0x9D
221
0b11011101
0xDD
30
0b00011110
0x1E
RS
94
0b01011110
0x5E
158
0b10011110
0x9E
222
0b11011110
0xDE
31
0b00011111
0x1F
US
95
0b01011111
0x5F
159
0b10011111
0x9F
223
0b11011111
0xDF
32
0b00100000
0x20
SPC
96
0b01100000
0x60
160
0b10100000
0xA0
224
0b11100000
0xE0
33
0b00100001
0x21
97
0b01100001
0x61
161
0b10100001
0xA1
34
0b00100010
0x22
"
98
0b01100010
0x62
162
0b10100010
0xA2
225
0b11100001
0xE1
226
0b11100010
0xE2
35
0b00100011
0x23
99
0b01100011
0x63
163
0b10100011
0xA3
227
0b11100011
0xE3
36
0b00100100
0x24
100
0b01100100
0x64
164
37
0b00100101
0x25
101
0b01100101
0x65
165
0b10100100
0xA4
228
0b11100100
0xE4
0b10100101
0xA5
229
0b11100101
0xE5
38
0b00100110
0x26
&
102
0b01100110
0x66
166
0b10100110
0xA6
230
0b11100110
0xE6
39
0b00100111
0x27
'
103
0b01100111
0x67
167
0b10100111
0xA7
231
0b11100111
0xE7
40
0b00101000
0x28
104
0b01101000
41
0b00101001
0x29
105
0b01101001
0x68
168
0b10101000
0xA8
232
0b11101000
0xE8
0x69
169
0b10101001
0xA9
233
0b11101001
0xE9
42
0b00101010
0x2A
106
0b01101010
0x6A
170
0b10101010
0xAA
234
0b11101010
0xEA
43
0b00101011
0x2B
44
0b00101100
0x2C
107
0b01101011
0x6B
171
0b10101011
0xAB
235
0b11101011
0xEB
108
0b01101100
0x6C
172
0b10101100
0xAC
236
0b11101100
0xEC
45
0b00101101
0x2D
109
0b01101101
0x6D
173
0b10101101
0xAD
237
0b11101101
0xED
46
0b00101110
47
0b00101111
0x2E
110
0b01101110
0x6E
174
0b10101110
0xAE
238
0b11101110
0xEE
0x2F
111
0b01101111
0x6F
175
0b10101111
0xAF
239
0b11101111
0xEF
48
0b00110000
0x30
112
0b01110000
0x70
176
0b10110000
0xB0
240
0b11110000
0xF0
49
0b00110001
0x31
113
0b01110001
0x71
177
0b10110001
0xB1
241
0b11110001
0xF1
50
0b00110010
0x32
114
0b01110010
0x72
178
0b10110010
0xB2
242
0b11110010
0xF2
51
0b00110011
0x33
115
0b01110011
0x73
179
0b10110011
0xB3
243
0b11110011
0xF3
52
0b00110100
0x34
116
0b01110100
0x74
180
0b10110100
0xB4
244
0b11110100
0xF4
53
0b00110101
0x35
117
0b01110101
0x75
181
0b10110101
0xB5
245
0b11110101
0xF5
54
0b00110110
0x36
118
0b01110110
0x76
182
0b10110110
0xB6
246
0b11110110
0xF6
55
0b00110111
0x37
119
0b01110111
0x77
183
0b10110111
0xB7
247
0b11110111
0xF7
56
0b00111000
0x38
120
0b01111000
0x78
184
0b10111000
0xB8
248
0b11111000
0xF8
57
0b00111001
0x39
121
0b01111001
0x79
185
0b10111001
0xB9
249
0b11111001
0xF9
58
0b00111010
0x3A
122
0b01111010
0x7A
186
0b10111010
0xBA
250
0b11111010
0xFA
59
0b00111011
0x3B
123
0b01111011
0x7B
187
0b10111011
0xBB
251
0b11111011
0xFB
60
0b00111100
0x3C
<
124
0b01111100
0x7C
188
0b10111100
0xBC
252
0b11111100
0xFC
61
0b00111101
0x3D
125
0b01111101
0x7D
189
0b10111101
0xBD
253
0b11111101
0xFD
62
0b00111110
0x3E
>
126
0b01111110
0x7E
190
0b10111110
0xBE
254
0b11111110
0xFE
63
0b00111111
0x3F
127
0b01111111
0x7F
191
0b10111111
0xBF
255
0b11111111
0xFF
64
0b01000000
0x40
128
0b10000000
0x80
192
0b11000000
0xC0
0b00000000
0x00
NULL
A arte de aprender Linguagem C com mikroC PRO for PIC Introduo a Linguagem C
Pgina 2 de 40