Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
282 Микроконтроллеры AVR от азов программирования... те 12 — те17. Применение удвоенных значений обусловлено необходи мостью перевода адресов из основной адресации в альтернативную. При трансляции программы вместо меток в память будут записаны конкрет ные адреса. Процедура вычисления адреса Большое количество таблиц в нашей программе заставляет позабо титься о процедуре вычисления адреса. Как нам известно из предыдущей программы, для извлечения элемента из таблицы нам необходимо произ вести вычисление его адреса. В новой программе подобные вычисления нам придется выполнять для каждой таблицы. Однотипные вычисления удобно оформить в виде подпрограммы. Эта подпрограмма занимает строки 78 — 84. Вызов подпрограммы произво дится по имени addw. Подпрограмма получает номер элемента таблицы и адрес ее начала. Номер элемента передается в подпрограмму при помощи регистра YL, а адрес — через регистровую пару Z. Используя эти данные, подпрограмма вычисляет адрес нужного эле мента. Для этого она сначала удваивает номер элемента (строка 79). Затем дополняет полученное значение до шестнадцатиразрядного путем записи в YH нулевого байта (строка 80). И, наконец, производит сложение двух шестнадцатиразрядных величин, находящихся к этому моменту в реги стровых парах Y и Z (строки 81, 82). Результат вычислений при этом попадает в регистровую пару Z. Назначение команд push и pop (строки 78,83), по-видимому, уже объяснять не нужно. Текст программы «шаг за шагом» Теперь вернемся к самому началу и рассмотрим текст программы по порядку. Начало программы практически полностью соответствует пред ыдущему примеру (см. листинг 5.15). Небольшое отличие лишь в модуле описания переменных (в новой программе это строки 3 — 10). Теперь там описывается гораздо больше переменных (рабочих регистров). Название и назначение новых переменных прекрасно видны из текста программы. Без изменений остался модуль переопределения векторов прерываний (строки 13— 31) и модуль команд инициализации (строки 32 — 44). Не изменилась даже процедура сканирования управляющих кно пок (строки 45 — 52), которая так же, как и в предыдущем примере, опре деляет номер первого из входов, у которого оказались замкнуты контакты. На этом сходство двух программ заканчивается. Начиная со строки 53, мы видим абсолютно новую программу. Рассмотрим ее подробнее.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==