Вы находитесь на странице: 1из 8

Centro de Tecnologia Microgenios - Todos os direitos reservados

Clique aqui para Imprimir o doc

umento

A linguagem C

1.0 Introduo a Linguagem C


1.1 Formas e representao numricas e de caracteres
1.2 mikroC: Case Insensitive
1.3 Manipulao de registradores no mikroC

Introduo a Linguagem C
At este pondo do curso, estudamos vrios tpicos fundamentais para o
desenvolvimento do nosso curso, conhecemos a histria dos microcontroladores,
estudamos os recursos e estruturas de hardware do PIC18F452 e aprendermos a
compilar e editar um programa no compilador mikroC.
Chegou o momento de aprendermos a programar em linguagem C os
microcontroladores PIC. Antes de estudarmos os conceitos da linguagem, devemos
saber que a linguagem C trata-se de uma linguagem complexa e de difcil assimilao
para programadores inexperientes. Procuraremos abordar o contedo e estrutura da
linguagem baseando-se em exemplos de programas, pois dessa forma, ficar muito mais
claro para o aluno entender a linguagem.
Acompanhe o exemplo abaixo:
//Primeiro Programa
/* Programa Pisca -Pisca (1 segundo)
Este programa tem por objetivo ascender e apagar um led conectado no
pino RB0 do PIC em intervalos de 1 segundo aproximadamente;
Curso Online: Microcontroladores PIC - Programao em C
*/

void main()
{
trisb = 0;
portb = 0;

//define portb como sada


//coloca nvel lgico 0 em todos os pinos do portb

while(1)
{
portb.f0 = 1;
//seta pino RB0
Delay_ms(1000); //aguarda 1000 ms (milisegundos)
portb.f0 = 0;
//resseta pino RB0
Delay_ms(1000);
// aguarda 1 segundo
}
}

Vejamos o significado de cada linha de programa:


A primeira linha de programa:
//Primeiro Programa

chamada de comentrio. Os comentrios so importantes para documentar o


programa. Podemos adicionar comentrios em nosso programa de duas maneiras:
Atravs de comentrios de linhas simples: quando queremos comentar apenas uma linha
de programa, iniciamos os comentrios com os caracaters " // " (igual a linha do
programa anterior). Esses tipo de comentrio no faz parte da padronizao ANSI
original, mas atualmente encontrado em vrios compiladores.
Atravs de comentrios de mltiplas linhas: podemos comentar linhas ou blocos de
cdigo de programa utilizando a seqncia de caracteres "/* " para iniciar o comentrio
e a seqncia "*/" para terminar o comentrio.
/* Programa Pisca -Pisca
Este programa tem por objetivo ascender e apagar um led conectado no
pino RB0 do PIC em intervalos de 1 segundo aproximadamente;
Curso Online: Microcontroladores PIC - Programao em C
*/

Na prxima linha temos:


void main()

A declarao main()especifica o nome da funo. A funo main(), na linguagem C,


sempre a primeira a ser executada e deve ser a nica no programa. O programa
termina quando for encerrada a execuo da funo main().
Uma funo, em C, nada mais do que um conjunto de instrues que pode ser
executada a partir de qualquer ponto do programa. Utilizamos o sinal de abertura
de chave "{" para iniciar uma funo e o sinal de fechamento de chave "}" para
finalizar a funo. Todas as instrues devem estar dentro das chaves que iniciam
e terminam a funo e so executadas na ordem em que as escrevemos
No caso deste programa exemplo, ela no recebe nenhum parmetro e tambm
no retorna parmetro nenhum. Isto fica explcito atravs da palavra-chave void
escrita na frente do programa.

As funes e as suas caractersticas sero apresentadas em detalhes mais adiante


em nosso curso;
Na prxima linha de programa encontramos:
trisb = 0;
portb = 0;

//define portb como sada


//coloca nvel lgico 0 em todos os pinos do portb

Como estudamos nas unidades anteriores, o comando trisb define o sentido de


