Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPS_Lektsii_2013_stud.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

5.1. Параллельные порты ввода/вывода

5.2. Система прерываний mcs-51

5.1. Параллельные порты ввода/вывода

Линии ввода/вывода микроконтроллеров семейства MCS-51 сгруппированы в четыре 8-разрядных порта P0..P3. Эти порты могут использоваться для функций обмена данными (допуская управление отдельными линиями), так и для выполнения альтернативных функций, таких как обращение к внешней памяти, приём запросов прерываний и др. Порт P0 является двунаправленным и аналогичен порту BUS микроконтроллеров MCS-48. Порты P1, P2, P3 являются квазидвунаправленными и также аналогичны портам P1, P2 семейства MCS-48. Чтобы вывести значение “0” или “1” на линию квазидвунаправленного порта, необходимо записать это значение в соответствующий разряд буферного регистра, а для использования этой линии в качестве входа её регистр должен содержать “1”.

При обращении к внешней памяти используются порты P0 и P2. Через порт P0 выдаётся младший байт адреса, который должен быть зафиксирован во внешнем регистре по сигналу ALE, так как затем на линиях P0 появляются данные для записи или чтения. Через порт P0 выдаётся старший байт адреса, внешняя фиксация которого не требуется.

Порт P1 предназначен для задания младшего байта адреса при программировании и проверке РПП микроконтроллера. При этом старший байт адреса передаётся через порт P2, а байт кода команды – через порт P0.

Линии порта P3 могут быть использованы для альтернативных функций, которые требуются в сложных системах управления:

· Р3.7 – строб чтения из внешней памяти данных RD;

· P3.6 – строб записи во внешнюю память данных WR;

· P3.5 – вход тестируемого сигнала T1;

· P3.4 – вход тестируемого сигнала T0

· P3.3 – вход внешнего прерывания INT1;

· P3.2 – вход внешнего прерывания INT0;

· P3.1 – выход последовательного порта TxD;

· P3.0 – вход последовательного порта RxD.

Альтернативные функции могут быть задействованы путём записи “1” в соответствующие биты выходного буфера Р3.0..Р3.7.

5.2. Система прерываний mcs-51

Базовые модели микроконтроллеров 8051 имеют пять источников прерываний – два внешних (входы INT0, INT1) и три внутренних (от двух таймеров/счётчиков и один от последовательного порта). С появлением микроконтроллеров типа 8052 число источников прерываний увеличилось до 15 (в модели 8ХС51GP). Адреса соответствующих векторов прерываний 0003h..0023h расположены в нижней области памяти программ.

Поскольку интервал между адресами векторов прерываний составляет всего 8 байт, то по этим адресам располагается короткая процедура либо команда JMP, обеспечивающая переход на подпрограмму обслуживания прерывания (рис. 5.1).

Внешние прерывания INT0 и INT1 могут быть вызваны либо уровнем, либо переходом сигнала из “1” в “0” (в зависимости от значений управляющих бит IT0 и IT1 в регистре TCON). В обоих случаях прерывание устанавливает флаги IE0 и IE1 в регистре TCON, которые инициируют вызов соответствующей подпрограммы. Если прерывание вызвано уровнем, то для исключения повторных прерываний сигнал INT0 или INT1 должен стать пассивным до завершения подпрограммы обслуживания. Эта операция должна выполняться источником прерывания автоматически, в противном случае обработчик прерываний должен снять низкий уровень с линий INT через какую-либо линию портов. Кроме того, перед возвратом из прерывания необходимо сбросить флаги IE0 и IE1. Во втором случае (прерывание по спаду импульса INT) сброс этих флагов выполняется аппаратно и дополнительных операций не требуется.

Рис. 5.1. Система прерываний MCS-51

Прерывания от таймеров инициируются при установке их флагов переполнения TF0 и TF1 в регистре TCON. Эти флаги сбрасываются автоматически при передаче управления подпрограмме обслуживания.

Прерывания от последовательного порта возникают в двух случаях: при загрузке байта во входной буфер (в режиме приёма) или освобождение выходного буфера (в режиме передачи). При этом аппаратно устанавливается один из флагов RI или TI регистра SCON, а конкретный источник определяется процедурой обслуживания посредством опроса. Сброс этих флагов выполняется программно.

Необходимо отметить, что любое из прерываний может быть инициировано программно, путём установки соответствующего флага: IE0, IE1, TF0, TF1, RI, TI. В результате будет вызвана та же подпрограмма, что и при установке этих флагов аппаратными средствами.

Каждый из источников прерываний может быть разрешен или запрещён при помощи соответствующего бита регистра маски прерываний IE, формат которого приведен на рис. 5.2. В этом регистре также имеется бит общего запрета всех прерываний EA.

Рис. 5.2. Регистр маски прерываний IE

При появлении запросов от нескольких источников очерёдность их обслуживания определяется двухступенчатым механизмом приоритетов. На первой ступени любому источнику можно присвоить «высокий» (“1”) или «низкий» (“0”) уровень приоритета. Для этого используются соответствующие биты регистра приоритетов IP (рис. 5.3). На второй ступени очерёдность обслуживания определяется адресом вектора прерывания, т.е. запросы с меньшим адресом обслуживаются в первую очередь. Если какое-либо прерывание уже обслуживается, то его процедуру может прервать только прерывание с более высоким приоритетом.

Между запросом и началом обслуживания прерывания проходит не менее трёх машинных циклов.

Рис. 5.3. Регистр приоритетов прерываний IP

Обработка запроса может быть отложена, если:

· обслуживается запрос равного или более высокого уровня приоритета;

· текущий машинный цикл не является последним в цикле команды;

· выполняется команда RETI или любая команда, связанная с обращением к регистрам IE или IP.

Реакция на запрос, разрешённый к обслуживанию, заключается в передаче управления от текущей программы специальной процедуре обслуживания прерывания. Для этого аппаратно формируется команда LCALL (заметим, что её код в программе не содержится). По команде LCALL текущее содержимое счётчика команд (адрес возврата) сохраняется в стеке. Затем в счётчик команд загружается адрес вектора соответствующего источника прерывания, по которому располагается команда JMP. Сохранение в стеке других регистров микроконтроллера (A, B, PSW и т.д.) осуществляется программно командами PUSH в начале процедуры обслуживания. В конце этой процедуры должны выполняться соответствующие процедуры восстановления из стека POP. Подпрограммы обслуживания прерывания завершаются командой возврата RETI, по которой восстанавливается из стека прежнее содержимое счётчика команд. Заметим, что команда возврата из подпрограммы RET также восстанавливает содержимое счётчика команд, но не снимает блокировку прерываний.

Контрольные вопросы.

  1. В чем разница между двунаправленным и квазидвунаправленным портами?

  2. Какие особенности использования портов P0, P2 и Р3?

  3. Охарактеризовать систему прерываний MCS-51.

  4. Как формируются внешние прерывания?

  5. Как формируются прерывания от таймеров?

  6. Как формируются прерывания от последовательного порта?

  7. Охарактеризовать регистры маски прерываний и приоритетов.

  8. Как осуществляется переход и выполнение подпрограммы прерывания?

ЛЕКЦИЯ 6. Таймеры/счётчики MCS-51, Управление энергопотреблением

6.1. Таймеры/счётчики

6.2. Управление энергопотреблением

6.1. Таймеры/счётчики

Микроконтроллеры MCS-51 имеют два 16-разрядных таймера/счётчика Тimer0 и Тimer1, каждый из которых независимо может быть запрограммирован на работу в качестве либо таймера либо счётчика. В режиме таймера производится подсчёт импульсов внутреннего тактового генератора, что позволяет формировать временные интервалы. В режиме счётчика производится подсчёт внешних импульсов на входах T0 и T1, которые соответствуют каким- либо событиям. В обоих случаях переполнение таймеров/счётчиков приводит к формированию запроса прерывания.

