ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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.4. Применение мп-системы в качестве контроллера и системы сбора данных.
3. Основы программирования микропроцессоров.
3.1. Языки программирования микропроцессоров.
3.2. Программирование на языке ассемблера.
3.3. Средства разработки и отладки прикладных программ.
Средства отладки и диагностирования
Аппаратно-программные средства:
4. Типовые микропроцессоры и их применение.
4.1. Структура и характеристика типовых мп.
4.2. Система команд однокристального микропроцессора.
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 |
|
;остановить счетчик команд и дождаться внешнего аппаратного прерывания. |