- •Вычислительные машины, системы и сети. Микроконтроллеры и микропроцессоры в системах управления
- •Содержание
- •Глава 1. Архитектура семейства mcs51 14
- •Глава 2. Особенности микроконтроллера 80c51gb 46
- •Глава 3. Программирование mk 8051gb 94
- •Глава 4. Язык программирования asm-51 117
- •Глава 5. Язык программирования с-51 139
- •Глава 6. Подготовка программ в интегрированной среде разработки Keil μVision2 187
- •Глава 7. Описание учебного контроллера 204
- •Введение
- •Глава 1. Архитектура семейства mcs51
- •1.1 Общие характеристики
- •1.2 Структурная схема
- •1.4 Организация памяти
- •1.4.1 Память программ (пзу)
- •1.4.2 Память данных (озу)
- •1.4.3 Регистры специальных функций
- •1.4.4 Регистр флагов (psw)
- •1.5 Устройство управления и синхронизации
- •1.6 Организация портов ввода-вывода
- •1.6.1 Общие сведения
- •1.6.2 Альтернативные функции
- •1.7. Таймеры / счетчики микроконтроллеров семейства 8051
- •1.7.1. Структура таймеров-счетчиков
- •1.7.2 Режимы работы таймеров-счетчиков
- •1.8. Последовательный порт
- •1.8.1. Структура последовательного порта
- •1.8.2. Регистр управления/статуса приемопередатчика scon
- •1.8.3. Регистр управления мощностью pcon
- •1.9. Система прерываний
- •1.9.1. Структура системы прерываний
- •1.9.2 Выполнение подпрограммы прерывания
- •Глава 2. Особенности микроконтроллера 80c51gb
- •2.1 Функциональные особенности
- •2.2 Порты I/o p0-p5
- •2.2.1 Функционирование портов ввода-вывода
- •2.2.2 Запись в порт
- •2.3 Особенности системы прерываний 8xc51gb
- •Разрешение/запрещение прерываний
- •Регистр iе
- •Регистр iеа
- •Управление приоритетами прерываний
- •Регистр ip
- •Регистр iрн кристаллов 8xc51gb
- •Регистр ipа кристалла 8xc51gb
- •Регистр iрна кристаллов 8xc51gb
- •Внешние прерывания
- •Регистр exicon
- •2.3. Узел ацп
- •Регистры результатов преобразований ацп
- •Регистр результатов сравнения ацп - асмр
- •Регистр результата сравнения асмр
- •Режим сравнения ацп
- •Режим запуска ацп
- •Режимы входа ацп
- •Использование ацп для меньшего количества каналов
- •Ацп в режиме микропотребления.
- •2.4. Аппаратный сторожевой таймер
- •2.5. Обнаружение сбоя тактового генератора
- •2.6. Матрица программируемых счётчиков рса
- •2.6.1. Структура pca
- •2.6.2. Регистр режима счётчика рса (cmod)
- •2.6.3. Регистр управления счётчика рса (con)
- •Регистр управления рса - ccon
- •Режим 16-битного программного таймера
- •Высокоскоростной выход - hso
- •Режим сторожевого таймера (рис. 2.22)
- •Широтно-импульсный модулятор — pwm (рис.2.23, рис.2.24)
- •2.7. Расширенный последовательный порт
- •2.8. Таймеры/счетчики
- •Таймер 0 и Таймер 1
- •Таймер 2
- •Режимы работы таймера 2
- •Режим захвата
- •Генерирование импульсов
- •Глава 3. Программирование mk 8051gb
- •3.1. Программная модель (рис. 3.1, рис. 3.2)
- •3.2 Типы данных
- •3.3 Способы адресации данных
- •3.4 Система команд
- •3.4.1 Общая характеристика
- •3.4.2 Типы команд
- •3.4.3 Типы операндов
- •3.4.4 Команды пересылки данных микроконтроллера
- •3.4.5 Команды арифметических операций 8051
- •3.4.6 Команды логических операций микроконтроллера 8051
- •3.4.7 Команды операций над битами микроконтроллера 8051
- •3.4.8. Команды передачи управления микроконтроллера 8051
- •3.5 Отладка программ
- •Глава 4. Язык программирования asm-51
- •4.2 Запись текста программы
- •4.3 Алфавит языка.
- •4.4 Идентификаторы.
- •4.5 Числа
- •4.6 Директивы
- •4.7 Реализация подпрограмм на языке asm51
- •4.7.1 Структура подпрограммы-процедуры на языке asm51
- •4.7.2 Передача переменных-параметров в подпрограмму
- •4.7.3 Реализация подпрограмм-функций на языке asm51
- •4.7.4. Реализация подпрограмм обработки прерываний на языке asm51
- •4.8 Структурное программирование на языке ассемблера
- •4.9 Особенности трансляции многомодульных программ
- •4.10 Использование сегментов
- •4.10.1 Разбиение памяти мк на сегменты (рис. 4.9)
- •4.10.2 Абсолютные сегменты памяти
- •4.10.2 Перемещаемые сегменты памяти.
- •Глава 5. Язык программирования с-51
- •5.1 Общая характеристика языка
- •5.3 Структура программ с-51
- •5.3. Элементы языка программирования с-51
- •5.3.1. Символы
- •5.3.2. Лексические единицы, разделители и использование пробелов
- •5.3.3 Идентификаторы
- •5.3.4 Ключевые слова
- •5.3.5 Константы
- •5.4. Выражения в операторах языка программирования
- •5.5. Приоритеты выполнения операций
- •5.6. Операторы языка программирования c-51
- •5.6.1. Операторы объявления
- •5.6.2 Исполняемые операторы
- •5.6.3 Оператор присваивания
- •5.6.4 Условный оператор
- •5.6.5 Структурный оператор {}
- •5.6.6 Оператор цикла for
- •5.6.7 Оператор цикла с проверкой условия до тела цикла while
- •5.6.8 Оператор цикла с проверкой условия после тела цикла do while
- •5.6.9 Оператор break
- •5.6.10 Оператор continue
- •5.6.11 Оператор выбора switch
- •5.6.12 Оператор безусловного перехода goto
- •5.6.13 Оператор выражение
- •5.6.14 Оператор возврата из подпрограммы return
- •5.6.15 Пустой оператор
- •5.7. Объявление переменных в языке программирования
- •5.7.1. Объявление переменной
- •5.7.2 Категории типов данных
- •5.7.3 Целые типы данных
- •5.7.4 Числа с плавающей запятой
- •5.7.5 Переменные перечислимого типа
- •5.7.6. Объявление массивов в языке программирования c-51
- •5.7.7. Структуры
- •5.7.8. Объединения (смеси)
- •5.8. Использование указателей в языке c-51
- •5.8.1. Объявление указателей
- •5.8.2. Нетипизированные указатели
- •5.8.3. Память зависимые указатели
- •5.9. Объявление новых типов переменных
- •5.10. Инициализация данных
- •5.11. Использование подпрограмм в языке программирования с-51
- •5.11.1. Определение подпрограмм
- •5.11.2. Параметры подпрограмм
- •5.11.3. Предварительное объявление подпрограмм
- •5.11.4 Вызов подпрограмм
- •5.11.5 Рекурсивный вызов подпрограмм
- •5.11.6 Подпрограммы обработки прерываний
- •5.11.7 Области действия переменных и подпрограмм
- •5.12. Многомодульные программы
- •Глава 6. Подготовка программ в интегрированной среде разработки Keil μVision2
- •6.1 Создание проекта на языке asm-51
- •6.2 Пример создания проекта на языке c для учебного контроллера в интегрированной среде разработки Keil μVision2
- •Глава 7. Описание учебного контроллера
- •7.1. Структура контроллера (рис. 7.1)
- •7.2. Адресное пространство
- •7.2.1. Распределение памяти (рис. 7.2)
- •7.2.2 Внешняя память
- •7.2.3. Внутренняя память данных
- •7.3. Распределение портов ввода-вывода
- •7.4. Последовательный порт
- •7.5. Работа с жки
- •Приложение п1. Список рекомендуемых лабораторных работ
- •Конкретные задания для обучаемых составляет преподаватель. Для отладки каждой из программ необходимо:
- •7. Текст программы.
- •8. Перечень выявленных в примерах ошибок
- •9. Выводы.
- •Список литературы
- •195251, Санкт-Петербург, Политехническая ул., 29.
- •194021, Санкт-Петербург, Политехническая ул., 21
3.4.7 Команды операций над битами микроконтроллера 8051
Группа состоит из 12 команд, краткое описание которых приведено в табл. 3.7. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические И (/\) и ИЛИ (\/). В качестве "логического" аккумулятора, участвующего во всех операциях с двумя операндами, выступает признак переноса С (разряд D7 PSW), в качестве операндов могут использоваться 128 бит из резидентной памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.
Операции с битами
Таблица 3.7
Название команды |
Мнемокод |
Т |
Б |
Ц |
Операция |
Сброс переноса |
CLR С |
1 |
1 |
1 |
C 0 |
Сброс бита |
CLR bit |
4 |
2 |
1 |
B 0 |
Установка переноса |
SETB С |
1 |
1 |
1 |
C 1 |
Установка бита |
SETB bit |
4 |
2 |
1 |
b 1 |
Инверсия переноса |
CPL С |
1 |
1 |
1 |
C NOT(C) |
Инверсия бита |
CPL bit |
4 |
2 |
1 |
b NOT(b) |
Логическое И бита и переноса |
ANL С, bit |
4 |
2 |
2 |
C (C) AND (b) |
Логическое И инверсии бита и переноса |
ANL С, /bit |
4 |
2 |
2 |
C (C)AND(NOT(b)) |
Логическое ИЛИ бита и переноса |
ORL С, bit |
4 |
2 |
2 |
C (C) OR (b) |
Логическое ИЛИ инверсии бита и переноса |
ORL С, /bit |
4 |
2 |
2 |
C (C) OR (NOT(b)) |
Пересылка бита в перенос |
MOV С, bit |
4 |
2 |
1 |
C (b) |
Пересылка переноса в бит |
MOV bit, С |
4 |
2 |
2 |
b (C) |
Существуют команды сброса (CLR), установки (SETB) и инверсии (CPL) бит, а также конъюнкции и дизъюнкции бита и флага переноса. Для адресации бит используется прямой восьмиразрядный адрес (bit). Косвенная адресация бит невозможна.
3.4.8. Команды передачи управления микроконтроллера 8051
Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм (табл. 3.8).
Команды передачи управления
Таблица 3.8
Название команды |
Мнемокод |
Т |
Б |
Ц |
Операция |
Длинный переход в полном объеме ПП |
LJMP ad16 |
12 |
3 |
2 |
PC ad16 |
Абсолютный переход внутри страницы в 2 Кб |
AJMP ad11 |
6 |
2 |
2 |
PC (PC) + 2, PC0-10 ad11 |
Короткий относительный переход внутри страницы в 256 байт |
SJMP rel |
5 |
2 |
2 |
PC (PC) + 2, PC (PC) +rel |
Косвенный относительный переход |
JMP @A+DPTR |
1 |
1 |
2 |
PC (A) + (DPTR) |
Переход, если аккумулятор равен нулю |
JZ rel |
5 |
2 |
2 |
PC(PC)+2, если (A)=0, то PC(PC)+rel |
Переход, если аккумулятор не равен нулю |
JNZ rel |
5 |
2 |
2 |
PC(PC)+2, если (A)≠0, то PC(PC)+rel |
Переход, если перенос равен единице |
JC rel |
5 |
2 |
2 |
PC(PC)+2, если (С)=1, то PC(PC)+rel |
Переход, если перенос равен нулю |
JNC rel |
5 |
2 |
2 |
PC(PC)+2, если (С)=0, то PC(PC)+rel |
Переход, если бит равен единице |
JB bit, rel |
11 |
3 |
2 |
PC(PC)+3, если (b)=l, то PC(PC)+rel |
Переход, если бит равен нулю |
JNB bit, rel |
11 |
3 |
2 |
PC(PC)+3, если (b)=0, то PC(PC)+rel |
Переход, если бит установлен, с последующим сбросом бита |
JBC bit, rel |
11 |
3 |
2 |
PC (PC) + 3, если (b)=1, то b 0 и PC (PC) + rel |
Декремент регистра и переход, если не нуль |
DJNZ Rn, rel |
5 |
2 |
2 |
PC (PC) + 2, Rn (Rn) - 1, если (Rn) ≠ 0, то PC (PC) + rel |
Декремент прямоадресуемого байта и переход, если не нуль |
DJNZ ad, rel |
8 |
3 |
2 |
PC (PC) + 2, ad (ad) - 1, если (ad) ≠ 0, то PC (PC) + rel |
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно |
CJNE A, ad, rel |
8 |
3 |
2 |
PC (PC) + 3, если (A) ≠ (ad), то PC (PC) + rel, если (A) < (ad), то C 1, иначе C 0 |
Сравнение аккумулятора с константой и переход, если не равно |
CJNE A, #d, rel |
10 |
3 |
2 |
PC (PC) + 3, если ≠ #d, то PC (PC) + rel, если (A) < #d, то C 1, иначе С0 |
Сравнение регистра с константой и переход, если не равно |
CJNE Rn, #d, rel |
10 |
3 |
2 |
PC (PC) + 3, если Rn ≠ #d, то PC (PC) + rel, если (Rn) < #d, то C 1, иначе С0 |
Сравнение байта в РПД с константой и переход, если не равно |
CJNE @Ri,#d,rel |
10 |
3 |
2 |
PC (PC) + 3, если ((Ri)) ≠ #d, то PC (PC) + rel, если ((Ri)) < #d, то C 1, иначе C0 |
Длинный вызов подпрограммы |
LCALL adl6 |
12 |
3 |
2 |
PC (PC) + 3, SP (SP) +1, (SP) (PC0…7), SP (SP) + 1, (SP) (PC8…15), PC ad16 |
Абсолютный вызов подпрограммы в пределах страницы в 2 Кб |
ACALL ad11 |
6 |
2 |
2 |
PC (PC) + 2, SP (SP) + 1, (SP) (PC0…7), SP (SP) + 1, (SP) (PC8…15), PC0-10 ad11 |
Возврат из подпрограммы |
RET |
1 |
1 |
2 |
PC8…15 ((SP)), SP (SP) - 1, PC0…7 ((SP)), SP (SP) – 1 |
Возврат из подпрограммы обработки прерывания |
RETI |
1 |
1 |
2 |
PC8…15 ((SP)), SP (SP) - 1, PC0…7 ((SP)), SP (SP) – 1 |
Пустая операция |
NOP |
1 |
1 |
1 |
PC (PC) + 1 |
Команда безусловного перехода LJMP (L – long – длинный) осуществляет переход по абсолютному 16-битному адресу, указанному в теле команды, т. е. команда обеспечивает переход в любую точку памяти программ.
Действие команды AJMP (А – absolute – абсолютный) аналогично команде LJMP, однако в теле команды указаны лишь 11 младших разрядов адреса. Поэтому переход осуществляется в пределах страницы размером 2Кб, при этом надо иметь в виду, что сначала содержимое счетчика команд увеличивается на 2 и только потом заменяются 11 разрядов адреса.
В отличие от предыдущих команд, в команде SJMP (S – short – короткий) указан не абсолютный, а относительный адрес перехода. Величина смещения reI рассматривается как число со знаком, а, следовательно, переход возможен в пределах – 128...+127 байт относительно адреса команды, следующей за командой SJMP.
Команда косвенного перехода JMP @A+DPTR позволяет вычислять адрес перехода в процессе выполнения самой программы.
Командами условного перехода можно проверять следующие условия:
JZ — аккумулятор содержит нулевое значение;
JNZ — аккумулятор содержит не нулевое значение
JC — бит переноса С установлен;
JNC — бит переноса С не установлен;
JB — прямо адресуемый бит равен 1
JNB — прямо адресуемый бит равен 0;
JBC — прямо адресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.
Все команды условного перехода рассматриваемых микро-ЭВМ содержат короткий относительный адрес, т. е. переход может осуществляться в пределах—128... +127 байт относительно следующей команды.
Команда DJNZ предназначена для организации программных циклов. Регистр Rn или байт по адресу ad, указанные в теле команды, содержат счетчик повторений цикла, а смещение rеl — относительный адрес перехода к началу цикла. При выполнении команды содержимое счетчика уменьшается на 1 и проверяется на 0. Если значение содержимого счетчика не равно 0, то осуществляется переход на начало цикла, в противном случае выполняется следующая команда.
Команда CJN удобна для реализации процедур ожидания внешних событий. В теле команды указаны "координаты" двух байт и относительный адрес перехода rel. В качестве двух байт могут быть использованы, например, значения содержимого аккумулятора и прямо адресуемого байта или косвенно адресуемого байта и константы. При выполнении команды значения указанных двух байт сравниваются и в случае, если они не одинаковы, осуществляется переход. Например, команда
WAIT: CJNE A, P0, WAIT
будет выполняться до тех пор, пока значения на линиях порта P0 не совпадут со значениями содержимого аккумулятора. В синтаксисе языка ASM её можно записать короче:
CJNE A, P0, $
Действие команд вызова процедур полностью аналогично действию команд безусловного перехода. Единственное отличие состоит в том, что они сохраняют в стеке адрес возврата.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой – LCALL или ACALL – была вызвана подпрограмма, так как и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата.
Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.
В заключение следует отметить, что большинство Ассемблеров допускают обобщенную мнемонику JMP – для команд безусловного перехода и CALL – для команд вызова подпрограмм. Конкретный тип команды определяется Ассемблером, исходя из "длины" перехода или вызова.