При работе в режиме таймера его содержимое инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов тактовой частоты. При работе в качестве счётчика инкрементирование осуществляется при переходе из “1” в “0” внешнего входного сигнала на входах Т0, Т1. Так как на распознавание перехода требуется два машинных цикла, то максимальная частота подсчёта входных сигналов равна 1/24 тактовой частоты. Для надёжной работы значение “1” на входах Т0, Т1 должно удерживаться не менее одного машинного цикла.

При использовании таймеров программисту доступны старшие байты счётчиков TH0, TH1, их младшие байты TL0, TL1, а также их флаги переполнения TF0, TF1. Для управления режимами работы и для организации взаимодействия таймеров с системой прерывания используются два регистра специальных функций: TMOD (регистр режима таймеров) и TCON (регистр управления таймерами). Формат этих регистров и назначение отдельных разрядов приведены на рис. 6.1 и 6.2. Таймеры/счётчики могут работать в четырёх режимах, причём режимы 0, 1 и 2 одинаковы обоих таймеров, а режим 3 различается.

Рис. 6.1. Регистр режима таймеров/счётчиков TMOD

Рис. 6.2. Регистр управления таймеров/счётчиков TCON

В режиме 0 таймер/счётчик имеет разрядность 13, причём старший байт THx используется полностью, а из младшего байта TLx используются только 5 разрядов. Этот режим аналогичен таймеру микроконтроллеров MCS-48, где имеется 8-разрядный счётчик с 5-разрядным предделителем (рис. 6.3), однако частота переполнения таймера в MCS-51 примерно равна 8 мс.

Рис. 6.3. Таймер/счётчик в режиме 0

Режим 1 аналогичен режиму 0, но используются все 16 разрядов регистров THx и TLx (рис. 6.4). Поэтому максимальное значение счётчика равно 65535, а максимальный период переполнения таймера – около 65 мс.

Рис. 6.4. Таймер/счётчик в режиме 1

В режиме 2 регистр TLx работает как 8-разрядный счётчик (рис. 6.5). После переполнения и установки флага TFx этот счётчик автоматически перезагружается значением из регистра THx, которое предварительно было задано программно. Перезагрузка не изменяет значение THx. Такая организация позволяет легко реализовать деление частоты на любой коэффициент в диапазоне от 1 до 256.

Рис. 6.5. Таймер/счётчик в режиме 2

В режиме 3 таймеры работают по-разному: Тimer1 останавливается (эквивалентно TR1=0), а Тimer0 разделяется на два независимых 8-разрядных счётчика TH0 и TL0 (рис. 6.6). При этом биты управления нулевого таймера/счётчика используются для TL0, а биты управления первого таймера/счётчика – для TH0, который может выполнять только функции таймера. Такой режим используется, если в системе управления требуется три таймера/счётчика.

Рис. 6.6. Таймер/счётчик в режиме 3

В семействе MCS-51 отсутствуют специальные команды запуска и останова таймеров/счётчиков. Вместо этого используется биты TR0, TR1 (“1” – запуск, “0” – останов). При этом бит GATEx (блокировка) должен быть сброшен. Если GATEx=1, то запуском таймеров/счётчиков управляет внешний вывод запроса прерывания INTx. Это позволяет аппаратно измерять длительность импульсов на входах прерываний.

На базе двух таймеров можно также измерить частоту внешних импульсов, подаваемых на вход T0. Для этого Timer0 переводится в режим счётчика и включается на определённый интервал времени (например, 1 мс), который формирует Timer1. В результате в регистры TH0, TL0 записывается частота измеряемого сигнала в килогерцах.

6.2. Управление энергопотреблением

У микроконтроллеров семейства MCS-51, выполненных по технологии CMOS (80C51), существуют два режима, позволяющих уменьшить потребление энергии в пассивном состоянии:

· режим холостого хода IDL (Idle), ток потребления 4,2 мА.

· режим пониженного энергопотребления PD (Power Down), ток потребления 50 мкА;

Управление этими режимами осуществляется при помощи битов IDL и PD регистра PCON (рис. 6.7).

Рис. 6.7. Регистр управления мощностью PCON

Если в них одновременно записана “1”, то преимущество имеет PD. Кроме того, регистр PCON содержит флаги пользователя GF0, GF1 и бит SMOD, управляющий скоростью передачи последовательного порта. У микроконтроллеров, выполненных по технологии n- МОП (8051), режимы пониженного энергопотребления отсутствуют.

В режиме холостого хода (IDL=1) центральный процессор отключается, но тактовый генератор, система прерываний, таймеры/счётчики и другие блоки ввода/вывода продолжают функционировать. Счётчик команд, регистры и ячейки РПД сохраняют своё значение. На выводах всех портов удерживается состояние, которое было в момент перехода в режим холостого хода. На выводах ALE и PSEN формируется уровень “1”. При этом потребляемая мощность составляет от 15 до 30% от номинальной в зависимости от количества блоков ввода/вывода.

Выйти из режима холостого хода можно по сигналу RESET, либо по любому разрешённому запросу прерывания. Обработка прерывания приводит к аппаратному сбросу бита IDL и выходу из этого режима. После команды RETI (выход из подпрограммы обслуживания прерывания) возобновляется выполнение основной программы. Следует отметить, что выход из режима холостого хода по сигналу RESET приводит к перезапуску программы с нулевого адреса. Однако на перезапуск требуется не менее трёх машинных циклов, в течении которых возобновляется выполнение основной программы. Поэтому после команды, переводящей контроллер в режим IDL, целесообразно расположить несколько команд NOP. Длительность сигнала RESET должна быть не менее 2 мкс (при тактовой частоте 12 МГц).

В режиме пониженного энергопотребления (PD=1) блокируется работа всех узлов микроконтроллера, поскольку останавливается тактовый генератор. В этом режиме содержимое РПД и регистров специальных функций сохраняется, а на выходных линиях портов удерживаются значения, соответствующие содержимому их буферных регистров. Выходы сигналов ALE и PSEN сбрасываются. При этом электропитание осуществляется через вывод RST/VPD, а основное электропитание (VCC) может быть отключено. Резервное напряжение VDD в этом режиме может быть снижено до 2 В. Перед выходом из режима пониженного энергопотребления оба напряжения VCC, VDD должны быть восстановлены до номинального значения.

Заметим, что при одновременной записи логической “1” в PD и IDL, бит PD имеет преимущество.

Выход из режима пониженного энергопотребления возможен только по сигналу RESET. При этом переопределяются все регистры специальных функций, но содержимое РПД не изменяется. Длительность сигнала RESET должна быть не менее 10 мс, что обеспечивает надёжный запуск и стабилизацию генератора.

Рассмотренные выше режимы могут использоваться не только для снижения энергопотребления, но и для защиты от отказов основного блока питания. При этом можно обеспечить сохранность содержимого РПД с помощью маломощного (батарейного) аварийного источника, подсоединяемого к выводу RST/VPD. При получении прерывания от системы контроля электропитания микроконтроллер должен перегрузить в РПД основные параметры прерванной программы и выдать сигнал, разрешающий подключение к выводу RST/VPD аварийного источника питания. Все эти процедуры должны быть выполнены до того, как напряжение основного источника электропитания упадет ниже рабочего предела. После восстановления номинального значения напряжения в основной цепи электропитания выполняется системный сброс и источник аварийного электропитания может быть отключен.

