Космонавтика  Архитектура 3-х шинных систем 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [ 42 ] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Глава 9

ВИИ С рис. 9.U ЭТОТ адрес имеет значение 010В. И вышеприведенное соотношение дает

NEWA=БАЗОВЫЙ AAPEC+(KWGT-16),

NEWA = 0100+(19io-16,о),

NEWA=0100+0003,

NEWA = 0103.

Таким образом, получен адрес 0103 вместо требуемого 010В, указывающий оператор JMP CENTY (ОЮЗ), а не требуемый оператор JMP CLRAM (010В). Ситуация ухудшается, когда KWGT=17io. В этом случае в результате аналогичных расчетов получается NEWA=0101i6, т. е. абсолютный адрес, соответствующий среднему байту 3-байтовой команды, что является программной ошибкой. Анализируя положение, можно заметить, что в расчетах не учитывался тот факт, что каждая команда JMP занимает 3 байта памяти, а не 1 байт, как ранее предполагали. По этой причине вторая JMP команда смещена по отношению к первой не на один, а на три адреса. Для различных микропроцессоров трансляция команд JMP осуществляется по-разному. При этом необходима осторожность при вычислении адресов перехода по описанной схеме для заданного программного обеспечения.

Однако допущенная ошибка может быть легко исправлена путем изменения схемы расчета адреса перехода: NEWA = БАЗОВЫЙ АДРЕС+(KWGT-16) ХЗ.

С целью иллюстрации новой расчетной схемы рассмотрим прежний пример. Пусть значение KWGT=10,o. Базовый адрес есть OlOOie, как это показано на рис. 9.11. Тогда значение нового адреса будет следующее:

NEWA = БАЗОВЫЙ AAPEC+(KWGT-16) ХЗ,

NEWA=0100i6+(19io-16io) ХЗю,

NEWA=0100i6+(3ioX3io).

NEWA=0109io.

Из рис. 9.11 видно, что абсолютный адрес 0109 является правильным для входа в таблицу при KWGT=19. На рис. 9.12 приведена блок-схема реализации описанных вычислений для микропроцессора 8085. Соответствующая программа представлена на рис. 9.13.

9.5. Программные средства реализации

функции установки вдреса

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

Отметим, что подпрограмма KEY INPUT может быть вызвана в любой точке программы. С помощью этой подпрограммы вызываются данные, необходимость в использовании которых возникает в данной точке.

Проектирование управляющего программного обеспечения 255

Прежде всего рассмотрим функцию УСТАНОВКА АДРЕСА, которая может быть описана следующим образом. Функция установки адреса задает адрес памяти в интервале 0000-ОЗРРи, являющийся начальным адресом для проверки данных в ОЗУг программ или для ввода данных. Если нажимается ключ функции установки адреса, система автоматически переходит в режим ожидания ввода трех шестнадцатеричных цифр. По завершении такой операции система использует эти цифры в качестве адреса ОЗУг.

Теперь на табло отображается адрес ОЗУ (0000-03FF) и данные, записанные в этой ячейке. Если необходимо скорректировать данные, вводятся две новые шестнадцатеричные цифры. Эти данные записываются в ОЗУг при нажатии ключа ввода.

Если же мы хотим лишь проверить данные, то последовательным нажатием ключа ввода осуществляем перезапись исходных данных и увеличение на единицу адреса памяти. Блок-схема реализации подобной функции приведена на рис. 9.14.

Из рис. 9.14 видно, что реализация функции начинается с вывода на табло значения АЗОООО с целью проинформировать пользователя, что система ожидает ввода трех цифр адреса (ниблов). Затем программа их вводит. Отметим, что основной блок на схеме, помеченный как шаг 2, лишь устанавливает, что программа будет считывать три цифры. Считывание и OTo6pia-жение на табло цифр будет показано на примерах реальных программ. Описание же всех деталей основного блока шага 2 схемы может запутать общую картину.

Необходимые пояснения по программной реализации данного блока, позволяющие получить о нем детальное представление, будут даны при рассмотрении его описания с помощью мнемоники микропроцессора 8085. Приведенное предварительное упрощенное описание блок-схемы процесса имеет целью облегчить понимание основных идей. Поскольку для реализации программной функции необходимо ее подробное представление, то такое представление функции содержится в программных модулях, отображающих элементы блок-схемы, и может быть использовано при обсуждении материала.

