Your SlideShare is downloading. ×
Programando microcontroladores pic março
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Programando microcontroladores pic março

1,133

Published on

1 Comment
1 Like
Statistics
Notes
  • não estou recebendo os emails de download =(
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
1,133
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
90
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. 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.
  • 28. 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.
  • 29. 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
  • 30. 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.
  • 31. E para aqueles que felizmente encontra-se em um degrau mais elevado, espera-se que a obra venha somar algo mais a sua carreira.
  • 32. 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).
  • 33. 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
  • 34. Os microcontroladores PIC, reúne em um único chip todos os circuitos necessários para o desenvolvimento de um sistema digital programável,
  • 35. 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
  • 36. 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,
  • 37. 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.
  • 38. 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.
  • 39. Componente integrado que em um único dispositivo contem todos os circuitos necessários para realizar um completo sistema digital programável.
  • 40. 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
  • 41. 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).
  • 42. 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.
  • 43. Compilação Compilar significa traduzir um programa escrito em assembly (mneumônicos) para linguagem de máquina (números).
  • 44. 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.
  • 45. Emulação A emulação é um recurso de desenvolvimento que possibilita testes em tempo real.
  • 46. 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
  • 47. 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);
  • 48. 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;
  • 49. 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.
  • 50. 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
  • 51. 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. .
  • 52. É um sanduíche de diferentes materiais semicondutores em quantidade e disposição diferentes intercalados. Pode-se obter assim transistores PNP e NPN
  • 53. 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.
  • 54. 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.
  • 55. 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.
  • 56. 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.
  • 57. 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.
  • 58. 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).
  • 59. Para trabalharmos com as portas lógicas faz-se o uso de uma tabela verdade, a qual cada função tem a sua.
  • 60. nível alto em sua saída se as suas entradas tiverem nível baixo.
  • 61. 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.
  • 62. 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.
  • 63. 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.
  • 64. As portas XNOR apresentam princípio semelhante à função XNOR, apenas com o detalhe de ter saídas invertidas.
  • 65. 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.
  • 66. 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.
  • 67. 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.
  • 68. 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.
  • 69. 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.
  • 70. 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.
  • 71. 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.
  • 72. 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
  • 73. 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)
  • 74. A conversão Hexadecimal para decimal multiplica o valor do digito pela potência de 16, fazendo a somatória. Ex: 8AB1 = 35.505
  • 75. 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).
  • 76. 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.
  • 77. 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.
  • 78. Para conversão de octal para decimal, multiplicamos o numeral por 8 elevado a potencia correspondente.
  • 79. 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.
  • 80. 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
  • 81. As funções lógicas booleanas são utilizadas quase que na totalidade das aplicações com microcontroladores.
  • 82. 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.
  • 83. 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.
  • 84. 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
  • 85. 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.
  • 86. 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.
  • 87. MEMÓRIAS E MICROCONTROLADORES  SENDO AS PRINCIPAIS TECNOLOGIAS DEFINIDAS COMO MEMÓRIAS  ROM,  PROM  EPROM  EEPROM  FLASH  RAM. 525 turma 523
  • 88.  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
  • 89.  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
  • 90.  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
  • 91. 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
  • 92.  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
  • 93. 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
  • 94. 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
  • 95. 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.
  • 96. 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.
  • 97. 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:
  • 98. 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.
  • 99. 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).
  • 100. 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
  • 101. 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 -
  • 102. 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
  • 103. - 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
  • 104. - 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
  • 105. - 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
  • 106. 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
  • 107. 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
  • 108. DEFINIÇÃO DA CPU  CISC: (Complex Instruction Set Computer)  RISC: (Reduced Instruction Set Computer)  SISC.(Specific Instruction Set Computer)
  • 109. 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.
  • 110. 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.
  • 111. 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.
  • 112. 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,
  • 113. SISC.(Specific Instruction Set Computer) processadores com conjunto de instruções específicas
  • 114. 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).
  • 115.  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.
  • 116. ORGANIZAÇÃO DA MEMÓRIA
  • 117. A PILHA OU STACK
  • 118. 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.,
  • 119. 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
  • 120. 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.
  • 121. 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).
  • 122. 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
  • 123. 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.
  • 124. 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.
  • 125. 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
  • 126. 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
  • 127. 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.
  • 128. 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
  • 129. 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.
  • 130. 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.
  • 131. 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.
  • 132. 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
  • 133. 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
  • 134. 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
  • 135. EXEMPLO
  • 136. 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.
  • 137. 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
  • 138. 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.
  • 139. 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.
  • 140. 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.
  • 141. 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
  • 142. 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
  • 143. 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.
  • 144. 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
  • 145. 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.
  • 146. 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.
  • 147.  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
  • 148. 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.
  • 149. 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 };
  • 150. 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
  • 151. 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 “*/”.
  • 152. 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.
  • 153. 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.
  • 154. 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.
  • 155. 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;  ......  }
  • 156. 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.
  • 157. 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
  • 158. 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)
  • 159.  (alfanuméricasLetras ) Aa até Zz  ; Dígitos (numéricos) - 0 até 9;  Operadores;  Tipos de dados.
  • 160. OPERADORES E SÍMBOLOS ESPECIAIS
  • 161. 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.
  • 162.  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  };
  • 163. 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.
  • 164. 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 }; };
  • 165. 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.
  • 166. 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;”.
  • 167. 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.
  • 168. 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.
  • 169. Os comandos são: IF, WHILE, DO, FOR, SWITCH, CASE, RETURN, GOTO, LABEL, BREAK, CONTINUE.
  • 170. 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
  • 171. 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:
  • 172. 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  };
  • 173. 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:
  • 174. 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 ) ;  };
  • 175. - 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.
  • 176. 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
  • 177. 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
  • 178. 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.
  • 179. 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
  • 180. 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”
  • 181. STRINGS  Uma String é uma seqüência de caracteres entre aspas duplas:  "exemplo de uma string em C".
  • 182. 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
  • 183. 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.
  • 184. 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.
  • 185. 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
  • 186. 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 }
  • 187. IMPRESSÃO DE INTEIROS COM "PRINTF"  Para imprimir um inteiro com printf usa-se o símbolo %d
  • 188. 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  }
  • 189. 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  }
  • 190. 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  }
  • 191. 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.
  • 192.  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.
  • 193. 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.
  • 194.  #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   } 
  • 195. 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;
  • 196. 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.
  • 197. 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.
  • 198. 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
  • 199. 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.
  • 200. ATRIBUIÇÃO COM STRINGS  Atribuição com strings  As atribuições de valores a strings devem ser feitas através da função strcpy
  • 201. // 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();  }

×