Considerações básicas sobre o PIC16F877A

Considerações básicas sobre o PIC16F877A

(Parte 1 de 5)

Coleção TUTPRO Tutoriais sobre programação de microcontroladores

Solbet Ltda Expandindo a percepção humana

Neste volume: Considerações básicas sobre o PIC16F877 http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 1

Recursos necessários para execução deste tutorial3
Introdução3
A estrutura desta série de tutoriais4
O que é um microcontrolador4
A Arquitetura do microcontrolador PIC16F877A6
Como se programa um microcontrolador8
As origens do PIC16F877A9
Compreendendo a arquitetura do PIC16F877A10
A estrutura interna do PIC16F877A12
A descrição dos terminais do PIC16F877A13
A descrição da estrutura interna do PIC16F877A16
As diferentes áreas de memória16
O controle do fluxo de programa19
O sistema de interrupts20
As configurações do oscilador21
O sistema de reset23

Sumário http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 2

Recursos necessários para execução deste tutorial

Este tutorial cobre somente partes teóricas. Você só precisará de um computador com leitor PDF. Você pode copiar este material a vontade, desde que mantida a informação da fonte.

Introdução ste conjunto de tutoriais se destina a todos aqueles que desejam se tornar bons projetistas e programadores com os microcontroladores, especialmente os microcontroladores de 14 bits

da Microchip , com ênfase no PIC16F877. A escolha deste microcontrolador se deve ao fato dos recursos que ele disponibiliza ao programador abrangem um grande número de periféricos, e o conhecimento da programação destes periféricos permite a programação de dezenas de outros chips desta linha.

Como pré-requisito para a leitura deste tutorial, você deve ter conhecimentos básicos sobre lógica Booleana, da estrutura dos microcontroladores e de seus periféricos em geral, assim como fundamentos de programação em qualquer linguagem. O enfoque é eminentemente prático. Você estuda a teoria e experimenta na prática os conceitos trabalhados. Ao final do livro você terá aprendido a desenvolver um conjunto de projetos que variam desde um simples pisca-pisca a um controlador de servo mecanismos para uso em sistemas robóticos.

Este volume faz parte de uma série de tutoriais de programação de microcontroladores, que estão sendo paulatinamente colocados em formato eletrônico e disponibilizados para cópia individual. O material pode ser utilizado livremente por indivíduos ou instituições sem fim lucrativo, devendo ser mantida sempre a obra integral, com os créditos do autor.

Para facilitar o aprendizado utilizaremos como plataforma alvo a placa Powerboard2 . A

Powerboard2 é uma placa para experimentação e desenvolvimento com microcontroladores extremamente versátil. Com ela você pode programar o microcontrolador sem necessidade de um programador avulso, e toda a sua experimentação pode ser realizada sem necessidade de retirar o PIC do soquete. Embora os simuladores sejam uma ferramenta muito adequada no desenvolvimento de programas com o PIC16F877, somente a experimentação real lhe garantirá uma capacitação efetiva no desenvolvimento de projetos baseados em microcontroladores. O manual completo da Powerboard2 você encontra em http://www.solbet.com.br.

Para você implementar os programas exemplo será necessário a utilização de um software assembler, um compilador “C” e de um carregador. O assembler sugerido é o MPLAB©, da Microchip, disponível em http://www.microchip.com. O compilador “C” que utilizamos é o CCS, de baixo custo, que pode ser adquirido em http://www.ccsinfo.com/. E o carregador , o software SbMaster, pode ser obtido gratuitamente em http://www.solbet.com.br. O carregador e o compilador

“C” podem operar em Linux ou Windows, mas o MPLAB opera somente em Windows. Se você utilizar os diversos módulos de desenvolvimento já disponíveis na Solbet, certamente irá economizar tempo e poderá focalizar seu esforço no domínio da programação de microcontroladores.

http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 3

A estrutura desta série de tutoriais

tanto os já resolvidos como os propostosPara realizar as práticas de laboratório você deverá ter

este série de tutoriais você encontrará capítulos teóricos e capítulos com sugestões de exercícios de laboratório. Cada exercício é acompanhado de propostas de projetos baseadas nos pontos explanados. Não deixe de implementar de forma prática os exercícios, acesso a um computador do tipo IBM-PC, com o sistema operacional Windows ou Linux , e ser capaz de ler esquemas eletrônicos, e de uma placa Powerboard2. A maioria dos experimentos pode ser realizada com a placa mais custo, a Powerboard2 Light. Instrumentação básica para o desenvolvimento de circuitos eletrônicos, tais como multímetro e osciloscópio, irão ajudar muito a depuração dos circuitos, porém não são indispensáveis. Um conjunto de exercícios é deixada como desafio ao estudante. Se você deseja comparar a sua resposta com a por nós sugerida, basta acessar o site http://www.solbet.com.br , e procurar na seção Notas de aplicação. As respostas aos problemas e mais informação adicionais sobre programação de microcontroladores estão lá disponíveis para você.

