SlideShare ist ein Scribd-Unternehmen logo
1 von 222
Downloaden Sie, um offline zu lesen
SISTEMAS EMBARCADOS
 Microcontroladores PIC
 Prof. Cenilio
 2014.
"O QUE É PROGRAMAÇÃO EMBARCADA?"
 A computação embarcada estuda os
computadores embutidos que são encontrados
nos mais diversos equipamentos
eletroeletrônicos
Introdução
Os microcontroladores PIC são dispositivos fabricados
pela Microchip
São de arquitetura RISC com clock de até 40MHz, até
2048kword de memória de programa e até 3968 bytes
de memória RAM
Podem ter até 4 temporizadores/contadores, memória
EEPROM interna, gerador/comparador/amostrador
PWM, conversores A/D de até 12 bits, interface de
barramento CAN, 12C, SPI entre outros
INTRODUÇÃO
 Existem 3 famílias de PICs, de 12, 14 e 16 bits de memória
de programa
 Todos possuem barramento interno de dados de 8 bits
 Quanto maior a palavra de programa, maior o número de
instruções
 12 bits = 33 instruções;
 14 bits = 35 instruções;
 16 bits = 77 instruções.
 A arquitetura dos PICs é otimizada para a
execução de um pequeno conjunto de
instruções, mas com velocidade muito alta.
 Exemplo: PIC da série 16 executa 5 MIPS
(Milhões de Instruções por Segundo) a
20MHz ou 10 MIPS a 40 MHz.
 Diferentes dispositivos PIC são semelhantes em sua
arquitetura interna, o que facilita a migração entre
microcontroladores.
 Os princípios gerais da arquitetura PIC são:
 Registrador de intercâmbio geral, ou registrador de
trabalho (W);
 Registrador de armazenamento de flags (STATUS)
 Registrador de controle de interrupção (INTCON);
 Registrador de manipulação de dados nas portas
(PORT ou GPIO).
MEMÓRIA DE PROGRAMA
 Nas séries 12, 14 e 16 está embutida na pastilha
 Alguns dispositivos das séries 17 e 18 suportam
memórias de programa externas
 Tecnologias de implementação de memória de
programa:
 ROM – programada de fábrica;
 OTP (PROM) – Virgens de fábrica;
 EPROM;
 FLASH – pelo menos 1000 ciclos de
gravação/apagamento.
MEMÓRIA RAM E REGISTRADORES
 A RAM é utilizada para abrigar os registradores internos.
 Divide-se em duas partes:
 Para abrigar registradores de funções especiais (SFR - Special
Function Register);
 Para abrigar registradores de propósitos gerais (GPR – General
Purpose Register).
 Registradores SFR são utilizados para controlar periféricos e
dispositivos internos, flags de estado do processador, entre outras
funções;
 Registradores GPR são utilizados para armazenamento temporário
de dados do usuário.
 Os registradores são muitas vezes
referenciados pela letra f (file register)
 A forma de implementação das instruções
limita o endereçamento a um máximo de
7 bits ou 128 registradores
 Para contornar tal limitação, criou-se o
esquema de paginação também na
memória RAM, de modo que existem
bancos de memória de 128 posições
 Alguns registradores SFR podem ser
encontrados em dois ou até mesmo nos
quatro bancos de memória RAM
(registradores espelhados), permitindo a
otimização de acesso de registradores
muito usados (STATUS, INTCON, etc.)
 Alguns dispositivos PIC permitem o
espelhamento de registradores GPR
 Alguns dispositivos permitem ainda
espelhamento completo dos registradores
GPR
REGISTRADOR W
Características:
 Usado em operações lógicas ou aritméticas;
 Não pode ser utilizado como fonte de dados
em operações de CPU (rotação de dados,
incremento, decremento, etc.);
 Não está mapeado na memória RAM;
 Sua utilização principal é como ponte entre
registradores f.
 NÃO É POSSÍVEL TROCAR DIRETAMENTE
INFORMAÇÕES ENTRE OS REGISTRADORES
 MOVF (Copia de f para w) e MOVWF (Copia de w
para f).
CONTADOR DE PROGRAMA - PC
 Responsável pelo controle da sequência de execução das
instruções
 O registrador PC aponta para a próxima instrução a ser executada
pela CPU
 PC é dividido em dois registradores básicos:
 PCL, responsável pelos 8 bits menos significativos;
 PCH, responsável pelos 5 bits mais significativos.
 Somente PCL é diretamente acessível, podendo ser lido ou escrito
pelo programa do usuário
 PCH pode ser alterado somente por intermédio do registrador
PCLATH
PILHA
 Estrutura de dados com apenas um ponto de acesso (o topo da pilha)
 A principal função da pilha é armazenar endereços de retorno para sub-
rotinas
 Alguns dispositivos permitem também o armazenamento de dados de
usuário
 Operações básicas:
 PUSH – a CPU armazena informação na pilha;
 POP - a CPU busca informação no topo da pilha.
 A pilha não está localizada na área de memória RAM, e sim em uma
região separada (inacessível diretamente ao usuário) dedicada
 Normalmente a pilha tem capacidade de 8 palavras do tamanho de PC.
 O endereço do topo não é acessível ao usuário.
 Utiliza-se uma estrutura de memória LIFO (Last IN – First Out) circular.
 O programador deve ter muito cuidado para não sobrescrever dados na
pilha.
 Não há instruções para manipulação direta da pilha (isso é feito
inderetamente através das instruções CALL, RETURN, RETLW e RETFIE).
O QUE É PROGRAMAÇÃO EMBARCADA?"
 Desenvolvimento de software embarcado é
uma modalidade de desenvolvimento na qual
se desenvolve os programas e aplicativos que
irão fazer parte de dispositivos eletrônicos que
possam funcionar independentes de estarem
ou não ligadas a um computador central.
"O QUE SÃO SISTEMAS ELETRÔNICOS
EMBARCADOS?"
 Sistema eletrônico embarcado ou sistema
eletrônico embutido é um sistema eletrônico
que tem como base um microprocessador que
possui um software completamente dedicado
ao dispositivo ou sistema que ele controla.
"EXEMPLOS DE SISTEMAS ELETRÔNICOS
EMBARCADOS:"
 Telefones celulares e centrais telefônicas;
• Equipamentos para a montagem de redes de computadores, como roteadores, hubs,
switches, firewalls e Access Point WiFi;
• Modems ADSL e de PLC (Power Line Communication);
• Controlador de injeção eletrônica de combustíveis para motores à explosão, a gasolina,
a óleo Diesel ou bio-Diesel ou sistemas multicombustível (Flex Fuel);
• Controladores da tração, acionadores de air bags e sistemas anti-bloqueio dos freios
(freios ABS) em automóveis, motocicletas, ônibus e caminhões;
• Equipamento de geolocalização (GPS) e de rastreamento de veículos e cargas;
• Calculadoras eletrônicas e agendas eletrônicas de bolso;
• Controladores eletrônicos de eletrodomésticos, como fornos microondas, máquinas de
lavar e também dos refrigeradores e aparelhos de ar condicionado mais modernos;
• Aparelhos de TV com controle remoto, CD players, DVD players e Blue-Ray Disc players;
• Equipamentos médicos;
• Alarmes programáveis para residências e comércio;
• Videogames;
• Receptores de TV por satélite e de TV por cabo coaxial;
• Televisores digitais com telas a LCD ou plasma e monitores de computador de LCD;
• Robôs industriais.
"Breve histórico dos Sistemas Eletrônicos
Embarcados:"
Nos primeiros anos dos computadores digitais na
década de 1940, os computadores eram por vezes
dedicados a uma única tarefa. Eram, entretanto,
muito grandes para serem considerados
embarcados. O conceito de controlador programável
foi desenvolvido algum tempo depois. O primeiro
sistema embarcado reconhecido mundialmente foi
o Apollo Guidance Computer
UM POUCO DE HISTORIA
O primeiro sistema eletrônico embarcado
que foi produzido em grande quantidade foi o
computador guia do míssil nuclear norte-
americano LGM-30 (Míssil Minuteman), lançado
em 1961, que possuía um disco rígido para a
memória principal. Quando a segunda versão do
míssil entrou em produção em 1966, o
computador guia foi substituído por um novo, sem
o disco rígido, que constituiu o primeiro uso em
grande volume de circuitos integrados.
Atualmente, com a disponibilidade de
microcontroladores a um custo menor que US$ 1,
tornou-se viável substituir componentes analógicos
caros como potenciômetros e capacitores por
eletrônica digital controlada através de pequenos
microcontroladores. Assim sendo, o público leigo
não sabe que sua vida é repleta de
microcontroladores, embutidos em dispositivos
corriqueiros.
Por exemplo, o acionamento do
relógio de um forno microondas é feito
por um pequeno microcontrolador, que
recebe, interpreta e aciona o
equipamento a partir dos comandos
do teclado. Também o aparelho de TV
moderno possui pelo menos um
microcontrolador, que recebe os
comandos do controle remoto e aciona
as várias funções.
Nos automóveis, além do sistema de injeção
eletrônica, encontram-se microcontroladores no
equipamento de som, nas centrais de alarme, no
sistema anti-bloqueio dos freios (freios ABS) e no
sistema de acionamento dos airbags.
Assim sendo, os veículos mais sofisticados
fazem uso de uma grande quantidade de
microcontroladores; uma fonte consultada afirma
que o automóvel BMW 850i possui mais de 100
microcontroladores em seu interior.
Um episódio curioso ocorreu em uma das
primeiras conferências em que se discutiu o
impacto dos microcontroladores na eletrônica,
realizado em 1975 no Hotel Hilton na cidade de
Nova Iorque (EUA). Um dos palestrantes, Danny
Hillis da empresa ThinkingMachines Corporation,
previu que o mercado mundial de
microcontroladores seria em poucos anos na
faixa de milhões de unidades produzidos a cada
ano.
Um dos participantes do auditório
manifestou-se contra esta ideia, afirmando que
nunca seriam necessários tanto
microcontroladores no mundo. Segundo este
participante não identificado, o futuro descrito
pelo palestrante seria como se tivéssemos “um
microcontrolador em cada quarto deste hotel”.
De fato, poucos anos depois outro evento
realizou-se no mesmo Hotel Hilton, que nesta
época acabara de instalar fechaduras
eletrônicas nos apartamentos, acionadas por
um cartão magnético entregue ao hóspede.
Ou seja, havia um microcontrolador em cada
quarto do hotel, embutido na fechadura das
portas dos apartamentos.
Está ai um gostinho de história
Introdução ao funcionamento das máquinas
digitais.
As máquinas digitais operam apenas em uma
única linguagem, a “linguagem binária”.
Comumente chamada de linguagem de
máquina, pois contém instruções (numéricas,
geralmente expressadas em hexadecimal) que
somente uma máquina ou uma família
especifica é capaz de entender.
Antes de tentarmos entender como funcionam
essas características. vejamos um diagrama de
blocos de uma máquina digital genérica.
PROGRAMANDO
MICROCONTROLADORES PIC
Na atualidade uma diversidade de microcontroladores
esta presente no mercado exigindo a efetiva busca por
atualização, para fins aplicativos operacionais e/ou
didáticos
Mais uma vez, este resumo do livro
S586p Silva, Renato A.
Programando microcontroladores PIC : Linguagem “C” /
Renato A. Silva.
– São Paulo : Ensino Profissional, 2006. 172p.
dedica-se ao aprendizado da tecnologia de automação
e robótica, utilizando microcontroladores para executar
tarefas específicas.
Programando Microcontroladores PIC
Mais uma vez, este resumo dedica-se
ao aprendizado da tecnologia de
automação e robótica, utilizando
microcontroladores para executar
tarefas específicas.
Finalmente, cabe ao leitor sempre, o
esforço para aprender a programar
microcontroladores e usa-los com
criatividade e imaginação para o
desenvolvimento de novos projetos
Aqui reforçamos o pedido do autor
no sentido de ter uma boa dose de
paciência no aprendizado e não
desistir frente às dificuldades, pois
com certeza, é uma caminhada de
enriquecimento de conhecimentos.
E para aqueles que felizmente
encontra-se em um degrau mais
elevado, espera-se que a obra venha
somar algo mais a sua carreira.
Introdução:
O desenvolvimento atual da tecnologia nas
áreas de automação e robótica deve-se
principalmente ao desenvolvimento dos
microcontroladores e processadores
digitais de sinais (DSP).
Os DSP possui memórias e estrutura que
lembra os microcomputadores atuais,
executando um software escrito para uma
determinada finalidade, sendo extremamente
robustos, baratos e confiáveis
Os microcontroladores PIC, reúne em
um único chip todos os circuitos
necessários para o desenvolvimento de
um sistema digital programável,
O que significa PIC?
É o nome que a Microchip adotou
para a sua família de
microcontroladores, sendo que a
sigla significa Controlador Integrado
de Periféricos.
O PIC é um circuito integrado
produzido pela Microchip Technology
Inc
Possui:
Uma serie de LINHAS de I/O para controlar
dispositivos externos
Uma serie de dispositivos auxiliares ao
funcionamento, ou seja, gerador de clock, bus,
O PIC esta disponível em uma ampla gama de
modelos.
Diferenciando-se pelo numero de linha de I/O e
pelo conteúdo do dispositivo.
Sigla PIC12Cxx dotado de 8 pinos, até chegar a
modelos maiores com sigla PIC17Cxx dotados de
40 pinos.
Uma descrição detalhada da tipologia do
PIC é disponível no site da Microchip
Para o nosso curso usaremos
um modelo de PIC o PIC16F877.
Este é dotado de 40 pinos.
Componente integrado que em um único
dispositivo contem todos os circuitos
necessários para realizar um completo sistema
digital programável.
Internamente dispõe de todos os
dispositivos típicos de um sistema micro-
processado, ou seja:
Uma CPU (Central Processor Unit ou seja
Unidade de Processamento Central)
Uma memória PROM
Uma memória RAM
Uma unidade ULA
Varias unidades de registradores
Programação do PIC
Como o PIC é um dispositivo
programável, o programa tem como objetivo
deixar instruções para que o mesmo possa
fazer atividades definidas pelo programador.
Para poder programar um PIC precisaremos
de um Editor (Mplab ou o PCWH), um
compilador (PCWH) e um programador
(PICStar Plus).
O que é o MpLab?
O MpLab é um ambiente integrado de
desenvolvimento (I.D.E.: Integrated
Development Environment).
Edição
O MpLab possui um editor de texto para
seus programas que possui diversas
ferramentas de auxílio como localizar,
substituir, recortar, copiar e colar.
Compilação
Compilar significa traduzir um programa
escrito em assembly (mneumônicos) para
linguagem de máquina (números).
Simulação
O MpLab possui ferramentas para simulação
do programa no próprio computador
Gravação
Para que o programa seja executado no
microcontrolador, o arquivo hexadecimal
deve ser gravado no PIC. O MpLab oferece
suporte aos gravadores fabricados pela
Microchip.
Emulação
A emulação é um recurso de
desenvolvimento que possibilita
testes em tempo real.
O PIC 16F877A
Microcontrolador de 40 pinos
33 portas configuráveis como entrada ou
saída.
• 15 interrupções disponíveis.
• Memória de programação
E²PROM FLASH, que permite a gravação
rápida
Memória de programa com 8K Word, com
capacidade de escrita e leitura pelo próprio
código interno;
• Memória E²PROM (não volátil) interna com
256 bytes;
• Memória RAM com 368 bytes;
• Três timers (2x8bits e 1x16 bits);
Comunicações seriais: SPI, I²C e
USART;Conversores analógicos de
10 bits (8x) e comparadores analógicos
(2x);
• Conversores analógicos de 10 bits (8x)
e comparadores analógicos (2x);
• Dois módulos CCP: Capture, Compare
e PWM;
História do transistor e do microchip
1.1 O Transistor
Antes de “PICarmos” um pouco, faz-se
necessário uma pequena visão do
desenvolvimento, iniciando no final dos anos 40,
com a construção do primeiro transistor nos
laboratórios da BELL em 23 de dezembro de
1947 por John Bardeen, Walter Houser Brattain,
e William Bradford Shockley, os quais ganharam
o prêmio Nobel de física 1956.
O transistor é a contração das palavras
transfer resistor, resistência de
transferência. É um dispositivo
eletrônico semicondutor, componente
chave em toda a eletrônica moderna
O transistor é um dispositivo
semicondutor de estado sólido,
ele foi assim chamado pela
propriedade de trocar a
resistência pela corrente elétrica
entre o emissor e o coletor.
.
É um sanduíche de diferentes
materiais semicondutores em
quantidade e disposição diferentes
intercalados. Pode-se obter assim
transistores PNP e NPN
Estas três partes são: Uma que
emite elétrons (emissor) uma
outra que recebe e os coleta
(coletor) e uma terceira (base) que
está intercalada entre as duas
primeiras, regula a quantidade
desses elétrons.
Tipos de transistor
Existem diversos tipos de
transistores, mais a classificação
mais acertada consiste em dividi-
los em transistores bipolares e
transistor de efeito de campo FET.
O FET, está dividida em JFET,
MOSFET, MISFET, etc. A diferença
básica entre os diversos tipos de
transistores está na forma em que
controla o fluxo de corrente.
O Nascimento do Microchip
Apenas treze anos após a invenção do
transistor, houve outro grande salto
tecnológico, a invenção do circuito
integrado ou microchip, por Jack S.
Kilby da Texas Instruments e Robert N.
Noyce da Fairchild Semicondutor.
PORTAS LÓGICAS, NÚMEROS BINÁRIOS E HEXADECIMAIS
As Portas Lógicas
As portas lógicas formam a base da
eletrônica digital iniciando um novo
compêndio na eletrônica e o seu estudo
é essencial ao entendimento e
aprendizado dos microcontroladores e
microprocessadores.
Ao agrupar circuitos ativos e passivos em
blocos, os cientistas criaram blocos que
executavam uma determinada função lógica.
Estas funções são AND (E), NAND (NÃO E),
OR (OU), XOR (OU EXCLUSIVO), XNOR (NÃO
EXCLUSIVO) e NO (NÃO).
Para trabalharmos com as portas
lógicas faz-se o uso de uma tabela
verdade, a qual cada função tem a sua.
nível alto em sua saída se as suas entradas
tiverem nível baixo.
As portas lógicas do tipo OR terão nível
alto em sua saída se uma “OU” outra
entrada tiver nível alto.
As portas lógicas tipo NOR, ao contrário da função OR,
somente terá nível alto ou 1 em sua saída se as
entradas forem zero. Observe a diferença básica entre
a função OR e a NOR.
As portas lógicas XOR, garantem o nível alto
em sua saída se uma entrada tiver em nível
alto e outra em nível baixo. Observe que
diferentemente da AND se tivermos 1 e 1 a
saída será 0.
As portas XNOR apresentam princípio
semelhante à função XNOR, apenas
com o detalhe de ter saídas invertidas.
As portas lógicas NOT, são as mais fácil de todas,
apresenta nível alto em sua saída se sua entrada for
nível baixo, invertendo assim os níveis lógicos.
Como já sabemos o nível alto
(normalmente 5 volts) é representados pôr
1 e o nível baixo (zero volts) pôr 0, assim a
combinação de 1 e 0 em grupos de 8,
formão um conjunto denominado “byte”.
Veremos agora as várias representações
de conjuntos numéricos e as suas formas
de conversão.
Números Decimais
Desde cedo aprendemos a raciocinar com números
decimais, onde o conjunto matemático contém 10
elementos [0..9], este sistema de numeração baseia-se em
potencia de 10 onde cada dígito corresponde ao número 10
(base) elevado a uma potência (expoente) de acordo com
sua posição.
Números Binários
Da mesma forma os números que os números
decimais, os números binários, são assim
chamados porque o seu conjunto contém
apenas 2 elementos [0,1]. Este conjunto
numérico representa os estados lógicos 0 e 1.
Ao organizarmos os bits 0 e 1 em grupos de 8
temos um byte de oito bits, em grupos de 16
temos um byte de 16 bits e assim
sucessivamente.
A escrita do número binário sempre é feita da
direita para a esquerda, dizemos que a parte da
esquerda é a mais significativa ou MSB (most
significative bit) e a parte da direita a menos
significativa ou LSB (low significative bit), dai
devemos elevar 2 ao expoente da casa
correspondente ao 1 do bit.
Observe na tabela de
expoentes da figura que o
primeiro expoente da
direita é 1, portanto 20 =
1 e o quarto expoente da
direita para a esquerda é o
3, portanto 2 𝟑 = 8 agora
fazemos a soma de todos
os resultados, neste caso
1 + 8 = 9.
Tudo é uma questão de
prática, ao praticar um
pouco você entenderá
melhor esta relação.
Você já deve ter
percebido, aqui, que
existe uma relação,
uma forma de
representar o 0 e o 5
volts dos circuitos
digitais em números,
desta forma,
podemos “conversar”
facilmente com as
máquinas digitais
utilizando números e
realizar operações
com eles.
Para convertemos
uma representação
decimal em binária,
fazemos sucessivas
divisões por 2 e
anotamos os
resultados. Depois
ordenamos de forma
lógica da direita para
a esquerda
Número Hexadecimal
A numeração hexadecimal que como as
anteriores tem seu conjunto matemático
representado por 16 números, facilita e
acelera a decodificação de dados,
economizando espaço em armazenamento de
dados. Neste conjunto temos 16 números
sendo [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F].
Utilizamos basicamente o conjunto de
números decimais (com10 elementos) e
lançamos mãos das letras (A,B,C,D,E,F)
A conversão Hexadecimal para decimal multiplica o valor do digito pela potência
de 16, fazendo a somatória. Ex: 8AB1 = 35.505
Para convertermos hexadecimal em
binário, a forma mais prática é termos
em mente a tabela de números de A
até F em binário e depois agrupar os
dígitos binários, veja 1A fica com 1
(primeiro dígito) e 1010 da tabela.
Outro exemplo 3C convertido dá
11(referente ao 3) e 1100(referente
ao C).
Numeração Octal
O sistema de numeração octal é
um conjunto matemático onde
temos oito elementos
[0,1,2,3,4,5,6,7] que apresenta
grande importância
principalmente pela facilidade de
conversão de binário para octal.
A metodologia de conversão é
semelhante as anteriores, para
conversão de numeração decimal para
numeração octal, faz-se divisões
sucessivas por 8 até encontrar o menor
quociente e posteriormente pegamos o
resto da divisão em ordem inversa.
Para conversão de octal para decimal,
multiplicamos o numeral por 8 elevado
a potencia correspondente.
Para conversão de octal para decimal,
multiplicamos o numeral por 8 elevado a
potencia correspondente.
uso da tabela octal onde temos o correspondente
binário de cada número octal, depois agrupamos os
bytes correspondentes ao octal da direita para a
esquerda.
DECIMAL HEXADECIMAL BINÁRIO OCTAL
0 0 0000 0000
1 1 0001 0001
2 2 0010 0002
3 3 0011 0003
4 4 0100 0004
5 5 0101 0005
6 6 0110 0006
7 7 0111 0007
8 8 1000 0010
9 9 1001 0011
10 A 1010 0012
11 B 1011 0013
12 C 1100 0014
13 D 1101 0015
14 E 1110 0016
15 F 1111 0017
Tabela de conversão entre diversas bases
As funções lógicas booleanas são
utilizadas quase que na totalidade das
aplicações com microcontroladores.
No capítulo anterior o leitor viu as
diversas funções (portas lógicas), veja
agora exemplo de aplicação destas
funções em numeração binário e
hexadecimal.
Neste capítulo, tivemos uma visão
geral da relação, conversão e
utilização dos diversos conjuntos
numéricos e sua indiscutível e
relevante importância para os
sistemas computacionais. No
próximo capítulo veremos os
diversos tipos de memórias e a suas
utilizações.
OU SE O VALOR VIER EM DECIMAL DEVERÁ
SER TRANSFORMADO EM BINÁRIO REALIZAR
A OPERAÇÃO COM AS PORTAS LOGICAS E
ESCREVER O RESULTADO EM HEXADECIMAL
TURMA 528 TURMA 529
Ao fazer a operação logica o resultado
deverá ser convertido em hexadecimal
Memórias
A memória é a capacidade de reter, recuperar,
armazenar e evocar informações disponíveis,
neste caso em forma binária de 0 e 1.
Transistores, portas lógicas e flip-flops
são utilizados na implementação de
memórias eletrônicas, sendo as
principais tecnologias definidas como
memórias ROM, PROM, EPROM,
EEPROM, FLASH e RAM.
MEMÓRIAS E MICROCONTROLADORES
 SENDO AS PRINCIPAIS
