Программирование микроконтроллеров mcs 51. Микроконтроллеры семейства mcs51. Схемные особенности портов

Опрос состояния системы прерываний производится в конце каждого машинного цикла в фазе S5P2 , за исключением команд RETI и любых команд с обращением к регистрам IE и IP. От момента фиксации запроса на прерывания до обслуживания прерывания требуется от 38 до 86 периодов частоты fOSC , в зависимости от фазы поступления запроса и числа машинных циклов команды, во время выполнения которой поступил запрос.

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

стартовый адрес (вектор прерывания):

Внешнее прерывание INT0.

Прерывание таймера/счетчика ТС0.

Внешнее прерывание INT1.

Прерывание таймера/счетчика ТС1.

Прерывание последовательного порта.

2.7. Методы адресации и система команд семейства MCS-51

Система команд семейства MCS-51 ориентирована на организацию гибкого ввода-вывода данных через универсальные порты P0...P3 и первичную обработку информации. Особое внимание уделено операциям с битами и передаче управления по их значению. Команды, выполняющие такие операции, составляют многочисленную группу и образуют вместе с соответствующими аппаратными средствами так называемый «булев процессор» в составе архитектуры MCS-51.

Система команд предоставляет программисту возможность использовать большинство операций с полным набором методов адресации и программно-доступных ресурсов аппаратуры.

2.7.1. Методы адресации

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

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

Методы адресации представляют собой набор механизмов доступа к операндам. Одни из них просты, приводят к компактному формату команды и быстрому доступу к операнду, но имеют ограниченный объем доступных ресурсов. Другие позволяют оперировать всеми имеющимися в системе ресурсами, но команда получается длинной, на ее

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

Ниже приведены основные методы адресации, используемые в системе команд семейства MCS-51.

Неявная адресация . В команде не содержится явных указаний об адресе участвующего в операции операнда или адресе, по которому помещается результат операции, но этот адрес подразумевается. В командах наиболее часто неявно адресуется аккумулятор как приемник результата операции. Например, результат сложения содержимого аккумулятора (A) и регистра R1 текущего банка данных командой ADD A,R1 записывается в неявно адресуемый аккумулятор. Вся указанная команда занимает в памяти один байт, в то время как адрес только аккумулятора (8Eh области SFR) содержит один байт.

Непосредственная адресация . В поле адреса команды содер-

жится не адрес операнда, а непосредственно сам операнд. На непосредственную адресацию указывает специальный символ # перед числом. Например, командой MOV A,#15h шестнадцатеричное число 15 (второй байт команды) загружается в аккумулятор. В системе команд непосредственная адресация обозначена как #data, где data – число

(data = 00h...FFh).

Прямая адресация . В поле адреса команды указан прямой адрес ячейки памяти данных, в которой находится или куда заносится операнд. Например, командой MOV A,15h содержимое ячейки DSEG с адресом 15h загружается в аккумулятор. Ячейка памяти имеет прямую адресацию, а аккумулятор - неявную. В зависимости от местонахождения адресуемого операнда, прямая адресация подразделяется на прямую регистровую и абсолютную.

Прямая регистровая адресация . В поле адреса команды указан прямой адрес регистра текущего регистрового банка. Регистров в каждом банке восемь, и для их адресации необходим трехбитовый прямой адрес. В мнемонике команд адресуемый регистр обозначен Rn, где n=0...7. Все поля команды умещаются в один байт. Такую адресацию называют короткой. Например, MOV R4,R1.

Прямая абсолютная адресация позволяет обратиться к любой ячейке DSEG и области SFR. Прямой адрес в этом случае занимает один байт, а команда – два байта. В системе команд байт прямого адреса обозначен словом direct (прямой) (direct = 00h…FFh). Например, команда MOV 80h,R2 (или MOV P0,R2) загружает содержимое регистра R2 текущего банка данных в порт Р0 (ячейка 80h области SFR). Если оба операнда имеют прямую абсолютную адресацию, то команда становится трехбайтовой (Например, MOV 80h,15h).

Косвенная адресация . В поле адреса указан адрес ячейки памяти, в которой находится прямой адрес операнда. В системе команд на косвенную адресацию указывает специальный символ @. Свойством

хранить прямой адрес обладают регистры R0 и R1 (@Ri, i = 0,1) каждого регистрового банка. Например, если содержимое регистра R1 текущего банка регистров равно 15h, то команда MOV A,@R1 выполнит то же действие, что и приведенная выше команда MOV A,15h – загрузит содержимое ячейки памяти DSEG с адресом 15h в аккумулятор. Однако команда MOV A,@R1 однобайтовая, но самое главное, здесь имеется возможность программным способом изменять адрес, изменяя содержимое регистра R1.

Относительная адресация . При относительной адресации прямой адрес формируется путем сложения базового адреса с адресным полем команды. В качестве базового адреса используется содержимое программного счетчика, а адресное поле команды представляет собой восьмиразрядное смещение rel (relative - относительный). Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления - (-128...+127). При определении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительная адресация широко используется в командах передачи управления, что позволяет создавать перемещаемые программные модули. Команды передачи управления с относительной адресацией позволяют организовать ветвление относительно текущего положения программного счетчика PC в обе стороны на (-128...+127) байт.

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

Базовая адресация представляет разновидность относительной адресации. Прямой адрес в этом случае формируется путем сложения адреса, указанного в команде, с содержимым базового регистра, в котором хранится базовый адрес. Функцию базового регистра в семействе MCS-51 выполняет регистр-указатель данных DPTR или программный счетчик PC. Этот тип адресации особенно удобен при обработке таблиц и массивов данных. В командах MOVC A,@A+DPTR и MOVC A,@A+PC 16-разрядный прямой адрес формируется как сумма содержимого регистров DPTR и A или PC и A.

Страничная адресация . При использовании страничной адресации память разбивается на ряд страниц одинаковой длины. Адресация страниц осуществляется отдельным регистром страниц, а адресация ячеек памяти внутри страницы – адресом, содержащимся в команде. Прямой адрес формируется конкатенацией (присоединением) адреса страниц и адреса ячейки памяти внутри страницы. В команде MOVX A,@Ri функцию регистра страниц выполняет порт P2 (старший байт адреса), а содержимое регистра Ri (младший байт адреса) задает адрес внутри страницы. При этом память разбивается на 256 страниц по 256 ячеек в каждой из них.

Стековая адресация используется в безадресных командах и представляет собой сочетание автоинкрементного и автодекрементного способов адресации, работающее по принципу LIFO (L ast I nput – F irst O utput)- «последним вошел – первым вышел». Стек располагается в DSEG и растет в сторону увеличения адреса. Адрес вершины стека содержится в указателе стека SP. При записи байта в стек сначала выполняется инкремент содержимого SP, а затем по этому адресу производится запись. При чтении байта из стека сначала выполняется чтение по адресу, на который указывает SP, а затем - декремент SP. При использовании стека необходимо учитывать, что глубина стека (максимальное число ячеек памяти, занятых под стек) аппаратными средствами не контролируется. При чрезмерном увеличении стека могут быть заняты не предназначенные для него ячейки памяти с потерей информации в них. Аппаратно стек используется для сохранения адреса возврата при обслуживании прерывания.

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

