Текст
                    DD1 К5ШЛН2

3

PA2o-§-

PA3°-^-
nis ~ П

i
'S

Е=

I

PCS о

IJ

DD2 К561ЛН2

WAIT

PC7 о--------- ОШ,

Таблица X2

; ПОДПРОГРАММА ОБСЛУЖИВАНИЯ МОЗАИЧНОГО

> АЛФАВИТНО-ЦИФРОВОГО ПЕЧАТАЮЩЕГО УСТРОЙСТВА

> ПРОИЗВОДСТВА ГДР 'R0B0TR0N-1156'.

)' ПОДДЕРЖИВАЕТСЯ СТАНДАРТНЫЙ ПРОТОКОЛ

> ОБМЕНА ТИПА 'HAND-SHAKE'. 

В НАЧАЛЕ БАЗОВОЙ ПРОГРАММЫ ПОРТ ИНТЕРФЕЙСА ; НАСТРАИВАЕТСЯ НА-РЕЖИМ!	
;	КАНАЛ А  >	КАНАЛ В	- ВЫВОД  - ПРОИЗВОЛЬНО
;	МЛ.ПОДКАНАЛ С	- вывод
)	СТ.ПОДКАНАЛ С	- ввод
jsz=sx==s==z=======z=sxsssxzss=ssssssxs=ss===xs=======s=== TTV0!  LDA	FTTO	iВЫВОД НА ЦИФРОПЕЧАТЬ  ORA	A	fРАЗРЕШЕН?  JZ	CONOUT	;ЕСЛИ НЕТ - ТОЛЬКО НА  >ДИСПЛЕЙ PUSH	Н	;СОХРАНИТЬ ПАРУ 'HL'  LXI	H/RUS	/АДРЕС РУС - В 'HL'  ТТ01!  LDA	CPRT	;УСТРОЙСТВО ГОТОВО?  ANI	0C0H  JNZ	ТТ01	/ЕСЛИ НЕТ/ ТО ЖДАТЬ  MUI	М/3	/ИСТОЧНИК ГОТОВ  MOU	А/С	/ПОДГОТОВИТЬ ДАННЫЕ  ANI	7FH	/'УБРАТЬ' СТАРШ.БИТ  STA	APRT	/ВЫДАТЬ ДАННЫЕ  MUI	М/0	/ПЕРЕДНИЙ ФРОНТ СТРОБА  MUI	М/1	/ЗАДНИЙ ФРОНТ СТРОБА  TT02S LDA	CPRT	/ПЕЧАТЬ ИДЕТ?  ANI	60Н  JZ	ТТ02	/ЕСЛИ ДА/ ЖДАТЬ КОНЦА  MUI	М/2	/ИСТОЧНИК НЕ ГОТОВ  POP	Н	/ВОССТАНОВИТЬ 'HL'  JMP	CONOUT	/ВЫВЕСТИ НА ДИСПЛЕЙ	
Г.	:zssssss===xsss==sxs=x====s=========  Члиянц (UY5XE), В. Голутвин

ЧАСЫ В КОМПЬЮТЕРЕ

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

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

При аппаратной реализации основная задача — передать
показания электронных часов на шину данных компьютера.
Желательно также иметь возможность по командам компью-
тера корректировать показания часов, устанавливать время
срабатывания будильника. К сожалению, большинство БИС,
предназначенных для электронных часов, нельзя непосредствен-
но связать с компьютером. Приходится разрабатывать доволь-
но сложную схему сопряжения, содержащую мультиплексоры,
буферные регистры и т. п. Зачастую эта схема оказывается слож-
нее самих часов.

Положение изменилось с освоением промышленностью мик-
росхемы КР512ВИ1, специально предназначенной для работы
в составе микропроцессорных систем в качестве часов реально-
го времени с будильником, календарем, а также ОЗУ общего
назначения емкостью 50 байт.

Микросхема выполнена по КМОП технологии, питается от
одного источника напряжением от 3 до 8 В. Потребляемая
мощность очень мала, что позволяет питать микросхему от авто-
номного источника (батареи), сохраняя при отключении основ-
ного источника питания микропроцессорной системы правиль-
ный ход часов и информацию, занесенную во внутреннее ОЗУ.

Я7