Следующим шагом блок-схемы рис. 9.14 является чтение данных из ОЗУг по адресу, который введен пользователем. Система должна рассчитать абсолютный адрес считывания, поскольку ячейке 0000 ОЗУг в действительности соответствует адрес 1400i6. Этот системный адрес получается на основании таблицы распределения памяти рис. 9.1. Поэтому, если введен адрес 103i6, чтение будет осуществляться с абсолютно системного адреса 1400i6-j-0103i6= 1503. Отсюда становится ясно, что, до того как начать писать программы, необходимо составить хорошую таблицу распределения памяти.



Г Начало ~

Установка на табло АЗОООО

Ввод 3-х знаков с пульта

Запрос 3-х знаков адреса . у пользователя

переменная в памяти

Чтение данных из ОЗУ (AIN2 + 1400) = АДРЕС

Отображение адреса и данных


Переход на начало главной программы

ВЫХОД

S g m с

Ввод 2-х

знаков

Нет/-

Ввод ключа

Увеличение адреса на 1

Введен верный байт

Запись новых данных по адресу ОЗУ

Выводы новых данных на табло

Рис. 9.14. Блок-схема ф)гакциоиироваиия системы прн реализации функции

уставюкк адреса.

После чтения данных по заданному адресу ОЗУ2 адрес и данные отображаются на табло. Это предусмотрено блоком 4 схемы рис. 9.14.

Далее система анализирует следующий ключ. Если таким ключом является ключ стирания ввода, реализация функции завершается и осуществляется возврат в главную управляющую программу. При нажатии же ключа ввода производится приращение адреса ОЗУ2 на единицу (шаг 8) и отображение на табло нового адреса ОЗУ и данных, хранимых по этому адресу. Таким образом можно просмотреть память программ (ОЗУ2) и проверить данные.

Если осуществляется ввод ключа данных О-F (шаг 9), то программа рассмэтривает это как ввод новых данных по соответствующему адресу ОЗУ2 и ожидает ввода двух цифр. После того как эти цифры введены, проверяется факт отработки ключа ввода (шаг 10), подтверждающего введенные данные. Если же вводится какой-либо иной ключ, выполнение програм-

Ь 7 О

9 К) 1 1 I г I ) 14

1 Г> 17

К) 1)

.ij .1

)

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0002 0004 0005 0007 0009 0009 0009 ОООС OO0F ООП 0014 0014 0014 0017 001А 00 ID IJ020 0021 00 22 OU23 UO24 002 6 J029 0020

