laboratornye_2_1

МІНЕСТЕРСТВО НАУКИ І ОСВІТИ УКРАЇНИ

КРИВОРІЗЬКИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

Кафедра автоматизованого електропривода



Затверджено:
Методичною Радою Електротехнічного факультету Протокол № «__» ______2010р.





Методичні вказівки

до лабораторних робіт по курсу
«Мікроелектронні, мікропроцесорні засоби вимірювання та керування електромеханічними системами»
для студентів спеціалізації 7.092203.02














Федотов В. О.
Сьомочкін А. Б.



















Кривий Ріг
2010 р.
Методичні вказівки до лабораторних робіт по курсу «Мікроелектронні, мікропроцесорні засоби вимірювання та керування електромеханічними системами» для студентів спеціалізації 7.092203.02 /уклад. Федотов В. О., Сьомочкін А. Б. – Кривий Ріг, КТУ 2010 р./





Відповідальний за випуск:
к. т. н., доцент Каневський В. В.




Укладачі:
Сьомочкін Альберт Борисович, к. т. н., доцент
Федотов Владислав Олександрович, ст. викладач






























Структурная организация микроконтроллера i8051.
Общие характеристики.
Микроконтроллер выполнен на основе высокоуровневой n-МОП технологии. Через четыре программируемых параллельных порта ввода/вывода и один последовательный порт микроконтроллер взаимодействует с внешними устройствами.


Рис. 1. Структурная схема микроконтроллера
семейства 8051.
Основу структурной схемы (рис.1) образует внутренняя двунаправленная 8-битная шина, которая связывает между собой основные узлы и устройства микроконтроллера: резидентную память программ (RPM), резидентную память данных (RDM), арифметико-логическое устройство (ALU), блок регистров специальных функций, устройство управления (CU) и порты ввода/вывода (P0-P3).
Микроконтроллеры семейства 8051 имеют следующие аппаратные особенности:
внутреннее ОЗУ объемом 128 байт;
четыре двунаправленных побитно настраиваемых восьмиразрядных порта ввода-вывода;
два 16-разрядных таймера-счетчика;
встроенный тактовый генератор;
адресация 64 КБайт памяти программ и 64 Кбайт памяти данных;
две линии запросов на прерывание от внешних устройств;
интерфейс для последовательного обмена информацией с другими микроконтроллерами или персональными компьютерами.


Арифметико-логическое устройство
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 возможных при однобайтном коде операции.

Назначение выводов микроконтроллера 8051
Назначение выводов микроконтроллера 8051 приведено на рис. 2:
Uss потенциал общего провода ("земли");
Ucc основное напряжение литания +5 В;
X1, X2 выводы для подключения кварцевого резонатора;
RST вход общего сброса микроконтроллера;
PSEN разрешение внешней памяти программ; выдается только при обращении к внешнему ПЗУ;
ALE строб адреса внешней памяти;
ЕА отключение внутренней программной память; уровень 0 на этом входе заставляет микроконтроллер выполнять программу только внешнее ПЗУ; игнорируя внутреннее(если последнее имеется);
P1 восьми битный квази двунаправленный порт ввода/вывода: каждый разряд порта может быть запрограммирован как на ввод, так и на вывод информации, независимо от состояния других разрядов;
P2 восьми битный квази двунаправленный порт, аналогичный Р1; кроме того, выводы этого порта используются для выдачи адресной информации при обращении к внешней памяти программ или данных (если используется 16-битовая адресация последней). Выводы порта используются при программировании 8751 для ввода в микроконтроллер старших разрядов адреса:

Рис. 2. Назначение выводов 8051.
РЗ восьми битный квази двунаправленный порт, аналогичный. Р1; кроме того, выводы этого порта могут выполнять ряд альтернативных функций, которые используются при работе таймеров, порта последовательного ввода-вывода, контроллера прерываний, и внешней памяти программ и данных;
P0 восьми битный двунаправленный порт ввода-вывода информации: при работе с внешними ОЗУ и ПЗУ по линиям порта в режиме временного мультиплексирования выдается адрес внешней памяти, после чего осуществляется передача или прием данных.

Память программ (ПЗУ).
У микроконтроллеров семейства 8051, память программ и память данных являются самостоятельными и независимыми друг от друга устройствами, адресуемыми различными командами и управляющими сигналами.
Объем встроенной памяти программ, расположенной на кристалле микроконтроллера 8051 и 8751, равен 4 Кбайт. При обращении к внешней памяти программ все микроконтроллеры семейства 8051 всегда используют 16-разрадный адрес, что обеспечивает им доступ к 64 Кбайт ПЗУ. Микроконтроллер обращается к программной памяти при чтении кода операции и операндов (используя счетчик команд PC), а также при выполнении команд переноса байта из памяти программ в аккумулятор. При выполнении команд переноса данных адресация ячейки памяти программ, из которой будут прочитаны данные, может осуществляться с использованием как счетчика PC, так и специального двухбайтового регистра-указателя данных DPTR.

Память данных (ОЗУ).
Объем расположенной на кристалле памяти данных128 байт. Объем внешней памяти данных может достигать 64 Кбайт. Первые 32 байта организованы в четыре банка регистров общего назначения, обозначаемых соответственно банк 0 банк 3. Каждый из них состоит из восьми регистров R0 R7. В любой момент программе доступен только один банк регистров, номер которого содержится в третьем и четвертом битах слова состояния программы PSW.
Оставшееся адресное пространство может конфигурироваться разработчиком по своему усмотрению: в нем располагаются стек, системные и пользовательские области данных. Обращение к ячейкам памяти данных возможно двумя способами. Первый способ прямая адресация ячейки памяти. В этом случае адрес ячейки является операндом соответствующей команды. Второй способ косвенная адресация с помощью регистров R0 или R1: перед выполнением соответствующей команды в один из них должен быть занесен адрес ячейки, к которой необходимо обратиться.
Для обращения к внешней памяти данных используется только косвенная адресация с помощью регистров R0 и R1 или с помощью 16-разрядного регистра-указателя DPTR. Он относится к группе регистров специальных функций, и с его помощью можно адресовать все 64 Кбайта внешней памяти.
Часть памяти данных представляет собой так называемую битовую область, в ней имеется возможность при помощи специальных битовых команд адресоваться к каждому разряду ячеек памяти. Адрес прямо адресуемых битов может быть записан либо в виде (Адрес Байта ).(Разряд), например выражение 21.3 означает третий разряд ячейки памяти с адресом 21H, либо в виде абсолютного битового адреса. Соответствие этих двух способов адресации можно определить по таблице 1.
Таблица 1.
Адрес байта
Адреса битов по разрядам

Adr
D7
D6
D5
D4
D3
D2
D1
D0

2FH
7F
7E
7D
7C
7B
7A
79
78

2EH
77
76
75
74
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
Адрес прямо адресуемых битов может быть записан либо в виде выражения (Адрес Байта ).(Разряд), например выражение 21.3 означает адрес третьего разряда ячейки памяти с адресом 21H, либо в виде абсолютного битового адреса, который для данного бита равен (см. таблицу 1) 0B.

Регистры специальных функций.
Таблица 2.
Адрес байта
Адреса битов по разрядам
Имя регистра

Adr
D7
D6
D5
D4
D3
D2
D1
D0
Name

F0H
F7
F6
F5
F4
F3
F2
F1
F0
B





E0H
E7
E6
E5
E4
E3
E2
E1
E0
ACC





D0H
D7
D6
D5
D4
D3
D2
D1
D0
PSW



·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·Адрес прямо адресуемых битов может быть записан либо в виде выражения (Название Регистра ).(Разряд), например выражение SCON.3 означает адрес третьего разряда регистра SCON, либо в виде абсолютного битового адреса, который для данного бита равен (см. таблицу) 9B. Кроме того, некоторые биты управляющих регистров имеют собственные названия, так например данный бит имеет название TB8.

Регистры специальных функций.
К адресному пространству памяти данных примыкает адресное пространство регистров специальных функций SFR (Special Function Register).
Адреса, по которым расположены эти регистры, приведены в таблице 3.
Регистры, символ которых отмечен знаком (*), допускают адресацию своих отдельных бит при использовании команд из группы команд операций над битами.
Регистры занимают только часть 128-байтового адресного пространства. Те ячейки памяти с адресами 80H-0FFH, которые не заняты регистрами, физически отсутствуют, на кристаллах микроконтроллеров семейства 8051 при обращении к ним можно прочитать лишь код команды возврата.
Регистры специальных функций управляют работой блоков, входящих в микроконтроллер.
Регистры-защелки SFR параллельных портов P0...P3 - служат для ввода-вывода информации.
Две регистровые пары с именами TH0, TL0 и TH1, TL1 представляют собой регистры, двух программно-управляемых 16-битных таймеров-счетчиков.
Режимы таймеров-счетчиков задаются с использованием регистра TMOD, а управление ими осуществляется с помощью регистра TCON.
Для управления режимами энергопотребления микро-ЭВМ используется регистр PCON.
Регистры IP и IE управляют работой системы прерываний микро-ЭВМ.

Таблица 3.
Адрес
Символ
Наименование

0Е0Н
*АСС
Аккумулятор (Accumulator)

0F0H

Регистр расширитель аккумулятора (Multiplication Register)

0D0H
*PSW
Слово состояния программы (Program Status Word)

080Н
*Р0
Порт 0 (SFR РО)

090Н
*Р1
Порт1 (SFRP1)

0А0Н
*Р2
Порт 2 (SFR P2)

0В0Н
*РЗ
Порт 3 (SFR РЗ)

081Н
SP
Регистр указатель стека (Stack Pointer)

083Н
DPH
Старший байт регистра указателя данных DPTR (Data Pointer High)

082Н
DPL
Младший байт регистра указателя данных DPTR (Data Pointer Low)

08СН
ТНО
Старший байт таймера 0 0

08АН
TLO
Младший байт таймера 0 0

08DH
ТН1
Старший байт таймера 1 0

08ВН
TL1
Младший байт таймера 1 0

089Н
TMOD
Регистр режимов таймеров счетчиков (Timer/Counter Mode Control Register)

088Н
TCON
Регистр управления статуса таймеров (Timer/Counter Control Register)

0В8Н
*IP
Регистр приоритетов (Interrupt Priority Control Register)

0А8Н
*IE
Регистр маски прерывания (Interrupt Enable Register)

087Н
PCON
Регистр управления мощностью (Power Control Register)

098Н
*SCON
Регистр управления приемопередатчиком (Serial Port Control Register)

099Н
SBUF
Буфер приемопередатчика (Serial Data Buffer)


регистры SBUF и SCON работой приемопередатчика последовательного порта.
Регистр-указатель стека SP в микро-ЭВМ рассматриваемого семейства восьми битный. Он может адресовать любую область внутренней памяти данных. В отличие от микропроцессора КР580ВМ80, у микро-ЭВМ семейства 8051 стек «растет вверх», т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н.
Регистр-указатель данных DPTR чаще всего используют для фиксации 16-битного адреса в операциях обращения к внешней памяти программ и данных. С точки зрения программиста он может выступать как в виде одного 16-битного регистра, так и в виде двух независимых регистров DPL и DPH
Аккумулятор (АСС) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п. В распоряжении пользователя имеются 8 регистров общего назначения R0–R7 одного из четырёх возможных банков. При выполнении многих команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре PSW.
Регистр В используется как источник и как приемник при операциях умножения и деления, обращение к нему, как к регистру SFR, производится аналогично аккумулятору.
При выполнении ряда команд в арифметико-логическом устройстве (АЛУ) формируются признаки операций флаги, которые фиксируются в регистре PSW.

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

Таблица 4.
Символ
Позиция
Имя и назначение

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

-
PSW.1
Не используется.

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

RS0-RS1
PSW.3 PSW.4
Биты выбора используемого банка регистров. Могут быть изменены программным путем.
RS0
RS1
Банк
Граница адресов ОЗУ

0
0
0
00H-07H

1
0
1
08H-0FH

0
1
2
10H-17H

1
1
3
18H-1FH



F0
PSW.5
Флаг пользователя. Может быть установлен, сброшен или проверен программой пользователя.

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

C
PSW.7
Флаг переноса. Устанавливается и сбрасывается как аппаратурно, так и программным путем.


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

Устройство управления и синхронизации.
Кварцевый резонатор, подключаемый к внешним выводам микроконтроллера, управляет работой внутреннего генератора, который в свою очередь формирует сигналы синхронизации. Устройство управления (CU) на основе сигналов синхронизации формирует машинный цикл фиксированной длительности, равной 12 периодам резонатора. Большинство команд микроконтроллера выполняется за один машинный цикл. Некоторые команды, оперирующие с 2-байтными словами или связанные с обращением к внешней памяти, выполняются за два машинных цикла. Только команды деления и умножения требуют четырех машинных циклов. На основе этих особенностей работы устройства управления производится расчёт времени исполнения прикладных программ.
На схеме микроконтроллера к устройству управления примыкает регистр команд (IR). В его функцию входит хранение кода выполняемой команды.
Входные и выходные сигналы устройства управления и синхронизации:
PSEN – разрешение программной памяти,
ALE – выходной сигнал разрешения фиксации адреса,
PROG – сигнал программирования,
EA – блокировка работы с внутренней памятью,
VPP – напряжение программирования,
RST – сигнал общего сброса,
VPD – вывод резервного питания памяти от внешнего источника,
XTAL – входы подключения кварцевого резонатора.

Система команд микроконтроллеров семейства 8051.
Микро-ЭВМ семейства 8051 являются типичными микропроцессорными устройствами с архитектурой SISC - со стандартным набором команд. Поэтому их система команд довольно обширна и включает в себя 111 основных команд. Их длина – один, два или три байта, причем большинство из них (94%) – одно- или двухбайтные. Все команды выполняются за один или два машинных цикла (соответственно 1 или 2 мкс при тактовой частоте 12 МГц), исключение – команды умножения и деления, которые выполняются за четыре машинных цикла (4 мкс). Микро-ЭВМ семейства 8051 используют прямую, непосредственную, косвенную и неявную, адресацию данных.
В качестве операндов команд микро-ЭВМ семейства 8051 могут использовать отдельные биты, четырехбитные цифры, байты и двухбайтные слова.
Набор команд семейства 8051 имеет несколько особенностей, связанных с типичными функциями выполняемыми микроконтроллерами - управлением, для которого типичным является оперирование с одноразрядными двоичными сигналами, большое число операций ввода выводи и ветвлений программы.


Рис. 3. Карты адресов отдельных бит в резидентной памяти
данных и в блоке регистров специальных функций.

Наиболее существенная особенность системы команд рассматриваемых микро ЭВМ это возможность адресации отдельных бит в резидентной памяти данных. Кроме того, некоторые регистры блока регистров специальных функций также допускают адресацию отдельных бит.

Типы команд
Всего микро-ЭВМ выполняют 13 типов команд, они приведены в таблице. Как следует из нее, первый байт команды всегда содержит код операции (КОП), а второй и третий (если они присутствуют в команде) – адреса операндов или их непосредственные значения.
Таблица 5.
Тип команды
Первый байт D7...D0
Второй байт D7...D0
Третий байт D7...D0