A seguinte seqüência será adotada neste tutorial: Introdução Considerações Básicas sobre microcontroladores Compreendendo a arquitetura do PIC16F877

Os experimentos podem ser avaliados utilizando apenas o simulador disponível no

MPLAB, mas sugerimos fortemente que você efetivamente monte os diversos circuitos apresentados. Embora o simulador seja uma ferramenta fantástica para o desenvolvimento, a experiência com o dispositivo real irá ampliar de forma significativa o seu aprendizado.

Você notará aqui vários termos em inglês. Escolhemos não traduzir alguns termos, visto ser a nomenclatura inglesa mais utilizada em nosso meio. A tradução de alguns termos como STATUS, RESET, CLOCK e outros similares iria apenas dificultar a quem está realizando este curso, a compreensão dos conceitos envolvidos e seria de pouco valor para o projetista.

O que é um microcontrolador

m microcontrolador é um dispositivo utilizado para controlar (EPA!- definição recursiva?) algum processo ou aspecto do ambiente. Um exemplo típico de um controlador você tem no seu forno de microondas. No forno pode-se programar a potência, o tempo de cozimento , a velocidade de giro e outros parâmetros. Além disso, o controlador toma conta para você de outros itens igualmente importantes e que podem parecer insignificantes à primeira vista. Por exemplo, se você abrir a forno com ele em funcionamento, o microcontrolador irá desligar imediatamente a geração de microondas, que poderia vir a provocar lesões no usuário.

Os microcontroladores estão revolucionando o projeto de equipamentos eletrônicos. Não somente os sistemas convencionais estão se tornando mais sofisticados e baratos, como novas funcionalidades estão sendo possíveis de serem implementadas a um custo compatível com o mercado. A propósito, o seu celular só se tornou possível graças ao uso de microcontroladores cada vez mais poderosos.

No início dos tempos os sistemas de controle eram construídos utilizando-se (ugh !), relês e http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 4 válvulas. Nestes tempos heróicos a construção era cara e os programas difíceis de se desenvolver. O programa era implementado pelo hardware do próprio circuito, com enormes dificuldades na hora em que se necessitava alterá-lo. Os custos (e dimensões) eram elevados e poucos experimentadores poderiam construir um destes para controlar o ambiente de seu aquário (temperatura, iluminação, filtros, alimentação, etc...).ou gerenciar sua residência. Os controladores eram basicamente utilizados em indústrias, onde o seu custo elevado era amortecido pelo grande aumento da produtividade obtida devido à sua utilização.

Com o advento da micro-eletrônica as coisas melhoraram um pouco, porém ainda não o suficiente para popularizar os controladores. O tamanho agora era mais reduzido, devido ao uso de transistores onde antes eram empregados válvulas, porém o problema da dificuldade de reprogramação continuava.

O grande passo ocorreu em 1970, com o advento dos microprocessadores. Embora os primeiros microprocessadores fossem destinados ao uso genérico, a possibilidade de reprogramação sem alteração do hardware básico não passou despercebido dos projetistas de controladores, que passaram a utilizar de forma intensa este componente.

Os microprocessadores destinados ao mercado de computadores pessoais podiam ser empregados em controladores, porém o seu custo continuava elevado para o tipo de tarefa que se desejava executar no controle dedicado. Imagine quão pouco competitivo (custo/benefício) ficaria utilizar um Pentium no controle do número de lâmpadas acesas simultaneamente numa casa, por exemplo.

Em virtude deste mercado, os fabricantes de circuitos lançaram então os microcontroladores. Estes dispositivos tipicamente possuem integrados em uma única pastilha de circuito integrado, a CPU (unidade central de processamento), RAM (memória de acesso aleatório), EPROM(ou suas variantes EEPROM,ROM,PROM) , memória somente de leitura, E/S (entrada e saída digitais e analógicas), TEMPORIZADORES (contadores e temporizadores) e CONTROLADORES DE INTERRUPÇÃO (possibilitando rápida reação às mudanças do ambiente). Se você não compreendeu o significado de algumas destas siglas, não se preocupe. Nós explicaremos o significado de cada uma nas próximas páginas.