При напряжении питания 5 В время цикла записи или чтение информации из микросхемы не менее 1 мкс (сюда входит время установки адреса и время собственно записи или чтения). Прр напряжении 3 В это время увеличивается до 5 мкс. Поэтому режим пониженного напряжения питания рекомендуется приме нять только для хранения информации при питании от авто номного источника. Микросхема КР512ВИ1 совместима по ло гическим уровням с микросхемами ТТЛ. Как и у других КМОП микросхем, ее входы имеют очень малый ток утечки, не превы- шающий единиц микроампер. Все выходы допускают нагрузку током до 10 мА. Микросхема выполнена в 24-выводном пласт- массовом корпусе, аналогичном корпусам микросхем серий К155, К561. Условное обозначение микросхемы КР512ВИ1 и основная схема ее включения показаны на рис. 1. Номинальные значе ния элементов схемы кварцевого генератора указаны для резо- натора РК-72 от электронных часов, имеющего резонансную частоту 32 768 Гц. Можно использовать и другие резонаторы на указанную частоту, а также на частоты 4 194 304 или 1048 576 Гц. В последнем случае резистор R3 заменяют пере- мычкой, а номинальное значение резистора R4 уменьшают до 10 МОм. Если в составе микропроцессорной системы уже име- ется генератор одной из указанных выше частот, то сигнал от него можно подать на вход OSC1, оставив контакт OSC2 сво- бодным. Следует иметь в виду, что ток, потребляемый микро- схемой от источника питания, зависит от тактовой частоты. Если при частоте 32 768 Гц он не превышает 50 мкА, то при более высоких частотах может доходить до 3 мА. Сигнал тактового генератора микросхемы можно снять с выхода С ROUT для использования в других устройствах сис- темы. Он поступает на этот вход непосредственно (CA/?S=1) или после деления частоты на 4 (CKFS=0). Микросхема име- ет выход еще одного сигнала (SQIT), получаемого делением частоты тактового генератора. Коэффициент деления задается командами, поступающими от процессора. Включается и выклю- чается этот сигнал также командами процессора. Для микропроцессорной системы микросхема КР512ВИ1 представляется как 64 восьмиразрядные ячейки памяти, имею- щие адреса от ООН до 3FH. Распределение памяти показано в табл. 1. Возможны запись и чтение любой ячейки за следую- щими исключениями: по адресам ОСН, 0DH возможно только чтение; старшие разряды по адресам ООН и ОАН можно только считывать. Микропроцессорная система устанавливает начальные зна- чения времени и даты, записывая их в соответствующие ячейки микросхемы, и получает информацию о текущем времени, счи- тывая эти ячейки. 38 Рис. 1- Схема включения МКС КР512ВИ1 Микросхема связана с процессором через дву- направленную мультипле- ксированную шину адреса данных (выводы ADO... AD7). Для управления записью и считыванием информации служат вхо- ды СЕ (выбор микросхе- мы), AS (строб адреса), DS (строб данных) и R/~W (чтение/запись). Когда на входе СТ установлен высокий логи- ческий уровень, шина AD, входы DS и /?/ТГ отклю- чены от шин процессора. Кроме того, в этом режи- ме снижается мощность, +53 VD3 ЗД522А V01 КД522А 01 4100 R2 20K DD ИР512ВШ +4..-5 в (батарея) 02 4100 R микро- процессорной- системе 4 “7 Т IT И 77 /5 Jj) AS 03 10 * 0420 T _||_I R4 22М -Swsil Щ PS РТС CKFS DSC! ADO ADI AD2 ADJ AD4 AD5 ADD ADI \0SC2 SOW WOUT потребляемая микросхе- мой от источника питания. Низкий уровень должен быть уста- новлен на входе СЕ во время действия импульса AS и сохра- няться неизменным во время всего цикла записи или чтения. Допускается постоянное соединение входа СЕ с общим про- водом. Таблица 1 Распределение памяти микросхемы КР512ВИ1 Адрес Данные ООН Секунды 01 н Секунды (будильник) 02Н Минуты озн Минуты (будильник) 04Н Часы 05Н Часы (будильник) 06Н День недели 07Н День месяца 08Н Месяц 09Н Год ОАН Регистр А 0BH Регистр В ОСН Регистр С 0DH Регистр D с 0EH ОЗУ общего по 3FH назначения 39
Сигнал AS подается в виде положительного импульса вг время наличия информации об адресе на шине AD. Адрес за писывается во внутренний буфер микросхемы по срезу этогг импульса. В этот же момент анализируется логический уровень сигнала на входе DS и в зависимости от него устанавливается дальнейший режим работы входов DS и Если этот уро- вень был низким, то во время положительного импульса DS данные будут считаны из микросхемы или записаны в нее. На- правление передачи определяется логическим уровнем на входе во время действия импульса DS. Высокий уровень озна- чает чтение из микросхемы, а низкий — запись в нее. При высоком уровне на входе DS в момент среза импульса AS для считывания информации из микросхемы необходимо подать отрицательный импульс DS (на входе /?/ТГ высокий уро- вень), а для записи — отрицательный импульс (на входе DS высокий уровень). Такая сравнительно сложная логика работы микросхемы позволяет подключать ее к микропроцессо- рам различных типов, используя минимальное число дополни- тельных логических элементов. Выход IRQ (запрос прерывания) предназначен для сигна- лизации процессору о том, что внутри микросхемы произошло событие, требующее программной обработки. Таким событием может быть окончание процесса обновления информации о вре- мени в соответствующих ячейках микросхемы (оно производит- ся автоматически каждую секунду) или срабатывание будиль- ника. Возможна также генерация запросов прерывания с пе- риодом, равным периоду сигнала на выходе SQW. Выход IRQ выполнен по схеме с «открытым стоком». Вход RESET (сброс) предназначен для установки в исход- ное состояние узлов микросхемы, ответственных за связь с микропроцессорной системой. При низком уровне на входе RESET никакое вмешательство в работу микросхемы со сторо- ны процессора невозможно. На ход часов, календарь и содер- жимое ячеек ОЗУ этот вход не влияет. Низкий уровень на нем должен поддерживаться не менее 5 мкс после подачи напря- жения питания. Основное назначение входа PS (датчик питания) — конт- роль непрерывности подачи питающего напряжения. Он под- ключается таким образом, чтобы напряжение на нем падало до нуля при любом, даже кратковременном, отключении пита- ния микросхемы. Низкий логический уровень на этом входе должен сохраняться не менее 5 мкс после возобновления по- дачи питания. При этом в старший разряд регистра D автома- тически записывается ноль. Единицу можно установить только считыванием этого регистра. Это позволяет процессору опре- делить, не снималось ли питание с микросхемы и достоверна ли содержащаяся в ней информация. Для управления работой микросхемы и анализа ее состоя- ния предназначены регистры A...D. Формат этих регистров при- веден в табл. 2, а назначение отдельных разрядов описывается ниже. Регистр А: UIP DV0...DV2 RS0...RS3 Единица в этом разряде означает, что происхо- дит или начнется менее чем через 244 мкс обнов- ление информации о времени. Длительность цик- ла обновления 1984 мкс при тактовой частоте 32 768 Гц или 248 мкс при других тактовых час- тотах. UIP можно только считывать, на него не действует сигнал RESET. Записав единицу в раз- ряд SET регистра В, можно запретить обновле- ние- и тем самым сбросить UIP. Устанавливают режим работы внутреннего дели- теля частоты в соответствии с используемой опорной частотой (см. табл. 3). Устанавливают частоту сигнала на выходе SQW и период повторения периодических прерываний (см. табл. 4). Регистр В: SET Если в этом разряде записан ноль, то каждую секунду выполняется цикл обновления информа- ции о текущем времени и сравнения текущего времени с заданным временем срабатывания бу- дильника. Единица в этом разряде запрещает обновление, давая возможность записать в ре- гистры времени, календаря и будильника началь- ные значения. Таблица 2 Формат управляющих регистров Адрес D7 £>6 D5 D4 D3 D2 DI DO ОАН UIP* DV2 DVI DVO RS3 RS2 RSI RSO ОВН SET PIE AIE UIE SQWE DM 24/12 DSE ОСН IRQF* PF* AF* UF* 0* 0* . 0* 0* 0DH Приме! считывать инф VRT* а н и е. эрмацию 0* Из pa 0* зрядов, 0* помечен 0* НЫХ *, П 0* роцессо] 0* может 0* только
Таблица 3 Установка опорной частоты DV2 DVI DV0 Частота, Гц 0 0 0 4 194 304 0 0 1 1 048 576 0 1 0 32 768 1 1 X Сброс делит. PIE Разрешение прерываний с периодом, задаваемым разрядами RS0...RS3 регистра А. Может быть сброшен сигналом RESET; AIE Разрешение прерываний от будильника. Может быть сброшен сигналом RESET. UIE Разрешение прерываний по окончании ццкла обновления. Может быть сброшен сигналом RESET. SQWE Разрешение выдачи сигнала на выход SQ1T. Мо- жет быть сброшен сигналом RESET. DM Единица в этом разряде означает, что данные о времени и дате представлены^ в двоичном виде, ноль — в двоично-десятичном. Значение этого разряда нельзя изменять без повторной записи начальных значений в ячейки времени и кален- даря. 24/12 Устанавливает 24-часовой (1) или 12-часовой (0) режим счета времени. В 12-часовом режиме время после Полудня (РМ) отмечается единицей в старшем разряде регистра часов (адрес 04Н). DSE Разрешение автоматического перехода на летнее время. Когда в этом разряде записана единица, то в последнее воскресенье апреля после 01 ч 59 мин 59 с автоматически устанавливается 03 ч 00 мин 00 с, а в последнее воскресенье октября после 01 ч 59 мин 59 с следует 01 ч 00 мин 00 с. К сожалению, моменты перехода с зимнего на летнее время и обратно не совпа- дают с принятыми в СССР. Регистр С: IRQF Флаг запроса прерываний. Устанавливается в единицу при выполнении условия:
PFXPIE+AFXAIE + UFXUIE= 1. Одновременно с установкой IRQF=\ на контак- те IRQ устанавливается низкий уровень. Флаг сбрасывается после чтения регистра С или сигна- лом RESET. PF Устанавливается в единицу фронтом сигнала на выходе внутреннего делителя частоты, выбранном в соответствии с разрядами RS0...RS3 регистра А. Флаг сбрасывается после чтения регистра С или сигналом RESET. AF Устанавливается в единицу при совпадении те- кущего времени с временем, указанным в реги- страх будильника. Флаг сбрасывается после чте- ния регистра С или сигналом RESET. UF Устанавливается в единицу после окончания каждого цикла обновления. Флаг сбрасывается после чтения регистра С или сигналом RESET. Регистр D: VRT В этом разряде устанавливается ноль при низком уровне на входе PS. Единица устанавливается только считыванием регистра D. После включения питания микросхемы КР512ВИ1 необхо- димо записать в регистр А код, соответствующий примененному кварцевому резонатору и необходимой частоте сигнала на выходе SQW (или частоте периодических прерываний). Например, для частоты резонатора 32 768 Гц и частоты SQIF 512 Гц в регистр А должен быть записан код 00100111 (27Я). Затем в регистр В заносят код с единицей в старшем разряде, запрещая таким образом ход часов. Остальные разряды этого кода устанавли- вают необходимый режим счета времени и генерации запросов прерывания. Например, код 10000110 устанавливает 24-часовой счет времени без автоматического перехода с зимнего на летнее время и обратно при двоичном представлении данных. Выдача запросов прерывания и сигнала SQIT запрещены. После этого в ячейки времени, календаря и будильника заносятся значения, с которых начнется отсчет. Значения должны заноситься в фор- мате, установленном в соответствующих разрядах регистра В. Например, десятичному числу 11 соответствует 00001011 (0BH) в двоичном формате и 00010001 (ПН) в двоично-десятичном формате. В 12-часовом режиме время после полудня отмеча- ется единицей в старшем разряде ячейки часов. Например, 00000111 (7Н) соответствует семи часам утра, а 10000111 (87Н) — семи часам вечера. Дни недели кодируются следующим образом: 1 — воскре- сенье, 2 — понедельник и т. д. Если не включен автоматический переход с зимнего времени на летнее, то можно использовать и более привычное кодирование, когда 1 соответствует поне- дельнику, а 7 — воскресенью. Месяцы кодируются обычным образом: 1 —январь, 2 — февраль и т. д. Год задается двумя младшими цифрами, например, 1989 год записывается как 89. После установки начальных значений можно запускать часы. Для этого код в регистре В достаточно заменить таким же, но с нулем в старшем разряде. Одновременно можно разрешить необходимые прерывания и выдачу сигнала на выход SQW. Каждую секунду микросхема КР512ВИ1 будет обновлять инфор- мацию о времени (первый раз обновление произойдет спустя 0,5 с после записи нуля в старший разряд регистра В). Цикл обновления занимает 1948 мкс при тактовой частоте 32 768 Гц или 248 мкс при других тактовых частотах. Во время этого цикла запрещен доступ процессора к ячейкам времени, кален- даря и будильника. Их считывание даст неопределенный резуль- тат. О том, что идет обновление, можно узнать, проанализиро- вав старший разряд регистра А. Ноль в этом разряде говорит о том, что до начала очередного цикла обновления осталось не менее 244 мкс. В процессе обновления к содержимому ячейки секунд при- бавляется единица, а если число секунд превысило 59, то в этой ячейке записывается ноль и единица прибавляется к содержи- мому ячейки минут и так далее вплоть до ячейки лет. Внутрен- няя логика микросхемы автоматически учитывает количество дней в месяце, различая високосные и невисокосные годы. Однако программист обязан правильно задать начальные значения. Это относится не только к дате, но и к другим величинам. Нельзя, например, в ячейку минут записывать число, большее 59. Одновременно с обновлением информации о времени задан- ное время срабатывания будильника сравнивается с текущим. Следует иметь в виду, что если в любую из ячеек будильника записан код, содержащий единицы в двух старших разрядах (0C0H...0FFH), она переходит в безразличное состояние и не учитывается при сравнении с текущим временем. Например, если записать код безразличного состояния по адресу 05Н, то будиль- ник будет срабатывать в заданную минуту и секунду каждого часа. После считывания регистра С все его разряды автомати- чески сбрасываются в ноль. Единицы в этих разрядах появятся вновь после очередного наступления соответствующих событий и будут сохраняться только до следующего считывания. Так что если необходимо неоднократно анализировать состояние различных разрядов этого регистра, то после считывания нужно сохранить в памяти его копию, а затем проверять отдельные Разряды копии. Подключение микросхемы КР512ВИ1 к микропроцессорам серий К1801, К1810, К1821 и другим, имеющим мультиплекси-
рованную шину адреса / данные, не вызывает затруднений. Мик- росхема КР512ВИ1 займет в адресном пространстве компью- тера 64 яйейки. К ней можно обращаться обычными командами чтения и записи в ячейки памяти или ввода / вывода в порт. Микропроцессор КР580ВМ80А имеет раздельные шины адре- са и данных, так что для подключения к ним КР512ВИ1 тре- буется специальная схема согласования. Можно объединить шины при помощи мультиплексоров, но схема управления ими полу- чается достаточно сложной. Кроме того, при высокой тактовой частоте процессора и пониженном напряжении питания микро- схемы КР512ВИ1 длительность импульсов, генерируемых процес- сором, может оказаться недостаточной. Другой способ подключения этой микросхемы к микропро- цессору КР580ВМ80А требует выделения для нее всего двух адресов памяти или портов ввода / вывода. По одному из них записывается адрес внутренней ячейки микросхемы, а по другому записываются или считываются данные. Процедура чтения / за- писи в этом случае занимает несколько больше времени, так как требует выполнения двух команд вместо одной, но это оку- пается упрощением схемы. Схема подключения микросхемы КР512ВИ1 к радиолюби- тельскому компьютеру «Радио-86РК» по второму способу пока- зана на рис. 2. Точки подключения к компьютеру указаны в со- ответствии с его схемой. Дополнительный дешифратор (D1) делит на восемь частей область адресов ОАОООН... OBFFFH, в исходном варианте выделенную микросхеме КР580ВВ55 (D14 по схеме компьютера). Вход CS микросхемы КР580ВВ55 под- ключается к выходу дополнительного дешифратора, на котором устанавливается низкий уровень при обращении процессора к адресам ОАОООН.. .0A3FFH. Таким образом сохраняется возможность выполнения программ, разработанных для исход- ного варианта компьютера, в которых к этой микросхеме обра- щаются по адресам ОАОООН... 0А003Н. Области адресов 0A400H...0A7FFH и 0А800Н...OABFFH используются соответственно для программируемого интерваль- ного таймера КР580ВИ53 и универсального адаптера последо- вательного интерфейса КР580ВВ51, которые на схеме (см. рис. 2) не показаны. Микросхема КР512ВИ1 занимает область адресов OACOOH ...OAFFFH. Остальные четыре области по одному килобайту зарезервированы для возможного подключе- ния других внешних устройств. Для других компьютеров схема дешифратора будет иной, но в любом случае он должен выделять для микросхемы КР512ВИ1 не менее двух адресов, различающихся единицей младшего раз- ряда. Шина адреса / данные микросхемы КР512ВИ1 подключается к шине данных микропроцессора КР580ВМ80А. Элементы микро- схем D2.3, D2.5, D2.6, D3.3, D3.4 делят область адресов 01 К555ИД1 ОАОООН...OABFFH (014 выв.6) 0A400H... 0A7FFH(HP58DBH53 8ы8.2!) 0A800H... 0ABFFH(KP580BB51 выв-И) OACOOH... OAFFFH mWi ’ ’ № ‘ РсзеоВ Оля подключения 0В800Н".1ЯВРРН Ооуги* ^йств ОВС ООН... OBFFFH. 033 031 пд выв I (АЮ) дд дыб.40 (АН) gg вывЗ! (а!2) „Г Pff выв. to 023^—^025 ДТК I I выв.25(А0) ч 05 6ыв.11(№) ------~ AS 054 (KP51ZBH1 6bl6.Fi) В 052 _ СЕ (К0512ВН1 6Ыв.!3) 021 | ДТЦ и. 02.2 лтн Л2К555ЛН1 OS 155ЛИ1 04155ЛА5 05 155ЛЕ1 04.1 04.4 034 UT& * 05 вЫв.З(В0) — R/W (КР512В7Н$вЫб.15) (КР512ВИ1 выб.17) Рис. 2. Схема подключения МКС КР512ВИ1 к «Радио-86РК» (на плате компьютера разорвать проводник, соединяющий выв. 10 D11 с выв. 6 D14). две подобласти, соответствующие OACOOH...OAFFFH на .. четным и нечетным адресам. При выполнении цикла записи по адресу 0АС01Н (а также ОАСОЗН, 0АС05Н и т. д.) на выводе 3 элемента D3.1 формируется импульс Л5. Одновременно триггер, состоящий из элементов D5.3 и D5.4, устанавливается в состояние высокого уровня, на выходе D5.3 и на выводе 4 элемента D5.4 формируется импульс СЕ. Низкий уровень на этом выврде будет сохраняться в течение всего цикла обращения к микросхеме КР512ВИ1. В цикле записи или чтения по адресу OACOOH (а также 0АС02Н, 0АС04Н и т. д.) будет сформи- рован импульс низкого уровня на выходе 3 элемента D4.1 (за- пись) или выходе 6 элемента D4.2 (чтение). Любой из этих импульсов сбросит триггер и после его окончания на выходе 4 элемента D5.2 вновь установится высокий уровнь. Для записи в любую ячейку микросхемы КР512ВИ1, под- ключенной по такой схеме, необходимо выполнить две операции. Прежде всего по адресу 0АС01Н записывают адрес ячейки микросхемы, в которую необходимо занести данные, а затем по адресу 0AQ0OH записывают байт данных. Считываются Данные также в два приема. По адресу 0АС01Н записывают адрес ячейки, затем по адресу OACOOH читают содержащуюся в ней информацию. Все приведенные ниже подпрограммы разрабатывались
и проверялись на радиолюбительском компьютере, аналогичном «Радио-86РК». Он отличается только наличием контроллера пре- рываний и дополнительной микросхемы ПЗУ, в которой и раз- мещены подпрограммы. Микросхема КР512ВИ1 подключена к компьютеру по описанной выше схеме. Подпрограммы пригодны для любого компьютера, в котором применен микропроцессор КР580ВМ80А. Необходимо только заменить обращения к стандартным подпрограммам МОНИТОРА «Радио-86РК» обращениями к аналогичным подпрограммам, имеющимся, как правило, в программном обеспечении любого компьютера. Использованы следующие стандартные подпрог- раммы: CONIN — ввод символа с клавиатуры в аккумулятор; CON OUT — вывод символа из регистра С на экран дисплея; PRINTA — вывод на экран дисплея кода, находящегося в аккумуляторе, в виде двузначного шестнадцатиричного числа; MSG — вывод на экран дисплея строки символов, находя- щейся в памяти и оканчивающейся кодом ООН. Начальный адрес строки задается в регистровой паре HL', SCRBYT— считывание кода из буфера экрана. В аккуму- ляторе возвращается код символа, находящегося на месте, обо- значенном курсором; CURSOR — запрос положения курсора на экране дисплея. . В регистре Н возвращается значение (номер строки +3), а в регистре L (номер колонки +8). Отсчет ведется от левого верхнего угла экрана. Курсор устанавливается в заданную позицию экрана при последовательном выводе на дисплей кодов 1ВН, 59Н (номер строки +20Я), (номер колонки +20/7). Для этого могут ис- пользоваться подпрограммы CONOUT и MSG. Тексты подпрограмм обслуживания микросхемы КР512ВИ1 на языке ассемблера приведены в табл. 5. Подпрограмма SETTIM предназначена для настройки микро- схемы КР512ВИ1, установки начальных значений времени и даты и запуска часов. Она получает исходные данные в регистрах B...L микропроцессора. Все значения должны задаваться в дво- ично-десятичном формате. Данные распределены по регистрам так, что при оформлении этой подпрограммы как новой дирек- тивы МОНИТОРА «Радио-86РК» первый параметр директивы будет задавать время в часах и минутах, второй параметр — число и месяц, а третий параметр — день недели и год. Подпрограмма SETALR управляет будильником. Время сра- батывания задается в регистрах Н (часы), L (минуты), D (се- кунды). В регистровой паре ВС задается начальный адрес буфера длиной 50 байт, информация из которого может быть перепи- сана во внутреннее ОЗУ микросхемы. Если микросхема КР512ВИ1 имеет автономное питание, то эта информация будет сохранена и после выключения основного источника питания компьютера. Таблица 5. ••• ПОДПРОГРАММЫ ОБСЛУЖИВАНИЯ •»» КР512ВИ1 «а* •ABD« 1987/88 СТАНДАРТНЫЕ ПОДПРОГРАММЫ МОНИТОРА CONINl EQU 0F803H CONOUTI EQU 0F809H PRINTA) EQU 0F815H MBS) EQU 0FB18H SCRBYTi EQU 0F821H ( |АДРЕСА, ВЫДЕЛЕННЫЕ ДЛЯ 1 RTCADRl EQU 0AC01H RTCDATs EQU 0AC00H I lРАЗРЯДЫ РЕГИСТРА Ai ! DVi EOU 20H RSt EQU 6 I |РАЗРЯДЫ РЕГИСТРА Bi КР512ВИ1: (КВАРЦ 32768 ГЦ (ЧАСТОТА SOW 1024 ГЦ СВЕТ l EQU B0H PIE1 EQU 40H AIE1 EQU 20H UIEl EQU 10H SQWEi EQU 8 DM1 EQU 4 H24l EQU 2 ( (+++ установка начального времени, ♦++ |++++♦♦++ ДАТЫ И ЗАПУСК ЧАСОВ ++*♦♦*+* (ИСХОДНЫЕ ДАННЫЕ НАХОДЯТСЯ В РЕГИСТРАХ! <Н> - ЧАСЫ <L> - МИНУТЫ <о> - число <Е> - МЕСЯЦ <В> - ДЕНЬ НЕДЕЛИ <С> - ГОД (ДВЕ ПОСЛЕДНИХ ЦИФРЫ) ДАННЫЕ В ДВОИЧНО-ДЕСЯТИЧНОМ ФОРМАТЕ. (ЕСЛИ В РЕГИСТРАХ НУЛИ, СООТВЕТСТВУЮЩИЕ (ДАННЫЕВ ЯЧЕЙКАХ МИКРОСХЕМЫ (КРОМЕ ЧАСОВ (И МИНУТ) НЕ ИЗМЕНЯЮТСЯ. В ЯЧЕЙКЕ СЕКУНД (ВСЕ (ВСЕГДА УСТАНАВЛИВАЕТСЯ 0. I BETTIMl (ЗАПОМИНАЕМ ДЕНЬ НЕДЕЛИ И ГОД PUSH В (НАСТРАИВАЕМ МИКРОСХЕМУ КР512ВИ1 LXI B.0A00H+DV+RS CALL WRRTC LXI В,0B00H+CSET+H24 CALL WRRTC (ЗАПИСЫВАЕМ ДАННЫЕ В ЯЧЕЙКИ МИКРОСХЕМЫ MVI В,4 MOV С,Н CALL WRRTC (ЧАСЫ MVI В,2 MOV C,L CALL WRRTC (МИНУТЫ LXI B,0 CALL WRRTC (СЕКУНДЫ (ВОССТАНАВЛИВАЕМ ДЕНЬ НЕДЕЛИ И ГОД POP Н
«ПРОДОЛЖАЕМ ЗАПИСЬ MOV A,D ORA А JZ STI MMI В,7 MOM C,D CALL WRRTC !ЧИСЛО ST1: MOM A,E ORA A JZ ST2 MMI B,8 MOV C,E CALL WRRTC ;МЕСЯЦ ST2: MOV A,H ORA A JZ ST3 MVI B,6 MOV C,H CALL WRRTC «ДЕНЬ НЕДЕЛИ ST3: MOV A,L ORA A JZ ST4 MVI B,9 MOV C,L CALL WRRTC «ГОД «ЗАПУСКАЕМ ЧАСЫ ST4: MVI B,0BH CALL RDRTC ANI 0FFH-CSET «РАЗРЕШИТЬ ХОД ORI UIE «И ПРЕРЫВАНИЯ MOM C,A JMP WRRTC «ПО ОБНОВЛЕНИЮ 5 «♦♦♦ УСТАНОВКА БУДИЛЬНИКА ♦♦+ «ИСХОДНЫЕ ДАННЫЕ НАХОДЯТСЯ В РЕГИСТРАХ: 5 <Н> - ЧАСЫ ; <L> - МИНУТЫ , <D> - СЕКУНДЫ , <Е> - КОД РЕЖИМА БУДИЛЬНИКА у <ВС> - АДРЕС НАЧАЛА СООБЩЕНИЯ SETALR: }ЗАПОМИНАЕМ АДРЕС СООБЩЕНИЯ PUSH В «ЕСЛИ ЕС11=0, ТО ОБХОДИМ УСТАНОВКУ «ВРЕМЕНИ СРАБАТЫВАНИЯ БУДИЛЬНИКА МОМ А,Е ANI 2 JZ SA2 «ЖДЕМ КОНЦА ОБНОВЛЕНИЯ MVI В,0АН SAI: CALL RDRTC RAL JC SA1 «ЗАПИСЫВАЕМ ВРЕМЯ СРАБАТЫВАНИЯ MVI В,5 МОМ С,Н CALL WRRTC MVI В,3 MOM C,L CALL WRRTC MMI В,1 MOM C,D CALL WRRTC «ЕСЛИ ЕГ2Э»0, TO ОБХОДИМ ОЧИСТКУ ОЗУ SA2i MOM A,E ANI 4 JZ SA4 SA7: SAB: I Продолжение таблицы S. «ЕС03-1, ВКЛЮЧАЕМ БУДИЛЬНИК ORA С JMP SAS «ЕС03Ж0, ВЫКЛЮЧАЕМ БУДИЛЬНИК СМА ANA С MOM С,A JMP WRRTC СЧИТЫВАНИЕ ИНФОРМАЦИИ ИЗ ЯЧЕЕК **+ -*• МИКРОСХЕМЫ И ЗАПИСЬ В БУФЕР I UPDATES LXI H,BUF MMI B,0AH «ЕСЛИ ИДЕТ ОБНОВЛЕНИЕ, ТО ЖДЕМ ЕГО КОНЦА UIi CALL RDRTC RAL JC UI DCR В «ПЕРЕПИСЫВАЕМ ДАННЫЕ U2s CALL RDRTC MOM M,A INX H DCR В JP U2 RET I ВЫВОД ВРЕМЕНИ НА ЭКРАН ДИСПЛЕЯ +++ 5 4..М.++4. с ТЕКУЩЕЙ ПОЗИЦИИ КУРСОРА I TIME: MMI С,’ * CALL CONOUT LDA HR CALL PRINTA «ЧАСЫ MMI C,':' CALL CONOUT LDA MIN «ЗАПОЛНЯЕМ ОЗУ ПРОБЕЛАМИ LXI B,0E20H SA3: CALL WRRTC INR В MMI A,64 CMP В JNZ SA3 «ВОССТАНАВЛИВАЕМ АДРЕС СООБЩЕНИЯ SA4: POP H «ЕСЛИ Е£33*0, ТО ОБХОДИМ ЗАПИСЬ «СООБЩЕНИЯ В ОЗУ МОМ А,Е ANI 8 JZ SA6 5ЗАПИСЫВАЕМ СООБЩЕНИЕ MVI В,0ЕН SA5: MOV С,М CALL WRRTC INX Н INR В MMI А,64 CMP В JNZ SA5 SЧИТАЕМ КОД В РЕГ.В МИКРОСХЕМЫ SA6: MMI В,0ВН CALL RDRTC MOV С,А «ПРОВЕРЯЕМ КОД В ЕЕ03 MOV А,Е ANI 1 MVI А,А1Е JZ SA7
CALL PRINTА (МИНУТЫ MVI С,' CALL CONOUT LDA SEC □ MP PRINTA (СЕКУНДЫ I (*♦♦ ВЫВОД ДАТЫ НА ЭКРАН ДИСПЛЕЯ ♦♦♦ (♦♦♦♦♦ С ТЕКУЩЕЙ ПОЗИЦИИ КУРСОРА I DATE8 LDA DOW MOV С,A (ИЩЕМ В ТАБЛИЦЕ И ВЫВОДИМ ДЕНЬ НЕДЕЛИ LXI H,TWD CALL PRNTAB (ВЫВОДИМ ДАТУ LDA DAY CALL PRINTA LDA MON (ПЕРЕВОДИМ НОМЕР МЕСЯЦА ИЗ ДВОИЧНО- |ДЕСЯТИЧНОГО КОДА В ДВОИЧНЫЙ CPI 0AH □ М D1 BUI 6 Die MOV С,А (ИЩЕМ В ТАБЛИЦЕ И ВЫВОДИМ НАЗВАНИЕ (МЕСЯЦА LXI H,TMN-1 CALL PRNTAB (ВЫВОДИМ ГОД LDA YR (ЕСЛИ ГОД МЕНЬШЕ ВВ, ТО ЭТО УЖЕ XXI ВЕК CPI ВВН MVI А,19Н □Р D2 MVI А,20Н D2l CALL PRINTA LDA YR CALL PRINTA LXI H,DTXT □MP MBS DTXTt DB ГОДА. ,0 I (♦♦♦ ВЫВОД ВРЕМЕНИ СРАБАТЫВАНИЯ (♦♦♦♦♦ И СООБЩЕНИЯ БУДИЛЬНИКА +++++ I ALARMS (ВКЛЮЧАЕМ ЗВУКОВОЙ СИГНАЛ MVI В,0ВН CALL RDRTC ORI SQWE MOV С,A CALL WRRTC (ЗАПОМИНАЕМ СТРОКУ ЭКРАНА NVI C,0DH CALL CONOUT LXI D,LNBUF MVI A,0DH BTAX D INX D MVI B,60 ALll CALL BCRBYT STAX D INX D MVI C,1BH CALL CONOUT DCR.B □NZ AL1 ПРОДОЛЖЕНИЕ ТАБЛИЦЫ 5 (ВЫВОДИМ ВРЕМЯ СРАБАТЫВАНИЯ MVI C,0DH CALL CONOUT LDA HRA MVI C,'i' CALL PRALR LDA MINA MVI C,'.' CALL PRALR LDA SECA MVI C,' CALL PRALR (ВЫВОДИМ СООБЩЕНИЕ MVI B,0EH AL2s CALL RDRTC CPI 0DH JZ AL 4 ANI 7FH CPI ’ ’ JNC AL3 MVI A,' AL3s MOV C,A CALL CONOUT INR В MVI A,64 CMP- В □NZ AL2 (ЖДЕМ НАЖАТИЯ КЛАВИШИ AL4s CALL CONIN (ВЫКЛЮЧАЕМ ЗВУКОВОЙ СИГНАЛ MVI B,0BH CALL RDRTC ANI 0FFH-SQWE MOV C,A CALL WRRTC (ВОССТАНАВЛИВАЕМ СТРОКУ НА ЭКРАНЕ LXI Н, LNBUF MVI В,61 AL5s MOV C,M CALL CONOUT INX H DCR В □NZ AL5 RET PRALRs PUSH В MOV B,A ANI 0C0H CPI 0C0H □ Z AL6 MOV A,В CALL PRINTA □MP AL7 AL6s MVI C,' ‘ CALL CONOUT CALL CONOUT AL7s POP В □MP CONOUT I I+++ ЗАПИСЬ БАЙТА В ЯЧЕЙКУ МИКРОСХЕМЫ ♦♦♦ (ИСХОДНЫЕ ДАННЫЕI | <В> - АДРЕС ЯЧЕЙКИ ( <С> - ЗАПИСЫВАЕМЫЙ БАЙТ ( WRRTC8 MOV А,В ВТА RTCADR MOV А,С STA RTCDAT RET
?*** ЧТЕНИЕ БАЙТА ИЗ ЯЧЕЙКИ МИКРОСХЕМЫ *** 9ИСХОДНЫЕ ДАННЫЕ: 9 <В> - АДРЕС ЯЧЕЙКИ «РЕЗУЛЬТАТ: 9 <А> - ПРОЧИТАННЫЙ БАЙТ : I RDRTC: MOV А, В STA RTCADR LDA RTCDAT ; RET «*** ВЫВОД СТРОКИ ТАБЛИЦЫ ИА *++ 9******** ЭКРАН ДИСПЛЕЯ +++***** 9ИСХОДНЫЕ ДАННЫЕ: 9 <HL> - НАЧАЛО ТАБЛИЦЫ 9 <С> - НОМЕР СТРОКИ PRNTAB: MOV А,М INX Н ORA А JNZ PRNTAB DCR С JNZ PRNTAB JMP MSB I 9**4- ТАБЛИЦА ДНЕЙ НЕДЕЛИ *+* I TWD: DB 0.' ПОНЕДЕЛЬНИК ,0 DB ' ВТОРНИК ',0 DB ' СРЕДА ',0 DB ' ЧЕТВЕРГ ',0 DB ' ПЯТНИЦА ',0 DB ‘ СУББОТА ’,0 . DB ' ВОСКРЕСЕНЬЕ ‘,0 ;*+* ТАБЛИЦА МЕСЯЦЕВ <-*<- 9 TMN: DB ' ЯНВАРЯ ',0 DB ' ФЕВРАЛЯ ',0 DB ' МАРТА ',0 DB ' АПРЕЛЯ ',0 DB ' МАЯ ’,0 DB ' ИЮНЯ ' , 0 DB ’ ИЮЛЯ ',0 DB ‘ АВГУСТА ',0 DB ' СЕНТЯБРЯ ',0 DB ' ОКТЯБРЯ '<0 DB ' НОЯБРЯ ',0 DB ' ДЕКАБРЯ ',0 СЛЕДУЮЩИЕ ЯЧЕЙКИ ДОЛЖНЫ РАЗМЕЩАТЬСЯ В ОЗУ; BUF: SБУФЕР ДЛЯ ХРАНЕНИЯ ВРЕМЕНИ И ДАТЫ YR: DS 1 «ГОД MON: DS 1 9 МЕСЯЦ DAY: DS 1 «ДЕНЬ DOW: DS 1 «ДЕНЬ НЕДЕЛИ HR А: DB 1 9 ЧАС (БУД.) HR: DS 1 «ЧАС MINA: DS 1 «МИН.(БУД.) MIN: DS 1 «МИН. ВЕСА: DS 1 «СЕК.(БУД,) SEC: DS 1 «СЕК. 9 LNBUF: DS 61 END «БУФЕР СТРОКИ ЭКРАНА
Действия, выполняемые подпрограммой SETALR, задаются ппом в регистре Е микропроцессора: к £[01 Единица в этом разряде включает будильник, ноль выключает его. г [11 Единица в этом разряде разрешает запись в ячейки микросхемы времени срабатывания будильника, задан- ного в регистрах Н, L, D. В противном случае данные в этих ячейках не изменяются. £[2] Е[3] Единица в этом разряде задает очистку внутреннего ОЗУ микросхемы. Ячейки с адресами от ОЕН до 3FH заполняются кодом пробела (20//). Единица в этом разряде разрешает запись во внут- реннее ОЗУ микросхемы содержимого 50 ячеек ОЗУ компьютера, начиная с адреса, заданного в регистро- вой паре ВС. В противном случае содержимое внут- реннего ОЗУ не изменяется, если в Е[2] не была задана очистка ОЗУ. Подпрограмма UPDATE переписывает данные из рабочих ячеек микросхемы в буфер длиной 10 байт, находящийся в ОЗУ. Данными из этого буфера пользуются все другие программы, которым необходима информация о времени. Выполнение под- программы занимает меньше 244 мкс. Это гарантирует, что все данные, находящиеся в буфере, правильны и относятся к одному и тому же секундному интервалу. В компьютере, имеющем конт- роллер прерываний, подпрограмма UPDATE должна выполнять- ся каждую секунду по запросу прерывания, связанному с окон- чанием цикла обновления. Если контроллера прерываний в компьютере нет, то подпрограмму UPDATE обязательно вызы- вают перед каждым выполнением участка любой программы, требующего данных о времени. Подпрограмма TIME выводит на экран дисплея, начиная с текущей позиции курсора, время в часах, минутах и секундах, например: 10:54.39. Данные о времени она берет из буфера, заполненного подпрограммой UPDATE. Подпрограмма DATE выводит на экран дисплея, начиная с текущей позиции курсора, информацию о дате, например: ПЯТНИЦА 03 ИЮНЯ 1988 ГОДА. Она также берет данные из буфера, заполненного подпрограммой UPDATE. Подпрограмма ALARM включает сигнал на выходе SQIT, выводит на экран заданное время срабатывания будильника, а также сообщение, находящееся во внутреннем ОЗУ микро- схемы КР512ВИ1. Информация выводится с начала строки, в которой находится курсор. Особенностью подпрограммы является то, что прежнее содержимое этой строки запомина- еТ<гк ’ а после нажатия любой клавиши восстанавливается, стирая информацию будильника. Одновременно выключается сигнал на выходе SQU7.
Остальные подпрограммы табл. 5 носят вспомогательны! характер. Они используются при работе подпрограмм, описац ных выше. Пример использования подпрограмм обслуживания микр^ схемы КР512ВИ1 приведен в табл. 6. Это подпрограмма обслу живания запросов прерывания, генерируемых микросхемой ц окончании цикла обновления и при срабатывании будильника Соответствующие прерывания должны быть разрешены записьц единиц в разряды UIE, AIE регистра В микросхемы. Ее выхо; IRQ подключается к входу контроллера прерываний. Эта подпрограмма при своей работе постоянно выводи] Таблица. 6. J*** ПОДПРОГРАММА ОБСЛУЖИВАНИЯ ЗАПРОСОВ *** I *** ПРЕРЫВАНИИ ОТ КР512ВИ1 *** ( *ASD* 19ЙВ ;ИСПОЛЬЗУЕТ ПОДПРОГРАММЫ UPDATE. RDRTC, tTIME, ALARM (CM. ТАБЛ.5), А ТАКЖЕ СТАН- ДАРТНЫЕ ПОДПРОГРАММЫ» I CURSOR1 EQU 0FB1EH CONOUT» EQU 0FB09H 1 AIE1 EQU 10H INTRTCs PUSH H PUSH D PUSH 9 PUSH PSW I ПЕРЕПИСЫВАЕМ ДАННЫЕ В БУФЕР CALL. UPDATE »ЗАПОМИНАЕМ ПОЛОЖЕНИЕ КУРСОРА CALL CURSOR PUSH Н I ВЫВОДИМ' ВРЕМЯ LXI Н,2050Н CALL SETCUR CALL TIME »ЕСЛИ БУДИЛЬНИК HE СРАБОТАЛ, I ЗАКАНЧИВАЕМ ОБРАБОТКУ ПРЕРЫВАНИЯ MVI B.0CH CALL RDRTC ANI AIE JZ INTI 5 ЧТОБЫ В ОЖИДАНИИ НАЖАТИЯ КЛАВИШИ I(В ПОДПР. ALARM) НЕ ПРЕКРАЩАЛСЯ (ВЫВОД ВРЕМЕНИ, ЗДЕСЬ НУЖНО РАЗРЕ- ШИТЬ ПРЕРЫВАНИЯ EI (ВЫВОДИМ СООБЩЕНИЕ БУДИЛЬНИКА LXI Н,4420Н CALL SETCUR CALL ALARM (ВОССТАНАВЛИВАЕМ ПОЛОЖЕНИЕ КУРСОРА INTI» POP Н LXI D.0-30BH DAD D CALL SETCUR POP PSW POP В POP D POP H EI RET Г++4. ПОДПРОГРАММА УСТАНОВКИ КУРСОРА В ♦♦♦ J ПОЛОЖЕНИЕ, ЗАДАННОЕ В <HL> SETCURs MVI C,1BH CALL CONOUT MVI C,'Y' CALL CONOUT MOV C,H CALL CONOUT MOV C,L JMP CONOUT ENI DD К5В1ЛЕ5 5СМЮ512ВИ1 Bbll-ZD IRQW>512B№M19) / збукобого сигнала Рис. 3. Схема подачи звукового сиг- RESET [Ю512ВИ1 IM. 18) R2 22М Cl I MR нала текущее время в правом верхнем углу экрана независимо от работы других программ, выполняемых компьютером. Если какая-либо программа сотрет время с экрана, выведя на это же место другую информацию, то в следующую секунду вновь будет выведено время. Срабатывание будильника^ отмечается звуковым сигналом и выводом сообщения в нижней строке эк- рана. Выполнение всех программ при срабатывании будильника приостанавливается до нажатия любой клавиши. В заключение рассмотрим схему, показанную на рис. 3. Она позволяет подавать звуковой сигнал при срабатывании будильника в компьютерах, не имеющих в своем составе контрол- лера прерываний. В регистре В микросхемы КР512ВИ1 должны быть записаны единицы в разрядах AIE и SQWE и нули в раз- рядах ШЕ, PIE. Желаемая высота звука (частота сигнала на выводе.SQW) задается разрядами RS0...RS3 регистра А. При совпадении заданного времени срабатывания будильника с теку- щим временем на выходе IRQ устанавливается низкий логиче- ский уровень, разрешающий прохождение сигнала со входа элемента ИЛИ — НЕ, соединенного с выводом SQIT на его выход. Одновременно начинается разрядка конденсатора С1 че- рез резистор R2. Как только напряжение на входе RESET Достигнет низкого логического уровня, восстановится высокий уровень на выходе IRQ и звуковой сигнал прекратится. Дли- тельность сигнала определяется постоянной времени цепочки R2C1. В любой момент его можно прекратить, нажав кнопку SB1. А. Долгий