Контрольные вопросы

  1. Охарактеризовать организацию таймеров/счетчиков.

  2. Охарактеризовать регистры режима и управления таймеров/счётчиков.

  3. Особенности работы таймеров/счетчиков в различных режимах.

  4. Пояснить режимы управления энергопотреблением.

ЛЕКЦИЯ 7. Последовательный интерфейс, сброс и синхронизация MCS-51

7.1. Последовательный интерфейс MCS-51

7.2. Сброс в начальное состояние и синхронизация

7.1. Последовательный интерфейс MCS-51

Последовательный порт микроконтроллеров MCS-51, называемый также UART (Universal Asynchronous Receiver/Transmitter), является дуплексным и обеспечивает работу в синхронном либо асинхронном режимах. Его можно также использовать для обмена данными в системах управления на базе нескольких микроконтроллеров. Этот интерфейс поддерживает протокол обмена RS-232C, используемый в большинстве промышленных систем управления.

В состав UART входят регистры сдвига приёмника и передатчика, а также буферный регистр SBUF. Для управления последовательным портом используется регистр SCON (рис. 7.1), а также старший бит регистра управления энергопотреблением PCON.7, который позволяет задать удвоенную скорость передачи. Они позволяют установить режим работы (0 – синхронный; 1, 2, 3 – асинхронный), а также задать скорость передачи. В обоих случаях данные передаются, начиная с младшего бита.

В режиме синхронного обмена (режим 0) по линии TxD выдаётся восемь синхроимпульсов, а по линии RxD принимается или передаётся байт данных. Поэтому линии TxD и RxD одного контроллера соединяются с соответствующими линиями другого контроллера (рис. 7.2). Передача очередного бита осуществляется каждый машинный цикл, поэтому обмен производится с фиксированной частотой f0/12. Это максимально возможная скорость обмена через последовательный порт микроконтроллера.

Рис. 7.1. Регистр управления режимами последовательного порта SCON

Рис. 7.2. Соединение микроконтроллеров при последовательной передаче данных

При асинхронном обмене данные передаются по линии TxD, а принимаются по линии RxD. Поэтому линия TxD одного контроллера подключается к линии RxD другого, и наоборот (перекрёстное соединение). В этом случае используется старт/стопный принцип, при котором каждый передаваемый байт дополняется стартовым и стоповыми битами, что позволяет начать передачу в любой момент времени. Приём и передача могут осуществляться одновременно, поскольку регистр SBUF состоит из двух частей – буфера приёмника и буфера передатчика. В режиме ожидания на линиях TxD удерживается высокий уровень, поэтому переход из “1” в “0” воспринимается как начало передачи старт-бита.

Чтобы передать данные необходимо записать байт в регистр SBUF, а для приёма информации необходимо прочитать содержимое этого регистра. После загрузки SBUF передаваемый байт копируется в регистр сдвига передатчика и побитно выдвигается на линию TxD. При приёме осуществляется обратная операция. Наличие буферного регистра приемника позволяет совмещать операцию чтения ранее принятого байта с приемом очередного байта. Если к моменту окончания приема байта предыдущий байт не был считан из SBUF, то он будет потерян.

Последовательный интерфейс может работать в четырех различных режимах.

В режиме 0 осуществляется передача данных в синхронном режиме. Данные передаются и принимаются по линиям RxD, а по линиям TxD – синхросигналы. Передача начинается любой командой, по которой в SBUF поступает байт данных. Затем он копируется в сдвигающий регистр передатчика и в каждом машинном цикле сдвигается вправо (младшими битами вперёд), после чего очередной бит поступает на вывод RxD. В освобождающиеся старшие биты сдвигающего регистра передатчика записываются нули. При обнулении этого регистра устанавливается флаг TI (конец передачи) и линия RxD переводится в высокоуровневое состояние. При приёме этого байта в микроконтроллере должен быть сброшен флаг RI и установлен бит REN (разрешение приёма). После окончания приёма всех восьми бит устанавливается флаг RI (конец приёма), после чего принятый байт может быть прочитан из регистра SBUF.

В режиме 1 осуществляется асинхронная передача данных. При этом пакет данных состоит из 10 бит (рис. 7.2): старт-бит (“0”), 8 бит данных и стоп-бит (“1”). При приёме в разряд RB8 регистра SCON записывается стоп-бит. Для передатчика в регистре SCON необходимо сбросить бит REN, а для приёмника – установить его.

Передача инициируется загрузкой SBUF передатчика. Приём начинается при обнаружении перехода сигнала на входе RxD приёмника из состояния 1 в состояние 0, причём вход RxD опрашивается 16 раз за время передачи старт-бита. Если при этом обнаруживается значение, не равное 0, то приемник вновь возвращается к поиску перехода из 1 в 0. Такой механизм обеспечивает подавление ложных (сбойных) старт-бит.

Далее, при приёме каждого из информационных битов и стоп-бита, вход RxD опрашивается трижды (в состояниях 7, 8 и 9 внутреннего счётчика с коэффициентом деления 16). Это позволяет настроить приёмник на середину периода передачи бита и повысить помехоустойчивость за счет использования мажоритарного принципа (принятым значением считается то, которое было получено по меньшей мере дважды из трех раз). Если последний принятый бит равен 1, то приёмник устанавливает флаг RI, в противном случае принятый байт теряется и вновь начинается поиск переход из 1 в 0 на входе RxD. Потеря принятого байта также происходит, если из регистра SBUF не был прочитан предыдущий байт, т.е. не был сброшен флаг RI. Это должно выполняться программно.

В режимах 2 и 3 также осуществляется асинхронный обмен, но пакет данных состоит из 11 бит: старт-бит (“0”), 8 бит данных, программируемый девятый бит и стоп-бит (“1”). При передаче девятый бит записывается в разряд TB8 регистра SCON (перед загрузкой регистра SBUF инициирующего передачу).

При приёме девятый бит может быть прочитан из разряда TB8 регистра SCON. Программист может использовать девятый бит по своему усмотрению, например для контроля по чётности. Алгоритмы работы приёмника и передатчика в этих режимах аналогичны режиму 1, но имеются некоторые отличия в условиях окончания цикла приёма. Приём считается успешным, если принятый стоп-бит равен “1” и из регистра SBUF был прочитан предыдущий байт (сброшен флаг RI). Кроме того, если установлен разряд SM2 регистра SBUF, то независимо от состояния флага RI принимается и загружается в SBUF байт данных, который сопровождается “1” в девятом бите. Если при этом предыдущий байт не прочитан, то он теряется. Последний случай используется для организации обмена в многоконтроллерных системах.

Скорость обмена в асинхронном режиме определяется частотой переполнения первого таймера fT либо частотой синхросигнала f0. В режиме 1, 3 скорость обмена равна fT/16 или fT/32, а в режиме 2 – f0/32 или f0/64. При этом выбор конкретного значения скорости определяется флагом SCON – старшим разрядом регистра PCON. Например, если первый таймер настроить на режим 2 и использовать константу перезагрузки F416=24410, то при f0=12 МГц этот таймер будет переполняться каждые 256–244=12мкс. Это соответствует частоте fT=1/12 мкс»83,3 кГц, откуда скорость передачи равна 2,6 кбит/с (при SCON=0). Поэтому при использовании кварцевого резонатора с частотой 11,059 МГц удаётся получить стандартное значение скорости передачи 2400 бит/с. Общая формула вычисления скорости передачи имеет вид:

где c – константа перезагрузки таймера.

