Читаем Искусство схемотехники. Том 3 полностью

Прерывания от таймера: idle. Учитывая важность обработчика, рассмотрим его во всех деталях. Ранее в главной программе вектор прерываний был настроен на вход idle, чтобы в ожидании запуска образовать изображение на экране. Таким образом, выполнение начинается с метки idle__int. Если вспомнить назначение зарезервированных регистров, понять ход программы не сложно. В D4 хранится индекс очередной точки экрана, требующей регенерации, который мы посылаем в преобразователь Х-координаты ЦАПО (используя косвенную адресацию со смещением, которая быстрее абсолютной). В преобразователь Y-координаты ЦАП1 мы посылаем данное (используя D4 в качестве индекса массива DISPLAY, указатель базы которого находится в А4). D4 инкрементируется (но не проверяется на конец массива) и управление передается генератору импульса Z-оси.

Упражнение 11.16. Объясните, почему можно обойтись без проверки индексного регистра D4 массива DISPLAY после его инкрементирования?


К этому времени Х- и Y-ЦАП уже установились (время установки 1 мкс), поэтому генератор Z-импульса с помощью команды BSET устанавливает бит Z__BLANK (бит 4, см. определения) параллельного порта В, адрес которого, ввиду его частого использования, мы храним в регистре А2. Сбросить бит можно следующей командой, но в этом случае образовался бы слишком короткий (3 мкс) импульс, и изображение было бы бледным (подсветка на 3 мкс каждые 100 мкс). Поскольку, однако, все прерывания завершаются через этот программный блок, мы можем воспользоваться возможностью и сделать полезное дело, одновременно убив время, именно, сообщить таймеру, что он может снять свой запрос на прерывание. Запись в регистр команд и состояния таймера-1 осуществляется с помощью двухэтапного процесса (как это было и в блоке инициализации главной программы): сначала мы посылаем в управляющий регистр микросхемы (адрес $84003) внутренний адрес регистра ($0А), а затем посылаем сам управляющий байт ($20), который интерпретируется микросхемой 8536, как команда на снятие запроса прерывания от таймера-1. Больше до выхода из прерывания ничего делать не нужно, поэтому мы завершаем импульс Z-оси (командой BCLR) и выполняем команду RTE (возврат из исключения). Поместив строки подтверждения прерывания в генератор Z-импульса, мы удлинили импульс подсветки до 10 мкс, с повторением его каждые 100 мкс. Прерывание все равно надо было подтвердить, и мы нашли для этого самое подходящее место. Такая же глюковина использована нами и в другом месте, когда мы в течение аналого-цифрового преобразования посылаем в ЦАП X и Y-координаты точки. Об этом ниже.

Прерывания от таймера: get_data. Эта точка входа используется чаще других, именно, когда усреднитель сигнала выполняет развертку. Мы запускаем АЦП, посылая в его порт байт режима ($03); это число определяет биполярное преобразование в дополнительном коде. Как и раньше, для повышения скорости мы используем косвенную адресацию через регистр A3 (в котором хранится адрес АЦП).

Теперь надо подождать 10 мкс окончания преобразования — прекрасная возможность послать на ЦАП дисплея новую пару X и Y-координат точно так же, как это делается в блоке idle. Эти программные действия заканчиваются на 1 мкс раньше, чем нужно, поэтому мы тянем время с помощью команды NOP (холостая команда), а затем считываем АЦП. Заметьте, насколько это удобнее, чем вводить бит состояния, сигнализирующий о завершении преобразования в АЦП (эта возможность обсуждалась в разд. 11.05); не забудьте, однако, добавить еще несколько команд NOP, если вам захочется увеличить тактовую частоту ЦП.

Мы прочитали из АЦП байт в дополнительном (до 2) коде, но наш массив DATA и накопитель ячейки (D7) используют длинные дополнительные числа. Для получения длинного целого числа дважды выполняется команда ЕХТ (расширение знака). Расширение знака представляет собой просто копирование самого старшего бита числа влево, пока не заполнится большее по длине целое слово; эта операция сохраняет значение целого со знаком (простое заполнение нулями не сохраняет значения числа). Расширенное целое добавляется к накапливаемому содержимому ячейки в D7, а счетчик ширины канала dwell__per__bin (D6) декрементируется. Если в нем еще не нуль, возврат осуществляется через z__pulse, как описано выше. Полное время выполнения программы обработчика в этом случае составляет 32,3 мкс плюс 9 мкс на процедуру прерывания ЦП и еще 5 мкс на команду RTE, всего 46,3 мкс. Таким образом, главная программа имеет более половины процессорного времени на выполнение простой задачи обновления массива DISPLAY.

Перейти на страницу:

Похожие книги

Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки
PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника
Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки