Добавлен: 27.04.2024
Просмотров: 169
Скачиваний: 0
СОДЕРЖАНИЕ
Микропроцессорные устройства систем управления
1. Общая характеристика микропроцессоров.
1.1. Структура микропроцессора и его реализация.
1.2. Классификация современных микропроцессоров и их характеристики.
1.3. Принципы управления микропроцессорами.
1.4. Структура и типы команд микропроцессора.
1.5. Способы адресации информации и прерывание работы в микропроцессоре.
Косвенная регистровая адресация.
1.6. Организация ввода и вывода данных в микропроцессоре.
1.7. Система команд микропроцессора.
2. Принципы организации и применения микропроцессорных систем.
2.1. Особенности организации структуры МП-системы.
2.2. Структура МП-системы с общей шиной.
2.4. Применение МП-системы в качестве контроллера и системы сбора данных.
3. Основы программирования микропроцессоров.
3.1. Языки программирования микропроцессоров.
3.2. Программирование на языке ассемблера.
3.3. Средства разработки и отладки прикладных программ.
Средства отладки и диагностирования
Аппаратно-программные средства:
4. Типовые микропроцессоры и их применение.
4.1. Структура и характеристика типовых МП.
4.3. Примеры написания программ.
5. Мультипроцессорные системы, транспьютеры.
5.1. Классификация систем параллельной обработки данных
Конвейерная и векторная обработка.
Многопроцессорные машины с SIMD-процессорами.
Многопроцессорные системы с общей памятью
5.2 Мультипроцессорная когерентность кэш-памяти.
5.3. Многопроцессорные системы с локальной памятью и многомашинные системы
Метка | Операция | Операнд | Комментарии |
| LXI | HL,8000h | ;задать адрес 800016 первой обнуляемой ячейки памяти в регистровую пару HL. |
| MVI | B,50 | ;задать начальное значение 5010 счетчику шагов цикла (в регистр B). |
META: | MOV | M,0 | ;обнулить ячейку памяти с текущим адресом, соответствующим содержимому ячейки памяти HL. |
| DCX | HL | ;уменьшить на единицу содержимое регистровой пары HL (перейти к ячейки памяти со следующим адресом). |
| DCR | B | ;уменьшить на единицу счетчик шагов цикла. |
| JNZ | META | ;перейти к команде с адресом META, если результат предыдущей команды не равен нулю (не все 50 ячеек обнулены). |
| --- | --- | ;в противном случае все 50 ячеек были обнулены и выполняется дальнейшая программа. |
Задача 5. Написать программу, постоянно опрашивающую порт ввода 1, на четыре младших разряда которого поступает двоично-десятичный код, и выводящую соответствующую этому коду десятичную цифру на семисегментый индикатор, подключенный к порту вывода 2.
Решение. Прежде чем составлять программу, необходимо определиться: к каким разрядам порта вывода 2 будут подключены соответствующие сегменты семисегментного индикатора. Семисегментный индикатор имеет обозначение своих сегментов и выбранное подключение к разрядам порта вывода, как это показано на рис. 4.3.
Рис.4.3. Подключение семисегментного индикатора к разрядам порта вывода.
При выбранном подключении, приняв, что соответствующий сегмент индикатора светится при подаче на него логической единицы, между двоичными кодами индицируемых цифр и байтами на выходе порта (семисегментными кодами) должно быть соответствие, приведенное в табл.4.3.
Воспользуемся следующим приемом: поместим в десяти последовательно расположенных вслед за программой ячейках
памяти семисегментные коды в том порядке, в каком они приведены в табл.4.3. Адресу первой из этих ячеек присвоим метку TABL. Таким образом, в ячейке памяти с адресом TABL будет храниться семисегментный код цифры 0, в ячейке памяти с адресом TABL+1 – семисегментный код цифры 1 и т.д.
Поместим адрес, соответствующий метке TABL, в регистровую пару HL. Если теперь к содержимому регистровой пары HL прибавить двоично-десятичный код индицируемой цифры, то, очевидно, что в результате образуется адрес той ячейки памяти, в которой хранится семисегментный код индицируемой цифры. Если вывести теперь код из этой ячейки памяти, используя косвенную регистровую адресацию, в порт вывода 2, будет обеспечено свечение десятичной цифры, соответствующей входному двоичному коду. Ниже приведена программа, выполняющая поставленную задачу.
Метка | Операция | Операнд | Комментарии |
START: | IN | 01h | ;ввести байт данных из порта ввода 116. |
| ANI | 00001111b | ;обнулить не интересующие нас четыре старших разряда введенного байта. |
| LXI | DE,0000h | ;обнулить регистровую пару DE. |
| MOV | E,A | ;переслать двоичный код индицируемой цифры в младший регистр E регистровой пары DE. |
| LXI | HL,TABL | ;записать в регистровую пару HL адрес, соответствующий метке TABL. |
| DAD | DE | ;сложить содержимое регистровых пар DE и HL, результат занести в HL, т.е. в HL сформировался адрес ячейки памяти с индицируемым семисегментным кодом. |
| MOV | A,M | ;переслать семисегментный код из адресованной ячейки памяти в аккумулятор. |
| OUT | 02h | Вывести семисегменый код в порт вывода 216. |
| JMP | START | ;перейти в начало программы. |
TABL: | DB | 3Fh | ;занести в последо- ;вательные ячейки па- ;мяти таблицу семи- ;сегментных кодов, на- ;чиная с ячейки с адре- ;сом, соответствую- ;щим метке TABL*. |
| DB | 06h | |
| DB | 5Bh | |
| DB | 4Fh | |
| DB | 66h | |
| DB | 6Dh | |
| DB | 7Dh | |
| DB | 07h | |
| DB | 7Fh | |
| DB | 6Fh |
*Примечание. Оператор DB относится к так называемым директивам (или псевдокомандам) языка ассемблера. Подобные команды не имеют машинных кодов, а служат для указания уточнений программе транслятору - ассемблеру. В данном случае директива DB размещает в последовательных ячейках памяти, начиная с ячейки, имеющей адрес, соответствующий метке TABL, последовательность семисегменных кодов. При трансляции исходной программы в объектную ассемблер заменит директиву DB последовательностью необходимых машинных команд, выполняющих эту операцию.
Таблица 4.3. Соответствие десятичных цифр, двоично-десятичных и семисегментных кодов.
Десятичная цифра | Двоичный (двоично-десятичный) код | Семисегментный код |
0 | 0000 | 3F16 |
1 | 0001 | 0616 |
2 | 0010 | 5B16 |
3 | 0011 | 4F16 |
4 | 0100 | 6616 |
5 | 0101 | 6D16 |
6 | 0110 | 7D16 |
7 | 0111 | 0716 |
8 | 1000 | 7F16 |
9 | 1001 | 6F16 |
Пример 6. Из чисел, хранимых в 120 последовательных ячейках рамяти, начиная с ячейки с адресом 01A616, подсчитать количество тех чисел A, удовлетворяющих условию: 10A50. Результат подсчета вывести в порт вывода 7.
Решение. Очевидно, что для решения данной задачи требуется реализовать операции сравнения и в зависимости от результата сравнения выполнить условный переход в нужное место программы. Т.к. число A может иметь 120 значений, то необходимо организовать цикл из 120 шагов. При решении задачи сначала проверяется принадлежность числа A верхней границе интервала, а затем нижней в каждом шаге цикла. И только если число A попадает в заданный интервал, то факт такого попадания подсчитывается в счетчике. В противном случае значение счетчика в данном шаге цикла остается неизменным. Результат подсчета и есть количество чисел
A, удовлетворяющих требуемому нестрогому неравенству. Текст программы приводится ниже.
Метка | Операция | Операнд | Комментарии |
| LXI | HL,01A6h | ;поместить в регистровую пару HL адрес первой из 120 ячеек памяти. |
| MVI | B,00h | ;задать начальное нулевое значение в регистр B, использующийся в качестве счетчика количества чисел A, попавших в заданный интервал. |
| MVI | C,120 | ;задать начальное значение в регистр C, использующийся для подсчета количества шагов цикла, в котором будут проверяться 120 ячеек памяти. |
META: | MVI | A,50 | ;поместить в аккумулятор верхнюю границу интервала – значение 50. |
| CMP | M | ;сравнить текущее значение числа A (содержимое ячейки памяти по текущему адресу) с верхней границей (числом 50 в аккумуляторе). |
| JC | MK2 | ;перейти к команде с меткой MK2, если проверяемое число больше 50 (в результате сравнения в предыдущей команде получилась отрицательное значение, т.е. был заем единицы из девятого в восьмой разряд при вычитании). |
| MOV | A,M | ;поместить текущее значение проверяемого числа из памяти в аккумулятор. |
| CPI | 10 | ;сравнить текущее значение числа с нижней границей (числом 50). |
| JC | MK2 | ;перейти к команде с меткой MK2, если проверяемое число меньше 10 (в результате сравнения в предыдущей команде получилась отрицательное значение). |
| INR | B | ;содержимое регистра B (счетчика чисел A) увеличить на единицу, если проверяемое число оказалось 50 и 10 |
MR2: | INX | HL | ;перейти к адресу следующей ячейки памяти, проинкрементировав содержимое указательной регистровой пары HL. |
| DCR | C | ;уменьшить на единицу содержимое регистра C (счетчика проверенных ячеек памяти). |
| JNZ | META | ;перейти к команде с меткой META (следующему шагу цикла проверки следующего значения числа A), если не все 120 ячеек проверены (содержимое регистра C не обнулилось). |
| MOV | A,B | ;переслать результат подсчета количества чисел 10A50 в аккумулятор. |
| OUT | 07h | ;результат подсчета вывести в порт вывода 716. |
| HLT | | ;остановить счетчик команд и дождаться внешнего аппаратного прерывания. |