Файл: Микропроцессорные устройства систем управления.doc

ВУЗ: Не указан

Категория: Решение задач

Дисциплина: Не указана

Добавлен: 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.3. Интерфейсы МП-систем.

2.4. Применение МП-системы в качестве контроллера и системы сбора данных.

3. Основы программирования микропроцессоров.

3.1. Языки программирования микропроцессоров.

3.2. Программирование на языке ассемблера.

3.3. Средства разработки и отладки прикладных программ.

Средства отладки и диагностирования

Программные средства:

Аппаратно-программные средства:

4. Типовые микропроцессоры и их применение.

4.1. Структура и характеристика типовых МП.

4.3. Примеры написания программ.

5. Мультипроцессорные системы, транспьютеры.

5.1. Классификация систем параллельной обработки данных

Конвейерная и векторная обработка.

Машины типа SIMD.

Машины типа MIMD.

Многопроцессорные машины с SIMD-процессорами.

Многопроцессорные системы с общей памятью

5.2 Мультипроцессорная когерентность кэш-памяти.

5.3. Многопроцессорные системы с локальной памятью и многомашинные системы

5.4. Транспьютеры



Метка


Операция

Операнд

Комментарии




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, удовлетворяющих условию: 10A50. Результат подсчета вывести в порт вывода 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

;переслать результат подсчета количества чисел 10A50 в аккумулятор.




OUT

07h

;результат подсчета вывести в порт вывода 716.




HLT




;остановить счетчик команд и дождаться внешнего аппаратного прерывания.