Baixe o app para aproveitar ainda mais
Prévia do material em texto
MICROPROCESSADOR COMERCIAL, TÉCNICAS DE PROGRAMAÇÃO EM ASSEMBLY E INTRODUÇÃO A MICROCONTROLADORES 4 UNIDADE SER_CA_ELEIND_UNI4.indd 89 27/09/2019 17:35:24 Objetivos da unidade Tópicos de estudo Apresentar o microprocessador comercial; Abordar o conjunto de instruções de um microprocessador comercial; Explicar a lei de Moore e a evolução dos microprocessadores comerciais; Conceituar a linguagem de programação Assembly; Demonstrar como é escrito um programa em Assembly; Explicitar as vantagens e desvantagens da linguagem Assembly; Definir microcontroladores; Explorar as diferenças entre um microprocessador e um microcontrolador; Introduzir os microcontroladores PIC e Arduino. Microprocessador comercial Conceitos e definições Instruções de máquina A Lei de Moore Técnicas de programação em Assembly Vantagens e desvantagens Programando em Assembly Introdução aos microcontrola- dores Microcontroladores PIC Arduino ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 90 SER_CA_ELEIND_UNI4.indd 90 27/09/2019 17:35:24 Microprocessador comercial Durante o processo evolutivo, foram projetados e construídos inúmeros ti- pos de computadores, dos quais alguns causaram um impacto signifi cativo, inspirando os cientistas e pesquisadores em novas ideias e desenvolvimentos inovadores. Com base nas pesquisas de Andrews S. Tanenbaum e Todd Austin, publicadas no livro Organização estruturada de computadores, de 2013, vamos ex- por alguns dos principais pontos da história dos computadores. Blaise Pascal (1623–1662) foi o primeiro cientista a construir uma máquina operacional para realizar cálculos. Construída em 1642, ela dispunha de engre- nagens, funcionava com uma manivela e realizava operações de adição e subtra- ção. Após cerca de três décadas, o matemático alemão Gottfried Wilhelm Von Leibniz (1646–1716) construiu uma máquina mecânica que executava operações de multiplicação e divisão. Em 1822, Charles Babbage (1792–1871), inventor do velocímetro e professor de matemática da Universidade de Cambridge, projetou e construiu sua primeira máquina diferencial. Assim como a máquina de Pascal, esse dispositivo fazia operações de soma e subtração, calculando tabelas para a navegação marítima. Na verdade, a máquina foi projetada para executar um único algoritmo: o méto- do de diferenças fi nitas, que usava polinômios. Um desenvolvimento importante que remonta ao fi nal da década de 1930 foi o surgimento das máquinas calculadoras automáticas. Construídas por Konrad Zuse, estudante alemão de Engenharia, as máquinas utilizavam relés eletromag- néticos. Mesmo com a destruição delas durante a Segunda Guerra Mundial, Kon- rad Zuse se solidifi cou como um dos pioneiros da área. Mais tarde, nos Estados Unidos da América, John Atanasoff , no Iowa State College, e George Stibbitz, no Bell Laboratories, projetaram calculadoras auto- máticas utilizando aritmética binária e memória composta de capacitores. Em 1944, Howard Aiken desenvolveu a MARK I, uma máquina automática que utilizava relés, possuía 72 palavras de 23 algarismos decimais cada, além de um tempo de instrução da ordem de 6 segundos. Uma fi ta de papel perfurada era utilizada para a entrada e a saída das palavras. Quando Howard concluiu sua sucessora, a MARK II, as máquinas de relés já estavam obsoletas, em razão do desenvolvimento da Eletrônica. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 91 SER_CA_ELEIND_UNI4.indd 91 27/09/2019 17:35:25 O primeiro computador, o ENIAC (Electronic Numeral Integrator and Calculator), teve seu desenvolvimento iniciado em 1943, mas só se tornou operacional após a Segunda Guerra Mundial. Ele pesava 30 toneladas, media 5,50 m de altura e 25 m de comprimento, ocupando 180 m² de área construída. Possuía em torno de 70 mil resistores e aproximadamente 18.000 válvulas a vácuo! Quando acionado pela pri- meira vez, consumiu tanta energia que as luzes da Filadélfia piscaram! O UNIVAC (Universal Automatic Computer) se tornou, em 1951, o primeiro com- putador a lidar com dados numéricos e alfabéticos com mais facilidade. Também foi o primeiro disponível comercialmente, sendo utilizado para o censo americano da década de 1950. Os computadores de primeira geração foram superados entre o fim da dé- cada de 1950 e início de 1960, devido à invenção do transistor, proporcionada em 1947 por John Bardeen, Walter Houser Brattain e William Bradford Shockley. Como resultado da invenção, Bardeen, Brattain e Shockley foram contemplados com o Prêmio Nobel de Física em 1956. Esses computadores de segunda geração, os transistorizados, já eram capazes de fazer um milhão de ope- rações por segundo. Foram, por sua vez, superados pelos computadores de terceira geração, com circuitos in- tegrados, em meados de 1960 e final de 1970. O início da década de 1980 foi caracterizado pelo desenvolvimento do microprocessador e pela evolução dos microcomputadores e computado- res pessoais, tendo em vista a tecnolo- gia de integração VLSI (Very Large Scale Integration – integração em escala muito grande), que possibilitou a inserção de milhões de transistores em um único chip. A partir do ano 2000 até os dias atuais a Eletrônica, a Microeletrônica e a Na- noeletrônica, tanto analógica quanto digital, vêm se desenvolvendo rapidamen- te e de forma contínua, permitindo ao ser humano explorar novos horizontes com o desenvolvimento de tecnologias de hardware, software e aplicativas de última geração, caracterizando a computação ubíqua. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 92 SER_CA_ELEIND_UNI4.indd 92 27/09/2019 17:35:30 CITANDO “A indústria de computadores está avançando como nenhuma outra. A força propulsora primária é a capacidade dos fabricantes de chips de empacotar cada vez mais transistores por chip todo ano. Mais transisto- res, que são minúsculos interruptores eletrônicos, signifi cam memórias maiores e processadores mais poderosos. Gordon Moore, cofundador e ex-presidente do conselho da Intel, certa vez disse, brincando, que, se a tecnologia da aviação tivesse progredido tão depressa quanto a tecnolo- gia de computadores, um avião custaria 500 dólares e daria uma volta na Terra em 20 minutos com 20 litros de gasolina. Entretanto, seria do tama- nho de uma caixa de sapatos”. (TANENBAUM; AUSTIN, 2013, p. 22). Conceitos e definições O microprocessador defi ne-se como um dispositivo lógico com funções de acessar, controlar e executar instruções existentes da memória principal. A opera- ção do microprocessador é determinada pelas instruções que ele executa, conhe- cidas como instruções de máquina ou do computador. Em tempo, as diferentes instruções que o processador executa são conhecidas como conjunto de instru- ções (instruction set) do processador. É importante ressaltar que, para o programa- dor, a arquitetura de um processador pode ser defi nida pelo conjunto de instru- ções, pelo endereçamento, bem como pelos registradores de instruções. Cada tipo de microprocessador tem o seu próprio conjunto de instruções mnemônicas, que representam os códigos binários das instruções. Vale ressaltar que a linguagem Assembly uti- liza o conjunto de instruções para criar programas para o microprocessador. Uma vez que a linguagem Assem- bly está relacionada com linguagem de máquina (instruções em código binário), ela é classifi cada como linguagem de baixo nível. Basicamente, o conjunto de instruções é a parte que estabelece a fronteira entre o soft- ware e o hardware – isto é, o conjunto de instru- ções que permite tanto a movimentação de dados quanto a execução das operações no microprocessador. A partir daí, constatamos que a operação de uma CPU é determinada pelas instruções que ela executa, ou seja, pelo conjunto de instruções de máquina. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 93 SER_CA_ELEIND_UNI4.indd 93 27/09/2019 17:35:30 Fonte: STALLINGS, 2010, p. 287. (Adaptado). Instruções demáquina De acordo com os estudos de William Stallings no livro Arquitetura e organiza- ção de computadores, de 2010, vamos conhecer um pouco sobre tais instruções de máquina, bem como suas características, elementos e formas representati- vas (representação da instrução). É necessário que as instruções de máquina tenham as informações neces- sárias para que a CPU possa executá-las. Nesse sentido, as referidas instruções possuem alguns elementos, são eles: • Código de operação (opcode): código binário que especifi ca a operação a ser realizada. Os opcodes são representados por abreviações, conhecidos como mnemônicos (por exemplo, ADD, SUB, MPY e DIV); • Referência ao operando fonte: a operação pode envolver um ou mais ope- randos fontes, ou seja, que são entradas para a operação; • Referência ao operando destino: a operação pode produzir um resultado; • Referência à próxima instrução: informa à CPU onde fazer a busca da próxima instrução após o término de uma. O Diagrama 1 representa um esquema de estados do ciclo de instruções, mostrando as etapas envolvidas na execução da instrução. Observe! DIAGRAMA 1. ESTADO DO CICLO DE INSTRUÇÕES Busca da instrução Múltiplos operandos Múltiplos resultados Cálculo do endereço de instrução Operação dos dados Cálculo do endereço do operando Decodifi cação da operação da instrução Cálculo do endereço do operando Armazenamento do operando Busca do operando Instrução completa, busca da próxima instrução Retorno de string ou vetor de dados ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 94 SER_CA_ELEIND_UNI4.indd 94 27/09/2019 17:35:31 Vamos entender a função de cada estado do ciclo de instruções mostrado no Diagrama 1. Nestas condições, os estados podem ser descritos da seguinte forma: • Cálculo de endereço de instrução (instruction address calculation): deter- mina o endereço da próxima instrução que será executada; • Busca da instrução (instruction fetch): realiza a leitura da instrução do seu local da memória para o microprocessador; • Decodificação da operação da instrução (instruction operation deco- ding): analisa a instrução para determinar o tipo de operação a ser realizado e o(s) operando(s) a ser(em) utilizado(s); • Cálculo do endereço do operando (operation address calculation): se a operação envolve referência a um operando na memória ou disponível via E/S (entrada/saída), então determina seu endereço; • Busca do operando (operation fetch): acessa (busca) o operando na me- mória ou realiza a leitura da E/S; • Operação dos dados (data operation): realiza a operação indicada na ins- trução; • Armazenamento do operando (operand store): grava (escreve) o resultado na memória ou envia para a E/S. Com relação ao operando fonte e ao operando destino, é possível que eles estejam localizados em uma das seguintes áreas: na memória principal ou vir- tual, no registrador do processador, no próprio campo de instrução ou no dis- positivo de E/S. Representação de uma instrução No microprocessador, cada instrução é representada por uma sequência de bits. As instruções são divididas em campos, de acordo com os seus elementos (formato de instrução). A Figura 1 mostra um exemplo de formato de instrução. Observe! 4 Bits 6 Bits 16 Bits 6 Bits Opcode Referência ao operando Referência ao operando Figura 1. Formato de instrução. Fonte: STALLINGS, 2010, p. 288. (Adaptado). ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 95 SER_CA_ELEIND_UNI4.indd 95 27/09/2019 17:35:31 No decorrer da execução, uma instrução é transferida para um registrador de instrução (IR) no microprocessador, que realiza a operação exigida. Vale ressaltar que torna-se difícil para o programador lidar com representações binárias de ins- truções máquina. Por isso, é comum utilizar uma representação simbólica para elas. Desta forma, os opcodes são representados pelas tais abreviações, que indicam a operação que será realizada. Observe alguns exemplos: • ADD – Adiciona; • SUB – Subtrai; • MPY – Multiplica; • DIV – Divide; • LOAD – Carrega dados da memória; • STOR – Armazena dados na memória. Em tempo, os operandos também podem ser representados simbolicamente, por exemplo, a instrução ADD R, Y pode levar à seguinte leitura: somar o valor conti- do no local de dados Y (posição Y) com o conteúdo do registrador R. Neste exemplo, Y refere-se ao endereço de um local na memória, e R refere-se a um registrador. Tipos de instrução Vamos considerar uma instrução em linguagem de alto nível que pode ser ex- pressa em JavaScript, Phyton, PHP ou C#, ou seja, X = X + Y. Essa instrução, que na verdade é um comando soma, realiza a soma do valor armazenado em Y ao valor em X, colocando o resultado em X. Utilizando as instruções de máquina, como este comando soma poderia ser realizado? Partindo do pressuposto que as variáveis X e Y correspondem aos locais 513 e 514 de memória, a instrução (comando soma) é realizada por meio de três instruções: 1. Carregue um registrador com o conteúdo do local de memória 513; 2. Some o conteúdo do local de memória 514 ao registrador; 3. Armazene o conteúdo do registrador no local de memória 513. Assim, podemos verificar que uma única instrução de alto nível implica em três instruções de máquina (baixo nível). Além disso, para executar um programa escrito em uma linguagem de alto nível, é necessário traduzi-lo para linguagem de máqui- na. Em tempo, é possível dizer que o conjunto de instruções de máquina deve ser suficiente para expressar qualquer instrução de uma linguagem de alto nível. Nesse sentido, podemos determinar os tipos de instrução como: ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 96 SER_CA_ELEIND_UNI4.indd 96 27/09/2019 17:35:31 • Processamento de dados: instruções aritméticas e lógicas; • Armazenamento de dados: movimentação de dados para dentro ou fora do registrador e/ou memória; • Movimentação de dados: instruções de E/S (entrada e saída); • Controle: instruções de teste e desvio. Número de endereços A arquitetura do microprocessador pode ser representada pelo número de en- dereços contidos em cada instrução. Diante disso, na maioria das arquiteturas exis- tentes, praticamente todas as instruções possuem um, dois ou três endereços de operando, com o endereço da próxima instrução implícito, obtido pelo contador de programa do próprio computador. É importante ressaltar que a quantidade de endereços por instrução é uma deci- são de projeto. Isto signifi ca que, quanto mais endereços por instrução, consequen- temente as instruções serão maiores e mais complexas, fazendo-se necessário mais registradores. Em contra partida, as operações entre os registradores serão mais rápidas, exigindo menor quantidade de instruções por programa. Por outro lado, quanto menor a quantidade de endereços, menor é a complexi- dade das instruções, que se fazem menores e mais primitivas. Porém, será neces- sária uma maior quantidade delas por programa, resultando em maior tempo de execução, bem como em programas mais complexos e maiores. A lei de Moore Em 18 de julho de 1968, o físico e coinventor do circuito integrado de silício, Robert Noyce, o químico e físico Gordon Earl Moore e o investidor Arthur Rock fun- daram a N M Electronics que, pouco depois, passou a se chamar Intel Corporation. A empresa, por sua vez, iniciou suas operações produzin- do circuitos integrados para a memória RAM e, após alguns anos, entrou no mercado de manufatura de microproces- sadores. A seguir, apresentaremos uma breve evolução dos microprocessadores comerciais utilizados em com- putadores. Vamos conferir? A Tabela 1 mostra a evolução dos microprocessadores co- merciais. Observe! ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 97 SER_CA_ELEIND_UNI4.indd 97 27/09/2019 17:35:31 TABELA 1. EVOLUÇÃO DOS MICROPROCESSADORES COMERCIAIS CHIP DATA MHZ TRANS. MEMÓRIA NOTAS 4004 4/1971 0,108 2.300 640 Primeiro processador em um chip 8008 4/1972 0,108 3.500 16 KB Primeiromicroprocessador de 8 bits 8080 4/1974 2 6.000 64 KB Primeira CPU de uso geral em um chip 8086 6/1978 5-10 29.000 1 MB Primeira CPU de 16 bits em um chip 8088 6/1979 5-8 29.000 1 MB Usada no IBM PC 80286 2/1982 8-12 134.000 16 MB Com proteção de memória 80386 10/1985 16-33 C275.000 4 GB Primeira CPU de 32 bits 80486 4/1989 25-100 1,2 M 4 GB Memória cache de 8 KB embutida Pentium 3/1993 60-233 3,1 M 4 GB Dois pipelines; modelos posteriores tinham MMX Pentium Pro 3/1995 150-200 5,5 M 4 GB Dois níveis de cache embutidos Pentium II 5/1997 233-450 7,5 M 4 GB Pentium Pro mais instruções MMX Pentium III 2/1999 650-1.400 9,5 M 4 GB Instruções SSE para gráfi cos em 3D Pentium 4 11/2000 1.300-3.800 42 M 4 GB Hyperthreading; mais instruções SSE Core Duo 1/2006 1.600-3.200 152 M 2 GB Dual cores em um único substrato Core 7/2006 1.200-3.200 410 M 64 GB Arquitetura quad core de 64 bits Core i7 1/2011 1.100-3.300 1.160 M 24 GB Processador gráfi co integrado 4004 8008 4/1971 4/1972 8080 4/1972 8086 0,108 4/1974 8086 0,108 4/1974 8088 2.300 0,108 6/1978 80286 2.300 2 80286 3.500 6/1979 80386 640 5-10 2/1982 80486 6.000 10/1985 16 KB 10/1985 Pentium Primeiro processador em 29.000 8-12 4/1989 Pentium Pro Primeiro processador em Primeiro microprocessador 64 KB 29.000 16-33 Pentium Pro Primeiro processador em um chip Primeiro microprocessador 29.000 134.000 3/1993 Pentium Pro Primeiro processador em Primeiro microprocessador de 8 bits Primeira CPU de uso geral 1 MB 134.000 25-100 3/1995 Primeiro microprocessador de 8 bits Primeira CPU de uso geral 1 MB C275.000 60-233 3/1995 Primeiro microprocessador Primeira CPU de uso geral em um chip Primeira CPU de 16 bits em 16 MB 60-233 Primeira CPU de uso geral em um chip Primeira CPU de 16 bits em 16 MB 1,2 M 150-200 Primeira CPU de uso geral Primeira CPU de 16 bits em um chip Usada no IBM PC 4 GB 3,1 M 150-200 Primeira CPU de 16 bits em um chip Usada no IBM PC Com proteção de memória 4 GB 3,1 M Primeira CPU de 16 bits em Usada no IBM PC Com proteção de memória 4 GB 5,5 M Usada no IBM PC Com proteção de memória Primeira CPU de 32 bits 4 GB Com proteção de memória Primeira CPU de 32 bits Memória cache de 8 KB Com proteção de memória Primeira CPU de 32 bits Memória cache de 8 KB 4 GB Primeira CPU de 32 bits Memória cache de 8 KB embutida Dois pipelines; modelos posteriores tinham MMX Memória cache de 8 KB Dois pipelines; modelos posteriores tinham MMX Dois pipelines; modelos posteriores tinham MMX Dois níveis de cache Dois pipelines; modelos posteriores tinham MMX Dois níveis de cache embutidos posteriores tinham MMX Dois níveis de cache embutidos Pentium II Pentium II Pentium III Pentium III 5/1997 Pentium 4 Pentium 4 233-450 2/1999 Core Duo 233-450 11/2000 Core Duo 650-1.400 11/2000 Core 7,5 M 650-1.400 1/2006 7,5 M 1.300-3.800 Core i7 9,5 M 1.300-3.800 1.600-3.200 7/2006 4 GB 1.600-3.200 42 M 1.600-3.200 1.200-3.200 1/2011 Pentium Pro mais instruções 4 GB 1.200-3.200 Pentium Pro mais instruções 152 M 1.100-3.300 Pentium Pro mais instruções Instruções SSE para gráfi cos 4 GB 410 M 1.100-3.300 Pentium Pro mais instruções MMX Instruções SSE para gráfi cos 410 M Pentium Pro mais instruções Instruções SSE para gráfi cos em 3D 2 GB 1.160 M Pentium Pro mais instruções Instruções SSE para gráfi cos em 3D Hyperthreading 64 GB 1.160 M Instruções SSE para gráfi cos Hyperthreading instruções SSE Dual cores em um único 64 GB ; mais instruções SSE Dual cores em um único 24 GB Dual cores em um único substrato Arquitetura quad core de Dual cores em um único substrato Arquitetura quad core de Arquitetura quad core de 64 bits Processador gráfi co Arquitetura quad core de Processador gráfi co integrado Processador gráfi co integrado Processador gráfi co Fonte: TANENBAUM; AUSTIN, 2013, p. 31. (Adaptado). ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 98 SER_CA_ELEIND_UNI4.indd 98 27/09/2019 17:35:32 Tecendo alguns comentários sobre a Tabela 1, constatamos que o primeiro microprocessador comercial foi o Intel 4004, fabricado em 1971. Ele era de 4 bits, integrava 2.300 transistores e possuía uma memória de 640 bytes. Passados aproximadamente 22 anos, surge em 1993 o processador Intel Pen- tium, integrando 3,1 milhões de transistores, lançados com clocks de 60 MHz. Gra- dualmente surgiram versões de 75, 90, 120, 133, 150, 166, 200, e 233 MHz. No ano 2000, surge o Pentium 4, integrando 42 milhões de transistores com versões de clock variando entre 1300 e 3800 MHz. Em 2006, a Intel alterou o nome da marca Pentium para Core e lançou um chip dual core, conhecido como Core duo. Ele integrava 152 milhões de transistores, operando com versões de clock entre 1600 e 3200 MHz. A série Core evolui com o i3, i5, i7 e i9, caracteri- zando um avanço significativo na integração dos transistores e nas tecnologias gráficas e de inteligência artificial. O Gráfico 1 apresenta a lei de Moore. Esta lei surgiu em 1965 através de um conceito estabelecido por Gordon Earle Moore, cuja afirmação básica era a de que o poder de processamento dos computadores dobraria a cada dezoito me- ses em razão do processo de integração dos transistores. Observe! Nú m er os d e tra ns ito re s Ano 4K 1K 16K 256K 4M 64M 256M 1G 2G 64K 1M 16M 512M 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 100G 10G 1G 100M 10M 1M 100K 10K 1K 100 10 1 GRÁFICO 1. LEI DE MOORE Fonte: TANENBAUN; AUSTIN, 2013, p. 22. (Adaptado). ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 99 SER_CA_ELEIND_UNI4.indd 99 27/09/2019 17:35:32 CURIOSIDADE Jensen Huang, executivo-chefe da fabricante de chips Nvidia, fez um declaração de impacto na CES (Consumer Electronics Show) de 2019, a maior feira de tecnologia do mundo, que aconteceu em Las Vegas, nos Estados Unidos. Segundo Huang, a Lei de Moore “não é mais possível” – ela está morta, porque o mercado de tecnologia não consegue mais por em prática o que ela prevê. É possível ler mais sobre isso na matéria “O que é a Lei de Moore e por que você deve se preocupar com o fi m dela”, publicada pelo jornalista Rodrigo Trindade na UOL em 2019. Técnicas de programação em Assembly Nesta seção iremos conhecer um pouco sobre a linguagem Assembly, suas técnicas de programação, representações simbólicas, vantagens e desvantagens. Então, vamos aos estudos? A linguagem Assembly é considerada uma linguagem de máquina de baixo nível. Ela utiliza palavras abreviadas ou representações simbólicas, os já mencio- nados mnemônicos, para cada instrução de máquina, objetivando uma melhor compreensão das operações por parte dos profi ssionais da área, como progra- madores. Vale ressaltar que a tradução da linguagem Assembly para os códigos de máquina do processador, isto é, para códigos binários, é realizada por um programa conhecido como assembler (ou montador). A seguir, apresentamos dois exemplos de instruções Assembly. Confi ra! • MOV R1, R2: nesta instrução temos o mnemônico MOV (abreviação de MOVE) e dois registradores R1 e R2 como parâmetros. Quando o processador executa esta instrução, comanda o movimento do conteúdo de R2 para R1. • ADD R1, R2: nesta instrução dispomos do mnemônico ADD (abreviação de ADDITION) e dois registradores R1 e R2 como parâmetros. Quando o processa- dor executa esta instrução, ele comanda a adição do conteúdo de R1 ao conteú- do de R2, e o resultado é armazenado em R1. Vantagens e desvantagens Assim como toda linguagem de programação, a linguagem Assembly apresen- ta algumas vantagens e desvantagens. A seguir apresentaremos algumas ques- tões que tornam a linguagem de programação Assembly mais proveitosa ou não. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 100 SER_CA_ELEIND_UNI4.indd 100 27/09/2019 17:35:32Vamos conferir? Entre as vantagens, temos: • Otimização do código, para aproveitar ao máximo as características intrín- secas do hardware (microcontrolador e/ou microprocessador); • Existência de assemblers (programas oferecidos pelos próprios pelos fabri- cantes) para todos os microprocessadores; • Otimização de espaço na memória; • Rapidez na execução do código. Quanto às desvantagens, podemos sublinhar: • Maior tempo na decomposição de cada tarefa em conjuntos de instruções e/ou operações; • Maior conhecimento de programação por parte do programador; • Condição desproporcional entre o conjunto de instruções e as tarefas que o microprocessador normalmente executa; • Não apresentar tanta portabilidade, ou seja, a linguagem é portável para uma família de microprocessadores e não para uma estação de trabalho, por exemplo; • Maior custo de desenvolvimento, tendo em vista a baixa expressividade en- tre os profi ssionais de Informática. Isto signifi ca que desenvolver em assemblers requer maior quantidade de programadores experientes. Programando em Assembly Conforme mencionamos, a linguagem Assembly é uma lingua- gem de montagem, e programar nela é escrever um código en- tendido pelo hardware. Exemplo disso é a programação dos mi- croprocessadores e dos microcontroladores. Este programa pode ser escrito em um editor de textos e depois copiado para ambiente de programação. Este ambiente pode ser o MPLAB. EXPLICANDO MPLAB é uma ferramenta utilizada para o desenvolvimento de programas com o microcontrolador PIC, uma vez que a compilação, a simulação e a gravação são executadas no mesmo ambiente de programação. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 101 SER_CA_ELEIND_UNI4.indd 101 27/09/2019 17:35:32 O assembler interpreta as instruções escritas em linguagem Assembly como uma sequência de algarismos 0 e 1, que carregam significado para a lógica opera- cional do microcontrolador. Vamos considerar a instrução RETURN, que o micro- controlador executa para retornar de um subprograma. Traduzindo-a por meio do assembler, obtemos uma série de 1 e 0 correspondentes a 14 bits que o microcon- trolador interpreta. Ou seja: RETURN 00 0000 0000 1000. O resultado da tradução é realizado por um arquivo de execução, conhecido por HEX. Esta nomenclatura provém de sua representação hexadecimal. Uma vez produzido, o referido arquivo é inserido no microcontrolador pelo programador. A linguagem Assembly possui alguns elementos básicos, como os labels, as instruções, os operandos, as diretivas e os comentários. Tratemos de cada um deles a seguir. • Labels (rótulos): é uma designação textual de uma linha em um programa ou o início de um conjunto de linhas. É fundamental que um rótulo seja iniciado com uma letra do alfabeto ou com um traço baixo (ou seja: _). Também é importante que o rótulo inicie na primeira coluna do programa. Vale ressaltar que a extensão de um rótulo pode ir até 32 caracteres. • Instruções: as instruções são específicas para cada microcontrolador. Diante disso, é necessário conhecer suas instruções. A forma de escrever uma instrução é designada por “sintaxe”. • Operandos: são os elementos necessários para que a instrução possa ser executada. Normalmente são registros, variáveis e constantes. As constantes são designadas por “literais”. • Diretivas: as diretivas independem do tipo de micro- controlador, sendo uma característica inerente à própria linguagem de programação. Elas utilizam variáveis ou re- gistros para satisfazer determinados propósitos, por exem- plo, NIVEL pode ser uma designação para uma variável loca- lizada no endereço 0Dh da memória principal (memória RAM), tendo em vista que é mais fácil para o programador recordar de uma palavra do que um endereço de memória. • Comentários: é um texto que o programador escreve no programa a fim de torná-lo mais claro e legível. Ele é inserido após uma instrução e deve iniciar com ponto-e-vírgula (;). ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 102 SER_CA_ELEIND_UNI4.indd 102 27/09/2019 17:35:32 Introdução aos microcontroladores Vamos iniciar esta seção com uma pergunta: Qual é a diferença entre um microprocessador e um microcontrolador? Um microcontrolador difere de um microprocessador em vários aspectos. O primeiro refere-se à funcionalidade: para que um microprocessador execute suas funções, outros componentes externos devem ser conectados, para receber, en- viar e processar os dados, tais como a memória principal (RAM) e o disco rígido. Por outro lado, o microcontrolador é projetado e desenvolvido para integrar inúmeros componentes em um único circuito integrado. Nestas condições, pode- mos dizer que nenhum componente externo faz-se necessário para seu funciona- mento interno, pois todos os referidos componentes encontram-se integrados no chip microcontrolado. Podemos defi nir microcontrolador como um circuito integrado programável utilizado no controle de processos que exigem uma lógica computacional, como processos automatizados das indústrias manufatureiras. Ainda podemos encon- trá-los em impressoras, elevadores, motores de corrente contínua, servomotores e motores de passo, entre outras aplicações. Microcontroladores PIC O microcontrolador PIC (Programmable Intelligent Computer) é um circuito inte- grado lógico que possui inúmeros componentes internos, constituindo um siste- ma digital programável totalmente controlado. Externamente, o PIC pode ser visto como um circuito integrado lógico da fa- mília TTL (Transistor-Transistor Logic) ou mesmo como um circuito integrado CMOS (Complementary Metal Oxide Semiconductor). Porém, internamente, possui inúme- ros componentes, o que constitui um típico sistema microprocessa- do. Os microcontroladores dispõem de uma CPU, de uma memória PROM (memória programável somente para leitura), de uma me- mória RAM (memória de acesso aleatório), linhas de E/S, barramentos, clock, registrador, contador, entre outros. O microcontrolador PIC está disponível em vários modelos (famílias) para atender às mais diversas exigên- ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 103 SER_CA_ELEIND_UNI4.indd 103 27/09/2019 17:35:32 cias de projetos e aplicações, possuindo sobretudo boa diversidade de recursos, diversas capacidades de processamento e grande flexibilidade de aplicações. A Figura 2 apresenta a estrutura interna básica de um microcontrolador cons- tituído dos seguintes componentes: CPU (conjunto de registradores), comunicação serial (porta serial), memória, temporizador (contador), dispositivos (registrado- res) de entrada e de saída de dados, barramentos (barramentos de dados, de en- dereço e de controle) e watchdog (contador independente). Observe! Registro de entrada e saída SERIAL Referência Saída Entrada I/O CPU WATCHDOG Linhas de controle Endereços R/W Da do s Dados Dados MEMÓRIA TEMPORIZADOR Posição 0 Reg. de entrada Reg. de saída Registrador 1 Registrador 2 Registrador 3 Contador independente Posição 1 Posição n Contador Figura 2. Estrutura interna básica de um microcontrolador. Fonte: DIAGO; AMARAL; HORTA, 2011, p. 125. (Adaptado). ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 104 SER_CA_ELEIND_UNI4.indd 104 27/09/2019 17:35:33 Os microcontroladores PIC possuem algumas famílias. São elas: • Família PIC de 8 bits: PIC10 – 8 microcontroladores (6 pinos), PIC12 – 20 mi- crocontroladores (8 pinos), PIC16 – 155 microcontroladores (8 a 64 pinos) e PIC18 – 223 microcontroladores (18 a 100 pinos). Esta família permite várias aplicações que exigem economia de energia, alta compatibilidade e robustez. • Família PIC de 16 bits: PIC24, PIC3 e PIC33. Esta família integra 432 micro- controladores (12 a 122 pinos) e possui conversores AD/DA (analógico/digital e digital/analógico) de maior resolução com funções de processamento digital de sinais, bem como vários recursos, como USB e protocolo TCP/IP. • Família PIC de 32 bits: PIC32 com184 microcontroladores (28 a 144 pi- nos), por exemplo. Esta família é dedica- da a operações em pontos flutuantes. A frequência de operação é de até 200 MHz (contra 48 MHz das outras famílias), tem interfaces gráficas, áudio e controles para realizar multitarefas. É importante ressaltar que cada família de microcontrolador PIC difere uma da outra em vários fatores, como bits de configuração, tensão elétrica de alimenta- ção, frequência elétrica operacional, quantidade de pinos etc. Isto significa que um programa escrito para um microcontrolador de uma determinada família não irá funcionar adequadamente. No que se refere aos compiladores, podemos dizer que existem vários, cada qual necessitando de ambientes de programação distintos para atender às famílias de PICs. Alguns exemplos são os compiladores desenvolvidos pela Microchip Technology Inc.: MPLAB XC8, MPLAB XC16 e MPLAB XC32. Vale sa- lientar que estes compiladores suportam sistemas operacionais do tipo Linux, MacOS® e Windows®, bem como são compatíveis com as versões anteriores do MPLAB IDE. Para entender um pouco mais sobre os microcontroladores PIC, vamos conhe- cer a estrutura interna do microcontrolador PIC 16F628A apresentada na Figura 3. Confira! ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 105 SER_CA_ELEIND_UNI4.indd 105 27/09/2019 17:35:38 Figura 3. Estrutura interna do microcontrolador PIC 16F628A. Fonte: DIAGO; AMARAL; HORTA, 2011, p. 126. (Adaptado). Memória Flash do programa Programa Instrução 8 Level Stack (13 bits) Decodificação e controle de instrução Geração de timing Registradores de arquivos RAM PO RT A PO RT B FSR Status Contador 0 VREF Contador 1 CCP1 Contador 2 USART Comparador Data EEPROM W reg Contador de energização Oscilador Contador de inicialização Power-On Reset Contador independente Brown-out Reset Low-voltage Programmin Endereço MUX ULA RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/TOCK1/CMP2 RA5/MCLR/MCLR RA5/OSC2/CLKOUT RA7/OSC1/CLKIN RB0/INT RB1/RX/DT RB2/TX/CK RB3/CCP1 RB4/PGM RB5 RB6/T1OSO/T1CKI/PGD RB7/T1/OSI/PGD OS C 1 /C LK IN OS C 2 /C LK OU T 8 8 87 14 13 8 9 3 MCLR VOO VSS Analisando a Figura 3, observamos que o registrador W (work) está diretamen- te ligado à ULA, tendo em vista que uma das que das principais funções deste registrador é a transferência de dados. A memória de dados é conectada a um barramento de 8 bits, enquanto que a memória de programa (memória Flash) está conectada a um barramento de 14 bits para otimizar a execução do conjunto de instruções. Nota-se também que existem alguns blocos representativos, os quais são circuitos lógicos de memória EEPROM, timers, comparadores e portas seriais. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 106 SER_CA_ELEIND_UNI4.indd 106 27/09/2019 17:35:39 Nas portas A e B, localizadas no lado direito superior da Figura 3, existe o diagrama de pinos do microcontrolador. O encapsulamento pode ser do tipo DIP (Dual Inline Package). Também é pos- sível encontrar o PIC 16F628A em mais dois tipos de encapsulamentos: o SSOP (Shrink Small-Outline Package) e o QFN (Quad Flat No Leads). O microcontrolador PIC 16F628A pode ter o seu clock gerado por um oscilador externo de frequência máxima de 20 MHz ou por um oscilador interno de 4 MHz ou 37 kHz. Em todos os casos, o clock é dividido internamente por 4. Para fins de exemplo e análise, iremos considerar um clock de 4 MHz. Após a divisão interna por 4, resulta-se um clock interno de 1 MHz e um período de 1 µs. Este tempo é conhecido como ciclo de máquina, no qual cada etapa da instrução é executada. DIAGRAMA 2. FASES INTERNAS DO CLOCK DO MICROCONTROLADOR PIC 16F628A Extrair INST (PC) Fases internas do clock Extrair INST (PC + 1) Extrair INST (PC + 2) Exexutar INST (PC - 1) Exexutar INST (PC + 1) Exexutar INST (PC) OSC1 Q1 Q1 Q1 Q1 Q2 Q2 Q2 Q2 Q3 Q3 Q3 Q3 Q4 Q4 Q4 Q4 PC PC PC + 0 PC + 2 Fonte: DIAGO; AMARAL; HORTA, 2011, p. 127. (Adaptado). Analisando o Diagrama 2, observamos que, durante um ciclo, composto por quatro fases (Q1, Q2, Q3, Q4), enquanto uma instrução é executada, a próxima é acessada para ser executada no ciclo seguinte. Nestas condições, cada instrução é executada em um único ciclo. Em geral, as instruções são executadas em apenas um ciclo de máquina, exceto as que geram salto, como as chamadas de rotina e os saltos para outros endereços que não os da sequência normal do programa. Des- sa maneira, para um clock externo de 4 MHz, temos uma instrução simples, que leva 1 µs para ser executada, e aquelas que produzem salto levam 2 µs. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 107 SER_CA_ELEIND_UNI4.indd 107 27/09/2019 17:35:39 Arduino Arduino é uma plataforma de prototipagem (projeto/protótipo) eletrônica de software e de hardware livres (open source) e de placa única. Projetada com um microcontrolador Atmel Corporation AVR (microcontrolador RISC de 8 bits), a pla- taforma possui suporte de entrada/saída embutido e uma linguagem de progra- mação padrão, normalmente as linguagens C ou C++. O principal objetivo do Arduino é criar ferramentas acessíveis, com baixo custo, fl exíveis e fáceis de utilização, tanto para iniciantes quanto para profi ssionais da área computacional e/ou eletroeletrônica. Como exemplos de aplicação do Arduino, podemos mencionar: controle de semáforos, de contador binário, de sensores, de termômetros digitais, de servo- motores, entre muitas outras aplicações que envolvem acionamentos e controles microprocessados/microcontrolados. Os Arduinos utilizam a série de chips megaAVR, particularmente os ATmega8, ATmega168, ATmega328 e o ATmega1280. ASSISTA Para saber mais sobre o Arduino, assista ao vídeo pro- duzido pelo Manual do Mundo a respeito do assunto. E então? Vamos conferir? ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 108 SER_CA_ELEIND_UNI4.indd 108 27/09/2019 17:35:39 Sintetizando Nesta unidade, tivemos a oportunidade de conhecer três assuntos importan- tes no que concerne à eletrônica e os sistemas digitais. O primeiro assunto diz respeito aos microprocessadores comerciais. O segundo refere-se aos estudos sobre a linguagem de programação Assembly. Por fim, o terceiro assunto discu- tido foi sobre os microcontroladores. O microprocessador é um dispositivo lógico programável cuja operação é de- terminada pelas instruções que ele executa, conhecidas como instruções de má- quina. Tais instruções são conhecidas como conjunto de instruções. Cada tipo de microprocessador tem o seu próprio conjunto de instruções mnemônicas, que representam os códigos binários das instruções. Vale ressaltar que a linguagem Assembly utiliza o conjunto de instruções para criar programas para o microprocessador. Uma vez que a linguagem Assembly está relacionada com linguagem de máquina (instruções em código binário), é classificada como de baixo nível. Vimos que, no microprocessador, cada instrução é representada por uma se- quência de bits. No decorrer da execução, uma instrução é transferida para um registrador de instrução (IR) no microprocessador, que realiza a operação exigida. É comum utilizar uma representação simbólica para instruções de máquina. Desta forma, os opcodes são representados por abreviações, chamados mne- mônicos, que indicam a operação que será realizada. Observe alguns exemplos: ADD – Adiciona, SUB – Subtrai, MPY – Multiplica, DIV – Divide, LOAD – Carrega dados da memória e STOR – Armazena dados na memória. Quanto à linguagem Assembly, vimos que ela é uma linguagem que utiliza os já mencionados mnemônicos, visando a melhorar compreensão das operações por parte dos programadores. Sua tradução em códigos binários é realizada por um programa conhecido como assembler. Por fim, vimos microcontroladores. Um microcontrolador é projetado para integrar componentes em um único circuito integrado. Podemos dizer que ne- nhum componente externo torna-se necessáriopara o seu funcionamento in- terno, ao contrário dos microprocessadores. Além disso, constatamos que eles podem ser encontrados em distintas aplicações, como impressoras, elevado- res, servomotores etc. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 109 SER_CA_ELEIND_UNI4.indd 109 27/09/2019 17:35:39 O microcontrolador PIC pode ser visto como um circuito integrado lógico da fa- mília TTL ou mesmo como um circuito integrado CMOS, e está disponível em vários modelos, para atender às mais diversas exigências de projetos e aplicações espe- cíficas. É importante ressaltar que cada família de microcontrolador PIC difere em vários fatores. Finalmente, comentamos brevemente acerca do Arduino, uma plataforma de prototipagem eletrônica de software e de hardware livres e de placa única, que pos- sui suporte de entrada/saída embutido e uma linguagem de programação padrão – normalmente C ou C++. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 110 SER_CA_ELEIND_UNI4.indd 110 27/09/2019 17:35:39 Referências bibliográficas DIAGO, R.; AMARAL, V. M.; HORTA, E. Eletrônica: eletrônica digital. São Paulo: Fundação Padre Anchieta, 2011 (Coleção Técnica Interativa. Série Eletrônica, v. 4). MONTEIRO, M. A. Introdução à organização de computadores. 5. ed. Rio de Janeiro: LTC, 2012. O QUE É Arduino, afinal de contas? #ManualMaker Aula 4, Vídeo 1. Posta- do por Manual do Mundo. (17min. 2s.). Disponível em: <https://www.youtube. com/watch?v=sv9dDtYnE1g>. Acesso em: 4 set. 2019. OLIVEIRA, C. L. V. et al. Aprendendo Arduino: uma abordagem prática. Duque de Caxias: Katzen, 2018. PATTERSON, D.; HENNESSY, J. L. Organização e projeto de computadores: a interface hardware/software. Rio de Janeiro: Campus-Elsevier, 2005. PEREIRA, F. Microcontroladores PIC: técnicas avançadas. 6. ed. São Paulo: Érica, 2008. SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Tradução João Eduardo Nóbrega Tortello. Porto Alegre: Bookman, 2018. STALLINGS, W. Arquitetura e organização de computadores. Tradução de Daniel Vieira e Ivan Bosnic. Revisão técnica de Ricardo Pannain. 8. ed. São Pau- lo: Pearson Pratice Hall, 2010. TANENBAUM, A. S.; AUSTIN, T. Organização estruturada de computadores. Tradução de Daniel Vieira. Revisão técnica de Wagner Luiz Zucchi. 6. ed. São Paulo: Pearson Prentice Hall, 2013. TRINDADE, R. O que é a Lei de Moore e por que você deve se preocupar com o fim dela. UOL, São Paulo, 29 jan. 2019. Disponível em: <https://www.uol.com. br/tilt/noticias/redacao/2019/01/29/o-que-e-a-lei-de-moore-e-porque-voce- -deve-se-preocupar-com-o-fim-dela.htm?cmpid=copiaecola>. Acesso em: 4 set. 2019. ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 111 SER_CA_ELEIND_UNI4.indd 111 27/09/2019 17:35:39
Compartilhar