Система команд представлена в таблицах П2.1...П2.6 приложения 2. В таблицах указаны наименование команды, ее мнемоника, двоичный код операции, влияние выполняемой команды на флаги C, OV, AC и P, длина команды в байтах (Б) и время выполнения в машинных циклах (Ц), а также содержание преобразования, выполняемого командой. В качестве разделителя адресных полей в командах используется запятая. Для улучшения читаемости можно добавить пробелы после запятой, если их поддерживает используемый ассемблер.

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

Группа команд операций передачи данных (таблица П2.1 ) со-

держит команды MOV (передачи данных между DSEG и RSEG), MOVC (между CSEG и A), MOVX (между XSEG и A), команды обращения к стеку PUSH и POP, а также две команды обмена XCH и XCHD. Все команды передачи данных, у которых приемником является аккумулятор, устанавливают флаг паритета P содержимого аккумулятора, а команды с прямой адресацией, у которых приемником является регистр PSW, изменяют все флаги. Наиболее емкой является команда MOV, использующая четыре способа адресации: прямой регистровый (A, Rn, DPTR), прямой (direct), косвенный (@Ri), непосредственный (#data, #data16). Второй операнд команды является источником, первый – приемником. Для указания приемника служат три способа адресации (кроме непосредственного), а для указания источника все четыре. Трехбайтовая команда MOV direct,direct обеспечивает пересылку между двумя любыми ячейками памяти (DSEG и SFR), включая RSEG. Для обмена с RSEG предусмотрены специальные двух- и однобайтовые форматы:

Специальная команда MOV DPTR,#data16 позволяет загрузить 16-разрядный указатель DPTR значением data16.

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

Обращение к внешней памяти осуществляется с помощью команды MOVX . Обмен производится по байтам между аккумулятором и внешним XSEG. Ячейка XSEG может быть адресована двумя способами: косвенно через 16-разрядный указатель DPTR и странично косвенно через 8-разрядный указатель Ri, i=0,1. В последнем случае регистром страниц служит регистр P2.

Безадресные команды PUSH и POP обеспечивают передачу дан-

ных между DSEG, RSEG и SFR.

Команда обмена XCH обеспечивает двухсторонний обмен байтами, а команда XCHD - младшими тетрадами байтовых операндов.

Группа команд арифметических операций (таблица П2.2 ) со-

держит команды сложения ADD, сложения с учетом переноса ADDC, вычитания с учетом заема SUBB, увеличения и уменьшения на единицу INC и DEC, десятичной коррекции сложения в двоично-десятичном (BCD) коде упакованного формата, умножения MUL и деления DIV. Операции выполняются над беззнаковыми целыми числами. В операциях сложения и вычитания первым операндом и приемником результата служит аккумулятор. Для определения второго операнда используется прямая регистровая, прямая абсолютная, непосредственная и косвенная адресации. Операции INC и DEC применимы к аккумулятору, прямо адресуемому регистру, прямо или косвенно адресуемой ячейке памяти. Кроме того, операция INC применима к содержимому 16разрядного регистра указателя DPTR.

В операциях целочисленного умножения и деления без знака участвуют аккумулятор и регистр B. При умножении 8-разрядное значение A умножается на 8-разрядное значение B, а 16-разрядный результат записывается в пару BA. При этом регистр B хранит старшую часть произведения. Флажок OV устанавливается, если произведение больше 255. При делении 8-разрядного значения A на 8-разрядное значение B частное записывается в A, а остаток в B. При попытке деления на 0 устанавливается флаг переполнения OV.

Команда десятичной коррекции аккумулятора DA размещается после команды сложения. Слагаемые необходимо представить в BCD коде. Коррекция выполняется стандартным способом.

Группа команд логических операций (таблица П2.3 ) содержит три типовые операции: ANL – логическое И, ORL – логическое ИЛИ, XRL – логическое исключающее ИЛИ. Источником первого операнда

служит либо аккумулятор A, либо прямо адресуемая ячейка памяти. Второй операнд задается одним из четырех основных методов адресации. В состав группы входят также одноместные операции над содержимым аккумулятора: CLR - очистки, CPL – инверсии, а также RL, RLC, RR и RRC – операции циклического и расширенного сдвигов вправо и влево. Сюда же включена операция обмена тетрад в аккумуляторе SWAP,которая может интерпретироваться как циклический сдвиг байта на четыре разряда.

Группа команд операций с битами (таблица П2.6 ) содержит ко-

манды SETB – установки бита в 1, CLR – сброса бита в 0, CPL – инверсии бита, ANL и ORL – логическое И и логическое ИЛИ содержимого флага C и прямо адресуемого бита, MOV – пересылка бита.

В битовых операциях флаг C исполняет роль булевого аккумулятора. В качестве операндов используется содержимое флага C или прямо адресуемого бита bit области BSEG. В операциях ANL и ORL можно использовать содержимое прямо адресуемого бита (bit) или инверсию содержимого (/bit).

В эту группу входят также команды условного перехода с относительным 8-разрядным смещением rel. Условный переход может быть осуществлен как при установленном (команда JB), так и при сброшенном (команда JNB) бите. Особо следует отметить команду JBC, которая при установленном бите реализует ветвление и одновременно с этим сбрасывает бит в 0.

Группа команд передачи управления (таблицы П2.4 и П2.5 ) со-

держит команды безусловного перехода AJMP, LJMP, SJMP, JMP, условного перехода JZ, JNZ, CJNE, вызова ACALL, LCALL, возврата RET, RETI и модификации с условным переходом DJNZ. Сюда же включена пустая команда NOP.

В командах передачи управления широко применяется относительная адресация, позволяющая создавать перемещаемые программные модули. В качестве относительного адреса выступает 8-разрядное смещение rel – байт со знаком, обеспечивающее переход на (–128… +127) байт относительно текущего положения PC. Для перехода в любую другую точку 64 Кбайтового адресного пространства может быть использован либо прямой addr16, либо косвенный @A+DPTR адрес. В последнем случае содержимое A интерпретируется как целое без знака. Вариант короткой прямой адресации addr11 внутри 2 Кбайтовой текущей страницы введен для совместимости с семейством MCS-48.

Все эти типы адресации применяются в командах перехода. В командах вызова используются только прямой addr16 и внутристраничный addr11 способы адресации. Во всех условных командах используется только относительная адресация.

Когда микроконтроллер опознает запрос на прерывание, он генерирует команду LCALL addr16 , что автоматически обеспечивает запоминание адреса возврата в стеке. Информация о состоянии программы (содержимое регистра PSW) автоматически не сохраняется. При этом

У истоков производства микроконтроллеров стоит фирма Intel с семействами восьмиразрядных микроконтроллеров 8048 и 8051. Архитектура MCS-51 получила свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии HMOS. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке. С точки зрения технологии микроконтроллер 8051 являлся для своего времени очень сложным изделием - в кристалле было использовано 128 тыс. транзисторов, что в 4 раза превышало количество транзисторов в 16-разрядном микропроцессоре 8086.

Основными элементами базовой архитектуры являются:
- 8-разрядное АЛУ на основе аккумуляторной архитектуры;
- 4 банка регистров, по 8 в каждом;
- встроенная память программ 4Кбайт;
- внутреннее ОЗУ 128 байт;
- булевый процессор
-2 шестнадцатиразрядных таймера;
- контроллер последовательного канала (UART);
- контроллер обработки прерываний с двумя уровнями приоритетов;
- четыре 8-разрядных порта ввода/вывода, два из которых используются в качестве шины адреса/данных для доступа к внешней памяти программ и данных;
- встроенный тактовый генератор.

Именно этот микроконтроллер наиболее хорошо известен разработчикам и является популярным средством управления в устройствах самого широкого круга. Имеется множество эмуляторов, отладчиков и программаторов микросхем 8051, поэтому с разработкой программного обеспечения нет никаких трудностей.

Следующим принципиальным шагом в развитии MCS-51 стал перевод технологии изготовления на CHMOS. Это позволило реализовать режимы Idle и Power Down, позволившие резко снизить энергопотребление кристалла и открывшие дорогу к применению микроконтроллера в энергозависимых приложениях, например, в автономных приборах с батарейным питанием.

И последним принципиальным этапом развития этого направления фирмой Intel в рамках 8-битной архитектуры стал выпуск микроконтроллеров 8xC51FA/FB/FC, которые для краткости часто обозначаются как 8xC51FX. Главной отличительной особенностью этой группы кристаллов является наличие у них массива программируемых счетчиков (PCA). Структурная схема PCA представлена на рис.2.

В состав PCA входят:

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

16-битная выборка значения таймера по положительному фронту внешнего сигнала;
16-битная выборка значения таймера по отрицательному фронту внешнего сигнала;
16-битная выборка значения таймера по любому фронту внешнего сигнала;
16-битный программный таймер;
16-битное устройство скоростного вывода (HSO);
8-битный ШИМ

Выполнение всех перечисленных функций происходит в PCA на аппаратном уровне и не загружает центральный процессор, что позволяет повысить общую пропускную способность системы, повысить точность измерений и отработки сигналов и снизить время реакции микроконтроллера на внешние события, что особенно важно для систем реального времени. Реализованный в 8xC51FX PCA оказался настолько удачным, что архитектура микроконтроллеров FX стала промышленным стандартом де-факто, а сам PCA многократно воспроизводился в различных модификациях микроконтроллеров разных фирм.

Изначально наиболее "узкими" местами архитектуры MCS-51 были 8-разрядное АЛУ на базе аккумулятора и относительно медленное выполнение инструкций (для выполнения самых быстрых инструкций требуется 12 периодов тактовой частоты). Это ограничивало применение микроконтроллеров семейства в приложениях, требующих повышенного быстродействия и сложных вычислений (16- и 32- битовых). Насущным стал вопрос принципиальной модернизации старой архитектуры. Проблема модернизации осложнялась тем, что к началу 90-х годов уже была создана масса наработок в области программного и аппаратного обеспечения, и одной из основных задач разработки новой архитектуры была реализация аппаратной и программной совместимости со старыми разработками на базе MCS-51. Для решения этой задачи была создана совместная группа из специалистов компаний Intel и Philips. В результате в 1995 г. появилось 2 существенно отличающихся семейства: MCS-251/151 у Intel и 51XA у Philips (на последнем мы остановимся ниже).

Основные характеристики архитектуры MSC-251:

24-разрядное линейное адресное пространство, обеспечивающее адресацию до 16M памяти (выпускаемые микроконтроллеры семейства MCS-251 имеют адресное пространство памяти объемом 256К);
Система команд микроконтроллеров семейства MCS-251 содержит все 111 команд, входящих в систему команд микроконтроллеров семейства MCS-51 ("старые" команды), и, кроме того, в нее входят 157 "новых" команд. Коды некоторых новых команд имеют формат 4 байт.
Перед использованием микроконтроллера его необходимо сконфигурировать, т.е. с помощью программатора "прожечь" конфигурационные байты, определяющие, какой из наборов инструкций станет активным после включения питания. Если установить набор инструкций MCS-51, то в этом случае MSC-251 будет совместим с MCS-51 на уровне двоичного кода. Такой режим называется Binary Mode. Однако расширенные инструкции в этом режиме также доступны через "форточку" - зарезервированный код инструкции 0A5h. Естественно, длина каждой расширенной инструкции увеличивается в таком случае на 1 байт. Если же изначально установить набор расширенных инструкций, то в этом случае программы, написанные для MCS-51 потребуют перекомпиляции на кросс-средствах для MCS-51, т.к. теперь уже стандартные инструкции будут доступны через ту же "форточку" 0A5h и длина их также увеличится на 1 байт. Такой режим называется Source Mode. Он позволяет с максимальной эффективностью использовать расширенные инструкции и достигнуть наибольшего быстродействия, но требует переработки программного обеспечения.
регистровая архитектура, допускающая обращение к регистрам как к байтам, словам и двойным словам;
страничный режим адресации для ускорения выборки инструкций из внешней программной памяти;
очередь инструкций;
расширенный набор команд, включающий 16-битовые арифметические и логические инструкции;
расширенное адресное пространство стека до 64К;
выполнение самой быстрой инструкции за 2 такта;
совместимость на уровне двоичного кода с программами для MCS-51.

Для пользователей, ориентированных на применение микроконтроллеров MCS-251 в качестве механической замены MCS-51 фирма Intel выпускает микроконтроллеры MCS-251 с уже запрограммированными битами конфигурации в состоянии Binary Mode. Такие микроконтроллеры получили индекс MCS-151.

Помимо самой Intel микроконтроллеры MCS-251 по ее лицензии выпускает компания Temic Semiconductors.

Универсальная последовательная шина (Universal Serial Bus или USB), распространяет технологию Plug-and-Play на внешние устройства ввода/вывода, применяемые на современных высокопроизводительных персональных компьютерах.

Для того, чтобы обеспечить возможность подключения разнообразных периферийных устройств, в стандарте USB определены четыре режима передачи: Управляющий, Изохронный, Импульсный и передача массивов. Каждое периферийное устройство должно поддерживать управляющий режим для передачи параметров конфигурации, команд и информации о состоянии устройства. Изохронная передача обеспечивает гарантированный доступ к шине, постоянную пропускную способность и устойчивость к ошибкам, этот режим передачи может применяться в устройствах аудиовывода и компьютерной телефонии. Импульсная передача предназначена для устройств ввода типа мыши, джойстика или клавиатуры, передающих информацию редко и небольшими порциями, но с ограниченным периодом обслуживания. Передача массивов позволяет устройствам типа сканеров, факсов или цифровых камер передавать большие массивы данных в персональный компьютер, как только освобождается канал шины.

Основные характеристики продукта

Полная совместимость со "Спецификацией Universal Serial Bus 1.0"
Встроенный USB transceiver Serial Bus Interface Engine (SIE)
Четыре очереди FIFO для передачи
Три 16-байтных очереди FIFO
Четыре очереди FIFO для приема
Три 16-байтных очереди FIFO
Одна настраиваемая очередь FIFO (до 1024 байт)
Автоматическое управление приемом/передачей в очередях FIFO
Операции остановки/возобновления
Три вектора прерывания шины USB
Цикл блокировки фазы
Скорости передачи данных: 12 Мбит/сек и 1,5 Мбит/сек
Режим с замедленным циклом
Внешнее адресное пространство емкостью 256 Кбайт
Энергосберегающие режимы: ожидание и отключение питания
Задаваемые пользователем параметры
Ожидание в реальном времени
1 Кбайт оперативной памяти на кристалле
Четыре порта ввода/вывода
Программируемый массив счетчиков (PCA)
Стандартный (MCS 51) микроконтроллер UART
Аппаратный сторожевой таймер
Три 16-разрядных таймера/счетчика с гибкими возможностями
Совместимость с набором команд микроконтроллеров архитектуры MCS 51 и MCS 251
Архитектура микроконтроллера MCS 251, основанная на регистрах
Рабочая частота 6 или 12 МГц

Контроллер 8x930Hx имеет дополнительные характеристики:

Концентратор USB
Возможности управления концентратором USB
Управление соединением
Обнаружение соединения/разрыва связи с устройством вывода
Управление питанием, включая остановку/возобновление
Обнаружение и восстановление сбоев шины
Поддержка полноскоростных и низкоскоростных устройств вывода
Выходной контакт для переключения питания порта
Входной контакт для обнаружения перегрузки

Четыре различных режима передачи данных USB обеспечиваются совместной работой трех элементов: Хост, Концентратор, Функциональное устройство. Хост контролирует передачу по шине содержательной и управляющей информации. Функциональные устройства расширяют хост-системы. Сюда включаются типичные виды работы с PC: ввод с клавиатуры или джойстика, вывод на монитор; а также более сложные виды деятельности, такие как цифровая телефония и передача изображений. Для управления функциональными устройствами спроектирован микроконтроллер Intel 8x930Ax. Наконец, концентраторы представляют собой точку расширения USB, с помощью которой обеспечивается доступ к другим функциональным устройствам. Микроконтроллер Intel 8x930Hx, в котором совмещены функции управления функциональным устройством и концентратором USB, является первым серийным концентратором USB, предназначенным для современных периферийных устройств PC.

Концентраторы USB играют существенную роль в расширении мира пользовател PC. С появлением периферийных устройств - клавиатур, мониторов, принтеров и других - снабженных встроенными концентраторами, подключить или отключить новое устройство так же просто, как вставить вилку в розетку. Новый уровень производительности и расширенные способы соединения USB могут привести к появлению устройств для рабочих и развлекательных приложений нового поколения. Дни встраиваемых карт, конфликтов IRQ и спутанных клубков проводов сочтены.

Кабель шины USB состоит всего из четырех проводов: Vbus, D+, D- и GND - чем достигается упрощение и единообразие соединения. Этой же цели служит единый стандартный коннектор для подключения периферийных устройств к шине USB. Данные по-разному передаются по кабелям D+ и D-: либо на полной скорости 12 Мбит/сек, либо на низкой скорости 1,5 Мбит/сек. Приемопередатчик встроен в кристалл, поэтому необходимость во внешних электронных цепях отсутствует. Исключение составляет терминальный нагрузочный резистор на обоих линиях D+ и D-, который необходим для определения типа устройства: высокоскоростное или низкоскоростное.

Обзор семейства
Семейство Intel 8x930 состоит из двух однокристальных контроллеров.

Контроллер Intel 8x930Ax представляет собой 8-разрядное устройство, которое основано на архитектуре микроконтоллера MCS 251 и предназначено для работы с периферийными устройствами, подключаемыми к шине USB. С другой стороны, в 8x930Hx использовано то же ядро микроконтроллера MCS 251 плюс расширенные возможности встроенного концентратора шины USB. Применение архитектуры MCS 251 в обоих контроллерах шины USB дает следующие преимущества:

Высокая производительность
Применение смешанных типов памяти и адресации
Низкое энергопотребление
Низкий уровень шума
Эффективная поддержка языков высокого уровня
Расширенный набор команд
Встроенные возможности

В качестве команд для 8x930Ax можно использовать инструкции как из набора для микроконтроллера MCS 51, так и из набора для микроконтроллера MCS 251. Такой подход сохраняет инвестиции пользователей в программное обеспечение и выжимает максимум производительности из приложений.

Микроконтроллеры 8x930 настолько насыщены различными встроенными средствами, что они выглядят мощнее, нежели просто микроконтроллеры. Массив программируемых счетчиков (PCA) придает гибкость приложениям, которым требуется сравнение или захват данных в реальном времени, высокоскоростной обмен данными или широтно-импульсная модуляция. Кроме того, в состав контроллера вошли расширенный последовательный порт, три 16-разрядных таймера/счетчика, аппаратный сторожевой таймер, четыре 8-разрядных порта ввода/вывода, а также предусмотрены два энергосберегающих режима: ожидание и отключение питания.

Контроллеры семейства 8x930Ax оснащены 1 Кбайт памяти и могут быть использованы в вариантах без постоянной памяти, либо с постоянной памятью емкостью 8 или 16 Кбайт. Они могут адресовать до 256 Кбайт внешней памяти для размещения команд и данных и 40 байт регистров общего назначения, которые располагаются в центральном процессоре как регистровый файл. В зависимости от используемой комбинации в регистровом файле могут располагаться 16 байтовых регистров, 16 двухбайтовых регистров и 10 четырехбайтовых регистров.

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

Оба контроллера 8x930 оснащены восемью очередями FIFO для поддержки внутренних устройств вывода: четыре очереди для передачи и четыре очереди для приема. Четыре очереди FIFO для приема/передачи поддерживают четыре оконечных функциональных устройства (от 0 до 3). Очередь 0 состоит из 16 байт и предназначена для передачи управляющей информации. Очередь 1 относитс к категории настраиваемых пользователем и имеет емкость до 1024 байт. Очереди 2 и 3 состоят из 16 байт каждая и могут использоваться для передачи информации в импульсном, изохронном и режиме передачи массивов. В случае использования контроллера 8x930Hx указанные очереди усиливаются парой очередей FIFO для входных устройств. Эти очереди в контроллере 8x930Hx поддерживаются дополнительным повторителем, который отвечает за повторную передачу потоков данных, генерируемых выходными устройствами.

Обзор архитектуры
Конструкционно реализацию USB в микроконтроллерах 8x930Ax и 8x930Hx можно разделить на четыре блока: очереди FIFO, блок интерфейса с функциональными устройствами, блок интерфейса с последовательной шиной и приемо-передатчик. Контроллер 8x930Hx имеет длополнительные блоки для управления функциями концентратора: блок интерфейса с концентратором и повторитель.

Очереди FIFO для приема и передачи на обоих контроллерах являются кольцевыми. Очереди поддерживают до двух раздельных наборов данных переменного размера и содержат регистры счетчика байтов, показывающие количество байтов в наборах данных. Очереди снабжены флажками, показывающими заполненность или пустоту очереди, а также способны повторять прием или передачу текущего набора данных. Блок интерфейса с функциональными устройствами (ИФУ) распределяет переданные или принятые данные USB в соответствии с типом передачи и состоянием очередей. Кроме того, блок ИФУ следит за состоянием транзакции, управляет очередями FIFO, при помощи запроса на прерывание сообщает о наступлении управляющих событий центральному процессору 8x930.

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

Интегрированный приемо-передатчик на микроконтроллерах USB согласован с простым четырех-жильным интерфейсом, определенным спецификаицей USB 1.0. Семейство контроллеров 8x930 имеет три прерывания, связанных с USB. Они происходят при каждом старте кадра, окончании приема/передачи данных на оконечные функциональные устройства, в случае глобальной приостановки или возобновления работы. В концентраторе 8x930Hx блок интерфейса с концентратором служит для управления и слежения за состоянием соединени с выходными портами. Повторитель отвечает за распространение сигналов повышающих и понижающих портов USB.

Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр. Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы. Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений. Систему команд условно можно разбить на пять групп:
  • Арифметические команды;
  • Логические команды;
  • Команды передачи данных;
  • Команды битового процессора;
  • Команды ветвления и передачи управления.
Существуют следующие типы адресации операндов-источников:
  • Регистровая адресация
  • Прямая адресация
  • Косвенно-регистровая адресация
  • Непосредственная адресация
  • Косвенно-регистровая адресация по сумме базового и индексного регистров
Арифметические команды В наборе команд имеются следующие арифметические операции: сложение, сложение с учетом флага переноса, вычитание с заемом, инкременирование, декременирование, сравнение, десятичная коррекция, умножение и деление. В АЛУ производятся действия над целыми числами без знака. В двухоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: пеполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW). Использование разряда переноса позволяет многократно повысить точность при операциях сложения (ADDC) и вычитания (SUBB). Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (OV) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде. Операции инкременирования и декременирования на флаги не влияют. Операции сравнения не влияют ни на операнд назначения, ни на операнд источника, но они влияют на флаги переноса. Существуют три арифметические операции, которые выполняются только на аккумуляторе: две команды проверки содержимого аккумулятора А (JZ, JNZ), и команда десятичной коррекции при сложении двоично-десятичных кодов. При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший - в регистре А. В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления - в регистр В. Логические команды с байтовыми переменными Система команд позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощью косвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Указанные логические операции могут быть реализованы на любом прямоадресуемом регистре внутреннего ОЗУ или регистре специального назначения с использованием в качестве второго операнда содержимого аккумлятора А или непосредственных данных. Существуют логические операции, которые выполняются только на аккумуляторе: сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и впрво; циклический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и младшей тетрад (ниблов) внутри аккумулятора. Команды передачи данных Таблицы символов (кодов), зашитые в ПЗУ программы могут быть выбраны с помощью команд передачи данных с использованием косвенной адресации. Байт константы может быть передан в аккумулятор из ячейки памяти программ, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (содержимого А). Это обеспечивает, например, удобное средство реализации алгоритма преобразования кода ASCII в семисегментный код. Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR. Команды передачи между прямоадресуемыми регистрами позволяют заносить величину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или аккумулятора. В логическом процессоре любой прямоадресуемый бит может быть помещен в бит переноса и наоборот. Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адресации ячеек внутреннего ОЗУ, а также с содержимым прямо-адресуемых ячеек внутреннего ОЗУ и с содержимым регистров специального назначения. Младший нибл (разряды 3-0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвенно-регистровой адресации. Команды битового процессора Битовый процессор является частью архитектуры МК семейства MCS51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет набор команд, имеет свое побитово-адресуемое ОЗУ и свой ввод-вывод. Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0-127) в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н-2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны восьми. Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут быть реализованы переходы: если бит установлен; если бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И", "ИЛИ", где результат заносится в разряд флага переноса. Команды побитовой обработки обеспечивают реализацию сложных функций комбинаторной логики и оптимизацию программ пользователя. Команды ветвления и передачи управления Адресное пространство памяти программ не имеет страничной организации, что позволяет свободно перемщать фрагменты программы внутри адресного пространства, при этом не требуется перезасылка (изменение) номера страницы. Перемещение отдельных фрагментов программы обеспечивает возможность использования перемещаемых программных модулей различными программами. Команды 16-разрядных переходов и вызовов подпрограмм позволяют осуществлять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт. Команды 11-разрядных переходов и вызовов подпрограмм обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. В системе команд имеются команды условных и безусловных переходов относительно начального адреса слеующей программы в пределах от (РС)-128 до (ЗС)+127. Команды проверки отдельных разрядов позволяют осуществлять условные переходы по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль/не ноль) позволяют осуществлять условные переходы по содержимому А. Косвенно-регистровые переходы в системе команд обеспечивают ветвление относительно базового регистра (содержимого DPTR или РС) со смещением, находящимся в аккумуляторе А. Регистровая адресация Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров (эти же регистры могут быть выбраны с помощью прямой адресации и косвенно-регистровой адресации как обычные ячейки внутреннего ОЗУ данных). Регистровая адресация используется для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации. Прямая адресация Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (0-127) и к регистрам специального назначения. Прямая побитовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20H-2FH и к отдельно адресуемым битам регистров специального назначения. Старший бит байта кода прямого адрема выбирает одну из двух групп отдельно адремуемых битов, расположенных в ОЗУ или регистрах специального назначения. Прямо адресуемые биты с адресами 0-127 (00H-7FH) расположены в блоке из 16 ячеек внутреннего ОЗУ, имеющих адреса 20H-2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта. Отдельно адресуемые биты в регистрах специального назначения пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших - определяют местоположение отдельного ибта внутри регистра. Косвенно-регистровая адресация Косвенно-регистровая адресация используется для обращения к ячейкам внутренннего ОЗУ данных. В качестве регистров-указателей используется регистры R10, R1 выбранного банка регистров. В командах PUSH и POP используется содержимое указателя стека (SP). Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (выбранного банка рабочих регистров) выбирается ячейка из блока в 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. 16-разрядный указатель данных (DPTR) может быть использован для обращения к любой ячейке адресного пространства внешней памяти данных объемом до 64 Кбайт. Непосредственная адресация Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде. Косвенно-регистровая адресация по сумме базового и индексного регистров Косвенно-регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, зашитых в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А. Таблица обозначений и символов, используемых в системе команд
Обозначение, символ Назначение
А Аккумулятор
Rn Регистры текущего выбранного банка регистров
r Номер загружаемого регистра, указанног в команде
direct Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255)
@Rr Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных
data8 8-битовое непосредственное да ное, ходящее в КОП
dataH Старшие биты (15-8) непосредственных 16-битовых данных
dataL Младшие биты (7-0) непосредственных 16-битовых данных
addr11 11-битовый адрес назначения
addrL Младшие биты адреса назначения
disp8 8-битовый байт смещения со знак м
bit Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR
a15, a14...a0 Биты адреса назначения
(Х) Содержимое элемента Х
((Х)) Содержимое по адресу, хранящемуся в элементе Х
(Х)[M] Разряд М элемента Х
+ - * / AND OR XOR /X Операции: сложения вычитания умножения деления логического умножения (операция И) логического сложения (операция ИЛИ) сложения по модулю 2 (исключающее ИЛИ) инверсия элемента Х

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

