При поставці УУМС-2 штатна версія програми MONITOR уже розміщена в Flash-пам'яті основного мікроконтролера AT89S8252, а файл із вихідним кодом програми входить у комплект поставки.
Системна програма MONITOR складається з наступних блоків:
− штатна таблиця векторів переходу по перериваннях;
− блок ініціалізації апаратних ресурсів УУМС-2 (портів, таймерів, переривань);
− блок тестування елементів індикації УУМС-2;
− блок завантаження програми користувача (у т.ч. процедура прийому байтів програми користувача й розміщення в зовнішній пам'яті);
− блок активізації функціональної програми користувача;
− блок підпрограм формування затримок;
− блок підпрограм формування даних у двоїчно-десятковому впакованому форматі для відображення на семисегментних індикаторах;
− блок підпрограм виконання базових арифметичних операцій (додавання, вирахування, множення, розподіл) над даними, представленими в п'ятьох форматах: ціле однобайтове беззнакове, ціле однобайтове зі знаком, ціле двухбайтове беззнакове, ціле двухбайтове зі знаком, формат із плаваючою крапкою (два байти мантиси зі знаком, байт зі зміщеним порядком);
− блок підпрограм перетворення форматів даних (із целочисленого формату у формат із плаваючою крапкою й назад);
− блок підпрограм для відображення целочислених даних (без знака й зі знаком) на семисегментних індикаторах.
Штатна таблиця векторів переходу по перериваннях
У цьому блоці реалізовані переходи на елементи таблиці векторів у програмі користувача. Для переходів використані адреси, що відрізняються від штатних на 2000h. Наприклад, по перериванню від таймера 0 (штатний вектор розташований за адресою 000Bh) заданий перехід на адресу 200Bh. По перериванню від послідовного порту UART (штатний вектор розташований за адресою 0023h) виробляється перевірка ознаки активності програми користувача UP_ACT. Якщо UP_ACT=0, то в цей момент виконується програма MONITOR, і, відповідно, відбувається перехід на підпрограму UAPP_M? розташовану в MONITOR-і. Якщо UP_ACT=1, тобто виконується програма користувача, то робиться перехід на адресу 2023h, тобто на вектор обробки переривання в програмі користувача.
Блок ініціалізації апаратних ресурсів
У цьому блоці виробляється установка режимів роботи паралельних і послідовних портів, таймерів і системи обробки переривань основного мікроконтролера AT89S8252. Установлювані режими представлені в табл. 2.1. Інформація представлена в порядку завдання відповідних настроювань у вихідному тексті програми MONITOR. Для забезпечення універсальності всі коментарі у вихідному тексті програми виконані англійською мовою.
Таблиця 2.1 – Режимів роботи паралельних і послідовних портів, таймерів і системи обробки переривань
Апаратний блок або ресурс мікроконтролера | Установлювані режими |
Вибір активного банку регістрів | Активний банк 0 |
Стік | Дно стека – 70h, розмір стека – 16 байт, максимальна адреса вершини – 7Fh |
Ознака активності програми користувача (UP_ACT) | Ознака скинута (UP_ACT = 0), тому що виконується програма MONITOR |
Послідовний порт | 9-ти бітова посилка (8 біт даних, біт контролю парності); швидкість передачі задається програмно; посилки, у яких 9-й біт дорівнює нулю, не ігноруються |
Таймери | Таймери 0 й 1 настроєні на режим 2 (8-розрядний рахунковий регістр із автоперезавантаженням стартового числа).В MONITOR-і використається тільки таймер 1.Стартове число дорівнює 253 для забезпечення швидкості передачі 9600 біт/с. Значення біта SMOD - 0.Режим для таймера 2 не задаєтьсяТаймер 1 - включений |
Система обробки переривань | Високий пріоритет переривання від послідовного порту UART.Дозволено переривання від послідовного порту UART |
Лінія P3.5 порту P3 – прийом сигналу від кнопки ПУСК про перехід на програму користувача | Лінія настроєна на уведення інформації |
Мікросхема портів К580ВВ55 | Всі порти (А,У и С) настроєні на уведення |
Порт P2 | Записано старшу частину адреси блоку адрес, по яких розміщені порти зовнішніх пристроїв УНМС-2 (індикація, елементи вводу-виводу) |
Блок тестування елементів індикації УНМС-2
У цьому блоці виконується тестування лінійки світодіодів, блоку семисегментних індикаторів і ЖК-дисплея.
Тестування виробляється тільки при включенні живлення УНМС-2. При натисканні кнопки СКИДАННЯ для перезавантаження системи тестування не виконується.
У ході тестування виробляється включення й відключення названих елементів індикації й користувач повинен візуально проконтролювати відображення певних даних. Порядок тестування наступний:
− відбувається очищення ЖК-дисплея;
− на лінійці світодіодів чотири рази по черзі запалюються й гаснуть ліва й права половини лінійки з інтервалом 0,4з;
− семисегментні індикатори чотири рази відображають число -8888 за схемою: включення на 0,4з - гасіння на 0,4з;
− у кожній позиції ЖК-дисплея одночасно відображається число 8 і показується протягом 2с., після чого ЖК-дисплей очищається.
Блок завантаження програми користувача
Після завершення тестування елементів індикації УНМС-2 переходить у режим завантаження програми користувача (т.зв. системний режим).
При виконанні цього блоку на лінійці світодіодів відображається "вогонь, що біжить" (час перемикання близько 0,4 с).
Коли черговий байт програми користувача переданий з ПЭВМ й отриманий послідовним портом ПЭВМ, формується апаратне переривання й викликається підпрограма його обробки (UAPP_M), у якій прийнятий байт листується з буфера послідовного порту в черговий осередок зовнішньої пам'яті, а також відображається на семисегментних індикаторах як 16-ричное число.
Також у блоці завантаження виробляється циклічно перевірка стану кнопки ПУСК (апаратний сигнал фіксується в біті M_UP). Перевірка виробляється, поки біт не прийме значення "0".
Програма користувача розміщається в зовнішній пам'яті програм УНМС-2, що фізично реалізована як ОЗУ. При роботі MONITOR-а ця область сприймається мікроконтролером як пам'ять даних.
Блок активізації функціональної програми користувача
Даний блок є останнім перед початком виконання програми користувача.
Перехід до цього блоку від попередні відбувається тільки при натисканні кнопки ПУСК (біт M_UP приймає значення "0").
У цьому блоці виконується чотириразове включення й вимикання лінійки світодіодів з періодом 0,8 з, а також наступні дії:
− виконується гасіння семисегментних індикаторів;
− зупиняється таймер 1, таким чином послідовний порт вимикається;
− установлюється в "1" ознаку активності програми користувача UP_ACT;
− активізується 1-й банк регістрів;
− виконується перехід на програму користувача за адресою 2000h.
Інші блоки програми MONITOR містять службові підпрограми, які частково використаються в самому MONITOR-і й можуть без обмежень викликатися в програмі користувача (див. табл. П1).
Після натискання кнопки ПУСК область ОЗУ, у якій була розміщена програма користувача, сприймається мікроконтролером як пам'ять програм, і користувач не може виконувати запис у цю область.
Порядок виконання програми MONITOR на УНМС-2
Оскільки програма MONITOR є системною й записана у внутрішню пам'ять програм основного мікроконтролера з адреси 0000h, те при включенні живлення завжди виконуються команди цієї програми.
Порядок й умови виконання основних блоків програми MONITOR представлені в табл.2.2.
Таблиця 2.2 – Порядок й умови виконання основних блоків програми MONITOR
Порядок виконання | Виконуваний блок | Умови виконання |
1 | Команда стартового переходу на блок ініціалізації | Включення живлення УНМС-2 або рестарт системи при натисканні кнопки СКИДАННЯ |
– | Штатна таблиця векторів переходу по перериваннях | При виникненні відповідних переривань.В MONITOR-і використається тільки переривання від послідовного порту UART |
2 | Блок ініціалізації апаратних ресурсів УНМС-2 | Включення живлення або рестарт системи при натисканні кнопки СКИДАННЯ |
3 | Блок тестування елементів індикації УНМС-2 | Однократно тільки при включенні живлення УНМС-2 |
4 | Блок завантаження програми користувача в зовнішню пам'ять УНМС-2 | Завершення блоку 2 (і 3 при включенні живлення). Виконується до натискання кнопки ПУСК |
У рамках 4 | Процедура прийому байтів програми користувача й розміщення в зовнішній пам'яті | Сигнал переривання від послідовного порту UART у випадку прийому байта від ПЕОМ. |
5 | Блок активізації функціональної програми користувача | Натискання кнопки ПУСК |
Взаємодія із програмою користувача
Використання службових підпрограм MONITOR-а
Всі підпрограми, реалізовані в системній програмі MONITOR, доступні для виклику із програми користувача. Таблиця П1 з інформацією про розміщення, функції й параметри підпрограм представлена в додатку.
Для виклику службової підпрограми в програмі користувача потрібно оголосити ім'я (необов'язково співпадаюче з наведеним у табл. П1) і зв'язати його з адресою розміщення потрібної підпрограми.
Наприклад, для відображення 16-ричного значення в одній позиції семисегментного індикатора можна скористатися підпрограмою SSI_1p, розташованої за адресою 0900h. Для цього в програмі користувача потрібно зв'язати довільне ім'я із зазначеною адресою, а потім використати це ім'я як адреса виклику.
Дана підпрограма очікує а акумуляторі значення числа для відображення, а в регістрі DPTR - системна адреса необхідної позиції індикатора.