O surgimento destes dispositivos a um baixo custo provocou uma revolução nos métodos de projeto de sistemas de controle para uso doméstico ou industrial. Sistemas mecânicos já consagrados pelo uso (por exemplo, controladores de máquinas de lavar roupa) estão sendo rapidamente substituídos por circuitos eletrônicos mais confiáveis e baratos. Conhecer estes dispositivos tão onipresentes em nossas vidas se tornou uma necessidade de todos os profissionais envolvidos com a produção , desenvolvimento e manutenção de circuitos eletrônicos de qualquer tipo.

Do ponto de vista do projetista dos circuitos de controle, esta substituição forçou o deslocamento dos projetos baseados em hardware, onde cada projeto correspondia a um circuito eletrônico, para projetos baseados em software, onde o hardware básico se mantém o mesmo , sendo que a alteração funcional se dá através da alteração do software do sistema. Desta forma, correções e aumentos na funcionalidade do sistema podem ser feitos muito mais rapidamente e com custos reduzidos, se comparados a solução de alteração no hardware.

Microcontroladores estão em torno de nós em quantidades cada vez maiores. A indústria automobilística, por exemplo, é uma grande consumidora destes dispositivos. A indústria de eletrodomésticos também. Conhecê-los e saber deles extrair o máximo de funcionalidade, é uma capacidade que se exige do engenheiro ou técnico, projetistas e pessoal de manutenção de sistemas dedicados ou usuários avançados. E além disto, para o experimentador, fica muito mais barato utilizar estes pequenos módulos para os seus experimentos que criar um novo hardware para cada http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 5

MEMÓRIA DE PROGRAMASMEMÓRIA DE DADOS

projeto.

O projetista de circuitos que utilizar microcontroladores deve ser eficiente em pelo menos três diferentes áreas. Em primeiro lugar ele deve ter uma compreensão exata da capacidade do microcontrolador que pretende utilizar, em termos de memória, dispositivos de entrada e saída, velocidade de processamento, etc. Em segundo lugar, o projetista deve ser capaz de especificar formalmente os requisitos do seu projeto. Isto significa compreender o ambiente no qual o sistema será utilizado e qual a interação do sistema sendo desenvolvido com o este ambiente. Por último, é papel fundamental de um bom projetista ser capaz de dividir o problema com que se depara em partes menores e mais gerenciáveis, que devem trabalhar harmoniosamente de forma a se obter o resultado desejado.

A Arquitetura do microcontrolador PIC16F877A odemos pensar num microcontrolador como um dispositivo composto de sete partes, como mostrado na figura 2-1. Os dados dentro de um microcontrolador são manipulados em unidades chamadas palavras. O PIC16F877A possui palavras de dados de oito bits de tamanho, e palavras de instrução de 14 bits. Este comprimento da palavra de instrução do PIC16F877A permite que a maioria das instruções possa ser executada dentro de um único ciclo de máquina, um dos motivos da grande velocidade que se consegue nestes microcontroladores.

Figura 2-1. Microcontrolador básico

O clock é o responsável pelo sincronismo entre todas as operações de um microcontrolador.

Todos os eventos que ocorrem dentro de um microcontrolador obedecem a uma lógica preestabelecida pelo fabricante, e são processados em tempos determinados pela freqüência do clock. Normalmente, quanto maior a freqüência de clock de um microcontrolador, mais rápida é a execução das instruções. No caso dos microcontroladores, o clock é também utilizado como referência de tempo para execução de tarefas que devem ser repetidas a determinado intervalo de tempo, como por exemplo a leitura de sinais em interfaces RS232C.

A CPU, ou unidade central de processamento, coordena todas as atividades dentro do microcontrolador. Ela organiza a execução das instruções. É a CPU que realiza as operações lógicas ou matemáticas sobre os dados, e envia os resultados para os diversos registros ou portas de entrada e saída.

As portas de entrada e de saída são os pontos através dos quais o microcontrolador interage com o meio ambiente. As portas digitais assumem valores discretos, normalmente referenciados como 0 ou 1, correspondentes a 0 volts ou 5 volts de saída respectivamente. O valor http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 6 de tensão correspondente ao nível lógico 1 normalmente corresponde a tensão de alimentação do microcontrolador.