TECNOLOGIAS
DEFINIDAS COMO
MEMÓRIAS
 ROM,
 PROM
 EPROM
 EEPROM
 FLASH
 RAM. 525 turma 523
 Memórias ROM, memória somente de
leitura, é uma memória onde os dados
gravados não podem ser modificados
ou cancelados.
 Memórias PROM, memória somente
de leitura programável é aquela onde
os dados podem ser inseridos pôr
meio de gravadores específicos uma
única vez
 Memórias EPROM, memória somente de
leitura apagável, esta sem dúvida é bem
mais comum dos que a PROM, pode ser
apagada se exposta à luz ultravioleta
através de uma janelinha de quartzo
(transparente a radiações ultravioletas) e
programada novamente
 pôr meio de gravadores específicos, pôr
muitas vezes.
MEMÓRIAS E MICROCONTROLADORES
 Memórias EEPROM, memória somente de
leitura apagável eletricamente, pode ser
apagada eletricamente e regravadas milhares
de vezes, utilizando gravadores específicos,
não precisando expô-la a radiação
ultravioleta, sendo muitas vezes menores que
as EPROM, já que não tem a janelinha de
quartzo.
MEMÓRIAS E MICROCONTROLADORES
MEMÓRIAS E MICROCONTROLADORES
 Memória FLASH, parecida em tudo com as do
tipo EEPROM, podendo ser apaga e gravada
eletricamente e gravada novamente, podendo
ter até 100.000 ciclos de apagamentos
 Memória RAM, Constituída de transistores
ou flip-flop, podem armazenar dados
somente quando tiverem tensão, quando
não houver tensão estarão zeradas, sendo
voláteis, tem seu uso no processo auxiliar
ao processador armazenando informações
temporárias.
MEMÓRIAS E MICROCONTROLADORES
MEMÓRIA RAM
 Basicamente são constituídas de dois tipos:
estáticas e dinâmicas.
 As memórias RAM estáticas, muito utilizada no
final dos anos 80, tinham como principal
desvantagem o tamanho
MEMÓRIA RAM
 As memórias RAM dinâmicas, ao contrário
tinham alta densidade podendo armazenar por
chip 1 megabyte facilmente, porém estas
memórias necessitam de refresh constante e
conseqüentemente circuitos de apoio
MICROCONTROLADOR
Microcontrolador é um circuito integrado
programável que contém todos os
componentes de um computador como CPU
(unidade central de processamento), memória
para armazenar programas, memória de
trabalho, portas de entrada e saídas para
comunicar-se com o mundo exterior, sistema de
controle de tempo interno e externo,
conversores analógico digital, uart de
comunicação e outros.
MICROCONTROLADOR
Pode-se controlar qualquer coisa ou estar incluído
em unidades de controle para:
- máquinas pneumáticas,
- hidráulicas comandadas
- máquinas dispensadoras de produtos
- motores, temporizadores
- sistemas autônomos de controle, incêndio,
umidade temperatura
- telefonia, automóveis, medicina, ...etc
Estamos rodeados por máquinas que realizam algum
trabalho ajudado por sensores e atuadores que
recolhem as informações.
APRESENTANDO O PIC 16F62X
O microcontrolador PIC 16F62x, reúne em
uma pastilha todos os elementos de uma CPU
RISC de alta performance, sendo fabricado
em encapsulamento DIP (18 Pinos), SOIC (18
pinos) ou SSOP (20 pinos). Onde
encontramos:
CARACTERÍSTICAS DO PIC 16F62X
Conforme vemos no diagrama em blocos do PIC
16F627 e 16F628, podemos ressaltar as seguintes
características:
memória de programa EEPROM de 1Kb x 14 bits no
16F627.
memória de programa EEPROM de 2Kb x 14 bits no
16F628.
Memória de dados EEPROM de 64 bytes.
memória de dados RAM com 224 bytes dividida em 4
bancos.
Registrador de propósito específico (SFR) com 32
posições.
Registrador de propósito geral (GPR) com 224 posições.
ALU de 8 bits e registro de trabalho W que normalmente
recebe um operando que pode ser qualquer registrador,
porta de entrada/saída ou o próprio código de instrução.
Pilha (Stack) de 8 níveis.
Contador de programa (PC) de 13 bits (o que permite
endereçar até 8 KB de memória).
Recursos conectados al bus de dados:
PortA de 8 bits <RA0:RA7>
PortB de 8 bits <RB0:RB7>
Temporizadores / contadores TMR0, TMR1,
TMR2
Comparadores
Captura , Comparação e PWM
Voltagem de referencia
USART para comunicação serial
Memória EEPROM
SSOP (20 pinos). Onde encontramos:
- Set (conjunto) de instruções com 35 funções
- 200 nanosegundos por instrução @ 20 Mhz.
- Clock de até 20 Mhz.
- 1024 bytes de memória de programa (16F627)
- 2048 bytes de memória de programa (16F628)
- Stack com 8 níveis
-
16 registradores especiais de funções
- Capacidade de interrupção
- 16 portas de entrada / saídas independente
- Alta corrente de saída, suficiente para acender um LED
- Comparador analógico.
- Timer0 de 8 bits com prescaler, postscaler
- Timer1 de 16 bits com possibilidade de uso de cristal
externo
- Timer2 de 8 bits com registro de período, prescaler e
postscaler
- Captura com 16 bits e resolução máxima
de 12,5 nS.
- Comparação com 16 bits e resolução
máxima de 200 nS.
- PWM com resolução máxima de 10 bits.
- USART para comunicação serial
- 16 bytes de memória RAM comum
- Power On Reset (POR)
- Power Up Timer (PWRT)
- Oscillator start-up (OST)
- Brow-out Detect (BOD)
- Watchdog Timer (WDT)
- MCLR multiplexado
- Resistor pull-up programáveis no PORTB
- Proteção de código programável
- Programação em baixa voltagem
- Power save SLEEP
- Oscilador
- Resistor externo – ER
- Resistor interno - INTRC
- Clock externo – EC
- Cristal alta velocidade - XT
- Cristal baixa velocidade – HS
- Cristal – LP
- Programação “in-circuit”
- Baixo consumo
- < 2.0 mA 5.0V, 4 Mhz.
- 15 uA 3.0V, 32 Khz.
- < 1 uA em repouso 3.0V.
- Quatro localizações para ID de usuário
Alimentação
Normalmente o PIC é alimentado com uma tensão 5,0 volts
provenientes de uma fonte DC com regulação positiva, um
regulador 7805 ou 78L05 podem ser utilizados para tal função,
lembrando aqui que o 78L05 tem capacidade de suprir até
100ma, não devendo exceder 80% deste consumo pois
aumenta muito o aquecimento do regulador.
O consumo de corrente do microcontrolador é mínimo,
consumindo menos de 2,0 mA com 5 volts, trabalhando a 4Mhz
ou 15,0 micro amp com 3 volts, trabalhando
Programando Microcontroladores PIC
a 32 Khz. Quando em modo StandBy,
consome menos de 1,0 micro amper.
com 3.0V, porém devemos ver o consumos
dos outros componentes do circuito.
- PIC 16F62x - 3.0V a 5.5V
- PIC 16LF62x - 2.0V a 5.5V
DEFINIÇÃO DA CPU
 CISC: (Complex Instruction Set Computer)
 RISC: (Reduced Instruction Set Computer)
 SISC.(Specific Instruction Set Computer)
CISC: (Complex Instruction Set Computer)
processadores com conjunto de
instruções complexas, dispõe de um
conjunto com elevado número de
instruções algumas sofisticadas e
potentes. Em contrapartida requerem
muitos ciclos de máquina para executar
as instruções complexas.
RISC: (Reduced Instruction Set Computer)
processadores com conjunto de
instruções reduzidos, em nosso caso são
35 instruções simples que executam em
1 ou 2 ciclos de máquina com estrutura
pipeline onde todas as instruções
executam na mesma velocidade.
ARQUITETURA INTERNA
 Entende-se por arquitetura interna a forma
como o circuito é construído, representada por
blocos, isto é como suas partes internas se
interligam, podemos definir os PICs como
sendo “Arquitetura Harvard”, onde a CPU é
interligada à memória de dados (RAM) e a
memória de programa (EPROM) por um
barramento específico.
Tradicionalmente os microprocessadores têm
como base à estrutura de Von Neumann, que se
caracteriza por dispor de uma única memória
principal em que se armazenam dados e
instruções. O acesso à memória é feito através de
um sistema de uma única via (bus de dados,
instruções e de controle).
A arquitetura interna do PIC é do modelo Harvard,
SISC.(Specific Instruction Set Computer)
processadores com conjunto de instruções
específicas
ORGANIZAÇÃO DA MEMÓRIA
 O PIC contém um registrador denominado PC
