Космонавтика  Архитектура 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


Рис. 4.22. Блок-схема программы определения факта освобождения клавиши клавиатуры.

На шаге € счетчик KTIME увеличивается на 1. Этот счетчик регистрирует количество полных сканирований матрицы клавиатуры, в течение которых замыканий ключа не было обнаружено.

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

Начало

Рис. 4.23. Блок-схема основной программы, вызывающей подпрограмму ввода значения ключа.

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

Вызов программ, представленных на рис. 4.10, 4.14, 4.18, 4.20, 4.22

Переход к программе, соответствующей значению KWGT

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

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



Затем основная программа, основываясь на значении переменной KWGT, установленном подпрограммой KEYIN, определяет адрес перехода к программной секции, выполнение которой реализует функцию замкнутого ключа. Мы видим, что-принципы программного управления клавиатурой обеспечивают универсальность ее применения. Функции клавиш легко изменяются посредством изменения программного обеспечения.

В нашей системе каждой клавише было приписано соответствующее значение веса KWGT, для отображения которого на-индикаторе используется два младших разряда. Это значит, что при нажатии клавиши, имеющей в матрице ключей обозначение R4C4, на индикаторе появятся цифры 000024, соответствующие весу нажатой клавиши. С помощью этой программы мож- но убедиться в правильности работы подпрограммы KEYIN. После этого следует назначить клавишам фактические функции.

4.12.

Инициализация программы

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

В секции инициализации программы определяются начальные значения переменных, которые в дальнейшем потребуются при выполнении программы. Например, устанавливается начальное значение указателя стека и маска прерываний. Мы еще не обсуждали вопросы обработки прерываний. Этому посвящена гл. 6.

Для нашей программы необходима начальная установка значений следующих переменных:

1. Указатель стека.

2. KROW= 00000001.

3. NROW=0.

4. KTIME=0.

5. COLFG = 0 (флажок выходов).

6. Индикатор = FF0000.

Выполнение пункта 6 обеспечит вывод на индикатор заранее известного значения.

Программа для выполнения всех функций системы приведена на рис. 4.24. На этом рисунке представлена программа для микропроцессора 8080, а на рис. 4.25 дана программа для микропроцессора 6800.

1 0000

2 0000

3 0000

4 ОООЭ

5 0000

6 0000

7 0000

8 0000

9 0000 Ю 0000

11 0000

12 0000

П 0003

14 0004

15 0005

16 0007

17 0009

18 ОООВ

19 ОООЕ

20 0011

21 0014

22 0017 2 3 0018

24 001B

25 OOIB

26 001B

27 001В

28 001В

29 001В

30 ООШ

31 ООШ

32 ООШ

33 ООШ

34 001В

35 ООШ

36 ООШ

37 ООШ

36 ООШ

39 0018

40 ООШ

41 001Е

42 0021

43 0024

44 002 6

45 0029

46 002С

47 002С

48 002С

49 002С

50 002С

51 0020

52 0020

53 0020

54 0U2C

55 0020

56 002F 5 7 002F

58 002F

59 002F О 002.F

ПРОГРАША ДЛЯ ВВОДА ДАННЫХ С КЛАВИАТУР И ЗАПИСИ НА МОП. *. * ПРОГРАММИСТ:ЛЕЙМ КОФФРОК В-28-79 * * ♦ *

ОЛО 00 УСТАНОВИТЬ НАЧ. АДРЕС

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

AF FB

D3 Fo D3 14

QJ Уг

32 00 32 01 32 02 32 03 30

32 04

10 10 10 10

KWGHT КСОМР KlWW

SP,1jFiH

ЖЯЦИАЛИЗИРОВАТЬ УКАЗАТЕЛЬ СТЕКА

НАЧ.ЗНАЧ. ФЛАНКОВ,ОБНУЛ. АККУМУЛЯТОРА

ВОЗМОЖНЫ ПРЕРЫВАНИЯ

OFOH

ВЫВЕСТИ КОЛЬ НА ДИСПЛЕИ

011H

UF2H

