Програмування EEPROM AT89S82252 BASCOM-8051

Мікроконтролер моделі AT89S8252 містить електрично перепрограммируемую память EEPROM (ємністю 2 Кбайта), яка доступна для запису і зчитування засобами програми користувача EEPROM представляє собою незалежну память, що забезпечує зберігання даних необмежений час і при вимкненому живленні Bascom має два оператора (WRITEEEPROM і READEEPROM), що дають можливість простого доступу до цієї памяті Ці оператори дозволяють зберігати і відтворювати значення змінних всіх типів за винятком індексованих (елементів масивів) Кожен з операторів може використовуватися в двох варіантах:

а) без вказівки адреси розташування записуваної або зчитується змінної в EEPROM При компіляції немає адреси обчислюється автоматично і підставляється відповідно застосовуваної змінної, тобто кожної сохраняемой змінної буде відповідати лише одна клітинка EEPROM (того ж розміру) Це зручно, коли досить забезпечити просте збереження якихось значень, розміщених в регістрах, а потім провести їх відновлення

б) із зазначенням адреси розташування даних в EEPROM Цей варіант забезпечує більшу гнучкість і краще підходить для складних завдань

Нижче наведено два приклади програм з використанням операторів запису і читання даних EEPROM

У першому прикладі запис і читання виконується без вказівки адреси Компілятор займає осередку EEPROM в порядку застосування операторів запису Розташування даних в EEPROM після компіляції завжди можна подивитися у файлі повідомлень, але програма користувача, природно, цього зробити не може

‘——————————————– Приклад простого доступу до EEPROM AT89S8252

‘——————————————–

Dim Byt As Byte, Wrd As Word, Intg As Integer, Lng As Long, Sng As Single инициализируем змінні всіх типів З індексованими не працює

Byt = 10 : Wrd = 2000 : Intg = -10000 : Lng = 10000000 : Sng = 33333

‘Запишемо їх значення в EEPROM без вказівки адреси Writeeeprom Byt: Writeeeprom Wrd: Writeeeprom Intg Writeeeprom Lng: Writeeeprom Sng

‘Очистимо змінні

Byt = 0 : Wrd = 0 : Intg = 0 : Lng = 0 : Sng = 0

‘Вважаємо записані значення також без вказівки адреси Readeeprom Byt: Readeeprom Wrd: Readeeprom Intg Readeeprom Lng: Readeeprom Sng

‘Подивимося, що вийшло

Print Byt &quot_&quot Wrd &quot_&quot Intg &quot_&quot Lng &quot_&quot Sng

End

В іншому прикладі оператори WRITEEEPROM і READEEPROM застосовуються із зазначенням адреси розташування даних, що дозволяє проводити запис або читання будь-якої необхідної області EEPROM, завдяки чого, стає можливим довільний порядок доступу до памяті

Тепер розглянемо питання забезпечення достовірності даних, що зберігається Відомо, що при виключенні живлення мікроконтролера існує короткий момент (кілька мілісекунд), коли відбувається збій поточної програми, але здатність виконувати команди, записані в ПЗУ ще зберігається У результаті зявляється можливість пошкодження записаних даних, якщо при збої відбувається попадання на ділянку програми, що виконує запис в EEPROM Для підвищення надійності зберігання даних застосовують апаратні засоби у вигляді пристроїв швидкого скидання або виключення живлення при збоях електроживлення Крім цього, важливими складовими системи захисту даних залишаються і програмні засоби, перше з яких – контроль справності блоку записаних даних У наведеному прикладі містяться елементи такої захисту:

а) введена додаткова осередок для зберігання контрольної суми блоку даних Причому дані, що записуються в регістр контрольної суми, лише доповнюють її, до одного і того ж значення – 5AH («нормальною контрольної суми»)

б) після кожної операції запису провадиться балансування контрольної суми блоку даних до нормального значення

в) перед зчитуванням даних (або після включення живлення) проводиться перевірка контрольної суми блоку даних, на підставі якої приймається рішення про подальших дій

‘————————————————- ——– використання EEPROM AT89C8252 як калібрувальної памяті

‘————————————————- ——– Dim K0 As Const 0 блок з 8-ми констант

Dim K1 As Const 4 з плаваючою точкою

