- Организация памяти
- Память программ
- Память данных
- Адреса битов
- Структура команд.
- Общие сведения о системе команд.
- Команды пересылки данных
- Команды логических операций.
- Двуместные операции
- Одноместные операции
- Команды передачи управления
- Команды безусловного перехода
- Команды условного перехода
- Команды вызова подпрограмм и возврата из программ
- Команды битовых операций.
Организация памяти
Микроконтроллеры семейства МСS–51 построены по гарвардской архитектуре, в которой память программ и память данных разделены, имеют собственные адресные пространства и способы доступа к ним.
Память программ
Максимальный объем памяти составляет 64К байт, из них 4К, 8К, 16К или 32К байт памяти (табл.7.3.1) располагаются на кристалле, остальной объем — вне кристалла.
При напряжении на выводе ЕА = VCC используется как внутренняя, так и внешняя память, при ЕА = VCC = 0 — только внешняя память.
В табл.7.3.1 приведены адреса обращения к памяти программ для указанных случаев.
Нижняя область памяти программ отводится для начала работы микроконтроллера (стартовый адрес 0000h после сброса) и под обработку прерываний (адреса прерываний расположены с интервалом 8 байт: 0003h, 000Bh, 0013h и т.д.).
Память программ доступна только для чтения, причем при обращении:
? к внешней памяти программ вырабатывается сигнал ¯PSEN и всегда формируется 16–разрядный адрес.
Младший байт адреса передается через порт P0 в первой половине машинного цикла и фиксируется по срезу строба ALE в регистре.
Во второй половине цикла порт P0 используется для ввода в МК байта данных из внешней памяти.
Старший байт адреса передается через порт P2 в течение всего времени обращения к памяти (рис.7.1.11);
? к внутренней памяти сигнал чтения не формируется и используются циклы обмена по внутренней шине микроконтроллера.
Память данных
Внутреннюю память данных можно условно разделить на три блока (табл.7.3.2).
Внутренняя память всегда адресуется байтом, который обеспечивает адресацию только к 256 ячейкам памяти.
Поэтому, как видно из табл.7.3.2, для адресации к верхним 8–битным ячейкам внутреннего ОЗУ и регистрам специальных функций SFR, занимающим одно и то же адресное пространство, в командах используются разные способы адресации: косвенный и прямой.
Особенности организации нижней области внутреннего ОЗУ отражены в табл.7.3.3.
Младшие 32 байта внутреннего ОЗУ с адресами 00h.
1Fh сгруппированы в четыре банка по восемь регистров (R0.R7).
Следующие 16 байтов ОЗУ с адресами 20h.
2Fh представляют собой область памяти объемом 8×16= 128 бит, которая допускает обращение к каждому отдельному биту.
Для выбора адреса регистра банка используется его имя R0.
R7, для выбора банка — биты RS0, RS1 регистра слова состояния PSW.
Адреса битов
Адреса битов приведены в табл.7.3.3.
Адресация осуществляется прямым способом.
Список всех регистров специальных функций SFR с их адресами дан в табл.7.2.2.
Для наглядности в табл.7.3.
4 приведена карта адресов регистров SFR рассматриваемых микросхем семейства MCS–51.
Адрес SFR определяется совокупностью цифр столбца и строки в шестнадцатеричной системе счисления.
Например, регистр CMOD имеет адрес D9h.
Для регистров SFR, адреса которых оканчиваются на 0h или 8h (они выделены полужирным шрифтом), помимо байтовой допускается побитовая адресация.
При этом адрес бита, занимающего в регистре N–й разряд, определяется как XXh + 0Nh, где XXh — адрес регистра SFR, N = 0.7.
Битовые адреса в этой области имеют значения от 80Н до FFH.
Например, адреса битов аккумулятора АСС лежат в пределах E0h-E7h.
Внешняя память данных (объемом до 64 Кбайт) создается дополнительными микросхемами памяти, подключаемыми к МК.
Для работы с внешней памятью данных используются специальные команды, поэтому адресные пространства внешней и внутренней памяти не пересекаются и, следовательно, оба вида памяти данных можно задействовать одновременно.
Для обращения к ячейкам внешней памяти данных используются (рис.7.1.8):
? команды с косвенной адресацией;
? сигналы чтения ¯RD и записи ¯WR;
? порт P0 для передачи младшего байта адреса и приема/передачи байта данных;
? порт P2 для передачи старшего байта адреса.
Способы адресации.
В системе команд используется:
? прямая, косвенная, регистровая, косвенно–регистровая, непосредственная и индексная адресация (косвенная адресация по сумме базового и индексного регистров) операндов–источников;
? прямая, регистровая и косвенно–регистровая адресация операндов назначения.
Сочетание указанных способов (адресации) обеспечивает 21 режим адресации.
В этой и в приведенных ниже таблицах системы команд использованы следующие обозначения:
Прямая адресация.
При этом способе адресации место расположения байта или бита данных определяется 8–битным адресом второго (и третьего) байта команды.
Прямая адресация используется только для обращения к внутренней памяти данных (нижним 128 байтам ОЗУ) и регистрам специальных функций.
Регистровая адресация.
Этот способ адресации обеспечивает доступ к данным, которые хранятся в одном из восьми регистров R0.
R7 текущего банка рабочих регистров.
Его также можно использовать для обращения к регистрам A, В, АВ (сдвоенному регистру), регистру–указателю DPTR и флагу переноса С.
Адрес указанных регистров заложен в код операции, благодаря чему сокращается число байт команды.
Косвенно–регистровая адресация.
В этом случае адрес данных хранится в регистре–указателе, место расположения которого определено кодом операции.
Данный способ адресации используется для обращения к внешнему ОЗУ и верхней половине внутреннего ОЗУ.
Регистрами–указателями 8–битных адресов могут служить регистры R0, R1 выбранного банка рабочих регистров или указатель стека SР, для 16–битной адресации используется только регистр указателя данных DPTR.
Непосредственная адресация.
При этом способе адресации данные непосредственно указаны в команде и находятся во втором (или во втором и третьем) байтах команды, т.е.
не требуется адресация к памяти.
Например, по команде МОV A,#50 в аккумулятор A загружается число 50.
Индексная адресация.
Этот способ представляет собой косвенно–регистровую адресацию, при котором адрес байта данных определяется как сумма содержимого базового (DPTR или РС) и индексного (А) регистров.
Способ используется только для доступа к программной памяти и только в режиме чтения; он упрощает просмотр таблиц, зашитых в памяти программ.
Структура команд.
Длина команды составляет один (49 команд), два (45 команд) или три (17 команд) байта.
Первый байт команды всегда содержит код операции (КО), A второй и третий байты — адреса операндов или непосредственные значения данных.
В качестве операндов могут быть использованы отдельные биты, тетрады, байты и двухбайтные слова.
Можно выделить 13 типов команд, которые приведены в табл.7.3.5:
? A, PC, SP, DPTR, Rn (n = 0, , 7) — аккумулятор, счетчик команд, указатель стека, регистр указателя данных и регистр текущего банка;
? Rm (m = 0, 1) — регистр текущего банка, используемый при косвенной адресации;
? direct — 8–разрядный адрес прямо адресуемого операнда;
? bit — адрес прямо адресуемого бита;
? rel — относительный адрес перехода;
? addr11, addr16 — 11– и 16–разрядный абсолютный адрес перехода;
? #data8, #data16 — непосредственные данные (операнды) 8– и 16–разрядной длины;
? A10, A9,, A0 — отдельные разряды 11–разрядного адреса;
? (.) — содержимое ячейки памяти по адресу, указанному в скобках;
? СБ, МБ — старший и младший байты 16–разрядного операнда.
Общие сведения о системе команд.
Система команд обеспечивает большие возможности обработки данных в виде бит, тетрад, байтов, двухбайтных слов, A также управления в режиме реального времени.
Для описания команд используется язык макроассемблера ASM51. Синтаксис большинства команд состоит из мнемонического обозначения (аббревиатуры) выполняемой операции, за которым следуют операнды.
С помощью операндов указываются различные способы адресации и типы данных.
В частности аббревиатура MOV имеет 18 различных команд, предназначенных для обработки трех типов данных (битов, байтов, адресов) в различных адресных пространствах.
Набор команд имеет 42 мнемонических обозначения 111 типов команд для конкретизации 33 функций МК.
Из 111 команд 64 выполняются за один машинный цикл, 45 — за два цикла и лишь две команды (MUL — умножение и DIV — деление) выполняются за 4 цикла. При частоте тактового генератора 12 МГц длительность машинного цикла (12 тактов) составляет 1 мкс. По функциональному признаку команды можно разбить на пять групп. Ниже приведено описание команд каждой группы, представленных в виде таблиц. Для компактности таблиц выделим группу команд (табл.7.3.6), выполнение которых влияет (помечены знаком +) на состояние флагов регистра слова состояния PSW.
Команды пересылки данных
Команды пересылки можно разбить на отдельные подгруппы.
Команды пересылки и обмена данными между ячейками внутренней памяти (табл.7.3.7).
Команды 1–16, имеющие мнемонику MOV dest, src, предназначены для пересылки байта или двух байтов (команда 16) данных из источника src в приемник dest, при этом:
? для указания источника (src) используется четыре способа адресации: регистровый (команды 2–4, 6, 8), прямой (команды 1, 7, 9, 11), косвенный (команды 5, 10) и непосредственный (команды 12–16);
? для указания приемника (dest) используется три способа: регистровый (команды 1, 3…5, 9, 12, 14, 16), прямой (команды 2, 7, 8, 10, 13), косвенный (команды 6, 11, 15).
Команды 17–20 обеспечивают обмен информацией между двумя ячейками внутренней памяти данных (или двустороннюю пересылку).
При выполнении команд ХСН происходит обмен байтами, A команды XCHD — младшими тетрадами байтовых операндов.
Одной из ячеек всегда является аккумулятор A. В качестве другой ячейки при обмене байтами используется один из регистров Rn текущего банка, A также прямо или косвенно адресуемая ячейка внутренней памяти; при обмене тетрадами — только косвенно адресуемая ячейка внутренней памяти.
Так как во всех МК стек размещается во внутреннем ОЗУ, в эту же подгруппу включены команды (20, 21) обращения к стеку PUSH src, POP dest.
Эти команды используют только прямой способ адресации, записывая байт в стек или восстанавливая его из стека.
Следует иметь в виду, что в тех МК, у которых в ОЗУ отсутствуют верхние 128 байт, увеличение стека за пределы 128 байт ведет к потере данных.
Команды пересылки данных между внутренней и внешней памятью данных (табл.7.3.8).
Эти команды используют только косвенную адресацию, при этом однобайтный адрес может располагаться в Р0 или R1 текущего банка регистров, A двухбайтный адрес — в регистре–указателе данных DРТR.
При любом доступе к внешней памяти роль приемника или источника операндов во внутренней памяти играет аккумулятор А.
Команды пересылки данных из памяти программ (табл.7.3.9).
Эти команды предназначены для чтения таблиц из программной памяти.
Команда MOVC A,@А + DPTR используется для обращения к таблице с числом входов от 0 до 255.
Номер требуемого входа в таблицу загружается в аккумулятор, A регистр DPTR устанавливается на точку начала таблицы. Отличительной особенностью другой команды является то, что в качестве указателя базы используется программный счетчик PC и обращение к таблице производится из подпрограммы. Вначале номер требуемой точки входа загружается в аккумулятор, затем вызывается подпрограмма с командой MOVC A,@А + PC. Таблица может иметь 255 входов с номерами от 1 до 255, так как 0 используется для адреса команды RET выхода из подпрограммы.
Команды арифметической обработки данных. Все арифметические команды выполняются над беззнаковыми целыми числами. Операции над двумя операндами (табл.7.3.10). В операциях сложения ADD, сложения с учетом переноса ADDC и вычитания с учетом заема SUBB:
? источником одного 8–битного операнда и приемником результата служит аккумулятор;
? источником другого операнда — либо один из рабочих регистров Rn (n = 0–7) текущего банки, либо прямо direct или косвенно @Rm (m = 0, 1) адресуемая ячейка памяти ОЗУ, либо непосредственные данные #data.
Операции умножения MUL и деления DIV выполняются над содержимым регистров A и В. При умножении старшие 8 разрядов результата записываются в регистр В, младшие 8 разрядов — в регистр A.
Если произведение больше 255, устанавливается флаг переполнения OV; флаг переноса С всегда сбрасывается. Команда DIV выполняет деление 8–битного операнда аккумулятора A на 8–битный операнд регистра В.
При делении частное (старшие разряды) записывается в регистр в A, остаток (младшие разряды) — в B. Флаги переноса C и переполнения OV сбрасываются.
При попытке деления на 0 устанавливается флаг переполнения OV. Операция деления чаще используется для сдвигов и преобразования оснований чисел.
При делении двоичного числа на 2N происходит его сдвиг на N бит влево.
Лишние биты переносятся в регистр В.
Операции над однобайтными операндами (табл.7.3.11).
Команда DA используется для выполнения двоично–десятичных операций. Команды INC, DEC позволяют соответственно увеличить или уменьшить на единицу содержимое ячейки памяти.
Они применимы к содержимому аккумулятора A, одного из рабочих регистров Rn или ячейки памяти, адресуемой как прямым, так и косвенным способом.
Операция увеличения на единицу применима также к содержимому 16–разрядного регистра–указателя DPTR.
Команды логических операций.
Двуместные операции
(табл.7.3.12).
Команды AML, ORL, XRL позволяют выполнить три двуместные логические операции над 8–битными операндами: ANL — логическое умножение (AND), ORL — логическое сложение (OR), XRL — исключающее ИЛИ (XOR).
Операции выполняются над отдельными битами операндов. Источником одного из операндов и одновременно приемником результата служит либо аккумулятор (А), либо прямо адресуемая ячейка памяти (direct).
Для источника другого операнда используется регистровый, прямой, косвенный или непосредственный способ адресации.
Одноместные операции
(табл.7.3.13).
В состав группы входит также ряд одноместных операций над содержимым аккумулятора A: операции очистки (CLR), логического дополнения или инверсии (CPL), циклического и расширенного циклического сдвигов на 1 бит вправо (RL, RLC) и влево (RR, RRC), обмена тетрад или циклического сдвига байта на 4 разряда (SWAP), A также пустая операция (NOP), в результате которой состояние всех регистров МК (за исключением программного счетчика) остается неизменным.
Команды передачи управления
Команды безусловного перехода
(табл.7.3.14).
Команды 1–3 отличаются лишь форматом адреса назначения.
Команда LJMP (L — Long) выполняет «длинный» безусловный переход по указанному адресу addr16, загружая счетчик PC вторым и третьим байтами команды.
Команда обеспечивает переход в любую точку 64К байтного адресного пространства.
Команда AJMP (А — Absolute) обеспечивает «абсолютный» переход по адресу внутри 2К байтной страницы, начальный адрес которой задается пятью старшими разрядами программного счетчика PC (вначале содержимое PC увеличивается на 2).
Команда SJMP (S — Short) позволяет осуществить «короткий» безусловный переход по адресу, который вычисляется сложением смещения rel со знаком во втором байте команды с содержимым счетчика PC, предварительно увеличенного на 2.
Адрес перехода находится в пределах –128+127 байт относительно адреса команды.
Для перехода в любую другую точку 64–килобайтного адресного пространства может быть использована также команда 4 с косвенной @A+DPTR адресацией.
В этом случае содержимое A интерпретируется как целое без знака.
Пустая операция (NOP), в результате которой состояние всех регистров микропроцессора (за исключением программного счетчика) остается неизменным.
Команды условного перехода
(табл.7.3.15).
С помощью команд JZ и JNZ осуществляется переход, если содержимое аккумулятора соответственно равно или не равно нулю.
Адрес перехода вычисляется путем сложения относительного знакового смещения rel с содержимым счетчика команд PC после прибавления к нему числа 2 (длины команды в байтах).
Содержимое аккумулятора остается неизменным.
Команды на флаги не влияют.
Команды CJNE (3–6) служат для реализации условного перехода по результату сравнения двух 8–разрядных операндов, расположение которых указано в командах.
Если их значения не равны, осуществляется переход.
Адрес перехода вычисляется сложением смещения rel с содержимым счетчика PC, предварительно увеличенным на 3.
В противном случае выполняется следующая команда.
В графе Алгоритм показано влияние значений сравниваемых 8–разрядных операндов на флаг переноса С.
Команды DJNZ (7, предназначены для организации программных циклов.
Регистр Rn или прямо (direct) адресуемая ячейка представляют собой счетчик повторений цикла, A смещение rel (во втором и третьем байтах команд) — относительный адрес перехода к началу цикла.
При выполнении команд содержимое счетчика уменьшается на единицу и проверяется на нуль.
Если содержимое счетчика не равно нулю, осуществляется переход на начало цикла.
В противном случае выполняется следующая команда.
Адрес перехода вычисляется сложением смещения с содержимым счетчика, предварительно увеличенным на длину команды (на 2 или 3).
На флаги команды не влияют.
Команды вызова подпрограмм и возврата из программ
(табл.7.3.16).
Команды LCALL «длинный вызов» и ACALL «абсолютный вызов» осуществляют безусловный вызов подпрограммы, размещенной по указанному адресу.
Отличие этих команд от рассмотренных выше команд безусловного перехода состоит в том, что они сохраняют в стеке адрес возврата (содержимое счетчика) в основную программу.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, A команда RETI помимо этого разрешает прерывания обслуживающего уровня.
В командах передачи управления широко используется относительная адресация, которая поддерживает перемещаемые программные модули.
В качестве относительного адреса выступает 8–разрядное смещение rel со знаком, обеспечивающее ветвление от текущего положения счетчика PC в обе стороны на ±127 байт.
Для перехода в любую другую точку 64К–байтного адресного пространства может быть использован либо прямой адрес addr16, либо косвенный @A+DPTR адрес.
В последнем случае содержимое A интерпретируется как целое без знака.
Вариант короткой прямой адресации addr11 внутри 2К–байтной текущей страницы введен для совместимости с архитектурой МК48.
Все эти типы адресации могут быть применены только к операции перехода, A для операции вызова допустимы только прямой addr16 и внутренний addr11 способы адресации.
Во всех условных операциях может использоваться только относительная адресация.
Когда МК51 опознает запрос на прерывание, он генерирует одну из команд типа LCALL addr16, что автоматически обеспечивает запоминание адреса возврата в стеке.
Однако в отличии от МК48 в МК51 нет автоматически сохраняемой информации о состоянии.
При этом логика прерываний перестает срабатывать на запросы того уровня, который был принят к обслуживанию.
Для понижения уровня прерывания служит команда возврата из прерывания RETI, которая кроме операции, эквивалентной RET, включает операцию разрешения прерывания данного уровня.
К типовым условным операциям МК51 относятся также операции JZ, JNZ.
Однако появилась новая операция «Сравнить и перейти» CJNE.
По данной команде операнд сначала сравнивается по правилам вычитания целых чисел с константой и в соответствии с результатом сравнения выставляется флаг CY Затем в случае несовпадения с константой выполняется ветвление. Сравнивая аккумулятор, регистр или ячейку памяти с последовательностью констант, получаем удобный способ проверки на совпадения, например с целью выявления особых случаев.
По сути дела команда CJNE является элементом оператора языков высокого уровня типа CASE.
Дальнейшее развитие получила команда DJNZ.
Теперь программист в качестве счетчика может использовать не только один из рабочих регистров Rn, но и любую ячейку памяти DSEG.
Команды битовых операций.
Группа состоит из 12 команд, позволяющих выполнять операции над одним или двумя битами (сброс, установку, инверсию бита, A также логические И и ИЛИ), и 5 команд, предназначенных для реализации условных переходов (табл.7.3.17).
Команды обеспечивают прямую адресацию 128 битов, расположенных в шестнадцати ячейках внутреннего ОЗУ с адресами 20h.
2Fh (табл.7.3.3), и 128 битов, расположенных в регистрах специального назначения, адреса которых кратны восьми (выделены в табл.7.3.4 полужирным шрифтом).
При выполнении операций над двумя одноразрядными операндами в качестве логического аккумулятора используется триггер регистра PSW, хранящий флаг переноса C (табл.7.1.2).
Команды MOV (1,2) осуществляют пересылку бита из одной прямо адресуемой битовой ячейки внутреннего ОЗУ в триггер C или в обратном направлении.
Команды CRL (3, 4), SETB (5, 6) соответственно сбрасывают в нуль или устанавливают в единицу флаг переноса C или указанный бит.
С помощью команд CPL, ANL, ORL (7–12) выполняются логические операции инверсии, сложения и умножения.
В группу входят также команды (13–17) для реализации операций условных переходов с относительным 8–разрядным смещением rel.
Переходы могут быть реализованы как при установленном бите или флаге переноса (команды 13, 16), так и при сброшенном (команды 14, 17).
Команда JBC помимо перехода по вычисляемому адресу при выполнении условия (бит) = 1 производит сброс этого бита в нулевое состояние.
При выполнении команд условных переходов адрес перехода вычисляется после прибавления к содержимому счетчика чисел 3 или 2 (отражающих число байт в команде).
Гламурные девушки встречаются с приятными щедрыми мужчинами, феи Благовещенск, для приятного отдыха. Чистоплотные проститутки следят за своим здоровьем, будьте уверенны. Ласковые феи Благовещенск, страстные и желанные, они такие интересные и стройные, что ты не устоишь перед ними. Твои мечты и желания реализуются.