(Program Counter) que é implementado com
13 bits, capaz de endereçar até 8K de
programa, mas que somente 1k é
implementado fisicamente no 16F627 (0000h
à 03FF) e 2K são implementados no 16F628
(0000H à 07FFh).
 Este registrador está ligado diretamente a
“Pilha” (stack) armazena o endereço da
instrução que vai ser executada.
 Ao incrementar ou alterar o conteúdo do PC, o
microcontrolador tem um mapa seguro de
onde esta e para onde ir.
ORGANIZAÇÃO DA MEMÓRIA
A PILHA OU STACK
A pilha é uma memória independente da memória
de programa e da memória de dados, com estrutura
LIFO (Last In First Out) último dado a entrar
será o primeiro dado a sair com oito níveis de
profundidade ou armazenamento com 13 bits cada
um.
Sua função é guardar o valor do PC quando ocorre
um salto do programa principal para o endereço de
um subprograma a ser executado,
fazendo assim com que o microcontrolador tenha
total controle as chamadas de rotinas.,
A pilha.
Seu funcionamento é como um buffer
circular onde o endereço da última
chamada é o primeiro a retornar em uma
chamada RETUR, RETLW ou RETIE
ORGANIZAÇÃO DA MEMÓRIA DE DADOS
 Os registros que afetam a CPU são: STATUS,
OPTION, INTCON, PIE1, PIR e PCON. Veremos
agora descrição destes e outros registros.
REGISTRADORES DE FUNÇÕES ESPECIAIS
 Registro de STATUS endereços 03h, 83h,103h
e 183h, contém o estado da Unidade Lógica
Aritmética ALU (C, DC, Z), estado de RESET (TO,
PD) e os bits para seleção do banco de
memória (IRP, RP1, RP0).
ORGANIZAÇÃO DA MEMÓRIA DE DADOS
 A memória de dados divide-se em quatro bancos,
contendo os registros de propósitos gerais (GPR),
registros de funções especiais (FSR). A seleção do
banco de memória é feita através dos bits RP1 (STATUS
<6>) e RP0 (STATUS <5>) conforme a seguinte tabela:
 RP1, RP0 BancoEndereço
 0 0 0 000h - 07Fh
 0 1 1 080h - 0FFh
 1 0 2 100h - 17Fh
 1 1 3 180h - 1FFh
REGISTRO OPTION OU OPTION_REG ENDEREÇO
81H E 181H
 É um registro de leitura e escrita que contém
vários bits de controle para configurar o
funcionamento do prescaler ao timer0 e ao
WDT, interrupção externa ao timer0 e os
resistores de pull-up do PORTB.
REGISTRO INTCON - ENDEREÇO 0BH, 8BH, L0BH E 18BH
É UM REGISTRO DE LEITURA E ESCRITA QUE CONTÉM OS BITS DE HABILITAÇÃO DAS VÁRIAS
INTERRUPÇÕES (EXCETO DO COMPARADOR), INCLUSIVE POR MUDANÇA DE ESTADO NO
PORTB.
REGISTRO PIE1 - ENDEREÇO 8CH.
 Este registro contém os bits individuais de
interrupções dos periféricos, sendo que para
seu funcionamento o bit PEIE (INTCON <6>)
deve estar habilitado.
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
EEIE CMIE RCIE TXIE - CCP1IE TMR2IE
TMR1IE
bit descrição
EEIE flag de interrupção de escrita na EEPROM completada
1 = habilita interrupção de término de escrita
0 = desabilita interrupção de término de escrita
CMIE interrupção do comparador habilitada
1 = habilita interrupção do comparador
0 = desabilita interrupção do comparador
RCIE interrupção de recebimento de caractere no USART
1 = habilita interrupção de recebimento do USART
0 = desabilita interrupção de recebimento do USART
TXIE interrupção de envio de caractere no buffer do USART
1 = habilita a interrupção de transmissão do USART
0 = desabilita a interrupção de transmissão do USART
CCP1IE interrupção do CCP1 para captura, comparação e PWM
1 = interrupção habilitada
0 = interrupção desabilitada
TMR2IE interrupção
1 = habilita interrupção
0 = desabilita interrupção
TMR1IE flag de overflow
1 = habilita interrupção para estouro de TMR1
0 = desabilita interrupção de estouro de TMR1
LINGUAGEM “C”
 A linguagem “C” nasceu na Bell Labs, divisão
da AT&T, a famosa companhia americana de
telecomunicações desenvolveu em seus
laboratórios o sistema operacional Unix,
posteriormente desenvolveu também a
linguagem “C” em 1969 por Dennis Ritchie,
que também é um dos principais criadores do
Unix, à partir da linguagem “B” de Ken
Thompson.
LINGUAGEM “C”
 Seu propósito era gerar uma linguagem de alto
nível, em oposição à linguagem de máquina
(Assembly), conhecida como de baixo nível. O
“C” é uma linguagem para uso geral, ou seja,
desenvolvimento dos mais diversos tipos de
aplicação
LINGUAGENS DE MAQUINA.
Nós vimos como as máquinas digitais entendem
o assembly, agora vamos subir mais degrau e
entender como a mesma máquina pode entender
uma linguagem estruturada, como o C, Pascal ou
Basic, Mas antes precisamos entender as
diferenças entre essas linguagens.
O assembly é um exemplo de linguagem
puramente imperativa, ou seja, possui ações
(comandos), que alteram estados (espaços de
memória), essa linguagem facilita muito a
programação, pela sua semelhança com a
linguagem humana, ações e conseqüências.
Mas o assembly não é uma linguagem
estruturada, o programador possui liberdade para
“montar” seus blocos de programa cada um de
uma forma diferente, podemos criar saltos para
qualquer parte da memória de maquina. Essa
característica que nos permite flexibilidade
também atrapalha a analise de códigos, e
cooperação entre diversos programadores.
LINGUAGEM ESTRUTURADA
 Já no caso da linguagem estrutura podemos
reduzir as inúmeras formas de pensar,
 Em três estruturas básicas:
 Estruturas de seqüência
 Estrutura de decisão
 Estrutura de repetição
LINGUAGEM ESTRUTURADA
 Estruturas de seqüência: As tarefas são executadas
seqüencialmente, uma após a outra. Segundo o
raciocínio lógico do programador.

 · Estrutura de decisão: O resultado de um teste lógico
define se um trecho do código deve ser executado.
Existem estruturas para uma única decisão, ou
múltiplas decisões.

 Estrutura de repetição: Determina se um trecho de
código será repetido até que certa condição lógica seja
satisfeita
Essa forma de pensar nos aproxima mais
ainda da linguagem humana, pois uma única
linha de código estruturado pode conter mais de
uma ordem explicita. Por exemplo: “Faça
enquanto isso for verdadeiro!”. Este é um típico
comando de linguagem estruturada. Temos uma
ordem “Faça”, um laço de repetição “Enquanto” e
uma comparação lógica “enquanto for verdadeiro
EXEMPLO
Essa facilidade também nos traz um
empecilho. A maquina digital não consegue
seguir ordem complexas. Portanto temos um
“gap”, um espaço que precisa ser preenchido
conectando a linguagem estruturada. Também
chamada de linguagem de alto nível, até a
linguagem de máquina, também chamada de
linguagem de baixo nível. É neste momento que
entra em cena os compiladores.
OBSERVAÇÃO.
Diferente dos montadores que apenas
trocam um mnemônico por um equivalente código
hexadecimal, o compilador precisa traduzir uma
linguagem de alto nível para outra linguagem
equivalente em seu conceito e algoritmo, mas
não exatamente em seus comandos
Logo a compilação é um processo mais
complexo, e suas tarefas são bem divididas e
definidas.
Uma vez que o código em alto nível está pronto
e é submetido a um compilador este realiza
uma analise, neste primeiro processo o
compilador interpreta o código e verifica itens
básicos de sua linguagem e estrutura, a analise
pode ser subdividida em três partes.
Analise Léxica:
Processo também conhecido como
“Scanner”, pois verifica se algum caractere do
algoritmo está fora dos caracteres permitidos da
linguagem. Sempre que for encontrado
caracteres válidos o analisador procura trocar
esse caractere por um símbolo. Este símbolo
pode ser interpretado mais facilmente no
restante do processo. Neste ponto todos os
caracteres inúteis de um programa são
retirados, tais como comentários, espaços em
branco, linhas em branco etc.
Analise Sintática: A analise sintática
(“parsing” em inglês), recebe os caracteres recém
filtrados pelo analisador léxico e cria uma
estrutura de dados. Está é na verdade uma
grande tabela, capaz de organizar os dados e
futuramente realizar comparações e otimizações
do mesmo. Estes dados estão separados pelos
símbolos criados no analisador léxico.
Analise Semântica:
As outras etapas de analise, focam os
caracteres ou conjuntos de caracteres de forma
quase que individual, sem olhar o “sentido” das
ações. Erros como comparações entre uma
numero e uma string não são observados nas
analises anteriores.
O analisador Semântico garante a coerência do
programa
INTRODUÇÃO DA LINGUAGEM “C”
 Programa: forma de se comunicar com um
computador Linguagem máquina
 Programas são ‘traduzidos’ através de outros
programas “especiais”:
 compiladores e interpretadores.
 Processo:
 Fonte → objeto → executável
 ESTRUTURA BÁSICA DE UM PROGRAMA C
 Consiste em uma coleção de funções
 Forma geral
LNGUAGEM “C”
 O pré-processador do compilador, reconhece
os comandos e todos os símbolos definidos
pelo comando #define, sendo pouco
inteligentes fazem basicamente substituição.
LINGUAGEM “C”
 Tem como características
 a modularidade,
 Portabilidade
 recursos de “baixo” e “alto” nível,
 geração de código eficiente
 confiabilidade
 regularidade,
 além de conter um número pequeno de comandos
VERIFICADOR LÉXICO
 O verificador léxico ou “reconhecedor de
palavras” passam pelo programa trocando
palavras-chaves e símbolos orientados para
humanos por valores numéricos mais
compactos orientados para máquina.
Na verdade “reconhecedor de palavras” é
uma grande tabela de pesquisa onde a palavra-
chave é trocada por um código ou token, a
grande maioria das mensagens de erro
reportadas acontecem neste estágio.
 Depois vem o analisador o grande perito em
“C”. Ele sabe a sintaxe e quase toda a
semântica da linguagem. Este possui a
responsabilidade principal pela análise
contextual, um erro se seja reconhecido
apenas depois de dois ou três comandos terem
sido analisados será descoberto
COMPILADORES
 Após utilizar diversos compiladores existentes
atualmente, optei pelo uso do CCS por apresentar
uma gama de vantagens sobre os demais. O
compilador CCS pode ser adquirido diretamente
no site do fabricante no endereço
www.ccsinfo.com onde se encontra também vários
exemplos de utilização e outras informações
referentes ao compilador.
 A instalação do compilador é bem simples, basta