Dim K2 As Const 8 визначимо їх

Dim K3 As Const 12 розташування в EEPROM

Dim K4 As Const 16 кожна константа займає

Dim K5 As Const 20 по 4 байти

Dim K6 As Const 24

Dim K7 As Const 28

Dim End_dae As Const 31 остання адреса блоку констант

Dim Csum As Const 32 регістр контрольної суми

Dim End_eep As Const 32 остання адреса всього блоку

Dim N_cs As Const A5 нормальне значення контрольної суми

‘Необхідні змінні

Dim Nm As Byte, Tmp As Byte, Sum As Byte, Sng As Single запишемо блок даних в EEPROM ІЕ таблиці

For Nm = 0 To 7

Sng = Lookup (nm, Dvs): Tmp = Lookup (nm, Dva) дані та адресу

Writeeeprom Sng , Tmp Next

‘Обчислимо контрольну суму блоку констант

Sum = 0

For Nm = 0 To End_dae підсумовуємо значення кожного байта блоку даних

Readeeprom Tmp , Nm : Sum = Sum + Tmp

Next Sum = N_cs – Sum обчислимо додаток до нормального значення

Writeeeprom Sum, Csum запишемо додаток

‘Перед зчитуванням даних перевіримо справність всього записаного блоку

Sum = 0 обчислимо контрольну суму всього блоку

For Nm = 0 To End_eep

Readeeprom Tmp , Nm : Sum = Sum + Tmp Next

If Sum <> N_cs Then перевіримо: збігається з нормальним значенням

Print Error EEPROM” Якщо ні, якось проіндіціруем

End If

‘Подивимося, що вийшло

For Nm = 0 To 7

Tmp = Lookup(nm , Dva) : Readeeprom Sng , Tmp Print Tmp &quot-&quot Nm &quot-&quot Sng

Next

‘Таблиця адрес констант

Dva:

‘Data K0, K1, K2, K3, K4, K5, K6, K7 так компілятор не розуміє

Data 0, 4, 8, 12, 16, 20, 24, 28 потрібно записувати тільки цифри

‘Таблиця ініціалізіруемих значень

Dvs:

Data 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18

Необхідність застосування засобів захисту даних, що зберігається безперечна, тому що ймовірність пошкодження одного байта EEPROM без прийняття апаратних засобів досить велика і складає близько 0000001 (у сумі – 0002 для EEPROM ємністю 2 Кбайта) Застосування апаратних засобів знижує вірогідність збоїв на три-чотири порядки Однак, вони не виключаються зовсім, наприклад, при виключенні живлення в момент запису Для захисту від збоїв слід застосовувати і програмні засоби захисту даних Дуже ефективним засобом захисту даних є застосування двох дублюючих блоків даних Використання більше двох дублюючих блоків не має практичного сенсу, тому ймовірність виходу з ладу мікросхеми з записаними даними вище, ніж у продубльованих даних (далі потрібно дублювати мікросхеми памяті) Подвійне дублювання блоків даних широко застосовується у вимірювальній техніці для зберігання калібрувальних коефіцієнтів, і показало виняткову надійність Перелічимо основні моменти організації дубльованої незалежній памяті:

а) обидва блоки повинні бути однаковими і утримувати власні регістри контрольної суми

б) запис даних в блоки виробляється послідовно – спочатку дані і контрольна сума в один блок, а потім другий Причому, після запису першого блоку робиться пауза, на час не менше як час розряду конденсаторів в ланцюзі живлення мікроконтролера Останнє виключає пошкодження обох блоком при виключенні живлення в момент їх модифікації

в) при зчитуванні дані беруться з блоку з правильною контрольною сумою

г) при необхідності несправний блок може бути відновлений

І останнє, для пристроїв з підвищеними вимогами до надійності зберігання даних слід застосовувати зовнішню незалежну память, як і при використанні мікроконтролерів інших типів (НЕ мають EEPROM) Найбільш зручні для цього мікросхеми з послідовним доступом серій 24Cxx або 93Cxx, мають відповідно I2C-і SPI-інтерфейси, засоби для роботи з якими, в Bascom також доступні

Джерело: МЛКуліш, ДОВІДНИК З ПРОГРАМУВАННЯ BASCOM-8051, Краснодар 2001

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*