Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
OBJETIVOS
Aprender a programar em linguagem C os Microcontroladores (uC) PIC, para isso
usaremos um microcontrolador mid-range o PIC16F8XX o qual não será estudado
exaustivamente já que o foco é a linguagem de programação.
Usar-se-á o compilador mikroC PRO for PIC a versão free que tem capacidade de
processar até 2K palavras de programa e o software PROTEUS (ISIS) para a simulação
dos circuitos.
Este minicurso é direcionado para os estudantes, técnicos, hobbistas, pessoas
com pouco conhecimento de programação, engenheiros ou professores, que
necessitam aprender a programar em Linguagem C para desenvolver projetos
microcontrolados.
Montaremos pequenos sistemas utilizando o software PROTEUS. Este software é
poderoso para simular vários tipos de microcontroladores com muita precisão, além
de ter vários instrumentos e componentes virtuais que servirão para fazer as
verificações necessárias dos projetos implementados.
A teoria sempre será acompanhada de uma parte prática, já que se tem
pesquisado que esta é a melhor maneira de aprender a programar em alguma
linguagem. “Programar se aprende programando”
Página 2 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Sumário
Página 3 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 4 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Lista de Figuras
Figura 1. Pinos do microcontrolador PIC16F887 e encapsulado DIP-40 ....................................... 9
Figura 2. Diagrama em blocos do microcontrolador PIC16F887 .................................................. 9
Figura 3. Circuito de alimentação do microcontrolador PIC16F887. Este também pode ser
alimentado na faixa de 2 a 5,5 V ................................................................................................. 10
Figura 4. Pinos do microcontrolador PIC16F887 ........................................................................ 13
Figura 5. Diferentes modelos de diodos LEDs............................................................................ 14
Figura 6. Partes do diodo LED e como polarizar este.................................................................. 14
Figura 7. Formas de conectar um LED a um microcontrolador .................................................. 15
Figura 8. Barra de 10 LEDs........................................................................................................... 15
Figura 9. Chaves e Teclas............................................................................................................. 15
Figura 10. Níveis de tensão ideais de uma chave e uma tecla. ................................................... 16
Figura 11. Trepidação em uma chave ........................................................................................ 16
Figura 12. Controle de uma entrada com um optoacoplador 4N25 ........................................... 17
Figura 13. Display de sete segmentos ........................................................................................ 18
Figura 14. Conexão do display de sete segmentos como microcontrolador .............................. 18
Figura 15. Conexão do relé a dispositivos de potência ............................................................... 19
Figura 16. Governo de uma carga potência com relé ................................................................. 20
Figura 17. Driver ULN2003 e governo de vários relés ................................................................. 20
Figura 18. Controle de pequenas cargas com relé de láminas encapsulado em DIL .................. 21
Figura 19. Buzzer Com Oscilador Interno, pode ser com 5V, 3V ou outros. ............................... 21
Figura 20. Conexão do Buzzer a um microcontrolador............................................................... 21
Figura 21. Ambiente ISIS do PROTEUS ........................................................................................ 22
Figura 22. Janela Pick Devices ..................................................................................................... 23
Figura 23. Janela com os componentes necessários para o projeto. ......................................... 24
Figura 24. Mostrando os botões de rotacionar e reflexão (espelhar). ....................................... 25
Figura 25. Opções de copiar, mover ou rotacionar/espelhar ..................................................... 25
Figura 26. Esquema elétrico de um sistema com microcontrolador .......................................... 26
Figura 27. Janela Edit Component de um resistor ...................................................................... 27
Figura 28. Janela da Fonte de Alimentação ................................................................................ 28
Figura 29. Janela de Propriedades para um microcontrolador .................................................. 29
Figura 30. Botões de controle para simulação ........................................................................... 29
Figura 31. Simulação de um circuito com microcontrolador. ..................................................... 30
Figura 32. IDE do mikroC PRO for PIC e sua diferentes partes. .................................................. 32
Figura 33. Project Manager e opções ......................................................................................... 32
Figura 34. Janela Code Explorer .................................................................................................. 33
Figura 35. Janela Project Settings ............................................................................................... 33
Figura 36. Janela Library Manager .............................................................................................. 34
Figura 37. Icones usados no Simulador....................................................................................... 37
Figura 38. Janela Watch Values .................................................................................................. 38
Figura 39. Keywords do compilador mikroC ............................................................................... 41
Figura 51. Circuito no Proteus a ser usado nos exemplos de variáveis. ..................................... 46
Figura 52. Circuito no Proteus a ser usado nos exemplos de operadores. ................................. 50
Página 5 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 6 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Lista de Tabelas
Tabela 1. Pinos do microcontrolador PIC16F887 ........................................................................ 11
Tabela 2. Combinação dos bits IRCF................................................Erro! Indicador não definido.
Tabela 3. Operações lógicas da Álgebra de Boole ...................................................................... 39
Tabela 4. Sequencias de Escape.................................................................................................. 44
Tabela 5. Tipos de Dados ............................................................................................................ 45
Tabela 6. Modificadores dos tipos de dados .............................................................................. 45
Tabela 7. Operadores Aritméticos .............................................................................................. 47
Tabela 8. Operadores de atribuição composta........................................................................... 47
Tabela 9. Operadores Relacionais............................................................................................... 48
Tabela 10. Operador Lógica AND ................................................................................................ 48
Tabela 11. Operador Lógica OR .................................................................................................. 49
Tabela 12. Operador Lógica NOT ................................................................................................ 49
Tabela 13. Operadores Lógicos Bit a Bit (Bitwise) ...................................................................... 49
Tabela 14. Prioridade e Associatividade de Operadores ............................................................ 50
Página 7 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 8 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 9 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 10 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
25 mA, quando o pino está no nível baixo, ou seja, quando consome corrente
(modo sink). Mas, a máxima corrente neste mesmo modo para cada porta A, B,
C, D e E é de 200 mA.
25 mA, quando o pino está no nível alto, ou seja, quando fornece corrente
(modo source). Mas, a máxima corrente neste mesmo modo para cada porta A,
B, C, D e E é de 200 mA.
A tabela 1 mostra os pinos do PIC16F887.
Página 11 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 12 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 13 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
O LED se polariza diretamente com uma tensão entre 1,2 e 2,2 V, segundo o
modelo, e só precisa de 2 a 30 mA para ser ligado.
Página 14 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 15 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
A leitura do estado das chaves e teclas é muito simples, estes dispositivos são
conectados entre uma entrada e terra, como se mostra na Figura 10 e se força à
entrada a um nível lógico alto mediante um resistor de pull up de 10 KΩ.
Esta situação causa problemas em alguns circuitos analógicos e digitais que respondem
rápido suficientes e mal interpretam os pulsos on/off como um trem de dados. Em
outras palavras, o processo total não é muito longo (uns poucos micro – ou
milisegundos), mas longos suficientes para serem registrados pelo microcontrolador.
Quando somente uma tecla é usada para um contador os erros acontecem em quase
100% dos casos. Uma forma de solucionar este problema é usar software da seguinte
forma: quando o programa testa o estado lógico de um pino de entrada e detecta uma
mudança, a checagem poderia ser feita mais uma vez depois de certo atraso (aprox. 30
ms). A verificação da mudança significa que uma chave ou tecla tem mudado sua
posição. As vantagens de tal solução são claras: esta é livre dessa situação e pode ser
aplicada a contactos com qualidade inferior.
Página 16 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 17 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Cada display tem sete segmentos e um ponto decimal, todos eles são diodos LEDs.
Estes diodos podem estar em duas configurações possíveis, segundo os pinos que
tenham ligados: anodo comum ou catodo comum. Os segmentos dos displays se
controlam diretamente por algum pino de alguma porta do microcontrolador e
segundo o tipo de display a conexão ao microcontrolador muda como se mostra na
Figura 14.
Página 18 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 19 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 20 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Figura 18. Controle de pequenas cargas com relé de láminas encapsulado em DIL
2.6. Buzzer
Figura 19. Buzzer Com Oscilador Interno, pode ser com 5V, 3V ou outros.
O buzzer funciona com tensões entre 3 e 16 V e seu consumo não supera os 10 mA,
pelo que pode ser alimentado diretamente pela saída de um microcontrolador, como
indica a Figura 20.
Buzzer emite som
com saída a nível
baixo
Página 22 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 23 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 24 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Para mover um objeto, seleciona este e depois arrastar este com o botão
esquerdo até o lugar desejado.
Para rotacionar um objeto, seleciona este e logo pressiona a tecla ‘+’ ou ‘-’ do
teclado numérico até conseguir a orientação desejada. Outra forma de fazer isso
é aplicando os botões de rotação ao objeto selecionado. A rotação só é possível
em ângulos retos.
Para refletir um objeto, sobre seu eixo horizontal ou vertical, seleciona este e
utiliza os botões de reflexão como mostra a Figura 24.
Muitas vezes depois da edição dos objetos ainda ficam restos ou marcas do desenho
sobre o esquemático, então para refrescar de forma rápida todo o diagrama se pode
pressionar a tecla R (Redesenho).
Os fios para a interconexão dos elementos do circuito não estão em uma categoria em
especial, estes se colocam diretamente aproveitando a forma de lápis do cursor e as
Página 25 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 26 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
este circuito não tem maior efeito, já que a freuência de operação do PIC se coloca no
mesmo PIC, motivo pelo qual o circuito do XTAL ficaria de enfeite. Às vezes, é ignorado
para aliviar a carga do projeto e melhorar a velocidade de simulação.
DISC100N16V. Este é um capacitor para desacoplar de 100nF. No ambiente ISIS não
tem ruído nem interferência este capacitor também é decorativo.
CRYSTAL. Como se falou anteriormente, no Proteus a freqüência de trabalho do PIC é
estabelecida no mesmo PIC ficando a presencia do cristal como inecessária.
BUTTON. Este são os famosos “push button” que não faltam em algum projeto.
A fonte de alimentação POWER tem um valor de 5V por default, ainda que não
se veja no esquemático. Se você quizer ver o VDD ou VCC pode abrir a janela de
propriedades e escolher uma opção do combobox. O combobox não oferece tensões
ordinárias. Se precisássemos as teríamos que escrever a mão. Por exemplo, para uma
fonte de 12 V se escreve +12V ao lado da String. A V não faz falta, mas o sinal ao
começo é imprescindível, além disso, não se devem deixar espaços em branco.
Página 27 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
A edição das propriedades do PIC pode passar por mudar muitos parâmetros.
Neste momento só veremos os dois que realmente interessam na grande maioria dos
projetos. O programa do PIC e sua freqüência de operação.
Program File é o campo onde carrega o programa do microcontrolador. Este
pode ser o conhecido arquivo *.HEX (o mesmo que utilizamos para gravar o
microcontrolador) ou um arquivo de depuração (*.COF ou similar), que para
propósitos de simulação e depuração resulta mais ilustrativo.
Para carregar um arquivo dar um click ao ícone que aparece ao lado e no diálogo
Select File Name que aparecerá busca e seleciona o arquivo em questão.
Processor Clock Frequency. No caso dos PIC16 é a freqüência do XTAL usado pelo
PIC, mas para os PIC18 não necessariamente é assim.
Página 28 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 29 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 30 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Não existe um compilador para ser usado para um único microcontrolador como
não há um compilador para ser usado para todos os microcontroladores. Nós
utilizaremos o compilador mikroC PRO for PIC e como o nome sugere no compilador
se escreverá programas para microcontroladores PIC na linguagem C. Este tem toda a
informação da arquitetura interna destes microcontroladores, a operação de circuitos
em particular, conjunto de instruções, nomes de registradores, pinos, etc. Quando
você ativa o compilador, a próxima coisa a ser feita é selecionar um “chip” da lista , a
frequência de operação e claro a escrever o programa em C.
Página 31 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Figura 32. IDE do mikroC PRO for PIC e sua diferentes partes.
PROJECT MANAGER
Página 32 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
CODE EXPLORER
Página 33 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
CODE EDITOR
O Code Editor (Editor de Código) é uma parte central da janela do compilador usado
para escrever programas. Um grande número de opções usado para configurar suas
funções e leiaute podem ser encontradas no menu Tools/Options [F12].
LIBRARY MANAGER
Uma das opções mais úteis deste programa é o Library Manager “Gerenciador de
Biblioteca” e certamente merece a nossa atenção.
A principal vantagem de uma linguagem de alto nível tal como C é que este é capaz de
usar o conhecimento e trbalho de outras pessoas. As funções das bibliotecas são o
melhor exemplo disto. Se você necessita uma função para executar uma certa tarefa
enquanto escreve um programa, você deve procurar por esta dentro de alguma
biblioteca que está integrada no compilador e usar esta. Se alguma biblioteca é
“checada”, suas funções serão automaticamente reconhecidas durante o processo de
compilação tal que não é necessário usar o comando #include.
Página 34 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
B IB LIOTECA DESCRI Ç ÃO
ANSI C String Library Usado para executar operações de manipulação de memória e string
MISCELANEA DE BIBLIOTECAS
B IB LIOTECA DESCRI Ç ÃO
Trigonometry
Usado para a implementação de funções fundamentais de trigonometria
Library
Página 35 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
B IB LIOTECA DESCRIÇ ÃO
Compact Flash Library Used for operation with Compact Flash memory cards
EthernetPIC18FxxJ60
Used for operation with built-in Ethernet module
Library
Flash Memory Library Used for operation with built-in Flash memory
I2C Library Used for operation with built-in serial communication module I2C
Keypad Library Used for operation with keyboard (4x4 push buttons)
Lcd Library Used for operation with LCD display (2x16 characters)
Multi Media Card Library Used for operation with multimedia MMC flash cards
Port Expander Library Used for operation with port expander MCP23S17
RS-485 Library Used for operation with modules using RS485 serial communication
Página 36 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
SPI Ethernet Library Used for SPI communication with ETHERNET module (ENC28J60)
SPI Graphic Lcd Library Used for 4-bit SPI communication with graphic LCD display
SPI Lcd8 Library Used for 8-bit SPI communication with LCD display
USB Hid Library Used for operation with built-in USB module
SIMULADOR
Página 37 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Step Into – Ao clicar neste icone se executa a linha de programa na qual o cursor está
posicionado.
Run To Cursor – Este comando é usado para executar uma parte particular do
programa, isto é, desde a última linha executada à linha na qual o cursor está
localizado.
Step Out – Clicando este icone, o programa sai da rotina que está sendo executada.
Página 38 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Temos então as operações AND, OR, NOT, NAND, NOR, XOR e XNOR ( E, OU,
NÃO, NÃO E, NÃO OU, OR EXCLUSIVO e NÃO OR EXCLUSIVO respectivamente).
Função OU:
Assume 0 quando
todas as variáveis S=A+B
OU ou OR forem 0 e 1 nos
outros casos
Função NÃO:
NÃO ou Inverte a variável
NOT aplicada à sua
entrada
Função NÃO E:
Inverso da função
NÃO E ou E.
NAND
Página 39 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Função OU
EXCLUSIVO:
OR
Assume 1 quando
EXCLUSIVO as variáveis
ou XOR assumirem
valores diferentes
entre si.
Função NÃO OU
EXCLUSIVO
NÃO OR (COINCIDÊNCIA):
EXCLUSIVO Assume 1 quando
ou XNOR houver
coincidência entre
os valores das
variáveis.
e
char
i;
unsigned int j;
Página 40 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Se analiza como quatro tokens, incluindo a string literal como um único token:
some_string
=
“mikro foo”
;
Os keywords são palavras reservadas com um significado fixo o qual não pode ser
usado como identificador. Além dos keywords padrão do mikroC, existe um conjunto
de identificadores (de constantes e variáveis) pré-definidos referidos como palavras
reservadas. Elas descrevem um microcontrolador especifico e não podem ser
redefinidos. A continuação uma lista dos keywords do mikroC em ordem alfabético:
Página 41 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Comentários
Identificadores
São nomes arbitrários usados para nomear objetos básicos da linguagem tais
como rótulos, tipos, constantes, variáveis e funções. Os identificadores podem conter
todas as letras do alfabeto (maiúsculas e minúsculas), o caractere underline ‘_’
também como os dígitos de 0 a 9. O primeiro caractere de um identificador deve ser
uma letra ou um underline. mikroC é caso sensitivo por default, o que significa que
Sum, sum e suM não são considerados identificadores equivalentes.
temperatura V1
Pressao
no hit
dat2string
SUM3
vtext
Página 42 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Literais
Literais Inteiras
As literias inteiras com prefixo 0x (ou 0X) são considerados números hexadecimais. Por
exemplo, 0x8F.
As literais inteiras que começam com zero são consideradas números octais. Por
exemplo, 0357.
As literias inteiras que começam com 0b (ou 0B) são considerados números binários.
Por exemplo, 0b10100101.
O literal ponto flutuante consiste de: inteiro decimal, ponto decimal, fração
decimal e “e” ou “E” e um expoente inteiro com sinal (opcional).
0. //= 0.0
-1.23 //= -1.23
23.45e6 //= 23.45 * 10^6
3E+10 //= 3.0 * 10^10
2e-5 //= 2.0 * 10^-5
.09E34 //= 0.09 * 10^34
Literais Caractere
Página 43 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Literais Strings
Representa uma sequencia de caracteres CII entre aspas (“”). Os literais strings
podem conter espaços em branco. O analisador não vai dentro da string, mas trata
esta como um único símbolo. Existe um caractere nulo (NULL - ASCII zero) ao final de
string. Este não está incluído no comprimento total da string. Uma string sem nada
entre as aspas (string nulo) é armazenado como um simples caractere nulo. Exemplo:
“Ola mundo” //mensagem, 9 caracteres
“Tempratura estavel” // mensagem, 9 caracteres
“ ” //
“C” //
“” //
Sequencias de Escape
\b 0x08 BS Backspace
\f 0x0C FF Formfeed
\\ 0x5C \ Backslash
\’ 0x27 ‘ Apostrofe
\” 0x22 “ Aspas
\? 0x3F ? Pergunta
Página 44 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
TAMANHO
TIPO
DESCRIÇÃO (NUMERO FAIXA DE VALORES
DADO
DE BITS)
TIPO DE T I P O D E D AD O C O M T AM AN H O
F AI X A
D AD O PREFIXO (NUMERO DE BITS)
EXEMPLOS
/*
Exemplo_1: Este programa mostra como declarar as variaveis e será mostrado no simulador.
Microcontrolador: PIC16F887
Clock: 8 MHz
*/
Página 45 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
+5
R0
10k
D5 D4 D3 D2 D1 D0
U1
1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
270R RC1/T1OSI/CCP2
2 17
RA0/AN0/ULPWU/C12IN0- RC2/P1A/CCP1
3 18
RA1/AN1/C12IN1- RC3/SCK/SCL
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT
14
RA6/OSC2/CLKOUT
13 19
RA7/OSC1/CLKIN RD0
22pF 20
RD1
33 21
RB0/AN12/INT RD2
34 22
RB1/AN10/C12IN3- RD3
8MHz 35 27
RB2/AN8 RD4
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29
RB4/AN11 RD6/P1C
38 30
RB5/AN13/T1G RD7/P1D
22pF 39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887
Página 46 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Delay_ms(1000);
PORTA = 0B000010;
Delay_ms(1000);
PORTA = 0B000100;
Delay_ms(1000);
PORTA = 0B001000;
Delay_ms(1000);
PORTA = 0B010000;
Delay_ms(1000);
PORTA = 0B100000;
Delay_ms(1000);
O PER AD O R O PER AÇ ÃO
+ Adição (Soma)
- Subtração
* Multiplicação
/ Divisão
% Resto
O P E R AD O R EXEMPLO D E S C R I P Ç ÃO
++a
++ Variável "a" é incrementada por 1
a++
--b
-- Variável "b" é decrementada por 1
b--
Página 47 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
O P E R AD O R S I G N I F I C AD O EXEMPLO C O N D I Ç ÃO V E R D AD E I R A
> é maior que b>a Se b é maior que a
>= é maior que ou igual a a >= 5 Se a é maior que ou igual a 5
< é menor que a<b Se a é menor que b
<= é menor que ou igual a a <= b Se a é menor que ou igual a b
== é igual a a == 6 Se a é igual a 6
!= não é igual a a != b Se a não é igual a b
Por exemplo: 1 && 0 é o mesmo que (expressão verdadeira) && (expressão falsa). O
resultado é 0, isto é FALSO em ambos casos.
Página 48 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
OPERADOR LÓGICA OR
Operador 1 Operarador 2 Resultado
0 0 0
|| 0 1 1
1 0 1
1 1 1
Página 49 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 50 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
/*
Exemplo_3: O programa testará alguns dos operadores vistos na teoria. Será implementado
no Proteus.
Microcontrolador: PIC16F887
Clock: 8 MHz
*/
void main()
{
ANSEL = 0; // Configura os pinos AN como digitais
ANSELH = 0;
C1ON_bit = 0; // Desabilita os comparadores
C2ON_bit = 0;
PORTB = 0; //Toda a porta B igual a 0
TRISB = 0; //Toda a porta B será saída
while(1)
{
a1 = 3; //a variavel a1 recebe 3
PORTB = a1; //Porta B recebe o valor de a1.
Delay_ms (1000);
ser = a1;
PORTB = ser;
Delay_ms(1000);
//exemplo 4. O programa testará alguns dos operadores bit a bit vistos na teoria.
void main()
{
ANSEL = 0; // Configura os pinos AN como digitais
ANSELH = 0;
C1ON_bit = 0; // Desabilita os comparadores
C2ON_bit = 0;
PORTB = 0; //Toda a porta B igual a 0
TRISB = 0; //Toda a porta B será saída
a1 = 16;
ser = 8;
while(1)
{
res = a1 & ser; //funcao logica AND. Resultado = 0b00000
PORTB = res;
Página 51 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Delay_ms (2000);
}
}
5.9.1. Instruções if
A instrução if é usada para executar condicionalmente um segmento de código. A
forma mais simples da instrução if é esta:
if (expressão)
Ação;
A expressão é avaliada e se for verdadeira executa a ação. No entanto, se a avaliação
da expressão for falsa a ação não é executada.
Página 52 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Exemplo:
if (a>22)
{
valor1 = x;
y = contador + 10;
}
else
{
valor2 = x;
Y = contador - 5;
}
Página 53 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
que seja verdadeira. Quando isso acontece, todas as condições de testes restantes são
saltadas.
Exemplo:
if (contador==12)
{
Dúzia++;
X++;
}
else if (contador<12)
{
Dúzia=0;
y--;
}
else if (contador>12)
{
Dúzia = 0;
Z++;
}
EXERCÍCICOS SOBRE IF
Página 54 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Hexadecimal Decimal
A 10
B 11
C 12
D 13
E 14
F 15
switch (chr)
{
case ‘A’: y = 10; break;
case ‘B’: y = 11; break;
case ‘C’: y = 12; break;
case ‘D’: y = 13; break;
case ‘E’: y = 14; break;
case ‘F’: y = 15; break;
}
Página 55 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
while (expressão)
{
Instrução1;
Instrução2;
...
Instruçãon;
}
i = 0;
while (i < 10)
{
Instruções;
i++;
}
Solução:
O programa requerido é dado a continuação:
void main()
{
unsigned char i;
int MyArray[10];
i = 0;
while(i < 10)
{
MyArray[i] = 0;
i++;
}
}
Quando se usa a instrução while, é importante se certificar que a condição que
mantém o laço esteja mudando dentro do laço, senão se terá um laço infinito.
Algumas vezes se faz necessário criar laços infinitos em nossos programas. Este pode
ser facilmente alcançado usando uma instrução while, como mostrado a continuação:
Página 56 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
while(1)
{
instruções;
}
} while(expressão);
Solução:
O programa requerido é o seguinte:
void main()
{
unsigned char i;
int MyArray[100];
i = 0;
do
{
MyArray[i] = 1;
i++;
} while(i < 100);
}
Exemplo: Escrever um programa usando o laço do – while para copiar uma string
chamada B para outra string chamada A.
Solução: Lembrar que as strings são arrays de caracteres terminados com o
caractere NULL. O laço do – while copiará o conteúdo da string B para A,
incluindo o terminador NULL. Notar que i é incrementado depois que seu valor
tem sido usado como um subscrito para B.
i = 0;
do
{
A[i] = B[i];
} while(B[i++] != ‘\0’);
Página 57 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
void main()
{
int X[10], Y[10], Sum;
unsigned char i = 0;
Sum = 0;
do
{
Sum = Sum + X[i]*Y[i];
i++;
} while(i < 10);
}
EXERCÍCIOS SOBRE WHILE E DO-WHILE
void main()
{
int Mult[50];
unsigned char i;
for(i = 1; i <= 49; i++)
{
Mult[i] = i*i;
}
}
Página 58 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Os laços for podem ser facilmente aninhados, como mostrado no exemplo seguinte:
Aqui todoso os elementos de um array bidimensional MyArray são inicializados com 0
(assumindo que a dimensão do array é 10). Neste exemplo, o laço interno é repetido
10 vezes para cada valor de i do laço externo, isto é o número total de iterações é de
100.
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
MyArray[i][j] = 0;
}
}
Os parâmetros em um laço for podem ser omitidos. Existem várias variações do laço
for, dependendo qual parâmetro é omitido.
Criar um laço infinito:
for(;;)
{
instruções;
}
5.11. Funções
Em geral, é uma boa pratica de programação escrever um programa grande e
complexo como uma coleção de pequenos módulos, onde cada modulo pode ser
testado independente do código principal. Uma função pode ser pensada como um
programa de código testável e auto-contido desenvolvido para executar uma tarefa
especifica. Funções são também criadas quando é requerido repetir um certo
algoritmo em vários diferentes lugares do programa principal. Por exemplo, poderia
ser requerido converter a temperatura desde oF em oC em vários lugares de um
programa. Ao invés de repetir o código, é mais eficiente e a manutenção do programa
é melhor se o código de conversão de temperatura é escrito na forma de uma função.
Esta função pode ser chamada sempre que esta é requerida para fazer a requerida
conversão.
O formato geral de uma função é com segue:
tipo nome(parâmetros)
{
Instruções;
}
Página 59 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
//
// Esta função calcula a área de um cilindro. O raio e altura são passados
// como parâmetros para a função.
//
float Cyl_Area(float raio, float altura)
{
float c;
c = 2*PI*raio*altura;
return c;
}
//
// Esta função calcula o volume de um cilindro. O raio e altura são passados
// como parâmetros para a função.
//
float Cyl_Volume(float raio, float altura)
{
float c;
c = PI*raio*raio*altura;
return c;
}
//
// Programa principal
//
void main()
{
float r, h, c_area, c_volume;
r = 3.0; // O raio
h = 12.5; // A altura
c_area = Cyl_Area(r, h); // Calcula a area
c_volume = Cyl_Volume(r, h); // Calcula o volume
}
Página 60 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Página 61 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
Passando um array complete para uma função é ligeiramente mais complicado. Aqui,
simplesmente escrevemos o nome do array na chamada do programa. No cabeçalho
da função temos que declarar um array com o mesmo tipo seguido de um colchete
vazio. É importante frisar que não se está copiando o array inteiro para a função, mas
simplesmente passando o endereço do primeiro elemento do array, o qual é igual ao
nome do array. Porque o endereço é passado para a função, os elementos do array são
passados por referência. Como um resultado, os elementos do array original podem
ser modificados dentro da função. Um exemplo é dado abaixo, para ilustrar o
processo.
Página 62 de 63
Aprenda Linguagem C Básico para Microcontroladores PIC de 8 bits Prof. Antonio Ramirez Hidalgo
//
// Esta função calcula a soma dos elementos de um array.
//
int Sum(int A[ ])
{
char i;
int Total = 0;
for(i = 0; i < 10; i++) Total = Total + A[i];
return Total;
}
//
// Programa Principal
//
void main()
{
int s, N[10];
char i;
for(i = 0; i < 10; i++) N[i] = i + 1; // Inicializa array N
s = Sum(N); // Calcula a soma dos elementos.
}
Página 63 de 63