тип 1
коп



тип 2
коп
#d


тип 3
коп
ad


тип 4
коп
bit


тип 5
коп
rel


тип 6
коп
а7...a0


тип 7
коп
ad
#d

тип 8
коп
ad
rel

тип 9
коп
ads
add

тип 10
коп
#d
rel

тип 11
коп
bit
rel

тип 12
коп
ad16h
ad16l

тип 13
коп
#d16h
#d16l

Состав операндов включает в себя операнды четырёх типов: биты, 4-битные цифры, байты и 16-битные слова.
Микроконтроллер имеет 128 программно-управляемых флагов пользователя. Имеется также возможность адресации отдельных битов блока регистров специальных функций и портов. Для адресации битов используется прямой 8-битный адрес (bit). Косвенная адресация битов невозможна. Карты адресов отдельных битов представлены на рис. 6 .
Четырёхбитные операнды используются только при операциях обмена SWAP и XCHD.
Восьмибитным операндом может быть ячейка памяти программ (ПП) или данных (резидентной (РПД) или внешней (ВПД)), константа (непосредственный операнд), регистры специальных функций, а также порты ввода/вывода. Порты и регистры специальных функций адресуются только прямым способом. Байты памяти могут адресоваться также и косвенным образом через адресные регистры R0, R1, DPTR и PC.
Двухбайтные операнды - это константы и прямые адреса, для представления которых используются второй и третий байты команды.

Группы команд.
Система команд семейства MCS-51 содержит 111 базовых команд, которые по функциональному признаку можно подразделить на пять:
пересылки данных;
арифметических операций;
логических операций;
операций над битами;
передачи управления.
Формат команд - одно-, двух- и трехбайтовый, причем большинство команд (94) имеют формат один или два байта. Первый байт любых типа и формата всегда содержит код операции, второй и третий байты содержат либо адреса операндов, либо непосредственные операнды.
Состав операндов включает в себя операнды четырех типов: биты, ниблы (4 разряда), байты и 16-битные слова. Время исполнения команд составляет 1, 2 или 4 машинных цикла. При тактовой частоте 12 мГц длительность машинного цикла составляет 1 мкс, при этом 64 команды исполняются за 1 мкс, 45 команд - за 2 мкс и 2 команды (умножение и деление) - за 4 мкс.
В таблице 6 приведены мнемоника и функции команд микроконтроллеров семейства MCS-51.
Таблица 6.
Мнемоника
Функция команды

ADD
Сложение с аккумулятором

ADDC
Сложение с учетом переноса

SUBB
Вычитание из аккумулятора

INC
Инкремент

DEC
Декремент

MUL
Умножение

DIV
Деление

DA
Двоично-десятичная коррекция аккумулятора

ANL
Логическое И

ORL
Логическое ИЛИ

XRL
Исключающее ИЛИ

CLR
Очистка аккумулятора или бита

CPL
Инверсия аккумулятора или бита

RL
Сдвиг аккумулятора влево

RLC
Сдвиг аккумулятора влево через перенос

RR
Сдвиг аккумулятора вправо

RRC
Сдвиг аккумулятора вправо через перенос

SWAP
Перестановка тетрад аккумулятора

MOV
Пересылка

MOVC
Пересылка связанного байта в аккумулятор

MOVX

Пересылка байта из внешней памяти или во внешнюю память

PUSH
Сохранение в стеке

POP
Извлечение из стека

XCH
Обмен информацией

XCHD

Обмен младшими тетрадами между ячейкой памяти и аккумулятором

SETB
Установка бита

JC
Переход, если есть перенос

JNC
Переход, если нет переноса

JB
Переход, если бит установлен

JNB
Переход, если бит не установлен

JBC
Переход, если бит установлен, и очистка этого бита

ACALL
Короткий переход к подпрограмме с возвратом

LCALL
Длинный переход к подпрограмме с возвратом

RET
Возврат из подпрограммы

RETI
Возврат из прерывания

AJMP
Короткий переход без возврата

LJMP
Длинный переход без возврата

SJMP
Короткий переход со смещением

JMP
Переход относительно указателя данных

JZ
Переход, если аккумулятор равен нулю

JNZ
Переход, если аккумулятор не равен нулю

CJNE
Переход, если не равно

DJNZ
Декремент и переход, если не равно нулю

NOP
Нет операции


В таблице 7 приведены инструкции, влияющие на установку флагов микроконтроллера.
Таблица 7.
Мнемоника
Флаги


С
OV
AC

ADD
+
+
+

ADDC
+
+
+

SUBB
+
+
+

MUL
0
+


DIV
0
+


DA
+



RRC
+



RLC
+



SETB
1



CLR C
0



CPL C
+



ANL C, bit
+



ANL C, /bit




ORL C, bit
+



ORL C, /bit
+



MOV C, bit
+



CJNE
+




Способы адресации операндов.
Набор команд MCS-51 поддерживает следующие режимы адресации.
Прямая адресация (Direct Addressing).Операнд определяется 8-битным адресом в инструкции. Эта адресация используется только для внутренней памяти данных и регистров SFR.
Косвенная адресация (Indirect Addressing).В этом случае инструкция адресует регистр, содержащий адрес операнда. Данный вид адресации может применяться при обращении как к внутреннему, так и внешнему ОЗУ. Для указания 8-битных адресов могут использоваться регистры R0 и R1 выбранного регистрового банка или указатель стека SP.
Для 16-битной адресации используется только регистр "указатель данных" (DPTR - Data Pointer).
Регистровая адресация (Register Instruction).Данная адресация применяется для доступа к регистрам R0+R7 выбранного банка. Команды с регистровой адресацией содержат в байте кода операции трехбитовое поле, определяющее номер регистра. Выбор одного из четырех регистровых банков осуществляется программированием битов селектора банка (RS1, RS0) в PSW.
Непосредственная адресация (Immediate constants).Операнд содержится непосредственно в поле команды вслед за кодом операции и может занимать один или два байта (data8, data16).
Индексная адресация (Indexed Addressing).Индексная адресация используется при обращении к памяти программ и только при чтении. В этом режиме осуществляется просмотр таблиц в памяти программ. 16-битовый регистр (DPTR или PC) указывает базовый адрес требуемой таблицы, а аккумулятор указывает на точку входа в нее. Адрес элемента таблицы находится сложением базы с индексом (содержимым аккумулятора).
Другой тип индексной адресации применяется в командах "перехода по выбору" (Case Jump). При этом адрес перехода вычисляется как сумма указателя базы и аккумулятора.
Неявная адресация (Register-Specific Instructions).Некоторые инструкции используют индивидуальные регистры (например, операции с аккумулятором, DPTR), при этом данные регистры не имеют адреса, указывающего на них; это заложено в код операции.

Обозначения, используемые при описании команд.
Rn (n = 0, 1,..., 7) – регистр общего назначения в выбранном банке регистров;
@Ri(i= 0, 1) – регистр общего назначения в выбранном банке регистров, используемый в качестве регистра косвенного адреса;
ad – адрес прямоадресуемого байта;
ads – адрес прямо адресуемого байта-источника;
add – адрес прямо адресуемого байта-получателя;
ad11 – 11-разрядный абсолютный адрес перехода;
ad16 – 16-разрядный абсолютный адрес перехода;
rel – относительный адрес перехода;
#d – непосредственный операнд;
#d16 – непосредственный операнд (2 байта);
bit – адрес прямо адресуемого бита;
/bit – инверсия прямо адресуемого бита;
А - аккумулятор;
РС – счетчик команд;
DPTR – регистр указатель данных;
( ) – содержимое ячейки памяти или регистра,

Команды пересылки данных.
Эта группа представлена 28 командами, их краткое описание приведено в таблице, где также указаны тип команды (Т) в соответствии с таблицей, ее длина в байтах (Б) и время выполнения в машинных циклах (Ц).
Таблица 8.
Название команды
Мнемокод
КОП
Т
Б
Ц
Операция

Пересылка в аккумулятор из регистра (n=0ч7)
MOV A, Rn
11101rrr
1
1
1
(A) (Rn)

Пересылка в аккумулятор прямоадресуемого байта
MOV A, ad
11100101
3
2
1
(A) (ad)

Пересылка в аккумулятор байта из РПД (i=0,1)
MOV A, @Ri
1110011i
1
1
1
(A) ((Ri))

Загрузка в аккумулятор константы
MOV A, #d
01110100
2
2
1
(A) #d

Пересылка в регистр из аккумулятора
MOV Rn, A
11111rrr
1
1
1
(Rn) (A)

Пересылка в регистр прямоадресуемого байта
MOV Rn, ad
10101rrr
3
2
2
(Rn) (ad)

Загрузка в регистр константы
MOV Rn, #d
01111rrr
2
2
1
(Rn) #d

Пересылка по прямому адресу аккумулятора
MOV ad, A
11110101
3
2
1
(ad) (A)

Пересылка по прямому адресу регистра
MOV ad, Rn
10001rrr
3
2
2
(ad) (Rn)

Пересылка прямоадресуемого байта по прямому адресу
MOV add, ads
10000101
9
3
2
(add) (ads)

Пересылка байта из РПД по прямому адресу
MOV ad, @Ri
1000011i
3
2
2
(ad) ((Ri))

Пересылка по прямому адресу константы
MOV ad, #d
01110101
7
3
2
(ad) #d

Пересылка в РПД из аккумулятора
MOV @Ri, A
1111011i
1
1
1
((Ri)) (A)

Пересылка в РПД прямоадресуемого байта
MOV @Ri, ad
0110011i
3
2
2
((Ri)) (ad)

Пересылка в РПД константы
MOV @Ri, #d
0111011i
2
2
1
((Ri)) #d

Загрузка указателя данных
MOV DPTR, #d16
10010000
13
3
2
(DPTR) #d16

Пересылка в аккумулятор байта из ПП
MOVC A, @A+DPTR
10010011
1
1
2
(A) ((A) +(DPTR))

Пересылка в аккумулятор байта из ВПД
MOVX A, @Ri
1110001i
1
1
2
(A) ((Ri))

Пересылка в аккумулятор байта из расширенной ВПД
MOVX A,@DPTR
11100000
1
1
2
(A) ((DPTR))

Пересылка в ВПД из аккумулятора
MOVX @Ri, A
1111001i
1
1
2
((Ri)) (A)

Пересылка в расширенную ВПД из аккумулятора
MOVX @DPTR,A
11110000
1
1
2
((DPTR)) (A)

Загрузка в стек
PUSH ad
11000000
3
2
2
(SP) (SP) + 1, ((SP)) (ad)

Извлечение из стека
POP ad
11010000
3
2
2
(ad) (SP), (SP) (SP) - 1

Обмен аккумулятора с регистром
XCH A, Rn
11001rrr
1
1
1
(A) (Rn)

Обмен аккумулятора с прямоадресуемым байтом
XCH A, ad
11000101
3
2
1
(A) (ad)

Обмен аккумулятора с байтом из РПД
XCH A, @Ri
1100011i
1
1
1
(A) ((Ri))

Обмен младших тетрад аккумулятора и байта РПД
XCHD A, @Ri
1101011i
1
1
1
(A03) ((Ri)03)


Команды арифметических операций.
В данную группу входят 24 команды, краткое описание которых приведено в таблице. Из нее следует, что микро-ЭВМ выполняет достаточно широкий набор команд для организации обработки целочисленных данных, включая команды умножения и деления.
Таблица 9.
Название команды
Мнемокод
КОП
Т
Б
Ц
Операция

Сложение аккумулятора с регистром (n=0ч7)
ADD A, Rn
00l01rrr
1
1
1
(A) (A) + (Rn)

Сложение аккумулятора с прямоадресуемым байтом
ADD A, ad
00100101
3
2
1
(A) (A) + (ad)

Сложение аккумулятора с байтом из РПД (i = 0,1)
ADD A, @Ri
0010011i
1
1
1
(A) (A) + ((Ri))

Сложение аккумулятора с константой
ADD A, #d
00100100
2
2
1
(A) (A) + #d

Сложение аккумулятора с регистром и переносом
ADDC A, Rn
00111rrr
1
1
1
(A) (A) + (Rn) + (C)

Сложение аккумулятора с прямоадресуемым байтом и переносом
ADDC A, ad
00110101
3
2
1
(A) (A) + (ad) + (C)

Сложение аккумулятора с байтом из РПД и переносом
ADDC A, @Ri
0011011i
1
1
1
(A) (A) + ((Ri)) + (C)

Сложение аккумулятора с константой и переносом
ADDC A, #d
00110100
2
2
1
(A) (A) + # d + (C)

Десятичная коррекция аккумулятора
DA A
11010100
1
1
1
Если (А03)>9 или ((AC)=1),то(А03) (А0З) + 6, затем если (А47) >9 или ((С)=1), то (А47) (А47) + 6

Вычитание из аккумулятора регистра и заёма
SUBB A, Rn
10011rrr
1
1
1
(A) (A) - (C) - (Rn)

Вычитание из аккумулятора прямоадресуемого байта и заема
SUBB A, ad
10010101
3
2
1
(A) (A) - (C) - ((ad))

Вычитание из аккумулятора байта РПД и заема
SUBB А, @Ri
1001011i
1
1
1
(A) (A) - (C) - ((Ri))

Вычитание из аккумулятора константы и заема
SUBB А, d
10010100
2
2
1
(A) (A) - (C) - #d

Инкремент аккумулятора
INC А
00000100
1
1
1
(A) (A) + 1

Сложение аккумулятора с регистром (n=0ч7)
ADD A, Rn
00l01rrr
1
1
1
(A) (A) + (Rn)

Сложение аккумулятора с прямоадресуемым байтом
ADD A, ad
00100101
3
2
1
(A) (A) + (ad)

Сложение аккумулятора с байтом из РПД (i = 0,1)
ADD A, @Ri
0010011i
1
1
1
(A) (A) + ((Ri))

Сложение аккумулятора с константой
ADD A, #d
00100100
2
2
1
(A) (A) + #d

Сложение аккумулятора с регистром и переносом
ADDC A, Rn
00111rrr
1
1
1
(A) (A) + (Rn) + (C)

Сложение аккумулятора с прямоадресуемым байтом и переносом
ADDC A, ad
00110101
3
2
1
(A) (A) + (ad) + (C)

Сложение аккумулятора с байтом из РПД и переносом
ADDC A, @Ri
0011011i
1
1
1
(A) (A) + ((Ri)) + (C)

Сложение аккумулятора с константой и переносом
ADDC A, #d
00110100
2
2
1
(A) (A) + # d + (C)

Десятичная коррекция аккумулятора
DA A
11010100
1
1
1
Если (А03)>9 или ((AC)=1),то(А03) (А0З) + 6, затем если (А47) >9 или ((С)=1), то (А47) (А47) + 6

Вычитание из аккумулятора регистра и заёма
SUBB A, Rn
10011rrr
1
1
1
(A) (A) - (C) - (Rn)

Вычитание из аккумулятора прямоадресуемого байта и заема
SUBB A, ad
10010101
3
2
1
(A) (A) - (C) - ((ad))

Вычитание из аккумулятора байта РПД и заема
SUBB А, @Ri
1001011i
1
1
1
(A) (A) - (C) - ((Ri))