executar o aplicativo e seguir as instruções das
telas.
EX DE PROGRAMA EM “C”
#include <16F628A.h>
void main() {
while( true )
{ //repetição infinita
output_high( PIN_B0 ); //coloca o bit led em 1
delay_ms( 1000 ); //aguarda 1 segundo
output_low( PIN_B0 ); //coloca o bit led em 0
delay_ms( 1000 ); //aguarda um segundo
};
MODELO BÁSICO DE UM PROGRAMA EM C
 Quatro elementos estão presentes em um
programa C:
 Comentários
 Diretivas de compilação
 Definições de dados
 Blocos com instruções e funções
COMENTARIOS
 Os comentários no programa fonte não têm
função nenhuma para o compilador e serve
apenas para aumentar a legibilidade e clareza
do programa, podem ser inseridos com “//”
que valem de onde começam até o fim da linha
ou com “/*” e “*/”, sendo considerado
comentário tudo entre “/*” e “*/”.
IDENTIFICADORES
 Um identificador é um símbolo definido pelo
usuário que pode ser um label, uma constante,
um tipo, uma variável, um nome de programa
ou subprograma (procedimento ou função).
Normalmente devem começar com um
caractere alfabético e não podem conter
espaços em branco, podendo ter no máximo
32 caracteres, não havendo distinção entre
maiúsculas e minúsculas.
ENDENTAÇÃO
 A endentação também não tem nenhuma
função para o compilador e serve para tornar a
listagem do programa mais claro dando
hierarquia e estrutura ao programa.
CONSTANTES
 Constantes são valores declarados no início do
programa e que não se alteram na execução
do programa. Podem ser expressas em
qualquer base,
 Para criar uma constante existe o
comando #define que, em geral é colocado no
início do programa-fonte.
EXEMPLO
 #define LARGURA_MAXIMA 50 // Não se coloca ponto-e-vírgula
após o valor
 #define NRO_DE_DIAS_DA_SEMANA 7
 #define NRO_DE_HORAS_DO_DIA 24
 #define VALOR_DE_PI 3.1415
 void main ()
 {
 int TotalDeHoras;

 TotalDeHoras = 10 * NRO_DE_DIAS_DA_SEMANA *
NRO_DE_HORAS_DO_DIA;
 ......
 }
VARIÁVEIS
 Uma declaração de variável consiste do nome
do tipo de dado seguido do nome da variável.
Todas as variáveis devem ser declaradas antes
de serem usadas. As variáveis devem ser
declaradas no início de cada função,
procedimento ou início do programa.
DECLARAÇÃO DE VARIAVEIS
 Declaração de Variáveis
 Todas as variáveis tem que ser declaradas antes de serem usadas;
 Não há uma inicialização implícita na declaração
 // Exemplo de programa em C

 #include <stdio.h> // Arquivo de cabeçalho (header)
 void main()
 {
 int contador; // declarações simples
 float PrecoDoQuilo;
 double TaxaDeCambio;
 char LetraDigitada;
 int IdadeManoel, IdadeJoao, IdadeMaria; // Pode colocar mais de uma variável na
 // na mesma linha
Em C, como na maioria das linguagens, os dados são divididos em tipos: inteiro, real,
caracter, etc. Esta divisão se deve basicamente ao número de bytes reservados para
cada dado. Cada tipo de dado possui um intervalo de valores permitidos.
•Todas as variáveis em C tem um tipo;
•Cada tipo define os valores que a variável pode armazenar;
•Cada tipo ocupa certa quantidade de memória.
TIPOS DE DADOS
 Tipos básicos:
 Tipo Tamanho Intervalo Uso
 char 1 byte -128 a 127 número e caracter ASCII
 int 2 bytes -32768 a 32767 contador, controle de laço
 float 4 bytes 3.4e-38 a 3.4e38 real (precisão de 7 dígitos)
 double 8 bytes 1.7e-308 a 1.7e308 científico (precisão 15 dígitos)
 (alfanuméricasLetras ) Aa até Zz
 ; Dígitos (numéricos) - 0 até 9;
 Operadores;
 Tipos de dados.
OPERADORES E SÍMBOLOS ESPECIAIS
TIPOS DE DADOS
 Um Tipo de Dado define o conjunto de valores
que uma variável pode assumir e as operações
que podem ser feitas sobre ela.
 Toda variável em um programa deve ser
associada a um tipo de dado, conforme a
tabela abaixo.
 O conceito do “C” é que existe uma função
principal chamada “main” que controla o bloco
principal do programa, logicamente ficaria assim:
 #include <16F628A.h>
 void main()
 {
 ...declarações
 };
A chave ({) abre uma estrutura de bloco
de declarações, onde temos comandos,
chamadas de funções ou blocos em
assembler. Para cada chave aberta
deve-se ter outra chave (}), indicando o
fechamento do bloco de declarações.
void main( )
{
while( true )
{ //repetição infinita
output_high( PIN_B0 ); //coloca o bit led em
1
delay_ms( 1000 ); //aguarda 1 segundo
output_low( PIN_B0 ); //coloca o bit led em 0
delay_ms( 1000 ); //aguarda um segundo
};
};
Normalmente o compilador dá uma ajudinha
na hora de escrever o código fonte alertando
para essas particularidades. O modo de
escrever é livre, você pode utilizar letras
maiúsculas, minúsculas ou combinadas,
somente não pode haver espaço entre o label
ou a variável.
assim a seguinte declaração de
variável “Int variável 1 ;” apresenta
dois erros graves. Um deles é o uso de
acentuação no “á” o outro é a
presença de espaço. O correto para
esta declaração seria o seguinte “int
variavel_1;”.
Os caracteres acentuados fazem
uso do oitavo bit do byte de caracteres o
que não é suportado pelos compiladores
uma vez que na língua inglesa não existe
acentuação fazendo uso, portanto dos
caracteres de até 7 bits ou até o
caractere 127.
No apêndice encontra-se uma tabela
de caracteres ASCII com os caracteres
básicos de 0 a 127 e uma tabela de
caracteres estendido de 127 a 255.
Os comandos são:
IF, WHILE, DO, FOR, SWITCH, CASE,
RETURN, GOTO, LABEL, BREAK,
CONTINUE.
Este comando de estrutura
condicional pode estar sozinho ou
em conjunto com “else” ou “else
if”, na construção de blocos de
estruturas condicionais muito
eficazes. Sempre recebe um ou
mais parâmetros, pois sempre
comparamos alguma coisa com al-
guma coisa, e conforme o
resultado da comparação faz algo
COMANDO “IF”
 Este comando de estrutura condicional pode
estar sozinho ou em conjunto com “else” ou
“else if”, na construção de blocos de estruturas
condicionais muito eficazes. Sempre recebe
um ou mais parâmetros, pois sempre
comparamos alguma coisa com alguma coisa,
e conforme o resultado da comparação faz
algo diferente. Vejamos:
COMANDO “IF”
 if( modo == 0x01 ){ //variável modo = 1?
 buffer = 0x03 & 0xFF; //sim, então buffer = 2
AND 256
 }
 else{ //senão
 buffer = 0x03 ^ 0xFF; //buffer = 2 XOR 256
 };
COMANDO “IF”
 No exemplo acima vemos o operador de
igualdade/comparação (==) que indica se o
operando da direita é igual ao da esquerda, e logo
abaixo tempo o operando de atribuição (=), onde o
operando da direita atribui-se ao da esquerda.
 Neste caso, houve a necessidade de se verificar a
outra fase da condição, e atribuir-lhe valor.
 No caso acima se fez uma comparação e tomou-
se uma decisão, se após a decisão houvesse mais
de uma declaração, abriríamos um bloco de
controle assim:
COMANDO “IF”
 if( TEMP == 0 ){
 output_high (PIN_B0);
 }
 else if( TEMP == 1 ) {
 output_high( PIN_B1 ) ;
 }
 else if( TEMP == 2 ) {
 output_high( PIN_B2 ) ;
 }
 else{
 output_low( PIN_B0 ) ;
 output_low( PIN_B1 ) ;
 output_low( PIN_B2 ) ;
 };
- COMANDO “WHILE”
 Este comando pode ser utilizado sozinho ou
em conjunto com o comando “DO” construindo
blocos de controle extremamente eficazes.
“while” ou “enquanto” sempre avalia uma
expressão enquanto ela é verdadeira podendo
ou não executar uma declaração em conjunto.
while ( input( PIN_B0 ) ); //aguarda o
pino Rb0 descer
output_high( PIN_B1 ); //coloca o pino
Rb1 em 1
while ( ! input( PIN_B0 ) ); //aguarda o
pino Rb0 subir
output_low( PIN_B1 ); //coloca Rb1
em 0
Depois de compilado, foi gerado o
seguinte código:
00BF: BTFSC PORTB.0
00C0: GOTO 0BF
00C1: BSF PORTB.1
00C2: BTFSS PORTB.0
00C3: GOTO 0C2
00C4: BCF PORTB.1
Comentário do código
Neste caso, o comando While irá
aguardar até que o pino Rb0 mude de 1 para
0, veja, que o compilador colocou na linha
00BF a instrução para testar a flag Rb0 e
saltar se estiver limpa, caso contrário na linha
00CD têm um salto para a linha 00BF,
criando um loop até termos Rb0 igual a 0.
Quando a condição a ser avaliada não muda
de estado temos um loop infinito como
normalmente acontece dentro da função
“main”. No exemplo abaixo criamos nosso
pisca_led.
void main(){ //função principal
while( TRUE ){ //execute sempre, loop infinito
output_high( PIN_B1 ); //pino B1 = 1, led aceso
delay_ms( 1000 ); //aguarda 1 segundo
output_low( PIN_B1 ); //pino B1 = 0, led apagado
}; //fecha o bloco while
}; //fecha a função principal
COMANDO “DO”
 Este comando “execute” sempre é executado
em conjunto com o comando “while” formando
um bloco “execute... enquanto (verdadeiro)”.
Com a diferença que a condição é avaliada
posteriormente a execução, ou seja, primeiro
executa o bloco depois avalia se continua
executando, ao contrário do “while”
STRINGS
 Uma String é uma seqüência de caracteres
entre aspas duplas:
 "exemplo de uma string em C".
A FUNÇÃO PRINTF
 A função printf exibe um ou mais dados na
tela. Para tanto ele deve receber pelo menos
dois parâmetros, separados por vírgula:
 Um string de formato que define, através de
caracteres especiais, os tipos dos dados a
serem impressos e suas posições na linha de
impressão;
 Um dado a ser impresso. Este dado pode ser
qualquer um dos dados visto anteriormente
POR EXEMPLO:
 printf("%s","teste");
 "%s" : é a string de formato
"teste" : é o dado a ser impresso.
 A string de formato define quais os tipos dos
dados a serem impressos. O símbolo %s será
substituído pelo dado que vem após a vírgula.
Os dados definem quais os valores a serem
impressos.
STRING
 Se for necessário, uma string de formato pode
definir que mais de um dado será impresso.
Para tanto, dentro da string de formato deve
haver mais de um %, um para cada dado a ser
impresso.
Neste caso, os dados devem vir após a string
de formato separada por vírgulas.
Por exemplo:
printf("%s %s","teste1", "outra string");
Isto irá imprimir o string teste1 deixar 1 espaço
em branco e imprimir ao lado o string outra
string, assim :
teste1 outra string
EXEMPLO
#include <stdio.h> // Necessário para usar a
função printf
// A função printf exibe um ou mais
dados na tela
void main ()
{
printf("%s","Isto é uma string ....n"); // note o 'n' no
final da string;
printf("%s","Outra string ....");
printf("%s","Terceira stringn");
//Depois de Executar o programa, tecle ALT-F5 para ver
o resultado na tela
}
IMPRESSÃO DE INTEIROS COM "PRINTF"
 Para imprimir um inteiro com printf usa-se o
símbolo %d
IMPRESSÃO DE INTEIROS COM "PRINTF"
 // Impressão de Variáveis Inteiras
 #include <stdio.h>
 #include <conio.h> // necessário para as funções clrscr e getch
 void main ()
 {
 int Contador;
 int NroDeFilhos;

 clrscr(); // Limpa a tela

 Contador = 10;
 printf("Valor da Variável: %dn", Contador); // No momento da execução sinal %d vai
 // ser substituído pelo valor da
 // variável Contador
 NroDeFilhos = 3;
 printf("Maria tem %d filhos", NroDeFilhos); // o inteiro pode ficar no meio da string
 getch(); // espera que o usuário pressione uma tecla
 }
IMPRESSÃO DE EXPRESSÕES ARITMÉTICAS
 // Impressão de Expressões aritméticas
 #include <stdio.h>
 #include <conio.h> // necessário para as funções clrscr e getch
 void main ()
 {
 int NroDeAndares;
 int AlturaPorAndar;

 clrscr(); // Limpa a tela
 NroDeAndares = 7;
 AlturaPorAndar = 3;

 printf("Altura Total do Prédio: %d metros", NroDeAndares*AlturaPorAndar);
 // No momento da execução sinal %d vai ser substituído
 // pelo valor da multiplicação
 getch(); // espera que o usuário pressione uma tecla
 }
IMPRESSÃO DE NÚMEROS REAIS
 // Impressão de números reais
 #include <stdio.h>
 #include <conio.h> // necessário para as funções clrscr e getch
 void main ()
 {
 float NotaDaP1, NotaDaP2;
 float Media;


 clrscr(); // Limpa a tela
 NotaDaP1 = 6.6; // Atribuição do Valores das médias
 NotaDaP2 = 8.2;

 Media = (NotaDaP1 + NotaDaP2) / 2.0;

 printf("Média Final : %f", Media);
 // No momento da execução sinal %f vai ser substituído
 // pelo valor da variável Media com SEIS casas decimais
 // Média Final : 7.400000
 getch(); // espera que o usuário pressione uma tecla
 }
FORMATO DE IMPRESSÃO DOS NÚMEROS REAIS
 No exemplo acima o resultado da média (7.4)
foi impresso com 6 casas decimais
(7.400000).
 Isto sempre acontece quando se manda
imprimir um float da forma como foi feito no
exemplo acima. Isto acontece, pois o padrão da
função printf é completar o número com zeros
à direita, até que fique com seis casas
decimais.
 Para formatar de maneira diferente usar-se,
junto com o %f uma especificação de quantas
casas decimais se deseja que o número tenha.
Especifica-se também o número total de
caracteres do número a ser impresso.
Por exemplo: %6.3f especifica que
se quer imprimir
um float com 3 casas decimais e com
um tamanho total de 6 caracteres no
total.
 #include <stdio.h>
 #include <conio.h>
 void main()
 {
 float NotaDaP1, NotaDaP2;
 float Media;

 clrscr(); // Limpa a tela
 NotaDaP1 = 6.6; // Atribuição do Valores das médias
 NotaDaP2 = 8.2;

 Media = (NotaDaP1 + NotaDaP2) / 2.0;
 printf("Média Final : %6.3f", Media);
 // No momento da execução sinal %6.3f vai ser substituído
 // pelo valor da variável Media
 // Média Final : 7.400
 getch(); // espera que o usuário pressione uma tecla

 }

Regras para impressão de um número real
o número de casas decimais é sempre
respeitado. Se for preciso, zeros serão
acrescentados à direita do número.
o tamanho total significa o número de
caracteres do número incluindo o ponto
decimal e um eventual sinal de menos (-),
se for o caso;
Se a soma do número de caracteres da parte
inteira, mais o ponto decimal, mais a parte
fracionária, mais um eventual sinal de
menos ainda for menor do que o tamanho total
especificado no formato, então, espaços em
branco serão acrescentados à esquerda da parte
real do número.
Se a soma do número de caracteres
da parte inteira, mais o ponto
decimal, mais a parte fracionária,
mais um eventual sinal de menos for
maior do que o tamanho total
especificado no formato, então,
apenas o número de casas decimais é
respeitado.
EXEMPLO
 #include <stdio.h>
 #include <conio.h>
 void main()
 {
 float Numero;
 Numero = -2.5;
 clrscr();
 printf("1234567890n");
 printf("%7fn", Numero);
 printf("%7.0fn", Numero);
 printf("%7.3fn", Numero);
 printf("%8.3fn", Numero);
 printf("%9.3fn", Numero);
 printf("n");
 printf("%8.4fn", Numero);
 printf("%8.1fn", Numero);
 printf("%6.12fn", Numero);

 getch();
 }
 // Resultados
 1234567890
 -2.500000
 -2
 -2.500
 -2.500
 -2.500

 -2.5000
 -2.5
 -2.500000000000
VARIÁVEIS DO TIPO STRING
 Uma variável capaz de
armazenar uma string deve
ser declarada informando-
se qual o número máximo
de caracteres que ela
poderá armazenar
 Exemplo:
 char Nome[30]; // isto
define que a variável
poderá armazenar uma
string de até 29
caracteres.
ATRIBUIÇÃO COM STRINGS
 Atribuição com strings
 As atribuições de valores a strings devem ser
feitas através da função strcpy
// EXEMPLO COM STRINGS
 #include <stdio.h>
 #include <conio.h>
 #include <string.h> // arquivo de cabeçalho para trabalhar com strings

 void main()
 {
 char Nome[30]; // declara uma string que poderá armazenar até 29 caracteres !!
 clsrscr();
 strcpy(Nome, "Jose da Silva"); // atribui "Jose da Silva" para a variável Nome
 printf("O funcionário %s foi transferido", Nome); // no lugar de %s aparecerá o
 // conteúdo da variável Nome
getch();
 }

Weitere ähnliche Inhalte

Was ist angesagt?

Ações de Controle Básica e Controladores Automáticos Industriais
Ações de Controle Básica e Controladores Automáticos IndustriaisAções de Controle Básica e Controladores Automáticos Industriais
Ações de Controle Básica e Controladores Automáticos IndustriaisCleber Fonseca
 
Instalaã§ãµes elã©tricas simbologia (diagramas unifilares)
Instalaã§ãµes elã©tricas   simbologia (diagramas unifilares)Instalaã§ãµes elã©tricas   simbologia (diagramas unifilares)
Instalaã§ãµes elã©tricas simbologia (diagramas unifilares)Aldair Edmilson Mendes
 
FIBRA ÓPTICA INFRAESTRUTURAS
FIBRA ÓPTICA INFRAESTRUTURAS  FIBRA ÓPTICA INFRAESTRUTURAS
FIBRA ÓPTICA INFRAESTRUTURAS WELLINGTON MARTINS
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoFabio Souza
 
Arquitetura e Manutenção de Computadores
Arquitetura e Manutenção de ComputadoresArquitetura e Manutenção de Computadores
Arquitetura e Manutenção de ComputadoresEmanoel Lopes
 
Linguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO ClpLinguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO ClpJÚLIO PEIXOTO
 
Apostila de comandos elétricos (senai sp)
Apostila de comandos elétricos (senai   sp)Apostila de comandos elétricos (senai   sp)
Apostila de comandos elétricos (senai sp)Antonio Carlos
 
Apostila com 20 comandos elétricos fáceis de fazer
Apostila com 20 comandos elétricos fáceis de fazerApostila com 20 comandos elétricos fáceis de fazer
Apostila com 20 comandos elétricos fáceis de fazerClaudio Arkan
 
Microcontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DMicrocontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DFabio Souza
 
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...Paulo H Bueno
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladoresDanilo Morais Pagano
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01thomasdacosta
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisFabio Souza
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoFátima Bernardes
 

Was ist angesagt? (20)

Ações de Controle Básica e Controladores Automáticos Industriais
Ações de Controle Básica e Controladores Automáticos IndustriaisAções de Controle Básica e Controladores Automáticos Industriais
Ações de Controle Básica e Controladores Automáticos Industriais
 
Sistemas Supervisórios
Sistemas SupervisóriosSistemas Supervisórios
Sistemas Supervisórios
 
Instalaã§ãµes elã©tricas simbologia (diagramas unifilares)
Instalaã§ãµes elã©tricas   simbologia (diagramas unifilares)Instalaã§ãµes elã©tricas   simbologia (diagramas unifilares)
Instalaã§ãµes elã©tricas simbologia (diagramas unifilares)
 
FIBRA ÓPTICA INFRAESTRUTURAS
FIBRA ÓPTICA INFRAESTRUTURAS  FIBRA ÓPTICA INFRAESTRUTURAS
FIBRA ÓPTICA INFRAESTRUTURAS
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
 
Arquitetura e Manutenção de Computadores
Arquitetura e Manutenção de ComputadoresArquitetura e Manutenção de Computadores
Arquitetura e Manutenção de Computadores
 
Linguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO ClpLinguagens De ProgramaçãO Clp
Linguagens De ProgramaçãO Clp
 
Apostila de comandos elétricos (senai sp)
Apostila de comandos elétricos (senai   sp)Apostila de comandos elétricos (senai   sp)
Apostila de comandos elétricos (senai sp)
 
Nbr 8995 1 iluminacao
Nbr 8995 1 iluminacaoNbr 8995 1 iluminacao
Nbr 8995 1 iluminacao
 
Apostila com 20 comandos elétricos fáceis de fazer
Apostila com 20 comandos elétricos fáceis de fazerApostila com 20 comandos elétricos fáceis de fazer
Apostila com 20 comandos elétricos fáceis de fazer
 
Circuitos integrados
Circuitos integradosCircuitos integrados
Circuitos integrados
 
Microcontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DMicrocontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/D
 
Multimetros
MultimetrosMultimetros
Multimetros
 
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...
Nbr 5419-1-2015-protecao-contra-descargas-atmosfericas-parte-1-principios-ger...
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
Amplificadores operacionais
Amplificadores operacionaisAmplificadores operacionais
Amplificadores operacionais
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas Digitais
 
Projeto de Rede Local (LAN)
Projeto de Rede Local (LAN)Projeto de Rede Local (LAN)
Projeto de Rede Local (LAN)
 
Programação em-arduino-módulo-básico
Programação em-arduino-módulo-básicoProgramação em-arduino-módulo-básico
Programação em-arduino-módulo-básico
 

Andere mochten auch

Dispositivos optoelectronicos
Dispositivos optoelectronicosDispositivos optoelectronicos
Dispositivos optoelectronicosAlberto Alonso
 
Exercicios LCD E ADC
Exercicios LCD E ADCExercicios LCD E ADC
Exercicios LCD E ADCFabio Souza
 
Apresentação pic
Apresentação picApresentação pic
Apresentação picSaddam Lande
 
Microcontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosMicrocontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosFabio Souza
 
Curso mbed na KL25Z
Curso mbed na KL25ZCurso mbed na KL25Z
Curso mbed na KL25ZFabio Souza
 
Microcontroladores PIC - Exercícios para estudos de I/O digitais
Microcontroladores PIC - Exercícios para estudos de I/O digitaisMicrocontroladores PIC - Exercícios para estudos de I/O digitais
Microcontroladores PIC - Exercícios para estudos de I/O digitaisFabio Souza
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Exprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosExprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosJoãopedro Machado
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Motores
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - MotoresMicrocontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Motores
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - MotoresFabio Souza
 
Microcontroladores PIC - Display LCD Alfanumérico
Microcontroladores PIC - Display LCD AlfanuméricoMicrocontroladores PIC - Display LCD Alfanumérico
Microcontroladores PIC - Display LCD AlfanuméricoFabio Souza
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - TPM - TIM...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados -  TPM - TIM...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados -  TPM - TIM...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - TPM - TIM...Fabio Souza
 

Andere mochten auch (13)

Dispositivos optoelectronicos
Dispositivos optoelectronicosDispositivos optoelectronicos
Dispositivos optoelectronicos
 
Ref site pic_bom
Ref site  pic_bomRef site  pic_bom
Ref site pic_bom
 
U3 exercicios resolvidos
U3 exercicios resolvidosU3 exercicios resolvidos
U3 exercicios resolvidos
 
Exercicios LCD E ADC
Exercicios LCD E ADCExercicios LCD E ADC
Exercicios LCD E ADC
 
Apresentação pic
Apresentação picApresentação pic
Apresentação pic
 
Microcontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentosMicrocontroladores PIC - Interface com displays de 7 segmentos
Microcontroladores PIC - Interface com displays de 7 segmentos
 
Curso mbed na KL25Z
Curso mbed na KL25ZCurso mbed na KL25Z
Curso mbed na KL25Z
 
Microcontroladores PIC - Exercícios para estudos de I/O digitais
Microcontroladores PIC - Exercícios para estudos de I/O digitaisMicrocontroladores PIC - Exercícios para estudos de I/O digitais
Microcontroladores PIC - Exercícios para estudos de I/O digitais
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Exprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exerciciosExprsaõ logicas e tabela verdade exercicios
Exprsaõ logicas e tabela verdade exercicios
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Motores
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - MotoresMicrocontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Motores
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Motores
 
Microcontroladores PIC - Display LCD Alfanumérico
Microcontroladores PIC - Display LCD AlfanuméricoMicrocontroladores PIC - Display LCD Alfanumérico
Microcontroladores PIC - Display LCD Alfanumérico
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - TPM - TIM...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados -  TPM - TIM...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados -  TPM - TIM...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - TPM - TIM...
 

Ähnlich wie Programando microcontroladores pic março

Ähnlich wie Programando microcontroladores pic março (20)

Microcontroladores x microprocessadores
Microcontroladores x microprocessadoresMicrocontroladores x microprocessadores
Microcontroladores x microprocessadores
 
Basico sobre clp
Basico sobre clpBasico sobre clp
Basico sobre clp
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
Aula 1 conhecimentos básicos - hardware
Aula 1    conhecimentos básicos - hardwareAula 1    conhecimentos básicos - hardware
Aula 1 conhecimentos básicos - hardware
 
Introducao clp
Introducao clpIntroducao clp
Introducao clp
 
Introducao clp
Introducao clpIntroducao clp
Introducao clp
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Computador de Bordo, Linux
Computador de Bordo, LinuxComputador de Bordo, Linux
Computador de Bordo, Linux
 
Apostila SO
Apostila SOApostila SO
Apostila SO
 
3b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e53886343b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e5388634
 
MICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEM
MICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEMMICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEM
MICROCONTROLADORES E PLATAFORMAS DE PROTOTIPAGEM
 
Introdução a computadores
Introdução a computadoresIntrodução a computadores
Introdução a computadores
 
Wavecom
WavecomWavecom
Wavecom
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Sistemas Operacionais aula 01
Sistemas Operacionais aula 01Sistemas Operacionais aula 01
Sistemas Operacionais aula 01
 
Apostila cpic
Apostila cpicApostila cpic
Apostila cpic
 
Aula 01-introducao-ao-so
Aula 01-introducao-ao-soAula 01-introducao-ao-so
Aula 01-introducao-ao-so
 
Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4
 
TUDO SOBRE PLC
TUDO SOBRE PLCTUDO SOBRE PLC
TUDO SOBRE PLC
 
Introdução à Computação
Introdução à ComputaçãoIntrodução à Computação
Introdução à Computação
 

Programando microcontroladores pic março

  • 1. SISTEMAS EMBARCADOS  Microcontroladores PIC  Prof. Cenilio  2014.
  • 2. "O QUE É PROGRAMAÇÃO EMBARCADA?"  A computação embarcada estuda os computadores embutidos que são encontrados nos mais diversos equipamentos eletroeletrônicos
  • 3. Introdução Os microcontroladores PIC são dispositivos fabricados pela Microchip São de arquitetura RISC com clock de até 40MHz, até 2048kword de memória de programa e até 3968 bytes de memória RAM Podem ter até 4 temporizadores/contadores, memória EEPROM interna, gerador/comparador/amostrador PWM, conversores A/D de até 12 bits, interface de barramento CAN, 12C, SPI entre outros
  • 4. INTRODUÇÃO  Existem 3 famílias de PICs, de 12, 14 e 16 bits de memória de programa  Todos possuem barramento interno de dados de 8 bits  Quanto maior a palavra de programa, maior o número de instruções  12 bits = 33 instruções;  14 bits = 35 instruções;  16 bits = 77 instruções.
  • 5.  A arquitetura dos PICs é otimizada para a execução de um pequeno conjunto de instruções, mas com velocidade muito alta.  Exemplo: PIC da série 16 executa 5 MIPS (Milhões de Instruções por Segundo) a 20MHz ou 10 MIPS a 40 MHz.
  • 6.  Diferentes dispositivos PIC são semelhantes em sua arquitetura interna, o que facilita a migração entre microcontroladores.  Os princípios gerais da arquitetura PIC são:  Registrador de intercâmbio geral, ou registrador de trabalho (W);  Registrador de armazenamento de flags (STATUS)  Registrador de controle de interrupção (INTCON);  Registrador de manipulação de dados nas portas (PORT ou GPIO).
  • 7. MEMÓRIA DE PROGRAMA  Nas séries 12, 14 e 16 está embutida na pastilha  Alguns dispositivos das séries 17 e 18 suportam memórias de programa externas  Tecnologias de implementação de memória de programa:  ROM – programada de fábrica;  OTP (PROM) – Virgens de fábrica;  EPROM;  FLASH – pelo menos 1000 ciclos de gravação/apagamento.
  • 8. MEMÓRIA RAM E REGISTRADORES  A RAM é utilizada para abrigar os registradores internos.  Divide-se em duas partes:  Para abrigar registradores de funções especiais (SFR - Special Function Register);  Para abrigar registradores de propósitos gerais (GPR – General Purpose Register).  Registradores SFR são utilizados para controlar periféricos e dispositivos internos, flags de estado do processador, entre outras funções;  Registradores GPR são utilizados para armazenamento temporário de dados do usuário.
  • 9.  Os registradores são muitas vezes referenciados pela letra f (file register)  A forma de implementação das instruções limita o endereçamento a um máximo de 7 bits ou 128 registradores  Para contornar tal limitação, criou-se o esquema de paginação também na memória RAM, de modo que existem bancos de memória de 128 posições
  • 10.  Alguns registradores SFR podem ser encontrados em dois ou até mesmo nos quatro bancos de memória RAM (registradores espelhados), permitindo a otimização de acesso de registradores muito usados (STATUS, INTCON, etc.)  Alguns dispositivos PIC permitem o espelhamento de registradores GPR  Alguns dispositivos permitem ainda espelhamento completo dos registradores GPR
  • 11. REGISTRADOR W Características:  Usado em operações lógicas ou aritméticas;  Não pode ser utilizado como fonte de dados em operações de CPU (rotação de dados, incremento, decremento, etc.);  Não está mapeado na memória RAM;  Sua utilização principal é como ponte entre registradores f.  NÃO É POSSÍVEL TROCAR DIRETAMENTE INFORMAÇÕES ENTRE OS REGISTRADORES  MOVF (Copia de f para w) e MOVWF (Copia de w para f).
  • 12. CONTADOR DE PROGRAMA - PC  Responsável pelo controle da sequência de execução das instruções  O registrador PC aponta para a próxima instrução a ser executada pela CPU  PC é dividido em dois registradores básicos:  PCL, responsável pelos 8 bits menos significativos;  PCH, responsável pelos 5 bits mais significativos.  Somente PCL é diretamente acessível, podendo ser lido ou escrito pelo programa do usuário  PCH pode ser alterado somente por intermédio do registrador PCLATH
  • 13. PILHA  Estrutura de dados com apenas um ponto de acesso (o topo da pilha)  A principal função da pilha é armazenar endereços de retorno para sub- rotinas  Alguns dispositivos permitem também o armazenamento de dados de usuário  Operações básicas:  PUSH – a CPU armazena informação na pilha;  POP - a CPU busca informação no topo da pilha.  A pilha não está localizada na área de memória RAM, e sim em uma região separada (inacessível diretamente ao usuário) dedicada
  • 14.  Normalmente a pilha tem capacidade de 8 palavras do tamanho de PC.  O endereço do topo não é acessível ao usuário.  Utiliza-se uma estrutura de memória LIFO (Last IN – First Out) circular.  O programador deve ter muito cuidado para não sobrescrever dados na pilha.  Não há instruções para manipulação direta da pilha (isso é feito inderetamente através das instruções CALL, RETURN, RETLW e RETFIE).
  • 15. O QUE É PROGRAMAÇÃO EMBARCADA?"  Desenvolvimento de software embarcado é uma modalidade de desenvolvimento na qual se desenvolve os programas e aplicativos que irão fazer parte de dispositivos eletrônicos que possam funcionar independentes de estarem ou não ligadas a um computador central.
  • 16. "O QUE SÃO SISTEMAS ELETRÔNICOS EMBARCADOS?"  Sistema eletrônico embarcado ou sistema eletrônico embutido é um sistema eletrônico que tem como base um microprocessador que possui um software completamente dedicado ao dispositivo ou sistema que ele controla.
  • 17. "EXEMPLOS DE SISTEMAS ELETRÔNICOS EMBARCADOS:"  Telefones celulares e centrais telefônicas; • Equipamentos para a montagem de redes de computadores, como roteadores, hubs, switches, firewalls e Access Point WiFi; • Modems ADSL e de PLC (Power Line Communication); • Controlador de injeção eletrônica de combustíveis para motores à explosão, a gasolina, a óleo Diesel ou bio-Diesel ou sistemas multicombustível (Flex Fuel); • Controladores da tração, acionadores de air bags e sistemas anti-bloqueio dos freios (freios ABS) em automóveis, motocicletas, ônibus e caminhões; • Equipamento de geolocalização (GPS) e de rastreamento de veículos e cargas; • Calculadoras eletrônicas e agendas eletrônicas de bolso; • Controladores eletrônicos de eletrodomésticos, como fornos microondas, máquinas de lavar e também dos refrigeradores e aparelhos de ar condicionado mais modernos; • Aparelhos de TV com controle remoto, CD players, DVD players e Blue-Ray Disc players; • Equipamentos médicos; • Alarmes programáveis para residências e comércio; • Videogames; • Receptores de TV por satélite e de TV por cabo coaxial; • Televisores digitais com telas a LCD ou plasma e monitores de computador de LCD; • Robôs industriais.
  • 18. "Breve histórico dos Sistemas Eletrônicos Embarcados:" Nos primeiros anos dos computadores digitais na década de 1940, os computadores eram por vezes dedicados a uma única tarefa. Eram, entretanto, muito grandes para serem considerados embarcados. O conceito de controlador programável foi desenvolvido algum tempo depois. O primeiro sistema embarcado reconhecido mundialmente foi o Apollo Guidance Computer
  • 19. UM POUCO DE HISTORIA O primeiro sistema eletrônico embarcado que foi produzido em grande quantidade foi o computador guia do míssil nuclear norte- americano LGM-30 (Míssil Minuteman), lançado em 1961, que possuía um disco rígido para a memória principal. Quando a segunda versão do míssil entrou em produção em 1966, o computador guia foi substituído por um novo, sem o disco rígido, que constituiu o primeiro uso em grande volume de circuitos integrados.
  • 20. Atualmente, com a disponibilidade de microcontroladores a um custo menor que US$ 1, tornou-se viável substituir componentes analógicos caros como potenciômetros e capacitores por eletrônica digital controlada através de pequenos microcontroladores. Assim sendo, o público leigo não sabe que sua vida é repleta de microcontroladores, embutidos em dispositivos corriqueiros.
  • 21. Por exemplo, o acionamento do relógio de um forno microondas é feito por um pequeno microcontrolador, que recebe, interpreta e aciona o equipamento a partir dos comandos do teclado. Também o aparelho de TV moderno possui pelo menos um microcontrolador, que recebe os comandos do controle remoto e aciona as várias funções.
  • 22. Nos automóveis, além do sistema de injeção eletrônica, encontram-se microcontroladores no equipamento de som, nas centrais de alarme, no sistema anti-bloqueio dos freios (freios ABS) e no sistema de acionamento dos airbags. Assim sendo, os veículos mais sofisticados fazem uso de uma grande quantidade de microcontroladores; uma fonte consultada afirma que o automóvel BMW 850i possui mais de 100 microcontroladores em seu interior.
  • 23. Um episódio curioso ocorreu em uma das primeiras conferências em que se discutiu o impacto dos microcontroladores na eletrônica, realizado em 1975 no Hotel Hilton na cidade de Nova Iorque (EUA). Um dos palestrantes, Danny Hillis da empresa ThinkingMachines Corporation, previu que o mercado mundial de microcontroladores seria em poucos anos na faixa de milhões de unidades produzidos a cada ano.
  • 24. Um dos participantes do auditório manifestou-se contra esta ideia, afirmando que nunca seriam necessários tanto microcontroladores no mundo. Segundo este participante não identificado, o futuro descrito pelo palestrante seria como se tivéssemos “um microcontrolador em cada quarto deste hotel”.
  • 25. De fato, poucos anos depois outro evento realizou-se no mesmo Hotel Hilton, que nesta época acabara de instalar fechaduras eletrônicas nos apartamentos, acionadas por um cartão magnético entregue ao hóspede. Ou seja, havia um microcontrolador em cada quarto do hotel, embutido na fechadura das portas dos apartamentos. Está ai um gostinho de história
  • 26. Introdução ao funcionamento das máquinas digitais. As máquinas digitais operam apenas em uma única linguagem, a “linguagem binária”. Comumente chamada de linguagem de máquina, pois contém instruções (numéricas, geralmente expressadas em hexadecimal) que somente uma máquina ou uma família especifica é capaz de entender. Antes de tentarmos entender como funcionam essas características. vejamos um diagrama de blocos de uma máquina digital genérica.
  • 27.
  • 28. PROGRAMANDO MICROCONTROLADORES PIC Na atualidade uma diversidade de microcontroladores esta presente no mercado exigindo a efetiva busca por atualização, para fins aplicativos operacionais e/ou didáticos Mais uma vez, este resumo do livro S586p Silva, Renato A. Programando microcontroladores PIC : Linguagem “C” / Renato A. Silva. – São Paulo : Ensino Profissional, 2006. 172p. dedica-se ao aprendizado da tecnologia de automação e robótica, utilizando microcontroladores para executar tarefas específicas.
  • 29. Programando Microcontroladores PIC Mais uma vez, este resumo dedica-se ao aprendizado da tecnologia de automação e robótica, utilizando microcontroladores para executar tarefas específicas.
  • 30. Finalmente, cabe ao leitor sempre, o esforço para aprender a programar microcontroladores e usa-los com criatividade e imaginação para o desenvolvimento de novos projetos
  • 31. Aqui reforçamos o pedido do autor no sentido de ter uma boa dose de paciência no aprendizado e não desistir frente às dificuldades, pois com certeza, é uma caminhada de enriquecimento de conhecimentos.
  • 32. E para aqueles que felizmente encontra-se em um degrau mais elevado, espera-se que a obra venha somar algo mais a sua carreira.
  • 33. Introdução: O desenvolvimento atual da tecnologia nas áreas de automação e robótica deve-se principalmente ao desenvolvimento dos microcontroladores e processadores digitais de sinais (DSP).
  • 34. Os DSP possui memórias e estrutura que lembra os microcomputadores atuais, executando um software escrito para uma determinada finalidade, sendo extremamente robustos, baratos e confiáveis
  • 35. Os microcontroladores PIC, reúne em um único chip todos os circuitos necessários para o desenvolvimento de um sistema digital programável,
  • 36.
  • 37. O que significa PIC? É o nome que a Microchip adotou para a sua família de microcontroladores, sendo que a sigla significa Controlador Integrado de Periféricos. O PIC é um circuito integrado produzido pela Microchip Technology Inc
  • 38. Possui: Uma serie de LINHAS de I/O para controlar dispositivos externos Uma serie de dispositivos auxiliares ao funcionamento, ou seja, gerador de clock, bus,
  • 39. O PIC esta disponível em uma ampla gama de modelos. Diferenciando-se pelo numero de linha de I/O e pelo conteúdo do dispositivo. Sigla PIC12Cxx dotado de 8 pinos, até chegar a modelos maiores com sigla PIC17Cxx dotados de 40 pinos.
  • 40. Uma descrição detalhada da tipologia do PIC é disponível no site da Microchip Para o nosso curso usaremos um modelo de PIC o PIC16F877. Este é dotado de 40 pinos.
  • 41. Componente integrado que em um único dispositivo contem todos os circuitos necessários para realizar um completo sistema digital programável.
  • 42. Internamente dispõe de todos os dispositivos típicos de um sistema micro- processado, ou seja: Uma CPU (Central Processor Unit ou seja Unidade de Processamento Central) Uma memória PROM Uma memória RAM Uma unidade ULA Varias unidades de registradores
  • 43. Programação do PIC Como o PIC é um dispositivo programável, o programa tem como objetivo deixar instruções para que o mesmo possa fazer atividades definidas pelo programador. Para poder programar um PIC precisaremos de um Editor (Mplab ou o PCWH), um compilador (PCWH) e um programador (PICStar Plus).
  • 44. O que é o MpLab? O MpLab é um ambiente integrado de desenvolvimento (I.D.E.: Integrated Development Environment). Edição O MpLab possui um editor de texto para seus programas que possui diversas ferramentas de auxílio como localizar, substituir, recortar, copiar e colar.
  • 45. Compilação Compilar significa traduzir um programa escrito em assembly (mneumônicos) para linguagem de máquina (números).
  • 46. Simulação O MpLab possui ferramentas para simulação do programa no próprio computador Gravação Para que o programa seja executado no microcontrolador, o arquivo hexadecimal deve ser gravado no PIC. O MpLab oferece suporte aos gravadores fabricados pela Microchip.
  • 47. Emulação A emulação é um recurso de desenvolvimento que possibilita testes em tempo real.
  • 48. O PIC 16F877A Microcontrolador de 40 pinos 33 portas configuráveis como entrada ou saída. • 15 interrupções disponíveis. • Memória de programação
  • 49. E²PROM FLASH, que permite a gravação rápida Memória de programa com 8K Word, com capacidade de escrita e leitura pelo próprio código interno; • Memória E²PROM (não volátil) interna com 256 bytes; • Memória RAM com 368 bytes; • Três timers (2x8bits e 1x16 bits);
  • 50. Comunicações seriais: SPI, I²C e USART;Conversores analógicos de 10 bits (8x) e comparadores analógicos (2x); • Conversores analógicos de 10 bits (8x) e comparadores analógicos (2x); • Dois módulos CCP: Capture, Compare e PWM;
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60. História do transistor e do microchip 1.1 O Transistor Antes de “PICarmos” um pouco, faz-se necessário uma pequena visão do desenvolvimento, iniciando no final dos anos 40, com a construção do primeiro transistor nos laboratórios da BELL em 23 de dezembro de 1947 por John Bardeen, Walter Houser Brattain, e William Bradford Shockley, os quais ganharam o prêmio Nobel de física 1956.
  • 61. O transistor é a contração das palavras transfer resistor, resistência de transferência. É um dispositivo eletrônico semicondutor, componente chave em toda a eletrônica moderna
  • 62. O transistor é um dispositivo semicondutor de estado sólido, ele foi assim chamado pela propriedade de trocar a resistência pela corrente elétrica entre o emissor e o coletor. .
  • 63. É um sanduíche de diferentes materiais semicondutores em quantidade e disposição diferentes intercalados. Pode-se obter assim transistores PNP e NPN
  • 64. Estas três partes são: Uma que emite elétrons (emissor) uma outra que recebe e os coleta (coletor) e uma terceira (base) que está intercalada entre as duas primeiras, regula a quantidade desses elétrons.
  • 65. Tipos de transistor Existem diversos tipos de transistores, mais a classificação mais acertada consiste em dividi- los em transistores bipolares e transistor de efeito de campo FET.
  • 66. O FET, está dividida em JFET, MOSFET, MISFET, etc. A diferença básica entre os diversos tipos de transistores está na forma em que controla o fluxo de corrente.
  • 67. O Nascimento do Microchip Apenas treze anos após a invenção do transistor, houve outro grande salto tecnológico, a invenção do circuito integrado ou microchip, por Jack S. Kilby da Texas Instruments e Robert N. Noyce da Fairchild Semicondutor.
  • 68. PORTAS LÓGICAS, NÚMEROS BINÁRIOS E HEXADECIMAIS As Portas Lógicas As portas lógicas formam a base da eletrônica digital iniciando um novo compêndio na eletrônica e o seu estudo é essencial ao entendimento e aprendizado dos microcontroladores e microprocessadores.
  • 69. Ao agrupar circuitos ativos e passivos em blocos, os cientistas criaram blocos que executavam uma determinada função lógica. Estas funções são AND (E), NAND (NÃO E), OR (OU), XOR (OU EXCLUSIVO), XNOR (NÃO EXCLUSIVO) e NO (NÃO).
  • 70. Para trabalharmos com as portas lógicas faz-se o uso de uma tabela verdade, a qual cada função tem a sua.
  • 71.
  • 72. nível alto em sua saída se as suas entradas tiverem nível baixo.
  • 73. As portas lógicas do tipo OR terão nível alto em sua saída se uma “OU” outra entrada tiver nível alto.
  • 74. As portas lógicas tipo NOR, ao contrário da função OR, somente terá nível alto ou 1 em sua saída se as entradas forem zero. Observe a diferença básica entre a função OR e a NOR.
  • 75. As portas lógicas XOR, garantem o nível alto em sua saída se uma entrada tiver em nível alto e outra em nível baixo. Observe que diferentemente da AND se tivermos 1 e 1 a saída será 0.
  • 76. As portas XNOR apresentam princípio semelhante à função XNOR, apenas com o detalhe de ter saídas invertidas.
  • 77. As portas lógicas NOT, são as mais fácil de todas, apresenta nível alto em sua saída se sua entrada for nível baixo, invertendo assim os níveis lógicos.
  • 78. Como já sabemos o nível alto (normalmente 5 volts) é representados pôr 1 e o nível baixo (zero volts) pôr 0, assim a combinação de 1 e 0 em grupos de 8, formão um conjunto denominado “byte”. Veremos agora as várias representações de conjuntos numéricos e as suas formas de conversão.
  • 79. Números Decimais Desde cedo aprendemos a raciocinar com números decimais, onde o conjunto matemático contém 10 elementos [0..9], este sistema de numeração baseia-se em potencia de 10 onde cada dígito corresponde ao número 10 (base) elevado a uma potência (expoente) de acordo com sua posição.
  • 80. Números Binários Da mesma forma os números que os números decimais, os números binários, são assim chamados porque o seu conjunto contém apenas 2 elementos [0,1]. Este conjunto numérico representa os estados lógicos 0 e 1. Ao organizarmos os bits 0 e 1 em grupos de 8 temos um byte de oito bits, em grupos de 16 temos um byte de 16 bits e assim sucessivamente.
  • 81. A escrita do número binário sempre é feita da direita para a esquerda, dizemos que a parte da esquerda é a mais significativa ou MSB (most significative bit) e a parte da direita a menos significativa ou LSB (low significative bit), dai devemos elevar 2 ao expoente da casa correspondente ao 1 do bit.
  • 82. Observe na tabela de expoentes da figura que o primeiro expoente da direita é 1, portanto 20 = 1 e o quarto expoente da direita para a esquerda é o 3, portanto 2 𝟑 = 8 agora fazemos a soma de todos os resultados, neste caso 1 + 8 = 9. Tudo é uma questão de prática, ao praticar um pouco você entenderá melhor esta relação.
  • 83. Você já deve ter percebido, aqui, que existe uma relação, uma forma de representar o 0 e o 5 volts dos circuitos digitais em números, desta forma, podemos “conversar” facilmente com as máquinas digitais utilizando números e realizar operações com eles.
  • 84. Para convertemos uma representação decimal em binária, fazemos sucessivas divisões por 2 e anotamos os resultados. Depois ordenamos de forma lógica da direita para a esquerda
  • 85. Número Hexadecimal A numeração hexadecimal que como as anteriores tem seu conjunto matemático representado por 16 números, facilita e acelera a decodificação de dados, economizando espaço em armazenamento de dados. Neste conjunto temos 16 números sendo [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]. Utilizamos basicamente o conjunto de números decimais (com10 elementos) e lançamos mãos das letras (A,B,C,D,E,F)
  • 86. A conversão Hexadecimal para decimal multiplica o valor do digito pela potência de 16, fazendo a somatória. Ex: 8AB1 = 35.505
  • 87. Para convertermos hexadecimal em binário, a forma mais prática é termos em mente a tabela de números de A até F em binário e depois agrupar os dígitos binários, veja 1A fica com 1 (primeiro dígito) e 1010 da tabela. Outro exemplo 3C convertido dá 11(referente ao 3) e 1100(referente ao C).
  • 88.
  • 89. Numeração Octal O sistema de numeração octal é um conjunto matemático onde temos oito elementos [0,1,2,3,4,5,6,7] que apresenta grande importância principalmente pela facilidade de conversão de binário para octal.
  • 90. A metodologia de conversão é semelhante as anteriores, para conversão de numeração decimal para numeração octal, faz-se divisões sucessivas por 8 até encontrar o menor quociente e posteriormente pegamos o resto da divisão em ordem inversa. Para conversão de octal para decimal, multiplicamos o numeral por 8 elevado a potencia correspondente.
  • 91.
  • 92. Para conversão de octal para decimal, multiplicamos o numeral por 8 elevado a potencia correspondente.
  • 93. uso da tabela octal onde temos o correspondente binário de cada número octal, depois agrupamos os bytes correspondentes ao octal da direita para a esquerda.
  • 94. DECIMAL HEXADECIMAL BINÁRIO OCTAL 0 0 0000 0000 1 1 0001 0001 2 2 0010 0002 3 3 0011 0003 4 4 0100 0004 5 5 0101 0005 6 6 0110 0006 7 7 0111 0007 8 8 1000 0010 9 9 1001 0011 10 A 1010 0012 11 B 1011 0013 12 C 1100 0014 13 D 1101 0015 14 E 1110 0016 15 F 1111 0017 Tabela de conversão entre diversas bases
  • 95. As funções lógicas booleanas são utilizadas quase que na totalidade das aplicações com microcontroladores.
  • 96. No capítulo anterior o leitor viu as diversas funções (portas lógicas), veja agora exemplo de aplicação destas funções em numeração binário e hexadecimal.
  • 97. Neste capítulo, tivemos uma visão geral da relação, conversão e utilização dos diversos conjuntos numéricos e sua indiscutível e relevante importância para os sistemas computacionais. No próximo capítulo veremos os diversos tipos de memórias e a suas utilizações.
  • 98.
  • 99.
  • 100. OU SE O VALOR VIER EM DECIMAL DEVERÁ SER TRANSFORMADO EM BINÁRIO REALIZAR A OPERAÇÃO COM AS PORTAS LOGICAS E ESCREVER O RESULTADO EM HEXADECIMAL TURMA 528 TURMA 529 Ao fazer a operação logica o resultado deverá ser convertido em hexadecimal
  • 101. Memórias A memória é a capacidade de reter, recuperar, armazenar e evocar informações disponíveis, neste caso em forma binária de 0 e 1.
  • 102. Transistores, portas lógicas e flip-flops são utilizados na implementação de memórias eletrônicas, sendo as principais tecnologias definidas como memórias ROM, PROM, EPROM, EEPROM, FLASH e RAM.
  • 103. MEMÓRIAS E MICROCONTROLADORES  SENDO AS PRINCIPAIS TECNOLOGIAS DEFINIDAS COMO MEMÓRIAS  ROM,  PROM  EPROM  EEPROM  FLASH  RAM. 525 turma 523
  • 104.  Memórias ROM, memória somente de leitura, é uma memória onde os dados gravados não podem ser modificados ou cancelados.  Memórias PROM, memória somente de leitura programável é aquela onde os dados podem ser inseridos pôr meio de gravadores específicos uma única vez
  • 105.  Memórias EPROM, memória somente de leitura apagável, esta sem dúvida é bem mais comum dos que a PROM, pode ser apagada se exposta à luz ultravioleta através de uma janelinha de quartzo (transparente a radiações ultravioletas) e programada novamente  pôr meio de gravadores específicos, pôr muitas vezes. MEMÓRIAS E MICROCONTROLADORES
  • 106.  Memórias EEPROM, memória somente de leitura apagável eletricamente, pode ser apagada eletricamente e regravadas milhares de vezes, utilizando gravadores específicos, não precisando expô-la a radiação ultravioleta, sendo muitas vezes menores que as EPROM, já que não tem a janelinha de quartzo. MEMÓRIAS E MICROCONTROLADORES
  • 107. MEMÓRIAS E MICROCONTROLADORES  Memória FLASH, parecida em tudo com as do tipo EEPROM, podendo ser apaga e gravada eletricamente e gravada novamente, podendo ter até 100.000 ciclos de apagamentos
  • 108.  Memória RAM, Constituída de transistores ou flip-flop, podem armazenar dados somente quando tiverem tensão, quando não houver tensão estarão zeradas, sendo voláteis, tem seu uso no processo auxiliar ao processador armazenando informações temporárias. MEMÓRIAS E MICROCONTROLADORES
  • 109. MEMÓRIA RAM  Basicamente são constituídas de dois tipos: estáticas e dinâmicas.  As memórias RAM estáticas, muito utilizada no final dos anos 80, tinham como principal desvantagem o tamanho
  • 110. MEMÓRIA RAM  As memórias RAM dinâmicas, ao contrário tinham alta densidade podendo armazenar por chip 1 megabyte facilmente, porém estas memórias necessitam de refresh constante e conseqüentemente circuitos de apoio
  • 111. MICROCONTROLADOR Microcontrolador é um circuito integrado programável que contém todos os componentes de um computador como CPU (unidade central de processamento), memória para armazenar programas, memória de trabalho, portas de entrada e saídas para comunicar-se com o mundo exterior, sistema de controle de tempo interno e externo, conversores analógico digital, uart de comunicação e outros.
  • 112. MICROCONTROLADOR Pode-se controlar qualquer coisa ou estar incluído em unidades de controle para: - máquinas pneumáticas, - hidráulicas comandadas - máquinas dispensadoras de produtos - motores, temporizadores - sistemas autônomos de controle, incêndio, umidade temperatura - telefonia, automóveis, medicina, ...etc Estamos rodeados por máquinas que realizam algum trabalho ajudado por sensores e atuadores que recolhem as informações.
  • 113. APRESENTANDO O PIC 16F62X O microcontrolador PIC 16F62x, reúne em uma pastilha todos os elementos de uma CPU RISC de alta performance, sendo fabricado em encapsulamento DIP (18 Pinos), SOIC (18 pinos) ou SSOP (20 pinos). Onde encontramos:
  • 114. CARACTERÍSTICAS DO PIC 16F62X Conforme vemos no diagrama em blocos do PIC 16F627 e 16F628, podemos ressaltar as seguintes características: memória de programa EEPROM de 1Kb x 14 bits no 16F627. memória de programa EEPROM de 2Kb x 14 bits no 16F628. Memória de dados EEPROM de 64 bytes. memória de dados RAM com 224 bytes dividida em 4 bancos.
  • 115. Registrador de propósito específico (SFR) com 32 posições. Registrador de propósito geral (GPR) com 224 posições. ALU de 8 bits e registro de trabalho W que normalmente recebe um operando que pode ser qualquer registrador, porta de entrada/saída ou o próprio código de instrução. Pilha (Stack) de 8 níveis. Contador de programa (PC) de 13 bits (o que permite endereçar até 8 KB de memória).
  • 116. Recursos conectados al bus de dados: PortA de 8 bits <RA0:RA7> PortB de 8 bits <RB0:RB7> Temporizadores / contadores TMR0, TMR1, TMR2 Comparadores Captura , Comparação e PWM Voltagem de referencia USART para comunicação serial Memória EEPROM
  • 117. SSOP (20 pinos). Onde encontramos: - Set (conjunto) de instruções com 35 funções - 200 nanosegundos por instrução @ 20 Mhz. - Clock de até 20 Mhz. - 1024 bytes de memória de programa (16F627) - 2048 bytes de memória de programa (16F628) - Stack com 8 níveis -
  • 118. 16 registradores especiais de funções - Capacidade de interrupção - 16 portas de entrada / saídas independente - Alta corrente de saída, suficiente para acender um LED - Comparador analógico. - Timer0 de 8 bits com prescaler, postscaler - Timer1 de 16 bits com possibilidade de uso de cristal externo - Timer2 de 8 bits com registro de período, prescaler e postscaler
  • 119. - Captura com 16 bits e resolução máxima de 12,5 nS. - Comparação com 16 bits e resolução máxima de 200 nS. - PWM com resolução máxima de 10 bits. - USART para comunicação serial - 16 bytes de memória RAM comum
  • 120. - Power On Reset (POR) - Power Up Timer (PWRT) - Oscillator start-up (OST) - Brow-out Detect (BOD) - Watchdog Timer (WDT) - MCLR multiplexado - Resistor pull-up programáveis no PORTB - Proteção de código programável - Programação em baixa voltagem - Power save SLEEP - Oscilador
  • 121. - Resistor externo – ER - Resistor interno - INTRC - Clock externo – EC - Cristal alta velocidade - XT - Cristal baixa velocidade – HS - Cristal – LP - Programação “in-circuit” - Baixo consumo - < 2.0 mA 5.0V, 4 Mhz. - 15 uA 3.0V, 32 Khz. - < 1 uA em repouso 3.0V. - Quatro localizações para ID de usuário
  • 122. Alimentação Normalmente o PIC é alimentado com uma tensão 5,0 volts provenientes de uma fonte DC com regulação positiva, um regulador 7805 ou 78L05 podem ser utilizados para tal função, lembrando aqui que o 78L05 tem capacidade de suprir até 100ma, não devendo exceder 80% deste consumo pois aumenta muito o aquecimento do regulador. O consumo de corrente do microcontrolador é mínimo, consumindo menos de 2,0 mA com 5 volts, trabalhando a 4Mhz ou 15,0 micro amp com 3 volts, trabalhando
  • 123. Programando Microcontroladores PIC a 32 Khz. Quando em modo StandBy, consome menos de 1,0 micro amper. com 3.0V, porém devemos ver o consumos dos outros componentes do circuito. - PIC 16F62x - 3.0V a 5.5V - PIC 16LF62x - 2.0V a 5.5V
  • 124. DEFINIÇÃO DA CPU  CISC: (Complex Instruction Set Computer)  RISC: (Reduced Instruction Set Computer)  SISC.(Specific Instruction Set Computer)
  • 125. CISC: (Complex Instruction Set Computer) processadores com conjunto de instruções complexas, dispõe de um conjunto com elevado número de instruções algumas sofisticadas e potentes. Em contrapartida requerem muitos ciclos de máquina para executar as instruções complexas.
  • 126. RISC: (Reduced Instruction Set Computer) processadores com conjunto de instruções reduzidos, em nosso caso são 35 instruções simples que executam em 1 ou 2 ciclos de máquina com estrutura pipeline onde todas as instruções executam na mesma velocidade.
  • 127. ARQUITETURA INTERNA  Entende-se por arquitetura interna a forma como o circuito é construído, representada por blocos, isto é como suas partes internas se interligam, podemos definir os PICs como sendo “Arquitetura Harvard”, onde a CPU é interligada à memória de dados (RAM) e a memória de programa (EPROM) por um barramento específico.
  • 128. Tradicionalmente os microprocessadores têm como base à estrutura de Von Neumann, que se caracteriza por dispor de uma única memória principal em que se armazenam dados e instruções. O acesso à memória é feito através de um sistema de uma única via (bus de dados, instruções e de controle). A arquitetura interna do PIC é do modelo Harvard,
  • 129. SISC.(Specific Instruction Set Computer) processadores com conjunto de instruções específicas
  • 130.
  • 131. ORGANIZAÇÃO DA MEMÓRIA  O PIC contém um registrador denominado PC (Program Counter) que é implementado com 13 bits, capaz de endereçar até 8K de programa, mas que somente 1k é implementado fisicamente no 16F627 (0000h à 03FF) e 2K são implementados no 16F628 (0000H à 07FFh).
  • 132.  Este registrador está ligado diretamente a “Pilha” (stack) armazena o endereço da instrução que vai ser executada.  Ao incrementar ou alterar o conteúdo do PC, o microcontrolador tem um mapa seguro de onde esta e para onde ir.
  • 134. A PILHA OU STACK
  • 135. A pilha é uma memória independente da memória de programa e da memória de dados, com estrutura LIFO (Last In First Out) último dado a entrar será o primeiro dado a sair com oito níveis de profundidade ou armazenamento com 13 bits cada um. Sua função é guardar o valor do PC quando ocorre um salto do programa principal para o endereço de um subprograma a ser executado, fazendo assim com que o microcontrolador tenha total controle as chamadas de rotinas.,
  • 136. A pilha. Seu funcionamento é como um buffer circular onde o endereço da última chamada é o primeiro a retornar em uma chamada RETUR, RETLW ou RETIE
  • 137. ORGANIZAÇÃO DA MEMÓRIA DE DADOS  Os registros que afetam a CPU são: STATUS, OPTION, INTCON, PIE1, PIR e PCON. Veremos agora descrição destes e outros registros.
  • 138. REGISTRADORES DE FUNÇÕES ESPECIAIS  Registro de STATUS endereços 03h, 83h,103h e 183h, contém o estado da Unidade Lógica Aritmética ALU (C, DC, Z), estado de RESET (TO, PD) e os bits para seleção do banco de memória (IRP, RP1, RP0).
  • 139. ORGANIZAÇÃO DA MEMÓRIA DE DADOS  A memória de dados divide-se em quatro bancos, contendo os registros de propósitos gerais (GPR), registros de funções especiais (FSR). A seleção do banco de memória é feita através dos bits RP1 (STATUS <6>) e RP0 (STATUS <5>) conforme a seguinte tabela:  RP1, RP0 BancoEndereço  0 0 0 000h - 07Fh  0 1 1 080h - 0FFh  1 0 2 100h - 17Fh  1 1 3 180h - 1FFh
  • 140. REGISTRO OPTION OU OPTION_REG ENDEREÇO 81H E 181H  É um registro de leitura e escrita que contém vários bits de controle para configurar o funcionamento do prescaler ao timer0 e ao WDT, interrupção externa ao timer0 e os resistores de pull-up do PORTB.
  • 141. REGISTRO INTCON - ENDEREÇO 0BH, 8BH, L0BH E 18BH É UM REGISTRO DE LEITURA E ESCRITA QUE CONTÉM OS BITS DE HABILITAÇÃO DAS VÁRIAS INTERRUPÇÕES (EXCETO DO COMPARADOR), INCLUSIVE POR MUDANÇA DE ESTADO NO PORTB.
  • 142. REGISTRO PIE1 - ENDEREÇO 8CH.  Este registro contém os bits individuais de interrupções dos periféricos, sendo que para seu funcionamento o bit PEIE (INTCON <6>) deve estar habilitado. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 EEIE CMIE RCIE TXIE - CCP1IE TMR2IE TMR1IE
  • 143. bit descrição EEIE flag de interrupção de escrita na EEPROM completada 1 = habilita interrupção de término de escrita 0 = desabilita interrupção de término de escrita CMIE interrupção do comparador habilitada 1 = habilita interrupção do comparador 0 = desabilita interrupção do comparador RCIE interrupção de recebimento de caractere no USART 1 = habilita interrupção de recebimento do USART 0 = desabilita interrupção de recebimento do USART TXIE interrupção de envio de caractere no buffer do USART 1 = habilita a interrupção de transmissão do USART 0 = desabilita a interrupção de transmissão do USART CCP1IE interrupção do CCP1 para captura, comparação e PWM 1 = interrupção habilitada 0 = interrupção desabilitada TMR2IE interrupção 1 = habilita interrupção 0 = desabilita interrupção TMR1IE flag de overflow 1 = habilita interrupção para estouro de TMR1 0 = desabilita interrupção de estouro de TMR1
  • 144. LINGUAGEM “C”  A linguagem “C” nasceu na Bell Labs, divisão da AT&T, a famosa companhia americana de telecomunicações desenvolveu em seus laboratórios o sistema operacional Unix, posteriormente desenvolveu também a linguagem “C” em 1969 por Dennis Ritchie, que também é um dos principais criadores do Unix, à partir da linguagem “B” de Ken Thompson.
  • 145. LINGUAGEM “C”  Seu propósito era gerar uma linguagem de alto nível, em oposição à linguagem de máquina (Assembly), conhecida como de baixo nível. O “C” é uma linguagem para uso geral, ou seja, desenvolvimento dos mais diversos tipos de aplicação
  • 146. LINGUAGENS DE MAQUINA. Nós vimos como as máquinas digitais entendem o assembly, agora vamos subir mais degrau e entender como a mesma máquina pode entender uma linguagem estruturada, como o C, Pascal ou Basic, Mas antes precisamos entender as diferenças entre essas linguagens.
  • 147. O assembly é um exemplo de linguagem puramente imperativa, ou seja, possui ações (comandos), que alteram estados (espaços de memória), essa linguagem facilita muito a programação, pela sua semelhança com a linguagem humana, ações e conseqüências.
  • 148. Mas o assembly não é uma linguagem estruturada, o programador possui liberdade para “montar” seus blocos de programa cada um de uma forma diferente, podemos criar saltos para qualquer parte da memória de maquina. Essa característica que nos permite flexibilidade também atrapalha a analise de códigos, e cooperação entre diversos programadores.
  • 149. LINGUAGEM ESTRUTURADA  Já no caso da linguagem estrutura podemos reduzir as inúmeras formas de pensar,  Em três estruturas básicas:  Estruturas de seqüência  Estrutura de decisão  Estrutura de repetição
  • 150. LINGUAGEM ESTRUTURADA  Estruturas de seqüência: As tarefas são executadas seqüencialmente, uma após a outra. Segundo o raciocínio lógico do programador.   · Estrutura de decisão: O resultado de um teste lógico define se um trecho do código deve ser executado. Existem estruturas para uma única decisão, ou múltiplas decisões.   Estrutura de repetição: Determina se um trecho de código será repetido até que certa condição lógica seja satisfeita
  • 151. Essa forma de pensar nos aproxima mais ainda da linguagem humana, pois uma única linha de código estruturado pode conter mais de uma ordem explicita. Por exemplo: “Faça enquanto isso for verdadeiro!”. Este é um típico comando de linguagem estruturada. Temos uma ordem “Faça”, um laço de repetição “Enquanto” e uma comparação lógica “enquanto for verdadeiro
  • 153. Essa facilidade também nos traz um empecilho. A maquina digital não consegue seguir ordem complexas. Portanto temos um “gap”, um espaço que precisa ser preenchido conectando a linguagem estruturada. Também chamada de linguagem de alto nível, até a linguagem de máquina, também chamada de linguagem de baixo nível. É neste momento que entra em cena os compiladores.
  • 154.
  • 155. OBSERVAÇÃO. Diferente dos montadores que apenas trocam um mnemônico por um equivalente código hexadecimal, o compilador precisa traduzir uma linguagem de alto nível para outra linguagem equivalente em seu conceito e algoritmo, mas não exatamente em seus comandos
  • 156. Logo a compilação é um processo mais complexo, e suas tarefas são bem divididas e definidas. Uma vez que o código em alto nível está pronto e é submetido a um compilador este realiza uma analise, neste primeiro processo o compilador interpreta o código e verifica itens básicos de sua linguagem e estrutura, a analise pode ser subdividida em três partes.
  • 157. Analise Léxica: Processo também conhecido como “Scanner”, pois verifica se algum caractere do algoritmo está fora dos caracteres permitidos da linguagem. Sempre que for encontrado caracteres válidos o analisador procura trocar esse caractere por um símbolo. Este símbolo pode ser interpretado mais facilmente no restante do processo. Neste ponto todos os caracteres inúteis de um programa são retirados, tais como comentários, espaços em branco, linhas em branco etc.
  • 158. Analise Sintática: A analise sintática (“parsing” em inglês), recebe os caracteres recém filtrados pelo analisador léxico e cria uma estrutura de dados. Está é na verdade uma grande tabela, capaz de organizar os dados e futuramente realizar comparações e otimizações do mesmo. Estes dados estão separados pelos símbolos criados no analisador léxico.
  • 159. Analise Semântica: As outras etapas de analise, focam os caracteres ou conjuntos de caracteres de forma quase que individual, sem olhar o “sentido” das ações. Erros como comparações entre uma numero e uma string não são observados nas analises anteriores. O analisador Semântico garante a coerência do programa
  • 160.
  • 161. INTRODUÇÃO DA LINGUAGEM “C”  Programa: forma de se comunicar com um computador Linguagem máquina  Programas são ‘traduzidos’ através de outros programas “especiais”:  compiladores e interpretadores.  Processo:  Fonte → objeto → executável  ESTRUTURA BÁSICA DE UM PROGRAMA C  Consiste em uma coleção de funções  Forma geral
  • 162. LNGUAGEM “C”  O pré-processador do compilador, reconhece os comandos e todos os símbolos definidos pelo comando #define, sendo pouco inteligentes fazem basicamente substituição.
  • 163. LINGUAGEM “C”  Tem como características  a modularidade,  Portabilidade  recursos de “baixo” e “alto” nível,  geração de código eficiente  confiabilidade  regularidade,  além de conter um número pequeno de comandos
  • 164. VERIFICADOR LÉXICO  O verificador léxico ou “reconhecedor de palavras” passam pelo programa trocando palavras-chaves e símbolos orientados para humanos por valores numéricos mais compactos orientados para máquina.
  • 165. Na verdade “reconhecedor de palavras” é uma grande tabela de pesquisa onde a palavra- chave é trocada por um código ou token, a grande maioria das mensagens de erro reportadas acontecem neste estágio.
  • 166.  Depois vem o analisador o grande perito em “C”. Ele sabe a sintaxe e quase toda a semântica da linguagem. Este possui a responsabilidade principal pela análise contextual, um erro se seja reconhecido apenas depois de dois ou três comandos terem sido analisados será descoberto
  • 167. COMPILADORES  Após utilizar diversos compiladores existentes atualmente, optei pelo uso do CCS por apresentar uma gama de vantagens sobre os demais. O compilador CCS pode ser adquirido diretamente no site do fabricante no endereço www.ccsinfo.com onde se encontra também vários exemplos de utilização e outras informações referentes ao compilador.  A instalação do compilador é bem simples, basta executar o aplicativo e seguir as instruções das telas.
  • 168. EX DE PROGRAMA EM “C” #include <16F628A.h> void main() { while( true ) { //repetição infinita output_high( PIN_B0 ); //coloca o bit led em 1 delay_ms( 1000 ); //aguarda 1 segundo output_low( PIN_B0 ); //coloca o bit led em 0 delay_ms( 1000 ); //aguarda um segundo };
  • 169.
  • 170. MODELO BÁSICO DE UM PROGRAMA EM C  Quatro elementos estão presentes em um programa C:  Comentários  Diretivas de compilação  Definições de dados  Blocos com instruções e funções
  • 171. COMENTARIOS  Os comentários no programa fonte não têm função nenhuma para o compilador e serve apenas para aumentar a legibilidade e clareza do programa, podem ser inseridos com “//” que valem de onde começam até o fim da linha ou com “/*” e “*/”, sendo considerado comentário tudo entre “/*” e “*/”.
  • 172. IDENTIFICADORES  Um identificador é um símbolo definido pelo usuário que pode ser um label, uma constante, um tipo, uma variável, um nome de programa ou subprograma (procedimento ou função). Normalmente devem começar com um caractere alfabético e não podem conter espaços em branco, podendo ter no máximo 32 caracteres, não havendo distinção entre maiúsculas e minúsculas.
  • 173. ENDENTAÇÃO  A endentação também não tem nenhuma função para o compilador e serve para tornar a listagem do programa mais claro dando hierarquia e estrutura ao programa.
  • 174. CONSTANTES  Constantes são valores declarados no início do programa e que não se alteram na execução do programa. Podem ser expressas em qualquer base,  Para criar uma constante existe o comando #define que, em geral é colocado no início do programa-fonte.
  • 175. EXEMPLO  #define LARGURA_MAXIMA 50 // Não se coloca ponto-e-vírgula após o valor  #define NRO_DE_DIAS_DA_SEMANA 7  #define NRO_DE_HORAS_DO_DIA 24  #define VALOR_DE_PI 3.1415  void main ()  {  int TotalDeHoras;   TotalDeHoras = 10 * NRO_DE_DIAS_DA_SEMANA * NRO_DE_HORAS_DO_DIA;  ......  }
  • 176. VARIÁVEIS  Uma declaração de variável consiste do nome do tipo de dado seguido do nome da variável. Todas as variáveis devem ser declaradas antes de serem usadas. As variáveis devem ser declaradas no início de cada função, procedimento ou início do programa.
  • 177. DECLARAÇÃO DE VARIAVEIS  Declaração de Variáveis  Todas as variáveis tem que ser declaradas antes de serem usadas;  Não há uma inicialização implícita na declaração  // Exemplo de programa em C   #include <stdio.h> // Arquivo de cabeçalho (header)  void main()  {  int contador; // declarações simples  float PrecoDoQuilo;  double TaxaDeCambio;  char LetraDigitada;  int IdadeManoel, IdadeJoao, IdadeMaria; // Pode colocar mais de uma variável na  // na mesma linha
  • 178. Em C, como na maioria das linguagens, os dados são divididos em tipos: inteiro, real, caracter, etc. Esta divisão se deve basicamente ao número de bytes reservados para cada dado. Cada tipo de dado possui um intervalo de valores permitidos. •Todas as variáveis em C tem um tipo; •Cada tipo define os valores que a variável pode armazenar; •Cada tipo ocupa certa quantidade de memória. TIPOS DE DADOS  Tipos básicos:  Tipo Tamanho Intervalo Uso  char 1 byte -128 a 127 número e caracter ASCII  int 2 bytes -32768 a 32767 contador, controle de laço  float 4 bytes 3.4e-38 a 3.4e38 real (precisão de 7 dígitos)  double 8 bytes 1.7e-308 a 1.7e308 científico (precisão 15 dígitos)
  • 179.  (alfanuméricasLetras ) Aa até Zz  ; Dígitos (numéricos) - 0 até 9;  Operadores;  Tipos de dados.
  • 181. TIPOS DE DADOS  Um Tipo de Dado define o conjunto de valores que uma variável pode assumir e as operações que podem ser feitas sobre ela.  Toda variável em um programa deve ser associada a um tipo de dado, conforme a tabela abaixo.
  • 182.
  • 183.  O conceito do “C” é que existe uma função principal chamada “main” que controla o bloco principal do programa, logicamente ficaria assim:  #include <16F628A.h>  void main()  {  ...declarações  };
  • 184. A chave ({) abre uma estrutura de bloco de declarações, onde temos comandos, chamadas de funções ou blocos em assembler. Para cada chave aberta deve-se ter outra chave (}), indicando o fechamento do bloco de declarações.
  • 185. void main( ) { while( true ) { //repetição infinita output_high( PIN_B0 ); //coloca o bit led em 1 delay_ms( 1000 ); //aguarda 1 segundo output_low( PIN_B0 ); //coloca o bit led em 0 delay_ms( 1000 ); //aguarda um segundo }; };
  • 186. Normalmente o compilador dá uma ajudinha na hora de escrever o código fonte alertando para essas particularidades. O modo de escrever é livre, você pode utilizar letras maiúsculas, minúsculas ou combinadas, somente não pode haver espaço entre o label ou a variável.
  • 187. assim a seguinte declaração de variável “Int variável 1 ;” apresenta dois erros graves. Um deles é o uso de acentuação no “á” o outro é a presença de espaço. O correto para esta declaração seria o seguinte “int variavel_1;”.
  • 188. Os caracteres acentuados fazem uso do oitavo bit do byte de caracteres o que não é suportado pelos compiladores uma vez que na língua inglesa não existe acentuação fazendo uso, portanto dos caracteres de até 7 bits ou até o caractere 127.
  • 189. No apêndice encontra-se uma tabela de caracteres ASCII com os caracteres básicos de 0 a 127 e uma tabela de caracteres estendido de 127 a 255.
  • 190. Os comandos são: IF, WHILE, DO, FOR, SWITCH, CASE, RETURN, GOTO, LABEL, BREAK, CONTINUE.
  • 191. Este comando de estrutura condicional pode estar sozinho ou em conjunto com “else” ou “else if”, na construção de blocos de estruturas condicionais muito eficazes. Sempre recebe um ou mais parâmetros, pois sempre comparamos alguma coisa com al- guma coisa, e conforme o resultado da comparação faz algo
  • 192. COMANDO “IF”  Este comando de estrutura condicional pode estar sozinho ou em conjunto com “else” ou “else if”, na construção de blocos de estruturas condicionais muito eficazes. Sempre recebe um ou mais parâmetros, pois sempre comparamos alguma coisa com alguma coisa, e conforme o resultado da comparação faz algo diferente. Vejamos:
  • 193. COMANDO “IF”  if( modo == 0x01 ){ //variável modo = 1?  buffer = 0x03 & 0xFF; //sim, então buffer = 2 AND 256  }  else{ //senão  buffer = 0x03 ^ 0xFF; //buffer = 2 XOR 256  };
  • 194. COMANDO “IF”  No exemplo acima vemos o operador de igualdade/comparação (==) que indica se o operando da direita é igual ao da esquerda, e logo abaixo tempo o operando de atribuição (=), onde o operando da direita atribui-se ao da esquerda.  Neste caso, houve a necessidade de se verificar a outra fase da condição, e atribuir-lhe valor.  No caso acima se fez uma comparação e tomou- se uma decisão, se após a decisão houvesse mais de uma declaração, abriríamos um bloco de controle assim:
  • 195. COMANDO “IF”  if( TEMP == 0 ){  output_high (PIN_B0);  }  else if( TEMP == 1 ) {  output_high( PIN_B1 ) ;  }  else if( TEMP == 2 ) {  output_high( PIN_B2 ) ;  }  else{  output_low( PIN_B0 ) ;  output_low( PIN_B1 ) ;  output_low( PIN_B2 ) ;  };
  • 196. - COMANDO “WHILE”  Este comando pode ser utilizado sozinho ou em conjunto com o comando “DO” construindo blocos de controle extremamente eficazes. “while” ou “enquanto” sempre avalia uma expressão enquanto ela é verdadeira podendo ou não executar uma declaração em conjunto.
  • 197. while ( input( PIN_B0 ) ); //aguarda o pino Rb0 descer output_high( PIN_B1 ); //coloca o pino Rb1 em 1 while ( ! input( PIN_B0 ) ); //aguarda o pino Rb0 subir output_low( PIN_B1 ); //coloca Rb1 em 0
  • 198. Depois de compilado, foi gerado o seguinte código: 00BF: BTFSC PORTB.0 00C0: GOTO 0BF 00C1: BSF PORTB.1 00C2: BTFSS PORTB.0 00C3: GOTO 0C2 00C4: BCF PORTB.1
  • 199. Comentário do código Neste caso, o comando While irá aguardar até que o pino Rb0 mude de 1 para 0, veja, que o compilador colocou na linha 00BF a instrução para testar a flag Rb0 e saltar se estiver limpa, caso contrário na linha 00CD têm um salto para a linha 00BF, criando um loop até termos Rb0 igual a 0. Quando a condição a ser avaliada não muda de estado temos um loop infinito como normalmente acontece dentro da função “main”. No exemplo abaixo criamos nosso pisca_led.
  • 200. void main(){ //função principal while( TRUE ){ //execute sempre, loop infinito output_high( PIN_B1 ); //pino B1 = 1, led aceso delay_ms( 1000 ); //aguarda 1 segundo output_low( PIN_B1 ); //pino B1 = 0, led apagado }; //fecha o bloco while }; //fecha a função principal
  • 201. COMANDO “DO”  Este comando “execute” sempre é executado em conjunto com o comando “while” formando um bloco “execute... enquanto (verdadeiro)”. Com a diferença que a condição é avaliada posteriormente a execução, ou seja, primeiro executa o bloco depois avalia se continua executando, ao contrário do “while”
  • 202. STRINGS  Uma String é uma seqüência de caracteres entre aspas duplas:  "exemplo de uma string em C".
  • 203. A FUNÇÃO PRINTF  A função printf exibe um ou mais dados na tela. Para tanto ele deve receber pelo menos dois parâmetros, separados por vírgula:  Um string de formato que define, através de caracteres especiais, os tipos dos dados a serem impressos e suas posições na linha de impressão;  Um dado a ser impresso. Este dado pode ser qualquer um dos dados visto anteriormente
  • 204. POR EXEMPLO:  printf("%s","teste");  "%s" : é a string de formato "teste" : é o dado a ser impresso.  A string de formato define quais os tipos dos dados a serem impressos. O símbolo %s será substituído pelo dado que vem após a vírgula. Os dados definem quais os valores a serem impressos.
  • 205. STRING  Se for necessário, uma string de formato pode definir que mais de um dado será impresso. Para tanto, dentro da string de formato deve haver mais de um %, um para cada dado a ser impresso. Neste caso, os dados devem vir após a string de formato separada por vírgulas.
  • 206. Por exemplo: printf("%s %s","teste1", "outra string"); Isto irá imprimir o string teste1 deixar 1 espaço em branco e imprimir ao lado o string outra string, assim : teste1 outra string
  • 207. EXEMPLO #include <stdio.h> // Necessário para usar a função printf // A função printf exibe um ou mais dados na tela void main () { printf("%s","Isto é uma string ....n"); // note o 'n' no final da string; printf("%s","Outra string ...."); printf("%s","Terceira stringn"); //Depois de Executar o programa, tecle ALT-F5 para ver o resultado na tela }
  • 208. IMPRESSÃO DE INTEIROS COM "PRINTF"  Para imprimir um inteiro com printf usa-se o símbolo %d
  • 209. IMPRESSÃO DE INTEIROS COM "PRINTF"  // Impressão de Variáveis Inteiras  #include <stdio.h>  #include <conio.h> // necessário para as funções clrscr e getch  void main ()  {  int Contador;  int NroDeFilhos;   clrscr(); // Limpa a tela   Contador = 10;  printf("Valor da Variável: %dn", Contador); // No momento da execução sinal %d vai  // ser substituído pelo valor da  // variável Contador  NroDeFilhos = 3;  printf("Maria tem %d filhos", NroDeFilhos); // o inteiro pode ficar no meio da string  getch(); // espera que o usuário pressione uma tecla  }
  • 210. IMPRESSÃO DE EXPRESSÕES ARITMÉTICAS  // Impressão de Expressões aritméticas  #include <stdio.h>  #include <conio.h> // necessário para as funções clrscr e getch  void main ()  {  int NroDeAndares;  int AlturaPorAndar;   clrscr(); // Limpa a tela  NroDeAndares = 7;  AlturaPorAndar = 3;   printf("Altura Total do Prédio: %d metros", NroDeAndares*AlturaPorAndar);  // No momento da execução sinal %d vai ser substituído  // pelo valor da multiplicação  getch(); // espera que o usuário pressione uma tecla  }
  • 211. IMPRESSÃO DE NÚMEROS REAIS  // Impressão de números reais  #include <stdio.h>  #include <conio.h> // necessário para as funções clrscr e getch  void main ()  {  float NotaDaP1, NotaDaP2;  float Media;    clrscr(); // Limpa a tela  NotaDaP1 = 6.6; // Atribuição do Valores das médias  NotaDaP2 = 8.2;   Media = (NotaDaP1 + NotaDaP2) / 2.0;   printf("Média Final : %f", Media);  // No momento da execução sinal %f vai ser substituído  // pelo valor da variável Media com SEIS casas decimais  // Média Final : 7.400000  getch(); // espera que o usuário pressione uma tecla  }
  • 212. FORMATO DE IMPRESSÃO DOS NÚMEROS REAIS  No exemplo acima o resultado da média (7.4) foi impresso com 6 casas decimais (7.400000).  Isto sempre acontece quando se manda imprimir um float da forma como foi feito no exemplo acima. Isto acontece, pois o padrão da função printf é completar o número com zeros à direita, até que fique com seis casas decimais.
  • 213.  Para formatar de maneira diferente usar-se, junto com o %f uma especificação de quantas casas decimais se deseja que o número tenha. Especifica-se também o número total de caracteres do número a ser impresso.
  • 214. Por exemplo: %6.3f especifica que se quer imprimir um float com 3 casas decimais e com um tamanho total de 6 caracteres no total.
  • 215.  #include <stdio.h>  #include <conio.h>  void main()  {  float NotaDaP1, NotaDaP2;  float Media;   clrscr(); // Limpa a tela  NotaDaP1 = 6.6; // Atribuição do Valores das médias  NotaDaP2 = 8.2;   Media = (NotaDaP1 + NotaDaP2) / 2.0;  printf("Média Final : %6.3f", Media);  // No momento da execução sinal %6.3f vai ser substituído  // pelo valor da variável Media  // Média Final : 7.400  getch(); // espera que o usuário pressione uma tecla   } 
  • 216. Regras para impressão de um número real o número de casas decimais é sempre respeitado. Se for preciso, zeros serão acrescentados à direita do número. o tamanho total significa o número de caracteres do número incluindo o ponto decimal e um eventual sinal de menos (-), se for o caso;
  • 217. Se a soma do número de caracteres da parte inteira, mais o ponto decimal, mais a parte fracionária, mais um eventual sinal de menos ainda for menor do que o tamanho total especificado no formato, então, espaços em branco serão acrescentados à esquerda da parte real do número.
  • 218. Se a soma do número de caracteres da parte inteira, mais o ponto decimal, mais a parte fracionária, mais um eventual sinal de menos for maior do que o tamanho total especificado no formato, então, apenas o número de casas decimais é respeitado.
  • 219. EXEMPLO  #include <stdio.h>  #include <conio.h>  void main()  {  float Numero;  Numero = -2.5;  clrscr();  printf("1234567890n");  printf("%7fn", Numero);  printf("%7.0fn", Numero);  printf("%7.3fn", Numero);  printf("%8.3fn", Numero);  printf("%9.3fn", Numero);  printf("n");  printf("%8.4fn", Numero);  printf("%8.1fn", Numero);  printf("%6.12fn", Numero);   getch();  }  // Resultados  1234567890  -2.500000  -2  -2.500  -2.500  -2.500   -2.5000  -2.5  -2.500000000000
  • 220. VARIÁVEIS DO TIPO STRING  Uma variável capaz de armazenar uma string deve ser declarada informando- se qual o número máximo de caracteres que ela poderá armazenar  Exemplo:  char Nome[30]; // isto define que a variável poderá armazenar uma string de até 29 caracteres.
  • 221. ATRIBUIÇÃO COM STRINGS  Atribuição com strings  As atribuições de valores a strings devem ser feitas através da função strcpy
  • 222. // EXEMPLO COM STRINGS  #include <stdio.h>  #include <conio.h>  #include <string.h> // arquivo de cabeçalho para trabalhar com strings   void main()  {  char Nome[30]; // declara uma string que poderá armazenar até 29 caracteres !!  clsrscr();  strcpy(Nome, "Jose da Silva"); // atribui "Jose da Silva" para a variável Nome  printf("O funcionário %s foi transferido", Nome); // no lugar de %s aparecerá o  // conteúdo da variável Nome getch();  }