Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет(2).docx
Скачиваний:
5
Добавлен:
17.08.2019
Размер:
568.59 Кб
Скачать

Индивидуальное задание №2: Программный секундомер

Задание

Реализовать программный секундомер, с выводом текущего времени на четырехразрядный семисегментный дисплей (порты 373-376)

Анализ задания

При реализации программного секундомера решаются три основные задачи: формирование программных задержек, вывод текущего времени на семисегментный дисплей, а так же хранение и инкрементация значения текущего времени.

Поскольку для индикации времени используется четырехразрядный дисплей, то необходимо хранить и выводит на дисплей только секунды и минуты.

Время хранится в регистрах B и C блока РОН в виде двоично-десятичных чисел. В регистре B хранятся минуты, в регистре C – секунды (старшие 4 разряда B – десятки минут, младшие – единицы минут; старшие 4 разряда C – десятки секунд, младшие – единицы секунд). Хранение времени в двоично-десятичном коде, позволяет многократно упростить процедуру вывода времени на дисплей. Но при этом несколько усложняется процедура инкрементации значения. Для правильной инкрементации необходимо сначала обычным способом инкрементировать значение регистра (B или C), а затем выполнить двоично-десятичную коррекцию получившегося результата.

Алгоритм инкрементации таков: сначала инкрементируется значение секунд, и оно сравнивается с 602/10. Если они равны, то значение секунд сбрасывается в ноль и инкрементируется значение минут. Затем значение минут сравнивается с числом 602/10 и если они оказываются равны, то значение минут обнуляется.

Формирование задержек реализуется за счет двух вложенных циклов, внутри которых формируются задержки. Подпрограмма задержки формирует программную задержку на 999665 тактов.

Вывод времени на дисплей происходит, начиная с младшего разряда (единицы секунд). Для этого из регистра C выделяются младшие четыре разряда, используя логическое ИЛИ с числом 000011112. Выделенное число – это значение единиц секунд. С использованием таблицы преобразования, это число преобразуется в семисегментный код, который выводится на дисплей в порт 373. Вывод остальных трех чисел производится аналогично.

Назначение РОН:

B – хранение минут;

C – хранение секунд;

D – счетчик числа итераций внешнего цикла задержки;

E – счетчик числа итераций внутреннего цикла задержки;

H – хранение базового адреса таблицы преобразования (H = 001);

L – хранение номера элемента таблицы преобразования;

A – хранение результатов математических и логических операций.

Схема алгоритма

см. следующую страницу

Текст программы

Адрес

Код команды

Мнемоника

Комментарии

Основная программа

000

061

LXI SP

Инициализация указателя стека; H = 002, L = 000

001

000

B2

002

002

B3

003

046

MVI H

Загрузка в H базового адреса таблицы перекодировки; H = 001

004

001

B2

005

006

MVI B

Обнуление счетчика минут; B = 000

006

000

B2

007

016

MVI C

Обнуление счетчика секунд; C = 000

010

000

B2

011

315

CALL

Вызов подпрограммы вывода - выводит значение минут и секунд на семисегментный дисплей

012

026

B2

013

000

B3

014

315

CALL

Вызов подпрограммы задержки - формирует программную задержку

015

073

B2

016

000

B3

017

315

CALL

Вызов подпрограммы инкремента - инкрементирует значение времени

020

133

B2

021

000

B3

022

303

JMP

Безусловный переход - формируется бесконечный цикл

023

011

B2

024

000

B3

Подпрогрпамма вывода

026

171

MOV A, C

Пересылка из C в A; A = C

027

346

ANI

Логическое И с числом 00001111. Выделение младших четырех бит.

030

017

B2

031

157

MOV L, A

Пересылка из A в L индекса элемена таблицы перекодировки; L = A

032

176

MOV A, M

Загрузка в A 7-сегментного кода

033

323

OUT

Вывод на 7-сегментный дисплей единиц секунд

034

373

B2

035

171

MOV A, C

Пересылка из C в A; A = C

036

017

RRC

Циклический сдвиг вправо на 4 разряда - старшие 4 разряда оказываются в младших

037

017

RRC

040

017

RRC

041

017

RRC

042

346

ANI

Логическое И с числом 00001111. Выделение младших четырех бит.

043

017

B2

044

157

MOV L, A

Пересылка из A в L индекса элемена таблицы перекодировки; L = A

045

176

MOV A, M

Загрузка в A 7-сегментного кода

046

323

OUT

Вывод на 7-сегментный дисплей десятков секунд

047

374

B2

050

170

MOV A, B

Пересылка из B в A; A = B

051

346

ANI

Логическое И с числом 00001111. Выделение младших четырех бит.

052

017

B2

053

157

MOV L, A

Пересылка из A в L индекса элемена таблицы перекодировки; L = A

054

176

MOV A, M

Загрузка в A 7-сегментного кода

055

323

OUT

Вывод на 7-сегментный дисплей единиц минут

056

375

B2

057

170

MOV A, B

Пересылка из B в A; A = B

060

017

RRC

Циклический сдвиг вправо на 4 разряда - старшие 4 разряда оказываются в младших

061

017

RRC

062

017

RRC

063

017

RRC

064

346

ANI

Логическое И с числом 00001111. Выделение младших четырех бит.

065

017

B2

066

157

MOV L, A

Пересылка из A в L индекса элемена таблицы перекодировки; L = A

067

176

MOV A, M

Загрузка в A 7-сегментного кода

070

323

OUT

Вывод на 7-сегментный дисплей десятков минут

071

376

B2

072

311

RET

Возврат из подпрограммы

Подпрограмма задержки

073

026

MVI D

Загрузка в D числа повторений; (D) = 234 (в 8) = 156 (в 10)

074

234

B2

075

036

MVI E

