Sistemas Microcontrolados Uma Abordagem com o Microcontrolador PIC 16F84 Nardênio Almeida Martins Novatec Editora
Capítulo 1 Introdução Os microcontroladores estão presentes em quase tudo o que envolve a Eletrônica, diminuindo o tamanho, facilitando a manutenção e gerenciando tarefas internas de aparelhos eletroeletrônicos. Um microcontrolador pode efetuar várias funções que necessitariam de um grande número de outros componentes. Assim, aprender a programar microcontroladores significa aprender a resumir circuitos em um único componente. Para suprir exigências de projetos, existe uma ampla gama de microcontroladores da série PIC disponíveis no mercado, diferenciando-se pelo número de linhas de entradas/saídas (I/O Input/Output) e pelos recursos de periféricos do dispositivo. Por meio da abordagem dos aspectos teóricos e práticos de microcontroladores, é possível desenvolver projetos e implementações de sistemas microcontrolados de pequeno e médio portes. Além disso, possibilita ao desenvolvedor usar criatividade e imaginação para desenvolver novos projetos de hardware e software. 1.1 Breve Histórico Para uma melhor eficiência no processamento de dados, na década de 70 começaram a ser utilizados microprocessadores em computadores. O microprocessador Intel foi um dos precursores, e, a partir daí, houve uma preocupação em melhorar cada vez mais o sistema de processamento de dados por meio desses componentes. Com base na arquitetura de um 14
Capítulo 1 Introdução 15 microprocessador e seus periféricos, foi criado um componente que (fisicamente integrados em uma única unidade) comportava todo um sistema entre equivalente a um microprocessador e seus periféricos. Assim surgiu o microcontrolador. Com o passar dos anos e com os avanços da tecnologia, os microcontroladores tornaram-se uma das melhores relações custo/benefício em se tratando de soluções que demandam processamento, baixo custo de hardware e pequena necessidade de espaço físico. Existem no mercado muitos tipos de microcontroladores, sendo o 8051 o mais popular. A ATMEL possui uma enorme família de componentes com as mesmas características do 8051, alguns até com as mesmas pinagens dos registradores; outros com pinagens diferentes, mas com o mesmo conjunto de instruções, com clock de 4 MHz até aproximadamente 10 MHz. A DALLAS Semiconductors tem um microcontrolador de alta performance, de até 90MHz, compatível com 8051. Por fim, vem a Microchip Technology Inc. com os microcontroladores da série PIC que se tornaram muito populares, graças a um bom plano de marketing, baseado na disseminação de uma ferramenta de auxílio à construção de programas o MPLAB IDE. Os microcontroladores da série PIC possuem ainda uma linguagem Assembly menos complexa em relação àquelas disponibilizadas por outros fabricantes. 1.2 Introdução aos Microcontroladores da Série PIC Os microcontroladores são pastilhas inteligentes, que têm um processador, pinos de entradas/saídas e memória. Por meio da programação dos microcontroladores pode-se controlar suas saídas, tendo como referência as entradas ou um programa interno. O que diferencia os diversos tipos de microcontroladores são: a quantidade de memória interna para armazenar dados e as instruções de programas (memória de programa e memória de dados), a velocidade de processamento, a quantidade de pinos de I/O, a forma de alimentação, os tipos e as quantidades de periféricos, a arquitetura e o conjunto de instruções disponibilizado nos circuitos internos.
16 Sistemas Microcontrolados Tipicamente, um microcontrolador caracteriza-se por incorporar no mesmo encapsulamento um microprocessador (com a finalidade de interpretar as instruções de programa e processar dados), memória de programa (com a finalidade de armazenar de maneira permanente as instruções do programa), memória de dados (com a finalidade de memorizar os valores associados com as variáveis definidas no programa), uma série de pinos de entrada/saída (com a finalidade de realizar a comunicação do microcontrolador com o meio externo) e vários periféricos (tais como temporizadores, controladores de interrupção, temporizadores cão de guarda (WatchDog Timers WDTs), comunicação serial, geradores de modulação por largura de pulso ou de PWM (Pulse Width Modulation), conversores analógico/digital etc.), fazendo com que o hardware final fique extremamente complexo. Isto é uma das características fundamentais que o diferencia dos microprocessadores, pois estes não possuem todos esses recursos em uma única pastilha. A Microchip é uma empresa precursora no uso de tecnologia RISC (Reduced Instruction Set Computer) em microcontroladores. Diferente da arquitetura Von Neumann (CISC Complex Instruction Set Computer), a estrutura RISC é baseada em barramentos independentes para dados e para programa com tamanhos diferenciados. Por exemplo, no PIC16C55X o barramento de dados é de 8 bits, enquanto o de programa é de 14 bits, o que significa que uma instrução está empacotada em uma única palavra de programa (no caso do PIC16C55X de 14 bits) e, além de conter o opcode (instrução), contém também os operandos (dados para execução da instrução). A Microchip oferece famílias de microcontroladores de 8 bits no barramento de dados que podem ser adaptados a uma gama de projetos. Dentre elas pode-se destacar: PIC12CXXX: linha compacta; PIC16C5X/PIC16C55X: linha-base; PIC16CXX: linha intermediária; PIC17CXX/PIC18CXX: topo de linha. Todas as famílias oferecem diversas opções de memória de programa: OTP (One Time Programable) e EPROM (Erasable and Programmable Read Only Memory utilizada para desenvolvimento). Além disso, apresentam
Capítulo 1 Introdução 17 opções de baixa tensão e inúmeros tipos de circuito osciladores, assim como várias opções de encapsulamento. Alguns componentes estão disponíveis em memória somente de leitura (ROM mascaradas) e memória apenas de leitura programável e eletricamente apagável (EPROM/FLASH reprogramáveis). Deve-se ressaltar que os microcontroladores da série PIC estão disponíveis em uma ampla gama de modelos para melhor se adaptarem às exigências de projetos específicos, diferenciando-se pelo número de linhas de I/O e pelo conteúdo do dispositivo. 1.3 Arquitetura dos Microcontroladores da Série PIC O alto desempenho da família de microcontroladores PIC pode ser atribuído às seguintes características de arquitetura RISC: mapa de registradores versátil; todas as instruções com palavras simples; palavra de instrução longa; arquitetura de instruções em pipeline ; instruções de apenas um ciclo de máquina; conjunto de instruções reduzido; conjunto de instruções ortogonal (simétrico). A arquitetura Von-Neumman tradicional utiliza o mesmo barramento, tanto para fazer a busca de instruções na memória de programa quanto para acessar (escrever ou ler) a memória de dados (Figura 1.1). UCP 8 Memória de Programa e de Dados Figura 1.1 Arquitetura Von-Neumman. A arquitetura de um microcontrolador da série PIC utiliza dois barramentos de endereços distintos para acessar instruções e dados (Figura 1.2).
18 Sistemas Microcontrolados Memória de Dados UCP 8 12 14 16 Memória de Programa Figura 1.2 Arquitetura dos microcontroladores da série PIC. 1.4 Formato das Instruções nos Microcontroladores da Série PIC A entrada de clock (pino OSC1/CLKIN) é internamente dividida por quatro para gerar quatro clocks em quadratura sem sobreposição, nomeados Q1, Q2, Q3 e Q4. Internamente, o contador de programa (PC Program Counter) é incrementado em Q1 e a instrução apontada pelo endereço associado ao contador de programa é buscada da memória de programa e armazenada no registrador de instruções em Q4. Ela é então decodificada e executada no ciclo seguinte de Q1 até Q4 (Figura 1.3). CLK 1 ciclo de máquina = 4 períodos de clock Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Ciclo de máquina Figura 1.3 Ciclo de instruções dos microcontroladores da série PIC. Um ciclo de instruções consiste de quatro ciclos Q (Q1, Q2, Q3, Q4). A busca e a execução da instrução são feitas em linha, de tal forma que a busca leva um ciclo de instrução e a execução, outro. Contudo, devido à característica de pipeline, cada instrução é executada efetivamente em um ciclo, pois simultaneamente ocorrem a execução de uma instrução e a busca da próxima instrução (Figura 1.4). Se uma instrução alterar o valor associado com o contador de programa, então dois ciclos serão necessários para completar a instrução. A arquitetura em pipeline sobrepõe busca (fetch) e execução (execute), tornando possível a execução de instruções em um único ciclo de máquina.
Capítulo 1 Introdução 19 Qualquer instrução de desvio (tais como GOTO, CALL, ou que altere o valor associado com o contador de programa) necessita de dois ciclos de máquina. A arquitetura com barramentos separados para instruções e dados permite a adoção de larguras diferentes. Com isso, o barramento de instruções é otimizado para uma palavra de comprimento único. O número de bits do barramento de instruções depende de quantas instruções são implementadas e do número de registradores disponíveis em cada família de microcontroladores PIC. 1. MOVLW 55H 2. MOVWF PORTB 3. CALL SUB_1 4. BSF PORTA, BIT3 Busca 1 Execute 1 Busca 2 Execute 2 Busca 3 Execute 3 Busca 4 Fluxo Busca SUB_1 Execute SUB_1 Figura 1.4 Pipeline nos microcontroladores da série PIC. Em resumo, todas as instruções são de um único ciclo, exceto aquelas de desvios no programa. Essas necessitam de dois ciclos, visto que a instrução de busca é fluida do pipeline, enquanto novas instruções estão sendo buscadas e executadas. 1.5 Mapa de Registradores Todas as instruções aritméticas e booleanas são feitas por meio do registrador de trabalho W (Figura 1.5). O destino da operação pode ser o próprio registrador W ou um dos registradores disponíveis nos microcontroladores da série PIC, dependendo unicamente da instrução executada. ULA W INDF TMR0 PCL STATUS FSR PORTA Outros SFRs Registradores de uso geral (RAM) Figura 1.5 Mapa de registradores nos microcontroladores da série PIC.
20 Sistemas Microcontrolados 1.6 Interrupções Um programa que está sendo executado pode fazer uso direto ou indireto de funções e sub-rotinas disponibilizadas no hardware ou no sistema operacional do sistema como um todo. Este uso é feito com a execução de uma instrução específica que interrompe, momentaneamente, a execução normal do programa, passando a executar a rotina que foi especificada pela instrução que realizou a interrupção. Após o término dessa rotina, a execução do programa é retomada, passando a ser executada a primeira instrução após aquela que procedeu à interrupção. É possível realizar a comunicação de dados entre o programa e a rotina de interrupção por meio de registradores específicos. Nos microcontroladores da série PIC, existem modelos que não possuem interrupções (por exemplo, PIC 12C50X, PIC 16C54, PIC 16C55 e outros de gerações mais antigas), porém, nos modelos mais novos, existe um grande número de interrupções com finalidades diferentes. Por exemplo, no caso do PIC 16F84, tipicamente, há a ocorrência de quatro tipos de interrupções básicas: aquela de TIMER 0 (TMR0), a externa, a por mudança de estado e a interrupção de final de escrita na EEPROM.