Очевидно, что при f0=12 МГц максимальная скорость передачи достигает 62,5 кбит/с в режимах 1, 3, а режиме 2 – 375 кбит/с (для сравнения, в синхронном режиме 0 скорость составляет 1 Мбит/с).

Режимы 2, 3 позволяют построить многоконтроллерную систему, в которой обмен осуществляется через витую пару или коаксиальный кабель. При этом один контроллер должен быть ведущим (master), а остальные – ведомыми (slave). Поскольку команды ведущего контроллера должны восприниматься ведомыми, то выход master-передатчика должен быть подключен ко входу slave-приёмников и наоборот (рис. 7.3).

Рис. 7.3. Многоконтроллерная система

Команды ведущего контроллера передаются всем подчинённым контроллерам, но воспринимаются только тем контроллером, которому они адресованы. Для этого используется девятый бит, позволяющий отличать адресную информацию от данных. Обычно при передаче адреса девятый бит равен “1”, а при передаче данных и команд – “0”. Временная диаграмма работы многоконтроллерной шины приведена на рис. 7.4.

Рис. 7.4.. Временная диаграмма многоконтроллерной системы

Если ведущему микроконтроллеру требуется передать блок данных, то он в режиме «широковещательной» передачи (всем ведомым) сначала выдаёт код адреса получателя (в его девятом бите содержится “1”). При получении адреса во всех ведомых микроконтроллерах происходят прерывания и вызов подпрограммы сравнения полученного адреса с кодом собственного сетевого адреса. Адресуемый микроконтроллер сбрасывает свой управляющий бит SM2 в “0” и готовится к приёму блока данных. Остальные ведомые микроконтроллеры, адрес которых не совпал с принятым, оставляют неизменным состояние SM2=1 и передают управление прерванной программе. В дальнейшем байты данных, поступающие в последовательный порт ведомых микроконтроллеров у которых SM2=1, прерывание не вызывают (не устанавливается флаг RI), т.е. игнорируются. Этот процесс продолжается до тех пор, пока ведущий микроконтроллер не передаст новый адрес получателя данных.

7.2. Сброс в начальное состояние и синхронизация

Сброс микроконтроллеров семейства MCS-51 осуществляется путём подачи на вход RESET сигнала “1”. Для надёжности, этот сигнал должен быть удержан на входе RESET по меньшей мере в течение двух машинных циклов (24 периода резонатора).

Под воздействием сигнала RESET сбрасывается содержимое счётчика- команд PC, аккумулятора АСС и его расширителя В, слова-состояния PSW, регистра-указателя DPTR, а также регистра специальных функций TMOD, TCON, ТHx, TLx, IE, IP и SCON. Начальное состояние остальных регистров определяется следующим образом: в регистре PCON сбрасывается только старший бит SMOD, в указатель стека SP загружается код 07h, а в буферы портов Р0..Р3 – код FFh. Состояние регистра SBUF не определено. Сигнал RESET не воздействует на содержимое ячеек РПД. Когда включается электропитание (VCC), содержимое РПД неопределенно, за исключением операции возврата из режима пониженного энергопотребления.

На рис. 7.5 показана схема автоматического формирования сигнала RESET при включении электропитания. Время, необходимое для полного заряда ёмкости, обеспечивает уверенный запуск резонатора и его работу в течение более чем двух машинных циклов.

Рис. 7.5. Схема сброса при включении электропитания

Синхронизация микроконтроллеров (рис. 7.6) семейства MCS-51 осуществляется от внешнего тактового генератора или внутреннего генератора с внешним кварцевым резонатором, подключаемым к выводам XTAL1 и XTAL2. Отметим, что в HMOS-кристаллах сигнал внешнего генератора подаётся на вывод XTAL2, а в CHMOS – на вывод XTAL1.

а

б

в

Рис. 7.6. Синхронизация микроконтроллера:

а – от внутреннего генератора; б, в – от внешнего генератора

Внутри микроконтроллера частота синхросигнала делится на 12, образуя машинный цикл. Машинный цикл состоит из шести последовательных состояний S1..S6, каждое из которых делится на две фазы P1 и P2. При описании последовательности тактов используются обозначения S1P1, S1P2, S2P1,....,S6P2. Цикл выполнения каждой команды состоит из одного, двух или четырёх машинных циклов.

Контрольные вопросы.

  1. Что входит в состав последовательного порта MCS-51?

  2. Привести структуру регистра управления режимами последовательного порта SCON.

  3. Как соединяются микроконтроллеры при последовательной передаче данных?

  4. Как определяется скорость обмена в асинхронном режиме?

  5. Пояснить временную диаграмму многоконтроллерной системы.

  6. Как осуществляется сброс в начальное состояние и синхронизация MCS-51?

ЛЕКЦИЯ 8. Загрузка прикладных программ и система команд MCS-51

8.1. Загрузка прикладных программ

8.2. Система команд семейства MCS-51

8.3. Команды пересылки данных

8.1. Загрузка прикладных программ

Большинство микроконтроллеров MCS-51 может быть запрограммировано пользователем. При необходимости программа может быть стёрта ультрафиолетовым светом либо электрическими сигналами. Некоторые микроконтроллеры имеют средства защиты от копирования, запрещающие чтение из резидентной памяти программ.

В режиме программирования микроконтроллер должен работать на пониженной частоте 4..6 МГц так как на его внутренней шине P0..P2 осуществляется мультиплексирование адресной и кодовой информации (рис. 8.1, а).

В процессе программирования адресная информация подаётся на восемь линий порта P1 и четыре линии порта P2, а загружаемый байт – на линии порта P0. При этом выводы Р2.4..Р2.6 и PSEN должны быть заземлены, а на выводы Р2.7 и RESET необходимо подать высокий уровень. На входе EA/VPP должен поддерживаться уровень +5 В, но в момент загрузки байта он должен быть увеличен до +21 В, а сигнал на входе ALE/PROG – на 50 мс сброшен в 0. После этого напряжение на входе EA/VPP возвращается к уровню +5 В. Источник напряжения +21 В (VPP) должен быть хорошо стабилизирован.

Аналогичным способом осуществляется запись бита защиты, который запрещает доступ к РПП любыми внешними средствами. Схема записи бита защиты показана на рис. 8.1 б.

а

б

Рис. 8.1. Программирование микроконтроллера:

а – загрузка программ; б – запись бита защиты от копирования

Процедура записи бита защиты такая же, как и при загрузке программ в РПП, но на вывод P2.6 должен подаваться уровень “1”. Сигналы на выводах портов P0, P1 и P2.0..P2.3 могут быть в любом состоянии. Однажды установленный бит защиты можно сбросить только путём полного стирания резидентной памяти программ.

8.2. Система команд семейства MCS-51

Система команд семейства MCS-51 содержит 111 базовых команд, которые подразделяются на пять групп:

· команды пересылки данных (Data Transfer);

· арифметические команды (Arithmetic);

· логические команды (Logic);

· команды ветвления (Program Branching);

· команды операций с битами (Boolean Variable Manipulation).

Имеются команды умножения, деления, вычитания, операций над битами, операций со стеком и расширенный набор команд передачи управления.

Команда может иметь длину один, два или три байта, причем первый байт содержит код операции, а второй и третий - адреса операндов либо непосредственные операнды. Большинство команд (94 из 111) состоят из одного или двух байт.

Время выполнения команды составляет один, два или четыре машинных цикла. При тактовой частоте 12 МГц длительность машинного цикла равна 1мкс, при этом 64 команды выполняются за 1 мкс, 45 команд - за 2 мкс и 2 команды (умножение и деление) - за 4 мкс. Заметим, что в отличие от MCS-48, здесь нет прямой связи между длиной команды и числом машинных циклов, требуемых для ее выполнения.