Além das portas convencionais, nas quais a CPU deve ler sempre que deseja saber sobre o seu estado (0 ou 1), alguns microcontroladores possuem uma ou mais portas de entrada especiais chamadas de Interrupts. Estas portas não exigem que a CPU fique “vigiando” a ocorrência de um evento, porque interrompem o programa sendo executado toda vez que ocorre um dado evento. Desta forma a CPU pode atender o evento externo assim que o mesmo ocorre, e não gasta tempo vigiando inutilmente pela ocorrência do evento na porta. Interrupts são uma das características mais utilizadas nos projetos em se necessite de uma rapidez de resposta a eventos assíncronos, que podem ocorrer a qualquer instante.

O PIC16F877A possui portas de entradas analógicas, ou seja, portas que podem receber sinais continuadamente variáveis entre 0 e 5 volts. Internamente estes sinais analógicos são convertidos em valores digitais entre 0 e 0x3FF (se utilizamos conversores de 10 bits) , ou 0xFF, se utilizamos conversores de oito bits.

A memória de dados é normalmente implementada na forma de RAM (memória de acesso aleatório) em que podemos ler e gravar com facilidade. A leitura é não destrutiva, ou seja, podemos ler repetidas vezes o valor de uma posição de memória que o valor não se altera. A gravação de um dado na RAM é feita pela CPU, em resposta a instruções colocadas pelo programador. Microcontroladores normalmente se utilizam de pequenas quantidades de memória de dados, principalmente se compararmos com as quantidades de memória RAM utilizadas por computadores pessoais de hoje, algo como 100 bytes para os microcontroladores, versus 512 milhões de bytes de um típico computador pessoal.

A memória de programa é onde residem as instruções que devem ser executadas pela

CPU. Num computador pessoal os programas tipicamente residem em disquetes ou discos rígidos. Já nos microcontroladores o programa deve residir numa memória somente de leitura. O programa é normalmente gravado uma só vez e a partir daí o microcontrolador executa apenas este programa.

A maioria dos microcontroladores se utiliza de memória EPROM, que para ser apagada necessita de ser exposta a luz ultravioleta, ou PROM. No caso da PROM o programa só pode ser gravado uma vez. Portanto só é interessante para os fabricantes de produtos baseados em microcontroladores, porque a PROM é uma memória de baixo custo. Já a gravação de uma EPROM deve ser realizada através de equipamento adequado. O ciclo de desenvolvimento normalmente exige inúmeras operações de gravação e apagamento, para correções do programa. Alguns microcontroladores, tais como o PIC16F877A, substituíram a EPROM pela EEPROM, memória que pode ser apagada por meios elétricos, sem necessidade de apagamento por luz ultravioleta. Esta forma de trabalho encurta significativamente o ciclo de desenvolvimento do programa, e também não exige equipamento sofisticado para gravação e apagamento da memória de programas.

A memória de programas e a memória de dados podem ou não compartilhar de um único espaço de endereçamento. A arquitetura Von Neuman possui um único barramento de memória para endereçar as instruções e os dados. Dados e instruções, portanto, compartilham do mesmo espaço de memória. Quando este tipo de microcontrolador executa uma instrução, ele primeiro pega a instrução e depois pega os dados referentes a esta instrução. Esta necessidade de dois acessos à memória torna a operação mais lenta.

Os microcontroladores baseados na arquitetura Harward possuem um espaço de memória separado para os dados e para as instruções. Isto permite que a leitura das instruções e dos dados ocorra em paralelo. Também, enquanto uma instrução está sendo executada a outra já pode estar sendo transferida para a CPU. A execução utilizando esta arquitetura pode ser muito mais rápida http://www.solbet.com.br Considerações básicas sobre o PIC16F877A 7 que a possível com a arquitetura Von Neuman, porém isto aumenta a complexidade dos circuitos. O microcontrolador PIC16F877A, objeto de análise neste tutorial, se utiliza da arquitetura Harward, o que permite uma alta velocidade de operação.

Qualquer que seja a arquitetura empregada, um microcontrolador necessita manter um controle rigoroso sobre a seqüência de instruções a serem executadas. Este controle da seqüência é conseguido pelo uso de um contador de programa. O contador de programa é um registro que mantém a informação de qual é o endereço da instrução de programa que deve ser executada.

Embora as instruções sejam realizadas na sua maior parte de forma seqüencial, alguns fatores podem provocar a alteração deste comportamento. Por exemplo, um determinado ponto do programa chama por uma subrotina. Uma subrotina é um trecho de programa, que após ser executado, deve retornar para a posição onde foi inicialmente chamado. Outro exemplo de desvio é o durante o processamento de interrupts.

(Parte 1 de 5)

Comentários