Cursos / Eletrônica / Projeto de Sistemas Microcontrolados / Aula

arrow_back Aula 04 - Estudo de microcontroladores PIC – Parte II

Organização da memória de dados

A memória de dados de um microcontrolador PIC das famílias 16F e, também, da 18F se constitui de uma memória volátil, tipo RAM, e uma memória não volátil, do tipo EEPROM.

A memória de dados do tipo RAM é usada para fixar duas classes de registradores: uma constituída por registradores designados por FSR (Special Function Register - Registradores de função especial), os quais são definidos pelo fabricante e usados para manipulação e inicialização de blocos construtivos internos do PIC e outra, que é reservada para os GPR (General Purpose Register – Registradores de Propósito Geral), a serem definidos e manipulados livremente pelo usuário. As variáveis de dados, criadas e manipuladas por nossos programas aplicativos, estão nesta segunda classe de registradores e têm, para cada microcontrolador, áreas específicas, como poderemos ver logo a frente, onde podem ser armazenadas.

Por ser não volátil, a memória EEPROM é usada para armazenamento de dados (como constantes ou tabelas de dados fixas) cujos valores não podem ou não devem ser “perdidos” após um desligamento do microcontrolador e que, necessariamente, devem estar presentes após seu religamento ou inicialização.

A quantidade de bytes dessa memória é muito pequena, varia de microcontrolador para microcontrolador, podendo chegar, por exemplo, a um banco de memória com 256 bytes, como no caso do 16F877 e dos PICs da família 18F.

Embora não volátil, a memória EEPROM de dados permite que as informações sejam não apenas lidas, mas também escritas durante a execução normal de um programa. Os processos de leitura e escrita nessa memória seguem, no entanto, rituais próprios e envolvem o uso de alguns registradores de propósito especial: o EEADR (que registra o endereço da EEPROM que será lido ou onde será escrito um dado), o EEDATA (que registra o dado lido ou a ser escrito na EEPROM) e outros, a serem tratados durante a programação, que permitem, através de alguns bits especiais, iniciar o processo de leitura ou escrita (como é o caso do EECON1) ou indicar o fim de uma leitura ou escrita (como é o caso do INTCON). Esses processos são diferenciados de uma leitura ou escrita na memória RAM, porque as EEPROMs exigem maiores tempos de acessos do que as RAMs. Ou seja, as primeiras não conseguem responder no mesmo ritmo de processamento do programa, como fazem estas últimas.

A memória RAM, ao contrário da memória EEPROM, é subdividida em bancos de dados, enumerados a partir de 0, onde cada banco ocupa, no máximo, 128 bytes. No caso dos PICs da família 16F estudados, o 16F84, embora disponibilize menos de 128 bytes, tem sua memória RAM mapeada ocupando dois bancos (no caso, o banco 0 e o banco 1), como mostrado na Figura 1, e o 16F628, embora disponibilize menos de 256 bytes, tem sua memória RAM mapeada ocupando quatro bancos (no caso, do banco 0 ao banco 3), como mostrado na Figura 2, sendo que apenas os dois primeiros são efetivamente utilizados. Já o 16F877, cuja RAM apresenta mais de 300 bytes, ocupa efetivamente os quatro bancos, como mostrado na Figura 3.

As finalidades usuais dos vários registradores de Propósitos Especiais, mostrados nas figuras 1 a 3 e específicos a cada microcontrolador, serão vistas durante a semana de desenvolvimento de projetos, provavelmente, a última.

Um endereço importante, a ser memorizado nas organizações de memória apresentadas nas figuras 1 a 3, é o endereço 0Ch para o 16F84 e o endereço 20h para os 16F628 e 16F877. É a partir desses endereços que o usuário pode armazenar suas variáveis de programa.

Certa dificuldade nesse tipo de organização de memória por bancos é que para ler ou escrever em um registro ou em uma dada posição de memória deve-se estar posicionado no respectivo banco. Para evitar constantes mudanças de banco, a Microchip espelha, em todos os bancos, seus principais registros e algumas áreas de uso do usuário.

Durante as tarefas práticas de programação, será mostrado como se deve proceder para garantir um posicionamento correto de banco.

Organização da memória RAM de dados  do 16F84.

 

Organização da memória RAM de dados  do 16F628.

 

Organização da memória RAM de dados  do 16F877.

Versão 5.3 - Todos os Direitos reservados