В разделе проектирования системы была определена функционально-модульная структура ПО контроллера. Эта структура должна быть дополнена еще двумя модулями, которые не могут быть выведены из функциональной спецификации – модуль инициализации и модуль разрешения общего прерывания. Когда система включается, она должна быть инициализирована, таким образом данный модуль должен находиться на втором уровне нисходящей иерархии – сразу за главным модулем. Разрешение общего прерывания не будем включать в модуль инициализации, с целью лучшей читаемости программы.
В соответствии с функционально модульной структурой процедура MAIN будет иметь вид:
MAIN()
{
ИНИЦИАЛИЗАЦИЯ СИСТЕМЫ();
РАЗРЕШЕНИЕ ОБЩЕГО ПРЕРЫВАНИЯ();
while (1)
{
ПРОВЕРКА ();
СБРОС WDT();
}
}
Первая операция процедуры MAIN обращается к процедуре инициализация, далее к процедуре разрешение общего прерывания. После выхода из этой процедуры осуществляется переход к другим процедурам, которые содержаться внутри бесконечного цикла while. Таким образом, в системе обеспечивается проверка нажатия кнопки, проверка состояния датчика температуры и сброс охранного таймера. Эти операции выполняются до тех пор, пока система подключена к источнику питания.
Модуль инициализации должен содержать процедуры, которые выполняют функции инициализации и восстановления после зависания. При включении питания необходимо настроить следующие узлы микроконтроллера: порты, таймеры, систему прерываний, охранный таймер. Порты настраиваются на ввод или вывод информации. Таймер служит для отсчета временных интервалов и для часов реального времени. Настройка системы прерывания заключается в определении источников прерывания и их разрешения. У охранного таймера настраивается время задержки до его срабатывания, если не будет к нему обращения. Данный модуль является не сложным, поэтому не имеет смысла разбивать его на отдельные процедуры:
ИНИЦИАЛИЗАЦИЯ()
{
Установка портов на ввод/вывод и задание выходного вектора;
Настройка постоянного времени охранного таймера;
Настройка системы прерывания, разрешение отдельных прерываний;
}
Модульразрешения общего прерывания разрешает системе реагировать на прерывания. Для контроллера это внешнее прерывание от кнопки и внутреннее от таймера. Разрешение индивидуальных прерываний выполнено в модуле инициализация.
Модульпроверкипроверяет состояние флага занятости индикатора. Если флаг не установлен, то запускается одна из процедур в выходном модуле. Эти процедуры содержатся в выходном модуле, такие как запись команды, запись данных и вывод информации на ЖКИ.
После окончания этой процедуры осуществляется сброс флага и разрешение принятия входных данных, и система снова готова реагировать на внешние события.
ПРОВЕРКА()
{
Если флаг занятости не установлен, то выполнить
{
ВЫХОДНОЙ (параметры);
}
}
Модуль сброс WDT устанавливает охранный таймер в исходное состояние, не позволяя ему сбросить всю систему. Это библиотечная функция языка.
Входной модуль должен реагировать на поступления данных, которые необходимо вывести на экран. Реализуем данный модуль в виде подпрограммы записи команды и данных на индикатор и вывода их на экран. При установлении занятости индикатора необходимо выставить флаг занятости.
ВХОДНОЙ()
{
Посылка команды
Вывод данных
}
Выходноймодуль устанавливает выходной вектор на выходной порт микроконтроллера. Данные сигналы управляют ЖКИ т.е. выводят информацию на индикатор.
ВЫХОДНОЙ
(параметры)
{
/* начало процедуры*/
Установка на порту выходного вектора;
}
/* возврат
Статьи к прочтению:
Объектно-ориентированное проектирование, часть 1 — как проектируются классы
Похожие статьи:
-
Проектирование аппаратной части устройства
Введение Домофон – это устройство, предназначенное для связи входящего в помещение и лица находящегося в помещении. Домофон является своеобразным…
-
Проектирование программных объектов
Принципиальная структура простого объекта, состоящего из четырех областей, имеет вид: (1) областьзаголовка объекта; (2) область полей данных объекта; (3)…