Безкоштовна технічна бібліотека ЕНЦИКЛОПЕДІЯ РАДІОЕЛЕКТРОНІКИ ТА ЕЛЕКТРОТЕХНІКИ Ініціалізація додаткових сегментів пам'яті програм для мікроконтролерів сімейства MCS-51. Енциклопедія радіоелектроніки та електротехніки Енциклопедія радіоелектроніки та електротехніки / Мікроконтролери Сучасні мікроконтролери мають вбудовану енергонезалежну пам'ять даних (EEPROM), інформацію в яку іноді необхідно занести до початку роботи приладу. Образ (прошивка) цієї пам'яті має бути сформований під час розробки програми. Це дозволяють зробити, наприклад, асемблери для мікроконтролерів сімейств PICmicro та AVR. Вони дають програмісту можливість організувати додатковий сегмент пам'яті та задати в ньому вихідні дані для запису EEPROM. Ассемблери для мікроконтролерів з ядром MSC-51 теж дозволяють розділити пам'ять на кілька частин, але лише в одній з них - сегменті коду, що виконується - можлива ініціалізація. У решті дозволено лише резервувати осередки пам'яті і записувати у яких дані лише у виконання програми. Виходом із ситуації може бути прийом, про який розказано нижче. Суть його - використання умовного асемблювання, у результаті ініціалізація сегмента коду відбувається по-різному, залежно та умовами трансляції. Отримані файли НЕХ можуть бути використані для програмування не тільки внутрішнього EEPROM мікроконтролера, але і зовнішніх мікросхем пам'яті. Додаткові сегменти (припустимо будь-яке їх число), що штучно створюються, поміщають в текст програми до реального сегмента коду. Мітки, визначені в одному з них, будуть відомі у всіх наступних, у тому числі у реальному сегменті коду. А ось посилання у зворотному напрямку неприпустимі. На тип та фізичне розташування додаткової пам'яті обмежень немає. Приклад програми з двома додатковими ініціалізованими сегментами, умовно названими EEPROM та FLASH, наведено у табл. 1. Зберігши його у файлі example.asm, скористаємося асемблером ASEM-51, який можна безкоштовно завантажити за адресою . Насамперед запустимо асемблер командним рядком asem example.asm eeprom.hex/define:EEPROM Обробляючи перші рядки тексту програми, він помістить до своєї таблиці символів мітки idEeprom, ptrWord і prtBufE, а вихідний файл eeprom.hex (табл. 2) - задані директивами DB і DW дані. Потім буде виконано перевірку довжини сегмента. Якщо значення програмного лічильника перевищило фізично існуючий обсяг EEPROM (у цьому випадку - 640 осередків), буде виведено повідомлення про помилку. При явно невеликому обсязі сегмента перевірку можна виключити. Аналогічні перевірки можна передбачити і інших сегментах. Далі асемблер зустріне директиву IFNDEF EEPROM. Оскільки символ з таким іменем у командному рядку визначений (параметр /define:EEPROM), усі наступні рядки програми, аж до директиви ENDIF, будуть проігноровані і трансляція закінчиться. Повторну трансляцію тієї ж програми запустимо командним рядком asem example.asm flash.hex/define:FLASH Вона відрізняється від попередньої лише визначенням символу FLASH замість EEPROM. Перший етап трансляції пройде точно так, як описано вище, і вихідний файл будуть записані дані сегмента EEPROM. Однак директива IFNDEF EEPROM цього разу процес не перерве, а наступна за нею директива ORG 0 обнулює програмний лічильник. Асемблер почне заносити у вихідний файл із нульової адреси дані, призначені для сегмента FLASH. Трансляцію перерве директива IFNDEF FLASH. Остаточний вид файлу flash.hex показаний у табл. 3. Трансляцію справжнього сегмента виконуваного коду задамо командою asem example.asm Насамперед, будуть знову відтрансльовані додаткові сегменти, а всі певні в них мітки занесені до таблиці символів асемблера, що дозволить посилатися на них із сегмента коду. Директива ORG 0 на самому його початку вкотре обнулює програмний лічильник. Далі трансляція піде звичайним чином. В отриманому файлі example.hex (табл. 4) код програми, що виконується, починається з четвертого рядка, перебуваючи після рядків, ідентичних що містяться в попередніх НЕХ-файлах. Наявність зайвої інформації зазвичай не заважає правильному завантаженню коду у відповідні області пам'яті мікроконтролера. У буфері програми, що управляє програмуванням, правильні дані при збігу адрес "витісняють" раніше занесені. І тільки якщо новий сегмент коротший за попередній, у буфері збережеться його "хвіст". Тому бажано описувати в програмі сегменти в порядку зростання їх довжини. Деякі програматори немає проміжного буфера чи суворо контролюють вхідні дані, не допускаючи перекриття адрес. У першому випадку програмування буде неправильним, у другому - взагалі не почнеться, доки "помилки" не будуть усунені. Видалити зайві рядки з файлу НЕХ можна вручну за допомогою будь-якого текстового редактора. Можна зробити це автоматично, виконавши поспіль дві команди: hex2bin example.hex bin2hex example.bin Перша створить двійковий образ даних у файлі example.hex і помістить їх у файл example.bin. Друга виконає зворотне перетворення та створить новий файл example.hex вже без надмірностей. Необхідні програми можна завантажити за адресами і . Автор: С.Чекунов, м. Іжевськ Дивіться інші статті розділу Мікроконтролери. Читайте та пишіть корисні коментарі до цієї статті. Останні новини науки та техніки, новинки електроніки: Новий спосіб управління та маніпулювання оптичними сигналами
05.05.2024 Приміальна клавіатура Seneca
05.05.2024 Запрацювала найвища у світі астрономічна обсерваторія
04.05.2024
Інші цікаві новини: ▪ Зовнішні акумулятори HyperJuice для мобільної техніки ▪ Видобуток корисних ресурсів на Місяці ▪ Мультимедійний програвач Dueple ▪ Сенсорний дисплей, що не вимагає торкання пальців ▪ TWS-навушники Urbanista Phoenix із вбудованою сонячною батареєю Стрічка новин науки та техніки, новинок електроніки
Цікаві матеріали Безкоштовної технічної бібліотеки: ▪ Розділ сайту Пристрої захисного відключення. Добірка статей ▪ стаття Довгий ящик. Крилатий вислів ▪ стаття Як отримав свою назву мексиканський вулкан Парікутін? Детальна відповідь ▪ стаття Робота з монтажно-поршневим пістолетом. Типова інструкція з охорони праці ▪ стаття Прості ефективні антени для далеких зв'язків. Енциклопедія радіоелектроніки та електротехніки ▪ стаття Купюра протикається олівцем і залишається неушкодженою. Секрет фокусу
Залишіть свій коментар до цієї статті: All languages of this page Головна сторінка | Бібліотека | Статті | Карта сайту | Відгуки про сайт www.diagram.com.ua |