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

Категория: Не указан

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

Добавлен: 28.12.2024

Просмотров: 2549

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

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

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.2. Система команд однокристального микропроцессора.

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

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