** * ♦ ♦ * * * * * * ♦ ♦ ♦ )(.

* ПОДПРОГРАША ADD.se.

* ЭТА ПРОГРАММА ВВЕДЕТ АДРЕС ИЗ ТРЕХ ЦИФР С ПУЛЬТА,

* ВЫВЕДЕТ АДРЕС НА ДИСПЛЕЙ И ЗАПОМНИТ ДАННЫЕ В

* ПРОГРАММЕ ПЗУ ПО АДРЕСУ,УКАЗАННОМУ НА ДИСПЛЕЕ

ЗЕ A3

D3 F2 AF

D3 Fl D3 FO

CD СЗ 04 ЗА C2 00 D3 FO 32 BF 00

CD C3 00

ЗА 02 00

32 BF 00

ЗА BE 00

E6 FO 32 CI 00 ЗА BF 00 21 CI 00

ADDSE

ORG 00

MVI А.ОАЗН

OUT 0F2H

XFA a

OUT OFIH

OUT OFOH

CALL KDET LDA KWGHT OUT OFOH STA AIN1

CALL

KDET KWGHT AIN2 AINl

OFOH AIN4 AIN2 H,AIN4

УСТАНОВИТЬ АДРЕС ПЕРВОГО БАЙТА ПРОГ.

ВЫВЕСТИ НА ДИСПЛЕЙ АЗОООО

ПРИНЯТЬ ПЕРВУЮ ЦИФРУ С ПУЛЬТА АККУМУЛЯТОР=ПЕРВОЙ ЦИФРЕ ВЫВЕСТИ ПЕРВУЮ ЦИФРУ ЗАПОМНИТЬ ПЕРВУЮ ЦИФРУ

ПРИНЯТЬ ВТОРУЮ ЦИФРУ с ПУЛЬТА АК1СУМУЛЯТ0Р=ВТ0РОИ ЦИФРЕ ЗА110МНИ1Ь ВТОРУЮ 1МФРУ ПРИНЯТЬ ПЕРВУЮ ЦИФРУ из ПАМЯТИ

СДВИНУТЬ ВЛЕВО НА 4 БИТА МАСКИРОВАТЬ АДШИЕ 4 БИТА СОХРАНИТЬ ПРОМЕЖУТ. РЕЗ. АККУМУЛЯТОР=МЛАДШИЕ 4 БИТА ВТОРОИ ЦИФ. УСТАНОВИТЬ В H,L АДРЕС AIN4

1ис. 9.15. Реализация блок-схемы рнс. 9.14 в кодах символического языка

микропроцессора 8085.



36 37 38 39 40 41 42 43 44 45 46 47 48 49

00 2F В6 00 30- D3 ТО 0032 00 32

00 32 CD СЗ 00

00 35 ЗА сг 00

32 СО 00 ЗА в? 00 17 17 17 17

ЕЗ 32

СО 00 F1

bf 00

ЗА D3

00 38 00 зв 00 3S оозр

0040 0041 00 42 S6 00 44 21 00 47 0048 0Н4А 004D 00 4D 004D AF 00 4Е D3 00 50 00 50 00 50 00 53 00 55 00 55 00 55 00 55 0055 0055 00 58 00 5В 00 50 00 5F 0060 0061 006 2 0062 006 2 006 3 006 5 0065 006 5 006 5 006 5

0065 £5

0066 CD СЗ 00 006 9 ЗА 02 00 0060 FE 1 1 00 6 F OA В9 00 00 71 FE 10

00 73 СА АВОО 00 76 00 76 00 76 00 76

00 76 CD СЗ 00 00 79 ЗА 02 00 007С 32 С1 ОО 007F D3 РО 0081 CD СЗ 00

00 84 ЗА С2 00

00 87

ОаА М OUT ОРОН

OALI, КПЕТ

lda kwght

sta ain3

lda ain2

ain ofoh lxi h,ain3 она U out 0F1H sta ain2

ХЯА A

out ofoh

lda ain1 out 0p2h

ЛЗГ. ИЛИ АККУМ. и ПЕРВОЙ ЦИФРЫ В AIN4 ЗАПИСАТЬ НА даСПЛЕЙ хххх

принять петьв цифру аккумулятор =третья цифра запомнить результат вызвать вторую цифру

сдвиг цифры влево на 4 вита

выделить 4 младших вита

Л)г. или втого й и третей цифр вывести цифру на дисплей xx-xx вторая и третья цифры в ain2

дисш1ей=хх-00

дасшшй=оохх)оо .где ххх-адрес

ТЕПЕРЬ ЧИТАЕМ ДАННЫЕ ИЗ ПАМЯТИ

