НАКОПИТЕЛЬ НА БАЗЕ БЫТОВОГО МАГНИТОФОНА
Сохранение программ на простом бытовом магнитофоне не только эффективно, но и необходимо для записи более длинных программ без использования дорогих цифровых магнитофонов, а также взамен записи на перфоленту. Дешевые бытовые магнитофоны имеют ограниченную полосу пропускания, высокий уровень шумов и непостоянную скорость протяжки. В отличие от принятой в цифровых магнитофонах схемы, где записываемый сигнал с помощью специального устройства модулируется разными частотами для логического 0 и логической 1, в описываемом здесь методе записи требования, предъявляемые к каналу передачи данных, минимальны. Вместо передачи уровней, соответствующих логическому 0 и логической 1, данные передаются в виде пачек импульсов заданной частоты (тона) с разным количеством импульсов в пачке. Основная частота должна лежать в пределах полосы пропускания магнитофона. Каждый бит передаваемой информации представляется в виде импульсной пачки, за которой следует пауза. Первая треть периода передачи бита всегда занята импульсами, во второй трети либо импульсы продолжаются, либо наступает пауза, что означает соответственно логическую 1 или логический 0, последняя треть периода — всегда пауза (рис. 10.4). Таким образом, значение бита данных задается отношением длины импульсной пачки к длине паузы. (Известны и другие системы записи, например основанные на количестве импульсов в пачке.) Для изучения методов формирования таких импульсных пачек введем в ПМ-ЭВМ следующую учебную программу:
014000016 MVIC, 252Q
014001 252
014002006 Ml: MVIB, 011Q
014003 Oil
014004257 М2: XRA A
014 005 323 OUT, OOOQ
014 006 000
014007315 CALL IMP
014010060
014011 014
014012171 MOV А, С
014013037 RAR
014014117 MOV С, А
014015322 JNC, МЗ
014 016 026
014017014
014 020 257 XRA A
014 021 323 OUT, OOOQ
014 022 000
014 023 303 JMP, M4
014 024 032
014025 014
014026076 МЗ: MVI A, 377Q
014027377
014 030 323 OUT, OOOQ
014031 000
014032315 М4: CALL, IMP
014 033 060
014 034 014
014035257 . XRA A
014 036 057 СМА
014 037 323 OUT, OOOQ
014 040 000
014041315 CALL, IMP
014 042 060
014043 014
014044171 MOV А, С
014 045 323 OUT, 002Q
014 046 002
014 047 005 DCR В
014050302 JNZ,M2
014 051 004
014052014
014 053 166 HLT
014 060 026 IMP: MVI D, 010Q
014061 010
014062257 XRA A
014063323 M5: OUT, 001Q
014 064 001
014 065 036 MVI E, 040Q
014 066 040
014067315 M6: CALL DL
014 070 277
014071 000
014072035 DCRE
014073302 JNZ.M6
014 074 067
014075 014
014076074 INK A
014 077 025 OCR D
014100302 JNZ,M5
014 101 063
014 102 014
014103311 RET
Рис. 10.4. Диаграмма передачи одного двоичного разряда
Программа, начиная с младшего разряда, преобразует байт информации, хранящийся в регистре С, в последовательность посылок, наблюдаемую в портах 000 и 001. Индикаторы порта 000 погашены в тех частях периода передачи каждого бита, когда должна выдаваться импульсная пачка, и горят, когда она не должна выдаваться, т. е. логическому 0 соответствует последовательность: не горит — горит — горит, а логической 1 — не горит — не горит — горит. Импульсы с заданной частотой следования появляются в младшем разряде порта 001, а в целом индикаторы порта 001 подсчитывают эти импульсы. Частота следования импульсов — примерно 2 Гц. Порт 002 позволяет наблюдать преобразуемое число, каждый разряд которого последовательно анализируется программой путем сдвига в разряд переноса. В ячейке 014Q 003Q хранится параметр, заносимый в регистр В, задающий количество преобразуемых разрядов числа. Здесь этот параметр равен девяти, так как кроме восьми информационных пачек для обозначения конца передачи числа передается импульсная пачка, соответствующая нулю. Подпрограмма формирования импульсной пачки имеет метку IMP. Количество импульсов в пачке равно половине числа, хранящегося в ячейке 014Q 061Q, которое обязательно должно быть четным. Длительность импульса в пачке определяется задержкой, задаваемой числом в ячейке 014Q 066Q. В учебной программе длительность импульса для наблюдаемости задана равной произведению этого числа на задержку, определяемую ПП DL. Для использования ГШ в качестве рабочей необходимо из ПП IMP изъять обращение к ПП DL, из основного текста изъять команду вывода в порт 002 (адреса с 014Q 044Q по 014Q 046Q), а вместо команды HLT ввести команду RET. Чтобы сформировать сигнал, который можно подавать непосредственно на вход записи магнитофона, используем схему, представленную на рис. 10.5. Эта схема позволяет регулировать уровень записи и ликвидирует постоянную составляющую сигнала.
Рис. 10.5. Схема формирователя сигнала для записи на магнитофон
Зададимся приемлемой для записи и воспроизведения на бытовом магнитофоне частотой импульсов в пачках, равной 2 кГц. Тогда легко подсчитать число, заносимое в регистр Е. Действительно, программный цикл от команды DCR Е до команды JNZ занимает 15 тактов. В ПМ-ЭВМ тактовая частота равна 1 МГц. Следовательно, чтобы получить задержку, равную половине периода повторения импульсов 1/(2000-2) = 250 мкс, необходимо задать 250/15 ~ 16 программных циклов. В регистр Е надо занести 020Q = 16. Если количество импульсов в пачке равно четырем (как задано в нашей программе), скорость передачи информации составит 2000/(4-3) ~ 167 бит/с.
Рис. 10.6. Формирование выходного сигнала с магнитофона
Для ввода информации с бытового магнитофона необходимо из полученного сигнала сформировать нормальные логические посылки на ТТЛ-уровнях, причем воспроизведению импульсной пачки должен соответствовать уровень логической 1, а паузе -уровень логического 0 (рис. 10.6). Количество импульсов в пачке не принимается во внимание. Такую схему легко реализовать на операционных усилителях или на обычных транзисторах. Формирователь может быть подключен к одному из входов порта 003, например выводу 4 микросхемы D23. В этом случае дальнейшие операции имеют чисто логический характер, легко реализуемый программным путем. Введем в ПМ-ЭВМ следующую демонстрационную программу, которую потом можно преобразовать в рабочую ПП ввода информации с бытового магнитофона:
014 000 006 MAG: MVI В, 010Q
014001 010
014 002 026 MVI D, OOOQ
014 003 000
014004315 Ml: CALL IMP
014005 120
014 006 014
014007332 JC.M1
014010004
014011 014
014012315 CALL IMP
014013 120
014014014
014015332 JC.M1
014 016 004
014017014
014020315 M2: CALL IMP
014021 120
014022014
014023322 JNC, M2
014 024 020
014025014
014026315 CALL IMP
014027 120
014030014
014031 322 JNC, M2
014032020
014033 014
014034025 M3: OCR D
014035315 CALL IMP
014 036 120
014037014
014040332 JC, M3
014041 034
014042014
014043315 CALL IMP
014 044 120
014045014
014046332 JC, M3
014 047 034
014 050 014
014051024 M4: INR D
014052315 CALL IMP
014053 120
014054 014
014055322 JNC.M4
014056 051
014057014
014060315 CALL IMP
014061 120
014 062014
014 063 322 JNC, M4
014064051
014065 014
014 066 172 MOV A, D
014067.027 RAL
014070171 MOV А, С
014071037 RAR
014072117 MOVC, A
014 073 026 MVI D, OOOQ
014 074 000
014075005 OCR В
014076302 JNZ,M3
014077034
014 100014
014 101 171 MOV А, С
014 102 323 OUT, OOOQ
014 103 000
014104257 XRAA
014 105 117 MOVC, A
014106303 JMP.MAG
014 107000
014 110014
014120036 IMP: MVIE, 377Q
014 121 377
014122035 M5: DCR E
014123302 JNZ, M5
014 124 122
014 125 014
014126333 IN,003Q
014 127 003
014130037 RAR
014 131 311 RET
Программа поразрядно формирует в регистре С число, после довательно вводимое через младший разряд порта 003 с помощью ПП IMP, которая производит опрос порта в заданном темпе. В основной части программы в регистре D подсчитываются опросы и формируется знаковый разряд числа в зависимости от соотношения длительности пачки и паузы: если пачка длиннее паузы — в знаковом разряде 1, если короче — в знаковом разряде 0. Биты знакового разряда последовательно заносятся в регистр С. Темп опроса задается числом по адресу 014Q 121Q, заносимым в регистр Е. В данном случае задержка равна 15-256 = 3840 мкс, а частота опроса соответственно равна 1/0,003840 ~ 260 Гц. Следовательно, при длине импульсной пачки до 0,5 с в регистре D накопится число, не большее 130, что гарантирует отсутствие переполнения регистра.
Перед вводом программы в ПМ-ЭВМ подключим к выводу 4 микросхемы D23 вывод 16 микросхемы D16 второй ПМ-ЭВМ, в которую введена описанная выше программа вывода, настроенная на длительность импульсной пачки не более 0,5 с. Вместо второй ПМ-ЭВМ можно подключить приведенный на рис. 10.6 формирователь и магнитофон, на ленту которого предварительно записаны с ПМ-ЭВМ импульсные последовательности для одиночных байтов, но тогда мы сталкиваемся с проблемами отладки всего тракта: ПМ-ЭВМ — выходной формирователь — магнитофон в режиме записи, а затем магнитофон в режиме воспроизведения — входной формирователь — ПМ-ЭВМ. В то же время при непосредственной связи между двумя ПМ-ЭВМ отпадают проблемы согласования уровней и при этом могут быть заданы любые временные характеристики сигналов.
Настроим программу вывода передающей ПМ-ЭВМ на выда чу одного байта информации из регистра С, т. е. используем программу в том виде, как она приведена в тексте. Для вывода байта необходимо нажать кнопки СБРОС и П. Если до этого в принимающей ПМ-ЭВМ были также нажаты кнопки СБРОС и П, через 3 — 4 с на индикаторах ее порта 000 можно будет наблюдать код числа, идентичный коду, хранящемуся в регистре С передающей ПМ-ЭВМ. Чтобы снова передать байт информации, нужно снова нажать кнопки СБРОС и П. Меняя содержимое регистра С передающей ПМ-ЭВМ, можно проверить правильность передачи для любых кодов. После такой проверки можно произвести проверку правильности передачи массива информации. Для этого в память передающей ПМ-ЭВМ нужно дополнительно ввести управляющую программу и внести в основную программу указанные выше изменения. Управляющая программа имеет вид
014110041 ММ1: LXI H, ADM
014 111 000
014 112 015
014113116 ММ2: MOV C.M
014114315 CALL M1
014 115 002
014 116 014
014117054 INR L
014120302 JNZ,MM2
014 121 113
014 122014
014 123 166 HLT
Здесь ADM = ADMHQ ADMLQ - символический адрес начала массива чисел, заносимый в регистровую пару H; Ml - метка начала программы вывода информации. Максимальная длина передаваемого массива - 256 байт, если он начинается с адреса ADMHQ OOOQ и кончается адресом ADMHQ 377Q.
Для проверки правильности передачи необходимо нажать кнопки СБРОС и П принимающей ПМ-ЭВМ, нажать кнопку СБРОС, набрать адрес начала управляющей программы (метка ММ1) и нажать кнопку П передающей ПМ-ЭВМ. На индикаторах порта 000 принимающей ПМ-ЭВМ будут последовательно появляться коды передаваемого массива. Коды массива могут быть занесены в ОЗУ принимающей ПМ-ЭВМ.
Для этого вместо команды MOV С, А по адресу 014Q 105Q необходимо занести команду RET и ввести дополнительно управляющую программу вида
014 041 МА1: LXIH,ADM
014 141 000
О14 143 161 МА2: MOVM,C
014 144 315 CALL MAG
014 145 000
014 146 014
014 147 054 iVrS » л
014 150 302 JNZ, MA2
014 151 143
014 152 014
014 153 166 HLT
Теперь для запуска программы принимающей ПМ-ЭВМ необходимо после нажатия кнопки СБРОС набрать адрес начала управляющей программы (метка МА1), а затем нажать кнопку П. Принимаемые коды по-прежнему наблюдаются на индикаторах порта 000, но после окончания передачи правильность принятого массива легко проверить, считывая его последовательно на индикаторах порта 002 принимающей ПМ-ЭВМ с помощью клавиатуры. После такой проверки можно уже отладить передачу информации с рабочей скоростью порядка 150 бит/с, затем включить между передающей и принимающей ПМ-ЭВМ выходные и входные формирователи, снова проверить передачу и лишь после этого включать магнитофон.