Мнемоника Функция Флаги
Команда ACALL Абсолютный вызов подпрограммы
Команда ADD A, <байт-источник> Сложение AC, C, OV
Команда ADDC A, <байт-источник> Сложение с переносом AC, C, OV
Команда AJMP Абсолютный переход
Команда ANL <байт-назначения>, <байт-источникa> Логическое "И"
Команда ANL C, <байт-источникa> Логическое "И" для переменных-битов
Команда CJNE <байт-назначения>, <байт-источник>, <смещение> Сравнение и переход, если не равно C
Команда CLR A Сброс аккумулятора
Команда CLR Сброс бита C, bit
Команда CPL A Инверсия ак умуля ора
Команда CPL Инверсия бита C, bit
Команда DA A Десятичная коррекция аккумулятора для ложения AC, C
Команда DEC <байт> Декремент
Команда DIV AB Деление C, OV
Команда DJNZ <байт>, <смещение> Декремент и переход, если не равно нулю
Команда INC <байт> Инкремент
Команда INC DPTR Инкремент указателя данных
Команда JB , Переход, если бит установлен
Команда JBC , Переход, если бит установлен и сброс этого бита
Команда JC Переход, если перенос установлен
Команда JMP @A+DPTR Косвенный переход
Команда JNB , Переход, если бит не установлен
Команда JNC Переход, если перенос не установлен
Команда JNZ Переход, если содержимое аккумулятора не равно нулю
Команда JZ Переход, если содержимое аккумулятора равно 0
Команда LCALL Длинный вызов
Команда LJMP Длинный переход
Команда MOV <байт-назначения>, <байт-источника> Переслать переменную-байт
Команда MOV <бит-назначения>, <бит-источника> Переслать бит данных C
Команда MOV DPTR,#data16 Загрузить указатель данных 16-битовой константой
Команда MOVC A,@A+() Переслать байт из памяти программ
Команда MOVX <байт приемника>, <байт источника> Переслать во внешнюю память (из внешней памяти) данных
Команда MUL AB Умножение C, OV
Команда NOP Нет операции PC
Команда ORL <байт-назначения>, <байт-источникa> Логическое "ИЛИ" для перемнных-байтов
Команда ORL C, <бит источникa> Логическое "ИЛИ" для переменных-битов C
Команда POP Чтение из стека
Команда PUSH Запись в стек
Команда RET Возврат из подпрограммы
Команда RETI Возврат из прерывания
Команда RL A Сдвиг содержимого аккумулятора влево
Команда RLC A Сдвиг содержимого аккумулятора влево через флаг переноса
Команда RR A Сдвиг содержимого аккумулятора вправо
Команда RRC A Сдвиг содержимого аккумулятора вправо через флаг переноса C
Команда SETB Установить бит C
Команда SJMP <метка> Короткий переход
Команда SUBB A, <байт источника> Вычитание с заемом AC, C, OV
Команда SWAP A Обмен тетрадами внутри аккумулятора
Команда XCH A, <байт> Обмен содержимого аккумулятора с переменной-байтом
Команда XCHD A,@R1 Обмен тетрадой
Команда XRL <байт-назначения>, <байт-источникa> Логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ" для перемнных-байтов

АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРОВ СЕМЕЙСТВА MCS -51

Конспект лекций по курсам

«Микропроцессоры в системах контроля», «Микропроцессорная техника»

«Микропроцессорные средства и системы»

для студентов всех форм обучения специальностей

072000 – Стандартизация и сертификация

210200 – Автоматизация технологических процессов

230104 – Системы автоматизированного проектирования

Тамбов 2005

ВВЕДЕНИЕ.. 3

1. СТРУКТУРА МИКРОКОНТРОЛЛЕРА INTEL 8051. 3

1.1. Организация памяти. 5

1.2. Арифметико-логическое устройство. 6

1.3. Резидентная память программ и данных. 7

1.4. Аккумулятор и регистры общего назначения. 8

1.5. Регистр слова состояния программы и его флаги. 9

1.6. Регистры-указатели. 10

1.7. Регистры специальных функций. 11

1.8. Устройство управления и синхронизации. 11

1.9. Параллельные порты ввода/вывода информации. 12

1.10. Таймеры/счетчики. 13

1.11. Последовательный порт. 18

1.11.1. Регистр SBUF.. 18

1.11.2. Режимы работы последовательного порта. 18

1.11.3. Регистр SCON.. 19

1.11.4. Скорость приёма/передачи. 21

1.12. Система прерываний. 22

2. СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРА INTEL 8051. 26

2.1. Общие сведения. 26

2.1.1. Типы команд. 27

2.1.2. Типы операндов. 28

2.1.3. Способы адресации данных. 30

2.1.4. Флаги результата. 31

2.1.5. Символическая адресация. 32

2.2. Команды передачи данных. 33

2.2.1. Структура информационных связей. 33

2.2.2. Обращение к аккумулятору. 33

2.2.3. Обращение к внешней памяти данных. 34

2.2.4. Обращение к памяти программ.. 34


2.2.5. Обращение к стеку. 35

2.3. Арифметические операции. 35

2.4. Логические операции. 39

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

2.5.1. Длинный переход. 43

2.5.2. Абсолютный переход. 43

2.5.3. Относительный переход. 44

2.5.4. Косвенный переход. 44

2.5.5. Условные переходы.. 44

2.5.6. Подпрограммы.. 47

2.6. Операции с битами. 48

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

ЛИТЕРАТУРА.. 50

Приложение СИСТЕМА КОМАНД INTEL 8051. 51

ВВЕДЕНИЕ

С 80-х годов 20 века в микропроцессорной технике выделился самостоятельный класс интегральных схем – однокристальные микроконтроллеры, которые предназначены для встраивания в приборы различного назначения. От класса однокристальных микропроцессоров их отличает наличие внутренней памяти, развитые средства взаимодействия с внешними устройствами.

