Upload
arquimedes-paschoal
View
39
Download
0
Embed Size (px)
Citation preview
LINGUAGEM C PARA MICROCONTROLADORES PIC
ANDERSON VICENTE BURACOV
PROGRAMAO DE MICROCONTROLADORES PIC
BASEADO NO PIC 16F628A
Mdulo Bsico 1
Piracicaba
2013
SUMRIO INTRODUO .............................................................................................................. 01 1 - Os Microcontroladores ......................................................................................... 02 2- Arquitetura Harvard e a tradicional ...................................................................... 06 2.1- Arquitetura Harvard .............................................................................................. 07 3 - Microcontrolador PIC 16F628a ............................................................................. 08 3.1- Alimentao do PIC .............................................................................................. 08 3.2- Devices Flags ........................................................................................................ 08 4 - PORTA E PORTB ................................................................................................. 13 5 - Caractersticas Principais ..................................................................................... 14 6 - Introduo linguagem C .................................................................................... 17 7 - Controle de Fluxo ................................................................................................. 17 8 - Introduo ao Mikro C ........................................................................................... 25 8.1 -Escrevendo programas em C ................................................................................ 25 8.2 -O papel do Compilador ....................................................................................... 26 8.3 -Edio e Compilao ............................................................................................ 27 8.4 -O Programa Compilado......................................................................................... 28 8.5 -Gravao do Programa no PIC ............................................................................. 28 8.6 -Criao de um projeto no Mikro C ......................................................................... 28 8.7 -Conhecendo o Ambiente Mikro C ......................................................................... 30 8.8 -Code Editor ( Editor de Cdigo) ........................................................................... 31 8.9 Mesages Window ( Janela de mensagens) ......................................................... 32 8.10-Project Setup ........................................................................................................ 32 9 -Primeiro Projeto ................................................................................................ 36 10 - Funes ................................................................................................................ 39 10.1-Acionamento de botes utilizando o IF ................................................................. 40 10.2-Else ....................................................................................................................... 40 10.3-Funo Button ...................................................................................................... 40 11 REFERNCIAS ..................................................................................................... 40
1
INTRODUO
Esta pequena apostila esta orientada para os profissionais que
necessitam de conhecimentos bsicos do PIC. Abordaremos noes da estrutura do
PIC16F628A e depois nosso foco ser o estudo da linguagem C para
microcontroladores.
A linguagem C provavelmente a linguagem mais conhecida e tem
muitas vantagens sobre a linguagem assembler no nvel tcnico.
Primeiramente trataremos sobre a instalao dos programas necessrios
para poder trabalhar.
Existe no mercado vrios compiladores para desenvolvimento de
programas na linguagem C como Hi-Tech, CCS, PICmicro C, etc. Adotamos para
nosso treinamento o compilador MikroC da Microelektronika por ser uma ferramenta
bastante poderosa e fcil de trabalhar (permite Editar, Simular e Compilar programas
das famlias 12, 16 e 18 da Microchip) alm de tambm possuir uma vasta biblioteca
de controle de perifricos dos Microcontroladores. Alm disso, a verso estudante
gratuito para desenvolvimento de programas de at 2Kwords( 2mil palavras) , o que
torna bastante atraente tambm para uso educacional.
Pode-se fazer download em www.mikroe.com.
Contudo, uma das grandes vantagens de se programar em C que o
programador no precisa se preocupar com o acesso a bancos, localizao de
memria e perifricos dos Microcontroladores pois o Compilador responsvel por
gerenciar esses controles.
Toda essa eficincia da Linguagem C proporciona ao programador
preocupar-se apenas com o programa em si e o compilador traduz da Linguagem C
para a Linguagem de mquina hexadecimal (.HEX) que a linguagem que os
Microcontroladores,conseguem,entender.
2
1- OS MICROCONTROLADORES
Os principais fabricantes de microcontroladores disponveis no mercado
so descritos a seguir:
Atmel: - Famlia AVR, 8051
Microchip - Famlia PIC
Freescale (Motorola) - Famlia HS908
NXP (Phlips) - Famlia ARM (LPC)
Texas Instruments - Famlia MSP, TMS e C2000
Zilog - Famlia F8
National - Famlia COP
Cypress - Famlia PSOC
Intel - Famlia 8051, 8052, 8096
Analog Device - Famlia ADuc
... etc.
Os Microcontroladores so chips inteligentes que tm pinos de entradas e
sadas que so utilizadas para controlar equipamentos e ou dispositivos.
Atravs de programao, estas entradas e sadas so conectadas ao
mundo exterior atravs de sensores e atuadores controlando mquinas ou sistemas.
3
O PIC produzido pela Microchip technology Inc
(http://www.microchip.com).
PIC origina-se de Programmable Integrated Circuit (Circuito Integrado
Programvel).
Estes circuitos integrados esto cada dia mais barato e poderosos,
contendo internamente circuitos de processamento, memrias PROM
(Programmable Read Only Memory memria programvel somente de leitura) ,
Memrias RAM (Random Access Memory memria de acesso aleatrio),
EEPROM (Electrical Eraseble Programmable Read Only Memory Memria
somente de leitura regravvel eletronicamente) memria Flash (mesma que a
EEPROM), circuitos contadores, circuitos comparadores, conversores
analgico/digital (ADC) conversores digital/analgico (DAC), etc.
Existem basicamente 03 famlias diferenciadas pelo tamanho de palavra
de memria de programa: so as famlias 12, 14 e 16 bits onde, todos os
dispositivos possuem barramento de dados de 8 bits.
Recentemente a Microchip inseriu no mercado a nova famlia DsPIC com
memria de programa de 16 bits , 24 bits e futuramente 32 bits para barramento de
dados.
Trabalharemos com o PIC de 18 pinos, PIC 16F628A operando com
Clock de 4MHz o que implica em 1MIPS (1 milho de instrues por segundo).
O PIC PIC16F628A operam com Clock de 20MHz o que implica em
5MIPS (5 milhes de instrues por segundo).
Os Microcontroladores da Srie 12, 14 e 16 possuem memria interna e
os da srie 17 e 18 podem funcionar tambm com Memria de Programa externa.
Existem 4 tipos de tecnologias na fabricao das Memrias de Programa dos PICs:
ROM tipo Mscara: Chips programados de fbrica viveis para grandes quantidades e so identificados com o prefixo CR.
OTP: so Memrias de Programa tipo PROM onde, sai de fbrica virgem e permite uma nica gravao. Estes dispositivos so identificados pelo sufixo C.
EPROM: so indicados para etapas de desenvolvimento e so identificados pela janela de vidro caracterstica das EPROMs. Utilizam sufixo JW ou CL.
4
FLASH: so os mais indicados tanto para desenvolvimento como implantao final. Permitem mais de 1000 ciclos de gravao/apagamento. So identificados pelo prefixo F.
Hoje, os Microcontroladores so uma revoluo na eletrnica assim como
ocorreu quando foram introduzidos os primeiros Amplificadores Operacionais.
Antigamente, para se fazer um amplificador transistorizado com ganho 4
por exemplo, era necessrio realizar vrias contas para polarizar o transistor,
estudar parmetros do transistor, etc; com a chegada dos famosos Amp. Ops, tudo
isto ficou muito fcil, sem falar de todas as outras funes que os Amplificadores
Operacionais oferecem como somador, diferenciador, integrador, filtros, etc...
Os Microcontroladores invadiram os equipamentos eletrnicos onde,
podemos encontr-los em vrios eletrodomsticos como mquinas de lavar, micro-
ondas, aparelhos de som e imagem, etc. Sem falar no seguimento automobilstico
sendo usado em sistema de injeo eletrnica, alarme, controle de temperatura,
automao de vidros e fechaduras, etc.
Devido a esta expanso dos sistemas Microcontroladores, hoje mais
que uma necessidade de tcnicos e engenheiros saberem como funcionam e como
tirar proveito do seu potencial.
Principalmente para a rea de desenvolvimento e projetos, pois as
vantagens so realmente muito atraentes. Comeando pelo custo - PIC 16F628a por
exemplo custa aproximadamente R$8,00 e tem um poder de processamento
excelente para um clock de 4MHz ( 1.000.000 de instrues por segundo) Caramba!!
Escolhemos para este curso de PIC o modelo 16F628A. Esta escolha
est relacionada com a facilidade de encontr-lo no mercado, baixo custo, facilidade
de manuseio e compatibilidade entre os modelos de 18 pinos.
Abaixo, temos a foto do PIC 16F628a e, como pode-se observar, parece
como qualquer circuito integrado comum, porm, vamos descrever agora o que ele
apresenta internamente:
5
Vista geral do PIC 16F628a
- CPU (Unidade Central de processamento) que a responsvel por
gerenciar todas as funes e decises referente a programao.
- Possui uma ULA (Unidade lgica e Aritmtica) que a responsvel por
desenvolver operaes de soma, subtrao, deslocamento de bits, etc).
1024 posies de memria x 14 bits
124 posies x 8 bits de RAM
64 posies x 8 bits de EEPROM
13 pinos de entrada/sada (configurveis)
1 Timer / Contador de 8 bits
No decorrer do curso vamos entrar em mais detalhes, importante agora
se ter em mente que o Microcontrolador um Circuito Integrado composto de vrios
Circuitos Lgicos que nos ajudaro bastante em desenvolvimentos de circuitos
eletrnicos e controle de processos ou sistemas.
Vejamos um exemplo de aplicao:
Digamos que temos interesse em fazer um contador de pulsos crescente
onde o mesmo far a contagem de 0000 a 9999. Utilizando-se de componentes
discretos, a princpio precisaremos de contadores, decodificadores para display, etc.
Imagine que este circuito foi projetado e em determinado momento deseja-se
modificar o projeto para fazer a contagem de 0000 at 0750. Puxa, teria que se
desenvolver outro Hardware ou adapt-lo dificultando bastante o desenvolvimento.
Agora, se no projeto utilizamos Microcontroladores, isto pode ser implantado
modificando-se apenas o Software pois o Hardware poder ser mantido. Isto ajuda
6
bastante os desenvolvedores de sistemas pois um mesmo circuito pode receber
modificaes e melhorias modificando apenas o software.
Esse apenas um exemplo que apresenta algumas vantagens de se
utilizar circuitos Microcontrolados. Observa-se com isso como diminui o trabalho
oneroso de desenvolver circuitos discretos ganhando tempo tambm de
desenvolvimento e deixando tambm margem para futuras melhorias ou ajustes do
circuito. Outro exemplo poderia citar uma aplicao automotiva. Desenvolvido um
circuito de controle para determinado modelo de automvel, para outro modelo
mudaria apenas os parmetros via software (Ex: controle de
injeo de combustvel do Gol 1.0 para o Gol 1.6) O circuito seria o
mesmo s mudaria a programao entre os modelos do Gol. Observou a grande
vantagem disso?
Os Microcontroladores so encontrados em vrios tamanhos e
capacidades onde o projetista dever determinar qual utilizar em seu respectivo
projeto. Eles variam desde 8 pinos (PIC12Cxx) passando pelos 18 pinos
(PIC16Fxxx) indo at 40 pinos (PIC18Fxxx).
Existem muitos modelos de PIC onde cada um tem suas caractersticas
peculiares como nmero de I/Os (entradas/sadas), conversores A/D, Contadores,
timers, memria, etc.
2- ARQUITETURA HARVARD E A TRADICIONAL
A Arquitetura Tradicional de Computadores e Microprocessadores se
baseia no esquema proposto por John Von Newman, no qual a CPU (Unidade
Central de Processamento) est conectada a uma nica memria que contm as
Instrues de Programas e os Dados. Com isso, temos um nico barramento para o
trfego de Dados e Instrues o que limita a velocidade de operao do
Microprocessador.
Outro fator importante que esta configurao trabalha com a filosofia
CISC (Complex Intruction Set Computer Computador com Set de Instrues
complexos). Sendo assim, temos centenas de comandos para trabalhar a
programao. O Microcontrolador 8051 trabalha com esta filosofia e possui 115
Instrues.
7
Abaixo temos o Diagrama da Arquitetura Von Newman:
Arquitetura Von Newmann
2.1- ARQUITETURA HARVARD
Consiste simplesmente na separao do barramento de Dados e
Instrues. Uma das memrias possui somente Instrues de programa e
chamada de Memria de programa.
A outra Memria responsvel pelo armazenamento dos Dados e por
isso chama-se memria de Dados.
Arquitetura Harvard
Um Processador com Set de Instrues reduzido (RISC Reduced Set
Instruction Computer) contm ento barramentos diferentes como 12 ou 14 bits para
Instrues e 8 bits para Dados. Os Microcontroladores PIC trabalham com esta
Filosofia e possuem em mdia 35 Instrues, o que facilita bastante o entendimento
e o desenvolvimento. Muitos acham isso ruim pois como o nmero de instrues
pequeno, precisa-se criar muitas funes que
na Filosofia CISC j est pronta.
8
3- MICROCONTROLADOR PIC16F628A
3.1- ALIMENTAO DO PIC
Esta tambm uma questo que requer certa ateno. Importante no
termos uma fonte com muita variao (riplle) e ruidosa. Como a alimentao pode
estar entre 3,0 a 5,5V, sugiro que seja utilizado o Circuito Integrado Regulador de
Tenso 7805 que garante uma excelente regulagem em 5,0V.
3.2- DEVICE FLAGS
Fusveis ou bits de configurao, o local onde podemos configurar vrias funes
atravs de bits de configurao.
Funes estas que podem ser tipo de oscilador, habilitar WatchDog, Cdigo de
proteo, etc.
Clock:
Vamos inicialmente falar do Clock. Todo Microcontrolador necessita de
um circuito gerador de Clock. O Clock quem d todo o sincronismo para os
circuitos internos. Pode ser comparado ao Corao humano. Abaixo temos a
configurao utilizando oscilador a Cristal.
Neste caso temos um Oscilador XT. Sem dvida esta a melhor opo
pois a estabilidade dos cristais so excelentes.
9
Note que existe dois capacitores ligados em paralelo com o cristal. O valor
desses capacitores variam de acordo com a freqncia do cristal utilizado. Abaixo
segue uma tabela apresentando os valores dos capacitores:
Tipo de
oscilador
Freqncia do cristal
Valores tpicos para o capacitor
C1 C2
LP (cristal de baixa
freqncia)
32kHz 33pF
33pF
200KHz 15pF 15pF
XT (cristal)
200KHz 22-68pF 22-68pF
1.0MHz
15pF
15pF
4.0Mhz
15pF 15pF
HS (cristal de alta
freqncia)
4.0MHz
15pF 15pF
8.0 MHz 15-33pF 15-33pF
20.0MHz 15-33pF 15-33pF
25MHz 15-33pF 15-33pF
cristal de quartzo
Ressonador Cermico
10
Podemos tambm utilizar os osciladores internos do PIC para fazer a
funo de oscilao.
Este oscilador interno do tipo RC e possui uma preciso razovel entre
1 e 5% com clock tpico de 4MHz.
Vale ressaltar que quando no utilizamos o Clock interno, ganhamos em
preciso mas em compensao perdemos 1 ou 2 pinos de I/O (entrada/sada).
Realmente tudo tem um preo! Voc ter que decidir por isso na definio
do seu projeto.
Sinal de clock
Vale lembrar que para cada 4 ciclos de Clock temos um ciclo de instruo,
para os oscilador de 4MHz, temos 1MHz de ciclo de instruo:
-ciclo de instruo = Fosc/4
-Tempo de instruo = 1/Ciclo de instruo.
Exemplo:
Para um cristal de 20MHz temos:
Ciclo de instruo = 5MHz
Tempo de instruo = 200ns = 0,0000002 segundos para fazer uma instruo.
Rapidinho no acha?
Pwrten: (system clock switch bit)
o temporizador de Power-Up que faz o microcontrolador aguardar certo tempo
assim que o chip energizado. Este tempo de 72ms deixando assim o
microcontrolador inoperante, tempo ideal para que o circuito oscilador estabilize sua
freqncia.
11
Uma maneira bem simples para garantir este tempo colocar o pino 4
(MCLR Master Clear on Reset) em nvel um conectando-o ao VCC (+5V) ,
atravs de um resistor com um valor entre 5K e 10K .
Brow-out: detector
um interessante circuito para resetar o Microcontrolador caso ocorra uma queda
de tenso no mesmo. Restabelecido a tenso, o programa reiniciado. Podemos
escolher os seguintes limites de tenso: 2,0V, 2,7V, 4,2V ou 4,5V.
Boren:
Este bit responsvel por habilitar/desabilitar o Brown-out.
Wdt: Watchdog Timer Enable
Aqui temos um recurso bastante interessante. Um temporizador de 8 bits que no
pode estourar pois caso isso ocorra o programa ser resetado. Imagina que por
algum motivo
o programa trava ou entra em algum loop infinito. A funo do watchdog no
deixar o programa travado.
Lvp: (low voltage programming)
Temos aqui uma opo de poder gravar o Microcontrolador com 5V. O usual
colocar tenso de 13,5V no pino MCLR. Portanto, possvel deixar o MCLR em 5V e
fazer a gravao mas, o pino RB4 no poder mais ser utilizado como I/O.
12
Stvren: (Stack Full / Underflow Reset Enable Bit)
O Microcontrolador 16F628a possui 8 endereos de pilha. Este bit serve para
habilitar o chip para ser resetado caso a limite da pilha seja ultrapassado.
A pilha ( Stack) nada mais que uma memria RAM com algumas localidades,
dentro do PIC 16F628a uma subrotina pode ser chamada no mximo 8 vezes, se o
limite for ultrapassado a memria da pilha fica cheia fazendo o PIC travar.
Code Protect : (CP Cdigo de proteo)
Habilitando este bit, a regio de memria fica protegida contra leitura, ficando
impossvel de ler o que tem dentro do PIC.
Reset: Resetar o PIC significa coloc-lo no incio da programao novamente. As vezes
isso feito pelo usurio porm, isso pode acontecer tambm quando ocorrer uma
interrupo. O importante que quando acontecer um Reset, j est pr-definido o
que o PIC deve fazer.
Existem vrias maneiras de Resetar o Microcontrolador:
Reset no instante em que o PIC alimentado.
Reset quando o pino 4 (MCLR) colocado em nvel zero.
Reset colocando o PIC no modo de economia instruo Sleep.
Reset quando Whatchdog (WDT) transborda - muda de FF para 00.
Precisamos aqui ressaltar que quando ocorre um Reset, o importante que o PC
(Program Counter Contador de Programa) aponte para a posio inicial 0000 e
que todos os Registros (memria RAM) no so alterados. Porm, os SFRs (Special
Function Registers Registradores de Funes Especiais), estes sim so reiniciados
com um valor inicial pr determinado.
13
4.0- PORTA e PORTB (entradas e sadas)
So responsveis por trabalharem com o mundo exterior, ou seja, so por
eles que recebemos sinais de sensores, chaves, teclados e tambm por eles que
atuamos rels, solenides, acopladores pticos, transistores, etc. Eles que fazem a
interface para acionarmos lmpadas, sirenes, motores, leds, displays de cristal
lquido, etc.
Vale lembrar aqui que o sinal de sada de cada porta limitado e, no
entanto, no podemos simplesmente ligar um rel ou um contator diretamente no
pino do PIC. Precisamos muitas vezes fazer um driver para poder drenar uma certa
intensidade de corrente. Mas, isto ser analisado em outra oportunidade, o
importante no momento saber que so por estas portas bidirecionais onde faremos
toda comunicao para enviar e receber dados.
Pelo PORTA temos 5 pinos de controle e pelo PORTB temos 8 pinos.
Para definirmos cada pino para direo do PORTA utilizamos o Registro
TRISA e para o PORTB utilizamos do Registro TRISB.
A direo do fluxo de dados ser 0 para sada (OUTPUT) e 1 para
entrada (INPUT).
Mais adiante trabalharemos melhor este detalhe onde iremos definir quais
pinos sero entrada e quais dos pinos sero definidos como sada de dados.
Abaixo temos um exemplo de circuito utilizando PIC
14
Acredito que as principais informaes foram analisadas e j podemos
comear a estudar os Microcontroladores 16F628a. Vamos ento verificar
inicialmente suas caractersticas .
5.0- CARACTERSTICAS PRINCIPAIS
O Microcontrolador PIC 16F628A pode operar at 20MHz
- 2K (2048) palavras de 14 bits para programas;
- 224 bytes de RAM para uso geral;
- 128 bytes de EEPROM para dados;
- Stack com 8 nveis;
- Oscilador 4MHz / 37KHz interno;
- Apenas 35 instrues;
- 15 Registros especficos em RAM para controle interno e externo;
- 1 Timer 8 bits;
- 1 Timer / contador de 8 bits;
- 1 Timer / Contador de 16 bits;
- 1 canal PWM com captura e amostragem (CCP);
- 1 canal de Comunicao Serial;
- 2 Comparadores Analgicos com referncia interna programvel de tenso;
- 16 pinos com flexibilidade de operar como entrada ou sada;
- Intensidade de corrente nos PORTs de 25mA por sada;
- Capacidade de gerenciar interrupes;
- Watch Dog para recuperar travamentos no software;
- Memria de programa com proteo contra cpias;
- Modo Sleep para economia de energia;
- Vrias opes de osciladores (interno/externo);
- Alimentao 3V a 5,5V Tpico de 5V;
- Consumo menor que 2mA em 5V a 4MHz.
- Compatvel com 16F84 e outros PICs de 18 pinos.
15
16
17
6.0- INTRODUO LINGUAGEM C
Estrutura Bsica de um programa:
Programas em C so baseados em uma ou mais funes que sero executadas, no
entanto, a funo Main() a primeira a ser executada.
/* -------------------------------------------------
abaixo temos um exemplo de estrutura
Bsica de um programa em Linguagem C
----------------------------------------------------- */
Main() // esta a primeira funo que ser executada
{ // inicializa a funo
Trisb=0x00; // aqui entram os comandos que sero executados
Portb=0xFF;
} // finaliza a funo
Observaes:
Toda funo deve iniciar abrindo chave e finalizar fechando-se a chave.
Toda instruo deve ser finalizada com ponto e vrgula (obrigatoriamente)
Logo aps /* so inseridos os comentrios para mltiplas linhas e deve-se
Colocar */ para fechar o bloco de comentrios.
Utilizamos // para comentrios em apenas uma linha.
Representao Numrica: Decimal: Contador=125; Binrio: Portb=0b11010011; Hexadecimal: Varivel1=0xA4; Octal: Teste=075; String: Unsigned char *texto=Piracicaba-SP
18
Caracter:
Usart_write(&);
Dado: Tipo:
int Nmeros inteiros
char Caracteres
float e double Nmeros decimais (ponto flutuante)
void valores nulos
Modificadores:
19
Declarao de variveis:
Podemos declarar da seguinte maneira:
+ + + ;
Obs: valor pode ou no necessariamente ser inicializado.
Exemplos:
int contador;
short var1;
unsigned int contagem = 30500;
Observe agora como atribuir valores s variveis:
Contador = 10; // atribui o valor 10 varivel contador
Var1 = 25; // atribui o valor 25 varivel Var1
Varivel local: Esta declarada dentro da funo e s pode ser utilizada pela funo portanto,
uma varivel temporria.
Exemplo:
Void subrotina_soma ()
{
Unsigned Int valor1, valor2;
Valor1=A;
Valor2=B;
Return(valor1+valor2);
}
Varivel Global: Esta declarada fora da funo e s pode ser utilizada por qualquer funo em
qualquer momento. Todas as funes tm acesso s variveis globais.
20
Exemplo:
unsigned int valor1, valor 2
Void subrotina_soma ()
{
Valor1=A;
Valor2=B;
Return(valor1+valor2);
}
Operadores Matemticos: Aritmticos:
Relacionais:
Lgicos:
21
Operadores bit a bit:
7- CONTROLE DE FLUXO
DELAY: ( Atraso de tempo)
Comando de atraso de tempo, ou contagem de tempo de uma maneira bem simples.
Exemplo:
Delay_ms(500); // Atraso de tempo de segundo.
Delay_us(500); // Atraso de tempo de 500 microsegundos.
DECISO IF: // A deciso IF a mesma coisa da pergunta: Se ?
Sintaxe: if (expresso) comando;
A expresso avaliada e se for verdadeiro executa o comando.
Podemos ter tambm mais que um comando:
Sintaxe if (expresso)
{
comando1;
comando2;
comandoN;
}
Exemplo:
If (conta == 5) // Se a conta for igual a 5
{
a=a++; //Soma na varivel a
22
portb=0xFF; //e coloca todo portb nvel alto
}
DECISO IF-ELSE:
Sintaxe: if (expresso) comando1;
else comando2;
Neste caso, temos duas possibilidades. Se comando for verdadeiro, comando1
executado, caso seja falso, comando2 ser executado.
Podemos ter tambm vrios comandos:
if (expresso)
{
comando1;
comando2;
comando3;
}
else
{
comando4;
comando5;
}
Exemplo:
if (a>22) // Se a for maior que o numero 22
{
Valor1=x; //O valor1 ser igual a x
y=contador+10; //e y soma 10 no contador
}
Else //Seno
{
Valor2=x; // O valor 2 que ser igual a x
Y=contador-5; // e y vai decremantar 5 no contador
}
23
LOOP FOR:
Este um comando de lao (loop ou repetio).
Sintaxe:
for (inicializao; condio (trmino); incremento) comando;
Podemos tambm ter um bloco de comandos:
For (inicializao; condio (trmino); incremento)
{
comando1;
comando2;
comandoN;
}
Exemplo:
void main ()
{
int contador;
int a = 0;
for (contador=0; contador
24
Exemplo:
void main( )
{
int a=15;
While (a>10)
{
a--;
delay_ms(100);
}
}
LOOP DO - WHILE:
Neste caso, diferente do loop anterior (while), o do - while executa pelo menos uma
vez o bloco de comando antes de fazer a avaliao se continua a executar os
comandos ou sai do loop.
Sintaxe:
do
{
comando1;
comando2;
}
while (expresso);
Exemplo:
void main( )
{
int a=0;
do
{
a++;
delay_ms(100);
25
}
while (a
26
Sabemos que hoje temos computadores portteis com capacidades de
centenas de gigabytes de memria, nesses aspectos o "tamanho" do cdigo no
to importante para o programador.
Agora, quando estamos falando de microcontroladores devemos tomar
certas preocauses, pois microcontroladores como: PIC12C508 e PIC16C54
possuem apenas 512byte de memria de programa e 25 byte de RAM, fato que
exige do programador otimizao do cdigo e eficincia na elaborao lgico do
programa.
8.2- O PAPEL DO COMPILADOR
A nica maneira de se comunicar com o microcontrolador atravs da
linguagem de mquina, ou melhor dizendo, atravs de cdigos de mquinas. Por
tanto os programas em C devem necessariamente serem interpretados e compilados
a fim de termos como resultado os comandos de mquinas a serem gravados na
memria de programa do microcontrolador.
Existem no mercado diversos compiladores de programas em C para
microcontroladores PIC, tais como: HI-TECH PICC, C18, C30, CCS, SDCC, WIZ-C,
mikroC, CC5, PICmicro C, entre outros.
Em nosso curso iremos utilizar a IDE MikroC desenvolvido pela empresa
Mikroelektronika (www.mikroe.com), no qual permite editar, compilar e simular
programas em C para microcontroladores PIC da familia 12, 16 e 18.
IDE mikroC - Editor, compilador, simulador e debugador para PIC em linguagem C
27
Iremos utilizar o mikroc devido a sua eficincia e flexibilidade. Alm disso,
este compilador possui uma extensa biblioteca de funes prontas para controle de
diversas perifricos conectados ao nosso microcontrolador PIC.
Aos escrevermos e compilarmos um programa em nosso compilador,
caso o programa no tenha erros de sintaxe, ou algum outro erro cometido pelo
programador, teremos como resultado a criao do arquivo de mquina hexadecimal
(extenso .hex). Este arquivo .hex conhecido como cdigo de mquina, e ser
este o arquivo a ser gravado na memria do microcontrolador.
8.3- EDIO E COMPILAO DO PROGRAMA EM C
A partir das informaes e funes elaborada no fluxograma, escreva seu
programa em linguagem C na IDE mikroC, compile e simule seu programa
(estudaremos detalhadamente cada funo e ferramenta do mikroC mais adiante).
8.4- O PROGRAMA COMPILADO
Aps a compilao do seu programa em C, o compilador criar o arquivo
de mquina .hex (nomedoprograma.hex). Este o arquivo que dever ser gravado
no microcontrolador PIC.
28
8.5- GRAVAO DO PROGRAMA NO PIC
Gravar o arquivo compilado .hex no microcontrolador atravs de um
gravador de microcontroladores PIC, ou atravs de um Kit de desenvolvimento.
Estudaremos com mais detalhes nas unidades seguintes do nosso curso
os processos de edio, compilao e gravao de programas.
8.6- Criao de um projeto no mikroC
Para criarmos uma aplicaes no mikroC muito fcil, acompanhe o modelo passo
a passo:
Abra o mikroC e v ao menu Project > New Project. A tela seguinte aparece:
29
Figura 02 - criao de um projeto no mikroC
>> Em
Project Name digite o nome do seu projeto, em Project Path. Todos os arquivos de
sada (list, hex, ASM) tero o mesmo nome do campo Project Name.
Nota: No crie projetos com nomes com acentuao, caracteres especiais, espaos
entre caracteres, e nomes reservados pelo compilador, como por exemplo: Button.
30
>> Em Description
Flag, ajuste os configurantions bits do microcontrolador, que informam como o
microcontrolador deve operar. Com ele possvel alterar o tipo de oscilador utilizado
pelo projeto, assim como se vai usar o watchdog ou acionar a proteo contra leitura
do chip. Esses bits so conhecidos como "fusveis".
Description opcional. Neste campo podemos descrever de forma resumida o
funcionamento de nosso projeto, assim como colocar verses ou informaes
adcionais que o programador ache necessrio.
>> Em Device podemos selecionar o modelo do microcontrolador PIC que
utilizaremos em nosso projeto.
>> No campo Clock especificamos o valor da frequencia de trabalho de nosso
microcontrolador. No caso de aplicaes com o Kit PICgenios PIC18F, utilizaremos o
valor de 8MHz (frequencia do cristal externo conectado ao chip).
Aps ter configurado todos os parmentros e campos, basta clicar no boto ok
para salvar seu projeto. Pronto, nosso projeto est pronto e podemos
inserir os cdigos do programa no editor.
8.7- Conhecendo o ambiente mikroC
Observe o ambiente mikroC na figura abaixo:
31
O compilador
O compilador mikroC permite o desenvolvimento rpido de aplicaes complexas
graas aos recursos do editor avanado Code Editor. Alm disso, permitido utilizar
as bibliotecas includas na linguagem para aumentar a velocidade e a facilidade de
desenvolvimento dos projetos como comunicao serial, displays, aquisio de
dados, memria, etc.
Aps a compilao de nosso programa, o mikroC tambm gera arquivos LIST,
cdigo em assembly e arquivo .HEX. Integrado ao compilador, temos um debugador
para testes do programa no ambiente.
8.8- Code Editor (editor de cdigo)
O editor de cdigo do compilador mikroC oferece grandes auxlios no
desenvolvimentos de projetos.
Alguns aspectos desse editor so:
Sintaxe ajustvel
Assistentes de parmetros
Cdigo modelo
Autocorreo para tipos comuns
Funo para saltos de linhas.
32
Assistentes de cdigos
8.9- Messages Window (janela de mensagens)
Nos casos de erros encontrados durante a compilao, o compilador reporta o erro e
no gera o arquivo .hex. Alm disso, o Message Window informa o tamanho do
cdigo de programa (ROM) gerado pelo sistema, assim como a memria de dados
(RAM) usada pelo programa. Para visualizar a janela de
mensagens, v em View > Messages.
Figura 4- Janela de menssagens
8.10- Project Setup
Em Project Setup podemos alterar as configuraes dos projetos criado no mikroC.
Para acess-lo pressione Project > Edit Project.
Criao de um projeto no mikroC passo a passo
Vamos aprender passo a passo como criar um projeto no mikroC:
1. O primeiro passo abrir o mikroC;
33
2. Acesse o menu Project > New Project...
3. No menu New Project, coloque o nome do seu projeto, a pasta onde sero salvos
os arquivos-fontes do programa, escolha o microcontrolador que deseja programar,
o valor da freqncia do cristal, e configure os fusveis do PIC selecionado.
Neste exemplo, colocamos no nome de meu_programa em nosso
34
projeto, os arquivos -fontes do projeto sero salvos em
C:\...\Meu_programa\ , o microcontrolador que iremos utilizar no
projeto o PIC18F452, a freqncia do cristal utilizado de 8 MHZ, e os fusveis
configurados so:
Oscilador -> XT (definimos o tipo de oscilador utilizado no projeto)
Watchdog -> OFF (Watchdog timer desligado)
LVP -> OFF (Low Voltagem Programming - desligado)
Brown Out -> OFF (Brown-out desligado)
4. Clique no boto ok do painel New Project para salvar as configuraes do
projeto.
A tela seguinte ir aparecer, edite seu programa no Code Editor (painel
de edio).
Para exemplificar copie e cole o programa abaixo no painel de edio
do mikroC.
// o programa abaixo tem por funo escrever no PORTB do PIC o valor FF void main() { TRISB = 0x00; PORTB = 0xff; while (1); }
35
5. Salve seu programa atravs do cone salvar na barra de ferramentas do mikroC e
pressione o cone Build Project ou pressione as teclas de atalho CTRL + F9 para
compilar seu programa;
6. Seu programa ser compilado e seu resultado poder ser visualizado atravs da
Janela de mensagens:
Pronto, seu projeto foi criado e compilado com sucesso; O compilador mikroC gerou
na compilao o arquivo .HEX, este arquivo que dever ser gravado no
microcontrolador PIC.
Arquivo meu_programa.hex gerado pelo mikroC na compilao do nosso projeto.
36
9- PRIMEIRO PROJETO Inicialmente deve-se criar um projeto onde :
Project Name: Led_1
Project Path: C:/Pasta_aluno
Description: Programa circuito acende led no port B0
Device: P16F628a
Clock: 004.000000
Device Flags: _XT_OSC, _PWRT_ON, _WDT_OFF, _LVP_OFF, _CP_OFF
RA7/OSC1/CLKIN16
RB0/INT6
RB1/RX/DT7
RB2/TX/CK8
RB3/CCP19
RB410
RB511
RB6/T1OSO/T1CKI12
RB7/T1OSI13
RA0/AN017
RA1/AN118
RA2/AN2/VREF1
RA3/AN3/CMP12
RA4/T0CKI/CMP23
RA6/OSC2/CLKOUT15
RA5/MCLR4
U1
PIC16F628A
D1LED-RED
R1330R
R210k
Devemos ento escrever o cdigo e compilar o projeto para assim poder gravar o
programa no Microcontrolador.
/**********************************************************************
Microcontroladores PIC
Linguagem C Compilador MikroC
Programa teste
Objetivo: Programa de um circuito que acende o led no PORTB 0
*********************************************************************/
void main()
37
{
cmcon=0x07;
trisb= 0b00000000; // Port B como saida
portb= 0; //estado inicial do port B
trisa= 0b00000000; // todo o porta como saida
porta= 0;
while(1) //loop infinito
{
portb.f0=1; //ativa sada RB0
}
}
Uma vez escrito o programa, para compilar basta pressionar CTRL + F9 ou, clicar
em Menu Project e em seguida a opo Build.
No apresentando nenhum erro, na tela de mensagens dever aparecer o seguinte
mensagem na cor verde:
SUCCESS ( Release Build)
Esta mensagem garante que o programa foi compilado e que foi gerado o cdigo de
mquina para ser gravado no Microcontrolador (arquivo.HEX).
Gravando o Projeto:
O Programa WinPIC verso 3.62 ser utilizado para gravar o programa no
Microcontrolador.
Primeira coisa a se fazer selecionar o Chip PIC16F628a.
38
Porm, precisamos ainda configurar o WinPic 800 para o correto funcionamento com
a placa JDM. Para isso, clica-se em Configurao, opo Hardware e selecione o
programador (JDM PROGRAMMER)..
Este Programa pago mais tem uma verso mais simples e gratuita e est disponvel no site: /www.winpic800.com. Identificao dos botes:
- Ler Tudo: Usado para leitura do contedo gravado no Microcontrolador;
- Programar Tudo: Usado para gravarmos o programa no Microcontrolador;
- Limpar Tudo: Usado para limparmos o contedo gravado no Microcontrolador;
39
- Verificar: Usado para fazer uma comparao do contedo gravado no
Microcontrolador com o programa aberto.
Aps o trmino da gravao, se tudo deu certo aparecer seguinte mensagem:
OK! O programa j est gravado no PIC. Agora s testar.
Exerccios:
1 - Fazer um programa onde o led de RB0 deve ficar aceso ao ligar o nosso Kit. 2 - Fazer um programa onde o led de RBO deve acender e apagar com intervalo de 500ms.
10- FUNES
DEFINE:
A diretiva Define da nome ao bit do port em questo
/********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 1 Objetivo: Apresentar o uso da diretiva define *********************************************************************/ #define led1 portb.f1 // define o label led1 para o pino RB1 #define led2 portb.f2 // define o label led2 para o pino RB2 void main()
{
cmcon=0x07;
trisb= 0b00000000; // Port B como saida
40
portb= 0; //estado inicial do port B
trisa= 0b00000000; // todo o porta como saida
porta= 0;
while(1) //loop infinito { led1=1; //ativa sada RB1 led2=1; // ativa sada RB2 }
}
10.1- ACIONAMENTO DE BOTES UTILIZANDO O IF
/********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 2 Objetivo: Fazer leitura de um boto e utilizao do IF *********************************************************************/ void main ( ) { cmcon=0x07;
trisa = 0b00000010; // configura RA1 entrada restante como sada portb = 0; // todos os pinos de sada do portb = nvel baixo while(1) //loop infinito { if (porta.f1==1) //Se porta 1 for igual a 1 { portb=255; //acende todo o portb } }
}
**Observe que se for pressionado o boto em RA1 todo o portB vai acende e no
vai mais apagar, a no ser que o PIC seja Resetado ou desligado.
10.2- ELSE: UTILIZANDO A FUNO ELSE OU SEJA SE NO
/********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa 4 Objetivo: Fazer leitura de um boto e utilizao do IF e else
41
*********************************************************************/ void main ( ) { cmcon=0x07;
trisa = 0b00000010; // configura RA1 entrada restante como sada portb = 0; // todos os pinos de sada do portb = nvel baixo while(1) //loop infinito { if (porta.f1==1) //Se porta 1 for igual a 1 { portb=255; //acende todo o portb } Else { Portb=0; } }
}
**Observe que se for pressionado o boto em RA1 todo o portB vai acende, seno
vai continuar apagado.
Exercicio:
3- Faa um programa que acenda um led a cada tecla pressionada em PORTA
Teclas utilizadas: RA1, RA2, RA3 e RA5.
10.3- FUNO BUTTON Button (&portX , pinoX , tempoX , Estado_Tecla)
Onde:
&portX = port da tecla (porta, portb, portc, portd ou porte);
pinoX = o pino onde est conectado a tecla (varia de 0 7);
tempoX = tempo de Debounce em milisegundos;
Estado_Tecla = Valor do nvel lgico quando a tecla pressionada.
42
Acionamento de Botes: Abaixo temos o esquema bsico do nosso KIT de desenvolvimento:
RA7/OSC1/CLKIN16
RB0/INT6
RB1/RX/DT7
RB2/TX/CK8
RB3/CCP19
RB410
RB511
RB6/T1OSO/T1CKI12
RB7/T1OSI13
RA0/AN017
RA1/AN118
RA2/AN2/VREF1
RA3/AN3/CMP12
RA4/T0CKI/CMP23
RA6/OSC2/CLKOUT15
RA5/MCLR4
U1
PIC16F628A
D1LED-RED
R1330R
R210k
R31k
+ 5 volts+ 5 volts
GND
Boto 1
Resistor de Pull-up
/********************************************************************** Microcontroladores PIC Linguagem C Compilador MikroC Programa: 3 Objetivo: Fazer leitura de um boto e utilizao da funo Button *********************************************************************/ void main() { cmcon=0x07; //Conf. bsicas trisb= 0b00000000; // Port B como saida portb= 0; //estado inicial de portb trisa= 0b00000010; // todo o porta como saida porta= 0; while(1) //loop infinito
43
{ if (button(&porta, 1,20,1) //Se o boto RA1 pressionado { Portb=255; //acende todo o portb } Else { portb=0; //seno continua com as sadas em zero 0 } }
}
** A funo Button utilizada como um recurso de software, para eliminar o
problema de Debounce , ou seja um pequeno ruido ao acionar-mos a tecla.
-Agora vamos testar vrias chaves individualmente sem o problema de Debounce
utilizando a funo Button .
/**********************************************************************
Curso de Microcontroladores PIC
Linguagem C Compilador MikroC
Programa teste funo Button com vria chaves
Objetivo: Testar vrias chaves sem ter problema de rudo (Debounce).
*********************************************************************/
void main()
{
cmcon=0x07;
trisb=0; // define o PORTB como saida
trisa=0b00011110; // define todo o PORTA 1,2,3 e 4 como entrada
while(1)
{
if (button(&porta, 1, 20, 1)) // &port identifica o port, 1 identifica o pino,
// 20ms o tempo e 1 nvel para tecla acionada
portb.f0=1; // se pressionado aciona Rb0
else if (button(&porta, 2, 20, 1))
44
portb.f1=1;
else if (button(&porta, 3, 20, 1))
portb.f2=1;
else if (button(&porta, 4, 20, 1))
portb.f3=1;
delay_ms(200);
}
}
Exerccio: 4) Imagine que vamos montar um circuito que controle atravs de 4 chaves
(ligar/desligar) a iluminao de uma casa. Esse controle ficar no quarto do casal, ao
lado da cama, podendo com praticidade controlar/monitorar a iluminao da casa.
Ento teremos as chaves em RA1, RA2 ,RA3 e RA4 e as sadas para acionar os
rels em RB0, RB1, RB2 e RB3.
Pressionado RA1 acende iluminao da sala e pressionado RA1 novamente apaga.
Idem para RA2 (cozinha), RA3 (quarto 1) e RA4 (quarto 2).
11. REFERNCIAS
Disponvel em:
David Jos de Souza , Desbravando o PIC
Disponvel em : Livro Microcontroladores PIC16F628A/648A Uma abordagem prtica objetiva Autor: Wagner da Silva Zanco
Disponvel em:
Microchip Technology Inc. (www.microchip.com)
Acessado em 04 outubro 2013.