Каталог статей

Главная » Статьи » Мои статьи

Пример работы со встроенной EEPROM (PIC18F2580 + HT-PICC 18)
EEPROM - это энергонезависимая память, присутствующая на борту микрококонтроллеров. Использование EEPROM позволяет сохранять калибровочные константы, текущие значения всевозможных счётчиков при выключении питания, пользовательские настройки и прочую информацию, которую необходимо извлекать в целости и сохранности после сброса МК (в частности, перебоев в питании).

Для ознакомления с подробностями работы EEPROM смотрите переведённую часть из даташита на PIC18F2585 - "Память данных EEPROM". Здесь же приводится пример работы со встроенной EEPROM на микроконтроллере PIC18F2580 (компилятор HT-PICC 18):

//--------------------------------------------------------------------

unsigned char ee_read(unsigned char adr);
unsigned char ee_write(unsigned adr, unsigned char dat);

//--------------------------------------------------------------------

unsigned char ee_read(unsigned char adr) {
 //чтение байта из встроенной EEPROM
 while(WR) continue; //пока идёт цикл записи, читать из EEPROM нельзя!
 EEPGD=0; //обращаемся к памяти данных EEPROM
 CFGS=0;
 EEADR=adr; //адрес ячейки
 //ClrWdt(); //ВНИМАНИЕ: для некоторых МК здесь требуется пустой цикл (см. ERRATA!)
 RD=1; //запускаем цикл чтения
 return EEDATA; //прочитанный байт попадает сразу в регистр EEDATA


//--------------------------------------------------------------------

unsigned char ee_write(unsigned char adr, unsigned char dat) {
 //запись байта во встроенную EEPROM
 while(WR) continue; //ожидаем пока завершится предыдущий цикл записи
 EEADR=adr; //адрес ячейки
 EEDATA=dat; //байт данных
 EECON1&=0b00111111; //обнуляем биты EEPGD и CFGS в регистре EECON1
 CARRY=0; //небольшая хитрость: используем флаг CARRY для своих нужд
 if(GIE) CARRY=1; //если прерывания были разрешены, запомним это
 GIE=0; //принудительно запрещаем все прерывания
 WREN=1; //разрешаем запись в EEPROM
 EECON2=0x55; //обязательная последовательность
 EECON2=0xAA;
 WR=1; //запуск цикла записи
 WREN=0; //не дожидаясь сброса WR, сбрасываем WREN!
 if(CARRY) GIE=1; //если нужно, разрешаем прерывания
}

//--------------------------------------------------------------------
Пример использования:
unsigned char tmp;
ee_write(10, 250); //в ячейку с адресом 10 записали число 250
tmp = ee_read(10); //прочитали число из ячейки, tmp = 10
На основе этого кода можно написать более сложные и интеллектуальные функции:

- запись и чтение массива данных;
- запись с последующей проверкой на чтение (защита от ошибок записи);
- выборочная запись (если в ячейке уже хранится нужный байт данных, перезаписывать его не нужно);
- очистка всей или нужной части EEPROM;
- регенерация данных (цикл чтение-запись по всей EEPROM)© PIClist-RUS (piclist.ru), 2007 г.

Категория: Мои статьи | Добавил: MAS (25.11.2012)
Просмотров: 793 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Мои статьи [51]
Справочные данные [165]
Справочные данные
Наш опрос
Оцените мой сайт
Всего ответов: 30
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Баннер
$$
Друзья сайта
  • Спортсменам
  • Огородникам СЮД(А
  • Строим вместе
  • Мир развлечений
  • Кто хочет похудеть
  • Здоровье у нас одно
  • Юмор
  • Кулинарные рецепты
  • Картинки_Заставки_Демотивоторы
  • Семья
  • Кто на мальчишник
  • Металлообработка
  • Кто на девишник
  • Блоки питания
  • Смерть соседям
  • Радиомедведь
  • Кибермедведь
  • Радиосайт
  • Деревообработка
  • Поиск