Широкое распространение получили 8-разрядных однокристальные микроконтроллеры семейства MCS-51. Это семейство образовалось на основе микроконтроллера Intel 8051, получившего большую популярность у разработчиков микропроцессорных систем контроля благодаря удачно спроектированной архитектуры. Архитектура микроконтроллера это совокупность внутренних и внешних программно доступных аппаратных ресурсов и системы команд.

В последствии фирма Intel выпустила около 50 моделей на базе операционного ядра микроконтроллера Intel 8051. Одновременно многие другие фирмы, такие как Atmel, Philips начали производство своих микроконтроллеров разработанных в стандарте MCS-51. Существует также и отечественный аналог микроконтроллера Intel 8051 - микросхема К1816ВЕ51.

2. СТРУКТУРА МИКРОКОНТРОЛЛЕРА INTEL 8051

Микроконтроллер Intel 8051 выполнен на основе высокоуровневой n-МОП технологии. Его основные характеристики следующие:

· восьмиразрядный центральный процессор, оптимизированный для реализации функций управления;

· встроенный тактовый генератор (максимальная частота 12 МГц);

· адресное пространство памяти программ - 64 Кбайт;

· адресное пространство памяти данных - 64 Кбайт;

· внутренняя память программ - 4 Кбайт;

· внутренняя память данных - 128 байт;

· дополнительные возможности по выполнению операций булевой алгебры (побитовые операции);

· 2 шестнадцатиразрядных многофункциональных таймера/счетчика;