Инкремент аккумулятора
INC А
00000100
1
1
1
(A) (A) + 1

Инкремент регистра
INC Rn
00001rrr
1
1
1
(Rn) (Rn) + 1

Инкремент прямоадресуемого байта
INC ad
00000101
3
2
1
(ad) (ad) + 1

Инкремент байта в РПД
INC @Ri
0000011i
1
1
1
((Ri)) ((Ri)) + 1

Инкремент указателя данных
INC DPTR
10100011
1
1
2
(DPTR ) (DPTR) + 1

Декремент аккумулятора
DEC A
00010100
1
1
1
(A) (A) – 1

Декремент регистра
DEC Rn
00011rrr
1
1
1
(Rn) (Rn) – 1

Декремент прямоадресуемого байта
DEC ad
00010101
3
2
1
(ad) (ad) – 1

Декремент байта в РПД
DEC @Ri
0001011i
1
1
1
((Ri)) ((Ri)) - 1

Умножение аккумулятора на регистр В
MUL AB
10100100
1
1
4
(B)(A) (A)*(В)

Деление аккумулятора на регистр В
DIV AB
10000100
1
1
4
(B).(A) (A)/(В)


По результату выполнения команд ADD, ADDC, SUBB, MUL и DIV устанавливаются флаги PSW, структура которых приведена в таблице.
Флаг С устанавливается при переносе из разряда D7, т. е. в случае, если результат не помещается в восемь разрядов; флаг АС устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DAA.
Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки чисел со знаком.
Наконец, флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р = 1, в противном случае Р = 0.

Команды логических операций.
В этой группе 25 команд, их краткое описание приведено в таблице. Нетрудно видеть, что эти команды позволяют выполнять операции над байтами: логическое И (/\), логическое ИЛИ (\/), исключающее ИЛИ ((+)), инверсию (NOT), сброс в нулевое значение и сдвиг.
Таблица 10.
Название команды
Мнемокод
КОП
Т
Б
Ц
Операция

Логическое И аккумулятора и регистра
ANL A, Rn
01011rrr
1
1
1
(A) (A) AND (Rn)

Логическое И аккумулятора и прямоадресуемого байта
ANL A, ad
01010101
3
2
1
(A) (A) AND (ad)

Логическое И аккумулятора и байта из РПД
ANL A, @Ri
0101011i
1
1
1
(A) (A) AND ((Ri))

Логическое И аккумулятора и константы
ANL A, #d
01010100
2
2
1
(A) (A) AND #d

Логическое И прямоадресуемого байта и аккумулятора
ANL ad, A
01010010
3
2
1
(ad) (ad) AND (A)

Логическое И прямоадресуемого байта и константы
ANL ad, #d
01010011
7
3
2
(ad) (ad) AND #d

Логическое ИЛИ аккумулятора и регистра
ORL A, Rn
01001rrr
1
1
1
(A) (A) OR (Rn)

Логическое ИЛИ аккумулятора и прямоадресуемого байта
ORL A, ad
01000101
3
2
1
(A) (A) OR (ad)

Логическое ИЛИ аккумулятора и байта из РПД
ORL A, @Ri
0100011i
1
1
1
(A) (A) OR ((Ri))

Логическое ИЛИ аккумулятора и константы
ORL A, #d
01000100
2
2
1
(A) (A) OR #d

Логическое ИЛИ прямоадресуемого байта и аккумулятора
ORL ad, A
01000010
3
2
1
(ad) (ad) OR (A)

Логическое ИЛИ прямоадресуемого байта и константы
ORL ad, #d
01000011
7
3
2
(ad) (ad) OR #d

Исключающее ИЛИ аккумулятора и регистра
XRL A, Rn
01101rrr
1
1
1
(A) (A) XOR (Rn)

Исключающее ИЛИ аккумулятора и прямоадресуемого байта
XRL A, ad
01100101
3
2
1
(A) (A) XOR (ad)

Исключающее ИЛИ аккумулятора и байта из РПД
XRL A, @Ri
0110011i
1
1
1
(A) (A) XOR ((Ri))

Исключающее ИЛИ аккумулятора и константы
XRL A, #d
01100100
2
2
1
(A) (A) XOR #d

Исключающее ИЛИ прямоадресуемого байта и аккумулятора
XRL ad, A
01100010
3
2
1
(ad) (ad) XOR (A)

Исключающее ИЛИ прямоадресуемого байта и константы
XRL ad, #d
01100011
7
3
2
(ad) (ad) XOR #d

Сброс аккумулятора
CLR A
11100100
1
1
1
(A) 0

Инверсия аккумулятора
CPL A
11110100
1
1
1
(A) NOT(A)

Сдвиг аккумулятора влево циклический
RL A
00100011
1
1
1
(An+1) (An), n=0ч6, (A0) (A7)

Сдвиг аккумулятора влево через перенос
RLC A
00110011
1
1
1
(An+1) (An), n=0ч6 (A0) (C), (C) (A7)

Сдвиг аккумулятора вправо циклический
RR A
00000011
1
1
1
(An) (An+1), n=0ч6, (A7) (A0)

Сдвиг аккумулятора вправо через перенос
RRC A
00010011
1
1
1
(An) (An+1), n=0ч6 (A7) (C), (C) (A0)

Обмен местами тетрад в аккумуляторе
SWAP A
11000100
1
1
1
(A03) (A47)


Команды операций над битами.
Группа состоит из 12 команд, краткое описание которых приведено в таблице. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические И (/\) и ИЛИ (\/). В качестве "логического" аккумулятора, участвующего во всех операциях с двумя операндами, выступает признак переноса С (разряд D7 PSW), в качестве операндов могут использоваться 128 бит из резидентной памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.
Таблица 11.
Название команды
Мнемокод
КОП
Т
Б
Ц
Операция

Сброс переноса
CLR С
11000011
1
1
1
(C) 0

Сброс бита
CLR bit
11000010
4
2
1
(b) 0

Установка переноса
SETB С
11010011
1
1
1
(C) 1

Установка бита
SETB bit
11010010
4
2
1
(b) 1

Инверсия переноса
CPL С
10110011
1
1
1
(C) NOT(C)

Инверсия бита
CPL bit
10110010
4
2
1
(b) NOT(b)

Логическое И бита и переноса
ANL С, bit
10000010
4
2
2
(C) (C) AND (b)

Логическое И инверсии бита и переноса
ANL С, /bit
10110000
4
2
2
(C) (C) AND (NOT(b))

Логическое ИЛИ бита и переноса
ORL С, bit
01110010
4
2
2
(C) (C) OR (b)

Логическое ИЛИ инверсии бита и переноса
ORL С, /bit
10100000
4
2
2
(C) (C) OR (NOT(b))

Пересылка бита в перенос
MOV С, bit
10100010
4
2
1
(C) (b)

Пересылка переноса в бит
MOV bit, С
10010010
4
2
2
(b) (C)


Команды передачи управления.
Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм.
Таблица 12.
Название команды
Мнемокод
КОП
Т
Б
Ц
Операция

Длинный переход в полном объеме ПП
LJMP ad16
00000010
12
3
2
(PC) ad16

Абсолютный переход внутри страницы в 2 Кб
AJMP ad11
a10a9a800001
6
2
2
(PC) (PC) + 2, (PC0-10) ad11

Короткий относительный переход внутри страницы в 256 байт
SJMP rel
10000000
5
2
2
(PC) (PC) + 2, (PC) (PC) +rel

Косвенный относительный переход
JMP @A+DPTR
01110011
1
1
2
(PC) (A) + (DPTR)

Переход, если аккумулятор равен нулю
JZ rel
01100000
5
2
2
(PC)(PC)+2, если (A)=0, то (PC)(PC)+rel

Переход, если аккумулятор не равен нулю
JNZ rel
01110000
5
2
2
(PC) (PC)+2, если (A)
·0, то (PC) (PC)+rel

Переход, если перенос равен единице
JC rel
01000000
5
2
2
(PC)(PC)+2, если (С)=1, то (PC)(PC)+rel

Переход, если перенос равен нулю
JNC rel
01010000
5
2
2
(PC)(PC)+2, если (С)=0, то (PC)(PC)+rel

Переход, если бит равен единице
JB bit, rel
00100000
11
3
2
(PC)(PC)+3, если (b)=l, то (PC)(PC)+rel

Переход, если бит равен нулю
JNB bit, rel
00110000
11
3
2
(PC)(PC)+3, если (b)=0, то (PC)(PC)+rel