УСТАНОВИТЬ ДИСШ1Е/1=000000

KTIME

КТ1МЕ=0

CFLAG

GFLAG=l)

.STA

KWGHT

KWGHT=0

KCQdP

КСОЫР=0

АККУМУЛЯТ0Р=1

KHOrf

XROW=00000001

Pb УСТАНОВИМ АДРЕСА ПЕРЕМВНШХ

1000H

XTIMS+1

iJQU

ClLAG+1

KWGHT+1

КГ.0МР+1

i; u

KlUW+l

ччИ( * ДАЛЕЕ НАЧИНАЕТСЯ ПРОГРАММА ***ч********>********** * НАЧАЛО РИСУНКА 4.20

CD ЕВ CD DB ЗА 01 FE 00 CA Ш СВ В1

00 5вт

00 10

00 00

CALL 0ROW ВЫВЕСТИ АКТИВНУЮ СТРОКУ

CALL COLM ВЫЗВАТЬ ПОДПРОГ. ОВР. СТОЛВЦА

LDA CiLAG НЕОБХОДИМО ПРОВЕРИТЬ ФЛАЖОК СТОЛБЦА

CPI ООН ПРОВЕРИТЬ СТОЛБЕЦ НА АКТИВНОСТЬ

JZ SHOW СТОЛБЕЦ НЕ АКТИВЕН,ПРОВЕРИТЬ ШШ

CALL KEIW СТОЛБЕЦ АКТИВЕН,КАКОЙ ИМЕННО???

* ЮНЕЦ РИСУНКА 4.20

* НАЧАЛО РИСУНКА 4.21 ********* ИМЕЕМ АКТИВНУЮ КЛАВИШУ

♦♦ ♦ * ♦ *

* ♦ (ШАГ 1) *

ЗА 00 10 IDA KTIME

ПОВТОРШЙ ВЫЗОВ KTIME ИЗ ПАМЯТИ

ГК 00

* )и *(ШАГ .2) *

CPI ООН

КТ1МЕ=077

Рис. 4.24. Программа ввода информации с клавиатуры и вывода ее на индикатор.



61 0031 СА 53

62 0034

63 0034

64 0034

65 0034

66 0034

67 0034 ЗА 02

68 0037 4i

. 69 0038 ЗА 03 .70 ООЗВ В9

71 ООЗС СА 46

72 003F

73 ООЗ

74 003F

75 OOJF AF

76 0040 32 00

77 0043 сз 66-

78 0046

79 0046

80 0046

81 0046 ЗА 00

82 0049 ЗС

83 004А 32 00

84 004D 8 5 004 .8 6 004D

87 004 32

88 004i с2 66 8 9 0052 CD 6i

90 0055 CD А7

91 0058 сз IB

92 005В

93 005В

94 005В

95 005В ЗА 02

96 005Б 32 03

97 0061

98 0061

99 0061

100 0061 ЗЕ 01

101 0063 32 00

102 0066

103 0066

104 0066

105 0066 ЗЕ 01

106 0068 32 04

107 006В

108 006В

109 006В

ПО ООбВ СЗ IB

111 006Е

112 006е

113 ооба

tU 006е

115 ООбК

116 006е

117 006Е

118 006е

119 ООбЕ

120 006Е

JZ KCL01 Ш ПЕРВЫЙ РАв

19 LBA KWGHT

MOV с,А

10 LDA КСОМР

СМР С

00 J Z KCL02

* (НАГ 8)

ХНА А

10 STA KTIME

00 JMP KCL03

* * . (ШАГ 9) *

10 LDA KTIME:

INR А 10 STA K.TIMB

* * (111ДГ ю)

00 00 00 00

CPI 50 JNZ ксьоз

CALL КОШ CALL КоиТ JMP SEOW

ч (111АГ 3) *

Ю KCLQ1 LDA KWGHT Ю STA КСОМР

)► (ШАГ 4)

MVI А,01

10 STA XTIME

* (111АГ 5)

KCL03

А.01

KfiOW

* (ШАГ 6) 00 SBOVf