В командах MCS-51 используется четыре типа операндов - биты, тетрады (4 бита), байты и 16-битные слова. Однобитный операнд может содержаться в любом из 128 флагов РПД, а также в отдельных разрядах буферов ввода/вывода и некоторых регистров специальных функций. Четырехбитные операнды используются только при операциях обмена (команды SWAP и XCHD). Восьмибитные операнды могут размещаться в аккумуляторе, регистрах R0..R7, в ячейках памяти программ или данных (резидентной или внешней), в регистрах специальных функций, а также в буферах портов ввода/вывода. Двухбайтные операнды – это константы и прямые адреса, для представления которых используются второй и третий байты команды.

Система команд MCS-51 имеет некоторую специфику, обусловленную большим объемом внешней памяти программ и данных. При задании адреса операнда используются следующие методы:

· непосредственная адресация - операнд содержится непосредственно в команде и может занимать один или два байта (data8, data16);

· прямая адресация – в команде содержится однобайтный адрес операнда adr8 (используется только для резидентной памяти данных и регистров специальных функций);

· регистровая адресация – в команде имеется трехбитовое поле, определяющее номер регистра, содержащего операнд; выбор одного из четырех регистровых банков осуществляется программированием битов селектора банка (RS1, RS0) в PSW.

· косвенно-регистровая адресация - в команде содержится ссылка на регистр, содержащий адрес операнда (используется при обращении к РПД и ВПД через 8-разрядные регистры R0 и R1, указатель стека SP, а также через 16-разрядный регистр-указатель DPTR);

· индексная адресация – адрес операнда находиться сложением 8– разрядного индекса, содержащегося в аккумуляторе, и 16-разрядной базовой величины, содержащейся в DPTR или PC (используется только при чтении из памяти программ, при выборке из таблиц).

· неявная адресация – в команде отсутствует специальное адресное поле, определяющее адрес операнда, но его расположение полностью определяется кодом операции (используется в командах, которые по умолчанию выполняют операции только с аккумулятором или DPTR).

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

При программировании на ассемблере для ASM51 обычно используются символические адреса регистров специальных функций и их отдельных бит. Например, ACC.5 - символическое имя пятого бита аккумулятора; SMOD (либо PCON.7) - символическое имя бита удвоенной скорости передачи последовательного интерфейса. Эти символические адреса являются зарезервированными словами ASM51, и их не надо определять с помощью директив ассемблера.

8.3. Команды пересылки данных

Команды этой группы обеспечивают выполнение операций копирования (пересылка байтов и битов между памятью и регистрами процессора). Они делятся на три типа:

· команды пересылки, использующие РПД и РСФ (команды типа MOV);

· команды пересылки, использующие ВПД (команды типа MOVX);

· команды пересылки, использующие ПП (команды типа MOVC).

Эти команды не модифицируют флаги результата, за исключением команд загрузки PSW и аккумулятора (флаг паритета). Большую часть команд данной группы составляют команды передачи и обмена байтов. Команды пересылки бит представлены далее в группе команд битовых операций

Команды MOV (табл. 8.1) позволяют пересылать данные между аккумулятором, регистрами общего назначения, ячейками резидентной памяти данных и регистрами специальных функций. В приведенной таблице используются следующие обозначения: src (source) – источник; dest (destination) – приемник; Rn – регистр общего назначения R0…R7; Ri – регистр-указатель адреса при косвенной адресации R0, R1; #ad8 – восьмиразрядный адрес; #d8 – восьмиразрядный непосредственный операнд; #d16 – 16-разрядный непосредственный операнд.

Следует заметить, что пересылки между ячейками памяти здесь могут выполняться без участия аккумулятора. Кроме того, в зависимости от метода адресации аккумулятор имеет два различных имени: A – при неявной адресации (например, MOV A, R0) и ACC – при использовании прямого адреса. В последнем случае аккумулятор рассматривается как регистр специальных функций с адресом E0h, для которого также допускается побитовый доступ. Использование неявной адресации аккумулятора предпочтительнее, но не всегда возможно (например, при обращении к его отдельным битам).

Таблица 8.1. Команды пересылки, использующие РПД и РСФ

В первую группу также входят команды PUSH и POP, обеспечивающие соответственно запись данных в стек и чтение из стека. В MCS-51 стек располагается в резидентной памяти данных, поэтому размер стека ограничен лишь ее объемом. При этом следует учитывать, что по сигналу RESET в указатель стека заносится код 07h, поэтому первый элемент стека располагается в ячейке памяти с адресом 08h, используемой для регистра R0 банка RB1. Поэтому в сложных системах после сброса следует переопределить начальное значение стека. Кроме пересылок команды первой группы могут осуществлять обмен байтами между аккумулятором и ячейками РПД (команда XCH), а также обмен младшими тетрадами, т.е. битами 0 - 3 (команда XCHD).

Следует отметить, что MCS-51 не имеет специальных команд ввода-вывода и команд для работы с регистрами специальных функций. Доступ к ним осуществляется обычными командами MOV с использованием прямого адреса (допускается также использование символических адресов). Например, пересылка PSW в аккумулятор выполняется командой MOV A, PSW, которая преобразуется ассемблером к виду MOV A, 0D0h. Аналогично, вывод из аккумулятора в порт P0 осуществляется командой MOV P0, A эквивалентной MOV A, 80h. Ещё одна особенность команд типа MOV проявляется в микроконтроллерах с расширенным объемом РПД, где обращение к верхним 128 байтам резидентной памяти данных осуществляется только в режиме косвенной адресации (при использовании прямого адреса выполняется обращение к РСФ).

Команды MOVX (табл. 8.2) позволяют пересылать данные между аккумулятором и ячейками ВПД. При этом используется косвенная адресация через 16-разрядный регистр-указатель DPTR либо 8-разрядные регистры R0, R1. В первом случае обеспечивается доступ к любой из 65536 ячеек ВПД, во втором – к странице объемом 256 байт (старший байт адреса, т.е. номер страницы, определяется текущим содержимым буфера порта P2).

Таблица 8.2. Команды пересылки, использующие ВПД

Команды MOVC (табл. 8.3) используются для чтения данных, размещенных в памяти программ (констант и таблиц функций). При обращении к таблице обычно применяется первая из этих команд, причём регистр DPTR устанавливается на точку начала таблицы, а в аккумулятор помещается индекс табличной ячейки. При использовании второй команды следует учитывать, что в момент вычисления суммы A+PC содержимое счётчика команд PC уже увеличено на 1 (т.е. указывает на следующую команду).

Таблица 8.3. Команды пересылки из памяти программ

Контрольные вопросы.

  1. Как формируются сигналы при программировании MCS-51?

  2. Охарактеризовать базовую систему команд, длину, время выполнения, операнды.

  3. Какие методы адресации поддерживает система команд MCS-51?

  4. Какие команды пересылки используют РПД и РСФ?

  5. Какие команды пересылки используют ВПД?

  6. Пояснить выполнение команд пересылки из памяти программ.

ЛЕКЦИЯ 9. Система команд семейства MCS-51

9.1. Команды арифметических операций.

9.2. Команды логических операций.

9.3. Команды операций над битами.

9.4. Команды передачи управления.

9.1. Команды арифметических операций

Микроконтроллеры MCS-51 имеют следующие арифметические команды: сложение ADD, сложение с учётом переноса ADC, вычитание с заёмом SUBB, инкремент INC, декремент DEC, десятичная коррекция DA A, умножение MUL и деление DIV (табл. 9.1).

Таблица 9.1. Команды арифметических операций