· полнодуплексный асинхронный приемопередатчик (последовательный порт);

· векторная система прерываний с двумя уровнями приоритета и пятью источниками событий.

Рисунок 1 - Структурная схема микроконтроллера Intel 8051

Основу структурной схемы (рис. 1) образует внутренняя двунаправленная 8-разрядная шина, которая связывает между собой основные узлы и устройства микроконтроллера: резидентную память программ (RPM), резидентную память данных (RDM), арифметико-логическое устройство (ALU), блок регистров специальных функций, устройство управления (CU), параллельные порты ввода/вывода (P0-P3), а также программируемые таймеры и последовательный порт.

2.1. Организация памяти

Данный микроконтроллер имеет встроенную (резидентную) и внешнюю память программ и данных. Резидентная память программ (RPM) имеет объем 4 Кбайт, резидентная память данных (RDM) – 128 Байт.


В зависимости от модификации микроконтроллера RPM выполняется в виде масочного ПЗУ, однократно программируемого либо репрограммируемого ПЗУ.

При необходимости пользователь может расширять память программ установкой внешнего ПЗУ. Доступ к внутреннему или внешнему ПЗУ определяется значением сигнала на выводе ЕА (External Access):

EA=VCC (напряжение питания) - доступ к внутреннему ПЗУ;

EA=VSS (потенциал земли) - доступ к внешнему ПЗУ.

Внешняя память программ и данных может составлять по 64 Кбайт и адресоваться с помощью портов P0 и P2. На рис.2 представлена карта памяти Intel 8051.

Рисунок 2 - Организация памяти Intel 8051

Строб чтения внешнего ПЗУ - (Program Store Enable) генерируется при обращении к внешней памяти программ и является неактивным во время обращения к ПЗУ, расположенному на кристалле.

Область нижних адресов памяти программ (рис. 3) используется системой прерываний. Архитектура микросхемы INTEL 8051 обеспечивает поддержку пяти источников прерываний. Адреса, по которым передается управление по прерыванию, называются векторами прерывания.

Рисунок 3 - Карта нижней области программной памяти

2.2. Арифметико-логическое устройство

8-битное арифметико-логическое устройство (ALU) может выполнять арифметические операции сложения, вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а также операции циклического сдвига, сброса, инвертирования и т. п. К входам подключены программно-недоступные регистры T1 и T2, предназначенные для временного хранения операндов, схема десятичной коррекции (DCU) и схема формирования признаков результата операции (PSW).

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

Простейшие операции автоматически образуют “тандемы” для выполнения таких операций, как, например, инкрементирование 16-битных регистровых пар. В ALU реализуется механизм каскадного выполнения простейших операций для реализации сложных команд. Так, например, при выполнении одной из команд условной передачи управления по результату сравнения в ALU трижды инкрементируется счётчик команд (PC), дважды производится чтение из RDM, выполняется арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и принимается решение о том, делать или не делать переход по программе. Все перечисленные операции выполняются всего лишь за 2 мкс.

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

