Основой микроконтроллера (см. рис. 1) является 8–ми битовое Арифметическо–Логическое устройство (АЛУ). Память МК имеет Гарвардскую архитектуру, т.е. логически разделена: на память программ – ПП (внутреннюю или внешнюю), адресуемую 16–ти битовым счетчиком команд (СК) и память данных – внутреннюю (Резидентная память данных – РПД) 128 (или 256) байт, а также внешнюю (Внешняя память данных – ВПД) до 64 Кбайт. Физически память программ реализована на ПЗУ (доступна только по чтению), а память данных – на ОЗУ (возможна запись и чтение данных).
Прием и выдача внешних сигналов осуществляется через 4 восьмибитовых порта Р0..Р3. При обращении к внешней памяти программ (ВПП) или памяти данных (ВПД) порты Р0 и Р2 используются как мультиплексированная внешняя шина Адрес/Данные. Линии порта Р3 могут выполнять также альтернативные функции (см. табл. 1).
16–ти битовый регистр DPTR формирует адрес ВПД или базовый адрес Памяти программ в команде преобразования Аккумулятора. Регистр DPTR может также использоваться как два независимых 8–ми битовых регистра (DPL и DPH) для хранения операндов.
8–ми битовый внутренний регистр команд (РК) принимает код выполняемой команды; этот код дешифрируется схемой управления, которая генерирует управляющие сигналы (см. рис. 1).
Обращение к регистрам специальных функций – РСФ (SFR – на рис. 1 они обведены пунктирной линией) возможно только с использованием прямой байтовой адресации в диапазоне адресов от 128 (80h) и более.
Резидентная память данных (РПД) в первых моделях микроконтроллеров семейства MCS–51 имела объем 128 байт. Младшие 32 байта РПД являются одновременно и регистрами общего назначения – РОН (4 банка по 8 РОНов). Программа может обратиться к одному из 8–ми РОНов активного банка. Выбор активного банка РОНов осуществляется программированием двух бит в регистре состояния процессора – PSW.
Таблица 1 – Назначение выводов MCS–51
№ выв. | Обозначение | Назначение |
1..8 | Р1[0..7] | 8–ми битовый квазидвунаправленный порт ввода/вывода |
9 | RST | Сигнал сброса (активный уровень – высокий); Сигнал RST обнуляет : PC и большинство Регистров Специальных Функций (SFR), запрещая все прерывания и работу таймеров; выбирает Банк РОНов 0; записывает в порты Р0_Р3 "все единицы", подготавливая их на ввод; записывает код 07H в указатель стека (SP); |
10..17 | P3[0..7] P3[0] P3[1] P3[2] P3[3] P3[4] P3[5] P3[6] P3[7] | 8–ми битовый квазидвунаправленный порт ввода/вывода; после записи в соответствующий разряд "1" – выполняет дополнительные (альтернативные) функции: Вход последовательного порта – RxD; Выход последовательного порта – TxD; Вход внешнего прерывания 0 – ~INT0; Вход внешнего прерывания 1 – ~INT1; Вход таймера/счетчика 0 – Т0; Вход таймера/счетчика 1 – Т1; Выход строб. сигнала при записи в ВПД – ~WR; Выход строб. сигнала при чтении из ВПД – ~RD; |
18, 19 | X1, X2 | Выводы для подключения кварцевого резонатора или LC–контура; |
20 | GND | Общий вывод; |
21..28 | P2[0..7] | 8–ми битовый квазидвунаправленный порт ввода /вывода; или выход адреса A[8_15] в режиме работы с внешней памятью (ВПП или ВПД); |
29 | PME | Строб чтения Внешней Памяти Программ, выда–ется только при обращении к внешнему ПЗУ; |
30 | ALE | Строб адреса Внешней памяти (ВПП или ВПД); |
31 | ЕА | Отключение РПП, уровень "0" на этом входе пе–реводит МК на выборку команд только из ВПП; |
39..32 | Р0[0..7] | 8–ми битовый двунаправленный порт ввода/ вывода; при обращении к Внешней Памяти выдает адреса A[0_7] (которые записываются во внешний регистр по сигналу ALE), а затем обменивается байтом синхронно с сигналом ~PME (для команд) или ~WR,~RD (для данных в ВПД), при обращении к Внешней Памяти в регистр порта Р0 записываются все единицы, разрушая хранимую там информацию; |
40 | Ucc | Вывод напряжения питания |
Переключение банков РОНов упрощает выполнение подпрограмм и обработку прерываний, т.к. не нужно пересылать в стек содержимое РОНов основной программы при вызове подпрограммы (достаточно в подпрограмме перейти в другой активный банк РОНов).
Обращение к РПД возможно с использованием косвенной или прямой байтовой адресации (прямая байтовая адресация позволяет обратиться только к первым 128-ми байтам РПД).
Расширенная область РПД (у микроконтроллеров семейства MCS-52 и последующих семейств) с адреса 128 (80h) до 255 (FFh) может адресоваться только с использованием косвенного метода адресации.
Таблица 2 – Блок Регистров Специальных Функций (s f r)
Адрес dir | Мнемо–код | Наименование |
0E0h | * ACC | Аккумулятор |
0F0h | * B | Регистр расширитель аккумулятора |
0D0h | * PSW | Слово состояния процессора |
0B0h | * P3 | Порт 3 |
0A0h | * P2 | Порт 2 |
90h | * P1 | Порт 1 |
80h | * P0 | Порт 0 |
0B8h | * IP | Регистр приоритетов прерываний |
0A8h | * IE | Регистр маски прерываний |
99h | SBUF | Буфер последовательного приемо–передатчика |
98h | * SCON | Регистр управления/статуса последовательного порта |
89h | TMOD | Регистр режимов таймеров/счетчиков |
88h | * TCON | Регистр управления/статуса таймеров/счетчиков |
8Dh | TH1 | Таймер 1 (старший байт) |
8Bh | TL1 | Таймер 1 (младший байт) |
8Ch | TH0 | Таймер 0 (старший байт) |
8Ah | TL0 | Таймер 0 (младший байт) |
83h | DPH | Регистр–указатель данных (DPTR) (старший байт) |
82h | DPL | Регистр–указатель данных (DPTR) (младший байт) |
81h | SP | Регистр–указатель стека |
87h | PCON | Регистр управления мощностью потребления |
ТИПЫ КОМАНД MCS–51
Почти половина команд выполняется за 1 машинный цикл (МЦ). При частоте кварцевого генератора 12 МГц время выполнения такой команды – 1 мкс. Остальные команды выполняются за 2 машинных цикла, т.е. за 2мкс. Только команды умножения (MUL) и деления (DIV) выполняются за 4 машинных цикла.
За время одного машинного цикла происходит два обращения к Памяти Программ (внутренней или внешней) для считывания двух байтов команды или одно обращение к Внешней Памяти Данных (ВПД).
1. РЕГИСТРОВАЯ АДРЕСАЦИЯ – 8–ми битовый операнд находится в РОНе выбранного (активного) банка регистров;
2 НЕПОСРЕДСТВЕННАЯ АДРЕСАЦИЯ (обозначается знаком – # ) – операнд находится во втором (а для 16–ти битового операнда и в третьем) байте команды;
3 КОСВЕННАЯ АДРЕСАЦИЯ (обозначается знаком – @ ) – операнд находится в Памяти Данных (РПД или ВПД), а адрес ячейки памяти содержится в одном из РОНов косвенной адресации (R0 или R1); в командах PUSH и POP адрес содержится в указателе стека SP; регистр DPTR может содержать адрес ВПД объемом до 64К;
4 ПРЯМАЯ БАЙТОВАЯ АДРЕСАЦИЯ – (dir) – используется для обращения к ячейкам РПД (адреса 00h…7Fh) и к регистрам специальных функций SFR (адреса 80h…0FFh);
5 ПРЯМАЯ БИТОВАЯ АДРЕСАЦИЯ – (bit) – используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках РПД по адресам 20H…2FH и к отдельно адресуемым битам регистров специальных функций (см. табл. 3 и программную модель);
6 КОСВЕННАЯ ИНДЕКСНАЯ АДРЕСАЦИЯ (обозначается знаком – @ )– упрощает просмотр таблиц в Памяти Программ, адрес ПП определяется по сумме базового регистра (PC или DPTR) и индексного регистра (Аккумулятора);
7 НЕЯВНАЯ (ВСТРОЕННАЯ) АДРЕСАЦИЯ – в коде команды содержится неявное (по умолчанию) указание на один из операндов (чаще всего на Аккумулятор).
C – флаг переноса (CARY) или заема, выполняет также функции "булевого Аккумулятора" в командах, оперирующих с битами;
AC – флаг вспомогательного (дополнительного) переноса – устанавливается в "1", если в команде сложения (ADD, ADDC) был перенос из младшей тетрады в старшую (т.е. из 3-го бита в 4-й бит);
F0 – флаг пользователя – устанавливается, сбрасывается и проверяется программно;
RS1 | RS0 | Банк | Адрес (dir) |
0 | 0 | 0 | 00h..07h |
0 | 1 | 1 | 08h..0Fh |
1 | 0 | 2 | 10h..17h |
1 | 1 | 3 | 18h..1Fh |
RS1,RS0 – Выбор банка регистров:
OV – Флаг арифметического переполнения; его значение определяется операцией "Исключающее ИЛИ" сигналов входного и выходного переносов старшего разряда АЛУ; единичное значение этого флага указывает на то, что результат арифметической операции в дополнительном коде вышел за допустимые пределы: –128…+127; при выполнении операции деления флаг OV сбрасывается, а в случае деления на ноль – устанавливается; при умножении флаг OV устанавливается, если результат больше 255 (0FFH);
Разряд PSW[1] – Резервный, содержит триггер, доступный по записи или чтению;
P – флаг паритета – является дополнением количества единичных битов в аккумуляторе до четного; формируется комбинационной схемой (программно доcтупен только по чтению).
В микроконтроллерах MCS-51 отсутствует флаг "Z". Но в командах условного перехода (JZ, JNZ) проверяется комбинационной схемой текущее (нулевое или ненулевое) содержимое Аккумулятора.