Загрузка в E числа повторений; (E) = 000 - 256 повторений

076

000

B2

077

041

LXI H

Задержка на 10 тактов

100

000

B2

101

001

B3

102

035

DCR E

Декрементация E

103

302

JNZ

Условный переход по не нулю E

104

077

B2

105

000

B3

106

025

DCR D

Декрементация D

107

302

JNZ

Условный переход по не нулю D

110

075

B2

111

000

B3

112

036

MVI E

Загрузка в E числа повторений; (E) = 251 (в 8) = 169 (в 10)

113

251

B2

114

041

LXI H

Задержка на 10 тактов

115

000

B2

116

001

B3

117

035

DCR E

Декрементация E

120

302

JNZ

Условный переход по не нулю E

121

114

B2

122

000

B3

123

042

SHLD

Задержка на 31 такт

124

000

B2

125

003

B3

126

021

LXI D

127

000

B2

130

000

B3

131

177

MOV A, A

132

311

RET

Возврат из подпрограммы

Подпрограмма инкремента

133

014

INR C

Инкрементация секунд (С)

134

171

MOV A, C

Пересылка из C в A; A = C

135

047

DAA

Двоично-десятичная коррекция

136

117

MOV C, A

Пересылка из A в C; C = A

137

356

XRI

Сравнение аккумулятора с числом 60 в двоично-десятичном коде; A xor 01100000

140

140

B2

141

312

JZ

Условный переход по флагу Z = 1

142

164

B2

143

000

B3

144

041

LXI H

Задержка на 50 тактов

145

000

B2

146

001

B3

147

041

LXI H

150

000

B2

151

001

B3

152

041

LXI H

153

000

B2

154

001

B3

155

041

LXI H

156

000

B2

157

001

B3

160

041

LXI H

161

000

B2

162

001

B3

163

311

RET

Возврат из подпрограммы

164

004

INR B

Инкрементация минут (B)

165

170

MOV A, B

Пересылка из B в A; A = B

166

047

DAA

Двоично-десятичная коррекция

167

107

MOV B, A

Пересылка из A в B; B = A

170

016

MVI C

Обнуление секунд (С)

171

000

B2

172

356

XRI

Сравнение аккумулятора с числом 60 в двоично-десятичном коде; A xor 01100000

173

140

B2

174

312

JZ

Условный переход по флагу Z = 1

175

202

B2

176

000

B3

177

366

ORI

Задержка на 7 тактов

200

377

B2

201

311

RET

Возврат из подпрограммы

202

006

MVI B

Обнуление минут (В)

203

000

B2

204

311

RET

Возврат из подпрограммы

Таблица перекодировки

H = 001

077

00111111

0

L = 000

001

006

00000110

1

002

133

01011011

2

003

117

01001111

3

004

146

01100110

4

005

155

01101101

5

006

175

01111101

6

007

007

00000111

7

010

177

01111111

8

011

157

01101111

9

Результаты

В результате на семисегментном дисплее виден счет времени (минуты и секунды).

Выводы

Процессор Intel 8080 обладает довольно большим списком возможностей, но при этом, по большей части, эти возможности реализованы не очень удобно. Так, например, неудобно реализованы математические функции. Обязательно один из операндов должен находиться в аккумуляторе и результат помещается на его место. В задачах, в которых происходит последовательная обработка введенных на первом этапе данных ( ). Но в остальных случаях это оказывается неудобно из-за того, что приходится выполнять много пересылок между аккумулятором и другими регистрами РОН. Так же, аккумулятор оказывается невозможно полноценно использовать в качестве регистра общего назначения.

Кроме того, в качестве примера можно привести команды сдвигов. В списке команд процессора присутствует четыре команды различных видов сдвигов, но при этом все они выполняют циклические сдвиги. А если необходимо выполнить простой арифметический сдвиг необходимо выполнять предварительные операции.

Так же большим недостатком процессора является отсутствие аппаратно реализованных умножителей и делителей. В результате, в случае необходимости выполнить умножение или деление (кроме умножения и деления на степени двойки (2, 4, 8, 16 …), которые реализуются с помощью сдвигов) необходимо писать подпрограммы. Эти подпрограммы занимают память и выполняются медленно, из-за чего очень сильно увеличивается время выполнения основной программы. Но этот недостаток объясняется тем, что процессор содержит всего 4500 транзисторов и реализовать умножители и делители на нем просто невозможно.

Из преимуществ системы команд самым большим является ее простота. Система команд i8080 содержит всего 3 формата команд: однобайтовый, двухбайтовый и трехбайтовый. Кроме того код операции всегда содержится в начале команды и занимает ровно один байт. В результате этого система команд процессора Intel 8080 проста в изучении и применении.

Из недостатков архитектуры процессора i8080, можно назвать довольно маленькое количество регистров общего назначения. Всего регистров 7 штук (B, C, D, E, H, L и A) и регистр M, который обозначает память. Из этих семи регистров аккумулятор A трудно использовать как РОН по названным ранее причинам. Так же регистровая пара HL, оказывается неудобна для использования из-за того, что в ней должен храниться адрес ячейки памяти при косвенной адресации. В результате остается только 4 регистра, которые можно использовать полностью, а такого количества очень мало. Как следствие этого приходится часто обращаться к памяти для хранения данных.

Так же недостатком архитектура процессора является система обозначений регистров общего назначения. Одной и той же буквой (B, D, H) обозначается одновременно и регистровая пара (BC, DE, HL) и отдельные регистры. Из-за этого могут возникать трудности при написании программ. В последующих процессорах фирмы Intel, эта проблема была решена путем изменения названий регистров. Например, шестнадцатиразрядная регистровая пара обозначается bx, а отдельные регистры обозначаются bh (старший байт) и bl (младший байт).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]