Таким образом, ALU может оперировать четырьмя типами информационных объектов: булевыми (1 бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В ALU выполняется 51 различная операция пересылки или преобразования этих данных. Так как используется 11 режимов адресации (7 для данных и 4 для адресов), то путем комбинирования операции и режима адресации базовое число команд 111 расширяется до 255 из 256 возможных при однобайтном коде операции.

2.3. Резидентная память программ и данных

Резидентные (размещённые на кристалле) память программ (RPM) и память данных (RDM) физически и логически разделены, имеют различные механизмы адресации, работают под управлением различных сигналов и выполняют разные функции.

Память программ RPM имеет емкость 4 Кбайта и предназначена для хранения команд, констант, управляющих слов инициализации, таблиц перекодировки входных и выходных переменных и т. п. Память имеет 16-битную шину адреса, через которую обеспечивается доступ из программного счётчика PC или из регистра-указателя данных (DPTR). DPTR выполняет функции базового регистра при косвенных переходах по программе или используется в операциях с таблицами.

Память данных RDM предназначена для хранения переменных в процессе выполнения прикладной программы, адресуется одним байтом и имеет емкость
128 байт. Кроме того, к её адресному пространству примыкают адреса регистров специальных функций, которые перечислены в табл. 1.

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

Таблица 1

Блок регистров специальных функций

Наименование

Аккумулятор

Регистр-расширитель аккумулятора

Слово состояния программы

Регистр-указатель стека

Регистр-указатель данных

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

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

Регистр режима таймера/счётчика

Регистр управления/статуса таймера

Таймер 0 (старший байт)

Таймер 0 (младший байт)

Таймер 1 (старший байт)

Таймер 1 (младший байт)

Регистр управления приёмопередатчиком

Буфер приёмопередатчика

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

Примечание. Регистры, имена которых отмечены знаком (*), допускают адресацию отдельных битов.

2.4. Аккумулятор и регистры общего назначения

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

В распоряжении пользователя имеется четыре банка по 8 регистров общего назначения R0–R7 (рис. 9). Однако возможно использование регистров только одного из четырёх банков, который выбирается с помощью бит регистра PSW.

2.5. Регистр слова состояния программы и его флаги

При выполнении многих команд в ALU формируется ряд признаков операции (флагов), которые фиксируются в регистре слова состояния программы (PSW). В табл. 2 приводится перечень флагов PSW, даются их символические имена и описываются условия их формирования.

Таблица 2

Формат слова состояния программы PSW

Имя и назначение

Флаг переноса. Устанавливается и сбрасывается аппаратно или программно при выполнении арифметических и логических операций

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

Флаг 0. Может быть установлен, сброшен или проверен программой как флаг, специфицируемый пользователем

Выбор банка регистров. Устанавливается и сбрасывается программно для выбора рабочего банка регистров (табл. 3)

Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций

Не используется

Флаг паритета. Устанавливается и сбрасывается аппаратно в каждом цикле и фиксирует нечётное/чётное число единичных битов в аккумуляторе, т. е. выполняет контроль по четности

Таблица 3

Выбор рабочего банка регистров

Границы адресов

Наиболее “активным” флагом PSW является флаг переноса, который принимает участие и модифицируется в процессе выполнения множества операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (CY) выполняет функции “булева аккумулятора” в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делает возможным использование арифметики в дополнительных кодах. ALU не управляет флагами селекции банка регистров (RS0, RS1), их значение полностью определяется прикладной программой и используется для выбора одного из четырёх регистровых банков.

В виде байта регистр PSW может быть представлен следующим образом:

В микропроцессорах, архитектура которых опирается на аккумулятор, большинство команд работают с ним, используя неявную адресацию. В Intel 8051 дело обстоит иначе. Хотя процессор имеет в своей основе аккумулятор, он может выполнять множество команд и без его участия. Например, данные могут быть переданы из любой ячейки RDM в любой регистр, любой регистр может быть загружен непосредственным операндом и т. д. Многие логические операции могут быть выполнены без участия аккумулятора. Кроме того, переменные могут быть инкрементированы, декрементированы и проверены без использования аккумулятора. Флаги и управляющие биты могут быть проверены и изменены аналогично.

2.6. Регистры-указатели

8-битный указатель стека (SP) может адресовать любую область RDM. Его содержимое инкрементируется прежде, чем данные будут запомнены в стеке в ходе выполнения команд PUSH и CALL. Содержимое SP декрементируется после выполнения команд POP и RET. Подобный способ адресации элементов стека называют прединкрементным/постдекрементным. В процессе инициализации микроконтроллера после сигнала RST в SP автоматически загружается код 07Н. Это значит, что если прикладная программа не переопределяет стек, то первый элемент данных в стеке будет располагаться в ячейке RDM с адресом 08Н.

Двухбайтный регистр-указатель данных DPTR обычно используется для фиксации 16-битного адреса в операциях с обращением к внешней памяти. Командами микроконтроллера регистр-указатель данных может быть использован или как 16-битный регистр, или как два независимых 8-битных регистра (DPH и DPL).

2.7. Регистры специальных функций

Регистры с символическими именами IP, IE, TMOD, TCON, SCON и PCON используются для фиксации и программного изменения управляющих бит и бит состояния схемы прерывания, таймера/счётчика, приёмопередатчика последовательного порта и для управления энергопотреблением. Подробно их организация будет описана в разделах 1.8-1.12, при рассмотрении особенностей работы микроконтроллера в различных режимах.

2.8. Устройство управления и синхронизации

Кварцевый резонатор, подключаемый к внешним выводам микроконтроллера, управляет работой внутреннего генератора, который в свою очередь формирует сигналы синхронизации. Устройство управления (CU) на основе сигналов синхронизации формирует машинный цикл фиксированной длительности, равной 12 периодам генератора. Большинство команд микроконтроллера выполняется за один машинный цикл. Некоторые команды, оперирующие с 2-байтными словами или связанные с обращением к внешней памяти, выполняются за два машинных цикла. Только команды деления и умножения требуют четырех машинных циклов. На основе этих особенностей работы устройства управления производится расчёт времени исполнения прикладных программ.

На схеме микроконтроллера к устройству управления примыкает регистр команд (IR). В его функцию входит хранение кода выполняемой команды.

Входные и выходные сигналы устройства управления и синхронизации:

1. PSEN – разрешение программной памяти,

2. ALE – выходной сигнал разрешения фиксации адреса,

3. PROG – сигнал программирования,

4. EA – блокировка работы с внутренней памятью,

5. VPP – напряжение программирования,

6. RST – сигнал общего сброса,

7. VPD – вывод резервного питания памяти от внешнего источника,

8. XTAL – входы подключения кварцевого резонатора.

2.9. Параллельные порты ввода/вывода информации

Все четыре порта (P0-P3) предназначены для ввода или вывода информации побайтно. Каждый порт содержит управляемые регистр-защёлку, входной буфер и выходной драйвер.

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

Все выводы порта P3 могут быть использованы для реализации альтернативных функций, перечисленных в табл. 4. Эти функции могут быть задействованы путем записи 1 в соответствующие биты регистра-защёлки (P3.0-P3.7) порта P3.

Таблица 4

Альтернативные функции порта P3

Имя и назначение

Чтение. Активный сигнал низкого уровня формируется аппаратно при обращении к внешней памяти данных

Запись. Активный сигнал низкого уровня формируется аппаратно при обращении к внешней памяти данных

Вход таймера/счётчика 1 или тест-вход

Вход таймера/счётчика 0 или тест-вход

Вход запроса прерывания 1. Воспринимается сигнал низкого уровня или срез

Вход запроса прерывания 0. Воспринимается сигнал низкого уровня или срез

Выход передатчика последовательного порта в режиме UART. Выход синхронизации в режиме регистра сдвига

Вход приёмника последовательного порта в режиме UART. Ввод/вывод данных в режиме регистра сдвига

Порт 0 является двунаправленным, а порты 1-3 - квазидвунаправленными. Каждая линия портов может быть использована независимо для ввода или вывода.

По сигналу RST в регистры-защёлки всех портов автоматически записываются единицы, настраивающие их тем самым на режим ввода.

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

Обращение к портам ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным битом, произвольной комбинацией битов. При этом в тех случаях, когда порт является одновременно операндом и местом назначения результата, устройство управления автоматически реализует специальный режим, который называется “чтение-модификация-запись”. Этот режим обращения предполагает ввод сигналов не с внешних выводов порта, а из его регистра-защёлки, что позволяет исключить неправильное считывание ранее выведенной информации. Этот механизм обращения к портам реализован в командах:

Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных.

БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр.

Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы.

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

Систему команд условно можно разбить на пять групп:

Существуют следующие типы адресации операндов-источников:

  • Косвенно-регистровая адресация по сумме базового и индексного регистров

Таблица обозначений и символов, используемых в системе команд

Обозначение, символ Назначение
А Аккумулятор
Rn Регистры текущего выбранного банка регистров
r Номер загружаемого регистра, указанного в команде
direct Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255)
@Rr Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных
data8 8-битовое непосредственное данное, входящее в КОП
dataH Старшие биты (15-8) непосредственных 16-битовых данных
dataL Младшие биты (7-0) непосредственных 16-битовых данных
addr11 11-битовый адрес назначения
addrL Младшие биты адреса назначения
disp8 8-битовый байт смещения со знаком
bit Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR
a15, a14...a0 Биты адреса назначения
(Х) Содержимое элемента Х
((Х)) Содержимое по адресу, хранящемуся в элементе Х
(Х)[M] Разряд М элемента Х

+
-
*
AND
OR
XOR
/X
Операции:
сложения
вычитания
умножения
деления
логического умножения (операция И)
логического сложения (операция ИЛИ)
сложения по модулю 2 (исключающее ИЛИ)
инверсия элемента Х

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

Мнемоника Функция Флаги
Команда ACALL Абсолютный вызов подпрограммы
Сложение AC, C, OV
Сложение с переносом AC, C, OV
Команда AJMP Абсолютный переход
Логическое "И"
Логическое "И" для переменных-битов C
Сравнение и переход, если не равно C
Команда CLR A Сброс аккумулятора
Команда CLR Сброс бита C, bit
Команда CPL A Инверсия аккумулятора
Команда CPL Инверсия бита C, bit
Команда DA A Десятичная коррекция аккумулятора для сложения AC, C
Команда DEC <байт> Декремент
Команда DIV AB Деление C, OV
Команда DJNZ <байт>, <смещение> Декремент и переход, если не равно нулю
Команда INC <байт> Инкремент
Команда INC DPTR Инкремент указателя данных
Команда JB , Переход, если бит установлен
Команда JBC , Переход, если бит установлен и сброс этого бита
Команда JC Переход, если перенос установлен
Команда JMP @A+DPTR Косвенный переход
Команда JNB , Переход, если бит не установлен
Команда JNC Переход, если перенос не установлен
Команда JNZ Переход, если содержимое аккумулятора не равно нулю
Команда JZ Переход, если содержимое аккумулятора равно 0
Команда LCALL Длинный вызов
Команда LJMP Длинный переход
Переслать переменную-байт
Переслать бит данных C
Команда MOV DPTR,#data16 Загрузить указатель данных 16-битовой константой
Команда MOVC A,@A+() Переслать байт из памяти программ
Переслать во внешнюю память (из внешней памяти) данных
  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то