logo
Midi-контроллеры клавиатурного типа

3.1.1 Описание основных частей программе

В программе можно выделить следующие блоки:

· Блок объявления переменных. В этом блоке описываются основные переменные и флаги.

· Блок инициализации программы. В этом блоке осуществляется первоначальная настройка микроконтроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП и последовательного канала.

· Основной цикл программы. Реализует сдвиг октавы, выводит на индикатор величину текущего сдвига, проверяет состояние клавиш, при нажатии или отжатии оных посылает соответствующее сообщение в последовательный порт.

· Обработчик прерывания таймера. Осуществляет сканирование клавиатуры. При нажатии и отжатии клавиш выставляет и сбрасывает соответствующие флаги.

· Обработчик прерывания АЦП. Считывает значения преобразования АЦП. Переводит их из диапазона 0..4096 в диапазон 0..100.

3.1.2 Описание алгоритма работы основной программы

При включении питания начинает выполнение основной программы. В начале нее вызывается процедура инициализации контроллера. Установка битов управления и направления передачи данных в портах ввода-вывода, инициализация АЦП и последовательного порта на скорости 2400 бит в секунду, размером кадра 9 бит (8 бит данных + один стоп-бит), что соответствует стандарту MIDI-связи.

Далее начинается исполнительный блок программы. Происходит зацикливание с помощью бесконечного цикла do while 1. В начале этого цикла происходит проверка на нажатие клавиши программирования сдвига октавы. Если она нажата, то, в соответствии с выбранной первыми четырьмя клавишами музыкальной клавиатуры устанавливается сдвиг. Выбранная величина сдвига отображается на индикаторе. Затем происходит однократный запуск АЦП для считывания значения устанавливаемой пользователем силы нажатия на клавишу. На следующем этапе проверяется состояние флага klo, который отвечает за отпущенные клавиши. Если этот флаг не равен нулю, то есть имеется необработанная отпущенная клавиша, номер этой клавиши с установленным седьмым битом ( в соответствии со стандартом MIDI) посылается через последовательный порт в персональный компьютер. На последнем этапе цикла происходит проверка нажатия новой клавиши. Если такое событие имеет место, то в последовательный порт посылается номер октавы и номер ноты, соответствующие нажатой клавише.