acionamento do PORTB do PIC. Neste exemplo, trisb = 0, logo o PORTB foi
programado como sada.
O comando portb = 0 coloca nivl lgico 0 em RB0 a RB7. As instrues C so
sempre encerradas por um ponto-e-vrgula ( ; ). O ponto-e-vrgula parte da
instruo e no um simples separador e devemos ao final de cada instruo colocar
o acrscimo de um ponto-vrgula ;.

Na prxima linha temos:


while(1)

Este um comando de controle utilizado na repetio de um determinado bloco de


instruo. O bloco de instruo ser executado repetidamente enquanto o condio
for verdadeira, ou seja, for diferente de zero. No nosso exemplo, o valor 1 utilizado
no comando while garante que a condio seja sempre verdadeira. Estudaremos
mais sobre o comando while mais adiante no curso;
Os comandos a seguir pertencem ao bloco da instruo while;
{
portb.f0 = 1;
//seta pino RB0
Delay_ms(1000); //aguarda 1000 ms (milisegundos)
portb.f0 = 0;
//resseta pino RB0
Delay_ms(1000);
// aguarda 1 segundo
}
Como no temos nenhum comando que interrompa o lao while, os blocos de
comandos apresentados sero executados indefinitamente at que o processador
seja desligado ou reiniciado.
A operao portb.f0 = 1 faz com que o pino RB0 do PORTB seja colocado em
nivel 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.f0 = 0; // estamos nos referindo ao pino RB0 do portb
portd.f5 = 1; // estamos nos referindo ao pino RD5 do portd
porte.f1 = 1; // estamos nos referindo ao pino RE1 do porte

A linha de programa seguinte, Delay_ms(1000), uma funo interna do compilador


mikroC utilizada para gerar atrasos em escala de milissegundos. No nosso exemplo, o
comando ir gerar atraso de 1000 milessegundos, ou seja, 1 segundo.

A operao portb.f0 = 0 faz com que o pino RB0 do PORTB seja colocado em
nvel lgico 0;

Desta forma, ao programarmos o PIC com o programa exemplo, o pino RB0 ficar
mudando de estado lgico 1 e 0 a cada 1 segundo,

Coloque em prtica este pequeno projeto. Copie e compile este programa


exemplo no compilador mikroC, isso lhe ajudar nos seus estudos.

Vamos estudar mais um programa:


Acomanhe:
//Segundo Programa
/* Programa Pisca -Pisca (100 milisegundos)
Este programa tem por objetivo ascender e apagar um led conectado no
pino RB0 do PIC em intervalos de 1 segundo aproximadamente;
Curso Online: Microcontroladores PIC - Programao em C
*/
void main()
{
trisb = 0;
portb = 0;

//define portb como saida


//coloca nvel lgico 0 em todos os pinos do portb

trisd = 0;
portd = 0;

//define portb como saida


//coloca nvel lgico 0 em todos os pinos do portb

while(1)
{
portb = 255;
portd = 255;
Delay_ms(100);
portb = 0;
portd = 0;
Delay_ms(100);
}
}

//seta todos os pinos do portb


//seta todos os pinos do portd
//aguarda 1000 ms (milisegundos)
//resseta todos os pinos do portb
//resseta todos os pinos do portd
//aguarda 1000 ms (milisegundos)

O programa acima tem por objetivo piscar infinitamente o portb e portd do PIC em
intervalos de 100 milissegundos. Suas caracteristicas so parecidas com a do programa
anterior, sua nica diferena esta no tratamento das portas;
portb = 255;
portd = 255;

//seta todos os pinos do portb


//seta todos os pinos do portd

voltar para o topo da pgina

Formas e representao numricas e de


caracteres
No compilador mikroC podemos manipular dados do tipo: decimal, binrio,
hexadecimais e octal.
Podemos representar um valor numrico de diversas formas. Para exemplificar, vamos
supor o que desejamos carregar o valor 187 no registrador PORTB no PIC utilizando o
mikroC, acompanhe:
Representao decimal:
Para representarmos um nmero em decimal basta colocar seu valor sem nenhuma
abreviatura, conforme o linha abaixo:
portb = 187;

