ФСПО. «МК и МП» Конспект лекции №1.3 Структурная схема МК. Организация памяти и регистров МК. Ассемблер. Система команд МК х51 План лекции: 1. Управляющие восьмиразрядные микроконтроллеры семейства MCS-5 2. Структурная организация микроконтроллера i8051 3. Организация ОЗУ, ПЗУ и регистров микроконтроллера i8051 4. Ассемблер 5. Система команд микроконтроллера семейства 8051 1. Управляющие восьмиразрядные микроконтроллеры семейства MCS-51 На сегодняшний день существует более 200 модификаций микроконтроллеров семейства 8051, выпускаемых почти 20-ю компаниями. Эти модификации включают в себя кристаллы с широчайшим спектром периферии: от простых 20-выводных устройств с одним таймером и 1К программной памяти до сложнейших 100-выводных кристаллов с 10-разрядными АЦП, массивами таймеров-счетчиков, аппаратными 16-разрядными умножителями и 64К программной памяти на кристалле. Каждый год появляются все новые варианты представителей этого семейства. Основными направлениями развития являются: увеличение быстродействия (повышение тактовой частоты и переработка архитектуры), снижение напряжения питания и потребления, увеличение объема ОЗУ и FLASH памяти на кристалле с возможностью внутрисхемного программирования, введение в состав периферии микроконтроллера сложных устройств типа системы управления приводами, CAN и USB интерфейсов и т.п. Все микроконтроллеры из семейства MCS-51 имеют общую систему команд. Наличие дополнительного оборудования влияет только на количество регистров специального назначения. Основными производителями клонов 51-го семейства в мире являются фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems и ряд других. В рамках СССР производство микроконтроллера 8051 осуществлялось в Киеве, Воронеже (1816ВЕ31/51, 1830ВЕ31/51), Минске (1834ВЕ31) и Новосибирске (1850ВЕ31). Микроконтроллеры данного семейства выпускаются в PLCC, DIP и QFP корпусах и могут работать в следующих температурных диапазонах: • • коммерческий (0°C — +70°C); • расширенный (-40°C — +85°С): для военного использования (-55°C — +125°С). 1 ФСПО. «МК и МП» Конспект лекции №1.3 2. Структурная организация микроконтроллера i8051 Общие характеристики: Микроконтроллер семейства 8051 имеют следующие аппаратные особенности: внутреннее ОЗУ объемом 128 байт; четыре двунаправленных побитно настраиваемых восьмиразрядных порта ввода-вывода; два 16-разрядных таймера-счетчика; встроенный тактовый генератор; адресация 64 КБайт памяти программ и 64 Кбайт памяти данных; две линии запросов на прерывание от внешних устройств; интерфейс для последовательного обмена информацией с другими микроконтроллерами или персональными компьютерами. Рисунок 1 – Структурная схема микроконтроллера семейства 8051. 2 ФСПО. «МК и МП» Конспект лекции №1.3 Через четыре программируемых параллельных порта ввода/вывода и один последовательный порт микроконтроллер взаимодействует с внешними устройствами. Основу структурной схемы (рисунок 1) образует внутренняя двунаправленная 8-битная шина, которая связывает между собой основные узлы и устройства микроконтроллера: резидентную память программ (RPM), резидентную память данных (RDM), арифметикологическое устройство (ALU), блок регистров специальных функций, устройство управления (CU) и порты ввода/вывода (Р0-Р3). Арифметико-логическое устройство 8-битное арифметико-логическое устройство (ALU) может выполнять арифметические операции сложения, вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а также операции циклического сдвига, сброса, инвертирования и т.п. К входам подключены программно-недоступные регистры Т1 и Т2, предназначенные для временного хранения операндов, схема десятичной коррекции (DCU) и схема формирования признаков результата операции (PSW). Простейшая операция сложения используется в ALU для инкрементирования содержимого регистров, продвижения регистра-указателя данных (RAR) и автоматического вычисления следующего адреса резидентной памяти программ. Простейшая операция вычитания - для декрементирования регистров и сравнения переменных. Простейшие операции автоматически образуют “тандемы” для выполнения таких операций, как, например, инкрементирование 16-битных регистровых пар. В ALU реализуется механизм каскадного выполнения простейших операций для реализации сложных команд. Так, например, при выполнении одной из команд условной передачи управления по результату сравнения в ALU трижды инкрементируется счётчик команд (PC), дважды производится чтение из RDM, выполняется арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и принимается решение о том, делать или не делать переход по программе. Важной особенностью ALU является его способность оперировать не только байтами, но и битами. Отдельные программно-доступные биты могут быть установлены, сброшены, инвертированы, переданы, проверены и использованы в логических операциях. Эта способность достаточно важна, поскольку для управления объектами часто применяются алгоритмы, содержащие операции над входными и выходными булевыми переменными, реализация которых средствами обычных микропроцессоров сопряжена с определенными трудностями. Таким образом, ALU может оперировать четырьмя типами информационных объектов: булевыми (1 бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В ALU выполняется 51 различная операция пересылки или преобразования этих данных. Так как используется 11 режимов адресации (7 для данных и 4 для адресов), то путем комбинирования операции и режима адресации базовое число команд 111 расширяется до 255 из 256 возможных при однобайтном коде операции. 3 ФСПО. «МК и МП» Конспект лекции №1.3 3. Организация ОЗУ, ПЗУ и регистров микроконтроллера i8051 Память программ (ПЗУ). Как и у большинства микроконтроллеров, у микроконтроллеров семейства 8051, память программ и память данных являются самостоятельными и независимыми друг от друга устройствами, адресуемыми различными командами и управляющими сигналами. Объем встроенной памяти программ, расположенной на кристалле микроконтроллера 8051, равен 4 Кбайт (может быть больше у современных микроконтроллеров семейства). При обращении к внешней памяти программ все микроконтроллеры семейства 8051 всегда используют 16-разрадный адрес, что обеспечивает им доступ к 64 Кбайт ПЗУ. Микроконтроллер обращается к программной памяти при чтении кода операции и операндов (используя счетчик команд PC), а также при выполнении команд переноса байта из памяти программ в аккумулятор. При выполнении команд переноса данных адресация ячейки памяти программ, из которой будут прочитаны данные, может осуществляться с использованием как счетчика PC, так и специального двухбайтового регистра-указателя данных DPTR. Память данных (ОЗУ). Объем расположенной на кристалле памяти данных—128 байт. Объем внешней памяти данных может достигать 64 Кбайт. Первые 32 байта организованы в четыре банка регистров общего назначения (РОН), обозначаемых соответственно банк 0 — банк 3. Каждый из них состоит из восьми регистров R0 — R7. В любой момент программе доступен только один банк регистров, номер которого содержится в третьем и четвертом битах слова состояния программы PSW. Оставшееся адресное пространство может конфигурироваться разработчиком по своему усмотрению: в нем располагаются стек, системные и пользовательские области данных. Обращение к ячейкам памяти данных возможно двумя способами. Первый способ — прямая адресация ячейки памяти. В этом случае адрес ячейки является операндом соответствующей команды. Второй способ — косвенная адресация с помощью регистров R0 или R1: перед выполнением соответствующей команды в один из них должен быть занесен адрес ячейки, к которой необходимо обратиться. Для обращения к внешней памяти данных используется только косвенная адресация с помощью регистров R0 и R1 или с помощью 16-разрядного регистра-указателя DPTR. Он относится к группе регистров специальных функций, и с его помощью можно адресовать все 64 кбайт внешней памяти. Часть памяти данных представляет собой, так называемую битовую область, в ней имеется возможность при помощи специальных битовых команд адресовываться к каждому разряду ячеек памяти. Адрес прямо адресуемых битов может быть записан либо в виде (Адрес Байта ).(Разряд), например выражение 21.3 означает третий разряд ячейки памяти с адресом 21H, либо в виде абсолютного битового адреса. 4 ФСПО. «МК и МП» Конспект лекции №1.3 4. Ассемблер Машинный код – это набор чисел, которые интерпретируются центральным процессором компьютера и определяют выполняемые им действия. Машинный код состоит исключительно из двоичных чисел. Язык ассемблера состоит из набора операторов, понятных человеку. Язык ассемблера однозначно связан с машинным кодом, т.е. каждый оператор языка ассемблера соответствует одной команде машинного кода. Язык ассемблера тесно связан с архитектурой процессоров определенного семейства, т.е. он является не переносимым. Исходную программу, написанную на языке ассемблера, нельзя непосредственно запустить на компьютере. Сначала ее нужно оттранслировать или, как говорят, ассемблировать в исполняемый код. По сути, программа ассемблер выполняет функции компилятора. Целочисленные константы Целочисленная константа состоит из необязательного знака, одной или нескольких цифр и необязательного символа — суффикса (называемого основанием), который показывает, к какой системе счисления относится это число. Значения суффиксов числа (основания) описаны в таблице 1, причем они могут вводиться как прописными, так и строчными символами. Таблица 1 - Значения основания для разных типов чисел Суффикс h q или o d или ничего b Система счисления Шестнадцатеричная Восьмеричная Десятичная Двоичная Если основание в целочисленной константе не указано, предполагается, что число десятичное. Если шестнадцатеричная константа начинается с буквы, перед ней должен ставиться символ нуля (0), чтобы ассемблер не воспринял эту константу как идентификатор. Зарезервированные слова В языке ассемблера существует специальный список так называемых зарезервированных слов. Каждое из этих слов несет определенный смысл и поэтому может использоваться только в заранее оговоренном контексте. Резервными являются слова, перечисленные ниже: все мнемоники команд, такие как MOV, ADD или MUL, которые соответствуют встроенным командам языка ассемблера; 5 ФСПО. «МК и МП» Конспект лекции №1.3 директивы компилятора, которые определяют порядок ассемблирования программ; атрибуты, с помощью которых определяются характеристики используемых переменных и операндов, такие как размер, например: BYTE или WORD; операторы, используемые в константных выражениях; встроенные идентификаторы ассемблера, которые заменяются на эквивалентные целые константы во время компиляции. Идентификаторы Идентификатором называется любое имя, назначенное программистом некоторому объекту программы (переменной, константе или метке). При выборе имен идентификаторов необходимо учитывать перечисленные ниже правила. Длина идентификатора не должна превышать 247 символов. Регистр букв идентификатора не учитывается. Первым символом идентификатора должна быть одна из букв латинского алфавита (А. . Z или а. . z) либо символы подчеркивания (_), коммерческого "эт" (@) или знак доллара ($). Последующие символы могут быть также цифрами. Идентификатор не должен совпадать с одним из зарезервированных слов языка ассемблера. Команды ассемблера В языке ассемблера командой называется оператор программы, который непосредственно выполняется процессором после того, как программа будет скомпилирована в машинный код, загружена в память и запушена на выполнение (т.е. на этапе выполнения программы). Любая команда состоит из четырех основных частей: необязательной метки; мнемоники команды, которая присутствует всегда; одного или нескольких операндов (как правило, они присутствуют в любой команде, хотя есть ряд команд, для которых операнды не требуются); необязательного комментария. Любая строка исходного кода программы может содержать только метку или только комментарий. Стандартный формат команды ассемблера показан на рисунке 2. Рисунок 2 - Стандартный формат команды ассемблера А теперь давайте рассмотрим по отдельности каждую составную часть команды, начиная с необязательного поля метки. 6 ФСПО. «МК и МП» Конспект лекции №1.3 Метка По сути, метка является обычным идентификатором, с помощью которого в программе помечается некоторый участок кода или данных. В процессе обработки исходного текста программы ассемблер назначает каждому оператору программы числовой адрес. Таким образом, метке, размещенной непосредственно перед командой, также назначается адрес этой команды. Аналогично, если поместить метку перед переменной, ей будет назначен адрес этой переменной. Метки кода. Метки, расположенные в коде программы, должны заканчиваться символом двоеточия (:). Подобные метки обычно используются для указания участка программы, которому будет передано управление в командах перехода или организации циклов. Метка в коде программы может находиться на одной строке с командой, либо занимать самостоятельную строку. Метки данных. При использовании метки в сегменте данных программы (т.е. там, где размещаются и определяются переменные), она не должна заканчиваться символом двоеточия. Ниже приведен пример определения переменной под именем first. При выборе имен меток следует учитывать общие правила для имен идентификаторов. Кроме того, имя, выбранное для метки, должно быть уникальным в пределах одного исходного файла программы. Например, если в файле с исходным кодом вашей программы уже есть метка с именем first, вы не можете присвоить это же имя другой метке, расположенной в том же файле. Мнемоники команд Мнемоникой команды называется короткое имя, с помощью которого определяется тип выполняемой процессором операции. В английском толковом словаре слово мнемоника определяется как методика запоминания чего-либо. По этой причине мнемоникам команд назначены короткие, но в тоже время осмысленные имена, такие как mov, add, sub, mul, jmp или call… Операнды В любой команде языка ассемблера может содержаться от одного до трех операндов. Кроме того, существует ряд команд, в которых нет операндов. В качестве операнда в команде может использоваться название регистра, ссылка на участок памяти, константное выражение или адрес порта ввода-вывода. Ссылка на участок памяти указывается в команде либо с помощью имени переменной, либо с помощью названия регистра, в котором содержится адрес нужной переменной. Как вы уже знаете, вместо имени переменной ассемблер подставляет ее адрес. При этом он генерирует команду процессору на обращение к содержимому памяти, расположенной по данному адресу. Комментарии Комментарии очень важны для документирования программы. По сути, они являются средством общения разработчика программы с тем, кто будет сопровождать эту программу впоследствии. 7 ФСПО. «МК и МП» Конспект лекции №1.3 Комментарии начинаются с символа точки с запятой (;). При этом все символы расположенные после точки с запятой и до конца текущей строки, игнорируются компилятором. 5. Система команд микроконтроллера семейства 8051 Микро-ЭВМ рассматриваемого семейства являются типичными микропроцессорными устройствами с архитектурой SISC - со стандартным набором команд. Поэтому их система команд довольно обширна и включает в себя 111 основных команд. Их длина один, два или три байта, причем большинство из них (94%) - одно- или двухбайтные. Все команды выполняются за один или два машинных цикла (соответственно 1 или 2 мкс при тактовой частоте 12 МГц), исключение - команды умножения и деления, которые выполняются за четыре машинных цикла (4 мкс). В качестве операндов команд микро-ЭВМ семейства 8051 могут использовать отдельные биты, четырехбитные цифры, байты и двухбайтные слова. Все эти черты обычны для набора команд любого SISC-процессора и по сравнению с RISC набором команд обеспечивает большую компактность программного кода и увеличение быстродействия при выполнении сложных операций. Всего микро-ЭВМ выполняют 13 типов команд. Первый байт команды всегда содержит код операции (КОП), а второй и третий (если они присутствуют в команде) - адреса операндов или их непосредственные значения. Система команд семейства MCS-51 содержит 111 базовых команд, которые по функциональному признаку можно подразделить на пять групп: пересылки данных; арифметических операций; логических операций; операций над битами; передачи управления. Режимы адресации Набор команд MCS-51 поддерживает следующие режимы адресации. Прямая адресация (Direct Addressing). Операнд определяется 8-битным адресом в инструкции. Эта адресация используется только для внутренней памяти данных и регистров SFR. Например: MOV A, 35H ;скопировать содержимое ;в Аккумулятор ячейки памяти по адресу 45h INC XXX ;увеличить ячейку памяти с символическим именем XXX на 1 8 ФСПО. «МК и МП» Конспект лекции №1.3 Косвенная адресация (Indirect Addressing). В этом случае инструкция адресует регистр, содержащий адрес операнда. Данный вид адресации может применяться при обращении как к внутреннему, так и внешнему ОЗУ. Для указания 8-битных адресов могут использоваться регистры R0 и R1 выбранного регистрового банка или указатель стека SP. Для 16-битной адресации используется только регистр "указатель данных" (DPTR - Data Pointer). Например: MOVХ A, @DPTR ; содержимое ячейки внешней памяти по адресу ; из регистра DPTR скопировать в Аккумулятор ADD A, @R1 ; сложить содержимое аккумулятора и ячейки резидентной ; памяти данных с адресом из регистра R1 Регистровая адресация (Register Instruction). Данная адресация применяется для доступа к регистрам R0..R7 выбранного банка. Команды с регистровой адресацией содержат в байте кода операции трехбитовое поле, определяющее номер регистра. Выбор одного из четырех регистровых банков осуществляется программированием битов селектора банка (RS1, RS0) в PSW. Например: MOV A, R1 ; содержимое регистра R1 скопировать в Аккумулятор Непосредственная адресация (Immediate constants). Операнд содержится непосредственно в поле команды вслед за кодом операции и может занимать один или два байта (data8, data16). Например: MOV A, #10 ; Записать в регистр Аккумулятор число 10 Индексная адресация (Indexed Addressing). Индексная адресация используется при обращении к памяти программ и только при чтении. В этом режиме осуществляется просмотр таблиц в памяти программ. 16-битовый регистр (DPTR или PC) указывает базовый (начальный) адрес требуемой таблицы, а аккумулятор указывает на точку входа в нее. Адрес элемента таблицы находится сложением базы с индексом (содержимым аккумулятора). Например: MOVC A,@A+DPTR ; Записать в регистр Аккумулятор число 10 Неявная адресация (Register-Specific Instructions). Некоторые инструкции используют индивидуальные регистры (например, операции с аккумулятором, DPTR), при этом данные регистры не имеют адреса, указывающего на них; это заложено в код операции. 9 ФСПО. «МК и МП» Конспект лекции №1.3 Например: MOVХ A, @DPTR ; содержимое ячейки внешней памяти по адресу ; из регистра DPTR скопировать в Аккумулятор ADD A, @R1 ; сложить содержимое аккумулятора и ячейки резидентной ; памяти данных с адресом из регистра R1 Обозначения, используемые при описании команд Rn (n = 0, 1,..., 7) регистр общего назначения в выбранном банке регистров; @Ri(i= 0, 1) регистр общего назначения в выбранном банке регистров, используемый в качестве регистра косвенного адреса; ad адрес прямоадресуемого байта; ads адрес прямо адресуемого байта источника; add адрес прямо адресуемого байта получателя; ad11 11-разрядный абсолютный адрес перехода; ad16 16-разрядный абсолютный адрес перехода; rel относительный адрес перехода; #d непосредственный операнд; #d16 непосредственный операнд (2 байта); bit адрес прямо адресуемого бита; /bit инверсия прямо адресуемого бита; А аккумулятор; PC счетчик команд; DPTR регистр указатель данных; () содержимое ячейки памяти или регистра, Команды пересылки данных микроконтроллера 8051 Эта группа представлена 28 командами (см. Приложение – Система команд 8051). По команде MOV выполняется пересылка данных из второго операнда в первый. Эта команда не имеет доступа ни к внешней памяти данных, ни к памяти программ. Для этих целей предназначены команды M0VX и MOVC соответственно. Первая из них обеспечивает чтение/запись байт из внешней памяти данных, вторая - чтение байт из памяти программ. По команде XCH выполняется обмен байтами между аккумулятором и ячейкой РПД, а по команде XCHD - обмен младшими тетрадами (битами 0..3). Команды PUSH и РОР предназначены соответственно для записи данных в стек и их чтения из стека. Размер стека ограничен лишь размером резидентной памяти данных. В процессе инициализации микроЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н. Группа команд пересылок микроконтроллера имеет следующую особенность - в 10 ФСПО. «МК и МП» Конспект лекции №1.3 ней нет специальных команд для работы со специальными регистрами: PSW, таймером, портами ввода-вывода. Доступ к ним, как и к другим регистрам специальных функций, осуществляется заданием соответствующего прямого адреса, т.е. это команды обычных пересылок, в которых вместо адреса можно ставить название соответствующего регистра. Например, чтение PSW в аккумулятор может быть выполнено командой MOV A, PSW, которая преобразуется Ассемблером к виду: MOV А, 0D0h (т.е. в машинном коде: Е5 D0), где Е5 - код операции, а D0 - операнд (адрес PSW). Кроме того, следует отметить, что в микро-ЭВМ аккумулятор имеет два различных имени в зависимости от способа адресации: А - при неявной адресации (например, MOV A, R0) и АСС - при использовании прямого адреса. Первый способ предпочтительнее, однако, не всегда применим. Примеры решения задач После выполнения представленного программного кода на Микроконтроллерах семейства MCS-51 регистры R0, R2, R3, R4 содержат соответственно MOV R0,#1 MOV R1,#2 MOV R2,#3 PUSH R0 PUSH R1 PUSH R2 POP R1 POP R0 POP R2 ; записываем в регистры числа ; ; ; ; ; ; сохранить в стек сохранить в стек сохранить в стек извлечь из стека извлечь из стека извлечь из стека содержимое R0 (в стеке: 1) содержимое R1 (в стеке: 1, 2) содержимое R2 (в стеке: 1, 2, 3) в регистр R1 (в стеке: 1, 2) в регистр R0 (в стеке: 1) в регистр R2 (стек пустой) Ответ: R0 = 2, R1 = 3, R2 = 1. Контрольные вопросы 1. Арифметико-логическое устройство. 2. Память программ, память данных МК семейства 8051. 3. Что такое машинный код? Как его получают? 4. Что вы понимаете под Ассемблером? 5. Что такое целочисленные константы, зарезервированные слова, идентификаторы? 6. Формат команд языка ассемблер. 7. Какие группы команд выделяют для МК семейства 8051? 8. Какие режимы адресации используются в МК семейства 8051? Темы для сообщений 1. Представление отрицательных чисел в дополнительном коде. 2. Булева алгебра 11