- •Глава 2
- •Оглавление Разработка программного обеспечения Структура данных
- •Принцип построения программы.
- •Программное обеспечение
- •Тело основного цикла.
- •Прерывание
- •Выдача звуковых сообщений.
- •Модуль клавиатуры.
- •Интерфейсы Интерфейс с синтезатором частоты мс145192
- •Интерфейс с eeprom.
- •Протокол общения с жки
- •Испытания, расчеты и отладка Технология создания программы
- •Расчеты
- •Расчет констант для загрузки в синтезатор
- •Расчет констант для звуковых сообщений.
Программное обеспечение
Подробные блок-схемы всех частей программы приведены в приложении 2.
Тело основного цикла.
После PowerON Resetпо векторуresetпрограмма попадает на процедуру начальной инициализации, которая подготавливает контроллер к началу работы. В ее функции входит:
подготовка портов к работе
подготовка таймеров
подготовка начальных данных (инициализация)
восстановление сохраненных переменных из EEPROM
подготовка индикатора
перевод в режим Stand Byвсех внутренних устройств контроллера
перевод в режим Stand Byвсех внешних устройств (приемника, передатчика и синтезатора)
После инициализации программа попадает в основной цикл, где выполняются все не терпящие прерываний процедуры общения с внешними устройствами:
загрузка приемника
загрузка передатчика
сохранение данных в EEPROM
обработка звуковых сообщений
обработка автоповтора
обработка клавиатуры
Прерывание
Прерывания происходят по переполнению таймера TIMER1, которые происходят каждые 16мс. Здесь происходит отсчет всех времен (введены счетчики для определения времени проверки напряжения питания, автоповтора, звука, переключения между дежурным и текущим каналами и т.д.). Это время и является минимальным квантом времени в радиостанции.
Специфика этого микроконтроллера не позволяет при входе в прерывание автоматически сохранить все системные регистры, поэтому об этой проблеме следует позаботиться программисту. Он сам должен сохранить нужные ему для дальнейшей работы в основном цикле регистры. На процедуры сохранения и восстановления регистров уходит достаточно большое время и при такой низкой тактовой частоте процессора (500 КГц) введение еще одного или нескольких прерываний отняло бы массу вычислительных ресурсов процессора.
После сохранения регистров идет выяснение режима работы станции (прием или передача) и в зависимости от этого выполняются различные действия.
При загруженном передатчике требуется в зависимости от кнопки «>» подать или высокую или низкую мощность в УВЧ передатчика
При загруженном приемнике определяется наличие несущей частоты полезного сигнала в эфире. Если станция ее обнаруживает (уровень несущей больше уровня порога шумоподавителя), включается УНЧ и сигнал проходит на динамик. В случае отсутствия несущей уменьшается счетчик SLEEP, при обнулении которого станция переходит в режим сохранения энергииSTAND BY, откуда по прошествии определенного времени (не более 100 мс) она выходит и переходит в режим приема, но уже в другом прерывании.
После опроса приемника и передатчика станция опрашивает клавиатуру. Происходит аналого-цифровое преобразование, в результате которого на выходе АЦП получается 8ми разрядный двоичный код комбинации нажатых клавиш. Во избежание дребезга в следующем прерывании также считывается код и сравнивается с предыдущим. В случае их совпадения делается вывод о том, что комбинация считана. Но так, как клавиш всего четыре, а вместе с комбинациями из двух клавиш 16, требуется определить номер комбинации. Для этого создана клавиатурная таблица, расположенная во второй странице программной памяти и состоящая из 256 значений. По ней однозначно определяется нажатая комбинация.
После этого раз в секунду происходит проверка питающего напряжения и подача звукового сигнала в случае его несоответствия норме (это часто бывает при подсевших аккумуляторах в режиме передачи). Для выставления флага о сохранении данных в EEPROMтребуется соблюдение следующих условий : нет режима передачи и прошествие 7 сек со времени последнего нажатия на клавиатуру. Затем выставляется флаг об обработке звука, восстановление сохраненных регистров и выход из прерывания.