Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Архитектура микроконтроллеров семейства MCS -51Стр 1 из 8Следующая ⇒
Способы адресации операндов
В зависимости от способа адресации и места расположения операнда можно выделить девять типов операндов, между которыми возможен информационный обмен (рис. 1.3).
Рис. 1.3. Граф путей передачи данных в микроконтроллерах MCS-51 Аккумулятор (А) представлен на этом графе отдельной вершиной, так как многие команды используют неявную (подразумеваемую) адресацию. При определении способа адресации операндов в команде необходимо учитывать, что виды адресации для каждого операнда команды (источника или приемника) могут не совпадать. Неявная адресация. При неявной адресации регистр-источник или регистр-приемник подразумевается в самом коде операции. Например: RR А ;сдвинуть содержимое аккумулятора вправо; DA A ; произвести десятичную коррекцию результата суммирования; MOV A, R0 ;в первом операнде использована неявная адресация, ;а во втором – регистровая. Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Номер регистра записывается в трех младших битах команды. Например: MOV R0, А ; в первом операнде использована регистровая адресация, ;а во втором – неявная. Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128 ... 256). Адрес ячейки памяти помещается во второй байт команды. Например: MOV A, 20h ; во втором операнде использована прямая байтовая ; адресация, а в первом – неявная MOV 15h, R6 ; в первом операнде использована прямая байтовая ; адресация, а во втором – регистровая. Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н—2FH, и к отдельно адресуемым битам регистров специального назначения. Например: SETB 20h ; использована прямая битовая адресация CLR 15H ; использована прямая битовая адресация Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Например: MOV A, @R0 ;в первом операнде использована неявная адресация, ;а во втором — косвенно-регистровая MOV @R1, A ;в первом операнде использована косвенно- ; регистровая адресация, а во втором - неявная Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 6 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например: MOVX A, @R0 ;в первом операнде использована неявная адресация, ;а во втором - косвенно-регистровая MOVX @R1, A ;в первом операнде использована косвенно- ; регистровая адресация, ; а во втором - неявная Если в качестве регистра-указателя используется 16-разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт). MOVX A, DPTR ;в первом операнде использована неявная адресация, ;а во втором - косвенно-регистровая MOVX DPTR, A ;в первом операнде использована косвенно-регистровая ; адресация, а во втором - неявная Косвенно-регистровая адресация по сумме базового и индексного регистров (содержимое аккумулятора А) упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А. Например: MOVC A, 8A+PC ;в первом операнде использована неявная адресация, ;а во втором - косвенно-регистровая MOVC A, SA+DPTR ;в первом операнде использована неявная адресация, ;а во втором - косвенно-регистровая Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например: MOV A, #14h ;в первом операнде использована неявная ;адресация, а во втором - непосредственная MOV DPTR, #2048h ;в первом операнде использована неявная ;адресация, а во втором – непосредственная.
Блок управления
Блок управления предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков микроконтроллера MCS–51 во всех допустимых режимах его работы. В состав блока управления входят: устройство выработки временных интервалов, логика ввода-вывода, регистр команд, регистр управления потреблением, дешифратор команд, программируемая логическая матрица (ПЛМ) и логика управления микроконтроллера MCS–51. Устройство выработки временных интервалов предназначено для формирования и выдачи внутренних синхросигналов, фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды микроконтроллера MCS-51 выполняются за один или два машинных цикла, кроме команд умножения MUL А, В и деления DIV A, B продолжительность которых четыре машинных цикла. Синхронизация микроконтроллера MCS-51 осуществляется с использованием внутреннего инвертирующего усилителя, который может быть превращен в синхрогенератор посредством подключения к выводам ХТ AL 1 и XTAL2 внешнего кварцевого резонатора. Вывод XTAL1 является входом, а вывод XTAL2 выходом внутреннего усилителя. Для синхронизации может быть использован и внешний синхрогенератор. Схемы подключения внешнего резонатора и синхрогенератора приведены на рис. 1.4.
Рис. 1.4. Подключение времязадающих цепей: ---использование внутреннего генератора (а); ---использование внешнего генератора для HMOS серии 1816 (б); ---использование внешнего генератора для CHMOS серии 1830 (в).
Внутри микроконтроллера частота внешнего синхросигнала делится на 2. Период внутреннего синхросигнала определяет длительность интервала времени, который фирма Intel называет состоянием Si («state») будем называть тактом. Этот интервал состоит из двух фаз Р1 и Р2. Более крупной единицей времени является машинный цикл, включающий шесть тактов S1 .. S6. По длительности он равен 12 периодам внешнего синхросигнала. Машинный цикл служит в основном для целей внутреннего микропрограммного управления. При описании последовательности сигналов или событий фазам в машинном цикле присваивают номера с S1Р1 по S6P2. Цикл выполнения каждой команды состоит из одного, двух или четырех машинных циклов. Протоколы обмена микроконтроллеров семейства MCS-51 по магистрали реализованы в виде комбинаций следующих трех типов магистральных циклов: ---ввод кода команды из внешней памяти программ без обращения к внешней памяти данных; ---чтение из внешней памяти данных; ---запись во внешнюю память данных. Рис. 1.5а. Типы магистральных циклов.
Первый тип магистрального цикла (рис. 1.5, а) является основным, имеет длительность 6 тактов (12 периодов XTAL). Он характеризуется выработкой двух импульсов сигнала ALE, который служит для промежуточной фиксации младшего байта адреса при обращении к внешней памяти (из порта Р0 в регистр-защелку). В этом типе магистрального цикла сигнал ALE стробирует адрес памяти программ, источником которого является счетчик команд (регистры РСН и PCL). Сигнал PSEN является сигналом чтения кода из внешней памяти программ. В этом типе магистрального цикла, он также вырабатывается дважды. Оба сигнала становятся активными первый раз на фазе S1P2, а второй раз на фазе S4P2. Во время второй выборки производится чтение следующего байта кода. Если этот байт в данной команде не нужен, он игнорируется, а счетчик команд не инкрементируется. Этот тип магистрального цикла является основным, поскольку отсутствие обращения к внешней памяти данных позволяет реализовать с его помощью самые короткие команды (рис. 1.5а, б) длительностью в один машинный цикл (6 тактов, 12 периодов Fosc). Поскольку сигнал ALE вырабатывается постоянно, с частотой Fosc/6, он может быть использован для целей внешней синхронизации.
Рис. 1.5б. Типы магистральных циклов.
Второй тип магистрального цикла (рис. 1.5, б) имеет длительность 12 тактов и характеризуется тем, что второй сигнал ALE на фазе S1P2 второго машинного цикла не вырабатывается. Сигнал PSEN остается пассивным с фазы S4P2 первого машинного цикла до фазы S6P1 следующего цикла, запрещая чтение байта кода. Второй импульс сигнала ALE стробирует фиксацию адреса памяти данных, источником которого в микроконтроллере является регистр DPTR (DPH и DPL) или регистр Ri (при косвенной адресации). Во втором случае содержимое регистра выдается через порт Р0 а старшие восемь разрядов определяются значением в регистре порта Р0. Далее, начиная с фазы S1P1 первого цикла до фазы S4P1 второго цикла, становится активным сигнал RD. Он стробирует ввод данных через порт Р0. Последующие импульсы сигналов ALE и PSEN вводят код следующего байта команды.
Рис. 1.5в. Типы магистральных циклов.
Третий тип магистрального цикла (рис. 1.5, в) имеет длительность 12 тактов и в основном аналогичен второму типу. Отличие заключаются в том, что активным становится сигнал разрешения записи WR. Особенностью архитектуры микроконтроллера MCS-51 является то, что циклы всех команд формируются из циклов магистрали и имеют строго определенную длительность (рис.1.6):
Рис. 1.6. Примеры циклов команд.
Самыми короткими по времени выполнения являются однобайтные и двухбайтные команды, выполняемые за один машинный цикл (рис. 1.6а, б). Это команды с быстрыми операциями, не использующие обращений к внешней памяти данных. В однобайтных командах (рис. 1.6, а) информация хранится в ячейках внутренней памяти данных или регистрах. По второму импульсу сигнала ALE читается код операции следующей команды, который игнорируется. В начале следующей команды он читается вновь. В двухбайтных командах (рис. 1.6, б) во втором байте хранятся данные, либо адрес внутренней ячейки памяти. В этом случае второй импульс ALE стробирует ввод второго байта текущей команды. Еще одну группу характерных команд составляют однобайтные команды длительностью два машинных цикла (рис. 1.6, в). Это команды с медленными операциями, не использующие обращений к внешней памяти данных. Такими операциями являются, например, наращивание указателя данных DPTR, операции умножения и деления, возврат из подпрограммы. В командах такого типа после чтения кода операции по первому сигналу ALE три раза подряд выбирается один и тот же следующий байт кода, который игнорируется. Короткими, но медленными, являются команды типа МОVХ с обращением к внешней памяти данных. Они однобайтные, но выполняются за два машинных цикла (рис. 1.6, г). После выборки кода операции команды по первому импульсу ALE следующий импульс выбирает следующий байт кода, который игнорируется. Далее импульс ALE стробирует адрес внешней памяти данных, по которому производится операция чтения или записи. По последнему импульсу ALE вводится следующий байт кода. Логика ввода-вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информацией микроконтроллера MCS-51 с внешними устройствами через порты Р0-Р3. Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды, который с помощью дешифратора команд преобразовывается в 24-х разрядный код для ПЛМ, с помощью, которой вырабатывается набор микроопераций в соответствии с микропрограммой выполнения команды. Регистр команд программно недоступен. Регистр управления потреблением (PCON) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Таблица 1.4. Регистр управления мощностью PCON
Примечание. При одновременной записи 1 в PD и IDL бит PD имеет преимущество. Сброс содержимого PCON выполняется путем загрузки в него кода 0XXX0000. Для варианта изготовления по технологии n - МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква 'c') регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют (таблица 1.4). Организация памяти
Все контроллеры семейства MCS – 51 имеют несколько адресных пространств функционально и логически разделенных за счет разницы в механизмах адресации и сигналах управления записью и чтением: --- память программ; --- внешняя память программ; --- внутренняя память данных; --- внешняя память данных. Структура адресного пространства семейства MCS – 51 показана на рис.1.7. Слева приводятся адреса соответствующих областей памяти.
Рис. 1.7. Структура адресного пространства.
Память программ Память программ имеет 16–ти битовую адресную шину, ее элементы адресуются с использованием счетчика команд (РС) или инструкций, которые вырабатывают 16–разрядные адреса. Память программ доступна только по чтению. Микроконтроллеры MCS-51 не имеют команд и управляющих сигналов, предназначенных для записи в память программ. Память программ имеет байтовую организацию и общий объем до 64 Кбайт. Ряд микроконтроллеров семейства MCS–51 содержат расположенную на кристалле внутреннюю память программ емкостью 4 Кбайт, которая может быть расширена до 64 Кбайт за счет подключения микросхем внешней памяти программ. Внутренняя память программ может быть либо ПЗУ, формируемое при изготовлении контроллера, либо ППЗУ с ультрафиолетовым стиранием. Таким образом, для семейства MCS-51 внутренняя и внешняя память программ разделены в соотношении 4К/60К. Микроконтроллеры MCS-51 могут не иметь внутренней памяти программ и работать только с внешней емкостью до 64 Кбайт. С точки зрения программиста имеется только один вид памяти программ объемом 64 К. Тот факт, что в ряде микроконтроллеров MCS-51 он образуется комбинацией массивов, находящихся на кристалле и вне его, в соотношении 4 К/60 К для программиста неощутим, так как АЛУ автоматически выбирает байт из соответствующего массива в соответствии с его адресом. Сигналом, стробирующим выборку и ввод байта из внешней памяти программ в микроконтроллерах MCS-51 является сигнал . Для микроконтроллеров, содержащих внутреннюю память программ, сигнал формируется только в том случае, если адрес в счетчике команд превосходит максимальный адрес внутренней памяти программ 0FFFН (т. е. для выборок из внутренней памяти программ не формируется). Для микроконтроллеров MCS-51, не имеющих внутренней памяти программ, формируется при любом обращении к памяти программ. Контроллеры семейства MCS-51 имеют внешний вывод , с помощью которого можно запретить работу внутренней памяти программ, для чегo необходимо подать на вывод "0". При этом внутренняя память программ отключается и, начиная с нулевого адреса, все обращения происходят к внешней памяти программ с формированием сигнала . В случае, если =l, работают и внутренняя и внешняя память программ. Для микроконтроллеров MCS-51, не имеющих внутренней памяти программ, для нормальной работы, всегда необходимо задавать =0. Таким образом, доступ к внешней памяти программ осуществляется в двух случаях: 1) при действии сигнала =0 независимо от адреса обращения, 2) в любом случае, если программный счетчик (РС) содержит число, большее, чем 0FFFН. Если центральный процессор осуществляет доступ к внешней памяти программ, сигнал вырабатывается дважды во время каждого машинного цикла (исключение составляет команда MOVX) независимо от того, необходим или нет выбираемый байт для текущей команды. При выборке из внешней памяти программ всегда используется 16-битовый адрес, младший байт которого выдается через порт Р0, а старший байт - через порт Р2 микроконтроллера MCS-51. Байт из внешней памяти программ вводится в микроконтроллер MCS-51 через порт Р0, который в этом случае используется как шина адреса/данных в режиме мультиплексирования. На рис.1.8 показаны младшие адреса памяти программ, которые, как правило, отводятся под обработку прерываний и начало работы микроконтроллера после сброса. Память программ имеет отдельное от памяти данных адресное пространство объемом до 64 Кбайт, причем, может быть часть памяти программ с адресами 0000H-0FFFH расположена на кристалле.
Рис.1.8 Младшие адреса памяти программ.
Память программ, расположенная на кристалле, состоит из 12-разрядного дешифратора и ПЗУ емкостью 4К*8 бит или ППЗУ с ультрафиолетовым стиранием емкостью 4К*8 бит. Запись программ в ПЗУ происходит во время изготовления кристаллов. Если на вывод микроконтроллера подано напряжение питания Ucc, то обращение к внешней памяти программ происходит автоматически при выработке счетчиком команд адреса, превышающего 0FFFH. Если адрес находится в пределах 0000H-0FFFH, обращение происходит к памяти программ, расположенной на кристалле (внутренней памяти программ). Чтение из внешней памяти программ стробируется сигналом . При работе с внутренней памятью программ сигнал не формируется. Микроконтроллеры MCS-51 не имеют инструкций и аппаратных средств для программной записи в память программ. При обращениях к внешней памяти программ всегда формируется 16-разрядный адрес, младший байт которого выдается через порт Р0, а старший - через порт Р2. При этом байт адреса, выдаваемый через порт Р0, должен быть зафиксирован во внешнем регистре по спаду сигнала , т. к. в дальнейшем линии порта Р0 используются в качестве шины данных, по которой байт из внешней памяти программ вводится в микроконтроллер. На рис.1.9. показана функциональная схема подключения к MCS-51 внешней памяти программ и внешней памяти данных. Порт Р0 работает как мультиплексированная шина адрес/данные: выдает младший байт счетчика команд, а затем переходит в высокоимпедансное состояние и ожидает прихода байта из ППЗУ программ. Когда младший байт адреса находится на выходах порта Р0, сигнал защелкивает его в адресном регистре RG.
Рис. 1.9. Функциональная схема подключения к MCS-51 внешней памяти программ и внешней памяти данных.
Старший байт адреса находится на выходах порта Р2 в течение всего времени обращения к ППЗУ. Сигнал разрешает выборку байта из ППЗУ, после чего выбранный байт поступает на порт Р0 микроконтроллера и вводится в микроконтроллер. На рис. 1.10 и 1.11 приведены диаграммы, показывающие формирование соответствующих сигналов при работе микроконтроллера семейства MCS-51 с внешней памятью программ. Как видно из диаграмм, при работе с внешней памятью программ сигнал формируется дважды в каждом машинном цикле независимо от количества байт в команде. Если второй выбираемый байт в текущей команде не используется, он игнорируется микроконтроллером. В дальнейшем при переходе к выполнению следующей команды этот байт будет введен вторично. Рис. 1.10. Временные диаграммы операций с обращением к внешней памяти.
Рис. 1.11. Временная диаграмма выборки команды из внешней памяти программ.
Основная функция сигнала САВП обеспечить временное согласование передачи из порта P0 на внешний регистр младшего байта адреса в цикле чтения из ВПП. Сигнал САВП приобретает значение 1 дважды в каждом машинном цикле. Это происходит даже тогда, когда в цикле выборки нет обращения к ВПП. Доступ к ВПД возможен только в том случае, если сигнал САВП отсутствует. Первый сигнал САВП во втором машинном цикле команды MOVX блокируется. Следовательно, в любой МК-системе, не использующей ВПД, сигнал САВП генерируется с постоянной частотой, равной 1/16 частоты резонатора, и может быть использован для синхронизации внешних устройств или для реализации различных временных функций. При обращении к РПП сигнал РВПП не генерируется, а при обращении к ВПП он выполняет функцию строб - сигнала чтения. Полный цикл чтения ВПД, включая установку и снятие сигнала ЧТ, занимает 12 периодов резонатора. 1.5.2. Память данных Память данных предназначена для приема, хранения и выдачи информации, используемой в процессе выполнения программы. Память данных, расположенная на кристалле, состоит из регистра адреса ОЗУ, дешифратора, ОЗУ и указателя стека. Регистр адреса ОЗУ предназначен для приема и хранения адреса выбираемой с помощью дешифратора ячейки памяти, которая может содержать, как бит, так и байт информации. ОЗУ представляет собой 128 восьмиразрядных регистров, предназначенных для приема, хранения и выдачи различной информации. Указатель стека представляет собой восьмиразрядный регистр, предназначенный для приема и хранения адреса ячейки стека, к которой было последнее обращение. При выполнении команд LCALL, ACALL содержимое указателя стека увеличивается на 2. При выполнении команд RET, RETI содержимое указателя стека уменьшается на 2. При выполнении команды PUSH direct содержимое указателя стека увеличивается на 1. При выполнении команды РОР direct содержимое указателя стека уменьшается на 1. После сброса в указателе стека устанавливается адрес 07Н, что соответствует началу стека с адресом 0ВН. Bнутренняя память данных микроконтроллеров семейства MCS-51 состоит из двух областей: 128 байт оперативной памяти (ОЗУ) с адресами 0-7FH и области регистров специальных функций, занимающей адреса 80H-FFH. Распределение пространства внутренней памяти данных показано на рис. 1.12. Физически внутреннее ОЗУ данных и область регистров специальных функций являются отдельными устройствами.
Рис. 1.12. Адресное пространство внутренней памяти данных.
Все ячейки внутреннего ОЗУ данных могут адресоваться с использованием прямой и косвенной адресации. Кроме того, внутреннее ОЗУ данных имеет следующие особенности. Младшие 32 байта внутреннего ОЗУ данных сгруппированы в 4 банка по 8 регистров в каждом (БАНК0-БАНК3 на рис. 1.12). Команды программы могут обращаться к регистрам, используя их имена R0-R7. Два бита PSW (указатели банка рабочих регистров RS0 и RS1) определяют, с регистрами какого банка производятся манипуляции. Наличие такого механизма работы с ячейками ОЗУ позволяет экономить память программ, т. к. команды, работающие с регистрами R0-R7, короче команд, использующих прямую адресацию. Следующие после банков регистров внутреннего ОЗУ данных 16 байт (адреса 20Н-2FН) образуют область ячеек, к которым возможна побитовая адресация. Набор команд семейства MCS-51 содержит значительное количество инструкций, позволяющих работать с отдельными битами, используя при этом прямую адресацию. 128 бит, составляющих рассматриваемую область внутреннего ОЗУ данных, имеют адреса 00H-7FH и предназначены для работы с такими инструкциями. Битовая адресация ОЗУ показана на рис. 1.13, где в квадратах, символизирующих биты, указаны их адреса.
Рис. 1.13. Битовая адресация ОЗУ.
Обращение к внутреннему ОЗУ данных всегда осуществляется с использованием 8-разрядного адреса. При включении питания содержимое ОЗУ будет иметь случайное значение. Область регистров специальных функций содержит защелки портов, регистры таймеров/счетчиков, регистры управления и т. д. Полный список регистров специальных функций с их адресами приведен в табл.1.5. Таблица 1. 5. Список регистров специальных функций
* - регистры, допускающие побитовую адресацию.
Эти регистры допускают только прямую адресацию. Двенадцать байт в области регистров специальных функций допускают как байтовую, и побитовую адресацию. Список регистров с побитовой адресацией показан на рис. 1.14. Как видно из рисунка, побитовую адресацию допускают те регистры специальных функций, чей адрес заканчивается 000Н. Биты в рассматриваемой области регистров специальных функций имеют адреса 80Н-F7Н В микроконтроллерах семейства MCS-51 предусмотрена возможность расширения памяти данных путем подключения внешних устройств емкостью до 64 Кбайт.
Рис. 1.14. Адреса битов регистров специальных функций.
При этом обращение к внешней памяти данных возможно только с помощью команд MOVX. Команды MOVX@Ri, А, MOVX А, @Ri формируют восьмиразрядный адрес, выдаваемый через порт Р0. Команды MOVX@DPTR, А и MOVX @ А, DPTR формируют 16-разрядный адрес, младший байт которого выдается через порт Р0, а старший - через порт Р2. Байт адреса, выдаваемый через порт Р0, должен быть зафиксирован во внешнем регистре по спаду сигнала ALE, т. к. в дальнейшем линии порта Р0 используются как шина данных, через которую байт данных принимается из памяти при чтении или выдается в память данных при записи. При этом чтение стробируется сигналом микроконтроллера , а запись - сигналом . При работе с внутренней памятью данных сигналы и не формируются. На рис. 1.15 приведены диаграммы циклов чтения и записи при работе микроконтроллеров MCS-51 с внешней памятью данных. Рис. 1.15. Временные диаграммы циклов чтения и записи при работе с внешней памятью данных.
На рисунке 1.15 обозначены: ---PCL OUT- выдача младшего байта счетчика команд РС; ---DPH, DPL-соответственно младший и старший байты регистра указателя данных DPTR, который используется в качестве регистра косвенного адреса в командах MOVX A, @DPTR и MOVX DPTR, @A. ---RI- регистры R0 и R1, которые используются в качестве регистра косвенного адреса в командах MOVX A, @RI и MOVX @RI, А; ---DPL OR RI OUT- выдача младшего байта регистра указателя данных DPTR или регистра R0(R1); ---DPH OR P2 OUT- выдача старшего байта регистра указателя данных DPTR или защелки порта Р2; ---PCH OR P2- выдача старшего байта счетчика команд РС или защелки порта Р2; 1- PCL OUT, если используется ВПП; 2- DPH OR P2 OUT; 3- PCL OUT; 4- PCH OR P2 1.6. Порты ввода/вывода Порты Р0, Р1, Р2, Р3 являются двунаправленными портами ввода/вывода и предназначены для обеспечения обмена информацией микроконтроллеров (МК) семейства MCS - 51 с внешними устройствами, образуя 32 линии ввода/вывода. Каждый из портов содержит восьмиразрядный регистр (фиксатор - защелка), имеющий байтовую и битовую адресацию для установки (сброса) разрядов. Физически адреса фиксаторов Р0, Р1, Р2, Р3 составляют для: Р0 – 80Н, при битовой адресации 80Н – 87Н; Р1 – 90Н, при битовой адресации 90Н – 97Н; Р2 – А0Н, при битовой адресации А0Н – А7Н; Р3 – В0Н, при битовой адресации В0Н – В0Н; Помимо работы в качестве обычных портов ввода/вывода линии портов Р0, Р1, Р2, Р3 могут выполнять ряд дополнительных функций, описанных ниже: Через порт Р0: --- выводится младший байт адреса А0 – А7 при работе с внешней памятью программ и внешней памятью данных; --- выдается из микроконтроллера и принимается в микроконтроллер байт данных при работе с внешней памятью (при этом обмен байтом данных и вывод младшего байта адреса внешней памяти мультиплексированы во времени); --- задаются данные при программировании внутреннего ППЗУ и читается содержимое внутренней памяти программ. Через порт Р1: --- задается младший байт адреса при программировании внутреннего ППЗУ и при чтении внутренней памяти программ. Через порт Р2: --- выводится старший байт адреса А8 – А15 при работе с внешней памятью программ и внешней памятью данных (для внешней памяти данных – только при использовании команд MOVX A,@DPTR, MOVX @DPTR,А которые вырабатывают 16 – ти разрядный адрес; --- задается старший байт (разряды А8 – А14) адреса при программировании внутреннего ППЗУ и при чтении внутренней памяти программ. Каждая линия порта Р3 имеет индивидуальную альтернативную функцию: Таблица 1.6. Альтернативные функции порта 3
Альтернативная функция любой из линий порта Р3 реализуется только в том случае, если в соответствующем этой линии разряде фиксатора – защелки содержится «1». В противном случае на линии порта Р3 будет присутствовать «0». На рис.1.16 показаны функциональные схемы одного вывода в каждом из портов для n-МОП микроконтроллера MCS – 51. Рис. 1.16. Схемотехника портов ввода/вывода микроконтроллера MCS – 51 выполненного по n - МОП технологии а - порт 0; б - порт 3.
2.6.1. Работа с портами.
Порты Р1 – Р3 имеют идентичные характеристики. Данные записанные в них, статически фиксируются и не изменяются до перезаписи. В режиме работы с внешней памятью программ порт Р2 служит для выдачи сигналов старших разрядов адреса и статически фиксирует их до момента изменения. Обращения к внешней памяти программ всегда выполняются с использованием 16 – ти разрядного адреса. Когда микроконтроллер работает с внешней памятью программ, все 8 бит порта Р2 задействованы на выдачу старшего байта адреса (старший байт счетчика команд РС) и не могут быть использованы в качестве линий ввода/вывода общего назначения. Обращения к внешней памяти данных могут выполняться как с использованием 16 – ти разрядного адреса (MOVX @DPTR), так и с использованием 8 - ти разрядного адреса (MOVX @Ri). При использовании 16 – ти разрядного адреса старший байт адреса выдается через порт Р2, на линиях которого байт адреса удерживается в течение всего времени цикла записи или чтения. Выдача адреса через порт Р2 не влияет на содержимое защелок порта Р2. Если порт Р2 не задействован на выдачу адреса, то на его выводах выставляется содержимое защелок. Для перевода любой линии портов Р1 – Р3 на прием входной информации необходимо в соответствующий фиксатор – защелку порта записать «1» с помощью команды выдачи данных. Сигнал RST устанавливает все порты на прием входной информации. Порт Р0 – восьмиразрядный двунаправленный порт с тремя состояниями. Информация, выдаваемая портом Р0 с помощью команд выдачи, сопровождается строб - импульсом . При записи информации в порт Р0 с помощью команд выдачи, сопровождается строб - импульсом . Кроме операций ввода/вывода информации предусмотрена возможность выполнения логических операций И, ИЛИ и исключающее ИЛИ непосредственно на фиксаторах портов Р0 – Р3. В режиме работы внешней памятью программ порт Р0 служит для выдачи младших разрядов адреса памяти программ и приема кодов команд. В режиме работы с внешним ОЗУ данных порт Р0 служит для выдачи адреса внешнего ОЗУ данных и приема – выдачи данных при обмене с внешним ОЗУ. Любую линию ввода/вывода можно проверить с помощью команд условного перехода. Кроме того, выводы Р3.2 и Р3.3 можно использовать для внешнего аппаратного прерывания, выводы Р3.4 и Р3.5 – как входы счетчиков внешних событий для таймеров/счетчиков, а вывод Р3.1 можно использовать как выход тактового сигнала в синхронном режиме работы последовательного интерфейса микроконтроллеров MCS – 51. Выводы Р3.6 и Р3.7 порта Р3 служат для выдачи сигналов разрешения соответственно записи и чтения байта внешнего ЗУ данных через и порт Р0. При работе с последовательным портом микроконтроллеров MCS – 51 линии Р3.0 и Р3.1 используются, соответственно как вход и выход последовательного канала. Система команд микроконтроллеров MCS – 51 позволяет считывать информацию с фиксатора – защелки порта или непосредственно с выхода, в зависимости от кода инструкции. В инструкциях, в которых порт служит операндом - источником, информация считывается непосредственно с выводов порта, например, ADD A, P1 ; содержимое аккумулятора складывается с информацией на выводах порта Р1 и результат заносится в аккумулятор. Во всех случаях, когда операндом и регистром назначения является порт или бит порта, команды считывают информацию с выходов фиксаторов – защелок, а не с внешних контактов выводов порта. Например: ORL P2, A. Особенности работы портов.
Обращение к портам ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным битом и произвольной комбинацией бит. При этом в тех случаях, когда порт является одновременно операндом и местом назначения результата, устройство управления автоматически реализует специальный режим, который называется "чтение-модификация-запись". Этот режим обращения предполагает ввод сигналов не с внешних выводов порта, а из его регистра-защелки, что позволяет исключить неправильное считывание ранее выведенной информации. Подобный механизм обращения к портам реализован в следующих командах: ANL - логическое И, например: ANL Р1, А; ORL - логическое ИЛИ, например: ORL P2, А; XRL - исключающее ИЛИ, например: XRL РЗ, А; JBC - переход, если в адресуемом бите единица, и последующий сброс бита, например JBC P1.1, LABEL; CPL - инверсия бита, например CPL P3.3; INC - инкремент порта, например: INC P2; DEC - декремент порта, например: DEC P2; DJNZ - декремент порта и переход, если его содержимое не равно нулю, например DJNZ РЗ, LABEL; MOV PX.Y, C - передача бита переноса в бит Y порта X; SET PX.Y - установка бита Y порта X; CLR PX.Y - сброс бита Y порта X. Совсем не очевидно, что последние три команды в приведенном списке являются командами "чтение-модификация-запись". Однако это именно так. По этим командам сначала считывается байт из порта, а затем записывается новый байт в регистр-защелку. Причиной, по которой команды "чтение-модификация-запись" обеспечивают раздельный доступ к регистру-защелке порта и к внешним выводам порта, является необходимость исключить возможность неправильного прочтения уровней сигналов на внешних выводах. Предположим для примера, что линия Y порта Х соединяется с базой мощного транзистора и выходной сигнал на ней предназначен для его управления. Когда в данный бит записана 1, то транзистор включается. Если для проверки состояния исполнительного механизма (в нашем случае - мощного транзистора) прикладной программе требуется прочитать состояние выходного сигнала в том же бите порта, то считывание сигнала с внешнего вывода порта, а не из D-триггера регистра-защелки порта приведет к неправильному результату. Единичный сигнал на базе транзистора имеет относительно низкий уровень и будет интерпретирован в МК как сигнал 0. Команды "чтение-модификация-запись" реализуют считывание из регистра-защелки, а не с внешнего вывода порта, что обеспечивает получение правильного значения 1.
Запись в порт. При выполнении команды, которая изменяет содержимое регистра-защелки порта, новое значение фиксируется в регистре в момент S6P2 последнего цикла команды. Однако опрос содержимого регистра-защелки выходной схемой осуществляется во время фазы Р1 и, следовательно, новое содержимое регистра-защелки появляется на выходных контактах порта только в момент S1P1 следующего машинного цикла. Рис. 1.17. Временные диаграммы операций ввода/вывода
На рис. 1.17 приведены временные диаграммы, иллюстрирующие процесс выполнения операций ввода / вывода информации через порты микроконтроллера.
2.6.4. Нагрузочная способность портов.
Выходные линии портов 1, 2 и 3 могут работать на одну ТТЛ - схему. Линии порта 0 могут быть нагружены на два входа ТТЛ - схем каждая. Линии порта 0 могут работать и на n – МОП - схемы, однако при этом их необходимо подключать на источник электропитания через внешние нагрузочные резисторы за исключением случая, когда шина порта 0 используется в качестве шины адреса/данных внешней памяти. Входные сигналы для микроконтроллеров MCS-51 могут формироваться ТТЛ - схемами или n – МОП - схемами. Допустимо использование в качестве источников сигналов для микроконтроллеров MCS-51 схем с открытым коллектором или открытым стоком. Однако при этом время изменения входного сигнала при переходе из 0 в 1 окажется сильно затянутым. Рис. 1.18. Схема подключения светодиодных индикаторов к параллельному порту. Порты микросхемы служат для управления внешними устройствами, подключенными к микроконтроллеру. Схема подключения простейших внешних устройств приведена на рисунке 1.18. Этот рисунок иллюстрирует особенности подключения индикаторов к параллельным портам микроконтроллеров семейства MCS-51. Присутствие в схеме мощного транзистора позволяет подключать к выводам порта светодиодные индикаторы непосредственно без усилителя мощности. Однако при этом необходимо следить за максимальной допустимой мощностью, рассеиваемой на микросхеме и напряжением, подаваемом на светодиод. Эквивалентная схема, на которой показан путь протекания выходного тока порта, приведена на рисунке 1.19. Как видно из этой схемы именно этот ток используется для зажигания светодиода. Рис. 1.19. Эквивалентная схема подключения светодиодного индикатора к параллельному порту.
Для умощнения выводов порта можно применить транзисторный ключ, показанный на рисунке 1.19. Обратите внимание, что база транзистора подключена непосредственно к выводу порта. Это стало возможным только благодаря использованию в схеме порта генератора тока в верхнем плече выходного каскада. Если выходного тока достаточно для открывания транзисторного ключа, то резистор R2 не используется. Этот резистор подключается для увеличения базового тока транзисторного ключа. На максимальное значение тока через этот резистор накладываются те же ограничения, что и для непосредственного подключения светодиодного индикатора к выводам порта. Микроконтроллеры предназначены для управления внешними устройствами, однако управлять напряжением на выходе параллельного порта микроконтроллера можно только при помощи программы, записанной в память программ. Какие напряжения необходимо подавать на выходы микросхемы зависят от схемы подключения индикатора. В приведённой на рисунке 1.19 схеме, для зажигания светодиода VD1, в шестой вывод порта P0 необходимо записать логический 0. Для зажигания светодиода VD2 необходимо в седьмой разряд порта P2 записать логическую единицу, а для его гашения – логический ноль. Для записи числа в порт (изменения потенциалов на выводах микросхемы) можно воспользоваться командами с байтовой адресацией: MOV (пересылка), например: MOV P2, #56h ;Установить единичный сигнал на выводах 1,2,4 и 6 порта P2 ; ;и нулевой потенциал на выводах 0,3,5 и 7; MOV P1, #01110011b ;Выдать на все восемь выводов порта P1 число ; ; 01110011b MOV P3, A ;Выдать на все восемь выводов содержимое аккумулятора ANL (логическое И), например: ANL P1, #11110011b ;выдать низкий потенциал на выводах P1.2 и P1.3 XRL (исключающее ИЛИ), например: XRL P3, #01000100b ;инвертировать состояние выводов P3.2 и P3.6 ORL (логическое ИЛИ), например: ORL P1, #00001100b ;выдать высокий потенциал на выводах P1.2 и P1.3 Эти команды изменяют потенциал сразу на нескольких выводах порта. Кроме того, для изменения потенциалов на выводах микросхемы, можно воспользоваться командами с битовой адресацией: MOV (пересылка), например: MOV P1.2, C ;выдать содержимое бита переноса через 2-й бит порта P2 CPL (инверсия), например: CPL P1.2 ;проинвертировать второй бит порта P2 SETB (установить бит), например: SETB P2.3 ;выдать высокий потенциал на 3-м выводе порта P2 CLR (сбросить бит), например: CLR P2.3 ;выдать низкий потенциал на 3-м выводе порта P2. При записи в разряд порта (в триггер Т) логического 0 выходной транзистор открывается и на выводе микросхемы появляется низкий потенциал, изменить который извне невозможно. Поэтому при опросе вывода микросхемы входная информация в этом случае всегда будет восприниматься как логический 0 независимо от состояния выходов внешних устройств. Если в указанный разряд записать логическую 1, то выходной транзистор закрывается и на выводе микросхемы появляется высокий потенциал за счет генератора тока. Он может извне изменен на нулевой потенциал. В этом случае, считываемая микроконтроллером информация, будет соответствовать информации на выходе внешнего устройства. Поэтому, перед тем как осуществить ввод информации по какому-либо выводу порта, соответствующий разряд необходимо настроить на ввод - записать в него логическую 1. Блок таймеров/счетчиков Таймеры/счетчики (Т/С) предназначены для подсчета внешних событий, для получения программно управляемых ременных задержек и выполнения времязадающих функций. В состав Т/С входят: 1) два 16-ти разрядных регистра Т/С0 и Т/С1; 2) восьмиразрядный регистр режимов Т/С (TMOD); 3) восьмиразрядный регистр управления (TCON); 4) схема инкремента; 5) схема фиксации , ,T0,T1; 6) схема управления флагами; 7) логика управления Т/С. Два 16-разрядных регистра Т/С0 и Т/С1 выполняют функцию хранения содержимого счета. Каждый из них состоит из пары восьмиразрядных peгиcтpов, соответственно ТН0, ТL0 и ТН1, TL1. Причем peгиcтpы ТН0, ТН1 - старшие, а peгиcтpы ТL0, TL1 - младшие 8 разрядов. Каждый из восьмиразрядных peгиcтpoв имеет свой адрес и может быть использован как РОН, Т/С если не используются (бит ТR0 для Т/С0 и бит TR1 для Т/С1 в peгиcтpe ynpавления ТСОН paвны 0). Код величины начального счета заносится в peгиcтpы Т/С программно. В процессе счета содержимое peгистpов Т/С инкрементируется. Признаком окончания счета, как правило, является переполнение регистра т/с, т. е. переход его содержимого из состояния "все единицы" в состояние "все нули". Все peгиcтpы ТН0, ТН1, ТL0, TL1 достyпны по чтению, и, при необходимости, контроль достижения требуемой вeличины счета может выполняться программно. Регистр режимов Т/С (TMOD) предназначен для приема и хранения кода, определяющего: - один из 4-х возможных режимов работы каждого Т/С; - работу в качестве таймеров или счетчиков; - управление Т/С от внешнего вывода. Обозначение и назначение разрядов peгиcтpa TMOD приведено на рис. 1.20 и в таблице 1.7. Рис. 1.20. Назначение разрядов peгиcтpa TMOD
Таблица 1.7. Регистр режима работы таймера/счетчика
При работе в качестве таймера содержимое реrиcтpa Т/С инкрементируeтcя в каждом машинном цикле, т. е. Т/С является счетчиком машинных циклов микроконтроллера MCS-51. Поскольку машинный цикл состоит из 12 периодов частоты синхронизации микроконтроллеров MCS -51 fXTAL то частота счета в данном случае равна fXTAL/12. При работе Т/С в качестве счетчика внешниx событий содержимое регистра Т/С инкрементируется в ответ на переход из "1" в "0" cигнaлa на счетном входе микроконтроллеров MCS -51. (вывод Т0 для Т/С0 в и вывод Т1 для Т/С1). Счетные входы аппаратно проверяются в фазе S5P2 каждого машинного цикла. Когда проверки показывают высокий уровень на счетном входе в одном машинном цикле и низкий уровень в дpyгoм машинном цикле, регистр Т/С инкрементируется. Новое (инкрементированное) значение заносится в регистр Т/С в фазе S3P1 машинноro цикла, непосредственно следующего за тем, в котором был обнаружен переход из "1" в "0" на счетном входе микроконтроллеров MCS -51. Т. к. для распознавания такого перехода требуется два машинных цикла (24 периода частоты синхронизации микроконтроллеров MCS -51 fXTAL), то максимальная частотa счета Т/С в режиме счетчика равна fXTAL/24. Чтобы уровень сигнала на счетном входе был гарантировано зафиксирован, он должен оставаться неизменным в течение как минимум одного машинного цикла. Регистр управления (ТСОN) предназначен для приема и хранения кода управляющего слова. Обозначение и назначение разрядов регистра ТСОN приведено на рис.1.21 и в табл. 1.8. Рис. 1.21. Назначение разрядов регистра ТСОN
Таблица 1.8. Регистр управления/статуса таймера
Схема инкремента предназначена: --- для увеличения на 1 в каждом машинном цикле содержимого регистров Т/С0, T/C1, для которых установлен режим таймера и счет разрешен; --- для увеличения на 1 содержимого регистров Т/С0, Т/С1, для которых установлен режим счетчика, счет разрешен и на соответствующем входе микроконтроллера MCS-51(Т0 для Т/С0 и Т1 для Т/С1) зафиксирован счетный импульс. Схема фиксации Т0, ,Т1, представляет собой четыре триггера. В каждом машинном цикле в момент S5P2 в них запоминается информация с выводов микроконтроллера MCS -51 , ,Т0 Т1. Схема управления флагами вырабатывает и снимает флаги переполнения и флаги запросов внешних прерываний. Логика управления Т/С синхронизирует работу регистров Т/С 0 и Т/С 1 в соответствии с запрограммированными режимами работы и синхронизирует блока Т/С с работой микроконтроллера.
Структура прерываний
Механизм прерываний микроконтроллеров MCS-51 позволяет автоматически реагировать на внешние и на внутренние события (переполнение таймеров/счетчиков, завершение последовательного обмена). Алгоритм обработки прерывания при обнаружении запроса прерывания показан на рис. 1.33.
Рис. 1.33. Алгоритм обработки прерывания.
В блоке регистров специальных функций есть два регистра, предназначенных для управления режимом прерываний и уровнями приоритета. Форматы этих регистров, имеющих символические имена IE и IP, описаны в табл.1.11 и табл.10 соответственно. Возможность программной установки/сброса любого управляющего бита в этих двух регистрах делает систему прерываний микроконтроллеров MCS-51 исключительно гибкой.
Таблица 1.11. Регистр масок прерывания (РМП)
Таблица 1.12. Регистр приоритетов прерываний
На рис. 1.34 приведены все возможные источники прерывания. Рис. 1.34. Возможные источники прерывания.
Примечания: IT0, IT1 – биты управления регистра TCON TF0, TF1, IE0, IE1 – флаги – признаки в регистре TCON TI, RI - флаги – признаки в регистре SCON
Каждое из внешних прерываний , может быть активизировано по уровню 0 или по фронту (переход из 1 в 0) сигналов на выводах микроконтроллеров MCS–51 Р3.2, Р3.3, что определяется состоянием битов IT0 и IT1 регистра TCON. При поступлении запроса внешнего прерывания , устанавливается флаг IEx регистра TCON. Установка флагов IEx в регистре TCON вызывает соответствующее прерывание. Очистка флага IEx производится следующим образом: при прерывании по фронту IEx сбрасывается аппаратно при обращении к соответствующей подпрограмме обработке прерывания; при прерывании по уровню флаг очищается при снятии запроса внешнего прерывания, то есть в IEx отслеживается состояние вывода . Чтобы внешнее прерывание по уровню было распознано, необходимо, чтобы низкий уровень на выводе удерживался в течение не менее 12 периодов сигнала тактовой частоты микроконтроллера MCS-51. Это объясняется тем, что проверка выводов MCS-51 выполняется внутренними аппаратными средствами МК один раз в каждом машинном цикле. В случае внешнего прерывания по фронту флаг IEx будет установлен, если две последовательные проверки входа покажут в одном машинном цикле 1 , в следующем 0. Поэтому, если внешнее прерывание активизируется по переходу из состояния высокого уровня в состояние низкого уровня, то минимум одному машинному циклу низкого уровня должен предшествовать минимум один машинный цикл высокого уровня на выводе . Если внешнее прерывание активизируется по уровню, запрос должен удерживаться до начала обслуживающей подпрограммы и сниматься до завершения этой подпрограммы для предотвращения повторного обслуживания. Прерывания от таймеров/счетчиков вызываются установкой флагов TF0 и TF1 регистра TCON, которые устанавливаются при переполнении соответствующих регистров таймеров/счетчиков (за исключением режима 3). Очистка флагов TF0 и TF1 производится при переходе к подпрограмме обслуживания прерывания. Прерывание от последовательного порта вызывается установкой флага прерывания приемника RI или флага прерывания передатчика TI в регистре SCON. В отличие от всех остальных флагов, TI и RI сбрасываются только программным путем обычно в пределах подпрограммы обработки прерывания, где определяется, какому из флагов TI или RI соответствует прерывание. Каждый из перечисленных источников прерываний может быть индивидуально разрешен или запрещен установкой или сбросом соответствующего бита в регистре разрешения прерывания IE. Регистр IE содержит также бит ЕА, сброс которого в 0 запрещает сразу же все прерывания. Необходимым условием прерывания является его разрешение в регистре IE. Все биты, которые вызывают прерывания(IE0,IE1,TF0,TF1,RI,TI), могут быть программно установлены или сброшены с тем же результатом, что и в случае их аппаратной установки или сброса. В случае, когда прерывание по (х=0,1) вызывается уровнем сигнала на соответствующем входе МК, флаг IEx (х=0,1) при переходе к подпрограмме обработки прерывания автоматически сбрасывается, а затем, если соответствующий вывод МК Р3.2 или Р3.3 все еще находится в состоянии логического 0, вновь устанавливается. Поэтому в случае, когда прерывание по входам (х=0,1) вызывается уровнем, программная установка в 1 флагов IE0, IE1 вызовет прерывание, после чего соответствующий флаг IEx (х=0,1) будет автоматически сброшен при переходе к подпрограмме обработки прерывания. Флаги IE0, IE1, TF0, TF1, RI, TI устанавливаются независимо от того разрешено или нет прерывание в регистре IE. Структура приоритетов прерываний является двухступенчатой. Каждому из источников прерывания может быть индивидуально присвоен один из двух уровней приоритета: высокий или низкий. Выполняется это установкой (высокий уровень приоритета) или сбросом (низкий уровень приоритета) соответствующего бита в регистре приоритетов прерываний IP. Программа обработки прерывания с низким уровнем приоритета может быть прервана запросом прерывания с высоким уровнем приоритета, но не может быть прервана другим запросом прерывания с низким уровнем приоритета. Программа обработки прерывания с высоким уровнем приоритета не может прервана никаким другим запросом прерывания ни от одного из источников. Если два запроса с разными уровнями приоритета приняты одновременно, сначала будет обслужен запрос с высоким уровнем приоритета. Если одновременно приняты запросы с одинаковым уровнем приоритета, обработка их будет производиться в порядке, задаваемом последовательностью внутреннего опроса флагов прерываний. Таким образом, в пределах одного приоритетного уровня существует еще одна структура приоритетов: Источник Приоритет внутри уровня 1) IE0 (высший) 2) TF0 3) IE1 4) TF1 5) RI + TI (низший) Структура «Приоритет внутри уровня» работает только в тех случаях, когда определяется последовательность обслуживания запросов на прерывания, которые приняты одновременно и при этом имеют одинаковый уровень приоритета.
Рис. 1.35. Система прерываний микроконтроллеров MCS-51.
Общая схема системы прерываний микроконтроллеров MCS-51 приведена на рис. 1.35. Обработка прерываний. Уровни на выводах (х=0,1) инвертируются и защелкиваются во флаги прерывания IE0, IE1 в фазе S5P2 каждого машинного цикла. В фазе S5P2 устанавливаются флаги прерываний последовательного порта RI и TI. Флаги TF0, TF1 таймеров/счетчиков устанавливаются в фазе S5P2 машинного цикла, в котором происходит пе- реполнение Т/С. Опрос флагов выполняется внутренними средствами MCS-51 в следующем после установки флагов машинном цикле. И только после выполнения последнего цикла текущей команды производится аппаратный вызов соответствующей подпрограммы обслуживания, эквивалентной команде LCALL. Обращение к подпрограмме обслуживания блокируется при выполнении хотя бы одного из следующих условий: --- уже производится обработка прерывания с таким же или высшим приоритетом; --- текущий машинный цикл (цикл опроса флагов) не является последним циклом выполняемой команды; --- выполняемая команда текущей программы является командой RETI или любой командой обращения к регистрам IE, IP. В последнем условии после окончании одной из вышеуказанных команд обязательно выполнится еще одна команда текущей программы перед вызовом подпрограмммы обслуживания прерывания. Флаг прерывания, установленный во время действия блокировки прерывания по одному из трех указанных выше условий и сброшенный до их снятия, не вызовет обслуживания соответствующего запроса прерывания. Если запрос прерывания с более высоким уровнем приоритета зафиксируется во время аппаратного вызова подпрограммы обслуживания, а именно в фазе S5P2 1-го цикла аппаратной команды LCALL, то по окончанию процедуры текущего вызова сразу же начнет выполняться процедура аппаратного вызова по поступившему запросу. Аппаратно – реализуемая команда LCALL загружает содержимое счетчика команд PC в стек (при этом PSW в стек не записывается), после чего записывает в PC адрес соответствующей подпрограммы обработки прерывания: Источник прерывания Адрес подпрограммы (вектор прерывания) 1) IE0 0003 Н 2) TF0 000В Н 3) IE1 0013 Н 4) TF1 001В Н 5) RI + TI 0023 Н При выполнении аппаратно – реализуемой команды LCALL в ячейку стека с младшим адресом загружаются разряды 0 – 7 счетчика команд, а в следующую ячейку стека 8 - 15 счетчика команд. По адресу вектора должна быть расположена команда безусловной передачи управления (JMP) к начальному адресу подпрограммы обслуживания прерывания. Подпрограмма обслуживания в случае необходимости должна начинаться командами записи в стек (PUSH) состояния программы (PSW), аккумулятора, расширителя, указателя данных и т.д. и заканчиваться командами восстановления из стека (POP). Подпрограмма обслуживания прерывания продолжается до выполнения команды RETI. Команда RETI восстанавливает состояние логики прерывания и загружает в счетчик команд PC 2 байта адреса возврата из двух верхних ячеек стека. Восстановление состояния логики прерывания заключается в следующем: при переходе по вектору на подпрограмму обработки прерывания автоматически до выполнения команды RETI независимо от состояния бит регистра IE запрещаются все прерывания с уровнем приоритета, равным уровню приоритета обслуживаемого прерывания, т. е. вложенные прерывания с равными уровнями приоритета невозможны. Команда RETI снимает этот запрет. При использовании команды RET восстанавливается только состояние счетчика команд, т. е. происходит возврат в прерванную программу. Состояние логики прерывания команда RET не меняет, т. е. логика управления обслуживанием прерываний по–прежнему считает, что продолжает обслуживаться прерывание, подпрограмма обработки которого была закончена командой RET. Режимы работы MCS -51 Микроконтроллеры семейства MCS-51 могут работать в следующих режимах: --- только с внешней памятью программ; --- только с внутренней памятью программ; --- с внутренней и внешней памятью программ. --- в режиме программирования внутренней памяти программ; ---в режиме проверки внутренней памяти программ. Режим работы устанавливается комбинацией входных и выходных сигналов. Инициализация (сброс) микросхем осуществляется сигналом RST (активный высокий уровень напряжения) при условии подачи на микросхему внешнего сигнала синхронизации или при подключенном кварце. Вход RST является входом внутреннего триггера Шмитта. Для того, чтобы сброс микросхемы гарантированно произошел, длительность сигнала высокого уровня на входе RST должна быть не менее двух машинных циклов MCS-51 (24 периода частоты синхронизации fXTAL). При поступлении внешнего сигнала сброса на вход RST MCS-51 формирует сигнал сброса. Внешний сигнал сброса является асинхронным по отношению к внутренней синхронизации MCS-51. Состояние вывода RST проверяется в фазе S5P2 каждого машинного цикла. После подачи сигнала высокого уровня на вход RST MCS-51 продолжает работу в течение времени от 19 до 31 периода частоты fXTAL (формируются ALE, и т. п.), после чего ALE и устанавливаются в "1" и находятся в этом состоянии все время, пока на входе RST присутствует активный сигнал сброса. После подачи на вход RST уровня "0" проходит от 1 до 2 машинных циклов до начала формирования сигналов ALE и . При подаче сигнала сброса на вход RST внутренний алгоритм сброса MCS-51 производит следующие действия: - устанавливает счетчик команд РС и все регистры специальных функций, кроме защелок портов Р0-Р3, указателя стека SP и регистра SBUF, в ноль; - указатель стека принимает значение равное 07Н; Сигнал сброса на входе RST не влияет на внутреннее ОЗУ данных. После включения питания содержимое ячеек внутреннего ОЗУ данныx принимает случайные значения. Для n - МОП MCS-51 автоматический сброс при включении питания UCC может быть реализован подключением входа RST к Ucc через конденсатор емкостью 10 мкФ и к шине 0В через резистор 8,2 кОм. Для КМОП MCS-51 этот резистор не требуется, однако его наличие не принесет вреда. КМОП МК-51 содержат внутренний резистор, включенный между RST и выводом 0В. Если использовать только внутренний резистор, емкость конденсатора может быть уменьшена до 1 мкФ. Чтобы при включении питания сброс был гарантированно выполнен, вывод RST должен удерживаться в состоянии высокого уровня в течение времени, достаточного для запуска тактового генератора MCS-51 плюс еще минимум два машинных цикла. Время запуска тактового генератора MCS-51 зависит от его частоты работы и для 10 МГц кварцевого резонатора составляет в среднем 1 мс, а для 1 Мгц кварцевого резонатора - 10 мс. Состояния регистров после сброса приведены в таблице 1.13. Цепь сброса при быстром уменьшении напряжения питания вызывает появление на входе RST отрицательного напряжения, которое не является опасным для микросхем вследствие наличия у MCS-51 внутренней схемы защиты. Таблица 1.13. Состояния регистров после сброса
Архитектура микроконтроллеров семейства MCS -51
Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Все функции компьютера реализуются с помощью единственной микросхемы. В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров достаточно сложных. Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд. Это позволяет использовать для разработанного устройства микросхемы разных фирм - производителей (таких как Intel, Dallas, Atmel, Philips и т.д.) без переделки принципиальной схемы устройства и программы.
Рис. 1.2.Структурная схема микроконтроллеров семейства MCS-51
Структурная схема контроллера представлена на рис. 1.2 и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. Рассмотрим подробнее назначение каждого блока. По такой схеме построены практически все представители семейства MCS-51. Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов). Система команд всех контроллеров семейства MCS-51 содержит 111 базовых команд с форматом 1, 2 или 3 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одной микросхемы на другую. Рассмотрим подробнее основные блоки контроллера. Блок управления и синхронизации (Timing and Control) предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков MCS-51 во всех допустимых режимах ее работы. В состав блока управления входят: ---устройство формирования временных интервалов, ---логика ввода-вывода, ---регистр команд, ---регистр управления потреблением электроэнергии, дешифратор команд, логика управления контроллером. Арифметико-логическое устройство (АЛУ) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из: ---регистров аккумулятора, регистров временного хранения TMP1 и TMP2, ---ПЗУ констант, ---сумматора, ---дополнительного регистра (регистра В), ---аккумулятора (ACC), ---регистра состояния программ (PSW). Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны. ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант. Параллельный восьмиразрядный сумматор представляет собой схему комбинационного типа с последовательным переносом, предназначенную для выполнения арифметических операций сложения, вычитания и логических операций сложения, умножения, неравнозначности и тождественности. Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр. Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы. Слово состояния программы (PSW) включает в себя четыре флага: C - перенос, AC - вспомогательный перенос, O - переполнение и P – паритет (таблица 1. 2). Флаг паритета P напрямую зависит от текущего значения аккумулятора. Если число единичных бит аккумулятора нечетное, то флаг P устанавливается, а если четное – сбрасывается. Попытки изменить флаг Р, присваивая ему новое значение, будут безуспешными, если содержимое аккумулятора при этом останется неизменным. Флаг АС устанавливается в случае, если при выполнении операции сложения/вычитания между тетрадами байта возник перенос/заем. Флаг C устанавливается, если в старшем бите результата возникает перенос или заем. При выполнении операций умножения и деления флаг C сбрасывается. Флаг OV устанавливается, если результат операции сложения/вычитания не укладывается в семи битах и старший (восьмой) бит результата не может интерпретироваться как знаковый. При выполнении операции деления флаг OV сбрасывается, а в случае деления на нуль устанавливается. При умножении флаг OV устанавливается, если результат больше 255. Таблица 1.2. Формат слова состояния программы (PSW)
Наиболее "активным" флагом PSW является флаг переноса, которые принимает участие и модифицируется в процессе выполнения множеств операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (C) выполняет функции "булевого аккумулятора" в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делает возможным использование арифметики в дополнительных кодах. АЛУ не управляет флагами селекции банка регистров (RS0, RS1), и их значение полностью определяется прикладной программой и используется для выбора одного из четырех регистровых банков. В табл. 1.3 перечисляются команды, при выполнении которых модифицируются флаги результата. В таблице отсутствует флаг паритета, так как его значение изменяется всеми командами, которые изменяют содержимое аккумулятора. Кроме команд, приведенных в таблице, флаги модифицируются командами, в которых местом назначения результата определены PSW или его отдельные биты, а также командами операций над битами. 8-битное АЛУ может выполнять арифметические операции сложения, вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а также операции циклического сдвига, сброса, инвертирования и т.п. В АЛУ имеются также схема десятичной коррекции и схема формирования признаков.
Таблица 1.3. Команды, модифицирующие флаги результата
Простейшая операция сложения используется в АЛУ для инкрементирования содержимого регистров, продвижения регистра-указателя данных и автоматического вычисления следующего адреса РПП. Простейшая операция вычитания используется в АЛУ для декрементирования регистров и сравнения переменных. Простейшие операции автоматически образуют "тандемы" для выполнения в АЛУ таких операций, как, например, инкрементирование 16-битных регистровых пар. В АЛУ реализуется механизм каскадного выполнения простейших операций для реализации сложных команд. Так, например, при выполнении одной из команд условной передачи правления по результату сравнения в АЛУ трижды инкрементируется PC, дважды производится чтение из РПД, выполняется арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и принимается решение о том, делать или не делать переход по программе. Все перечисленные операции выполняются в АЛУ всего лишь за 2 мкс. Важной особенностью АЛУ является его способность оперировать не только байтами, но и битами. Отдельные программно-доступные биты могут быть установлены, сброшены, инвертированы, переданы, проверены и использованы в логических операциях. Эта способность АЛУ, оперировать битами, столь важна, что во многих описаниях семейства MCS-51 говорится о наличии в нем "булевского процессора". Для управления объектами часто применяются алгоритмы, содержащие операции над входными и выходными булевскими переменными (истина/ложь), реализация которых средствами обычных микропроцессоров сопряжена с определенными трудностями. Таким образом, АЛУ может оперировать четырьмя типами информационных объектов: булевскими (1 бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В АЛУ выполняется 51 различная операция пересылки или преобразования этих данных. Так как используется 11 режимов адресации (7 для данных и 4 для адресов), то путем комбинирования "операция/ режим адресации" базовое число команд 111 расширяется до 255 из 256 возможных при однобайтном коде операции. Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода - вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят: ---буфер ПИП, ---логика управления, ---регистр управления, ---буфер передатчика, буфер приемника, ---буфер приемника, ---приемопередатчик последовательного порта, ---регистр приоритетов прерываний, регистр разрешения прерываний ---логика обработки флагов прерываний и схема выработки вектора. Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1). Буфер РС осуществляет связь между 16-ти разрядной шиной РС и восьмиразрядной магистралью данных, обеспечивая запись, хранение и коммутацию информации. В регистре РС хранится текущее значение 16-ти разрядного адреса памяти программ. Схема инкремента увеличивает текущий 16-ти разрядный адрес памяти программ на единицу. Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы. Регистр адреса памяти предназначен для записи и хранения исполнительного16-ти разрядного адреса памяти программ или 8/16- ти разрядного адреса внешней памяти данных, а также для передачи данных на порт Р0 при выполнении команд MUV @Ri,A и MUVX@DPTR,A, обеспечивающих запись данных через порт Р0 во внешние устройства. Порты P0, P1, P2, P3 являются двунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией микроконтроллера MCS-51 с внешними устройствами, образуя 32 линии ввода/вывода. Память программ предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные, стираемые ультрафиолетовым излучением или FLASH ПЗУ. Регистр указателя данных (DPTR) предназначен для хранения 16 - разрядного адреса внешней памяти данных или памяти программ. Указатель стека (SP) представляет собой восьмиразрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой можно временно сохранить любую ячейку памяти. Таймеры/счетчики (Т/С) предназначены для подсчета внешних событий, для получения программно управляемых временных задержек и выполнения времязадающих функций микроконтроллера MCS-51. В состав Т/С входят: 1) два 16-ти разрядных регистра Т/С0 и Т/С1; 2) восьмиразрядный регистр режимов Т/С (TMOD); 3) восьмиразрядный регистр управления (TCON); 4) схема инкремента; 5) схема фиксации INT0,INT1,T0,T1; 6) схема управления флагами; 7) логика управления Т/С.
|
Последнее изменение этой страницы: 2019-05-08; Просмотров: 678; Нарушение авторского права страницы