нижняя граница =ain2 .верхняя гран>[ца=а1н1

21 00 14 ЗА БР 00 5f

ЗА ав 00

57 Е5 19

7е D3

NRED

LXI Н,1400Н LDA AIN2 nv E ,A LDA AIN1 inv D,A PUSH D DAD D

Unw A.M

OUT OFOH

Н,Ь=НАЧАЛЬНЫЙ АДРЕС

0,Е=АДРЕС ОЗУ ЗАПИСАТЬ

H,L=HAЧAЛЬHЫЙ АДРЕС

загрузить в аккум. данные из озу установить дисшей=оххх00,где dd-данн

МЫ только что окончили шаг 4 блок-СХЕМЫ

PUSH Н ЗАПОМНИТЬ АДРЕС

CALL КПЕТ ЖДАТЬ СЛЕДУ!ШГ НАЖАТИЯ НЛАВИШИ

LDA KWOHT АККУМУЛЯТОР=ЗНАЧЕНИЕ КЛАВИШИ CPI 17

jz ADEX ДА .ИДТИ НА ВЫХОД ИЗ ЭТОЙ ПРОГРАММЫ

CPI 16 НАЖАТА КЛАВИША ENTER??

J2 STP8 ДА .ИДТИ НА ШАГ 8 БЛОК-СХЕМЫ

НЕовходимз ПРИНЯТЬ ДВЕ НОВЫЕ ЦИФРЫ И ЗАПОМНИТЬ их в Зу

ТИ1В

CALL KDEr LDA KWOHT STA AIN4 OUT OFOH CALL КШТ LDA KWGHT

ПРИНЯТЬ НОВУЮ ЦИФРУ АККУМУЛЯТОР=ЗНАЧЕНИЕ НЛАВЯШИ ПРОМЕЖУТОЧНЫЕ ЗАПОМИНАНИЯ ЗАПИСЬ НА ДИСПЛЕЙ ПРИНЯТЬ СЛЕДУЮЩУЮ ЦИФРУ

10 2

10 4

10 5

1 18

1 19

1Z>

1 22

1 28

1 54

SO 00 ci 00

со 00

со 00 РО

сзоо

С2 00

76 00

со 00

0087 32 008А ЗА 008D 17 00 8Е 17 00 8F 17 00 90 17 00 91 21 00 94 Вб 0095 32 00 98 ЕЗ 00 9А 00 9А 00 9А 00 9А 009А СЕ 00 9Е ЗА OOiO РВ 00 A2 С2 00 А5

ооа;

00А5 00А5 00 А5 ЗА ООАВ В1 00А9 77 ООАА В5 ООАВ ООАВ 00 АВ Е 1 ООАС 23 00 AD DI ООАВ 13 00 AF В5 ООЮ 7В 00В1 D3 ООВЗ 7Л 00 В4 D3

00В6 сз

00 В9 00 В9 00В9 Е1 ООВА D1 00 ВВ СЗ

ООВЗ 00 ав ооав 00 ав ооав ооав ооав 00

00 BF 00

00 со 00

0001 00

0002 00 ЪОСЗ 00 00 С4 00

00 С5

о EHROaS

STA AIN3

LDA AIN4

LXI H.AIN3 ORA M STA AIN3 OUT OFOH

ПЮ ВЕРИТЬ ДАННЫЕ

CALL КПЕТ

LDA KWOHT

CPI 16

JNZ TNIB

ВРВШНаО СОХРАНИТЬ в ПАМЯТИ ВЫЗВАТЬ ПЕРВУЮ ЦИФРУ

СДВИНУТЬ ВЛЕВО НА 4 ВИТА

юг. ИЛИ первой и ВТОГОЙ ЦИФР СОХРАНИТЬ ДАННЫЕ В ПАМЯТИ ВЫВЕСТИ НА ДИСПЛЕЙ

ПРИНЯТЬ КЛАВИШУ АККУМУЛЯ1)Р=ЗНАЧЕНИа КЛАВИШИ КЛАВИША ENTER???

КВТ,ПОВТОРНО ЗАПРОСИТЬ НОВШ Д4ННШ

ЗАПИСАТЬ ДАННЫЕ В ПАМЯТЬ

LDA AIN3

POP Н MOV М.А POSH Н

STP8 ГОР Н INX Н

pop inx

62 00

с4 00

PUSH D

mv к

OUT 0F1H

MOV A.D

OUT 0P2H

JMP HRED

ADEX ГОР H ГОР D JMP BEGIN

ВЫЗВАТЬ ДАННЫЕ ВООСХАНОВИТБ АДЕ>£С В ПАНЯТЯ ДАННЫЕ В ПАМЯТЬ

УВЕЛИЧИТЬ АДРЕС НА 1 ВОССТАЮ ВИТЬ АДРЕС ОЗУ

СОХРАНИТЬ ЗНАЧЕНИЕ

ВЫВЕСта АДРЕС НА дасплБй

ВЫВЕСТИ АДРЕС НА ДИСПЛЕЙ ЕШЕ РАЗ НАЧАТЬ ОПЕРАЦИЮ

идти НА НАЧАЛ) УПРАВЛЯВШИ ШОПРАИ.

ню вх) димо указать макет разжяения 1ере№нннх

ain1 nop ain2 nop ain3 nop ain3 nop kwght nop kdet

begin nop end

ПРЕДЮХЕНИЕ END АССЕМБЛЕРА

1 2 symbols



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [ 42 ] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57