Большинство из них выполняет операции над 8- разрядными операндами (кроме INC DPTR, которая обеспечивает инкремент 16- разрядного регистра-указателя).

При выполнении арифметических операций формируется флаги переноса C, дополнительного переноса AC, переполнения OV и паритета P, которые помещаются в регистр PSW (рис. 9.1).

Рис. 9.1. Формат слова состояния PSW

Они формируются следующим образом:

· C=1, если в старшем бите результата возникает перенос или заем;

· AC=1, если возникает перенос/заем между тетрадами;

· P=1, если число единичных бит в аккумуляторе нечетно;

· OV=1, если старший бит результата не может быть интерпретирован как знаковый (например, при суммировании положительных чисел получен отрицательный результат).

Отметим, что все четыре флага формируются только при выполнении операций сложения и вычитания, а операции умножения и деления флаг C сбрасывают. При умножении флаг OV устанавливается, если результат больше 255. При делении флаг OV устанавливается при делении на нуль. Особенности формирования флагов C и OV поясняются примерами, приведенными ниже.

Формирование флагов C и OV при сложении:

Поскольку в MCS-51 отсутствует команда вычитания без учета заёма, то для выполнения такой операции используется команда SUBB (перед этим программно сбрасывается флаг переноса).

Формирование флагов C и OV при вычитании:

Команда десятичной коррекции DAA позволяет выполнить сложение чисел, представленных в двоично-десятичном коде. Она корректирует 8-битовое число, полученное в результате выполненной ранее команды сложения ADD или ADDC. Если содержимое младшей тетрады аккумулятора превышает 9 или AC=“1”, то к ней прибавляется 06h, при этом получается младшая двоично-десятичная цифра. Указанное сложение не изменяет содержимое флага AC, но может установить флаг C, если перенос из младшей тетрады распространяется через всю старшую тетраду (в противном случае C не изменяется). Далее, если C=“1” или содержимое старшей тетрады превышает 9, то содержимое аккумулятора увеличивается на 60h, создавая старшую двоично-десятичную цифру. При этом флаг C устанавливается (не изменяется), если имеется (отсутствует) перенос из старшего бита аккумулятора.

Операция умножения MUL выполняется над содержимым аккумулятора A и регистра B, полученный результат размещается в двух байтах AB (младший байт в B, старший - в А). Для операции деления DIV в аккумулятор помещается частное, а в регистр В - остаток. При этом надо учитывать, что операнды интерпретируются как 8-разрядные целые числа без знака.

9.2. Команды логических операций

Система команд MCS-51 включает в себя стандартные логические операции И, ИЛИ, исключающее ИЛИ (ANL, ORL, XRL), а также операции инвертирования CPL, сброса CLR, циклического сдвига RL, RLC, RR, RRC и обмена тетрадами SWAP (см. табл. 9.2). Операции ANL, ORL, XRL выполняются поразрядно над байтами, располагаемыми в аккумуляторе, в ячейках резидентной памяти данных или регистрах специальных функций. Остальные операции выполняются только над содержимым аккумулятора.

Имеется возможность производить операцию XRL с содержимым буферов портов P0…P3, что может быть эффективно использовано для инверсии их отдельных линий.

Таблица 9.2. Команды логических операций

9.3. Команды операций над битами

Микроконтроллеры MCS-51 содержат в своем составе “булевый” процессор, имеющий свое побитово-адресуемое ОЗУ, свои порты ввода/вывода и выполняющий свой набор команд. При выполнении этих команд флаг С выполняет функции аккумулятора.

Внутреннее ОЗУ “булевого” процессора имеет объём 256 бит. В него входят 128 прямоадресуемых бит из области РПД (ячейки с адресами 20h-2Fh), а также битовые поля некоторых регистров специальных функций (адреса которых кратны восьми): ACC, B, Р0…P3, TCON, SCON, IE, IP, PSW. Побитно- адресуемыми являются, в частности, все линии ввода-вывода, каждая линия которых может рассматриваться как однобитовый порт. При работе с битами используется только прямая адресация.

Каждый из отдельно адресуемых бит может быть установлен в “1”, сброшен в “0”, инвертирован, передан во флаг C или принят из него. Между любым прямоадресуемым битом и флагом С могут быть произведены логические операции И, ИЛИ, результат которых заноситься во флаг C. Кроме того, по состоянию адресуемого бита можно проверить и выполнить соответствующий условный переход. Список команд операций над битами приведён в табл. 9.3, где bit обозначает прямой восьмиразрядный адрес.

Таблица 9.3. Команды побитовой обработки

9.4. Команды передачи управления

В эту группу входят команды условного и безусловного перехода, а также команды вызова подпрограмм и возврата из них (табл. 9.4). Чаще всего используется прямая адресация, т.е. адрес перехода целиком (или его часть) содержится в самой команде передачи управления.

Таблица 9.4. Команды передачи управления

В зависимости от разрядности указываемого адреса и способа его формирования различают четыре типа команд безусловного перехода:

· LJMP ad16 - длинный переход (в команде содержится полный 16-битный адрес, обеспечивается переход по всему адресному пространству объёмом 64 Кбайт, длина команды - три байта);

· AJMP ad11 - абсолютный переход (в команде содержится 11 младших бит адреса, обеспечивается переход в пределах текущей страницы объёмом 2048 байт, длина команды - два байта);

· SJMP rel8 - короткий относительный переход (в команде задается 8- разрядное смещение адреса относительно содержимого счётчика команд, обеспечивается переход в пределах -128…+127 байт относительно адреса следующей команды, длина команды - два байта);

· JMP @A+DPTR - косвенный переход (в аккумуляторе задается 8- разрядное смещение адреса относительно DPTR, обеспечивается переход в пределах -128…+127 байт относительно этого регистра, длина команды - один байт).

На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающие меньше места в памяти программ. При программировании на ассемблере допускается использование мнемонического обозначения JMP, поэтому выбор конкретного варианта команды безусловного перехода LJMP, AJMP или SJMP осуществляется компилятором.

Команды условных переходов используют только относительную адресацию, аналогичную SJMP. Они осуществлять ветвление по следующим условиям: аккумулятор содержит нуль (JZ); содержимое аккумулятора не равно нулю (JNZ); перенос равен единице (JC); перенос равен нулю (JNC); адресуемый бит равен единице (JB); адресуемый бит равен нулю (JNB).

Команда DJNZ предназначена для организации циклов, при этом в отличие от MCS-48 в качестве счётчика может использоваться не только регистр, но и любой прямоадресуемый байт (например, ячейка РПД). В процедурах ожидания какого-либо события удобно использовать команду CJNE, обеспечивающую сравнение байта с однобайтным операндом и переход в случае неравенства.

Все команды переходов, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг С, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг С в случае перехода.

Для обращения к подпрограммам используются команды LCALL, ACALL. Эти команды в отличие от команд перехода LJMP, AJMP сохраняют в стеке адрес возврата в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Команда RETI отличается от команды RET тем, что разрешает прерывания обслуженного уровня.

Контрольные вопросы.

  1. Описать команды арифметических операций.

  2. Описать команды логических операций.

  3. Описать команды операций над битами.

  4. Описать команды передачи управления.

ЛЕКЦИЯ 10. РАСПРЕДЕЛЕНИЕ И ДЕШИФРАЦИЯ АДРЕСНОГО ПРОСТРАНСТВА

10.1. Системная шина микропроцессора

10.2. Адресное пространство микропроцессорного устройства.

10.3. Пример дешифрации адресного пространства.

10.1. Системная шина микропроцессора

Структурная схема простейшего микропроцессорного устройства приведена на рисунке 10.1.

