Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 3. А теперь ближе к практике: знакомтесь — микроконтроллеры AVR 91 имеют еще один вид команд, который можно рассматривать как их моди- фикацию. Это команды типа «проверка/пропуск». В командах этого типа производится проверка некоего условия, и результат проверки влияет на выполнение следующей команды. Если условие истинно, то следующая команда игнорируется. То есть сама команда не выполняется, изменяется лишь содержимое счетчика команд. Это содержимое увеличивается либо на единицу, либо на две единицы, в зависимости от длины пропускаемой команды. Если условие ложно, то команда не пропускается, а выполняется как обычно. Теперь перейдем к указателю стека. Это полезно запомнить. Указатель стека — это специальный регистр, который пред ­ назначен для организации так называемой стековой памяти. Стековая память широко применяется в вычислительной тех ­ нике. Вообще, стек — это некий буфер, состоящий из нескольких ячеек памяти, имеющий один вход, который одновременно явля ­ ется и выходом. Запись в стековую память и чтение из нее производится по принципу магазина автомата Калашникова. Патроны в такой магазин вставля ­ ются через входное отверстие один за другим. Извлекаются патроны из магазина в обратном порядке по принципу «последний зашел — первый вышел». Стековую память очень часто используют при программиро ­ вании. Особенно удобно использовать стек для сохранения данных при входе в подпрограмму и восстановления их перед выходом. В дальней ­ шем мы убедимся в этом на примерах. В настоящий же момент я хочу остановиться на методах организации стековой памяти. В микроконтроллерах серии AVR применяется широко распростра ­ ненный способ организации стековой памяти, когда в качестве стека используется часть ОЗУ Для реализации принципа «последний зашел — первый вышел» и служит регистр-указатель стека. В зависимости от размеров ОЗУ, разрядность указателя стека бывает разная. В микро ­ контроллерах с небольшим объемом ОЗУ используется восьмиразряд ­ ный указатель стека. Он представляет собой один регистр ввода-вывода и доступен для свободного считывания и записи. Называется такой регистр SPL. Для ОЗУ больших размеров к регистру SPL добавляется еще один регистр SPH. Вместе они составляют один шестнадцатиразрядный указатель стека. Перед началом работы в указатель стека необходимо записать адрес вершины стека. Это некий адрес ячейки ОЗУ, которая является старшей ячейкой области памяти, выделенной под стек. Определять размер стеко ­ вой памяти и адрес ее вершины должен сам программист.

RkJQdWJsaXNoZXIy MTExODQxMg==