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

Наконец, началась программа! Первые 8 байт ПЗУ хранят важнейший стартовый вектор: указатель стека и входную точку программы. Входная точка находится в «истинном» ПЗУ (по адресу $40008), поэтому мы можем немедленно очистить бит BOOT, что приводит к замещению временного образа ПЗУ, используемого при начальной загрузке, оперативной памятью. Теперь мы можем загружать векторы прерываний в начало ОЗУ, в конкретные ячейки, определяемые архитектурой МП 68008 (вся область векторов приведена в табл. 11.5): $68 (INT2), $74 (INT5) и $7С (NMI = INT7). Мы использовали только INT5 (от 100 мкс — таймера в микросхеме параллельного порта); в этот вектор мы загружаем адрес нашего обработчика прерываний. В зависимости от конкретного состояния прибора (ожидание пуска или внешнего сигнала запуска, начало новой развертки, процесс развертки) обработчик прерываний должен выполнять различные функции; поэтому мы написали один грандиозный обработчик со многими точками входа, соответствующими его функциям. На данном этапе мы еще не готовы принимать данные, поэтому в вектор INT5 мы загружаем входную точку idle__int (прерывание простоя). Очень полезно загрузить на всякий случай все неиспользуемые векторы прерываний адресом bad__int (ложное прерывание) (вдруг произойдет деление на нуль, ложное прерывание и т. д.); мы загружаем в них адрес программы, которая зажигает ЭЛД определенным образом (далее будет видно, каким именно).

Теперь наступает утомительный, но существенный этап инициализации портов. БИС периферийных устройств, как, например, 8536, обладают изумительной гибкостью, но за нее приходится платить тщательным планированием. Вы должны продумать, какие управляющие байты следует послать, в какие регистры и в каком порядке, чтобы получить требуемый результат. Для простых параллельных портов в процессе планирования следует выбрать направление, полярность, режим и прерывания, а для таймеров — основание счета, каскадирование, режим запуска, прерывания и проч. В программе 11.3 приведен полный текст инициализации параллельного порта/таймера. Разрешаются параллельные порты А, В и С, причем биты 4–6 порта В назначаются выходными, а остальные - входными (см. рис. 11.15). Таймер-0 настраивается на деление его тактовой частоты 4 МГц на 400 и на непрерывный перезапуск с генерацией прерывания (по INT5) каждые 100 мкс. Заметьте, что все установочные входы мы сделали инверсными, поэтому при замыкании контакта (на который изначально подано +5 В) на землю с него считывается 1, а не 0. На входе, к которому подключена кнопка СТОП, мы использовали опцию «запоминания 1», так что мгновенное нажатие фиксируется, а отрабатывается оно только в конце развертки.

Наконец, мы очищаем массивы в ОЗУ (отметьте использование подпрограммы), инициализируем регистры, разрешаем прерывания и переходим на выполнение «главного» цикла.

Главная программа: главный цикл.

Завершив инициализацию, мы входим в бесконечный главный цикл main__loop. Фактически он состоит из двух циклов: цикла ожидания нажатия кнопки ПУСК и цикла непрерывного обновления памяти изображения, на фоне которого осуществляется сбор данных в режиме прерываний. Программа обработки прерываний, завершив последнюю развертку, устанавливает программный «флаг останова» stop__flag, который непрерывно проверяется вторым главным циклом. Обнаружив установленный флаг, главная программа возвращается в первый цикл ожидания нового пуска. Давайте сопоставим структурную схему и программные строки.

Главный цикл (рис. 11.19) начинается с установки на ЭЛД состояния «ожидание». Затем программа ждет нажатия кнопки ПУСК, т. е. ее перехода из разомкнутого в замкнутое состояние. Это сложнее, чем кажется, потому что кнопка не содержит цепей подавления дребезга, в результате чего вы имеете несколько десятков близко расположенных перепадов между уровнями «замкнуто» и «разомкнуто», возникающих на протяжении, возможно, 25 мс. Этого времени может хватить на завершение самого короткого цикла измерений (если вы выбрали 1 развертку и интервал дискретизации 100 мкс), после чего измерения будут ошибочно продолжены, поскольку контакт кнопки все еще колеблется между состояниями «разомкнуто» и «замкнуто». Поэтому мы написали простенькую программу подавления дребезга, которая фиксирует, что кнопка была непрерывно разомкнута в течение приблизительно 50 мс (тем временем многократно выполняется подпрограмма обновления update), а затем переходит в состояние «замкнуто». Наконец мы получили приказ на выступление!

Программа сбрасывает выходной сигнал КОНЕЦ, считывает состояние управляющей панели и использует соответствующим образом полученные значения (устанавливая программные флаги типа auto__loop и параметры вроде dwell__per__bin

и num__sweeps). Обратите внимание на использование таблицы decode__tbl (и косвенной адресации с индексацией) для получения значений, соответствующих положениям переключателей.

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

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

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

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

Чарльз Платт

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

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

Сид Катцен

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

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

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

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