Основой микроконтроллера (см. рис. 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 | 8–ми битовый квазидвунаправленный порт ввода/вывода |
9 | RST | Сигнал сброса (активный уровень – высокий); Сигнал RST обнуляет: PC и большинство Регистров Специальных Функций (SFR), запрещая все прерывания и работу таймеров; выбирает Банк РОНов 0; записывает в порты Р0_Р3 "все единицы", подготавливая их на ввод; записывает код 07H в указатель стека (SP); |
10..17 | 8–ми битовый квазидвунаправленный порт ввода/вывода; после записи в соответствующий разряд "1" – выполняет дополнительные (альтернативные) функции: Вход последовательного порта – RxD; Выход последовательного порта – TxD; Вход внешнего прерывания 0 – ~INT0; Вход внешнего прерывания 1 – ~INT1; Вход таймера/счетчика 0 – Т0; Вход таймера/счетчика 1 – Т1; Выход строб. сигнала при записи в ВПД – ~ WR; Выход строб. сигнала при чтении из ВПД – ~ RD; |
|
18, 19 | X1, X2 | Выводы для подключения кварцевого резонатора или LC–контура; |
20 | GND | Общий вывод; |
21..28 | P2 | 8–ми битовый квазидвунаправленный порт ввода /вывода; или выход адреса A в режиме работы с внешней памятью (ВПП или ВПД); |
29 | PME | Строб чтения Внешней Памяти Программ, выда–ется только при обращении к внешнему ПЗУ; |
30 | ALE | Строб адреса Внешней памяти (ВПП или ВПД); |
31 | ЕА | Отключение РПП, уровень "0" на этом входе пе–реводит МК на выборку команд только из ВПП ; |
39..32 | Р0 | 8–ми битовый двунаправленный порт ввода/ вывода; при обращении к Внешней Памяти выдает адреса A (которые записываются во внешний регистр по сигналу ALE), а затем обменивается байтом синхронно с сигналом ~PME (для команд) или ~WR,~RD (для данных в ВПД), при обращении к Внешней Памяти в регистр порта Р0 записываются все единицы, разрушая хранимую там информацию; |
40 | Ucc | Вывод напряжения питания |
Переключение банков РОНов упрощает выполнение подпрограмм и обработку прерываний, т.к. не нужно пересылать в стек содержимое РОНов основной программы при вызове подпрограммы (достаточно в подпрограмме перейти в другой активный банк РОНов).
Обращение к РПД возможно с использованием косвенной или прямой байтовой адресации (прямая байтовая адресация позволяет обратиться только к первым 128-ми байтам РПД).
Расширенная область РПД (у микроконтроллеров семейства MCS-52 и последующих семейств) с адреса 128 (80h) до 255 (FFh) может адресоваться только с использованием косвенного метода адресации.
Таблица 2 – Блок Регистров Специальных Функций (s f r)
Мнемо–код | Наименование | |
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 | Регистр управления мощностью потребления |
2. ПРОГРАММНАЯ МОДЕЛЬ MCS–51
ТИПЫ КОМАНД MCS–51
Почти половина команд выполняется за 1 машинный цикл (МЦ). При частоте кварцевого генератора 12 МГц время выполнения такой команды – 1 мкс. Остальные команды выполняются за 2 машинных цикла, т.е. за 2мкс. Только команды умножения (MUL) и деления (DIV) выполняются за 4 машинных цикла.
За время одного машинного цикла происходит два обращения к Памяти Программ (внутренней или внешней) для считывания двух байтов команды или одно обращение к Внешней Памяти Данных (ВПД).
3. МЕТОДЫ (СПОСОБЫ) АДРЕСАЦИИ MCS–51
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 НЕЯВНАЯ (ВСТРОЕННАЯ) АДРЕСАЦИЯ – в коде команды содержится неявное (по умолчанию) указание на один из операндов (чаще всего на Аккумулятор).
4. ФОРМАТ СЛОВА СОСТОЯНИЯ ПРОЦЕССОРА (PSW)
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 – Резервный, содержит триггер, доступный по записи или чтению;
P – флаг паритета – является дополнением количества единичных битов в аккумуляторе до четного; формируется комбинационной схемой (программно доcтупен только по чтению).
В микроконтроллерах MCS-51 отсутствует флаг "Z". Но в командах условного перехода (JZ, JNZ) проверяется комбинационной схемой текущее (нулевое или ненулевое) содержимое Аккумулятора.
Все команды пересылок и обмена операндов могут осуществляться через Аккумулятор (см. рис. 3). Причем пересылки из/в Внешней Памяти (Памяти Программ или Памяти Данных) могут осуществляться только через Аккумулятор.
Большинство пересылок могут осуществляться также через прямоадресуемый байт (dir). Существуют даже пересылки dir – dir (см. рис. 3).
Отсутствующие пересылки из РОНа в РОН могут быть реализованы как пересылки из РОНа в прямоадресуемый байт dir (с учетом того, что РОНы расположены в начальной области Резидентной Памяти Данных, ячейки которой могут адресоваться как dir).
Команды обмена XCH позволяют пересылать байты без разрушения обоих операндов.
Арифметические команды выполняются только в Аккумуляторе. Поэтому первый операнд необходимо предварительно поместить в Аккумулятор и потом сложить или вычесть второй операнд. Результат помещается в Аккумулятор.
Команда вычитание SUBB выполняется только с заемом (т.е. из результата вычитается и флаг Сary). Поэтому для выполнения команды вычитания без заема необходимо предварительно выполнить команду очистки флага С (CLRC).
Команда умножения однобайтовых операндов – MULAB – размещает двухбайтовый (16 бит) результат: младший байт – в Аккумулятор, старший байт – в регистр В.
Результат выполнения команды деления однобайтовых операндов – DIVAB – помещается: частное – а Аккумулятор, остаток – в регистр В.
Арифметическая команда INC добавляет к выбранному операнду единицу. Арифметическая команда DEC вычитает из выбранного операнда единицу. Команда десятичной коррекции Аккумулятора (DAA) помогает складывать двоично-десятичные числа (BCD-числа) без перевода их в шестнадцатеричный формат (hex-формат). Исходные операнды должны быть обязательно в BCD-формате, т.е. в каждой тетраде одного байта находятся только числа от 0 до 9 (там не могут быть шестнадцатеричные числа: A, B, C, D, E, F). Поэтому в одном байте могут находиться числа от 00 до 99 для упакованных BCD-чисел или числа от 0 до 9 для неупакованных BCD-чисел.
Команда DA A – десятичной коррекции выполняет действия над содержимым Аккумулятора после сложения BCD-чисел в процессоре (числа складывались по законам шестнадцатеричной арифметики) следующим образом (см. пример):
· если содержимое младшей тетрады Аккумулятора больше 9 или установлен флаг вспомогательного переноса (AС = 1), то к содержимому Аккумулятора добавляется 6 (т.е. недостающие шесть цифр в hex-формате);
· если после этого содержимое старшей тетрады Аккумулятора больше 9 или установлен флаг C, то число 6 добавляется к старшей тетраде Аккумулятора.
Команду десятичной коррекции DA A не применяют после команды инкремента (INC), потому что команда инкремента не влияет (не изменяет) на флаги С и АС.
Логические команды:
Логическое "И" – ANL,
Логическое "ИЛИ" – ORL,
Логическая команда "ИСКЛЮЧАЮЩЕЕ ИЛИ" – XRL– выполняются в Аккумуляторе (как и арифметические), но имеется возможность выполнить логические команды также и в прямоадресуемом байте (dir). При этом второй операнд может быть:
В Аккумуляторе или
Непосредственный операнд в команде.
Команды вращения (RR A, RL A) и команды вращения через флаг CARY (RRC A, RLC A) циклически сдвигают содержимое Аккумулятора на 1 бит.ресылки битовых операндов осуществляются только через флаг С.
- Арифметические команды;
- Логические команды;
- Команды передачи данных;
- Команды битового процессора;
- Команды ветвления и передачи управления.
- Регистровая адресация
- Прямая адресация
- Косвенно-регистровая адресация
- Непосредственная адресация
- Косвенно-регистровая адресация по сумме базового и индексного регистров
Обозначение, символ | Назначение |
А | Аккумулятор |
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 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Все функции микроЭВМ реализуются с помощью единственной микросхемы. В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд MCS-51 , большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация ножек для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм - Maxim, Atmel, NXP и т.д. (catalog..php?page=components_list&id=39"> с.м. Поиск по параметрам) без переделки принципиальной схемы устройства и программы .
Рисунок 1. Структурная схема контроллера I8751
Структурная схема контроллера представлена на рисунке 1. и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных.
Рассмотрим подробнее назначение каждого блока. По такой схеме построены практически все представители семейства MCS-51 . Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов). Система команд всех контроллеров семейства MCS-51 содержит 111 базовых команд с форматом 1, 2 или 3 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одной микросхемы на другую.
Блок управления и синхронизации
Блок управления и синхронизации (Timing and Control) предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы.В состав блока управления входят:
- - устройство формирования временных интервалов,
- - логика ввода-вывода,
- - регистр команд,
- - регистр управления потреблением электроэнергии,
- - дешифратор команд, логика управления ЭВМ.
Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды ОЭВМ выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Обозначим частоту задающего генератора через F г. Тогда длительность машинного цикла равна 12/F г или составляет 12 периодов сигнала задающего генератора. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.
Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью дешифратора команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды.
Регистр управления потреблением (PCON) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Для варианта изготовления по технологии n-МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква "c") регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют.
Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:
- - регистров аккумулятора, регистров временного хранения TMP1 и TMP2,
- - ПЗУ констант,
- - сумматора,
- - дополнительного регистра (регистра В),
- - аккумулятора (ACC),
- - регистра состояния программ (PSW).
Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.
ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.
Параллельный восьмиразрядный сумматор представляет собой комбинационную схему с последовательным переносом, предназначенную для выполнения арифметических операций сложения, вычитания и логических операций сложения, умножения, неравнозначности и тождественности.
Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.
Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига
Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода-вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят:
- - буфер ПИП,
- - логика управления,
- - регистр управления,
- - буфер передатчика,
- - буфер приемника,
- - приемопередатчик последовательного порта,
- - регистр приоритетов прерываний,
- - регистр разрешения прерываний,
- - логика обработки флагов прерываний и схема выработки вектора.
Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1).
Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.
Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией ОЭВМ с внешними устройствами, образуя 32 линии ввода- вывода.
Устройство таймеров В базовых моделях семейства имеются два программируемых 16-битных таймера/счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий
Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.
Память программ (EPROM) предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные ПЗУ, стираемые ультрафиолетовым излучением или FLASH ПЗУ.
Регистр указателя данных (DPTR) предназначен для хранения 16-разрядного адреса внешней памяти данных или памяти программ.
Указатель стека (SP) представляет собой восьмиразрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой можно временно сохранить любую чейку памяти.
Архитектура микроконтроллеров
Понимание архитектуры микроконтроллеров является ключевым при изучении языков программирования типа ассемблер. Структура ассемблера, формат его команд, адресация операндов и т. д. полностью определяются архитектурой. Целью изучения архитектуры является:
· выявление набора доступных для программирования регистров, их функционального назначения и структуры;
· понимание организации оперативной памяти и порядка ее использования;
· знакомство с типами данных;
· изучение формата машинных команд;
· выяснение организации обработки прерываний.
Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Все функции МК реализуются с помощью единственной микросхемы. В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд, большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация выводов для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм - производителей (таких какIntel, Dallas, Atmel, Philips и т.д.) без переделки принципиальной схемы устройства и программы.
MCS-51 выполнен по Гарвардской архитектуре, где адресные пространства памяти программ и данных разделены.
Структурная схема контроллера представлена на рис.2.3 и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, последовательного интерфейса и прерываний, программного счетчика (счетчика команд), памяти данных и памяти программ.
Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. Рассмотрим подробнее назначение каждого блока. По такой схеме построены практически все представители семейства MCS-51. Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов). Система команд всех контроллеров семейства MCS-51 содержит 111 базовых команд с форматом 1, 2 или 3 байта и не изменяется при переходе от одной микросхемы к другой. Это обеспечивает прекрасную переносимость программ с одной микросхемы на другую.
Блок управления и синхронизации (Timing and Control) предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы. В состав блока управления входят:
- устройство формирования временных интервалов,
- комбинационная схема ввода-вывода,
- регистр команд,
- дешифратор команд.
Входные и выходные сигналы блока управления и синхронизации :
1 PSEN – разрешение программной памяти;
2 ALE – выходной сигнал разрешения фиксации адреса;
3 PROG – сигнал программирования;
4 EA – блокировка работы с внутренней памятью;
5 VPP – напряжение программирования;
6 RST – сигнал общего сброса.
Устройство формирования временных интервалов необходимо для синхронизации последовательности состояний ЦП, образующих машинный цикл, а также для правильной работы всех внутреннихзащелок и выходных буферов портов. Машинный цикл состоит из шести последовательныхсостояний (States) от S1 до S6, каждое из которых, в свою очередь, подразделяется на две фазы:
фазу 1 (Phase 1 - P1) и фазу 2 (Phase 2 - P2). Таким образом, машинный цикл может быть определен как последовательность временных интервалов S1P1, S1P2, S2P1,....,S6P2. Длительность фазы равна периоду следования тактовых импульсов, поэтому машинный цикл занимает 12 тактовых периодов.
Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.
Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью дешифратора команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды.
Рис 2.3. Структурная схема однокристального микроконтроллера Intel 8051
(семейство MCS-51)
Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:
- регистров временного хранения -TMP1 и TMP2,
- ПЗУ констант,
- сумматора,
- дополнительного регистра - регистра В,
- аккумулятора - ACC,
- регистра слова состояния программ (регистр флагов)- PSW .
Регистры временного хранения TMP1, TMP2 - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.
ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.
Параллельный восьмиразрядный сумматор представляет собой схему комбинационного типа с последовательным переносом, предназначенную для выполнения арифметических операций сложения, вычитания и логических операций сложения, умножения, неравнозначности и тождественности.
Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.
Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига.
Регистр состояния программ PSW (Programm Status Word) предназначен для хранения слова состояния выполняемых команд. При выполнении многих команд в ALU формируется ряд признаков операции (флагов), которые фиксируются в регистре слова состояния программы (PSW). В табл. 1 приводится перечень флагов PSW, даются их символические имена и описываются условия их формирования.
Блок прерываний и последовательного интерфейса - UART(Universal Asynchronous Receiver/Transmitter) предназначен для организации ввода - вывода последовательных потоков информации и организации системы прерывания программ.По определению прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы.
Эти действия могут носить сервисный характер, быть запросами со стороны программы пользователя на выполнение обслуживания либо быть реакцией на нештатные ситуации.
УДК 681.5, 681.325.5 (075.8)
ББК 32.973.202-018.2 я 73
Щербина А. Н. Вычислительные машины, системы и сети. Микроконтроллеры и микропроцессоры в системах управления: у чеб. пособие / А.Н. Щербина, П.А. Нечаев- СПб.: Из-во Политехн. ун-та, 2012.-226 с.
Соответствует содержанию государственного образовательного стандарта направлений подготовки и специальностей в области управления в технических системах, электроэнергетики и электротехники и содержанию примерной учебной программы дисциплины «Вычислительные машины, системы и сети».
Рассмотрены фундаментальные вопросы логической организации микропроцессорных систем на примере базовой архитектуры микроконтроллерного семейства MCS-51 фирмы Intel. Описана технология программирования микроконтроллеров на языках Ассемблер и СИ.
Может быть полезным для студентов и преподавателей высших технических заведений, специалистов по автоматизации технологических процессов и производственного оборудования, а также для инженеров-проектировщиков микропроцессорных систем.
Также соответствует содержанию государственного образовательного стандарта дисциплин «Микроконтроллеры и микропроцессоры в системах управления» и «Электронные устройства автоматики» бакалаврской, инженерной и магистерской подготовки по направлению 140400 «Электроэнергетика и электротехника».
Печатается по решению редакционно-издательского совета
Санкт-Петербургского государственного политехнического университета.
© Щербина А. Н., Нечаев П. А., 2012
© Санкт-Петербургский государственный
политехнический университет, 2012
ISBN 978-5-7422-3553-8
Введение.. 7
Глава 1. Архитектура семейства MCS51. 10
1.1 Общие характеристики 10
1.2 Структурная схема 11
1.3 Назначение выводов микроконтроллера 8051 15
1.4 Организация памяти 17
1.4.1 Память программ (ПЗУ) 18
1.4.2 Память данных (ОЗУ) 19
1.4.3 Регистры специальных функций. 20
1.4.4 Регистр флагов (PSW) 23
1.5 Устройство управления и синхронизации 26
1.6 Организация портов ввода-вывода 27
1.6.1 Общие сведения. 27
1.6.2 Альтернативные функции. 27
1.7. Таймеры / счетчики микроконтроллеров семейства 8051. 28
1.7.1. Структура таймеров-счетчиков. 28
1.7.2 Режимы работы таймеров-счетчиков. 30
1.8. Последовательный порт 32
1.8.1. Структура последовательного порта. 32
1.8.2. Регистр управления/статуса приемопередатчика SCON.. 34
1.8.3. Регистр управления мощностью PCON.. 36
1.9. Система прерываний 37
1.9.1. Структура системы прерываний. 37
1.9.2 Выполнение подпрограммы прерывания. 40
Глава 2. Особенности микроконтроллера 80C51GB.. 42
2.1 Функциональные особенности 42
2.2 Порты I/O P0-P5 43
2.2.1 Функционирование портов ввода-вывода. 43
2.2.2 Запись в порт.. 46
2.3 Особенности системы прерываний 8XC51GB.. 49
Разрешение/запрещение прерываний. 50
Управление приоритетами прерываний. 51
Внешние прерывания. 54
2.3. Узел АЦП 56
2.4. Аппаратный сторожевой таймер 61
2.5. Обнаружение сбоя тактового генератора 63
2.6. Матрица программируемых счётчиков РСА 64
2.6.1. Структура PCA.. 64
2.6.2. Регистр режима счётчика РСА (CMOD) 66
2.6.3. Регистр управления счётчика РСА (CON) 67
2.6.4. Модули сравнения/фиксации. 68
2.7. Расширенный последовательный порт 76
2.8. Таймеры/счетчики 79
Расположение выводов микроконтроллеров группы 8XC51GB.. 86
Глава 3. Программирование MK 8051GB.. 89
3.1. Программная модель 89
3.2 Типы данных 93
3.3 Способы адресации данных 93
3.4 Система команд 95
3.4.1 Общая характеристика. 95
3.4.2 Типы команд. 96
3.4.3 Типы операндов. 97
3.4.4 Команды пересылки данных микроконтроллера. 98
3.4.5 Команды арифметических операций 8051. 101
3.4.6 Команды логических операций микроконтроллера 8051. 104
3.4.7 Команды операций над битами микроконтроллера 8051. 106
3.5 Отладка программ 111
Глава 4. Язык программирования ASM-51. 112
4.2 Запись текста программы 113
4.3 Алфавит языка. 114
4.4 Идентификаторы. 115
4.5 Числа 117
4.6 Директивы 118
4.7 Реализация подпрограмм на языке ASM51 122
4.7.1 Структура подпрограммы-процедуры на языке ASM51. 122
4.7.2 Передача переменных-параметров в подпрограмму. 123
4.7.3 Реализация подпрограмм-функций на языке ASM51. 123
4.7.4 Реализация подпрограмм обработки прерываний на языке ASM51. 124
4.8 Структурное программирование на языке ассемблера. 125
4.9 Особенности трансляции многомодульных программ.. 126
4.10 Использование сегментов 128
4.10.1 Разбиение памяти МК на сегменты.. 128
4.10.2 Абсолютные сегменты памяти. 129
4.10.2 Перемещаемые сегменты памяти. 131
Глава 5. Язык программирования С-51. 134
5.1 Общая характеристика языка 134
5.3 Структура программ С-51 136
5.3. Элементы языка программирования С-51 138
5.3.1. Символы.. 138
5.3.2. Лексические единицы, разделители и использование пробелов. 141
5.3.3 Идентификаторы.. 142
5.3.4 Ключевые слова. 143
5.3.5 Константы.. 143
5.4. Выражения в операторах языка 146
программирования C-51 146
5.5. Приоритеты выполнения операций 148
5.6. Операторы языка программирования C-51 149
5.6.1. Операторы объявления. 150
5.6.2 Исполняемые операторы.. 150
5.6.3 Оператор присваивания. 151
5.6.4 Условный оператор. 151
5.6.5 Структурный оператор {}. 152
5.6.6 Оператор цикла for. 152
5.6.7 Оператор цикла с проверкой условия до тела цикла while. 153
5.6.8 Оператор цикла с проверкой условия после тела цикла do while. 154
5.6.9 Оператор break. 155
5.6.10 Оператор continue. 155
5.6.11 Оператор выбора switch. 155
5.6.12 Оператор безусловного перехода goto. 157
5.6.13 Оператор выражение. 158
5.6.14 Оператор возврата из подпрограммы return. 158
5.6.15 Пустой оператор. 158
5.7. Объявление переменных в языке программирования C-51. 159
5.7.1. Объявление переменной. 159
5.7.3 Целые типы данных. 161
5.7.4 Числа с плавающей запятой. 162
5.7.5 Переменные перечислимого типа. 162
5.7.6. Объявление массивов в языке программирования C-51. 164
5.7.7. Структуры.. 165
5.7.8. Объединения (смеси) 166
5.8. Использование указателей в языке C-51 167
5.8.1. Объявление указателей. 167
5.8.2. Нетипизированные указатели. 168
5.8.3. Память зависимые указатели. 169
5.9. Объявление новых типов переменных 169
5.10. Инициализация данных 170
5.11. Использование подпрограмм в языке программирования С-51. 170
5.11.1. Определение подпрограмм.. 171
5.11.2. Параметры подпрограмм.. 173
5.11.3. Предварительное объявление подпрограмм.. 174
5.11.4 Вызов подпрограмм.. 176
5.11.5 Рекурсивный вызов подпрограмм.. 176
5.11.6 Подпрограммы обработки прерываний. 177
5.11.7 Области действия переменных и подпрограмм.. 178
5.12. Многомодульные программы 179
Глава 6. Подготовка программ в интегрированной среде разработки Keil μVision2. 182
6.1 Создание проекта на языке ASM-51 182
6.2 Пример создания проекта на языке C для учебного контроллера в интегрированной среде разработки Keil μVision2 188
Глава 7. Описание учебного контроллера.. 199
7.1. Структура контроллера 199
7.2. Адресное пространство 200
7.2.1. Распределение памяти. 200
7.2.2 Внешняя память. 201
7.2.3. Внутренняя память данных. 202
7.3. Распределение портов ввода-вывода 202
7.4. Последовательный порт………………………………...203
7.5. Работа с ЖКИ 205
7.6. Панели контроллера…………………………………………………213
ПРИЛОЖЕНИЕ П2 СТРУКТУРА ОТЧЁТА О ЛАБРОРАТОРНОЙ РАБОТЕ……..217
Приложение П3 Коды машинных команд. 217
Список литературы... 224
Введение
В освоении специальностей, связанных с автоматизацией технологических процессов и производств, изучение микроконтроллеров является одним из важных разделов.
В мире происходит непрерывное развитие и появление все новых и новых 16- и 32-разрядных микроконтроллеров и микропроцессоров, но наибольшая доля мирового микропроцессорного рынка и по сей день остается за 8-разрядными устройствами. По всем прогнозам аналитических компаний на ближайшее время, лидирующее положение 8-разрядных микроконтроллеров на мировом рынке сохранится.
В настоящее время среди всех 8-разрядных микроконтроллеров семейство MCS-51 является несомненным лидером по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке.
Достоинства семейства MCS-51:
· архитектура, являющаяся стандартом де-факто;
· чрезвычайная широта семейства и разнообразие возможностей;
· наличие высокопроизводительных и расширенных версий процессоров;
· значительное число свободно доступных программных и аппаратурных наработок;
· легкость аппаратного программирования, в т. ч. и внутрисхемного;
· дешевизна и доступность базовых чипов;
· наличие специализированных версий контроллеров для особых условий применения
· наличие версий контроллеров с пониженным уровнем электромагнитных помех;
· широкая известность среди разработчиков старшего поколения, как в мире, так и в странах СНГ;
· поддержка архитектуры ведущими учебными заведениями мира.
И, наконец, главное преимущество: освоив базовый чип семейства, легко начнеть работать с такими вычислительными «монстрами», как микроконтроллеры Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments.
В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. На сегодняшний день существует более 200 модификаций микроконтроллеров семейства 8051, выпускаемых почти 20-ю компаниями. Каждый год появляются все новые варианты представителей этого семейства.
Основными направлениями развития являются:
· увеличение быстродействия (повышение тактовой частоты и переработка архитектуры);
· снижение напряжения питания и энергопотребления;
· увеличение объема ОЗУ и FLASH памяти на кристалле с возможностью внутрисхемного программирования;
· введение в состав периферии микроконтроллера сложных устройств типа системы управления приводами, CAN и USB интерфейсов и т.п.
Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд. Большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация ножек для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм - производителей без переделки принципиальной схемы устройства и программы.
Основными производителями разновидностей 51-го семейства в мире являются фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems и ряд других.
Характеристики аналогов микроконтроллеров семейства MCS-51 (Intel 8XC51FA, 8XC51GB, 80С152) с расширенными возможностями приведены в табл. В.1.
Таблица В.1
ОЗУ | ПЗУ | РСА | АЦП | WDT | T/C | Послед. Каналы | Особенности | |
Atmel: AT89C2051 | ||||||||
- | - | - | - | UART | Flash 2 Кб | |||
AT89C4051 | - | - | - | - | UART | Flash 4 Кб | ||
AT89S4D12 | 128K | - | - | - | UART, SPI | Flash 4 Кб | ||
DALLAS Semiconductor: DS5000FP | ||||||||
- | - | - | + | UART | Bootstrap loader | |||
DS5001FP | - | - | - | + | UART | Bootstrap loader | ||
DS8xC520 | 16K | - | - | + | 2xUART | 2 DPTR | ||
SIEMENS: C505C | ||||||||
16K | - | + | + | UART, CAN | 8 DPTR | |||
C515C | 64K | - | + | + | UART+ SSC+CAN | 4 ШИМ, 8 DPTR | ||
Philips: *89C51RA+ | ||||||||
- | + | - | + | UART | 2 DPTR, 4 ур. прер., clock out, Flash 8K | |||
P51XAG1x | 8K | - | - | + | 2 UART | |||
Intel: 8xC51RA | ||||||||
8K | - | + | + | UART | 4 уровня IRQ, clock out | |||
8XC196KC | 64K | 16K | - | + | - | UART | 3 ШИМ | |
80C196KB | 64K | 8K | - | + | - | UART | ШИМ |
Глава 1. Архитектура семейства MCS51
8-разрядные однокристальные микроконтроллеры семейства MCS-51 приобрели большую популярность у разработчиков микропроцессорных систем контроля благодаря удачно спроектированной архитектуре. Архитектура микроконтроллера – это совокупность внутренних и внешних программно-доступных аппаратных ресурсов и системы команд. Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Микроконтроллеры, выполняющие все функции микроЭВМ с помощью единственной микросхемы, получили название однокристальных ЭВМ (ОЭВМ).
Фирма Intel выпустила около 50 моделей на базе операционного ядра микроконтроллера Intel 8051. Одновременно многие другие фирмы, такие как Atmel, Philips, начали производство своих микроконтроллеров, разработанных в стандарте MCS-51.
Общие характеристики
Основные характеристики семейства:
· 8-разрядный центральный процессор (ЦП), ориентированный на управление исполнительными устройствами;
· ЦП имеет встроенную схему 8-разрядного аппаратного умножения и деления чисел;
· наличие в наборе команд большого количества операций для работы с прямоадресуемыми битами даёт возможность говорить о процессоре для работы с битовыми данными (булевом процессоре);
· внутренняя (расположенная на кристалле) память программ масочного или репрограммируемого типа, имеющая для различных кристаллов объём от 4 до 32 Кб, в некоторых версиях она отсутствует;
· не менее чем 128 байтное резидентное ОЗУ данных, которое используется для организации, регистровых банков, стека и хранения пользовательских данных;
· не менее 32-х двунаправленных интерфейсных линий (портов), индивидуально настраиваемых на ввод или вывод информации;
· два 16-битных многорежимных счетчика/таймера, используемых для подсчёта внешних событий, организации временных задержек и тактирования коммуникационного порта;
· двунаправленный дуплексный асинхронный приемопередатчик (UART), предназначенный для организации каналов связи между микроконтроллером и внешними устройствами с широким диапазоном скоростей передачи информации. Имеются средства для аппаратно-программного объединения микроконтроллеров в связанную систему;
· двухуровневая приоритетная система прерываний, поддерживающая не менее 5 векторов прерываний от 4-х внутренних и 2-х внешних источников событий;
· встроенный тактовый генератор.
Структурная схема
Структурная схема контроллера представлена на рис.1.1 и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. По такой схеме построены практически все представители семейства MCS-51. Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов).
Блок управления и синхронизации (Timing and Control) - предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы. В состав блока управления входят:
устройство формирования временных интервалов;
логика ввода-вывода;
регистр команд;
регистр управления потреблением электроэнергии;
дешифратор команд, логика управления ЭВМ.
Рис. 1.1. Структурная схема контроллера I8051.
Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды ОЭВМ выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Обозначим частоту задающего генератора через F г. Длительность машинного цикла равна 12/F г или составляет 12 периодов сигнала задающего генератора. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.
Регистр команд предназначен для записи и хранения 8-ми разрядного кода операции выполняемой команды. Код операции, с помощью дешифратора команд и логики управления ЭВМ, преобразуется в микропрограмму выполнения команды.
Регистр управления потреблением (PCON) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Для варианта изготовления по технологии n-МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква "c") регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют.
Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:
регистров аккумулятора, регистров временного хранения TMP1 и TMP2;
ПЗУ констант;
сумматора;
дополнительного регистра (регистра В);
аккумулятора (ACC);
регистра состояния программ (PSW).
Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.
ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.
Параллельный восьмиразрядный сумматор представляет собой схему комбинационного типа с последовательным переносом, предназначенную для выполнения арифметических операций сложения, вычитания и логических операций сложения, умножения, неравнозначности и тождественности.
Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.
Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига
Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода - вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят:
буфер ПИП;
логика управления;
регистр управления;
буфер передатчика;
буфер приемника;
приемопередатчик последовательного порта;
регистр приоритетов прерываний;
регистр разрешения прерываний;
логика обработки флагов прерываний и схема выработки вектора.
Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1).
Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.
Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией ОЭВМ с внешними устройствами, образуя 32 линии ввода- вывода.
Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.
Память программ (EPROM) предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные, стираемые ультрафиолетовым излучением или FLASH ПЗУ.
Регистр указателя данных (DPTR) предназначен для хранения 16 - разрядного адреса внешней памяти данных.
Указатель стека (SP) представляет собой восьмиразрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой можно временно сохранить любую ячейку памяти.
1.3 Назначение выводов микроконтроллера 8051 (рис. 1.2)
· U ss - потенциал общего провода ("земли");
· U cc - основное напряжение питания +5 В;
· X1,X2 - выводы для подключения кварцевого резонатора;
· RST - вход общего сброса микроконтроллера;
· PSEN - разрешение внешней памяти программ, выдается только при обращении к внешнему ПЗУ;
· ALE - строб адреса внешней памяти;
· ЕА - отключение внутренней программной память; уровень 0 на этом входе заставляет микроконтроллер выполнять программу только из внешнего ПЗУ; игнорируя внутреннее(если последнее имеется);
Рис. 1.2. Назначение выводов 8051.
· P1 - восьмибитный квазидвунаправленный порт ввода/вывода, каждый разряд порта может быть запрограммирован как на ввод, так и на вывод информации, независимо от состояния других разрядов;
· P2 - восьмибитный квазидвунаправленный порт, аналогичный Р1, выводы этого порта используются для выдачи адресной информации при обращении к внешней памяти программ или данных (если используется 16-битовая адресация последней). Кроме того, выводы порта используются при программировании для ввода в микроконтроллер старших разрядов адреса;
· РЗ - восьмибитный квазидвунаправленный порт, аналогичный Р1, выводы этого порта могут выполнять ряд альтернативных функций, которые используются при работе таймеров, порта последовательного ввода-вывода, контроллера прерываний, и внешней памяти программ и данных;
· P0 - мультиплексируемый восьмибитный двунаправленный порт ввода-вывода информации, через этот порт в разные моменты времени выводятся младший байт адреса и данные.
Организация памяти
Вся серия MCS-51 имеет гарвардскую архитектуру, то есть раздельные адресные пространства памяти программ и данных. Структура памяти изображена на рис. 1.3.
Объем внутренней (резидентной) памяти программ (ROM, EPROM или OTP ROM), располагаемой на кристалле, в зависимости от типа микросхемы может составлять 0 (ROMless), 4К (базовый кристалл), 8К, 16К или 32К. При необходимости пользователь может расширять память программ установкой внешнего ПЗУ. Доступ к внутреннему или внешнему ПЗУ определяется значением сигнала на выводе ЕА (External Access):
EA=V cc (напряжение питания) - доступ к внутреннему ПЗУ;
EA=V ss (потенциал земли) - доступ к внешнему ПЗУ.
Для кристаллов без ПЗУ(ROMless) вывод ЕА должен быть постоянно подключен к V ss .
Рис. 1.3. Организация памяти семейства MCS-51
Строб чтения внешнего ПЗУ - (Program Store Enable) генерируется при обращении к внешней памяти программ и является неактивным во время обращения к ПЗУ, расположенному на кристалле. Область нижних адресов памяти программ используется системой прерываний. Архитектура базовой микросхемы 8051обеспечивает поддержку пяти источников прерываний:
· двух внешних прерываний;
· двух прерываний от таймеров;
· прерывания от последовательного порта.
На рис. 1.4 изображена карта нижней области программной памяти.
Рис. 1.4. Карта нижней области программной памяти
Память программ (ПЗУ)
У микроконтроллеров семейства 8051, память программ и память данных являются самостоятельными и независимыми друг от друга устройствами, адресуемыми различными командами и управляющими сигналами.
Объем встроенной памяти программ, расположенной на кристалле микроконтроллера 8051 , равен 4 Кбайт (в семействе до 32). При обращении к внешней памяти программ все микроконтроллеры семейства 8051 всегда используют 16-разрадный адрес, что обеспечивает им доступ к 64 Кбайт ПЗУ. Микроконтроллер обращается к программной памяти при чтении кода операции и операндов (используя счетчик команд PC), а также при выполнении команд копирования байта из памяти программ в аккумулятор. При выполнении команд копирования данных адресация ячейки памяти программ, из которой будут прочитаны данные, может осуществляться с использованием как счетчика PC, так и специального двухбайтового регистра-указателя данных DPTR.
Память данных (ОЗУ)
Объем расположенной на кристалле памяти данных - 128 байт. Объем внешней памяти данных может достигать 64 Кбайт. Первые 32 байта организованы в четыре банка регистров общего назначения, обозначаемых соответственно банк 0 - банк 3. Каждый из них состоит из восьми регистров R0–R7. В любой момент программе доступен, при регистровой адресации, только один банк регистров, номер которого содержится в третьем и четвертом битах слова состояния программы PSW .
Адреса битовой области памяти микроконтроллера 8051
Таблица 1.1
Адрес байта (Hex) | Адреса битов по разрядам | |||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
2F | 7F | 7E | 7D | 7C | 7B | 7A | ||
2E | ||||||||
2D | 6F | 6E | 6D | 6C | 6B | 6A | ||
2C | ||||||||
2B | 5F | 5E | 5D | 5C | 5B | 5A | ||
2A | ||||||||
4F | 4E | 4D | 4C | 4B | 4A | |||
3F | 3E | 3D | 3C | 3B | 3A | |||
2F | 2E | 2D | 2C | 2B | 2A | |||
1F | 1E | 1D | 1C | 1B | 1A | |||
0F | 0E | 0D | 0C | 0B | 0A | |||
20h |
Оставшееся адресное пространство может конфигурироваться разработчиком по своему усмотрению: в нем можно разместить стек, системные и пользовательские области данных. Обращение к ячейкам памяти данных возможно двумя способами. Первый способ - прямая адресация ячейки памяти. В этом случае адрес ячейки является операндом соответствующей команды. Второй способ - косвенная адресация с помощью регистров-указателей R0 или R1: перед выполнением соответствующей команды в один из них должен быть занесен адрес ячейки, к которой необходимо обратиться.
Для обращения к внешней памяти данных используется только косвенная адресация с помощью регистров R0 и R1 или с помощью 16-разрядного регистра-указателя DPTR.
Часть памяти данных представляет собой битовую область, в ней имеется возможность при помощи специальных битовых команд адресоваться к каждому разряду ячеек памяти. Адрес прямо адресуемых битов может быть записан также в виде (АдресБайта).(Разряд). Соответствие этих двух способов адресации можно определить по табл. 1.1.
Wi-Fi