Конфигурация памяти данных. Внутренняя память данных имеет размер 2К слов и начинается по адресу 0х3000. Регистры управления и состояний процессора отображены в верхних 1К слов памяти данных по адресам 0х3С00-0х3FFF. Остальные ячейки верхних 1К слов остаются резервными. Внешняя память данных в нашем случае не используется.
Конфигурация памяти программ представлена на рисунке 3.6 б.
Рисунок 3.6 – Конфигурация памяти:
а) памяти программ, б) памяти данных
3.3 Составление программы на языке ассемблер
Для примера осуществим разработку ПО для состояний 0, 1, 2, 8 графа конечного автомата (рисунок 2.1). Для этого необходимо реализовать в полной мере алгоритмы main, on, adc, dac и r_adc. Листинг программы представлен в приложении А.
Программа main.
Блок начало включает в себя следующие директивы: определение таблицы векторов прерываний, определении внешних подпрограмм, а также настройка и инициализацию последовательного порта SPORT0 и аналогового интерфейса.
Используется 5 прерываний: прерывание по сбросу процессора reset по адресу 0х0800, прерывание по линии внешнего прерывания IRQ2 по адресу 0х0804, прерывание от последовательного порта0 при приеме SPORT0 Receive по адресу 0х0814, прерывание от аналогового интерфейса при приеме Analog Interface Receive по адресу 0х081С и прерывание от таймера Timer по адресу 0х0828.
Главной программе main видны 3 подпрограммы, вызываемые соответствующими прерываниями:on, sport, adc, и 3 подпрограммы dac, r_adc, t_sport.
Инициализация последовательного порта осуществляется записью в ячейку 0х3FF6 информации 0x2807, означающая, что используется внешняя тактовая и кадровая синхронизация, активный высокий уровень, длина слова 8 бит, без компандирования с заполнением 0. Активизация установкой 10 бита регистра управления.
Инициализация аналогового интерфейса осуществляется записью в ячейку 0х3FEE значения 0x0068, означающая, что усиление АЦП и ЦАП равно 0дБ, установкой фильтра верхних частот и установкой входного интерфейса на вход NORM.
Разрешение прерываний осуществляется загрузкой в регистр IMASK значения 0х229, означающая разрешение необходимых прерываний и маскирование ненужных (от таймера).
Блоки ожидание включения и ответа осуществляются командой IDLE, при этом микропроцессор приостанавливает работу и ожидает прерывания.
После идет проверка условия AR=B, означающая что было место приход информации с линии о подтверждении, что является концом обмена информации и приемник рестартует и вновь переходит в режим ожидания прерывания от УУ.
Подпрограмма on.
Процедурой .GLOBAL делаем подпрограмму видимой для основной программы и других подпрограмм.
В регистр AX0 загружаем значение 0х0001 (В1) – сигнал запроса первой цифры, и вызываем подпрограмму dac. По завершению которой возвращаемся в main.
Подпрограмма adc.
Эта подпрограмма осуществляет анализ принятой информации с АЦП и в зависимости от результата производит необходимые действия. Вызывается прерыванием по приему АЦП данных.
В начале подпрограммы осуществляется вызов подпрограммы r_adc - прием данных с АЦП. Вызываемая подпрограмма возвращает в регистре AR номер принятого сигнала.
Следующий блок программы осуществляет анализ принятой информации. Анализ происходит в следующем порядке: определяется сначала меньше ли 10 принятое число, если да то происходит прыжок и проверяется на 0, если это не 0, то это означает что принятый сигнал в диапазоне от 1 до 10, происходит прыжок, где выполняется код программы соответствующий этим сигналам (вызов подпрограммы t_sport, вызов подпрограммы dac с параметром 2). Если принятое число больше 10, то оно проверяется на 12 и на 13, в этих случаях выполняется вызов подпрограммы t_sport, в одном случае, загрузка номера последнего переданного сигнала и вызов подпрограммы dac, в другом случае. В иных случаях считается что принятая информация ошибочная и происходит запрос повтора вызовом подпрограммы dac с параметром 6.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.