Микроконтроллер AVR

advertisement
Микроконтроллер AT89C2051.
http://book.mirmk.net/book1/text/noglav.htm
Глава 13. Структурная схема микроконтроллера.
В предыдущих главах мы рассмотрели общие принципы построения
микропроцессорных систем. Дальнейшее обучение целесообразно проводить на
примере конкретного микропроцессора. И так, что же такое AT89C2051. Это
представитель семейства однокристальных микроконтроллеров американской
фирмы Atmel.
Микросхема выполнена в стандартном DIP – корпусе и имеет 20 выводов.
Основное
достоинство
рассматриваемого микроконтроллера
–
это
совместимость по системе команд с широко распространенной микросхемой
фирмы Intel - MCS-51 (советский аналог 1816ВЕ51). Разработчики ставили
задачу создать микросхему, максимально совместимую со своим аналогом, но
при этом имеющую меньшие габариты и более удобную в применении. Для
этого они отказались от одного из портов ввода/вывода, отказались от всех
режимов, требующих внешних микросхем обвязки, встроили тактовый
генератор в корпус контроллера и применили в качестве памяти команд
электрически перепрограммирываемое ПЗУ, что дало возможность очень
быстро и легко перепрограммировать микросхему.
Применение системы команд популярного в свое время микропроцессора,
позволяет использовать для создания и отладки программ уже существующие
инструментальные программные средства.
Программы для микропроцессоров разрабатываются с использованием
компьютеров. При этом применяются другие программы, помогающие в
разработке первых. Программы, которые мы разрабатываем,
называются прикладными программами. А те, при помощи которых мы это
делаем, называются инструментальными.
К достоинствам микросхемы AT89C2051 относится наличие режима защиты программы,
зашитой» в память программ микросхемы от несанкционированного копирования.
Перечисленные выше достоинства, а так же достаточно низкая стоимость ($1,5) и
послужили причиной выбора именно этого процессора для разработки позиционера.
На рисунке 31 приведена структурная схема микроконтроллера AT89C2051. Рассмотрим
основные элементы схемы. Схема очень напоминает типовую схему микропроцессорной
системы (рис. 28). Но имеются и существенные различия, связанные с тем, что вся эта
схема находится внутри одной микросхемы.
Итак попорядку:
ППЗУ программ. Встроенное перепрограммируемое ПЗУ объемом 2 Килобайта.
Выполнено по технологии электрически стираемого ПЗУ (так называемая Флэшпамять). В эту память записывается программа, по которой микроконтроллер начинает
работать после включения питания и окончания сигнала сброса. Программирование ППЗУ
программ производится при помощи специального устройства - программатора.
Программатор последовательно, байт за байтом записывает программу в ячейки ПЗУ,
начиная с первой. На техническом жаргоне это называется «прошить ПЗУ». Технология
флэш-памяти допускает перепрограммирование, то есть повторную запись. Для этого
информацию в ППЗУ сначала стирают. Для стирания используется повышенное
напряжение 12 вольт. При этом напряжение питания микросхемы от 2.7 до 6 вольт
(обычно оно равно 5 вольтам). Программатор может так же произвести стирание ППЗУ
программ. При этом происходит стирание сразу всей записанной информации. В стертое
ППЗУ программ можно «зашивать» новую программу. Допускается: 1000 циклов
записи/стирания.
При помощи того же программатора можно читать записанную в ППЗУ программ
информацию. Этот режим введен для контроля правильности прошивки.
Рис. 31.
Для того, что бы исключить возможность несанкционированного чтения информации и
незаконного дублирования, в микросхеме применена двухуровневая блокировка памяти
программ. При помощи все того же программатора, в любой момент можно прошить один
или два бита защиты. После прошивки первого бита блокируется возможность
допрограммировать ППЗУ программ. При прошивке второго бита становится
невозможным и чтение. Схему повторить всегда можно. А вот программу, придется
создавать самому. Прочитать и затем тиражировать ее не удастся. Биты защиты
очищаются в процессе стирания ППЗУ программ.
ОЗУ данных. Используется для хранения оперативных данных. Оно имеет
128 восьмиразрядных ячеек памяти. Как и в большинстве однокристальных микроЭВМ,
микросхема AT89C2051 применяется принцип совмещения ОЗУ данных с регистрами
общего назначения процессора и портами ввода/вывода. Подробнее об этом мы
поговорим в последующих главах. Внешняя память данных, в отличии от аналога (MCS51), в рассматриваемой микросхеме не применяется.
Порты P1 и P3. Это два восьмиразрядных порта ввода/вывода. Они имеют названия P1
и P3 потому, что в микросхеме – оригинале (MCS-51) имелось четыре порта ввода/вывода.
Поставив перед собой задачу, сократить количество выводов до 20, конструкторы были
вынуждены сократить количество портов ввода/вывода. В связи с этим были исключены
порты P0 и P2. Кроме того, порт P3 теперь не полный. Линия P3.6 не выходит не на один
из внешних выводов микросхемы и используется, как вход для сигнала от встроенного
аналогового компаратора.
АЛУ. Арифметико-логическое устройство. Оно заменяет здесь центральный процессор.
Дело в том, что АЛУ и есть центральный процессор в чистом виде. Без внутренних
регистров и других вспомогательных элементов, функции которых в данном случае
распределены между другими устройствами системы. Внутренние регистры, например,
совмещены с ОЗУ данных.
Таймеры. В микросхеме имеются два встроенных 16-разрядных таймера/счетчика Т1 и
Т2. Они могут использоваться программистом для задания любых интервалов времени.
Причем счетчик T1 имеет режим работы, при котором он делится на два 8-разрядных
таймера, которые могут работать по отдельности. Можно программно запустить и
остановить любой из счетчиков. Счетчики могут работать как в режиме отсчета
временных интервалов (в этом случае они считают импульсы внутреннего тактового
генератора), так и в режиме подсчета внешних импульсов. В позиционере спутниковой
антенны используются оба таймера. Один из них задает период динамической индикации,
а второй используется для формирования временных интервалов, системы распознавания
сигналов дистанционного пульта управления. При этом оба счетчика работают в режиме
отсчета времени.
Последовательный канал. Это канал специального типа для последовательной передачи
информации по одной линии (бит за битом по одному проводу). В любом компьютере
имеются обычно два последовательных интерфейса. К одному из них часто подключается
манипулятор «мышь». А второй предназначен в основном для подключения модема.
Именно такой канал и реализуется в микросхеме. В позиционере спутниковой антенны
данный канал не применяется.
Встроенный контроллер прерываний. Способен обрабатывать шесть источников
прерываний. Два источника – это внешне входы для запросов на прерывание. Следующие,
два входа – это прерывания от первого и второго счетчиков/таймеров. Прерывание по
этим входам происходит тогда, когда соответствующий счетчик/таймер досчитает до нуля
(счетчик работает в режиме обратного счета). И, наконец последние два источника
прерывания – это прерывания от последовательного канала ввода/вывода. Один от
передатчика этого канала. Он срабатывает в тот момент, когда процесс отправки
очередного байта закончился. И один от приемника. Срабатывает, когда приемник принял
очередной байт.
Аналоговый компаратор. Обычный компаратор аналоговых сигналов. На его выходе
появляется сигнал лог. 1, когда напряжение на входе «+» превысит напряжение на входе
«-».
Внутренняя системная шина. По устройству и назначению полностью аналогична
системной шине стандартной микропроцессорной системы.
На схеме рис. 31 не показан один
важный
элемент:
встроенный
тактовый генератор. На рисунке 32
показана блок-схема генератора с
внешними навесными элементами,
которые необходимо подключить к
микросхеме для ее нормальной
работы. Внешними элементами
являются кварцевый резонатор,
определяющий частоту тактового
генератора и две согласующие
емкости.
Рис. 32.
Схема генератора построена таким образом, что допускает синхронизацию от внешнего
тактового генератора. При включении микросхемы в таком режиме, кварцевый генератор
и согласующие емкости не устанавливаются, а на вход XTAL1 подается тактовый сигнал
от внешнего генератора.
Микросхема AT89C2051 относится к полностатическим системам. Это означает, что
частота тактового генератора может изменяться от 0 Гц от 24 МГерц. И во всем этом
диапазоне частот микросхема сохраняет полную работоспособность. Из схемы рис. 32
видно, что сигнал внутреннего тактового генератора поступает на делитель, который
делит тактовую частоту на шесть. И уже этот сигнал и служит для синхронизации всех
внутренних цепей микроконтроллера. Наличие делителя - один из недостатков данной
микросхемы. При максимально возможной тактовой частоте кварца в 24 МГц,
микроконтроллер фактически работает на частоте в 4 МГц. Такое схемное решение
обусловлено требованиями совместимости с микросхемой MCS-51. Но не смотря на такой
недостаток, для многих применений, таких, как, например позиционер спутниковой
антенны, быстродействия микроконтроллера AT89C2051 вполне хватает.
Глава. 14. Назначение выводов.
Рассмотрим теперь подробнее назначение
выводов
микросхемы AT89C2051.
На
рисунке
33
приведена
цоколевка
микросхемы. Как видно из рисунка, на
вывод 20 подается напряжение питания
микросхемы (2,7…6В). Вывод 10 – это
общий провод. Выводы XTAL1 и XTAL2
предназначены
для
подключения
кварцевого резонатора (см. рис. 32.).
Остальные выводы микросхемы - это
разряды портов ввода/вывода (P1 и P3).
Каждый из этих выводов является
одновременно и входом и выходом. При
Рис. 33. этом многие выводы выполняют сразу
несколько функций (альтернативные функции выводов указаны в скобках). Разберемся в
этом подробнее.
Для того, что бы выводы портов могли
быть одновременно и входами и
выходами, они собраны по схеме,
показанной на рис. 34. Из этой схемы
видно, что к каждому выводу
подключен
логический
вход
соответствующего разряда порта ввода
информации. В ту же точку подключен
каскад с открытым коллектором и
резистором нагрузки (Rн). Схемы
разрядов P1.0 и P1.1 порта P1 –
исключение. Они отличаются от
приведенной на рис. 34 тем, что в них
Рис. 34
отсутствует
резистор Rн.
При
необходимости рекомендуется подключать внешние резисторы номиналом в 5-10 кОм к
указанным выводам микросхемы. На вход каскад с открытым коллектором подключен
выход соответствующего разряда порта вывода.
Как работает такая схема? Очевидно, что при помощи каскада с открытым коллектором
порт вывода может управлять выходным сигналом линии. Если транзистор ключа открыт,
он «посадит» выходное напряжение на общий провод и на выходе порта установится
сигнал логического нуля. Если транзистор закрыт, то благодаря резистору нагрузки на
выходе будет присутствовать сигнал логической единицы. Для того, что бы вход порта
ввода мог работать на прием внешнего логического сигнала, программист должен
позаботиться, что бы программа предварительно записала в соответствующий разряд
порта вывода логическую единицу. При этом транзистор каскада с открытым коллектором
закроется, и не будет мешать дальнейшей работе схемы. Теперь, внешнее устройство,
подключенное к этому входу, может будет определять логический сигнал. Если оно
выдаст сигнал лог. 0, то порт ввода считает логический ноль. Если внешнее устройство
выдаст лог. 1, то порт ввода считает логическую единицу.
Мощность выходных ключей микроконтроллера AT89C2051 допускает прямое
подключение светодиодного дисплея к любому своему информационному выходу.
Отсутствие резисторов Rн на выводахP1.0 и P1.1 обусловлено тем, что эти выводы
выполняют еще одну функцию. Они служат входами аналогового компаратора.
Выводы P1.1 и P1.2 не единственные, имеющие двойное назначение. В таблице
1 перечислены остальные такие выводы и их альтернативная функция.
Таблица 1.
Вывод
микросхемы
2
3
6
7
8
9
Линия порта
Альтернативная функция
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
RXD (вход последовательного порта)
TXD (выход последовательного порта)
INT0 (внешнее прерывание)
INT1 (внешнее прерывание)
T0 (таймер 0 внешний ввод)
T1 (таймер 1 внешний ввод)
Рассмотрим это подробнее:
RXD и TXD – соответственно вход и выход последовательного канала. Как уже
говорилось, последовательный канал – это канал передачи информации, где
информация предается по одной линии (вернее одна линия на передачу, одна на
прием). Каждый байт информации передается последовательно, бит за битом.
Такой способ позволяет обойтись всего двумя проводами для приема и передачи
информации (не считая общего провода). Это позволяет уменьшить количество
проводников в кабеле при подключении внешних устройств. Последовательный
канал был разработан для подключения к компьютеру модема. Модем
(модулятор-демодулятор) предназначен для передачи цифровой информации
через телефонную сеть. Он тоже действует по принципу последовательной
передачи информации. Модем кодирует каждый бит разными частотами
звукового сигнала. Нулевой бит одной частотой, единичный – другой. Затем он
передает звуковые посылки в телефонную линию. Аналогичный модем на
другом конце телефонной линии производит обратное преобразование. Для
подключения модема последовательный канал подходит идеально. В настоящее
время имеется целый ряд внешних устройств, подключаемых по
последовательному каналу. Например мышь, некоторые виды принтеров и др.
Встроенный последовательный канал микросхемы AT89С2051 имеет несколько
режимов работы. Один из этих режимов совместим с последовательным портом
персонального компьютера (RS-232). Это позволяет создавать на таком
микроконтроллере различные микропроцессорные устройства, управляемые от
компьютера по последовательному каналу. Как уже отмечалось, в позиционере
спутниковой антенны последовательный канал не используется.
INT0 и INT1 – два входа внешних прерываний. При помощи этих входов
сигналы от любых внешних устройств в микропроцессорной системе (клавиш,
датчиков и т. п.) могут обрабатываться контроллером в режиме прерывания. В
позиционере применение такого способа для обработки сигналов датчика
возможно, но по некоторым соображениям не применяется.
T0 и T1 – входы управления внутренними счетчиками/таймерами. Вход T0
управляет таймером T0, а вход T1 – таймером T1 соответственно. В разных
режимах работы таймеров входы управляют им по разному. В режиме отсчета
времени таймер считает импульсы внутреннего генератора. Вход управления
при этом служит для разрешения счета. Есть сигнал на входе управления –
таймер считает, нет сигнала – счет приостановлен. В режиме счетчика внешних
импульсов таймер ведет подсчет внешних импульсов, поступающих на этот
самый вход управления.
Двойное использование выводов микросхемы – очень распространенный прием
в микропроцессорной технике. Сделано это для экономии выводов. Как же
можно использовать один вывод для двух целей. Есть два способа:
Первый – в одной схеме использовать вывод в основном режиме, в другой – в
альтернативном. При этом, для того, что бы использовать вывод в качестве
входа, программист должен следить, что бы на соответствующий разряд порта
был подан сигнал логической единицы.
Второй способ – использовать в одной схеме оба назначения входа но в разные
моменты времени. При этом нужно так разработать схему, что бы обеспечить
при
помощи
внешних
элементов
автоматическое
переключение
соответствующего вывода от одной внешней цепи к другой. Управлять такими
внешними переключателями можно программно, при помощи любого
свободного разряда любого порта ввода/вывода. Такой принцип реализован в
еще одной схеме разработки автора этих строк: «Контроллере управления
газовыми котлами». Полную схему этого контроллера можно посмотреть,
скачав ее из Интернет по адресу http://avbelov.chat.ru (раздел download). В этой
схеме внутренний компаратор микросхемы ATC2051 используется как часть
аналогово-цифрового преобразователя, предназначенного для измерения
напряжения на датчике температуры. В то же время все 8 разрядов порта P1
используются для записи управляющих кодов во все три внешних регистра,
входящие в схему контроллера. На Рис. 35 приведен фрагмент схемы.
Рис. 35.
Как видно из рисунка, для переключения выводов применяется микросхема
К561КТ3, которая представляет собой четыре аналоговых ключа. Каждый такой
ключ имеет аналоговый вход - Х и аналоговый выход – К. А так же вход
управления – Е. Микросхема собрана по технологии TTL (то есть на основе
полевых транзисторов с изолированным затвором). Если на входе управления
подан сигнал логического нуля, то выводы Х и К не соединены между собой.
При подаче на управляющий вход сигнала лог. 1, внутренний ключ соединяет
между собой выводы Х и К ключа. Эти входы рассчитаны на соединение
аналоговых цепей. При этом напряжение может подаваться как на вход Х, так и
на вход К. Поданное на один из входов напряжение, тут же появится на втором
из входов.
В схеме на рис. 35 ключи D4.1 и D4.2 используются для подключения
выводов P1.0 и P1.1 к регистру D5. При таком подключении через ключи
передаются два младших бита данных. Остальные биты передаются на регистр
непосредственно, без ключей. Управляющий сигнал подается с линии P3.3
микроконтроллера D1. В нужный момент управляющая программа записывает в
разряд P3.3 логическую единицу и затем засылает байт через порт P1. В другой
момент времени программа производит чтение данных из компаратора. Для
этого она записывает в P3.3 лог. 0. Для подключения входов P1.0 иP1.1 к
аналоговым сигналам для сравнения их уровней используются два других
ключа микросхемы D4 (на схеме не показаны). Управляет этими ключами
выход P3.4. Процессор сначала записывает вP3.4 лог. 1, и затем считывает бит
из P3.6. То есть состояние на выходе встроенного компаратора. Разряд P3.6
будет равен лог. 1, если напряжение на линии P1.0 окажется больше, чем
на P1.1, и лог. 0, если наоборот.
Глава 15. Внутренние регистры.
Любой микропроцессор обязательно имеет в своем составе несколько
внутренних регистров, которые он использует для хранения промежуточных
данных. Микросхема AT89C2051 не исключение. Так как этот микроконтроллер
– аналог микросхемы MSC-51, то набор его внутренних регистров полностью
повторяет набор регистров MSC-51.
На рисунках 34 и 35
приведено
схематическое
изображение
основных
рабочих
регистров
микроконтроллера AT89C20
51.
Рис. 34.
Первым
на
рисунке,
изображен регистр PC. Это регистр – указатель адреса. Регистр имеет
шестнадцать разрядов, что показано при помощи цифр в верхней части рисунка.
В этом регистре всегда хранится адрес ячейки памяти. Это адрес текущей
выполняемой команды. В процессе выполнения программы микроконтроллер
читает по этому адресу из памяти программ хранящийся там код очередной
команды. Затем он распознает команду и в том случае, если она состоит не из
одного, а из нескольких байт, то процессор читает эти байты, каждый раз
увеличивая
содержимое
счетчика
адреса
на
единицу.
Затем
микроконтроллер выполняет команду, еще раз увеличивает значение
регистра PC на единицу и переходит к чтению и выполнению следующей
команды. Если процессор встречает команду передачи управления, то исполняя
ее, он записывает в регистр PC новый адрес (адрес перехода). В результате
выполнение программы продолжается с этого самого адреса.
Далее идет еще один шестнадцатиразрядный регистр DPTR. Который разделен
на два восьмиразрядных регистра DPH (H- от английского слова High –
верхний) и DPL (от Love – нижний). Процессор может использовать как весь
регистр целиком, так и любую его часть по отдельности. Вообще то
контроллер AT89C2051
–
относится
к
классу
восьмиразрядных
микропроцессорных устройств. Однако, как все подобные устройства оно не
может обойтись без хотя бы одного шестнадцатиразрядного регистра. Регистр
адреса не считается, он всегда имеет не менее шестнадцати разрядов.
Используется регистр в нескольких командах, в которых не обойтись без
шестнадцатиразрядного регистра. Подробнее назначение всех регистров мы
узнаем при детальном рассмотрении команд микроконтроллера.
Следующие два регистра A и B мы увидим в том или ином виде в любом
микропроцессоре. Регистр A – это так называемый аккумулятор. Аккумулятор –
это основной регистр для всех арифметических и логических операций
(сложение, вычитание, умножение, деление, логическое И, ИЛИ, НЕ и т. д.).
Именно туда помещаются все результаты всех этих операций. Регистр B служит
расширением аккумулятора, необходимым для осуществления операций
умножения и деления. При умножении туда заносятся старшие разряды
произведения (умножение двух восьмиразрядных чисел даст в общем случае
шестнадцатиразрядный
результат)
или
остаток от деления.
Далее на рисунке мы видим регистр PSW.
Такой регистр мы так же можем найти в
любом процессоре. Это так называемый
регистр флагов. С одной стороны это
обычный регистр. Процессор может, как
читать, так и записывать информацию в этот
регистр. Однако это не основное его
назначение. На рисунке вы видите, что
регистр разделен на отдельные биты. Эти
биты имеют самостоятельное значение.
Например, бит с названием CY служит для
хранения признака переноса операции
сложения и вычитания. Если складываемые
числа состоят не из одного, а из двух и более
байтов, то для их сложения создается
Рис. 35.
небольшая подпрограмма. Она читает и
складывает числа побайтно. При этом при сложении любой из пары байтов
может возникнуть единица переноса в следующий разряд. Она то и
записывается в бит хранения флага переноса CY. При сложении следующей
пары байт этот бит так же учитывается. Флаг OV – служит для хранения
признака арифметического переполнения результата, флаг P – хранит признак
четности результата вычисления. Флаг AC – это флаг дополнительного переноса
из младшей тетрады АЛУ в старшую (тетрада - это часть байта в четыре бита)..
Два бита, обозначенные, как RS служат для определения текущего банка
рабочих регистров. Что это такое чуть ниже.
Флаг F0 – отдан в полное распоряжение программиста. Здесь он может хранить
любой признак, нужный ему по ходу программы.
Младший бит регистра PSW не используется.
Хранение всех основных флагов в одном регистре позволяет легко сохранять их
всех одной командой, где ни будь во временной ячейке памяти, например на
время обработки запроса, на прерывание. Процессор может перейти к обработке
запроса на прерывание в любой момент. К этому моменту во всех ячейках
флагов может храниться нужная для дальнейшего вычисления информация. В
процедуре обработки прерывания обязательно потребуется хранить свои флаги
(особенно это касается флага CY без которого не обходится практически ни
одно вычисление). Поэтому первое, что делает процедура обработки
прерывания - это сохраняет регистр PSW. А по окончании процедуры обработки
прерывания программа должна обязательно восстановить регистр PSW.
Последним на рис. 34 показан регистр SP. На этом регистре нужно остановиться
подробнее. Это регистр – указатель стека. Любой микропроцессор широко
использует так называемую стековую память. Что же такое стековая память.
Стековая память – это особый способ организации памяти. По принципу
магазина в автомате Калашникова. Сначала вы вкладываете в магазин патроны
один за другим. А затем автомат извлекает их из магазина в обратном порядке.
Точно так же работает и стековая память. На рисунке 36 изображен процесс
записи информации в стек и чтения из стека. При записи информации в стек
новый байт помещается в самую первую ячейку стека. При записи в стек
следующего байта, он так же заносится в первую ячейку, а содержимое этой
ячейки, занесенное туда в предыдущем цикле записи перемещается во вторую
ячейку. При записи третьего байта, второй переместится в ячейку 2, а первый в
ячейку 3. Так происходит каждый раз, когда в стек заносится очередной байт.
На рисунке изображен стек, состоящий из шести ячеек (говорят – стек глубиной
в шесть ячеек). Это значит, что в него без вреда можно записать
последовательно шесть байт. При записи седьмого байта, вся информация в
стеке снова сместится вглубь стека. В результате самый первый байт будет
потерян. Поэтому при использовании стековой памяти всегда нужно следить,
что бы его глубина была достаточной.
Запись в стек
Чтение из стека
Рис. 36.
Процесс считывания информации из стека происходит в обратном порядке.
Когда происходит считывание байта из стека, то читается содержимое самой
крайней ячейки памяти. Содержимое остальных ячеек сдвигается в обратную
сторону так, что число из ячейки 2 переписывается в ячейку 1, из ячейки 3 в
ячейку 2 и т. д. Точно как патроны, которые вынимают из магазина. Этот
принцип называют: первым вошел – последним вышел.
В микропроцессорной технике стек используется очень широко. Обычно он
применяется для временного хранения, каких либо данных пока выполняется
некая операция. Например, подпрограмма или процедура обработки
прерывания. Часто в начале подпрограммы содержимое нескольких регистров
последовательно заносится в стек. А в конце подпрограммы эти данные
извлекаются из стека в обратном порядке.
Реально стековая память любого микропроцессора организовывается немного
по-другому. Стек организуется в обычной памяти данных. Для этого и
применяется регистр – указатель стека (SP). В этом регистре всегда хранится
адрес «вершины стека». Это тот адрес по которому будет записываться число,
посылаемое в стек. В системе команд процессора имеется команда записи в стек
и извлечения из стека. Во всех современных процессорах каждая команда
записи в стек записывает в него сразу два байта. А команда чтения из стека
соответственно два байта извлекает из стека. Это происходит следующим
образом: По команде записи в стек процессор записывает информацию в
ячейку, адрес которой хранится в регистре SP и увеличивает содержимое SP на
единицу. Затем записывает второй байт и опять увеличивает SP на единицу. В
результате содержимое SP увеличивается на 2. По команде чтения из стека
сначала содержимое SP уменьшается на 1 и читается первый байт. Затем
содержимое SP уменьшается еще на единицу и читается второй байт. Результат
этих действий полностью аналогичен способу, изображенному на рис. 36.
Преимущество в том что, меняя начальный адрес вершины стека для стековой
памяти можно использовать любую область памяти данных. Необходимо лишь
следить за тем, что бы для стека было отведено достаточное пространство
памяти. И это пространство не использовалось бы для других целей.
Теперь о регистрах, изображенных на рис. 35. Это так называемые регистры
общего назначения. Они могут использоваться программистом для хранения
любых промежуточных значений наряду с ячейками памяти (ОЗУ). Отличие их
от ячеек памяти в том, что команды чтения и записи в эти регистры короче и
выполняются быстрее.
В микросхеме AT89C2051 имеются четыре группы (четыре банка) регистров
общего назначения по восемь регистров в каждом. Все регистры общего
назначения имеют восемь разрядов. В каждый момент времени включен только
один из банков. Переключением банков ведает поле RS (два бита) в регистре
флагов PSW. Когда в поле RS записано число 002, то работает банк 0. Когда там
012, то работает банк 1 и т. д. Наличие нескольких банков регистров общего
назначения позволяет использовать в разных подпрограммах разные банки
регистров. При этом можно не сохранять их содержимое в стеке при переходе
от одной подпрограммы к другой. Нужно только вовремя переключать банки.
Как это делается, мы увидим, когда начнем подробно разбирать управляющую
программу позиционера спутниковой антенны.
Белов А. В. "Самоучитель по микропроцессорной технике" - СПб.: Наука и
Техника - 224 с.: ил
ISBN 5-94387-084-9
Тираж 5000 экз.
За справками обращаться
Санкт_Петербург тел. (812) 567-70-25, 567-70-26
Киев тел. (044) 516-38-66, 518-56-47
Оцициальный сайт: www.pubint.com
Интернет-Магазин: www.nit.com.ru
Download