Переход, если бит установлен, с последующим сбросом бита
JBC bit, rel
00010000
11
3
2
(PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel

Декремент регистра и переход, если не нуль
DJNZ Rn, rel
11011rrr
5
2
2
(PC) (PC) + 2, (Rn) (Rn) - 1, если (Rn)
· 0, то (PC) (PC) + rel

Декремент прямоадресуемого байта и переход, если не нуль
DJNZ ad, rel
11010101
8
3
2
(PC) (PC) + 2, (ad) (ad) - 1, если (ad)
· 0, то (PC) (PC) + rel

Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно
CJNE A, ad, rel
10110101
8
3
2
(PC) (PC) + 3,если (A)
· (ad), то (PC) (PC) + rel,если (A) < (ad), то (C) 1, иначе (C) 0

Сравнение аккумулятора с константой и переход, если не равно
CJNE A, #d, rel
10110100
10
3
2
(PC) (PC) + 3,если (A)
· #d, то (PC) (PC) + rel,если (A) < #d, то (C) 1, иначе (С) 0

Сравнение регистра с константой и переход, если не равно
CJNE Rn, #d, rel
10111rrr
10
3
2
(PC) (PC) + 3,если (Rn)
· #d, то (PC) (PC) + rel,если (Rn) < #d, то (C) 1, иначе (С) 0

Сравнение байта в РПД с константой и
переход, если не равно
CJNE @Ri,#d,rel
1011011i
10
3
2
(PC) (PC) + 3,если ((Ri))
· #d, то
(PC) (PC) + rel,если ((Ri)) < #d, то (C) 1, иначе (C) 0

Длинный вызов подпрограммы
LCALL adl6
00010010
12
3
2
(PC) (PC) + rel,если ((Ri)) < #d, то (C) 1, иначе (C) 0

Абсолютный вызов подпрограммы в пределах страницы в 2 Кб
ACALL ad11
a10a9a810001
6
2
2
(PC) (PC) + 3, (SP) (SP) +1, ((SP)) (PC07), (SP) (SP) + 1, ((SP)) (PC815), (PC) ad16

Возврат из подпрограммы
RET
00100010
1
1
2
(PC) (PC) + 2, (SP) (SP) + 1, ((SP)) (PC07), (SP) (SP) + 1, ((SP)) (PC815), (PC0-10) ad11

Возврат из подпрограммы обработки прерывания
RETI
00110010
1
1
2
(PC8...15) ((SP)), (SP) (SP) - 1,
(PC0...7) ((SP)), (SP) (SP) - 1

Пустая операция
NOP
00000000
1
1
1
(PC8...15) ((SP)), (SP) (SP) - 1, (PC0...7) ((SP)), (SP) (SP) - 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 байт относительно следующей команды.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, а команда возврата из процедуры обработки прерывания RETI, кроме того, разрешает прерывание обслуженного уровня. Команды RET и RETI не различают, какой командой – LCALL или ACALL – была вызвана подпрограмма, так как и в том, и в другом случае в стеке сохраняется полный 16-разрядный адрес возврата.
























Лабораторная работа №1.

Тема: Изучение структуры микроконтроллера MCS-51 и функциональных возможностей его эмулятора.

Цель работы: Изучить архитектуру и систему команд микроконтроллера MCS-51.

Порядок выполнения лабораторной работы:
Изучить структуру ОЭВМ MCS-51.
Ознакомится с системой команд ОЭВМ MCS-51.
Изучить систему моделирования однокристальных микроконтроллеров Single-Chip Machine (SCM).
Разработать алгоритм для выполнения индивидуального задания.
Разработать программу для выполнения индивидуального задания.
Ввести программу в систему моделирования SCM и проанализировать ее выполнение.
Убедиться в правильности выполнения индивидуального задания и при отрицательном результате изменить алгоритм либо программу и повторить моделирование.
Ответить на контрольные вопросы.

Контрольные вопросы:
Структура ОЭВМ, назначение ее узлов.
Время выполнения команд (понятие такта, машинного цикла).
Типы команд. Формат команд. Команды прямой и косвенной адресации.
Команды сдвига, арифметических и логических операций.
Регистр признаков, команды вызывающие изменение регистра признаков.
Команды работы со стеком, последовательность действий команд при работе со стеком.
Назначение и работа с внутренней памятью данных ОЭВМ.

Задания:


Задание

1
Записать однобайтовые числа в регистр R0 банка 1 и ячейку RDM с адресом 21H, записать в ячейку RDM с адресом 22H число, старшая тетрада которого определяется инверсной младшей тетрадой первого числа, а младшая – четными битами второго числа.

2
Записать однобайтовые числа в регистр R1 банка 3 и ячейку RDM с адресом 01H, записать в регистр R7 банка 0 число, 0, 1, 4 и 7 биты которого определяются старшей тетрадой первого числа, а 2, 3, 5 и 6 биты определяются соответствующими инверсными битами второго числа.

3
Записать однобайтовые числа в регистры R1 банка 0 и R1 банка 2, записать в ячейку RDM с адресом 56H число, четные биты которого определяются инверсными 0, 1, 3 и 5 битами первого числа, а нечетные 0, 1, 6 и 7 битами второго числа

4
Записать однобайтовые числа в ячейки RDM с адресами 55H и 11H, записать в регистр R7 банка 3 число, старшая тетрада которого определяется инверсной старшей тетрадой первого числа, а младшая – 0, 1, 6 и 7 битами второго числа.

5
Записать однобайтовые числа находятся в регистрах R7 банка 2 и R1 банка 3, записать в ячейку RDM с адресом 09H число, младшая тетрада которого определяется инверсной младшей тетрадой первого числа, а старшая – нечетными битами второго числа.

6
Записать однобайтовые числа в ячейки RDM с адресами 12H и 13H, установить 0, 2 и 5 биты первого числа в соответствие аналогичным битам второго числа, а младшую тетраду второго числа равной инверсной старшей тетраде первого числа.

7
Записать однобайтовые числа находятся в регистры R5 банка 1 и R5 банка 2, установить четные биты первого числа в соответствие нечетным битам второго числа, а старшую тетраду второго числа равной инверсным 3, 4, 6 и 7 битам первого числа.

8
Записать однобайтовые числа в регистр R2 банка 2 и ячейку RDM с адресом 45H, установить четные биты первого числа равными младшей тетраде второго числа, а старшую тетраду второго числа равной 0, 4, 5 и 7 битам первого числа.

9
Записать однобайтовые числа в регистр R4 банка 1 и ячейку RDM с адресом 30H, записать в ячейку RDM с адресом 31H число, четные биты которого определяются младшей тетрадой первого числа, а нечетные – 0, 3, 4 и 7 битам второго числа.

10
Записать однобайтовые числа в регистры R2 банка 1 и R7 банка 3, записать в ячейку RDM с адресом 70H число, 0, 3, 4 и 7 биты которого определяются 1, 2, 4, и 5 битами первого числа, а 1, 2, 5 и 6 биты определяются инверсной младшей тетрадой второго числа.

11
Записать однобайтовые числа в ячейку RDM с адресом 35H и регистр R3 банка 1, записать в регистр R6 банка 3 число, четные биты которого определяются 1, 4, 5, и 6 битами первого числа, а нечетные биты определяются инверсной младшей тетрадой второго числа.

12
Записать однобайтовые числа в регистры R0 банка 0 и R6 банка 3, записать в ячейку RDM с адресом 55H число, 0, 2, 5 и 7 биты которого определяются 1, 3, 5, и 6 битами первого числа, а 1, 3, 4 и 6 биты определяются четными битами второго числа.

13
Записать однобайтовые числа в ячейки RDM с адресами 11H и 70H, записать в регистр R7 банка 1 число, четные биты которого определяются нечетными битами первого числа, а нечетные биты определяются 0, 1, 5 и 7 битами второго числа.

14
Записать однобайтовые числа в ячейки RDM с адресами 06H и 07H, записать в регистр R5 банка 1 число, старшая тетрада которого образована 0, 1, 5 и 7 битами первого числа, а младшая определяется инверсной младшей тетрадой второго числа.

15
Записать однобайтовые числа в ячейку RDM с адресом 50H и регистр R1 банка 3, записать в ячейку RDM с адресом 0АH число, четные биты которого определяются инверсными нечетными битами первого числа, а нечетные 0, 2, 3 и 6 битами второго числа.

16
Записать однобайтовые числа в ячейки RDM с адресами 01H, 02H и 03H, записать в регистр R2 банка 1 число, старшая тетрада которого равна старшей тетраде первого числа, 0 и 1 биты определяются инверсными 2 и 5 битами второго числа, а 2 и 3 биты определяются 6 и инверсным 7 битами третьего числа.

17
Записать однобайтовые числа в регистры R7 банка 0, R2 банка 3 и ячейке RDM с адресом 50H, записать в ячейку RDM с адресом 51H число, старшая тетрада которого определяется четными битами первого числа, 0 и 1 биты определяются 0 и 3 битом второго числа, а 2 и 3 биты равны инверсным 1 и 2 битам третьего числа.

18
Записать однобайтовые числа в ячейки RDM с адресами 15H и 16H, в первом числе поставить 1 и 4 бит равные инверсным 1 и 4 биту второго числа, а во втором числе инвертировать младшие четыре бита, а старшие поставить равными 0, 1, 5 и 7 битам второго числа.

















Примеры решения задач
Задача 1:
Записать однобайтовое число в регистр R6 банка 2, записать в ячейку RDM с адресом 20H число, старшая тетрада которого определяется инверсной младшей тетрадой исходного числа, а младшая – нечетными битами исходного числа.

MOV R6,#5BH
MOV A,R6






·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
блока
Адрес команды
Метка
Мнемокод и операнды
Исполняемая операция
Комментарий

1


CLR PSW.3
(PSW.3) 0
Выбор активного банка.

2


SETB PSW.4
(PSW.4) 1


3


MOV R6,#XXH
(R6) XXH
Запись числа ХХН в регистр R6

4


MOV A,R6
(A) (R6)
Запись содержимого регистра R6 в аккумулятор.

5


SWAP A
(A03) (A47)
Обмен местами тетрад в аккумуляторе.

6


CPL A
(A) NOT (A)
Инвертирование содержимого аккумулятора.

7


ANL A,#F0H
(A) (A) AND #F0H
Наложение маски 11110000В на содержимое аккумулятора для выделения старшей тетрады.

8


MOV R7,A
(R7) (A)
Запись в регистр R7 содержимого аккумулятора для сохранения промежуточного результата.

9


MOV A,R6
(A) (R6)
Запись содержимого регистра R6 аккумулятор.

10


RR A
(A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A0)
Сдвиг содержимого аккумулятора на один разряд вправо для установки первого бита исходного числа в нужную позицию.

11


MOV R5,A
(R5) (A)
Запись содержимого аккумулятора в регистр R5 для хранения промежуточного результата.

12


ANL A,#01H
(A) (A) AND #01H
Наложение маски 00000001В на содержимое аккумулятора для выделения нулевого бита.

13


MOV R0,A
(R0) (A)
Запись содержимого аккумулятора в регистр R0 для хранения промежуточного результата.

14


MOV A,R5
(A) (R5)
Запись содержимого регистра R5 аккумулятор.

15


RR A
(A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A0)
Сдвиг содержимого аккумулятора на один разряд вправо для установки третьего бита исходного числа в нужную позицию.

16


MOV R5,A
(R5) (A)
Запись содержимого аккумулятора в регистр R5 для хранения промежуточного результата.

17


ANL A,#02H
(A) (A) AND #02H
Наложение маски 00000010В на содержимое аккумулятора для выделения нулевого бита.

18


MOV R1,A
(R1) (A)
Запись содержимого аккумулятора в регистр R1 для хранения промежуточного результата.

19


MOV A,R5
(A) (R5)
Запись содержимого регистра R5 аккумулятор.

20


RR A
(A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A0)
Сдвиг содержимого аккумулятора на один разряд вправо для установки пятого бита исходного числа в нужную позицию.

21


MOV R5,A
(R5) (A)
Запись содержимого аккумулятора в регистр R5 для хранения промежуточного результата.

22


ANL A,#04H
(A) (A) AND #04H
Наложение маски 00000100В на содержимое аккумулятора для выделения нулевого бита.

23


MOV R2,A
(R2) (A)
Запись содержимого аккумулятора в регистр R2 для хранения промежуточного результата.

24


MOV A,R5
(A) (R5)
Запись содержимого регистра R5 аккумулятор.

25


RR A
(A0) (A1) (A2) (A3) (A4) (A5) (A6) (A7) (A0)
Сдвиг содержимого аккумулятора на один разряд вправо для установки седьмого бита исходного числа в нужную позицию.

26


ANL A,#08H
(A) (A) AND #08H
Наложение маски 00001000В на содержимое аккумулятора для выделения нулевого бита.

27


ORL A,R0
(A) (A) OR (R0)
Поразрядное логическое сложение (ИЛИ) содержимого аккумулятора и содержимого регистра R0 для восстановления результата.

28


ORL A,R1
(A) (A) OR (R1)
Поразрядное логическое сложение (ИЛИ) содержимого аккумулятора и содержимого регистра R1 для восстановления результата.

29


ORL A,R2
(A) (A) OR (R2)
Поразрядное логическое сложение (ИЛИ) содержимого аккумулятора и содержимого регистра R2 для восстановления результата.

30


ORL A,R7
(A) (A) OR (R7)
Поразрядное логическое сложение (ИЛИ) содержимого аккумулятора и содержимого регистра R7 для восстановления результата.

31


MOV 20H,A
(20H) (A)
Запись в ячейку RDM с адресом 20Н результата.






Лабораторная работа №2.

Тема: Порты ввода-вывода и система прерываний микроконтроллера MCS-51.

Цель работы: Изучить строение портов ввода-вывода и системы прерываний MCS-51, получить практические навыки работы с ними.

Порты ввода-вывода микроконтроллера MCS-51.
Микроконтроллер MCS-51 имеет четыре восьмиразрядных двунаправленных порта ввода-вывода P0P3, адресуемые как регистры специальных функций. Имеется возможность в каждом порту часть разрядов использовать для ввода данных, а часть для вывода.
Из-за ограниченного количества выводов корпуса ИМС микроконтроллера, большинство выводов используется для выполнения двух функций – в качестве линий портов и для альтернативных функций
Порты P0 и Р2 используются при обращении к внешней памяти. При этом на выходах P0 младший байт адреса внешней памяти мультиплексируется с вводимым/выводимым байтом. Выходы Р2 содержат старший байт адреса внешней памяти, если адрес 16-разрядный. При использовании восьмиразрядного адреса портом Р2 можно пользоваться для ввода-выввода информации обычным образом. При обращении к внешней памяти в P0 автоматически заносятся 1 во все биты. Информация в Р2 при этом остается неизменной.
Порт P3 помимо обычного ввода и вывода информации используется для формирования и приема специальных управляющих и информационных сигналов. Разряды порта (все или частично) при этом могут выполнять следующие альтернативные функции:
РЗ.0 RXD – вход последовательного порта
Р3.1 TXD – выход последовательного порта
РЗ.2 INT0 – внешнее прерывание 0
Р3.3 INT1 – внешнее прерывание 1
РЗ.4 Т0 – вход таймера-счетчика 0
РЗ.5 Т1 – вход таймера-счетчика 1
РЗ.6 WR – строб записи во внешнюю память данных
РЗ.7 RD – строб чтения из внешней памяти данных
Альтернативные функции могут быть активированы только в том случае, если в соответствующие биты порта P3 предварительно занесены 1. Неиспользуемые альтернативным образом разряды могут работать как обычно.
Каждый из портов содержит регистр-защелку (SFR P0 SFR P3), выходную цепь и входной буфер.

[ Cкачайте файл, чтобы посмотреть картинку ]
Рис. 4. Порт Р0.

[ Cкачайте файл, чтобы посмотреть картинку ]
Рис. 5. Порт Р1.

[ Cкачайте файл, чтобы посмотреть картинку ]
Рис. 6. Порт Р2.

[ Cкачайте файл, чтобы посмотреть картинку ]
Рис. 7. Порт Р3.

На рисунках изображены функциональные схемы регистров-защелок и буферов ввода-вывода всех портов микроконтроллера MCS-51. Каждый из разрядов регистра-защелки SFR является D-триггером, информация в который заносится с внутренней шины данных микроконтроллера по сигналу «Запись в SFR Pх» (х= 0, 1, 2, 3) от центрального процессорного элемента (CPU). С прямого выхода D-триггера информация мажет быть выведена на внутреннюю шину по сигналу «Чтение SFR Pх» от CPU, а с вывода микросхемы («из внешнего мира») по сигналу «Чтение выводов Pх». Одни команды активизируют сигнал «Чтение SFR PI», другие - «Чтение выводов РI».
Выходные каскады триггеров SFR портов Р1 РЗ выполнены на полевых транзисторах с внутренней нагрузкой, в то время как аналогичные каскады триггеров SFR P0 на транзисторах с открытым стоком. Каждая линия любого из портов может независимо использоваться как для ввода, так и для вывода информации (для линий портов P0 и Р2 это справедливо тогда, когда они не используются для обращения к внешней памяти).
Для перевода любой линии портов Р1 РЗ в режим ввода информации необходимо в соответствующий разряд SFR занести 1. При этом выходной полевой транзистор отключается. Внутренний нагрузочный резистор как бы «подтягивает» потенциал вывода к напряжению питания, в то время как внешняя нагрузка может сделать его нулевым. Выходные каскады порта P0 имеют иную структуру. Нагрузочный полевой транзистор линии порта включен только тогда, когда порт выводит 1 при обращении к внешней памяти. В остальных случаях нагрузочный транзистор отключен. Таким образом, при работе в режиме обычного ввода-вывода информации (как, например, порт Р1) выходные каскады порта P0 представляют собой ступени на транзисторах с открытым стоком. Запись 1 в соответствующий бит SFR отключает и второй транзистор, что приводит к тому, что вывод БИС оказывается под «плавающим» потенциалом. Это позволяет использовать линии порта P0 как выводы с высоко импедансным состоянием.
Поскольку выходные каскады портов P1 P3 имеют внутреннюю нагрузку, при переводе в режим ввода информации они становятся источниками тока для микросхемы или транзистора, нагруженных на данный.
Для того, чтобы использовать одну из линий выбранного порта в качестве линии ввода информации необходимо закрыть выходной транзистор, записав в выходной D-триггер этой линии единицу. Если выходной транзистор будет открыт, то он зашунтирует читаемый вывод микросхемы. В результате чего может возникнуть «конфликт», когда входной сигнал будет «тянуть» потенциал вверх, а выход транзистора вниз. В таком случае возможно сгорание какого-то элемента схемы.
Если какие-либо линии портов необходимо использовать в качестве линий ввода, то перед этим обязательно в соответствующие выходные триггеры нужно записать единицы.
Допустим, если линии порта Р1 будут использоваться для ввода информации, то перед чтением состояния ножек порта необходимо выполнить начальную установку:

MOV P1, #11111111B
; запись единиц в выходные триггеры
; порта Р1


Если в качестве входов порта Р1 будут использоваться линии 1, 2, 4 и 6:

MOV P1, #01010110B
; запись единиц в выходные триггеры линий 1, 2,
; 4 и 6 порта Р1


Если необходимо прочитать содержимое порта Р1 (состояние ножек) в аккумулятор:

MOV А, Р1
; запись состояния ножек порта Р1 в аккумулятор


Выдать на все восемь выводов порта Р3 содержимое аккумулятора:

MOV Р3, А



Установка или смена состояния выводов портов:

CPL P3.1

XRL P3, #01000100b

ORL P2, #01010110b

ANL P3, #03h
; инвертировать сигнал на первой ножке порта P3

; инвертировать состояние ножек P3.2 и P3.6

; установить единичный сигнал на ножках 1, 2, 4 и
; 6 порта P2
; установить нулевой сигнал на ножках 0 и 1
; порта P3



Для изменения состояния выводов портов можно использовать команды с битовой адресацией:

MOV P1.2, C

CPL P1.2

SETB P2.3

CLR P2.3
; выдать содержимое бита переноса через 2-й бит
; порта P2
; инвертировать второй бит порта P2

;выдать высокий потенциал на 3-й ножке порта P2

; выдать низкий потенциал на 3-й ножке порта P2


Проверка условия:

JB P3.4, L1
; если на 4 ножке порта P3 логическая 1, то
; перейти на метку L1


Система прерываний микроконтроллера MCS-51.
Упрощенная схема прерываний микроконтроллера MCS-51 показана на рисунке 8.


Рис. 8. Схема прерываний.

Внешние прерывания INT 0 и INT 1 могут быть вызваны либо уровнем, либо переходом сигнала из 1 в 0 на входах микроконтроллера в зависимости от значений управляющих бит IT0 и IT1 в регистре TCON. От внешних прерываний устанавливаются флаги IE0 и IE1 в регистре TCON, которые инициируют вызов соответствующей программы обслуживания прерывания. Сброс этих флагов выполняется аппаратно только в том случае, если прерывание было вызвано по переходу (срезу) сигнала. Если же прерывание вызвано уровнем входного сигнала, то сбросом флага IE должна управлять соответствующая подпрограмма обслуживания прерывания путем воздействия на источник прерывания с целью снятия им запроса (смена нуля, вызвавшего прерывание, единицей).
Флаги запросов прерывания от таймеров TF0 и TF1 автоматически устанавливаются при их переполнении и также сбрасываются автоматически при передаче управления подпрограмме обслуживания.
Флаги запросов прерывания RI и TI устанавливаются блоком управления приемопередатчика аппаратно, но сбрасываться должны программным путем.
Если флаги прерываний не будут сброшены то микроконтроллер не увидит новый запрос от этого источника и может пропустить новое событие.
Прерывания могут быть вызваны или отменены программой, так как все названные флаги программно доступны и могут быть установлены или сброшены программой с тем же результатом, как если бы они были установлены или сброшены аппаратными средствами.
В блоке регистров специальных функций есть два регистра, предназначенных для управления режимом прерываний IE и уровнями приоритета IP. Возможность программной установки или сброса любого управляющего бита в этих двух регистрах делает систему прерываний MCS-51 исключительно гибкой.
В более сложных модификациях микроконтроллеров семейства MCS-51 количество периферийных устройств увеличено, что приводит к необходимости использовать один вектор прерывания для нескольких устройств (разделение подпрограмм обслуживания прерываний в этом случае необходимо реализовать программно), либо добавить еще два регистра – режима (маски) и приоритета прерываний.

Структура регистра масок прерывания (IE).
Символ
Позиция
Имя и назначение

EA
IE.7
Снятие блокировки прерывания. Сбрасывается, программно для запрета всех прерываний независимо от состояний IE.4 – IE.0

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

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

ES
IE.4
Бит разрешения прерывания, о
·°т приемопередатчика Установка/сброс программой для разрешения/запрета прерываний от флагов TI или RI .

ET1
IE.3
Бит разрешения прерывания от таймера. Установка/сброс программой для разрешения/запрета прерываний от таймера 1

EX1
IE.2
Бит разрешения внешнего прерывания 1. Установка/сброс программой для разрешения/запрета прерывания 1

ET0
IE.1
Бит разрешения прерывания от таймера 0. Установка/сброс программой для разрешения/запрета прерываний от таймера 0 .

EX0
IE.0
Бит разрешения внешнего прерывания 0. Установка/сброс программой для разрешения/запрета прерывания 0


Система прерываний формирует аппаратный вызов (LCALL) соответствующей подпрограммы обслуживания, если она не заблокирована одним из следующих условий:
в данный момент обслуживается запрос прерывания равного или высокого уровня приоритета;
текущий машинный цикл не последний в цикле выполняемой команды;
выполняется команда RETI или любая команда, связанная с обращением к регистрам IЕ или IP.
Если флаг прерывания был установлен, но по одному из указанных выше условий не получил обслуживания и к моменту окончания блокировки уже сброшен, то запрос прерывания теряется и нигде не запоминается.
Реакция микроконтроллера на прерывание заключается в вызове соответствующей подпрограммы. Вызываемые подпрограммы должны начинаться со строго определенных адресов: 0003h для входа INT0, 000Bh для таймера Т/С0, 0013h для входа INT1, 001Bh для таймера Т/С1, 0023h для последовательного приемопередатчика.
Источник прерывания вызывает свою подпрограмму обработки путем установки в 1 соответствующего ему флага в регистре TCON.

Структура регистра TCON.
Символ
Позиция
Имя и назначение

TF1
TCON.7
Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера/счетчика. Сбрасывается при обслуживании прерывания аппаратно

TR1
TCON.6
Бит управления таймера 1. Устанавливается, / сбрасывается программой для пуска/останова

TF0
TCON.5
Флаг переполнения таймера 0. Устанавливается аппаратурно. Сбрасывается при обслуживании прерывания

TR0
TCON.4
Бит управления таймера 0. Устанавливается / сбрасывается программой для пуска/останова таймера/счетчика

IE1
TCON.3
Флаг фронта прерывания 1. Устанавливается аппаратно, когда детектируется срез внешнего сигнала INT1. Сбрасывается при обслуживании прерывания

IT1
TCON.2
Бит управления типом прерывания 1. Устанавливается / сбрасывается программно для спецификации запроса INT1 (срез/низкий уровень)

IE0
TCON.1
Флаг фронта прерывания 0. Устанавливается по срезу сигнала INT0. Сбрасывается при обслуживании прерывания

IT0
TCON .0
Бит управления типом прерывания 0. Устанавливается / сбрасывается программно для спецификации запроса INT0 (срез/низкий уровень)


По аппаратно сформированному коду LCALL система прерывания помещает в стек только содержимое счетчика команд (PC) и загружает в него адрес вектора соответствующей подпрограммы обслуживания. По адресу вектора должна быть расположена команда безусловной передачи управления (JMP) к начальному адресу подпрограммы обслуживания прерывания. В случае необходимости она должна начинаться командами записи в стек (PUSH) слова состояния программы (PSW), аккумулятора, расширителя, указателя данных и т.д. и должна заканчиваться командами восстановления из стека (POP). Подпрограммы обслуживания прерывания должны завершаться командой RETI, по которой в счетчик команд перезагружается из стека сохраненный адрес возврата в основную программу. Команда RET также возвращает управление прерванной основной программе, но при этом не снимут блокировку прерываний, что приводит к необходимости иметь программный механизм анализа окончания процедуры обслуживания данного прерывания.
При старте микроконтроллеров семейства MCS-51 все прерывания запрещены. Для настройки системы на работу с прерываниями необходимо установить в 1 биты соответствующие разрешаемым прерываниям в регистре IE, и установить в 1 бит ЕА для снятия блокировки всех прерываний.
Микроконтроллер может оказаться в такой ситуации, когда в один и тот же момент возникают запросы на различные прерывания или во время обработки одного прерывания приходит запрос на другое. Для того, чтобы микроконтроллер работал определенным образом при таких событиях служат приоритеты прерываний.

Структура регистра приоритетов прерываний (IP).
Символ
Позиция
Имя и назначение

-
IP.7 – IP.5
Не используется

PS
IP.4
Бит приоритета приемопередатчика. Установка/сброс программой для присваивания прерыванию от приемопередатчика высшего/низшего приоритета

РТ1
IP.3
Бит приоритета таймера 1. Установка/сброс программой для присваивания прерыванию от таймера 1 высшего/низшего приоритета

РХ1
IP.2
Бит приоритета внешнего прерывания 1. Установка/сброс программой для присваивания высшего/низшего приоритета внешнему прерыванию INT1

РТ0
IP.1
Бит приоритета таймера 0. Установка/сброс программой для присваивания прерыванию от таймера 0 высшего/низшего приоритета

РХ0
IP.0
Бит приоритета внешнего прерывания 0. Установка/сброс программой для присваивания высшего/низшего приоритета внешнему прерыванию INT0


При старте микроконтроллера все прерывания имеют низкий (равный друг другу) приоритет. При этом, если два прерывания возникнут одновременно будет обслужено раньше то, что стоит выше в следующем списке: INT0, таймер 0, INT1, таймер 1, приемопередатчик.
Для того, чтобы микроконтроллер обрабатывал вначале требуемое прерывание, а потом все остальные, необходимо присвоить требуемому прерыванию высокий приоритет, установив в 1 соответствующий бит регистра приоритетов IP.
Прерывание прерывания (вложенные прерывания) возможно лишь только тогда, когда приходит запрос более высокого приоритета, чем обрабатываемое. Если же приходит запрос на прерывание с равным или более низким приоритетом, то оно запрещается до момента обработки первого и разрешается лишь тогда, когда микроконтроллер выполнит команду RETI.

Пример 1:
Внешнее устройство выставляет байт данных на линии порта Р1. Если на линии 3 порта Р3 выставлена 1, то полученные данные необходимо записать в ячейку внутренней памяти с адресом 50h, а если 0, то в ячейку с адресом 60h.

Алгоритм для выполнения этой задачи будет иметь вид представленный на рисунке:











ORG 0000h
LJMP START

ORG 0030h
START:
MOV P1, #0FFh
SETB P3.3
JB P3.3, M1

MOV 60h, P1

SJMP M2
M1:
MOV 50h, P1

M2:
NOP
END
; по адресу 0000h располагаем команду перехода
; на метку START

; начало основной программы

; настройка линий порта Р1 на ввод
; настройка линии 3 порта Р3 на ввод
; если на линии 3 порта Р3 единица, то переход
; на метку М1
; запись в ячейку с адресом 60h состояние линий
; порта Р1
; безусловный переход на метку М2

; запись в ячейку с адресом 50h состояние линий
; порта Р1



Пример 2:
Массив однобайтовых чисел поступает в микроконтроллер от внешнего устройства через линии порта Р1, конец массива определяется числом FFh. Внешнее устройство после выставления очередного байта данных выдает запрос на прерывание срезом сигнала по линии INT0. Необходимо считать данные, расположить их во внутренней памяти начиная с адреса 50h, в порт Р2 записать количество полученных элементов.

При выполнении этой задачи необходимо считать количество вводимых элементов. Для этого будет использоваться регистр R4 банка 0. Адресация элементов во внутренней памяти данных будет производиться через регистр R0 банка 0, так указывать на адрес следующего элемента массива можно простым увеличением содержимого регистра R0 на единицу.
Обслуживание прерывания должно происходить как можно быстрее. Поэтому в подпрограмме обслуживания прерывания будет только устанавливаться флаг готовности (разряд 0 ячейки с адресом 20h) и сохраняться в регистре R3 банка 0 состояние линий порта Р1.

ORG 0000h
LJMP START

ORG 0003h
LJMP INTER

ORG 0050h
START:
MOV IE, #00h

MOV IP, #00h

MOV P1, #0FFh

CLR 20h.0

ORL P3, #00000100b

ANL PSW, #11100111b

MOV R4, #00h

MOV R0, #50h

SETB IT0

SETB EX0

SETB EA

M1:
JNB 20h.0, M1

MOV A, R3

CJNE R3, #0FFh, M2

MOV P2, R4

SJMP M3

M2:
MOV @R0, A


INC R0


INC R4

CLR 20h.0

SJMP M1

INTER:
MOV R3, P1

SETB 20h.0

RETI

M3:
NOP

END
; по адресу 0000h располагаем команду перехода
; на метку START

; по адресу 0003h располагаем начало
; подпрограммы обслуживания прерывания INT0


; начало основной программы
; начальная установка регистров, все прерывания
; запрещены
; всем прерываниям присваивается низший
; приоритет
; настройка всех линий порта Р1 на ввод

; обнуление флага готовности числа

; настройка линии 2 порта Р3 на ввод
; (линия внешнего прерывания INT0)
; выбор банка 0

; обнуление счетчика чисел

; запись в регистр R0 начального адреса памяти
; для размещения массива вводимых чисел
; выбор срабатывания прерывания по срезу

; разрешение внешнего прерывания по
; линии INT0
; разрешение всех прерываний


; проверка установки флага готовности числа
; если не готово, то ожидание
; если число готово, то его запись в аккумулятор
;
; проверка числа на конец массива, если получено
; число не FFh, то переход на метку М2
; если число FFh, то это конец массива, запись
; числа полученных элементов массива в порт Р2
; переход на метку М3 (конец программы)


; запись содержимого аккумулятора (полученного
; числа ) в ячейку памяти, адрес которой записан в
; регистре R0 банка 0
; увеличение содержимого R0 на единицу для
; возможности адресации следующего элемента
; массива
; увеличение на 1 регистра R4 банка 0 (счетчика
; полученных элементов массива)
; сброс флага готовности числа

; переход на метку М1

; подпрограмма обслуживания прерывания INT0
; запись в регистр R3 значений линий порта Р1

; установка флага готовности числа

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

; конец программы



Порядок выполнения лабораторной работы:
Изучить структуру портов ввода-вывода ОЭВМ MCS-51.
Изучить систему прерываний ОЭВМ MCS-51.
Разработать алгоритм для выполнения индивидуального задания.
Разработать программу для выполнения индивидуального задания.
Ввести программу в систему моделирования Proteus и проанализировать ее выполнение.
Убедиться в правильности выполнения индивидуального задания и при отрицательном результате изменить алгоритм либо программу и повторить моделирование.
Ответить на контрольные вопросы.

Контрольные вопросы:
Чем различаются порты ввода-вывода Р0-Р3 микроконтроллера MCS-51.
Для чего выходные каскады триггеров порта Р0 выполнены на транзисторах с открытым стоком.
Какой порядок опроса прерываний в микроконтроллере MCS-51.
Назначение регистров специальных функций IE и IP.
Какие обязательные действия должна выполнять подпрограмма обслуживания прерывания по уровню в микроконтроллере MCS-51.
Какие действия выполняет микроконтроллер, когда во время обработки одного прерывания приходит запрос на другое.


Задания:


Задание

1
Внешнее устройство выставляет на линии порта Р1 данные. Необходимо по приходу среза сигнала на линии INT0 считывать состояние линий порта Р1, умножать полученное значение на константу, находящуюся в ячейке RDM с адресом 50h. Если на линии 7 порта Р3 установлена единица, то младший байт результата умножения необходимо записывать в массив, первый элемент которого расположен в ячейке RDM с адресом 60h.

2
По приходу среза сигнал на линии INT1 необходимо считать состояние линий порта Р0. Если на линии 0 порта Р3 единица, то записать в порт Р2 четные разряды числа, поступившего из порта Р1, а если нуль – то умножить считанное число на 55h и записать в порт Р1 нечетные разряды результата умножения.

3
По приходу низкого уровня сигнала на линии INT1 необходимо считать младшую тетраду числа пришедшего в порт Р2, умножить ее на число A8h и младший байт результата вывести в порт Р1. Сигналом внешнему устройству для снятия запроса на прерывание служит единичный уровень на линии 0 порта Р3.

4
По приходу низкого уровня сигнала на линии INT0 необходимо считать состояние линий порта Р0 и умножить на число, которое находится в регистре R5 банка 2. Если результат умножения четный, то вывести в порт Р1 младшую тетраду результата, если нечетный – то записать в ячейку RDM с адресом 70h. Сигналом внешнему устройству для снятия запроса на прерывание служит нулевой уровень на линии 7 порта Р3.

5
По приходу среза сигнала на линии INT0 необходимо считать состояние линий порта Р1 и умножить на число, которой находится в регистре R5 банка 1, а по приходу среза сигнала на линии INT1 младший байт результата умножения выставить на линии порта Р2.

6
По приходу низкого уровня на линию INT1 необходимо считать значение линий порта Р2. По приходу среза сигнала на линии INT0 считать значение младших четырех линий порта Р1, умножить на число, считанное из порта Р2 и выставить на старшие четыре линии порта Р1 младшую тетраду результата умножения.







Лабораторная работа №3.

Тема: Таймеры-счетчики микроконтроллера MCS-51.

Цель работы: Изучить строение таймеров-счетчиков микроконтроллера MCS-51. Получить практические навыки измерения частоты, периода, длительности дискретных сигналов с помощью таймеров-счетчиков.

Таймеры-счетчики микроконтроллера MCS-51.
В базовых моделях семейства имеются два программируемых 16-битных таймера-счетчика (T/C0 и T/C1), которые могут быть использованы как в качестве таймеров, так и в качестве счетчиков внешних событий. В первом случае содержимое соответствующего таймера-счетчика (далее для краткости Т/С) инкрементируется в каждом машинном цикле, т.е. через каждые 12 периодов колебаний кварцевого резонатора, во втором оно инкрементируется под воздействием перехода из 1 в 0 внешнего входного сигнала, подаваемого на соответствующий (T0,T1) вывод микро-ЭВМ. Так как на распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входной сигнал должен удерживать значение 1, как минимум, в течение одного машинного цикла микро-ЭВМ.
Для управления режимами работы Т/С и для организации их взаимодействия с системой прерываний используются два регистра специальных функций (TMOD и TCON).
Структура регистра режима работы таймера/счетчика TMOD.

Символ
Позиция
Имя и назначение

GATE
TMOD.7 для Т/С1 и TMOD.3 для Т/СО
Управление блокировкой. Если бит установлен, то таймер/счетчик "x" разрешен до тех пор, пока на входе "lNTx" высокий уровень и бит управления "TRx" установлен. Если бит сброшен, то Т/С разрешается, как только бит управления "TRx" устанавливается.

С/Т
TMOD.6 для T/C1 и TMOD.2 для Т/СО
Бит выбора режима таймера или счетчика событий. Если бит сброшен, то работает таймер от внутреннего источника сигналов синхронизации. Если; установлен, то работает счетчик от внешних сигналов на входе "Tx".

M1
TMOD.5 для T/C1 и TMOD.1 для Т/СО
Режим работы
M1
M0
 

0
0
Таймер ВЕ48. "TLx" работает как 5-битный предделитель.

0
1
16 битный таймер-счетчик. "THx" и "TLx" включен последовательно.

1
0
8-битный авто перезагружаемый таймер-счетчик. "THx" хранит значение, которое должно быть перезагружено в "TLx" каждый раз по переполнению.

1
1
Таймер-счетчик 1 останавливается. Таймер-счетчик 0: TLO работает как 8-битный таймер-счетчик, и его режим определяется управляющими битами таймера 0. TH0 работает только как 8 битный таймер, и его режим определяется управляющими битами таймера 1.



M0
TMOD.4 для Т/С1 и TMOD.0 для Т/СО



Структура регистра управления/статуса таймера TCON.

Символ
Позиция
Имя и назначение

TF1
TCON.7
Флаг переполнения таймера 1. Устанавливается аппаратно при переполнении таймера-счетчика. Сбрасывается при обслуживании прерывания аппаратно.

TR1
TCON.6
Бит управления таймера 1. Устанавливается/сбрасывается программой для пуска/останова.

TF0
TCON.5
Флаг переполнения таймера 0. Устанавливается аппаратно. Сбрасывается при обслуживании прерывания.

TR0
TCON.4
Бит управления таймера 0. Устанавливается/сбрасывается программой для пуска/останова таймера/счетчика.

IE1
TCON.3
Флаг фронта прерывания 1. Устанавливается аппаратно, когда детектируется срез внешнего сигнала INT1. Сбрасывается при обслуживании прерывания.

IT1
TCON.2
Бит управления типом прерывания 1. Устанавливается/ сбрасывается программно для спецификации запроса INT1 (срез/низкий уровень).

IE0
TCON.1
Флаг фронта прерывания 0. Устанавливается по срезу сигнала INT0. Сбрасывается при обслуживании прерывания.

IT1
TCON .0
Бит управления типом прерывания 0. Устанавливается/ сбрасывается программно для спецификации запроса INT0 (срез/низкий уровень).


Как следует из описания управляющих бит TMOD, для обоих Т/С режимы работы 0, 1 и 2 одинаковы. Режимы 3 для Т/СО и Т/С1 различны.
13EMBED Word.Picture.81415
13EMBED Word.Picture.81415
13EMBED Word.Picture.81415
Рис.9. Логика работы T/C0 и Т/C1в режимах 0, 1, 2 и 3.
Режим 0. Перевод любого Т/С в режим 0 делает его похожим на таймер КМ1816ВЕ48 (восьми битный счетчик), к входу которого подключен пяти-битный предделитель частоты на 32. Работу Т/С в режиме 0 на примере T/C1 иллюстрирует рисунок а. В этом режиме таймерный регистр имеет разрядность 13 бит. При переходе из состояния "все единицы" в состояние "все нули" устанавливается флаг прерывания от таймера TF 1. Входной синхросигнал таймера 1 разрешен (поступает на вход Т/С1), когда управляющий бит TR1 установлен в 1 либо управляющий бит GATE (блокировка) равен 0, либо на внешний вывод запроса прерывания INT1 поступает уровень 1. Отметим попутно, что установка бита GATE в 1 позволяет использовать таймер для измерения длительности импульсного сигнала подаваемого на вход запроса прерывания.
Режим 1. Работа любого Т/С в этом режиме такая же, как и в режиме 0, за исключением того, что таймерный регистр имеет разрядность 16 бит.
Режим 2. В этом режиме работа организована таким образом, что переполнение (переход из состояния "все единицы" в состояние, "все нули") восьмибитного счетчика TL1 приводит не только к установке флага TF1 (см. рис. б), но и автоматически перезагружает в TL1 содержимое старшего байта (TH 1) таймерного регистра, которое предварительно было задано программным путем. Перегрузка оставляет содержимое TH1 неизменным. В режиме 2 Т/С0 и Т/С1 также работают совершенно одинаково.
Режим 3. В режиме 3 Т/С0 и Т/С1 работают по-разному. Т/С1 сохраняет неизменным свое текущее содержимое. Иными словами, эффект такое же как и при сбросе управляющего бита TR1 в 0. Работу Т/С0 иллюстрирует рис. в. В режиме 3 TL0 и TH0 функционируют как два независимых восьмибитных счетчика. Работу TL0 определяют управляющие биты Т/С0 (С/Т, GATE TR0), входной сигнал INT0 и флаг переполнения TF0. Работу TH0, который может выполнять только функции таймера (подсчёт машинных циклов микро-ЭВМ), определяет управляющий бит TR1. При этом TH0 использует флаг переполнения TF1. Режим 3 используется в тех случаях, когда требуется наличие дополнительного восьми битного таймера или счетчика событий. Можно считать, что в этом режиме микро-ЭВМ 8051 имеет в своем составе три таймера-счетчика. В случае же, если Т/С0 используется в режиме 3, Т/С1 может быть или выключен, или переведен в режим 0, 1 или 2, или может быть использован последовательным портом в качестве генератора частоты передачи.
В модернизированных моделях микроконтроллеров семейства MCS-51 может иметься третий таймер счетчик T/C2 и (или) блок программных счетчиков PCA, которые тоже могут быть использованы для отсчета временных интервалов.
Способы измерения частоты, периода и длительности.
При построении систем управления иногда возникает необходимость в измерении таких величин, как частота, период, длительность сигнала, сдвиг фаз между сигналами. В зависимости от того, какой параметр необходимо измерять применяется разный подход.
Для измерения сигналов высоких частот fx (больше 100Гц) производится счет импульсов входного сигнала, в течении фиксированного отрезка времени T0 (рис. 10). Верхний предел ограничивается быстродействием элементов схемы и разрядностью счетчиков.

13 SHAPE \* MERGEFORMAT 1415

Рис. 10. Измерение частоты высокочастотных сигналов.

Для измерения частот ниже 100Гц определяется длительность периода измеряемого сигнала Tx. При этом подсчитывается количество импульсов фиксированной частоты f0 за интервал времени равный или кратный измеряемому периоду.
Подобным образом измеряется и длительность импульсов.

13 SHAPE \* MERGEFORMAT 1415

Рис. 11. Измерение периода сигналов.

При измерении сдвига фаз
· временной интервал формируется путем логического умножения сигналов fx1 и fx2, а затем измеряется описанным методом.

13 SHAPE \* MERGEFORMAT 1415

Рис. 12. Измерение сдвига фаз.


Пример:
С помощью таймеров-счетчиков микроконтроллера определить длительность низкочастотных импульсов.

Так как измеряемые импульсы имеют низкую частоту, то в качестве генератора тактовых импульсов будем использовать внешний генератор.
Для измерения используем таймер-счетчик 0, тогда измеряемый сигнал будем подавать на вход INT0 (Р3.2), а тактирующие импульсы на вход T0 (Р3.4) микроконтроллера.
Таймер-счетчик 0 настраиваем на режим работы 1 (М0.0=1, М1.0=0), работу от внешнего источника синхронизирующих сигналов (С/Т0=1), и разрешение счета пока на линии INT0 установлен высокий уровень (GT0=1). Для этого формируем число, которое записывается в регистр режима работы TMOD.

ORG 0000h
LJMP START

ORG 0030h
START:
SETB P3.2
SETB P3.4
MOV TMOD,#00001101b

M1:
MOV TL0, #00h
MOV TH0, #00h
М2:
JNB P3.2, M2

SETB TR0

M3:
JB P3.2, M3

CLR TR0
MOV R3, TL0
MOV R2, TH0
SJMP M1

END
; по адресу 0000h располагаем команду перехода
; на метку START

; начало основной программы
; настройка линии 3 порта Р3 на ввод
; настройка линии 4 порта Р3 на ввод
; запись в регистр TMOD настроек для
; таймера-счетчика 0

; начальная установка содержимого
; регистров таймера-счетчика

; ожидание единицы на линии 2 порта Р3
; (появления измеряемого сигнала)
; запуск таймера-счетчика 0 на счет
; импульсов от внешнего генератора

; ожидание среза измеряемого сигнала
; (перехода с 1 на 0)
;остановка таймера-счетчика 0
; запись в регистры R3 и R2 результата
; измерения
; безусловный переход на метку М1








Порядок выполнения лабораторной работы:
Изучить строение таймеров-счетчиков ОЭВМ MCS-51.
Изучить режимы работы таймеров-счетчиков ОЭВМ MCS-51.
Разработать алгоритм для выполнения индивидуального задания.
Разработать программу для выполнения индивидуального задания.
Ввести программу в систему моделирования Proteus и проанализировать ее выполнение.
Убедиться в правильности выполнения индивидуального задания и при отрицательном результате изменить алгоритм либо программу и повторить моделирование.
Ответить на контрольные вопросы.

Контрольные вопросы:
Назначение таймеров-счетчиков микроконтроллера.
Какие существуют режимы работы таймеров-счетчиков ОЭВМ MCS-51.
Назначение регистра режима работы TMOD.
Назначение регистра управления/статуса TCON.
Как запрограммировать таймер-счетчик на работу в режиме таймера.
Как запрограммировать таймер-счетчик на работу в режиме счетчика внешних событий.

Задания:


Задание

1
Составить алгоритм и написать программу, позволяющую подсчитать, какое количество раз была нажата кнопка S1 за интервал времени 10 с. Результат должен сохраняться в ячейке RDM с адресом 60h. На таймер-счетчик подаются тактирующие импульсы от внешнего генератора с частотой 1000 Гц.

2
Составить алгоритм и написать программу, позволяющую подсчитать длительность нажатия кнопки S1. Результат должен сохраняться в ячейке RDM с адресом 50h. На таймер-счетчик подаются тактирующие импульсы от внешнего генератора с частотой 100 Гц.

3
Составить алгоритм и написать программу, позволяющую после прихода 15 импульсов от внешнего устройства записывать в порт Р1 число 55h.

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

5
Составить алгоритм и написать программу, позволяющую подсчитывать, какое количество раз была нажата кнопка S1 за интервал времени 5 с, результат должен храниться в регистре R5 банка 1.

6
Составить алгоритм и написать программу, которая позволит поочередно выставлять единичные уровни на старших и младших четырех линиях порта Р1 с интервалом в 1 с.

7
Составить алгоритм и написать программу, позволяющую создать эффект «бегущий огонь» (огонь соответствует единичному уровню) на линиях портов Р1 и Р2 с частотой 2 Гц.

8
Составить алгоритм и написать программу, которая позволит нажимая кнопку S1 задавать длительность единичного уровня на линии 0 порта Р1 в секундах (одно нажатие одна секунда), а нажатием кнопки S2 выставлять единичный уровень заданной длительности.

9
Составить алгоритм и написать программу, позволяющую измерять временной интервал между нажатиями кнопок S1 и S2. Результат выводить в порт Р1. На таймер-счетчик подаются тактирующие импульсы от внешнего генератора с частотой 5000 Гц.

10
Составить алгоритм и написать программу, позволяющую декрементировать содержимое порта Р2 с частотой 2 Гц.


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

11
Составить алгоритм и написать программу, позволяющую выставлять на четные и на нечетные линии порта Р2 единичные уровни с интервалом 3 с. Тактирующие импульсы на таймер-счетчик подаются от внешнего генератора с частотой 500 ц.










Лабораторная работа №4.

Тема: Работа микроконтроллера MCS-51 с внешней памятью и подключение внешних устройств.

Цель работы: Получить практические навыки программирования микроконтроллера MCS-51 при работе с внешней памятью и внешними устройствами.

Работа микроконтроллера MCS-51 с внешней памятью.
Обращения к внешней памяти подразделяются на обращения к внешней памяти программ и обращения к внешней памяти данных. В первом случае для формирования сигнала, активирующего ПЗУ с программой, используется сигнал PSEN (PME), во втором сигналы RD и WR, активизирующие ОЗУ с данными.
Если используется 16-битовый адрес, старшие восемь бит выводятся через порт Р2, где они сохраняются в течение всего цикла обращения к внешней памяти. Выходные каскады порта Р2 имеют внутреннюю нагрузку, несколько отличающуюся от Р1 и РЗ, благодаря чему в SFR Р2 при выводе адресной информации вовсе не обязательно защелкивать все единицы. При выводе адресной информации информация из SFR Р2, хотя и не присутствует на выводах микроЭВМ, но и не теряется, восстанавливаясь на них после окончания обращений к внешней памяти (если в процессе этих обращений SFR Р2 не был модифицирован).
Если при обращении к внешней памяти данных используется восьми битный адрес, то на выводах порта остается та же информация, которая там была до начала обращения к внешней памяти. Это позволяет организовать постраничную адресацию внешней памяти данных.
На выводах порта P0 младший байт адреса мультиплексируется с данными. Сигналы адреса/данных задействуют оба полевых транзистора выходного каскада порта P0. Таким образом, в этом случае выводы P0 уже не являются выводами с открытым стоком и не требуют внешних нагрузочных элементов.
Сигнал ALE используется для фиксации младшего байта адреса во внешнем регистре-защелке. Адресная информация достоверна в момент окончания сигнала ALE.
Выводимый в цикле записи байт заносится в P0 непосредственно перед активацией сигнала WR и остается неизменным до окончания этого сигнала. В цикле чтения данные на выводах P0 для достоверного считывания должны быть установившимися к моменту окончания сигнала RD.
Во время обращения к внешней памяти CPU записывает 0FFH в SFR P0, уничтожая, хранимую там информацию.
Обращение к внешней памяти программ возможно в двух случаях:
когда сигнал ЕА активен, т.е. имеет нулевой уровень,
когда программный счетчик РС содержит число больше 0FFH.
Следовательно, при использовании микро-ЭВМ, не имеющей встроенного ПЗУ или не использующей его, на входе ЕА должен присутствовать сигнал с нулевым уровнем.
Когда CPU работает с внешней памятью программ, все линии порта Р2 используются для вывода старшего байта адреса и не могут быть использованы для обычного ввода\вывода информации. При этом, как отмечалось выше, в SFR Р2 может быть занесена любая информация адресная информация, выводимая через Р2, не зависит от состояния его SFR.
Режим работы с внутренней памятью программ устанавливается заданием высокого уровня напряжения на выводе EA (DEMA). Выполнение программы, хранящейся в памяти, начинается с команды, расположенной по адресу 00Н, так как счетчик команд PC по сигналу "сброс" обнуляется.
В этом режиме порты Р0 и Р2 можно использовать как порты ввода-вывода, так как адрес/данные памяти программ передаются по внутренней магистрали микроконтроллера.



13 EMBED Word.Picture.8 1415
Рис. 4.1. Временные диаграммы работы микросхем с внешней памятью программ.

Рис. 4.2. Временные диаграммы работы микросхем при чтении данных из внешней памяти.

При работе с внутренней памятью данных доступ к внутреннему ОЗУ (128 байт) осуществляется при помощи команд, имеющих операнды типа direct, Rn, @Ri (кроме MOVX).
При подключении внешнего ОЗУ емкостью до 256 байт обмен данными между ОЗУ и ОМЭВМ осуществляется через двунаправленный порт Р0 с помощью команд MOVX @Ri, А и MOVX А, @Ri. Для работы с внешним ОЗУ объемом свыше 256 байт (до 64 Кбайт) используются команды MOVX A, @DPTR и MOVX @DPTR, A. При этом выдача младших разрядов адреса (А0...А7) и обмен данными осуществляются через порт Р0 (Р0.0Р0.7). Старшие разряды адреса А8А15 выдаются через порт Р2 (Р2.0Р2.7). При этом адрес А7А0 фиксируется по спаду сигнала ALE, а прием и выдача данных стробируются сигналами RD и WR.

Рис. 4.3. Временные диаграммы работы микросхем при записи данных во внешнюю память.

Схема подключения внешних микросхем памяти к микроконтроллерам семейства MCS-51 показана на рисунке 4.4. Регистр адреса D3 на этой схеме предназначен для запоминания младших 8-ми бит адреса, передаваемых через шину адреса/данных, совмещенную с портом P0. Для обращения к памяти данных и к памяти программ используются одни и те же шина адреса и шина данных, но разные управляющие сигналы. Для чтения памяти программ вырабатывается сигнал PSEN (PME), а для чтения памяти данных вырабатывается сигнал RD. Для записи информации в память данных вырабатывается сигнал WR.



Рис. 4.4. Подключение внешних микросхем памяти.

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

Внешними устройствами называются любые устройства, которыми управляет или которым передает информацию микропроцессор или устройства от которых он получает информацию. В качестве внешних устройств может выступать принтер или дисплей клавиатура или модем, но для устройств связи в качестве внешних устройств чаще выступают микросхемы приемников, передатчиков (в том числе построенные на базе сигнальных процессоров), синтезаторов частоты или электрически стираемые постоянные запоминающие устройства.
Согласование микросхем между собой не представляет трудностей, так как практически все современные микросхемы по входу и выходу согласованы с TTL уровнями. Если же это не так, то для согласования нестандартных уровней с TTL уровнями выпускаются специальные микросхемы. Несколько иначе обстоит дело с индикаторами и различными исполнительными устройствами.
В качестве простейшего индикатора рассмотрим светодиодный индикатор. Схема подключения такого индикатора показана на рисунке 4.5. Транзистор служит для увеличения тока параллельного порта, при помощи которого микропроцессор зажигает и гасит светодиодный индикатор. Кроме того, транзистор позволяет согласовать уровни напряжения, необходимые для работы цифровых микросхем, к которым относятся и микропроцессорные устройства и уровни напряжения, необходимые для работы светодиодного индикатора. Гальванической развязки транзисторный ключ не обеспечивает.
Простой светодиодный индикатор позволяет отображать двоичную информацию, такую как включено или выключено устройство, есть или нет сигнала и т.д. Для отображения цифровой информации используются семисегментные индикаторы. Подключение семисегментного светодиодного индикатора не отличается от схемы, приведенной на рисунке 4.5. Практически так же выглядят схемы индикаторов на газоразрядных лампах и лампах накаливания (для лампы накаливания не нужен токоограничивающий резистор).

Рис. 4.5. Подключение одиночного светодиодного индикатора.

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


Рис. 4.6. Эквивалентная схема подключения светодиодного индикатора к параллельному порту.

Эквивалентная схема, на которой показан путь протекания выходного тока порта, приведена на рисунке 4.6. Как видно из этой схемы именно этот ток используется для зажигания светодиода.
Несколько сложнее выглядит схема подключения внешних исполнительных устройств с индуктивной нагрузкой (например реле или электромагнит):



Рис. 4.7. Подключение внешнего устройства с индуктивной нагрузкой.

Диод VD1 в этой схеме служит для ограничения напряжения импульсов самоиндукции, которые могут вывести из строя транзистор VT1.
При считывании информации из внешнего устройства возникают аналогичные проблемы. Источники дискретной информации могут иметь различную физическую природу. Они могут находиться на значительном расстоянии от контроллера, иметь различное напряжение питания, но их данные должны быть надежно введены в микропроцессор.
Для решения указанных проблем и реализации гальванической развязки датчиков и микропроцессорного устройства, все датчики с точки зрения схемы представляют собой контакты, работающие на замыкание. Поэтому схема подключения датчика и кнопки не различаются. Со стороны микропроцессорного устройства необходимо преобразовать замыкание/размыкание контактов в логические уровни, необходимые для правильной работы микропроцессорного устройства. Такая схема приведена на рисунке 4.8.



Рис. 4.8. Подключение источника дискретной информации с гальванической развязкой.

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



Рис. 4.9. Подключение клавиатуры к микропроцессорному устройству.

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


Рис. 4.10.Устройство семисегментных индикаторов.

Цифровые и знаковые индикаторы представляют собой упорядоченный набор отдельных светодиодов (сегментов индикатора), размещенных в одном корпусе и, обычно, соединенных между собой в определённую электрическую схему (рис. 4.10). Если все светодиоды соединяются своими катодами в общую точку, то говорят, что индикатор выполнен по схеме с общим катодом. Если аноды всех светодиодов соединены в общей точке, то индикатор выполнен по схеме с общим анодом. Для индикаторов с общим катодом засветка светодиодного элемента происходит при подаче на его анод положительного напряжения (высокий уровень), а для индикаторов с общим анодом - отрицательного на катод (низкий уровень). При использовании семисегментных индикаторов в цифровых схемах, совместимых с TTL-уровнями, элементы индикатора с общим катодом засвечиваются при подаче уровня логической 1 на анод, а элементы индикатора с общим анодом - уровня логического 0 на катод.
Цифровые и знаковые индикаторы бывают одноразрядными и многоразрядными, их знаки составляют из семи и более (9, 11, 16) сегментов. Кроме сегментов индикаторы имеют децимальную точку или запятую. На рисунке 4.10 б приведено стандартное обозначение сегментов индикатора. Высвечивание выбираемого сегмента или группы сегментов при получении изображения знака обеспечивается включением их в цепь прохождения тока.
Двоичные комбинации, формирующие символы для индикаторов с общим катодом и общим анодом, естественно, будут различаться.
Двоичные комбинации, которые следует подавать на светодиодные элементы индикатора с общим катодом для получения представления десятичных цифр от 0 до 9, сведены в таблицу.

Цифра
Двоичный код


a
b
c
d
e
f
g

0
1
1
1
1
1
1
0

1
0
1
1
0
0
0
0

2
1
1
0
1
1
0
1

3
1
1
1
1
0
0
1

4
0
1
1
0
0
1
1

5
1
0
1
1
0
1
1

6
1
0
1
1
1
1
1

7
1
1
1
0
0
0
0

8
1
1
1
1
1
1
1

9
1
1
1
1
0
1
1


Как видно из таблицы, каждой цифре, отображаемой индикатором, соответствует определенная двоичная комбинация. Эту комбинацию можно сформировать как аппаратным способом (применив, например, микросхему CD4511), так и программным, используя для этого микроконтроллер. Можно комбинировать оба способа для экономии выводов 8051, подавая двоичный код цифры на входы микросхемы 4511 от микроконтроллера, а выходы 4511 подключив к соответствующим выводам индикатора. Какой вариант лучше, выбирать разработчику. Следует лишь учитывать то, что выходы микроконтроллера способны управлять очень незначительной нагрузкой, поэтому подключение элементов индикатора непосредственно к портам 8051 нежелательно. При выборе такого варианта нужно использовать либо буферные микросхемы с токовыми выходами, либо обычные биполярные транзисторы.
Принципиальная схема аппаратной части устройства, в котором применена микросхема–преобразователь кода CD4511. показана на рис. 4.11.


Рис. 4.11. Интерфейс микроконтроллера с идникатором на микросхеме 4511.

В этой схеме двоичный код числа с выходов P1.0-P1.3 микроконтроллера поступает на входы A-D преобразователя DD1. На выходах преобразователя появляется двоичный код управления сегментами индикатора V1, включенного по схеме с общим катодом.
Можно обойтись и без преобразователя DD1, подключив индикатор к выводам порта P1 микроконтроллера. В этом случае программа должна сама формировать двоичный код для элементов индикатора. Принципиальная электрическая схема устройства показана на рис. 4.12. В качестве индикатора выбран семисегментный светодиод с общим анодом.

Рис. 4.12. Прямое подключение семисегментного индикатора с общим анодом.

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



Рис. 4.12. Схема устройства с блоком статической индикации.

При количестве индикаторов более 4 техническая реализация режима статической индикации становится нецелесообразной. Это связано с увеличением необходимого количества преобразователей кода, резисторов и соединительных проводов, а также значительным увеличением потребляемого тока (в основном, индикаторами). Кроме того, некоторые виды индикаторов, например матричные светодиодные или жидкокристаллические индикаторы, изображение графических символов в которых получают при подаче импульсного напряжения на упорядоченные в столбцы и строки определенные точки матрицы, не рассчитаны на применение в системах статической индикации.
Для уменьшения общего числа проводников, связывающих между собой микросхемы индикатора, цифровые индикаторы чаще стали изготовлять многоразрядными блоками, у которых в едином корпусе может быть от 2 до 16 цифровых знаков. С целью сокращения числа выводов в многоразрядном индикаторе все одноимённые сегменты соединены вместе и имеют один общий вывод (рис. 4.13.а). Чтобы управлять свечением какой-либо цифры каждое знакоместо (цифра) имеет общий вывод, который может быть общим анодом либо общим катодом светодиодов-сегментов.
Для обеспечения работы многоразрядных индикаторов или нескольких одноразрядных индикаторов используют динамическую, то есть непрерывную индикацию. Суть динамической индикации заключается в поочерёдном включении индикаторов через общую цепь преобразования кода (рис. 4.13). Информация поступает не на несколько преобразователей, а на один, общий для всех, но порциями. Этот преобразователь кода, своими выходами подключен ко всем элементам сразу. Сигнал засветки определенного знакоместа поступает синхронно с тем устройством, от которого в этот момент поступает информация. Иными словами, в системе динамической индикации как бы работает быстродействующий бесконтактный переключатель на много положений. В одном из его положений все выводы (сегменты) какого-либо разряда подключены к соответствующим выходам дешифратора. И в этот же момент через транзисторные ключи поступает сигнал управления засветкой элементов того знакоместа, который соответствует этому разряду. Подключение индикаторов необходимо производить с частотой 30...50 Гц, такой частоты достаточно, чтобы не замечать мерцания индикаторов.
В рассмотренном выше случае все сегменты выбранного в данный момент разряда индикатора светятся одновременно. Однако работу устройства динамической индикации можно организовать так, чтобы и сегменты выбранного разряда индикатора включались поочерёдно (последовательно, как в матричном табло), при этом необходимо, соответственно, увеличить частоту переключения в 7-8 раз, а для обеспечения нормального свечения индикаторов – увеличить в несколько раз ток, проходящий в импульсе через сегменты индикатора. Такой способ динамической индикации часто применяется при управлении устройством индикации от микропроцессоров и микроконтроллеров.



Рис. 4.13. Структурная схема блока динамической индикации
на 4 знака

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


Порядок выполнения лабораторной работы:
Изучить принципы подключения внешней памяти к микроконтроллеру MCS-51.
Изучить способы подключения дискретных датчиков, кнопок, клавиатур и устройств отображения информации к микроконтроллеру MCS-51.
Разработать алгоритм для выполнения индивидуального задания.
Разработать программу для выполнения индивидуального задания.
Ввести программу в систему моделирования Proteus и проанализировать ее выполнение.
Убедиться в правильности выполнения индивидуального задания и при отрицательном результате изменить алгоритм либо программу и повторить моделирование.
Ответить на контрольные вопросы.

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


Задания:
Разработать схему, составить алгоритм и написать программу для следующего условия:


Задание

1
К микроконтроллеру подключены три кнопки, при нажатии соответствующей кнопки необходимо выводить на восемь светодиодов рисунок «бегущий огонь», «бегущая тень» и «бегущие огни». Время свечения одного рисунка - 0,5 секунды.

2
К микроконтроллеру подключена матрица кнопок 4х4 и семисегментный индикатор с общим катодом, необходимо при нажатии кнопки выводить на индикатор соответствующее значение (от 0 до F).

3
На один из входов микроконтроллера подаются прямоугольные импульсы малой частоты (10-500 Гц). Необходимо считать количество импульсов, пришедших на вход в течении 1 с и вывести результат на четыре семисегментных индикатора. Индикация динамическая.

4
К микроконтроллеру подключена матрица светодиодов 8х8. Необходимо выводить на матрицу первые две цифры номера зачетной книжки.








Лабораторная работа №5.

Тема: Сопряжение микроконтроллера MCS-51 с программно управляемыми микросхемами. Сопряжение с аналого-цифровыми преобразователями.

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

Аналого-цифровые преобразователи.
Аналого-цифровые преобразователи (АЦП) применяются в измерительных системах и измерительно-вычислительных комплексах для согласования источников измеряемых сигналов с цифровыми устройствами обработки и представления результатов измерения.
Существуют различные методы построения АЦП. Они отличаются по сложности реализации, помехоустойчивости, быстродействию.
В системах, где основным критерием является быстродействие, применяют АЦП параллельного преобразования. Но АЦП этого типа достаточно сложны в реализации. Для n-разрядного АЦП необходимо 2n-1 компараторов и параллельный делитель напряжения, который вырабатывает 2n-1 уровень квантования.
Для реализации систем с высокой помехоустойчивостью применяют интегрирующие АЦП. Такой АЦП состоит из двух преобразователей. Измеряемое напряжение преобразовывается в длительность импульса, а потом длительность импульса преобразовывается в цифровой код.
Одним из самых распространенных является АЦП, построенный на цифро-аналоговом (ЦАП) преобразователе. Схема этого АЦП приведена на рисунке 5.1.
Код формируется счетчиком, при организации жесткой логики, или программно, если АЦП работает в составе вычислительного комплекса. Входной код преобразовывается в аналоговый сигнал с помощью ЦАП. Напряжение с выхода ЦАП поступает на один из входов компаратора. На другой вход подается измеряемое напряжение Ux. В момент, когда напряжение ЦАП будет равно измеряемому, компаратор формирует сигнал 'Stop' который свидетельствует об окончании цикла измерения.



Рис. 5.1. АЦП построенный на ЦАП.

При формировании кода используются различные алгоритмы. Простейшим алгоритмом является поразрядное уравновешивание. При таком подходе код меняется от минимального путем приращения единицы младшего разряда до тех пор, пока напряжение ЦАП не сравняется с измеряемым напряжением. Недостатком поразрядного уравновешивания является маленькое быстродействие.
Для сокращения времени преобразования применяется метод половинных приближений. Уравновешивание начинается со старшего разряда. В этом разряде устанавливается единица и читается состояние компаратора. Если напряжение ЦАП больше измеряемого то разряд сбрасывается, а если меньше, то разряд сохраняет свое состояние. Дальше таким же образом обрабатывается следующий разряд. Преобразование заканчивается тогда, когда будут обработаны все разряды.
В системах слежения, за какими либо параметрами часто необходимо непрерывно считывать состояние датчика. Это обеспечивается малым временем преобразования за счет применения следящего АЦП. Суть данного алгоритма заключается в том, что сначала код формируется методом половинных приближений. А после сравнения с измеряемым напряжением АЦП отслеживает изменение напряжения. Если напряжение растет то код поразрядно увеличивается до тех пор, пока напряжение ЦАП не сравняется с измеряемым, и наоборот.

Интерфейсы АЦП
Важную часть аналого-цифрового преобразователя составляет цифровой интерфейс, т. е. схемы, обеспечивающие связь АЦП с приемниками цифровых сигналов и правила (протокол) обмена данными. Структура цифрового интерфейса определяет способ подключения АЦП к приемнику выходного кода, например, микропроцессору, микроконтроллеру или цифровому процессору сигналов. Свойства цифрового интерфейса непосредственно влияют на уровень верхней границы частоты преобразования АЦП.
Наиболее часто применяют способ связи АЦП с процессором, при котором АЦП является для процессора как бы одной из ячеек памяти. При этом АЦП имеет необходимое число адресных входов, дешифратор адреса и подключается непосредственно к адресной шине и шине данных процессора. Для этого он обязательно должен иметь выходные каскады с тремя состояниями.
Другое требование совместной работы АЦП с микропроцессорами, называемое программным сопряжением, является общим для любых систем, в которые входят ЭВМ и АЦП. Имеется несколько способов программного сопряжения АЦП с процессорами.
Проверка сигнала преобразования. Этот способ состоит в том, что команда начала преобразования «Пуск» периодически подается на АЦП от таймера. Процессор находится в цикле ожидания от АЦП сигнала окончания преобразования «Готов», после которого выходит из цикла, считывает данные с АЦП и в соответствии с ними приступает либо к следующему преобразованию, либо к выполнению основной программы, а затем вновь входит в цикл ожидания. Здесь АЦП выступает в роли ведущего устройства (master), а процессор – ведомого устройства (slave). Этот способ почти не требует дополнительной аппаратуры, но пригоден только в системах, где процессор не слишком загружен, т. е. длительность обработки данных от АЦП значительно меньше времени преобразования АЦП. Указанный способ позволяет максимально использовать производительность АЦП.
Если длительность обработки данных от АЦП заметно превышает время преобразования АЦП, можно использовать вариант этого способа, отличающийся тем, что сигнал «Пуск» поступает от процессора. Процессор выполняет основную программу обработки данных, а затем считывает данные с АЦП и вновь запускает его. В этом случае процессор выступает в роли ведущего устройства, а АЦП – ведомого.
Простое прерывание. Выдав команду «Пуск», процессор продолжает работу по основной программе. После окончания преобразования формируется сигнал прерывания, который прерывает вычисления в процессоре и включает процедуру поиска периферийного прибора, пославшего сигнал прерывания. Эта процедура состоит в переборе всех периферийных устройств до тех пор, пока не будет найден нужный. Преимущество этого способа по сравнению с предыдущим проявляется в большем числе преобразований за одно и то же время, если используемый АЦП работает медленно. Если же АЦП быстродействующий, то этот способ работы может оказаться даже медленнее предыдущего, так как на обработку прерывания требуется значительное время.
Векторное прерывание. Способ векторного прерывания отличается от предыдущего тем, что вместе с сигналом прерывания посылается и адрес программы обращения к данному АЦП. Следовательно, не нужно перебирать все периферийные приборы.
Прямой доступ к памяти. Здесь также используется прерывание, но в отличие от предыдущих двух способов, управление по системе прерывания передается на специальный интерфейс, который и производит перезапись данных преобразования в память, минуя регистры процессора. Это позволяет сократить длительность прерывания до одного такта. Номера ячеек памяти хранятся в адресном регистре интерфейса. Для этой цели выпускаются ИМС контроллеров прямого доступа к памяти.
В зависимости от способа пересылки выходного слова из АЦП в цифровой приемник различают преобразователи с последовательным и параллельным интерфейсами выходных данных. Последовательный интерфейс медленнее параллельного, однако, он позволяет осуществить связь с цифровым приемником значительно меньшим количеством линий и в несколько раз сократить число выводов ИМС. Поэтому обычно параллельный интерфейс используется в параллельных и последовательно-параллельных АЦП, а последовательный – в интегрирующих. В АЦП последовательного приближения применяются как параллельный, так и последовательный интерфейсы. Некоторые АЦП последовательного приближения имеют интерфейс обоих типов.

АЦП с параллельным интерфейсом
выходных данных
В простейших случаях, характерных для параллельных АЦП и преобразователей ранних моделей, интерфейс осуществляется с помощью N-разрядного регистра хранения, имеющего три состояния выхода. Здесь N – это разрядность АЦП. На рис. 5.2 представлена функциональная схема такого АЦП и временные диаграммы работы интерфейса.



Рис. 5.2. Функциональная схема и временные диаграммы работы АЦП с параллельным интерфейсом.

На нарастающем фронте сигнала «Пуск» УВХ преобразователя переходит в режим хранения и инициируется процесс преобразования. Когда преобразование завершено, на выходную линию «Готов» выводится импульс, что указывает на то, что в выходном регистре АЦП находится новый результат. Сигналы «CS» (Выбор кристалла) и «RD» (Чтение) управляют выводом данных для передачи приемнику
Для того чтобы упростить связь многоразрядного (N>8) АЦП с 8-разрядным микропроцессором или микроконтроллером, в некоторых ИМС реализована побайтовая выдача выходного слова. Если сигнал «HBEN», управляющий режимом вывода, имеет низкий уровень, то старшие биты выходного слова поступают на соответствующие им выводы (для 12-разрядного АЦП на выводы DO8...DO11). В противном случае они подаются на выводы, соответствующие младшему байту (для 12-разрядного АЦП на выводы DO0...DO3).

АЦП с последовательным интерфейсом
выходных данных
В АЦП последовательного приближения, оснащенных простейшей цифровой частью, выходная величина может быть считана в виде последовательного кода прямо с компаратора или регистра последовательного приближения (РПП). На рис. 5.3 представлена функциональная схема такого интерфейса и временные диаграммы его работы.



Рис. 5.3. Функциональная схема и временные диаграммы работы простейшего последовательного SPI-интерфейса.

На рисунке приведена схема, реализующая SPI-интерфейс. Процессор является ведущим (master). Он инициирует начало процесса преобразования задним положительным фронтом (срезом) сигнала на входе «Пуск» АЦП. С тактового выхода процессора на синхровход АЦП поступает последовательность тактовых импульсов. Начиная со второго такта после пуска на выходе данных АЦП формируется последовательный код выходного слова старшими битами вперед. Этот сигнал поступает на MISO (master–input, slave–output) вход процессора.
Простейший интерфейс обеспечивает наименьшее время цикла «преобразование – передача данных». Однако он обладает двумя существенными недостатками. Во-первых, переключение выходных каскадов АЦП во время преобразования привносит импульсную помеху в аналоговую часть преобразователя, что вызывает ухудшение отношения сигнал/шум (например, для АЦП AD7893 среднеквадратическое значение шума при передаче данных во время преобразования почти в три раза больше, чем при считывании данных после преобразования). Во-вторых, если АЦП имеет большое время преобразования, то процессор будет занят приемом информации от него существенную часть вычислительного цикла. По этим причинам современные модели АЦП с последовательной передачей выходных данных оснащаются выходным сдвиговым регистром, в который загружается результат преобразования из РПП. Временные диаграммы такого интерфейса приведены на рис. 5.4.



Рис. 5.4. Временные диаграммы последовательного интерфейса с передачей данных по окончании преобразования.
По переднему фронту сигнала «Пуск» УВХ переходит в режим хранения и начинается преобразование. При этом на соответствующем выводе АЦП выставляется сигнал «Занят». По окончании преобразования начинается передача данных. Процессор подает на синхровход АЦП последовательность синхроимпульсов CLK. Если 8·6, то число синхроимпульсов обычно составляет 16. При N<16 вначале вместо отсутствующих старших битов передаются нули, а затем выходное слово старшими битами вперед. До и после передачи данных выходная линия АЦП находится в высокоимпедансном (третьем) состоянии.
Увеличение длительности цикла «преобразование – передача данных» по сравнению с простейшим интерфейсом обычно несущественно, так как синхроимпульсы могут иметь большую частоту. Например, для 12-разрядного АЦП последовательного приближения AD7896 минимальный интервал между отсчетами составляет 10 мкс. Из них последовательное чтение данных занимает только 1,6 мкс при частоте синхросигнала 10 МГц.


Порядок выполнения лабораторной работы:
Изучить структурную схему АЦП.
Изучить способы подключения дискретных датчиков, кнопок, клавиатур и устройств отображения информации к микроконтроллеру MCS-51.
Разработать алгоритм для выполнения индивидуального задания.
Разработать программу для выполнения индивидуального задания.
Ввести программу в систему моделирования Proteus и проанализировать ее выполнение.
Убедиться в правильности выполнения индивидуального задания и при отрицательном результате изменить алгоритм либо программу и повторить моделирование.
Ответить на контрольные вопросы.

Контрольные вопросы:
Методы аналого-цифрового преобразования.
Понятие дискретности, квантования, разрешающей способности.
Статические параметры АЦП.
Динамические параметры АЦП.
Время преобразования, время задержки запуска, время цикла преобразования, максимальная частота преобразования.
Факторы, влияющие на погрешность АЦП.
Аппаратные реализации АЦП.

Задания:
На базе микроконтроллера MCS-51 разработать устройство позволяющее преобразовывать аналоговую величину в цифровой код, выполнять требуемые действия и записывать результат во внешнюю память. Частота измерений f, количество измерений m, интерфейс АЦП, необходимые константы и функции даны в таблице.

Тип пробразования
m
k
N
Частота опроса
Гц
Типы интерфейса АЦП

1
x2(t)+kx(t-N)
70
2
3
1000
Параллельный

2
x(t-N)-k(x(t-N)-x(t))
130
4
5
500
Параллельный

3
x(t)+kx(t-N)
150
7
8
200
Последовательный

4
kx(t)-x(t)x(t-N)
50
3
3
150
Последовательный

5
kx(t-N)-x2(t)
180
9
10
600
Параллельный

6
x(t)-k(x(t-N)-x(t))
100
5
8
250
Параллельный

7
x2(t-N)-kx(t)
90
2
12
350
Последовательный

8
x(t-N)-k(x(t-N)+x(t))
200
3
10
800
Последовательный

9
x(t)x(t-N)+kx(t)
120
8
3
750
Параллельный

10
x(t-N)+k(x(t-N)-x(t))
60
5
5
500
Параллельный

11
x(t)-kx(t-N)
200
3
10
900
Последовательный

12
x(t)x(t-N)+kx(t-N)
150
4
9
350
Последовательный

13
k(x(t-N)+x(t))-x(t)
50
2
5
450
Параллельный

14
kx(t-N)-x(t)x(t-N)
300
7
8
650
Параллельный

15
x(t)+k(x(t-N)+x(t))
100
2
10
400
Последовательный

16
x2(t)-kx(t-N)
80
3
12
850
Последовательный

17
x(t)-k(x(t-N)+x(t))
50
2
6
700
Параллельный

18
x2(t-N)+kx(t)
100
7
8
100
Параллельный

19
x(t)+k(x(t-N)-x(t))
150
4
4
550
Последовательный

20
x(t)x(t-N)-kx(t-N)
120
5
2
50
Последовательный

21
x(t-N)+k(x(t-N)+x(t))
200
4
3
500
Параллельный

22
kx(t)-x2(t-N)
60
6
8
100
Последовательный

23
x(t-N)-k(x(t-N)+x(t))
140
7
6
200
Последовательный

24
x(t)x(t-N)-kx(t)
80
9
3
150
Параллельный

25
k(x(t-N)-x(t))-x(t)
220
2
5
400
Параллельный




Лабораторная работа №6.

Тема: Сопряжение микроконтроллера MCS-51 с программно управляемыми микросхемами. Сопряжение с цифро-аналоговыми преобразователями.

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

Задания:
На базе микроконтроллера MCS-51 разработать устройство позволяющее генерировать периодический аналоговый сигнал с заданными в таблице параметрами.


Тип сигнала
Частота сигнала, Гц
Амплитуда, В
Постоянная составляющая выходного сигнала, В
Разрядность ЦАП


1
Треугольный
50
1
2
8


2
Пилообразный
100
0.5
1
8


3
Синусоидальный
280
0.7
1.5
8


4
Треугольный
120
0.2
1
8


5
Пилообразный
400
1.3
3
8


6
Синусоидальный
150
0.8
1
8


7
Треугольный
350
1.8
2
8


8
Пилообразный
140
1.5
2.5
8


9
Синусоидальный
200
0.5
2.5
8


10
Треугольный
180
0.8
1.2
8


11
Пилообразный
250
1.2
2
8


12
Синусоидальный
220
1.5
3
8


13
Треугольный
300
2.2
1.5
8


14
Пилообразный
240
1.6
2.5
8


15
Синусоидальный
70
0.5
1.2
8


16
Треугольный
320
0.5.
3.5
8


17
Пилообразный
50
1.5
2.2
8


18
Синусоидальный
100
0.8
3
8


19
Треугольный
400
1.4
2
8


20
Пилообразный
120
1.6
2.8
8












13PAGE 14215


13PAGE 14415



START

3

PSW.3(0

3

PSW.1(1


3

3

R6(XXH

A((R6)

(A)-(E)

3

(A)-(E)

3

(A)-(E)

3

(A)-(E)

3

(A)-(E)

3

(A)-(E)

3

A((R6)

3

R6(XXH

3

PSW.1(1


3

3

PSW.3(0

(A)-(E)

3

(A)-(E)

3

4

STOP

START

1

P1(FFh

2

P3.3(1

3

60h((P1)

5

50h((P1)

(P3.3)=1

Нет

Да

fx

T0

Nx=T0 fx

Tx

Tx/2

Nx=T0 fx

f0

Nx=
·
· f0

f1x

f2x


·=13 EMBED Equation.3 1415

f0

13 EMBED Equation.3 141513 EMBED Equation.3 141513 EMBED Equation.3 1415 /2



Структурная схема порта P1Root Entry

# 


Equation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

# 


& 2

# 
Equation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 17920074
    Размер файла: 1 MB Загрузок: 0

Добавить комментарий