ДА,эта ПЕРШЙ РАЗ

* ♦*** ***

КАКАЯ ЦИФРА ВЫЛА НАБРАНА77Г РЕГИСТР CsKWCJHT РЕГИСТР А=КС0МР KC0MP=KWGHT??7 ДА,ОНИ РАВНЫ! ! I

9НИ НЕ РАВШ

ПЕРЕЗАПИСАТЬ KTIME

ИДТИ НА ПЕРЕЗАГРУЗКУ АКТИВ.НАБОРА

ВЫЗВАТЬ KTIME ИЗ ПАМЯТИ

КТ1МЕ=КТ1МЕ+1

JtTIME=KTIMji+l

КТ1МЕ=507?7

ЕЩЕ НЕ 50 .,

ПРОВЕРИТЬ ГОТОВНОСТЬ ПУЛЬТА ВЫДАТЬ НА ПУЛЬТ НА&АД К НАЧАЛУ

KCOMP=KWGfflf-

УСТАНОВИТЬ КТХМЕ=Т

УСТАЮВИТЬ АКТИВ.HAEOP=00ob(500t

ИДТИ К НШАЛУ ПРОГРАММЫ *

** ч* * * * *** **** ** 1* * * ************** НАЧАЛО ПРОГРАМШ *************************

* РЙС

4.22

121 006Е

122 0Э6Е

123 006Е

124 006Е

125 006Е

126 006Е

127 006Е

128 0070

129 0073

130 0074

131 0077

132 0077

133 0077

134 0077

135 007А

136 007А

137 007А

138 007А

139 007

140 007

141 037

142 007D

143 0080

144 0080

145 0080

146 0080

147 0083

148 008 5

149 Q088

150 0088

151 0088

152 0088 1 53 008В

154 008С

155 008F

156 008F

157 0081

158 008F

159 0091 )60 0094

161 0094

162 0094

163 0094

164 0097

165 0098

166 009В

167 009С

168 009С

169 009С

170 009G

171 009D

172 ООАО

173 ООАО

174 ООАО

175 ООАО

176 00А2

177 ООАЗ

178 00А6

179 ООАб

180 00А6

ПРОГРАММА ПОДГОТОВКИ пттА ******(ШАГ 1)

JS 01 32 04 3

32 05

10 10

KOPN

STA DCR STA

A,01

кюкг

NROW

ч (щАГ 2) *

32 00 10

STA KTIME

ч * (щАГ 3) CD EB 00 KOPNI CALL GROW

* ** (таг 4) *

С DB 00 CALL COLM

** (ШАГ 5)

ЗА 01 FE 00 c2 6б

ЗА 05 ЗС

32 05

FE 05 C2 7A

10 00

LDA CFLAG CP! 00 JSZ KOPN

(ШАГ 9)

LDA INR STA

NROW A

NROW

** *(ШАГ 10) *

CP! 05 00 JNZ K0PN1

** * (ШАГ 6)

ЗА 00 ЗС

32 00 47

10 10

LDA KTIM3

INR A

STA KTIMB

MoV B,A

32 05

3e 32 B8

сг 7A

******(ШАГ 6A)

XRA A 10 STA NROW

******(ШАГ 7)

MVI A,50 CMP В 00 JNZ KOPNI

(ШАГ 8) ♦

KKOW=00000001 NROW=00000000

KTIME=0

ВЫВЕСТИ НАБОР

ВВЕСТИ ДАНШЕ СТОЛБЦА

ВВЕСТИ CFUQ CFLAG=077

ПУЛЬТ ЕЩЕ НЕ СВОБОДЕН

ВВЕСТИ АКТИВНЫЙ НАБОР ЗАПИСАТЬ АКТИВНЕЙ НАБОР

ОНАНИРОВАНИЕ НЕ ЗАКОНЧЕНО

РЕГИСТР B=KTIME ЗНАЧЕНИЕ НАБОРА=0

КТ1МЕ=50777

. НЕТ,СКАНИРОВАНИЕ ЕЩЕ PAS



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