//representao decimal

ATENO: NUNCA DEVEMOS REPRESENTAR UM NMERO DECIMAL INICIANDO COM 0


(ZERO), POIS O MIKROC INTERPRETAR O NMERO COMO OCTAL.
EX:
portb = 25 (25 representado em decimal)
diferente de
portb = 025 (025 representado em octal)

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 hexadecimal do numero 187 decimal

Representao binria:
Para representarmos um nmero em binrio devemos colocar o prefixo 0b (ou 0B) antes
do nmero em binrio.
portb = 0b10111011;
ou
portb = 0B10111011;

//representao binria do nmero 187 decimal


//representao binria do nmero 187 decimal

A representao binria de um nmero ocorre da seguinte forma:


0B 1
0 1 1 1 0 1 1

- - RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0


- - MSB
LSB

Observe que na representao binria de um nmero, o bit mais significativo fica ao


lado do prefixo 0b. No confunda de forma alguma a construo e as representaes de
um nmero binrio, caso contrrio seu programa no funcionar corretamente.
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;

//representao octal do nmero 187 em decimal

Ateno: No confundir nmeros decimais com octais. Nmeros Octais so


precedidos com 0, ex: 0140 um nmero octal. Nmeros decimais no tem prefixo:
ex: 140 um nmero decimal

Exerccios 01:
Gostaramos de enviar aos pinos do PORTB os seguintes estados;
RB0 = 0
RB1 = 1
BR2 = 1
RB3 = 0
RB4 = 0
RB5 = 1
RB6 = 0
RB7 = 0
Qual o valor numrico que devemos colocar na instruo abaixo para representar os
estados dos pinos do PORTB. Obedea as representaes numricas solicitadas:
Representao decimal:
portb = X; ?

Representao binria:
portb = X; ?

Representao hexadecimal:
portb = X; ?

Representao octal:
portb = X; ?

obs: A respostas desse exerccio esto disponvel no final dessa matria!

voltar para o topo da pgina

mikroC : Case Insensitive


Diferente do pradro ANSI C, No mikroC podemos utilizar caracteres maisculos e
minsculos no programa (case insensitive). Acompanhe:
contador, Contador e COnTadOR
so interpretados como sendo a mesma palavra. (esse recurso uma particularidade do
mikroC e no pertence ao padro ANSI C Standart).

voltar para o topo da pgina

Manipulao de registradores bit no mikroC


Podemos manipular os bits de registradores do PIC de diversas formas no compilador
mikroC
Vejamos:
Exemplo de Manipulao de bits de registradores:
Podemos manupular os bits dos registradores do PIC da seguinte maneira:
PORTA.F5 = 0; // -->> faz referncia ao pino RA5 do PIC.
PORTD.F7 = 1; //-->> faz referncia ao pino RD7 do PIC.
TRISB.RB0 = 1; // -->> faz referencia ao bit 0 do registrador TRISB
T0CON.PSA = 0; //-->> faz referncia ao bit 3

Ou acess-los dessa maneira:


obs: no so todos os registradores que permitem acesso direto dos seus bits:
RB0 = 0; --->> faz referncia ao pino 0 do PORTB
RA2 = 1; -->> faz referncia ao pino 0 do PORTA

voltar para o topo da pgina

Respostas dos exerccios 01:


Representao decimal:
portb = 38;

Representao binria:
portb = 0b00100110;

Representao hexadecimal:
portb = 0x26;

Representao octal:
portb = 046;

voltar para o topo da pgina

Centro de Tecnologia Microgenios - Curso de Microcontroladores PIC - Programao


em C
Microgenios 1998 - 2007. Todos os direitos reservados. proibido cpia parcial ou
integral desse material sem prvio aviso. Maiores informaes:
suporte@microgenios.com.br

Вам также может понравиться