В состав системной шины в зависимости от типа процессора входит одна или несколько шин адреса, одна или несколько шин данных и шина управления. Несколько шин данных и адреса применяется для увеличения производительности процессора и используется только в сигнальных процессорах. В универсальных процессорах и контроллерах обычно применяется одна шина адреса и одна шина данных.

В любом случае все сигналы, необходимые для работы системной шины формируются микросхемой процессора, как это рассматривалось при изучении операционного блока. Иногда для увеличения скорости обработки информации, функции управления системной шины берет на себя отдельная микросхема (например, контроллер прямого доступа к памяти или сопроцессор). Арбитраж доступа к системной шине при этом осуществляет контроллер системной шины (в простейшем случае достаточно сигнала занятости шины).

В некоторых случаях в понятие шина дополнительно включают требования по уровням напряжения, которыми представляются нули и единицы, передаваемые по её проводам. В состав требований могут быть включены длительности фронтов передаваемых сигналов, типы используемых разъёмов и их распайка, последовательность передаваемых сигналов и скорость их передачи.

Рис. 10.1. Структурная схема подключения микропроцессорных устройств к системной шине

При подключении различных устройств к системной шине возникает вопрос — как различать эти устройства между собой? Единственный способ сделать это – использовать индивидуальный адрес для каждого устройства, подключенного к системной шине микропроцессора. Так как адресация производится к каждой ячейке устройства индивидуально, то возникает понятие адресного пространства, занимаемого каждым устройством и адресного пространства микропроцессорного устройства в целом.

10.2. Адресное пространство микропроцессорного устройства.

Адресное пространство микропроцессорного устройства изображается графически прямоугольником, одна из сторон которого представляет разрядность адресуемой ячейки этого микропроцессора, а другая сторона - весь диапазон доступных адресов для этого же микропроцессора. Обычно в качестве минимально адресуемой ячейки памяти выбирается восьмиразрядная ячейка памяти (байт). Диапазон доступных адресов микропроцессора определяется разрядностью шины адреса системной шины. При этом минимальный номер ячейки памяти (адрес) будет равен 0, а максимальный определяется из формулы:

Для шестнадцатиразрядной шины это будет число 65535 (64K). Адресное пространство этой шины и распределение памяти микропроцессорной системы, изображённой на рисунке 10.1, приведено на рисунке 10.2, а распределение памяти микропроцессорной системы, изображённой на рисунке 10.1, приведено на рисунке 10.3.

Рис. 10.2. Адресное пространство шестнадцатиразрядной шины адреса

Микропроцессоры после включения питания и выполнения процедуры сброса всегда начинают выполнение программы с определённого адреса, чаще всего нулевого. Однако есть и исключения. Например, процессоры, на основе которых строятся универсальные компьютеры IBM PC или Macintosh стартуют не с нулевого адреса. Программа должна храниться в памяти, которая не стирается при выключении питания, то есть в ПЗУ.

Рис. 10.3. Распределение памяти микропроцессора с шестнадцатиразрядной шиной адреса

Выберем для построения микропроцессорной системы микросхему ПЗУ объёмом 2 килобайта, как это показано на рисунке 10.1. При рассмотрении построения блока обработки сигналов мы договорились, что процессор после сброса начинает работу с нулевого адреса, поэтому разместим ПЗУ в адресном пространстве начиная с нулевого адреса. Для того, чтобы нулевая ячейка ПЗУ оказались расположенной по нулевому адресу адресного пространства микропроцессора, старшие разряды шины адреса должны быть равны 0.

При построении схемы необходимо декодировать старшие пять разрядов адреса (определить, чтобы они были равны 0). Это выполняется при помощи дешифратора адреса, который в данном случае вырождается в пятивходовую схему "ИЛИ-НЕ" Это связано с тем, что внутри ПЗУ уже есть одиннадцативходовый дешифратор адреса. При использовании дешифратора адреса, обращение к ячейкам памяти выше двух килобайт не приведёт к чтению ячеек ПЗУ, так как на входе выбора кристалла CS уровень напряжения станет высоким.

Теперь подключим микросхему ОЗУ. Для примера выберем микросхему объёмом 8 Кбайт. Для выбора любой из ячеек этой микросхемы достаточно тринадцатибитового адреса, поэтому необходимо дополнительно декодировать три оставшихся разряда адреса. Так как начальные ячейки памяти адресного пространства уже заняты ПЗУ, то использовать нельзя. Выберем следующую комбинацию цифр 001 и используем известные нам принципы построения схемы по произвольной таблице истинности. Дешифратор адреса выродится в данном случае в трёхвходовую схему "И-НЕ" с двумя инверторами на входе. Схема этого дешифратора приведена на рисунке 10.1. Приведённый дешифратор адреса обеспечивает нулевой уровень сигнала на входе CS только при комбинации старших бит 000. Обратите внимание, что, так как объём ПЗУ меньше объёма ОЗУ, то между областью адресов ПЗУ и областью адресов ОЗУ образовалось пустое пространство неиспользуемых адресов памяти.

И, наконец, так как все микропроцессоры предназначены для обработки данных, поступающих извне, то в любой микропроцессорной системе должны присутствовать порты ввода-вывода. Порт ввода-вывода отображается в адресное пространство микропроцессорного устройства как одиночная ячейка памяти, поэтому порт ввода вывода можно разместить по любому свободному адресу. Проще всего построить дешифратор числа FFFFh. В этом случае дешифратор превращается в обычную 16-ти входовую схему "И-НЕ", поэтому и выберем эту ячейку памяти в адресном пространстве микропроцессора для размещения порта ввода-вывода.

10.3. Пример дешифрации адресного пространства.

Рассмотрим более подробно схему дешифрации адресного пространства на конкретном примере.

Пусть задана структура и элементы микропроцессорного контроллера:

  • Таймер счетчик реального времени DS1644;

  • ОЗУ (две микросхемы КР537РУ17 по 8Кб);

  • Аналоговый мультиплексор MAX358;

  • Аналого-цифровой преобразователь MAX1240;

  • Цифроаналоговый преобразователь MAX506;

  • Параллельный 8-ми разрядный порт ввода (регистр 74HC573);

  • Параллельный 8-ми разрядный порт вывода (регистр 74HC573);

  • Индикация (4 светодиодных индикатора ALS324B);

  • Клавиатура 4х5 кнопок.

Так как шина адреса 16-ти разрядная, то полный объем адресного пространства составляет 64Кбайт и занимает адреса с 0000h по 0ffffh.

В соответствии с заданными структурой микропроцессорного контроллера и элементами определим области максимального объема.

Рассмотрев заданные элементы видно, что максимальное количество адресных входов с А0 по А14 имеет микросхема таймера счетчика DS1644. Таким образом, ей необходимо адресное пространство в 32Кб.

На втором месте по объему заданного адресного пространства находится оперативная память – 16Кб.

Остальные микросхемы требуют не более 8 адресов.

Расположим микросхему таймера счетчика в первой половине адресного пространства с адреса 0000h по адрес 7fffh. Такое расположение определяется состоянием адресной линии А15=0. Эту линию и подадим на вход CS микросхемы.

Следовательно, все остальные устройства должны располагаться в старшей половине адресного пространства, что определяется состоянием линии А15=1. Этот сигнал подадим на вход разрешения работы дешифратора для разбиения старших 32Кб адресного пространства.

Так как предполагается использование двух микросхем статического ОЗУ по 8Кб каждая для получения заданного объема памяти 16Кб, то дешифратор должен разбить старшие 32Кб на четыре области по 8Кб каждая. Две первые из них отводим под микросхемы памяти (адреса с 8000h по 9fffh и с 0а000h по 0bfffh).

