ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.01.2025
Просмотров: 1725
Скачиваний: 5
СОДЕРЖАНИЕ
Микропроцессоры и эвм в приборостроении
1. Общая характеристика микропроцессоров.
1.1. Структура микропроцессора и его реализация.
1.2. Классификация современных микропроцессоров и их характеристики.
1.3. Принципы управления микропроцессорами.
1.4. Структура и типы команд микропроцессора.
1.5. Способы адресации информации и прерывание работы в микропроцессоре.
Косвенная регистровая адресация.
1.6. Организация ввода и вывода данных в микропроцессоре.
1.7. Способы наращивания разрядности.
1.8. Система команд микропроцессора.
2. Основы программирования микропроцессоров.
2.1. Языки программирования микропроцессоров.
2.2. Программирование на языке ассемблера.
2.3. Средства разработки прикладных программ.
2.4. Средства отладки прикладных программ.
3. Типовые микропроцессоры и их применение.
3.1. Структура и характеристика типовых мп с фиксированной разрядностью и набором команд.
3.2. Система команд однокристального микропроцессора.
3.3. Примеры написания программ.
3.3. Примеры использования микропроцессоров в иит.
4. Принципы организации и применения эвм и микропроцессорных систем.
4.1. Особенности организации структуры эвм.
4.2. Структура эвм с общей шиной.
4.4. Применение эвм в качестве контроллера и системы сбора данных.
4.5. Мультимикропроцессорные системы и коллективы вычислителей.
|
Метка |
Операция |
Операнд |
Комментарии |
|
|
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 будут подключены соответствующие сегменты семисегментного индикатора. Семисегментный индикатор имеет обозначение своих сегментов и выбранное подключение к разрядам порта вывода, как это показано на рис. 3.3.
Рис.3.3. Подключение семисегментного индикатора к разрядам порта вывода.
При выбранном подключении, приняв, что соответствующий сегмент индикатора светится при подаче на него логической единицы, между двоичными кодами индицируемых цифр и байтами на выходе порта (семисегментными кодами) должно быть соответствие, приведенное в табл.3.3.
Воспользуемся следующим приемом: поместим в десяти последовательно расположенных вслед за программой ячейках памяти семисегментные коды в том порядке, в каком они приведены в табл.3.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 последовательностью необходимых машинных команд, выполняющих эту операцию.
Таблица 3.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 |
|
;остановить счетчик команд и дождаться внешнего аппаратного прерывания. |