"РЛ" - НАЧИНАЮЩИМ
запись и уменьшается после чтения.
Причем увеличение или уменьшение
может быть на 1 или на 2 в зависимос-
ти от того, какая именно команда про-
изводит обращение к памяти стека: Так,
команды PUSH и POP осуществляют
изменение SP на 1 - соответственно
PUSH увеличивает, a POP уменьшает.
Вы уже догадались, что команда PUSH
сначала содержимое SP увеличивает
на 1, а затем помещает (копирует) со-
держимое указанной в своем операн-
де ячейки памяти в ячейку, на которую
указывает регистр SP. Аналогично,
POP извлекает из ячейки, на которую
указывает SP, значение и помещает его
в ячейку-операнд, после чего содержи-
мое SP уменьшается на 1.
Небольшое отступление. Знако-
мые с оружием читатели легко увидят
аналогию между стеком и магазином
автомата: патрон
-
это данные, мага-
зин - это память стека, вершина стека
- эю “вхоД’ в магазин патронов. Раз-
ница толью в том, что в магазине вер-
шина неподвижна, а патроны продви-
гаются по мере поступления-извлече-
ния, а в стеке наоборот - данные “сто-
ят", а вершина-указатель
движетегС.
Однако, вспомнив принцип относитель-
ности движения, мы поймем, что раз-
ницы, в сущности, нетникаюй. Оба зти
устройства обеспечивают реализацию
принципа “последним вошел
-
первым
выше/ f (LIFO - Last In First Out), т.е.
данные (патроны) извлекаются в поряд-
ке, обратном тому, как поступали в стек
(магазин).
Не познакомившись с другими ко-
мандами, трудно понять, для чего же
нужен такой хитрый способ обращения
к памяти, как реализуемый через стек,
но поверьте - не только нужен, но и
крайне необходим! Замечу, что суще-
ствуют микроконтроллеры (других се-
мейств), у которых стек отсутствует,
либо реализован аппаратно и имеет не-
большую
глубину,
т.е. количество дос-
тупных ячеек. Это создает весьма се-
рьезные проблемы при программиро-
вании таких контроллеров, а вот в на-
шем семействе этой проблемы нет!
Благодаря тому, что в регистр ЭР мы
можем записать адрес любой из име-
ющихся 256-и ячеек, глубина стека мо-
жет быть весьма большой! Однако, при
неосторожном программировании воз-
можна ситуация, когда стек
перепол-
нится,
т.е. значение ЭР попытается
стать больше 256. Таккак ЭР - Это все-
го лишь байт, то в этом случае вместо
значения 256 (кстати, ячейки с таким
адресом и нет вовсе) мы получим зна-
чение 0, т.е. вершина стека из после-
дней ячейки ОЗУ переместится на на-
чало и, разумеется, может испортить со-
держимое регистра ЯО и других, если
обращение к стеку будет продолжать-
ся. Проблема переполнения стека все-
гда существует при разработке любых
программ, просто для микроконтролле-
ров с их ограниченным ОЗУ она особо
актуальна.
Рассказывая о регистре БР, я дол-
жен перейти к очередной важной осо-
бенности работы устройства управле-
ния микроконтроллера. Эта особен-
ность касается сброса микроконтрол-
лера. Дело в том, что указатель стека
(как и другие регистры специальных
функций)
инициализируются,
т.е. полу-
чают определенные значения,
автома-
тически после сброса
(перед началом
исполнения программы). Инициализи-
руются
только регистры специаль-
ны х функций,
содержимое ячеек па-
мяти остается неизменным при сбро-
се, если не было пропадания напряже-
ния питания микроконтроллера. Так
вот, после сброса регистр ЭР получает
значение 07И, т.е. указывает на ячей-
ку с адресом
0711
, что соответствует
В связи с тем, что в настоящее время рассматриваемый в статьях микроконт-
роллер снят с производства и заменен новым АТ8988253, автор цикла разра-
ботал специальный плагин и адаптер программатора СЫрВоот, при помощи
которого можно осуществить программирование новой модели. Несмотря на
некоторые отличия нового контроллера, он полностью совместим с АТ8958252,
поэтому весь материал в полном объеме применим и к нему. Сведения об име-
ющихся (незначительных) особенностях нового МК мы обязательно разместим
после завершения всего цикла статей. Всю необходимую информацию, а так
же архив плагина можно скачать с сайта автора: http://arvresearch.nm.ni/
Плагин (файл а/бРв-Ье/а-г/р) также можно скачать с сайта нашего журнала:
http://www.radloliga.com (раздел “Программы”)
Таблица 7. Значения,
получаемые некоторыми регистрами
специальных функций после сброса
Регистр
Значение
PC
OOOOh
ACC
OOh
В
ООН
PSW
OOh
SP
07h
DPTR
OOOOh
DPTRO
OOOOh
DPTR1
OOOOh
регистру
Р7
нулевого банка. Если мы
намерены в своей программе задей-
ствовать этот регистр, мы обязательно
должны изменить значение ЭР до
пер-
вого обращения
к 137. Если же кроме
регистров нам требуются еще какие-то
ячейки памяти для работы (а именно
так, как правило, и бывает), мы долж-
ны, во-первых, разместить по возмож-
ности все используемые нами ячейки
слитно, т.е. без промежутков, а во-вто-
рых, задать такое значение ЭР, кото-
рое соответствовало бы адресу
первой
неиспользуемой
нами ячейки ОЗУ. Та-
кой подход позволит нам всегда отво-
дить под стек максимально возможную
область памяти, что позволяет почти не
беспокоиться
о
проблеме переполне-
ния стека. Обычно установка указате-
ля вершины стека, т.е. занесение зна-
чения в ЭР, осуществляется в первой
или одной из первых команд любой про-
граммы. Рекомендую сразу привыкнуть
устанавливать значение ЭР как можно
раньше, даже если сложность вашей
программы не требует этого делать (как
в ранее рассмотренном нами примере
“мигалки”).
В последующем, когда мы будем
знакомиться с новыми регистрами спе-
циальных функций, я обязательно буду
указывать, какое именно значение по-
лучаеттот или иной регистр после сбро-
са. В качестве “анонса” сообщу сведе-
ния об уже известных вам (таблица 7).
Как видите, большинство известных
нам регистров просто обнуляются при
сбросе. Знание начального значения
регистров может позволить избежать
ненужных пересылок в начале програм-
мы - в самом деле, зачем заносить в
аккумулятор 0, если он уже там?
Продолжение в N95/2007
Радиолюбитель - 0 4 /2 0 0 7 [)
59
предыдущая страница 59 Радиолюбитель 2007-04 читать онлайн следующая страница 61 Радиолюбитель 2007-04 читать онлайн Домой Выключить/включить текст