Для других устройств остается область памяти объемом 16Кб, начиная с адреса 0с000h по 0ffffh.

Перечислим эти устройства: аналоговый мультиплексор, аналого-цифровой преобразователь, цифроаналоговый преобразователь, порт ввода, порт вывода, индикация, клавиатура. Для адресации к ним и формирования сигналов выбора возьмем дешифратор 3х8. Индикация (четыре восьмисегментных индикатора) и клавиатура (4х5) требуют по четыре сигнала CS (один дешифратор 3х8).

Определим их адресное пространство в соответствии с подключением адресных линий на рис.2.1.

Рис. 2.1 – Блок дешифрации адресного пространства

Карта распределения адресного пространства приведена в таблице 10.1.

Таблица 10.1 – Карта распределения адресного пространства

№ п/п

Назначение области адресного пространства

Начальный и конечный адрес

Размер

1.

Таймер счетчик реального времени

0000h – 7fffh

32Кб

2.

ОЗУ (две микросхемы по 8Кб):

CSRAM1

8000h – 9fffh

8Кб

CSRAM1

0a000h – 0bfffh

8Кб

3.

Аналоговый мультиплексор

0c000h – 0c3ffh

1Кб

4.

Аналого-цифровой преобразователь

0c400h – 0c7ffh

1Кб

5.

Цифроаналоговый преобразователь

0c800h - ocbffh

1Кб

6.

Порт ввода

0cc00h – 0cfffh

1Кб

7.

Порт вывода

0d000h – 0d3ffh

1Кб

8.

Резерв

0d400h – 0d7ffh

1Кб

9.

Резерв

0d800h – 0dbffh

1Кб

10.

Резерв

0dc00h – 0dfffh

1Кб

11.

Индикация (4 индикатора):

Индикатор 1

0e000h – 0e3ffh

1Кб

Индикатор 2

0e400h – 0e7ffh

1Кб

Индикатор 3

0e800 – 0ebffh

1Кб

Индикатор 4

0ec00h – 0efffh

1Кб

12.

Клавиатура (4 линии сканирования):

Строка 1

0f000h – 0f3ffh

1Кб

Строка 2

0f400h – 0f7ffh

1Кб

Строка 3

0f800 – 0fbffh

1Кб

Строка 4

0fc00h – 0ffffh

1Кб

В микропроцессорной управляющей системе в качестве процессора используется однокристальный микроконтроллер семейства MCS51.

Предполагается, что управляющая программа (загрузчик) находится во внутренней памяти программ самого микроконтроллера. Это дает возможность расположения таймера-счетчика в начале адресного пространства.

Контрольные вопросы.

  1. Что понимается под адресным пространством микропроцессорного устройства?

  2. Как определяется максимальный номер ячейки памяти (адрес)?

  3. С какого адреса микропроцессоры после включения питания и выполнения процедуры сброса всегда начинают выполнение программы?

  4. Пояснить последовательность распределения адресного пространства микропроцессорного контроллера.

Лекция 11. Способы расширения адресного пространства микропроцессора

11.1. Страничный метод адресации.

11.2. Сегментный метод адресации

11.3. Оконный метод адресации

11.1. Страничный метод адресации

Известно, что размер адресного пространства определяется разрядностью счётчика команд микропроцессора. Достаточно часто при развитии микропроцессорной системы возможности адресного пространства исчерпываются. В таком случае приходится прибегать к методам расширения адресного пространства.

Для расширения адресного пространства можно воспользоваться параллельным портом. Внешние выводы параллельного порта при этом используются в качестве старших битов адресной шины. Такой метод расширения адресного пространства называется страничным методом адресации. Регистр данных параллельного порта при использовании его для расширения адресного пространства будет называться переключателем страниц. Схема использования параллельного порта в качестве переключателя страниц памяти приведена на рисунке 11.1.

В этой схеме параллельный порт используется в качестве простейшего контроллера памяти микропроцессорного устройства. При применении восьмиразрядного параллельного порта в микропроцессорной системе появились дополнительные восемь линий адреса. В результате адресное пространство микропроцессорной системы увеличилось до 16 Мегабайт.

Структура нового адресного пространства приведена на рисунке 11.2, а принцип формирования нового адреса с использованием переключателя страниц приведён на рисунке 11.3.

Рис. 11.1. Использование параллельного порта в качестве переключателя страниц памяти

Рис. 11.2. Структура страничного адресного пространства

Рис. 11.3. Формирование адреса с использованием переключателя страниц

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

11.1. Сегментный метод адресации

При сегментном методе организации памяти для расширения адресного пространства используется базовый регистр, относительно которого производится адресация команд или данных в программе. Разрядность базового регистра обычно выбирают равной разрядности счётчика команд. В качестве базового регистра, как и при страничной организации памяти, можно использовать параллельный порт.

Для формирования физического адреса используется параллельный двоичный сумматор. На входы этого сумматора подаётся содержимое базового регистра и содержимое счётчика команд. Суммирование производится со смещением содержимого базового регистра влево на несколько бит относительно счётчика команд (рис. 11.4).

Рисунок 11.4. Формирование адреса при сегментной адресации

В результате максимальный размер сегмента определяется разрядностью программного счётчика, а максимальная неиспользуемая область памяти — смещением базового регистра относительно программного счётчика.

Адресное пространство при использовании сегментного метода адресации приведено на рисунке 11.5.

Рисунок 11.5. Пример адресного пространства с разделением на сегменты

Количество сегментов определяется количеством базовых регистров. Сегменты могут перекрываться в адресном пространстве, и тем самым может регулироваться размер памяти, который отводится под каждый конкретный сегмент памяти. В компьютерах семейства IBM PC имеются четыре базовых регистра, определяющих сегмент данных, сегмент программы, сегмент стека и дополнительный сегмент. Информацию в базовые регистры заносит операционная система при переключении задач.

11.3. Оконный метод адресации

Ещё одним распространённым способом увеличения адресного пространства является применение окон. При использовании окон производится расширение не всего адресного пространства, а только его части. Внутри адресного пространства выделяется некоторая область, которая называется окном. В это окно может отображаться часть другого адресного пространства.

При использовании окон может быть использован как страничный метод отображения адресного пространства, так и сегментный метод отображения адресного пространства в окно.

При использовании страничного метода отображения, конкретная страница другого адресного пространства, которая в данный момент отображается в окно памяти, определяется переключателем страниц, построенному по такому же принципу как это было рассмотрено на рисунке 11.1.

При использовании сегментного метода отображения, конкретная область адресного пространства, которая будет отображаться в окно, определяется содержимым базового регистра. Если разрядность адреса вспомогательного адресного пространства, отображаемого в окно основной памяти, совпадает с разрядностью базового регистра, то любая область вспомогательной памяти может быть отображена в основную память с точностью до байта.

Принцип построения оконной адресации при отображении страниц показан на рисунке 11.6.

Оконная адресация часто используется при развитии микропроцессорных семейств, когда размера областей памяти, отведённых для конкретных задач в младших моделях семейства, не хватает для старших моделей семейства, а при этом нужно поддерживать аппаратную совместимость с младшими моделями семейства. В качестве примера можно привести микросхемы I81c96 фирмы INTEL или TMS320c5410 фирмы Texas Instrument, где для расширения области регистров специальных функций используется оконная адресация.

Рис. 11.6. Применение окна для расширения адресного пространства

Контрольные вопросы.

  1. Пояснить организацию страничного метода адресации.

  2. Пояснить организацию сегментного метода адресации.

  3. Пояснить организацию оконного метода адресации.

104

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]