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.
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,
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.
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;
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.
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).
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.
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.
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,
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.
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.
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
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
};
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.
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:
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:
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.
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();
}