/
Author: Заец Н.И.
Tags: электротехника автоматика и телемеханика программирование радиотехника
ISBN: 5-98003-078-6
Year: 2003
Text
ПУСТЬ ЭТА КНИГА ПРИНЕСЕТ ВАМ УДАЧУ!
Н. и. Заец
Радиолюбительские
конструкции
на Р1С-мпкроконтроллерах
91
SBN 5-98003-078-6
785980 030780
Алгоритмы работы программ
Подробные комментарии
к исходным текстам
Справочные данные
Серия «СОЛОН — радиолюбителям», выпуск 22
Н. И. Заец
Радиолюбительские конструкции
на PIC-микроконтроллерах
С алгоритмами работы программ
и подробными комментариями к исходным
текстам
СОЛОН-Пресс
Москва 2003
УДК 621.31
ББК 32.96-04
316
316 Заец Н. И. Радиолюбительские конструкции на Р1С-микроконтроллерах.
С алгоритмами работы программ и подробными комментариями к исходным
текстам. — М.: СОЛОН-Пресс, 2003. — 368 с.: ил. — (Серия «СОЛОН — радио-
любителям», выпуск 22)
ISBN 5-98003-078-6
В книге представлено 20 описаний радиолюбительских устройств различного
назначения: часы, таймеру, автоматы, программатор и многие другие, выполнен-
ные на микроконтроллере PIC16F84A. Впервые книга с различными устройства-
ми на PIC-микроконтроллере предназначается для радиолюбителей с любым
уровнем подготовленности. Даже те, кто не знаком с программированием микро-
контроллеров, смогут без труда повторить любое устройство. Радиолюбители,
имеющие опыт работы с программированием, могут изменить программы под
свои цели. Для этого в книге даны алгоритмы работы и исходные тексты про-
грамм с подробными комментариями.
Автор также делится опытом программирования и работы с ассемблером
MPLAB и программатором PonyProg2000.
УДК 621.31
ББК 32.96-04
Книги издательства «СОЛОН-Пресс» можно заказать наложенным платежом по фиксиро-
ванной цене. Оформить заказ можно одним из двух способов:
1) выслать открытку или письмо по адресу: 123242, Москва, а/я 20;
2) передать заказ по электронной почте по адресу: magazin@solon-r.ru.
При оформлении заказа следует правильно и полностью указать адрес, по которому должны
быть высланы книги, а также фамилию, имя и отчество получателя. Желательно указать допол-
нительно свой телефон и адрес электронной почты.
Через Интернет Вы можете в любое время получить свежий каталог издательства «СО-
ЛОН-Пресс». Для этого надо послать пустое письмо на робот-автоответчик по адресу: '
katalog@solon-r.ru.
Получать информацию о новых книгах нашего издательства Вы сможете, подписавшись на
рассылку новостей по электронной почте. Для этого пошлите письмо по адресу:
news@solon-r.ru.
В теле письма должно быть написано слово SUBSCRIBE.
ISBN 5-98003-078-6
© Макет и обложка «СОЛОН-Пресс», 2003
© Заец Н. И., 2003
Безвременно погибшей
дочери Ольге посвящаю
Предисловие
Можно уверенно констатировать, что разработка радиоэлектронных
устройств в любительской практике переходит на новый, более высокий уро-
вень. Это стало возможным благодаря бурному развитию большого ряда мик-
роконтроллеров с различным набором встроенных устройств. Если для любите-
лей сидеть с паяльником еще 5 лет назад микроконтроллер представлялся
чем-то экзотичным и непонятным, то сейчас появляется все больше разрабо-
ток самого неожиданного применения. Возник интерес радиолюбителей не
просто к копированию понравившейся конструкции, но и к изменению про-
граммы для своих целей. Да оно и понятно, ведь микроконтроллер можно за-
программировать под требования любого пользователя. А для того чтобы изме-
нить в программе хоть одну строчку, необходимы элементарные знания про-
граммирования. Не в меньшей степени необходимы знания ассемблера и
программатора. Китайская мудрость гласит, что если вы хотите отправиться в
далекий путь, то сделайте хотя бы первый шаг. Надеюсь, что для некоторых
этим первым шагом окажется данная книга.
Как это получилось у меня? Очень хотелось сделать часы. С часов начина-
лось увлечение логикой еще в те времена, когда дешифраторы делались на дио-
дах, а индикаторами служили стеклянные лампочки с маркировкой ИН1. Было
“прочитано все, что писал журнал «Радио» о микроконтроллерах, проверен ин-
тернет и запущены письма разработчикам с просьбой о помощи. В журнале
«Радио» полезными и своевременными оказались статьи А. Долгий, которые
вйходили в 2001 и 2002 году. В интернете удалось набрать несколько работ с
исходными текстами программ на микроконтроллерах. Комментарии к исход-
ным текстам были, как правило, на английском языке, а наши машинные пе-
реводчики делают перевод так, что трудно понять, кто куда и зачем пошел.
Разработчики публикаций в журнале «Радио» и других журналах на мой «глас
вопиющего» скромно промолчали, хотя на некоторых сайтах есть предложение
о помощи. Консультация журнала сослалась на то, что программы являются
интеллектуальной собственностью и не подлежат распространению. Я пони-
маю, например, собственность программы, которая вместо тысячи циклов
управляется за сотню. Но объявлять собственностью 2 + 2 просто смешно.
Правда, молчание некоторых авторов удалось вскоре раскрыть, путешествуя по
интернету. Дело в том, что их работы один к одному «содраны» у зарубежных
авторов. Причем не только схемы не изменены, но и исходные тексты (некото-
рые все же удалось добыть) программ скопированы на английском языке. Ма-
ло того, некоторые программы оказались нерабочими. Видно, при копирова-
нии произошла ошибка. Плохо ребята учились «сдирать» в школе.
Учитывая «обширную» помощь, начинал с азбуки изучения команд и
устройства микроконтроллера. Оказалось, что я больше времени потратил в
1 3
Предисловие
поисках помощи. А программы писать ОЧЕНЬ просто. Конечно, у меня был
давно забытый опыт программирования на ассемблере с прошивкой перфокарт
для БЭСМ в родном Казанском университете, но ведь то была машина в три
этажа, а здесь микросхема с 18 выводами. Первый блин, как и положено ему
быть, получился комом, но он РАБОТАЛ! Все эти команды жили своей
жизнью и делали то, что я хотел. На ваш читательский суд этот «блин» выно-
сится под названием «Часы с тремя будильниками». Сейчас я вижу и ошибки,
и неточности, и излишества в этой программе, но исправлять их не собираюсь.
Почему? Потому, что я сам практически учился, и сейчас еще учусь, по чужим
программам. А больший интерес вызывает программа, улучшенная тобой лич-
но. Изучайте, улучшайте, дерзайте!
Учитывая то, что я писал о «помощи» коллег, я дал себе слово: никаких
тайн в программах исходных текстов. Разве, что если программа может пред-
ставлять коммерческий интерес. Дело житейское. И еще, помогать всем, кто в
этом нуждается (в разумных пределах). Сам факт выхода этой книги можно
рассматривать как одну из форм помощи начинающим радиолюбителям.
В этой книге я старался дать самые подробные комментарии к каждой строчке
программы, чтобы было понятно даже человеку, который неуверенно знает
команды.
Потом я просто влюбился в микроконтроллеры. Пишешь программу, в го-
лове уже завихрения, думаешь, что это в последний раз. Но стоит закончить
работу, как возникают новые идеи, и судорожно присаживаешься к компьюте-
ру, чтобы их опробовать. А это опять бессонные ночи работы и несравненное
чувство радости, когда программа дружественно замигает светодиодами. Да и
как не влюбиться, если вместо десятка микросхем достаточно одной. Вместо
листа текстолита достаточно маленького кусочка. А если вы ошиблись в своей
разработке на дискретных элементах, то надо новые микросхемы, новую плату
и уйму времени. А с микроконтроллерами достаточно изменить программу, в
крайнем случае, перерезать один проводник на плате, и готово другое устрой-
ство. Справедливости ради следует заметить, что многие из представленных ра-
бот в этой книге сделаны по просьбе читателей моей страницы в интернете
http://www.radic.newmail.ru и журнала «Схемотехника». По письмам читателей,
за что я им очень благодарен, были исправлены некоторые ошибки. Все мы
живые люди, а не ошибается только тот, кто ничего не делает.
Почему мною выбраны микроконтроллеры фирмы Microchip? Простое
сравнение команд и перечень свойств различных типов микроконтроллеров
фирмы ATMEL и Microchip показывает, что последние проигрывают. Проиг-
рывают и по цене. Но, имея большой выбор микросхем, легко заблудиться в
выборе нужной. Имея большой список команд, легко пропустить нужную
команду. Как все компьютеры работают по двум значениям 0 и 1, так же мень-
шим числом команд можно сделать изящные программы. Более высокую стои-
мость компенсирует поразительная живучесть микросхем. Стиль написания
программы более понятен и прост в микроконтроллерах PIC. Неплохой инст-
румент отладки программ. Возможно, сыграла свою роль госпожа случайность,
поскольку мне удалось дешево приобрести несколько корпусов микроконтрол-
леров. Все это и определило мой выбор.
Разбирая чужие программы, я понял, что без алгоритма работы программы
трудно понять последовательность действий. Поэтому к каждой программе,
4
Предисловие
описанной в этой книге, имеется алгоритм работы. Конечно, невозможно по-
дробно нарисовать алгоритм для сложной программы, но укрупненный алго-
ритм уже дает представление о ее работе.
Итак, на ваш суд я выношу два десятка программ вместе со схемами
устройств и печатными платами. Для кого эта книга? Для радиолюбителей, ко-
торые хотят просто повторить хорошую схему, но впервые сталкиваются с мик-
роконтроллерами. Для радиолюбителей, которые знают, что такое микроконт-
роллер, и хотели бы повторить схему с некоторыми изменениями ее функций.
Для радиолюбителей, которые хотят научиться программировать микроконт-
роллеры без ошибок, на ошибках других. Книга не предназначена для опытных
программистов, которые в своих программах используют сложные алгоритмы.
Здесь даны только простые наборы команд. Вообще «чистому» программисту
трудно делать электронные устройства, поэтому часто встречаем в публикациях
по две фамилии. Электронщикам надо самим учиться программировать. Осо-
бенно если учесть, что будущее за микроконтроллерами.
Основное свойство всех программ в этой книге — это работоспособность.
А для «чистых» программистов хорошая программа — это изящество, возведен-
ное в степень искусства. Увы! Искусством в этой книге может служить разве
что начертание схем и печатных плат, да и то потому, что выполнены они при
помощи графических программ.
К достоинствам устройств, которые представлены в этой книге, можно от-
нести применение отечественных индикаторов. В настоящее время, как прави-
ло, для организации индикации в устройствах на микроконтроллерах применя-
ются жидкокристаллические дисплеи со встроенными драйверами. Но они еще
недостаточно распространены в нашей стране, а их стоимость многим радио-
любителям не по карману. Отдельно выделен интересный ряд устройств, вы-
полненных на точечных светодиодах.
В приложении дается список команд и описание регистров микроконтрол-
леров Р1С,среднего семейства. Это сделано для того, чтобы при изучении про-
грамм не держать под рукой еще одну книгу со справочными данными. Пред-
ставлены также прошивки микроконтроллеров для устройств, описанных в
данной книге. Конечно, прошивки лучше иметь в электронном виде, но если у
вас нет своего компьютера, то можно попроситься к другу, чтобы запрограм-
мировать микроконтроллер. В этом случае могут понадобиться «бумажные»
версии прошивок.
Если вы впервые сталкиваетесь с микроконтроллерами, то советую начи-
нать чтение книги со статьи «Рекомендации». В этой статье обобщен опыт ра-
боты с микроконтроллерами, ассемблером и программатором. Даны советы на-
чинающим программистам.
Отзывы, замечания, предложения по данной книге с благодарностью приму
по адресу saes@mail.ru.
5
Устройства с цифровой индикацией
Часы с тремя будильниками
Многие радиолюбители начинали свое увлечение со сборки электронных
часов. Кто на транзисторах, кто на дискретных счетчиках и специализирован-
ных микросхемах. В настоящее время часы можно собрать на одной специали-
зированной микросхеме. Время не стоит на месте, и появились разработки на
микроконтроллерах. Эти часы, как правило, состоят из одной микросхемы и
модуля LCD-дисплея. Отечественных модулей с шиной 12С пока нет в прода-
же, а импортные труднодоступны и дороги. В этой работе мною была сделана
попытка разработать часы на микроконтроллере с возможностью универсаль-
ной индикации на отечественных индикаторах. Надеюсь, что кто-то начнет
свое увлечение микроконтроллерами именно с этих часов.
Преимущество микроконтроллеров перед дискретными микросхемами в
возможности задавать любую конфигурацию часов в зависимости от ваших по-
требностей. И если ваши потребности быстро изменяются, то так же быстро
можно изменить программу микроконтроллера, не изменяя конструкции часов.
По крайней мере, это касается многократно перепрограммируемых микроконт-
роллеров с ЭППЗУ типа PIC16F84A, на котором сделаны предлагаемые часы.
Часы имеют следующие возможности:
• выход с микроконтроллера в коде 1-2-4-8 для сегментов и разрядов, что по-
зволяет использовать любые, имеющиеся в наличии, семисегментные инди-
каторы с соответствующими дешифраторами;
• три будильника с раздельной установкой и включением;
• коррекция суточного хода до ±28 секунд;
• установка по сигналам точного времени;
• резервное питание;
>' • потенциальный выход для включения исполнительного устройства (телеви-
зор, приемник, свет...) при срабатывании будильника;
• индикация с секундами;
• индикация с днями недели;
• индикация с номером включенного будильника;
• гашение индикации на установленное время.
Потребляемый часами ток в режиме резервного питания (2,8 В) — 128 мкА,
от 4,5 В — 0,5 мА, при напряжении питания 6 В и светодиодах АЛСЗЗЗГ —
100 мА.
Принципиальная схема часов дана на рис. 1. Выходы RA0—RA2 микроконт-
роллера DD2 имеют положительную логику и предназначены для дешифратора
с двоично-десятичного в позиционный код номера разряда. Выходы RBI—RB4
также имеют положительную логику и предназначены для дешифратора с дво-
ично-десятичного в семисегментный код. С выхода RBO (GAU) на вход 6 де-
шифратора DD3 поступает импульс для организации гашения цифры при вы-
6
Часы с тремя будильниками
Рис. 1. Часы с будильником
боре разряда установки и во время прерывания. Если не сделать гашения циф-
ры во время отработки внутреннего прерывания микроконтроллера, то на это
время цифра будет ярко вспыхивать. Длительность отработки прерывания раз-
лична при разных режимах и максимально достигает 170 циклов (20 мс). Хотя
это мало (около 1/50) по сравнению с количеством циклов от прерывания к
прерыванию, равным 8192, однако визуально заметно подергивание всех цифр
при смене секунд. Еще один неприятный эффект в часах на микроконтроллере
связан с невозможностью одновременной подачи выходных кодов во все раз-
ряды. Минимальная разность между загрузками портов составляет два цикла.
Если сначала изменять значение цифры, а потом разряд, то на доли секунды
значение старшего разряда будет высвечиваться в младшем. Этих неприятных
моментов можно избежать, если поставить кварц на большую частоту. Этот ва-
риант мною не рассматривался из-за частых отключений электроэнергии. При
работе с низкочастотным кварцем микроконтроллер потребляет малый ток от
резервного питания. Поэтому можно обойтись миниатюрными дисковыми эле-
ментами питания. При работе на резервном питании индикация выключена,
но звонок будильника будет работать, если поставить 3 элемента. При вклю-
ченном питании звонок будильника работает во время нечетных секунд, а ин-
дикация в это время гасится. Прерывистый сигнал частотой около 1 кГц более
неприятный, чём монотонный.
Назначение управляющих кнопок:
SB1 — включение-выключение будильников;
SB2 — установка, +1 в выбранный разряд;
SB3 — выбор разряда установки;
SB4 — выбор режима установки.
7
Устройства с цифровой индикацией
Приоритет считывания управляющих кнопок, если случайно нажаты две
кнопки, такой: режим — разряд — установка.
Режим установки высвечивается в нулевом, младшем разряде (на месте еди-
ниц секунд). Во время установки режима в первом разряде высвечивается ма-
ленькая буква «с», светятся сегменты D, Е, G. Значение режимов установки
следующее:
О — установка часов, минут и обнуление;
1 —3 — установка и индикация соответствующих будильников;
4 — установка и индикация гашения и установка дней недели;
5 — (при любых значениях разряда установки) индикация часов, минут, се-
кунд;
6 — работа часов с днями недели в первом разряде (в нулевом разряде
светится «с»);
7 — установка и индикация коррекции и знака коррекции.
При нажатии SB3 происходит мигание выбранного разряда установки. Ми-
гание разряда чередуется с частотой около 2 Гц, а смена разряда — 1 Гц. При
выборе разрядов 2—5 происходит установка в выбранных разрядах. При выборе
нулевого разряда происходит индикация всех установок часов, выбранных ре-
жимом. А при нулевом режиме происходит обнуление часов, минут, секунд.
При мигающем первом разряде и выборе 4 и 6 режима происходит индикация
дней недели в этом разряде, а в нулевом разряде светится «с». Для устранения
мигания разрядов у выбора установки имеется 6 фиктивный разряд. В этом ре-
жиме происходит повседневная работа часов.
Кнопка установки запараллелена с кнопкой включения будильника. Поско-
льку установка происходит только в единицах часов и минут с частотой 1 Гц, то
установка в 59 минут займет 59 секунд. Чтобы это не было утомительно, можно
для установки воспользоваться кнопкой с фиксацией — включения будильника.
Режим гашения индикации необходимо включать, например, тогда, когда
вы уходите на работу. Установка и индикация гашения производится при чет-
вертом режиме. При выборе 4 и 5 разрядов устанавливается время начала гаше-
ния в часах. При выборе 2 и 3 разрядов устанавливается время окончания га-
шения. Индикация начала и окончания гашения будет при выборе 1 или 6 раз-
рядов. Необходимо помнить, что число начала гашения должно быть меньше
числа окончания гашения. Началом гашения не может быть число 00. Режим
гашения работает при включенной кнопке будильника. Если отжать кнопку во
время гашения, индикация включится. При включенном режиме гашения бу-
дильник не работает. Если значения начала и окончания гашения равны, то га-
шение не происходит.
При выборе седьмого режима работы часы переходят в режим коррекции.
Индикация на табло: с0-00-с7. При выборе мигающего разряда во втором или
третьем разряде, происходит установка коррекции в секундах. Максимальная
величина коррекции 28 секунд. При выборе 4 или 5 разряда устанавливается
знак коррекции в четвертом разряде. 1 — знак отрицательный, 0 — знак поло-
жительный. Коррекция осуществляется в 00 часов 00 минут 30 секунд. Значе-
ние коррекции при работающих часах можно посмотреть, выбрав нулевой или
первый разряд.
8
Часы с тремя будильниками
После любой установки необходимо выбрать режим (5) индикации Ч-М-С,
а потом устанавливать режим будильника или другой режим индикации.
Печатные платы даны на рисунках 2, 3, 4. Платы разрабатывались так, что-
бы под микросхемы и светодиоды можно было поставить панельки. Питание
часов осуществляется от адаптера. Резервное питание 2—3 элемента типа
А10—А13. Пенал для элементов легко сделать из корпуса одноразового (5 мл)
шприца. Кнопки без фиксации импортные мембранного типа, кнопка с фикса-
цией тоже импортная, миниатюрная.
Светодиоды с общим анодом легко заменить на светодиоды с общим като-
дом. Для этого необходимо заменить микросхему КР514ЙД2 на микросхему
КР514ИД1. Вывод 3 микросхемы К1561КП2 подать на минус питания. У тран-
зисторов VT1—VT 6 поменять местами эмиттер и коллектор и на эмиттер по-
дать минус питания. При этом печатная плата требует небольшой доработки.
Резисторы R4—R9 при любом варианте подбираются по лучшей яркости свече-
ния светодиодов. Если резисторы убрать, то наблюдается небольшой нагрев
транзисторов.
Рис. 2. Часы с будильником.
Печатная плата
Рис. 3. Часы с будильником.
Расположение элементов на плате
Рис. 4. Печатная плата линейки светодиодов с общим анодом
/9
Устройства с цифровой индикацией
Выходной потенциал на исполнительное устройство (EXE) можно исполь-
зовать для включения мелодичного звонка, построенного на микросхемах типа
УМС7, УМС8.
Часы изготавливались как прикроватные для индикации в темное время су-
ток. Поэтому корпус сделан плоским в настенном варианте. Я сделал корпус из
пластмассы коробок лазерных дисков. Внутри прозрачная пластмасса оклеена
бумагой под цвет обоев; Если протравить корпус изнутри серной кислотой, то
получится красивый белый муар.
Алгоритм программы часов показан на рис. 5. Все установки и вычисления
производятся в начале прерывания. Сначала прибавляется 1 в регистр секунд, а
V Ч Ч ч
0. Установка часов
1.Уст. часов 1 буд.
2.Уст. часов 2 буд.
З.Уст. часов 3 буд.
4.Уст. начала гаш.
5.4асы с секундами
6.Часы с днями недели
7. Уст. знака коррекця
0. Установка минут
1.Уст. минут 1 буд.
2.Уст. минут 2 буд.
З.Уст. минут 3 буд.
4. Уст. окончашя гаш.
5.Часы с секундами
б.Часы с днями недели
7.Уст. коррекдо секунд
О.Резерв
1 .Работа: часы с 1 буд.
2 .Работа: часы со 2 буд.
З .Работа: часы с 3 буд.
4 .Индмсаця гашены
5.Часы с секундами
6.Часы с днями недели
7.Иццжа1*1я коррею>«
О.Обнулен® мии сек.
ГИцфкащя 1 буд.
2.Иццжащя 2 буд.
З.Индиса1*н 3 буд.
4.Уст. дней недели
5.Часы с секундами
б.Часы с днями недели
7.Иццжа1*1я коррекци
Рис. 5. Алгоритм программы часов
10
Часы с тремя будильниками
потом анализируется состояние нажатых кнопок установки. Если кнопки не
нажаты, программа переходит к мультиплексору и выбирает по номерам в ре-
гистрах АТТ и CAT соответствующую установку. Отработав установку, про-
грамма возвращается в режим индикации. Все алгоритмы установки, как пра-
вило, имеют линейный вид, и для примера на рис. 6 показан алгоритм установ-
ки часов. С левой стороны прямоугольников стоят цифры, обозначающие
номер блока подпрограмм, где находится данная подпрограмма. Поэтому все
алгоритмы программ установки можно проследить в цифровом выражении.
Для удобства чтения перепишем все блоки подпрограмм по их номерам.
1. Проверка нажатых кнопок установки.
2. Выбор разряда установки (мигающего разряда).
3. Выбор режима установки.
4. Куда пойти = мультиплексор.
5. Обнуление минут и секунд.
6. Вызов подпрограмм счета при установке.
7. Смена индикации при смене режима.
8. Установка минут (CAT = 2,3) и времени окончания гашения.
9. Установка часов (CAT = 4,5) и времени начала гашения.
10. Коррекция, установка и индикация.
11. Завершение прерывания.
12. Пп. гашения всех разрядов индикации.
13. Пп. индикации с выходом в 2-10 коде и звонка будильника.
14. Сравнение регистров будильника и часов.
15. Включение звонка.
16. Пп. перекодировки с 2 в 2-10 код.
17. Сохранение и восстановление значений регистров при прерывании.
18. Счет и перекодировка регистров Ч-М-С-Д.
19. Введение коррекции со знаком.
131 цикл
Рис. 6. Алгоритм программы установки часов
11
Устройства с цифровой индикацией
Количество циклов указано за время всего прерывания. В скобках указаны
номера выбранного разряда (С) и режима установки (А).
Установка минут. (С2,3; АО), 123 цикла.
17-1-2-18-2-4-6-18-16-18-6-18-16-18-6-11-17.
Установка часов. (С4,5; АО), 131 цикл.
17-1-2-18-2-4-6-7-18-16-18-6-7-18-16-18-7-6-11-17.
Обнуление минут и секунд. (СО, АО), 91 цикл.
17-1-2-18-2-4-5-7-18-16-18-7-5-11-17.
Установка часов будильников. (С4,5; А1-3), 158 циклов.
17-1-2-18-2-4-9-18-16-18-9-7-18-16-18-7-18-16-18-7-11-17.
Установка минут будильников. (С2,3; А1-3), 152 цикла.
17-1-2-18-2-4-8-18-16-18-8-7-18-16-18-7-18-16-18-7-11-17.
Работа: часы с будильником. (С1,6;А1-3), 61 цикл.
17-1-2-18-2-4-14-11-17.
Установка начала гашения. (С4,5; А4), 152 цикла.
17-1-2-18-2-4-9-7-18-16-18-7-18-16-18-7-11-17.
Установка окончания гашения. (С2,3; А4), 152 цикла.
17-1-2-18-2-4-8-9-18-16-18-9-8-7-18-16-18-7-18-16-18-7-11-17.
Индикация гашения. (Cl,6; А4), 112 циклов.
17-1-2-18-2-4-7-18-16-18=7-18-16-18-7-11-17.
Установка дней недели. (СО, А4), 126 циклов.
17-1-2-18-2-4-6-18-6-7-18-16-18-7-6=7-18-16-18-7-6-11-17.
Работа: часы с секундами. (CO-6, А5), 170 циклов.
17-1-2-18-2-4-7-18-16-18-7-18-16-18-7-18-16-18-7-11-17.
Работа: часы с днями недели. (CO-6, А6), 120 циклов.
17-1-2-18-2-4-7-18-16-18-7-18-16-18-7-11-17.
Установка коррекции. (С2,3; А7), 95 циклов.
17-1-2-18-2-4-10-18-16-18-10-11-17.
Установка знака коррекции. (С4,5; А7), 95 циклов.
17-1-2-18-2-4-10-18-16-18-10-11-17.
Индикация коррекции. (СО, 1,6; А7), 84 цикла.
17-1-2-18-2-4-10-18-16-18-10-11-17.
Индикация будильников. (СО, А1-3), 109 циклов.
17-1-2-18-2-4-7-18-16-18-7-18-16-18-7-11-17.
Число циклов можно считать приблизительным, т.к. подсчет производился
со значениями в регистрах до десяти. При больших значениях программа пере-
кодировки (16) будет выполняться несколько раз, поэтому увеличится число
циклов.
; ЧАСЫ С ТРЕМЯ БУДИЛЬНИКАМИ, ГАШЕНИЕМ ИНДИКАЦИИ
; И ВОЗМОЖНОСТЬЮ УНИВЕРСАЛЬНОЙ ИНДИКАЦИИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = CHASU.ASM
; ДАТА ИЗМЕНЕНИЯ: 08-07-02.
12
Часы с тремя будильниками
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
t
♦include pl6f84a.inc
’ __CONFIG 3FF0H
ИСПОЛЬЗУЕТСЯ ЧАСОВОЙ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 32, ЧТО ВМЕСТЕ
С TMR0 (256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ,
ДАЕТ НА ВЫХОДЕ ТАЙМЕРА 1 СЕКУНДУ (4x32x256=32768) .
ДЕЛЕЖ1 13ИГОГА»
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR
TIMER0 EQU 01H ; TMR0
OPTIONR EQU 01H /OPTION (RP0=D
PC EQU 02H ;СЧЕТЧИК КОМАНД •
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВУВОДА
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ЧАСОВ.
SEC1 EQU ОСН /СЕКУНДЫ СЧЕТЧИКА
MINI EQU 0DH /МИНУТЫ СЧЕТЧИКА
HOU1 EQU 0EH ;ЧАСЫ СЧЕТЧИКА
/ ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG.
FLAG EQU OFH
; 0—> ВКЛЮЧЕНИЕ ЗВОНКА..
; l-> ВКЛЮЧЕНИЕ СЧЕТЧИКА 30 СЕК. в' 0-0-0 Ч-М-С.
; 2-> ОРГАНИЗАЦИЯ ГАШЕНИЯ ВО ВРЕМЯ УСТАНОВКИ И РАБОТЫ БУДИЛЬНИКА.
; 4-> НЕРАВЕНСТВО ЗНАЧЕНИЙ УСТАНОВОК В РЕГИСТРАХ ГАШЕНИЯ.
; 5-> НАЧАЛОСЬ ГАШЕНИЕ ИНДИКАТОРОВ
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
S_LOW EQU 01 OH /ЕДИНИЦЫ СЕКУНД ИНДИКАЦИИ
S_HIGH EQU 011H /ДЕСЯТКИ СЕКУНД ИНДИКАЦИИ
M_LOW EQU 012H /ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ
M_HIGH EQU 013H /ДЕСЯТКИ МИНУТ ИНДИКАЦИИ
H_LOW EQU 014H /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ
H_HIGH EQU 015H /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ
COUI EQU 016H /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ
; РЕГИСТРЫ: УСТАНОВКИ, БУДИЛЬНИКОВ, КОРРЕКЦИИ, ГАШЕНИЯ.
DAY1 EQU 017Н /СЧЕТЧИК ДНЕЙ НЕДЕЛИ
АТТ EQU 018Н * /ПРИЗНАК (АТРИБУТ) УСТАНОВКИ (РЕЖИМ)
GAU EQU 019Н /РЕГИСТР СЧЕТЧИКА 30 СЕК
ALA1M EQU 01ВН /БУДИЛЬНИК 1, МИНУТЫ
13
Устройства с цифровой индикацией
ALA2M EQU 01CH ;2
ALA3M EQU 01DH ;3
ANOD EQU 01EH /АНОД, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ(0-5)
SEGD EQU 01FH /СЕГМЕНТЫ, ДЕСЯТИЧНОЕ ЗНАЧ. (2-10 КОД)
CAT EQU 020H /УСТАНОВКА ’РАЗРЯДА МИГАНИЯ
COR EQU 023H /РЕГИСТР УСТАНОВКИ КОРРЕКЦИИ
W TEMP EQU 024H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ
STATUS TEMP EQU 025H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
DSMH EQU 026H /БАЙТ АДРЕСАЦИИ В ПП.
LSMH EQU 027H /МЛАДШИЙ БАЙТ В ПОДПРОГРАММЕ
HSMH EQU 028H /СТАРШИЙ БАЙТ В ПП.
FSR TEMP . EQU 029H /ВРЕМЕННЫЙ ДЛЯ FSR
CORNEG EQU 02 AH /ЗНАК КОРРЕКЦИИ, БИТ-0
NEGCOR EQU 02BH ' /ВРЕМЕННЫЙ ДЛЯ ОТРИЦАТЕЛЬНОЙ КОРРЕКЦИИ
ALA1H EQU 02DH /БУДИЛЬНИК 1, ЧАСЫ
ALA2H EQU 02EH /2
ALA3H EQU 02FH /3
ALAUM EQU ОЗОН /РЕГИСТР МИНУТ В ПП.
ALAUH EQU 031H /РЕГИСТР ЧАСОВ В ПП.
GACHH EQU 032H /РЕГИСТР НАЧАЛА ГАШЕНИЯ
GACHM EQU 033H /РЕГИСТР ОКОНЧАНИЯ ГАШЕНИЯ
; ПУСК.
t ORG 0
GOTO INIT
ORG 4
GOTO COUNT
; ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000100' /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100,
MOVWF OPTION_REGA80H /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ.
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА
MOVWF INTCON
MOVLW B'00011000' / RA0-RA2-HA ВЫХОД, RA3,RA4-BXOfl
MOVWF TRISAA80H
MOVLW B'10000000' / RB0-RB6-HA ВЫХОД, НВ7-ВХОД
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
BCF PORTB,6 /СБРОСИМ БИТЫ БУДИЛЬНИКА
BCF PORTB,5 /БИТ EXE
CLRF CORNEG /СБРАСЫВАЕМ ФЛАГ ЗНАКА КОРРЕКЦИИ,
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF S_LOW
CLRF S_HIGH
CLRF M_LOW
CLRF M_HIGH
CLRF H_LOW .
1Л
Часы с тремя будильниками
CLRF H_HIGH
CLRF HSMH
CLRF LSMH
CLRF ATT
CLRF GAU
CLRF COR
CLRF COUI
CLRF ALA1M
CLRF ALA1H
CLRF ALA2M
CLRF ALA2H
CLRF ALA3M
CLRF ALA3H
CLRF GACHH
CLRF GACHM
MOVLW .1 /УСТАНАВЛИВАЕМ НОМЕР
MOVWF CAT /МИГАЮЩЕГО РАЗРЯДА
MOVWF DAY1 /И ДНИ НЕДЕЛИ
1. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KEY
BTFSS FLAG,4 KEYF /ЕСЛИ СРАВНЕНИЕ ВЫПОЛНЕНО, /ТО ПРОПУСКАЕМ, ИНАЧЕ ИДЕМ СРАВНИВАТЬ.
GOTO
KEYO
BTFSC PORTB,7 /ВКЛЮЧЕН ЛИ ВЫБОР РЕЖИМА УСТАНОВКИ?
GOTO ATTK /ДА.
BTFSC FLAG,1 /ЕСЛИ ПОЛНОЧЬ НАСТУПИЛА,-
GOTO KEYC /ИДЕМ СЧИТАТЬ 30 СЕКУНД,
GOTO CATK /ИНАЧЕ ИДЕМ СРАВНИВАТЬ РАЗРЯД УСТАНОВКИ.
KEYF
MOVFW GACHH /ВЫЧТЕМ ИЗ РЕГИСТРА ОКОНЧАНИЯ ГАШЕНИЯ
SUBWF GACHM,0 /ЗНАЧЕНИЕ РЕГИСТРА НАЧАЛА ГАШЕНИЯ.
BZ KEYO /ЕСЛИ ИХ ЗНАЧЕНИЯ РАВНЫ, ВОЗВРАЩАЕМСЯ.
BSF FLAG,4 /ИНАЧЕ УСТАНАВЛИВАЕМ ФЛАГ НЕРАВЕНСТВА.
GOTO KEYO /ВОЗВРАТ К ПОИСКУ НАЖАТЫХ КЛАВИШ.
KEYC
INCF GAU, 1 /ВКЛЮЧАЕМ СЧЕТЧИК
MOVLW .30 /30 СЕК
SUBWF GAU, 0 /И СРАВНИВАЕМ.
BTFSC ( STATUS,Z /ЕСЛИ НЕ РАВНО 0, ПРОПУСКАЕМ
CALL CORN /ИЛИ ИДЕМ КОРРЕКТИРОВАТЬ СЕКУНДЫ.
_________________________ — — —— —— —- —— — ——
/ 2. ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАЮЩЕГО РАЗРЯДА).
CATK
CALL SI /ЧАСЫ НЕ ОСТАНАВЛИВАЮТСЯ: ПРИБАВИМ СЕКУНДУ.
BTFSS PORTA,3 /ЕСЛИ НЕ ВКЛЮЧЕН ВЫБОР РАЗРЯДА,
GOTO CATKU /ИДЕМ ВЫБИРАТЬ РЕЖИМ,
INCF CAT, 1 /ИНАЧЕ +1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА.
MOVFW CAT * /6 РАЗРЯД ФИКТИВНЫЙ, ЧТОБЫ УБРАТЬ МИГАНИЕ С
SUBLW .7 /ИНДИКАТОРА. /НЕ БОЛЕЕ 6,
15
Устройства с цифровой индикацией
BZ САТКО /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; ОТ НОМЕРА ВЫБРАННОГО РАЗРЯДА ЗАВИСИТ НАПРАВЛЕНИЕ.
CATKU
MOVFW CAT ;КУДА ПОЙТИ ПРИ
ADDWF PC, 1 /УСТАНОВКЕ:
GOTO ATTIN ;ИНДИКАЦИЯ
GOTO ATTB ;РАБОТА,
GOTO ATTUM /УСТАНОВКА МИНУТ,
GOTO ATTUM /УСТАНОВКА МИНУТ,
GOTO ATTUH /УСТАНОВКА ЧАСОВ,
GOTO ATTUH /УСТАНОВКА ЧАСОВ,
GOTO ATTB /РАБОТА.
CATKO
CLRF CAT /ОБНУЛЕНИЕ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ
; 3. ВЫБОР РЕЖИМА УСТАНОВКИ.
АТТК /ВО ВРЕМЯ УСТАНОВКИ ЧАСЫ НЕ ОСТАНАВЛИВАЮТСЯ,
CALL SI /ПРИ ПЕРЕХОДЕ В МИНУТЫ ПРОПУСК УСТАНОВКИ 1 СЕК
MOVLW .10 /ГОРИТ РАЗРЯД "с"
MOVWF S_HIGH /В РЕГИСТРЕ ИНДИКАЦИИ ДЕСЯТКОВ СЕКУНД.
INCF ATT, F /УВЕЛИЧИВАЕМ ЧИСЛО АТРИБУТА.
MOVFW ATT /ВЫСВЕТИМ ЧИСЛО РЕЖИМА (АТТ) В
' MOVWF S_LOW /РЕГИСТРЕ ИНДИКАЦИИ ЕДИНИЦ СЕКУНД.
SUBLW .8 /ИНДИКАЦИЯ РАЗРЕШЕНА ДО 7 ЦИФРЫ (0-7) .
BNZ ATTGO /ЕСЛИ НЕ РАВНО НУЛЮ, ИДЕМ.
CLRF ATT /ИНАЧЕ ОБНУЛЯЕМ АТРИБУТ
CLRF S_LOW /И РЕГИСТР ЕДИНИЦ СЕКУНД ИНДИКАЦИИ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; 4. КУДА ПОЙТИ = МУЛЬТИПЛЕКСОР.
ATTUM MOVFW ATT /КУДА ПОЙТИ? ПРИ УСТАНОВКЕ САТ=2,3
ADDWF PC, 1 /ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO MINIM /УСТАНОВКА МИНУТ.
GOTO ALAKB1M /УСТАНОВКА МИНУТ 1 БУДИЛЬНИКА.
GOTO ALAKB2M /УСТАНОВКА МИНУТ 2 БУДИЛЬНИКА.
GOTO ALAKB3M /УСТАНОВКА МИНУТ 3 БУДИЛЬНИКА.
GOTO GACHK /УСТАНОВКА ВРЕМЕНИ ОКОНЧАНИЯ ГАШЕНИЯ
GOTO ATTK5 /РАБОТА: ЧАСЫ С СЕКУНДАМИ.
GOTO HID /РАБОТА: ЧАСЫ С ДНЯМИ НЕДЕЛИ.
GOTO ATTK7 /УСТАНОВКА КОРРЕКЦИИ СЕКУНД В СУТКИ.
ATTUH MOVFW ATT /КУДА ПОЙТИ? САТ=4,5
ADDWF PC, 1 /ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO HOU1H /УСТАНОВКА ЧАСОВ.
GOTO ALAKB1H /УСТАНОВКА ЧАСОВ 1 БУДИЛЬНИКА.
16
Часы с тремя будильниками
GOTO ALAKB2H /УСТАНОВКА ЧАСОВ 2 БУДИЛЬНИКА.
GOTO ALAKB3H /УСТАНОВКА ЧАСОВ 3 БУДИЛЬНИКА.
GOTO GACHN /УСТАНОВКА ВРЕМЕНИ НАЧАЛА ГАШЕНИЯ.
GOTO ATTK5 /РАБОТА: ЧАСЫ С СЕКУНДАМИ.
GOTO HID /РАБОТА: ЧАСЫ С ДНЯМИ НЕДЕЛИ.
GOTO ATNEG /СМЕНА ЗНАКА КОРРЕКЦИИ.
ATTB
MOVFW ATT /КУДА ПОЙТИ? САТ=1,б
ADDWF PC, 1 /ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO ATTGO /РЕЗЕРВ, ЗАВЕРШАЕМ.
‘ GOTO FREK1 /РАБОТА: ПРОВЕРКА 1 БУДИЛЬНИКА.
GOTO FREK2 /РАБОТА: ПРОВЕРКА 2 БУДИЛЬНИКА.
GOTO FREK3 /РАБОТА: ПРОВЕРКА 3 БУДИЛЬНИКА.
GOTO GACHIN /ИНДИКАЦИЯ ВРЕМЕНИ ГАШЕНИЯ (НАЧАЛО-КОНЕЦ)
GOTO ATTK5 /РАБОТА: ЧАСЫ С СЕКУНДАМИ.
GOTO HID /РАБОТА: ЧАСЫ С ДНЯМИ НЕДЕЛИ.
GOTO ATT IК /ИНДИКАЦИЯ КОРРЕКЦИИ.
ATT IN
' MOVFW ATT /КУДА ПОЙТИ? САТ=0
ADDWF P.C, 1 /ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO ATTOO /ОБНУЛЕНИЕ ЧАСОВ.
GOTO FRIN1 /ИНДИКАЦИЯ 1 БУДИЛЬНИКА.
GOTO FRIN2 /ИНДИКАЦИЯ 2 БУДИЛЬНИКА.
GOTO FRIN3 /ИНДИКАЦИЯ 3 БУДИЛЬНИКА.
GOTO DAY ID /УСТАНОВКА ДНЕЙ НЕДЕЛИ.
GOTO ATTK5 /РАБОТА: ЧАСЫ С СЕКУНДАМИ..
GOTO HID /РАБОТА: ЧАСЫ С ДНЯМИ НЕДЕЛИ.
GOTO ATT IК /ИНДИКАЦИЯ КОРРЕКЦИИ.
; 5.ОБНУЛЕНИЕ МИНУТ И СЕКУНД.
АТТОО
BTFSS PORTA,4 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ
GOTO ATTGO / НЕТ.
CLRF SEC1 /ДА, ОБНУЛЯЕМ ДЛЯ УСТАНОВКИ ЧАСОВ
CLRF MINI /ПО СИГНАЛАМ ТОЧНОГО ВРЕМЕНИ
CALL HIN /И ВЫСВЕЧИВАЕМ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; 6. ВЫЗОВ ПОДПРОГРАММ СЧЕТА ПРИ УСТАНОВКЕ.
MINIM
BTFSS PORTA,4 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ
GOTO ATTGO / НЕТ.
MOVLW .10 ;ДА.
MOVWF S HIGH /ОБНОВЛЯЕМ ИНДИКАЦИЮ ВЫБРАННОГО
MOVFW ATT /РЕЖИМА УСТАНОВКИ
MOVWF S_LOW /В МЛАДШЕМ РАЗРЯДЕ.
CALL M1M /+1 В РЕГИСТР МИНУТ.
CALL HIH /НА ИНДИКАЦИЮ ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
HOU1H J*
BTFSS PORTA,4 /АНАЛОГИЧНО ДЛЯ ЧАСОВ.
GOTO ATTGO Г
17
Устройства с цифровой индикацией
MOVLW .10 t
MOVWF S_HIGH f
MOVFW ATT f
MOVWF S_LOW
CALL H1H ;+1 В РЕГИСТР ЧАСОВ.
CALL HIN ;НА ИНДИКАЦИЮ МИНУТ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ
DAY ID
BTFSS PORTA,4 /АНАЛОГИЧНО ДЛЯ ДНЕЙ.
GOTO ATTGO t
MOVLW .10 г
MOVWF S_HIGH t
MOVFW ATT f
MOVWF S_LOW
CALL DI /+1 В РЕГИСТР ДНЕЙ.
CALL HIN /НА ИНДИКАЦИЮ МИНУТ
CALL HIH /И ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ
• = ====== = == = = = = =======: = == = = ==== = == = = == = = = = == = SS = = = =; = =::s: = = = =:=: = = s= =
; 7. СМЕНА ИНДИКАЦИИ ПРИ СМЕНЕ РЕЖИМА.
• ================================================
FRIN1
MOVLW .10 /ПРИ ИНДИКАЦИИ ВЫСВЕЧИВАЕТСЯ:
MOVWF S_HIGH /"С" В ПЕРВОМ РАЗРЯДЕ И
MOVFW ATT /НОМЕР РЕЖИМА УСТАНОВКИ
MOVWF S_LOW /В МЛАДШЕМ РАЗРЯДЕ
MOVFW ALA1M /ИНДИКАЦИЯ 1 БУДИЛЬНИКА.
CALL MID /ИНДИКАЦИЯ МИНУТ.
MOVFW ALA1H
CALL H1U /ИНДИКАЦИЯ ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
FRIN2
MOVLW .10 /АНАЛОГИЧНО ДЛЯ ВТОРОГО БУДИЛЬНИКА.
MOVWF S_HIGH /
MOVFW ATT Г
MOVWF S_LOW
MOVFW ALA2M /ИНДИКАЦИЯ 2 БУДИЛЬНИКА.
CALL M1U /ИНДИКАЦИЯ МИНУТ.
MOVFW ALA2H
CALL H1U /ИНДИКАЦИЯ ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
FRIN3
MOVLW .10 /АНАЛОГИЧНО ДЛЯ ТРЕТЬЕГО БУДИЛЬНИКА
MOVWF S_HIGH Г
MOVFW ATT г
MOVWF S_LOW
MOVFW ALA3M /ИНДИКАЦИЯ 3 БУДИЛЬНИК^.
CALL M1U /ИНДИКАЦИЯ МИНУТ.
MOVFW ALA3H
CALL H1U /ИНДИКАЦИЯ ЧАСОВ.
GOTO ATTGO ;ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
HIN
MOVFW MINI
18
Часы с тремя будильниками
HIH CALL RETURN MOVFW CALL RETURN M1U HOU1 H1U /ИНДИКАЦИЯ МИНУТ. /ИНДИКАЦИЯ ЧАСОВ.
HID /ИНДИКАЦИЯ С ДНЯМИ НЕДЕЛИ В ПЕРВОМ РАЗРЯДЕ.
MOVFW DAY1 /РЕГИСТР ДНЕЙ
MOVWF S HIGH /ВЫСВЕЧИВАЕМ В ПЕРВОМ РАЗРЯДЕ.
MOVLW . 10
MOVWF ' S LOW /НУЛЕВОЙ РАЗРЯД - "с".
» CALL HIN /ОБНОВЛЯЕМ ИНДИКАЦИЮ МИНУТ
CALL HIH /И ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
АТТК5 /РАБОТА: ЧАСЫ С СЕКУНДАМИ.
CALL SIU /ВЫСВЕТИМ СЕКУНДЫ.
CALL HIN /ОБНОВЛЯЕМ ИНДИКАЦИЮ МИНУТ
CALL HIH ;И ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GACHIN /ИНДИКАЦИЯ УСТАНОВЛЕННОГО ГАШЕНИЯ.
MOVLW .10 /ПРИ ИНДИКАЦИИ
MOVWF S HIGH /ВЫСВЕЧИВАЕТСЯ
MOVFW ATT /НОМЕР РЕЖИМА УСТАНОВКИ.
MOVWF S LOW
MOVFW GACHH /НАЧАЛО ГАШЕНИЯ
CALL H1U /ВЫСВЕЧИВАЕТСЯ В РАЗРЯДАХ ЧАСОВ.
MOVFW GACHM /ОКОНЧАНИЕ ГАШЕНИЯ
CALL M1U /ВЫСВЕЧИВАЕТСЯ В РАЗРЯДАХ МИНУТ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
/ 8. УСТАНОВКИ МИНУТ (CAT=2 ,3) И ВРЕМЕНИ ОКОНЧАНИЯ ГАШЕНИЯ.
— ” —r——
ALAKUM /ПП. СЧЕТА УСТАНОВКИ МИНУТ БУДИЛЬНИКОВ.
MOVFW ATT /ВЫСВЕТИЛИ НОМЕР
MOVWF S LOW /РЕЖИМА УСТАНОВКИ В НУЛЕВОМ РАЗРЯДЕ.
MOVLW .10 /В ПЕРВОМ РАЗРЯДЕ
MOVWF S HIGH /СВЕТИТСЯ "с’’.
pioVFW ALAUM /ЗАГРУЗИМ РЕГИСТР МИНУТ УСТАНОВКИ.
ADDLW -3BH ;-59
BZ RUM /СРАВНИТЬ НА 0, ЕСЛИ РАВНО - ОБНУЛИТЬ,
INCF ALAUM,1 /ИНАЧЕ ПРИБАВИТЬ.
MUR MOVFW ALAUM
CALL M1U /ВЫСВЕТИЛИ.
RETURN
RUM CLRF ALAUM /ОБНУЛЕНИЕ.
GOTO MUR 9
•=== = = : = = = = = = = = = tsessrsrsssssssssssrxssrsrsx =======
ALAKB1M
BTFSS PORTA,4 /УСТАНОВКА РАЗРЕШЕНА ПРИ НАЖАТОЙ КНОПКЕ
4* /УСТАНОВКИ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ALA1M /ЗАПИСЬ МИНУТ 1 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ '
19
Устройства с цифровой индикацией
MOVWF CALL ALAUM ALAKUM /РЕГИСТР МИНУТ БУДИЛЬНИКА. ;+1 В РЕГИСТР МИНУТ.
. MOVFW ALAUM /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA1M /В РЕГИСТР МИНУТ 1 БУДИЛЬНИКА.
GOTO FRIN1 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
ALAKB2M BTFSS PORTA,4 /УСТАНОВКА РАЗРЕШЕНА ПРИ НАЖАТОЙ КНОПКЕ
GOTO ATTGO /УСТАНОВКИ. /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ALA2M /ЗАПИСЬ МИНУТ 2 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ
MOVWF ALAUM /РЕГИСТР МИНУТ БУДИЛЬНИКА.
CALL. ALAKUM /+1 В РЕГИСТР МИНУТ.
MOVFW ALAUM /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA2M /В РЕГИСТР МИНУТ 2 БУДИЛЬНИКА.
GOTO FRIN2 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
ALAKB3M BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ УСТАНОВКИ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ALA3M /ЗАПИСЬ МИНУТ 3 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ
MOVWF ALAUM /РЕГИСТР МИНУТ БУДИЛЬНИКА.
CALL ALAKUM /+1 В РЕГИСТР МИНУТ.
MOVFW ALAUM /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA3M /В РЕГИСТР МИНУТ 3 БУДИЛЬНИКА.
GOTO FRIN3 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
; УСТАНОВКА ВРЕМЕНИ ОКОНЧАНИЯ ГАШЕНИЯ.
GACHK BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ УСТАНОВКИ.
, GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
MOVFW GACHM /ЗАГРУЗКА ЗНАЧЕНИЯ РЕГИСТРА ОКОНЧАНИЯ ГАШЕНИЯ
MOVWF ALAUH /ВО ВРЕМЕННЫЙ РЕГИСТР ЧАСОВ ПП..
CALL ALAKUH /+1 В РЕГИСТР ЧАСОВ.
MOVFW ALAUH /ИЗ ВРЕМЕННОГО РЕГИСТРА ЧАСОВ ПП.
MOVWF GACHM /В РЕГИСТР ОКОНЧАНИЯ ГАШЕНИЯ.
GOTO GACHIN /И НА ИНДИКАЦИЮ ЗНАЧЕНИЯ ГАШЕНИЯ.
1 1 1 vo 1 1 • 1 1 1 УСТАНОВКИ ЧАСОВ CAT=4,5 И ВРЕМЕНИ НАЧАЛА ГАШЕНИЯ.
ALAKUH /ПП. СЧЕТА УСТАНОВКИ ЧАСОВ БУДИЛЬНИКОВ.
MOVFW ATT /ВЫСВЕТИЛИ НОМЕР
MOVWF S LOW /РЕЖИМА УСТАНОВКИ В НУЛЕВОМ РАЗРЯДЕ.
MOVLW .10 /В ПЕРВОМ РАЗРЯДЕ
MOVWF S HIGH /СВЕТИТСЯ "с".
MOVFW ALAUH /ЗАГРУЗКА ЗНАЧЕНИЯ ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H /- 23
BZ RUH /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА ОБНУЛЕНИЕ.
INCF ALAUH,1 /ПРИБАВИТЬ 1 В ЧАСЫ.
HUR MOVFW ALAUH
CALL RETURN H1U /ВЫСВЕТИЛИ.
RUH CLRF ALAUH /ОБНУЛИЛИ.
GOTO HUR /
20
Часы с тремя будильниками
ALAKB1H
BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ,
MOVFW ALA1H /ЗАПИСЬ ЧАСОВ 1 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ
MOVWF ALAUH ' /РЕГИСТР ЧАСОВ БУДИЛЬНИКА.
CALL ALAKUH /+1 В РЕГИСТР ЧАСОВ.
MOVFW ALAUH /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA1H /В РЕГИСТР ЧАСОВ 1 БУДИЛЬНИКА.
GOTO ALAKB2H FRIN1 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ALA2H /ЗАПИСЬ ЧАСОВ 2 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ
MOVWF ALAUH /РЕГИСТР ЧАСОВ БУДИЛЬНИКА.
CALL ALAKUH /+1 В РЕГИСТР ЧАСОВ.
MOVFW ALAUH /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA2H /В РЕГИСТР ЧАСОВ 2 БУДИЛЬНИКА.
GOTO FRIN2 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
ALAKB3H
BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ALA3H /ЗАПИСЬ ЧАСОВ 3 БУДИЛЬНИКА ВО ВРЕМЕННЫЙ
MOVWF ALAUH /РЕГИСТР ЧАСОВ БУДИЛЬНИКА.
CALL ALAKUH /+1 В РЕГИСТР ЧАСОВ.
MOVFW ALAUH /ВЫГРУЖАЕМ ИЗ ВРЕМЕННОГО РЕГИСТРА
MOVWF ALA3H /В РЕГИСТР ЧАСОВ 3 БУДИЛЬНИКА.
GOTO FRIN3 /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
; УСТАНОВКА ВРЕМЕНИ НАЧАЛА ГАШЕНИЯ.
GACHN
BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ УСТАНОВКИ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW GACHH /ЗАПИСЬ -ЗНАЧЕНИЯ РЕГИСТРА НАЧАЛА ГАШЕНИЯ
MOVWF ALAUH /ВО ВРЕМЕННЫЙ РЕГИСТР ЧАСОВ ПП..
CALL ALAKUH /+1 В РЕГИСТР ЧАСОВ.
MOVFW ALAUH /ИЗ ВРЕМЕННОГО РЕГИСТРА ЧАСОВ ПП.
MOVWF GACHH /В РЕГИСТР НАЧАЛА ГАШЕНИЯ.
GOTO GACHIN /ВЫСВЕЧИВАЕМ РЕЗУЛЬТАТ.
; 10. КОРРЕКЦИЯ, УСТАНОВКА И ИНДИКАЦИЯ.
АТТК7 " BTFSS PORTA,4 GOTO ATTGO MOVFW ATT MOVWF S_LOW MOVLW .10 MOVWF S_HIGH INCF COR,1 MOVLW .2 9 SUBWF COR, 0» BZ ATTO /УСТАНОВКА КОРРЕКЦИИ ХОДА ЧАСОВ. /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ. /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ. Г г г /+1 В РЕГИСТР КОРРЕКЦИИ. /ЗНАЧЕНИЕ КОРРЕКЦИИ НЕ БОЛЕЕ 28 СЕК. /ЕСЛИ МЕНЬШЕ, ИДЕМ СВЕТИТЬ. /ЕСЛИ БОЛЬШЕ, ОБНУЛЯЕМ.
21
Устройства с цифровой индикацией
ATTIK /ИНДИКАЦИЯ ЗНАЧЕНИЙ КОРРЕКЦИИ И ЗНАКА.
MOVFW ATT
MOVWF S_LOW
MOVLW .10 . ,.с„
MOVWF H_HIGH /ИНДИКАЦИЯ В 5 РАЗРЯДЕ (ДЕСЯТКИ ЧАСОВ)
MOVWF S_HIGH /И В ПЕРВОМ РАЗРЯДЕ.
MOVFW CORNEG /ЗНАК КОРРЕКЦИИ ВЫСВЕЧИВАЕТСЯ
MOVWF H_LOW /В РАЗРЯДЕ ЕДИНИЦ ЧАСОВ.
MOVFW COR /ИНДИКАЦИЯ' ЗНАЧЕНИЯ КОРРЕКЦИИ .
CALL M1U /ВЫСВЕЧИВАЕТСЯ В РАЗРЯДАХ МИНУТ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
ATNEG /УСТАНОВКА ЗНАКА КОРРЕКЦИИ.
BTFSS PORTA,4 /УСТАНОВКА ПРИ НАЖАТОЙ КНОПКЕ.
GOTO ATTGO /ЕСЛИ КНОПКА НЕ НАЖАТА, ЗАВЕРШАЕМ ПРЕРЫВАНИЕ
MOVFW ATT /ОБНОВЛЯЕМ ЗНАЧЕНИЕ РЕЖИМА УСТАНОВКИ.
MOVWF S_LOW 9
MOVLW .10 9
MOVWF S_HIGH
BTFSC CORNEG, 0 /ЕСЛИ ЗНАК КОРРЕКЦИИ® 0, ПРОПУСКАЕМ,
GOTO ATNEG1 /ИНАЧЕ ИДЕМ МЕНЯТЬ ЗНАК НА ПРОТИВОПОЛОЖНЫЙ.
JSF CORNEG, 0 /УСТАНОВИМ ЗНАК: 1= ЗНАК МИНУС.'
GOTO ATTIK /ВЫСВЕТИМ.
ATNEG1
BCF CORNEG,0 /0= ЗНАК ПЛЮС.
GOTO ATTIK ;ВЫСВЕТИЛИ.
ATTO
CLRF COR /ОБНУЛИЛИ.
GOTO ATTIK /ВЫСВЕТИЛИ.
• = = === ========= = = = = = = = =S= ===== = = S==== = = = X3
; 11. ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
i - - - ATTGO
BTFSC INTCON,2 /ЕСЛИ НЕТ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ ТАЙМЕРА,
GOTO RETCONT /ТО ПРОПУСКАЕМ, ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
GOTO COUZIKL1 /ИЛИ ИДЕМ НА ИНДИКАЦИЮ.
; 12. ПП. ГАШЕНИЯ ВСЕХ РАЗРЯДОВ ИНДИКАЦИИ.
GACHZIKL
MOVLW B'00011111' /ЗАПИСЬ 1 В РАЗРЯД ГАШЕНИЯ.
MOVWF PORTB
MOVWF PORTA /ЗАПИСЬ 1 ВО ВСЕ РАЗРЯДЫ 514ИД2 ГАСИТ СЕГМЕНТЫ
BTFSS PORTA,4 /ЕСЛИ КНОПКА УСТАНОВКИ НЕ НАЖАТА,
GOTO COUZIKL1 /ИДЕМ НА ИНДИКАЦИЮ,
BTFSS FLAG,5 /ИЛИ ПРОВЕРЯЕМ УСТАНОВКУ ФЛАГА ГАШЕНИЯ.
GOTO COUZIKL1 /ЕСЛИ ФЛАГ ГАШЕНИЯ СБРОШЕН, ИДЕМ НА ИНДИКАЦИЮ.
BSF INTCON,7 /УСТАНАВЛИВАЕМ БИТРАЗРЕШЕНИЯ ПРЕРЫВАНИЯ.
GOTO GACHZIKL /ПРИ СБОЕ МОЖНО НИКОГДА НЕ ВЫЙТИ ИЗ ЦИКЛА.
; 13’. ПП. ИНДИКАЦИИ С ВЫХОДОМ В ДВОИЧНО-ДЕСЯТИЧНОМ КОДЕ И ЗВОНКА БУДИЛЬНИКА.
• =============================================±============================
COUZIKLO /СРАВНЕНИЕ НА ВКЛЮЧЕНИЕ ГАШЕНИЯ - КАЖДЫЙ ЦИКЛ.
BTFSS PORTA,4 /ЕСЛИ КНОПКА УСТАНОВКИ НЕ НАЖАТА,
/
22
Часы с тремя будильниками
GOTO COUZIKL1 /ИДЕМ НА ИНДИКАЦИЮ.
BTFSC FLAG,5 /ЕСЛИ ФЛАГ ГАШЕНИЯ ВКЛЮЧЕН,
GOTO GACHZIKL /ГАСИМ ИНДИКАЦИЮ.
COUZIKL1
CLRF ANOD /ОБНУЛЯЕМ РЕГИСТР АНОДА.
MOVLW 010H /ЗАПИСЬ НОМЕРА РЕГИСТРА ЕДИНИЦ СЕКУНД
MOVWF SEGD /В РЕГИСТР СЕГМЕНТОВ ДЛЯ КОСВЕННОЙ АДРЕСАЦИИ.
GOTO COUZ /ИДЕМ СЧИТАТЬ ЦИКЛЫ ИНДИКАЦИИ.
ZIKL
INCF ANOD,1 /+1 В РЕГИСТР АНОДА (КАТОДА).
MOVLW B'000001101 ' /ЗАПИСЬ ЧИСЛА 6., ‘
SUBWF ANOD,0 /ЗНАЧЕНИЕ АНОДА МОЖЕТ БЫТЬ НЕ БОЛЕЕ 5.
BZ COUZIKLO /ЕСЛИ РАВНО 6, ИДЕМ ОБНУЛЯТЬ
COUZ
INCF COUI,1 /+1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
MOVLW .100- /МОЖНО ПОСТАВИТЬ .100 И МИГАНИЕ БУДЕТ ЧАЩЕ.
SUBWF COUI,0 /ВЫЧЛИ.
BZ COUZ1 /ЕСЛИ РАВНО 0, ПОЙДЕМ УСТАНАВЛИВАТЬ БИТ ГАШЕНИЯ
MOVFW ANOD /СРАВНИМ НОМЕР АНОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT,0 /РАЗРЯДА МИГАНИЯ.
BNZ COUZIKL2 /ПЕРЕХОД, ЕСЛИ НЕ НОЛЬ.
GOTO COUZ3 /ИНАЧЕ ИДЕМ ОПРЕДЕЛЯТЬ БИТ ГАШЕНИЯ.
COUZ1
CLRF COUI /ОБНУЛИЛИ СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
BTFSC FLAG,2 /ПРОПУСТИТЬ, ЕСЛИ 0.
GOTO COUZ2 /ИНАЧЕ ИДЕМ СБРАСЫВАТЬ БИТ.
BSF FLAG,2 /УСТАНОВКА БИТА ГАШЕНИЯ В 1.
GOTO COUZ3 /ОПРЕДЕЛЯЕМ БИТ ГАШЕНИЯ.
COUZ2
BCF FLAG,2 /УСТАНОВКА БИТА ГАШЕНИЯ В 0
COUZ3
BCF STATUS,0 /ОЧИСТИМ.
BTFSC FLAG,2 /ЕСЛИ БИТ ГАШЕНИЯ РАВЕН 0, ПРОПУСКАЕМ. . .
BSF STATUS,0 /УСТАНОВИТЬ БИТ В 1, ПРИ СДВИГЕ 0 БИТ ПЕРЕХОДИТ В 1.
BTFSC FLAG,0 /ЕСЛИ БИТ ЗВОНКА =0, ПРОПУСТИТЬ.
GOTO INDAL /ПОЩЛИ ЗВОНИТЬ
GOTO INDC /ИЛИ СВЕТИТЬ.
COUZIKL2
BCF STATUS,0 /ОЧИСТИМ БИТ
GOTO INDC /И ИДЕМ СВЕТИТЬ.
INDAL /ОРГАНИЗАЦИЯ ЗВОНКА БУДИЛЬНИКА.
BSF PORTB,5 /УСТАНАВЛИВАЕМ БИТ ЗВОНКА В 1
BTFSS SEC1,0 /ЕСЛИ БИТ РАВЕН 1, ПРОПУСКАЕМ
;(ЗВОНОК ЗВОНИТ ПРИ НЕЧЕТНЫХ СЕКУНДАХ).
GOTO INDC /ПОШЛИ НА ИНДИКАЦИЮ ПРИ ЧЕТНЫХ СЕКУНДАХ.
BCF PORTB,5 /УСТАНАВЛИВАЕМ В 0 БИТ ЗВОНКА.
BSF PORTB,0 /УСТАНОВИМ ГАШЕНИЕ ИНДИКАТОРА.
GOTO INDAL /ЗАЦИКЛИВАЕМСЯ НА 1 СЕКУНДУ.
INDC
MOVFW SEGD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ СЕГМЕНТА
MOVWF FSR * /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
RLF INDF,0 /СДВИГАЕМ ВЛЕВО, ВЫРАВНИВАЯ ВЫХОДНОЙ РЕГИСТР С
MbVWF PORTB /ВЫХОДНЫМИ РАЗРЯДАМИ ПОРТА TRISB И
23
Устройства с цифровой индикацией
MOVFW ANOD /ЗАГРУЖАЕМ НОМЕР АНОДА
MOVWF PORTA /В ПОРТ А.
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 1,
BSF PORTB,6 /ТО УСТАНОВИМ ПОТЕНЦИАЛ НА RB6 (EXE).
INCF SEGD,F /+1 В РЕГ. СЕГМЕНТА.
BSF INTCON,7 /УСТАНАВЛИВАЕМ БИТ РАЗРЕШЕНИЯ ПРЕРЫВАНИЯ.
GOTO ZIKL /ПРИ СБОЕ МОЖНО НИКОГДА НЕ ВЫЙТИ ИЗ ИНДИКАЦИИ
; 14. СРАВНЕНИЕ РЕГИСТРОВ БУДИЛЬНИКА И ЧАСОВ.
FREK1
MOVLW .10 /ОБНОВЛЕНИЕ ИНДИКАЦИИ
MOVWF , S_HIGH /ВЫБРАННОГО
MOVFW ’ ATT /РЕЖИМА РАБОТЫ.
MOVWF S_LOW
BCF FLAG,0 /СБРАСЫВАЕМ ФЛАГ ЗВОНКА (ЕСЛИ БЫЛ = 1)
MOVFW ALA1H /ЗАГРУЖАЕМ РЕГИСТР ЧАСОВ 1 БУДИЛЬНИКА,
SUBWF HOU1,0 /ВЫЧИТАЕМ ЕГО ИЗ РЕГИСТРА ЧАСОВ.
BZ FREK1M /ЕСЛИ НОЛЬ, ИДЕМ СРАВНИВАТЬ МИНУТЫ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
FREK1M
MOVFW ALA1M /ЗАГРУЖАЕМ МИНУТЫ 1 БУДИЛЬНИКА.
SUBWF MINI,0 /СРАВНИВАЕМ С РЕГИСТРОМ МИНУТ.
BZ ALARM /ЕСЛИ НОЛЬ, ИДЕМ ЗВОНИТЬ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
FREK2
MOVLW .10 /ОБНОВЛЕНИЕ ИНДИКАЦИИ
MOVWF S_HIGH /ВЫБРАННОГО
MOVFW ATT /РЕЖИМА РАБОТЫ.
MOVWF S_LOW
BCF FLAG,0 /СБРАСЫВАЕМ ФЛАГ ЗВОНКА (ЕСЛИ БЫЛ = 1)
MOVFW ALA2H /ЗАГРУЖАЕМ РЕГИСТР ЧАСОВ 2 БУДИЛЬНИКА.
SUBWF HOU1,0 /ВЫЧИТАЕМ ЕГО ИЗ РЕГИСТРА ЧАСОВ.
BZ FREK2M /ЕСЛИ НОЛЬ, ИДЕМ СРАВНИВАТЬ МИНУТЫ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
FREK2M
MOVFW ALA2M /ЗАГРУЖАЕМ МИНУТЫ 2 БУДИЛЬНИКА.
SUBWF MINI,0 /СРАВНИВАЕМ С РЕГИСТРОМ МИНУТ.
BZ ALARM /ЕСЛИ НОЛЬ, ИДЕМ ЗВОНИТЬ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
FREK3
MOVLW .10 /ОБНОВЛЕНИЕ ИНДИКАЦИИ
MOVWF S_HIGH /ВЫБРАННОГО
MOVFW ATT /РЕЖИМА РАБОТЫ.
MOVWF S_LOW t
BCF FLAG,0 /СБРАСЫВАЕМ ФЛАГ ЗВОНКА (ЕСЛИ БЫЛ = 1)
MOVFW ALA3H /ЗАГРУЖАЕМ РЕГИСТР ЧАСОВ 3 БУДИЛЬНИКА.
SUBWF HOU1,0 /ВЫЧИТАЕМ ЕГО ИЗ РЕГИСТРА ЧАСОВ.
BZ FREK3M /ЕСЛИ НОЛЬ, ИДЕМ СРАВНИВАТЬ МИНУТЫ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
24
Часы с тремя будильниками
FREK3M
MOVFW ALA3M /ЗАГРУЖАЕМ МИНУТЫ 3 БУДИЛЬНИКА
SUBWF MINI,0 /СРАВНИВАЕМ С РЕГИСТРОМ МИНУТ.
BZ ALARM /ЕСЛИ НОЛЬ, ИДЕМ ЗВОНИТЬ,
GOTO ATTGO /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
/ 15. ВКЛЮЧЕНИЕ ЗВОНКА.'
ALARM
BTFSS PORTA,4 ; :ПРИ ОТЖАТОЙ КНОПКЕ ЗВОНОК НЕ РАБОТАЕТ
GOTO ATTGO ; :ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
BSF FLAG,0 /ИНАЧЕ УСТАНОВИМ ФЛАГ ЗВОНКА = 1.
GOTO ATTGO ; ?НА ИНДИКАЦИИ СРАБАТЫВАЕТ ГЕНЕРАТОР.
/ 16. ПП. ПЕРЕКОДИРОВКИ С 1 1 1 1 1 1 1 • 1 1 г—. 1 1 О 1 1 г-Н | 1 1 1 1 см 1 1 1 1 1 1 1 1 1 1 1 СМ 1 1 — 1 1 1 1 t=t 1 1 О 1 1 1 1 1 1 О 1 1 г-1 1 1 1 1 1 см 1 1 1 । m । 1 о 1 Сн 1 о 1 д 1 CU 1 < 1 д 1 S । m ।
BINDECH MOVLW .10 /10 >w.
BDH BSF STATUS,0 , /ОБНУЛЕНИЕ БИТА "С" РЕГИСТРА STATUS.
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDECL , /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH ;ПОВТОРИТЬ.
BINDECL MOVF DSMH,0
ADDLW .10 /Ю+W >W. *
MOVWF RETURN LSMH ' , /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
; 17. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
COUNT
MOVWF W_TEMP /СОХРАНЕНИЕ 'ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
BSF PORTB,0 /ГАШЕНИЕ ЦИФРЫ ПРИ ПРЕРЫВАНИИ.
GOTO KEY /НА ОПРОС КЛАВИАТУРЫ.
RETCONT /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА /(РАЗРЕШАЕМ ПРЕРЫВАНИЯ).
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR / FSR,
MOVFW W_TEMP /W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 18. СЧЕТ И ПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С-Д.
S1
MOVFW .SEC1 /ЗАГРУЗКА ЗНАЧЕНИЙ СЕКУНД В РАБ. РЕГИСТР.
25
Устройства с цифровой индикацией
ADDLW -ЗВН ;ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА О, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml,
INCE SEC1,F /ИНАЧЕ ПРИБАВИТЬ 1 В РЕГИСТР СЕКУНД.
RETURN
/ ПЕРЕКОДИРОВКА 2_2-10 И ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
S1U
MOVFW SEC1 /SEC I >W.
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП. ПЕРЕКОДИРОВКИ.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF S_LOW /W > S_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ СЕКУНД/
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF S_HIGH /W > S_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ СЕКУНД
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП..
CLRF LSMH /ОБНУЛЕНИЕ МЛ. РЕГ. ПП..
RETURN 9
; ОБНУЛЕНИЕ.
Ml CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
CLRF S_LOW /ОБНУЛЕНИЕ ЕДИНИЦ СЕКУНД.
CLRF S_HIGH /ОБНУЛЕНИЕ ДЕСЯТКОВ СЕКУНД.
/ +1 В РЕГИСТР МИНУТ.
М1М MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1
INCF MIN1,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /MINI >W.
/ ПЕРЕКОДИРОВКА 2_2-10 И ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ
M1U
MOVWF DSMH CALL BINDECH MOVFW LSMH MOVWF M_LOW MOVFW HSMH MOVWF M_HIGH CLRF HSMH CLRF LSMH RETURN / ОБНУЛЕНИЕ. Hl CLRF MINI CLRF M_LOW CLRF M_HIGH / +1 В РЕГИСТР ЧАСОВ. ,-W >DSMH. /ПЕРЕХОД В ПП. ПЕРЕКОДИРОВКИ. /LSMH >W ВРЕМЕННЫЙ. ,-W > M_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ. /HSMH >W ВРЕМЕННЫЙ. /W > M_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ. /ОБНУЛЕНИЕ СТ. РЕГ. ПП.. /ОБНУЛЕНИЕ МЛ. РЕГ. ПП.. 9 /ОБНУЛЯЕМ РЕГИСТР МИНУТ. /ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ. /ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
Часы с тремя будильниками
Н1Н MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
BTFSC FLAG,5 /ЕСЛИ ГАШЕНИЕ НЕ НАЧАЛОСЬ,
GOTO H1FK /ПРОПУСКАЕМ, ИНАЧЕ ИДЕМ СРАВНИВАТЬ'ОКОНЧАНИЕ ;ГАШЕНИЯ.
MOVFW HOU1 /СРАВНИВАЕМ НАЧАЛО ГАШЕНИЯ.
SUBWF GACHH,0 /ЕСЛИ ГАШЕНИЕ НАЧАЛОСЬ,
BZ H1F /ИДЕМ УСТАНАВЛИВАТЬ ФЛАГ ГАШЕНИЯ,
GOTO H1H1 . /ИНАЧЕ ИДЕМ УВЕЛИЧИВАТЬ ЧАСЫ.
H1FK MOVFW • HOU1 /СРАВНИВАЕМ РЕГИСТР ЧАСОВ С
SUBWF GACHM,0 /РЕГИСТРОМ ОКОНЧАНИЯ ГАШЕНИЯ. 7
BZ Hl FOO /ЕСЛИ ОНИ РАВНЫ, ИДЕМ СБРАСЫВАТЬ ФЛАГИ,
GOTO H1H1 /ИНАЧЕ ИДЕМ УВЕЛИЧИВАТЬ ЧАСЫ.
H1FOO BCF FLAG,5 /СБРАСЫВАЕМ ФЛАГИ ГАШЕНИЯ
BCF FLAG,4
GOTO H1H1 /И ИДЕМ УВЕЛИЧИВАТЬ ЧАСЫ.
H1F BSF FLAG,5 . /УСТАНАВЛИВАЕМ ФЛАГ НАЧАЛА ГАШЕНИЯ.
Н1Н1 MOVFW HOU1 ,-HOU >W.
ПЕРЕКОДИРОВКА 2_2-10 И
ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
H1U
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП..
MOVFW LSMH ;LSMH >W ВРЕМЕННЫЙ.
MOVWF H_LOW /W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF H_HIGH /W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП..
CLRF LSMH /ОБНУЛЕНИЕ МЛ. РЕГ. ПП..
RETURN 9
H10 .
CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF H LOW /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF HJHIGH /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
BSF FLAG,1 /УСТАНОВКА БИТА ОТСЧЕТА 30 СЕК.
; +1 В РЕГИСТР ДНЕЙ НЕДЕЛИ.
DI
INCF DAY1,F /+1 К ДНЯМ НЕДЕЛИ.
DIN —
MOVFW DAY1 ;РЕЗУЛЬТАТ ВЫСВЕЧИВАЕМ.
DO
MOVWF S_HIGH /ВО 2 РАЗРЯДЕ.
27
Устройства с цифровой индикацией
SUBLW B'000010001 ;СРАВНИМ HE БОЛЕЕ 7?
BZ DAY /ЕСЛИ РАВНО, ИДЕМ УСТАНАВЛИВАТЬ В 1, /ЕСЛИ НЕТ - ПРОПУСКАЕМ.
RETURN Г
DAY MOVLW 01H /УСТАНОВКА В 1
MOVWF DAY1 /ДНЕЙ НЕДЕЛИ (0- ДНЯ НЕТ).
CALL DO /НА ИНДИКАЦИЮ.
GOTO ATTGO 1
; 19. ВВЕДЕНИЕ КОРРЕКЦИИ CO ЗНАКОМ.
CORN BTFSS CORNEG,0 /ПРОПУСТИТЬ, ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ (=1)
GOTO CORN1 /ИНАЧЕ ИДЕМ УВЕЛИЧИВАТЬ ЗНАЧЕНИЕ СЕКУНД.
MOVFW COR /ЗАГРУЖАЕМ УСТАНОВОЧНЫЙ РЕГИСТР КОРРЕКЦИИ
MOVWF NEGCOR /ПЕРЕПИСЫВАЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
NEGF NEGCOR,0 /ИЗМЕНИМ ЗНАК ЧИСЛА И ПРИБАВИМ
ADDWF SEC1,1 /К СЕКУНДАМ.
BCF FLAG,1 /СБРОСИМ ФЛАГ 30 СЕК.
CLRF GAU /СБРОСИМ СЧЕТЧИК 30 СЕК.
CALL SIU /ВЫСВЕТИМ НОВОЕ ЗНАЧЕНИЕ.
GOTO ATTGO
CORN1 MOVFW COR /ПРИБАВИМ ПОЛОЖИТЕЛЬНУЮ КОРРЕКЦИЮ
ADDWF SEC1,1 /К СЕКУНДАМ.
CALL SIU /ВЫСВЕТИМ НОВОЕ ЗНАЧЕНИЕ.
BCF FLAG,1 /СБРОСИМ ФЛАГ 30 СЕК.
GOTO ATTGO
END
Часы с будильником — шахматные часы
В настоящее время в продаже имеется множество электронных часов с раз-
личными функциями. Однако шахматных часов в продаже нет, поэтому шах-
матисты вынуждены пользоваться механическими конструкциями советских
времен. Эта разработка должна восполнить имеющийся пробел.
Шахматные часы сделаны на основе часов с будильником [3] и имеют 8 раз-
рядов индикации (2 х 4) на светодиодах с общим катодом. В режиме часов све-
тятся четыре правых разряда, а в режимах установки и шахмат светятся все во-
семь разрядов.
Значения времени игры можно записать в энергонезависимую память и
считывать необходимое значение перед началом игры. Предусмотрена раздель-
ная установка значений правых и левых часов в режиме шахмат (в дальнейшем
для упрощения будем писать: правых и левых шахмат). Часы можно использо-
вать также как таймер с двойным отсчетом, то есть сначала использовать время
правых часов, а затем левых.
Часы обладают следующими возможностями:
• работа в режиме часов с индикацией часов и минут в правых четырех раз-
рядах;
28
Часы с будильником — шахматные часы
• работа в режиме часов с будильником;
• ручная установка часов по сигналам точного времени;
• есть резервное питание;
• выход включения звонка, который можно также использовать для вклю-
чения мощной нагрузки;
• работа в режиме шахмат с восьмиразрядной индикацией;
• общая установка правых и левых шахмат до значения 129 минут;
• раздельная установка правых и левых шахмат (для дачи «форы»);
• запись во Flash-память 64 значений времени игры;
• выборка из памяти любого записанного значения времени игры;
• звуковая сигнализация окончания времени игры.
Часы запрограммированы на микроконтроллере PIC16F84A, имеющем не-
большой размер, малое энергопотребление и хорошие функциональные воз-
можности. Программу не трудно перевести на однократно программируемые
микроконтроллеры (ОТР), которые имеют прерывания по переполнению тай-
мера (TMR0) и входу. Алгоритм работы программы показан на рис. 7.
После инициализации программы включается предделитель с коэффици-
ентом деления 32 и таймер с коэффициентом деления 256. Таким образом,
общий коэффициент деления (с учетом машинного цикла, равного четы-
рем) равен 32 х 256 х 4 = 32768. То есть таймер будет переполняться через
интервал времени в одну секунду. По переполнению таймера происходит
прерывание работы программы. Все определения нажатых кнопок установки^
и работы происходят во время прерывания. После окончания прерывания
включается индикация. Индикация установок перегружена условиями на
выбор разряда мигания и установкой запятой, поэтому 8 разрядов светодио-
дов светятся с мерцанием (частота около 30 Гц). В режиме часов работает
4 разряда светодиодов, частота индикации увеличивается до 40 Гц и мерца-
ния не наблюдается. Чтобы избежать мерцания светодиодов при индикации
в режиме работы шахмат, существует еще одна программа индикаций без
дополнительных условий переходов.
Все программы установок заканчиваются восстановлением значений реги-
стров после прерывания. Эти связи в алгоритме работы программы не показа-
ны. Кроме того, не показано, что все установки и включения происходят после
нажатия кнопки «Установка». В режиме индикации нажатия кнопки «Установ-
ка» не требуется, а индикация появляется после выбора соответствующего ре-
жима и разряда.
На рис. 8 приведена принципиальная схема часов. Выводы микроконт-
роллера DD2 RBO—RB6 используются для включения сегментов светодио-
дов. Во время прерывания выводы RBO—RB3 используются как входы для
опроса состояния кнопок установки. Вывод RB7 используется как вход с
прерыванием для постоянного считывания кнопки запуска правых или ле-
вых часов. На выводах RAO—RA3 появляется двоично-десятичный код като-
дов светодиодов. Этот код преобразуется в позиционный код микросхемой
DD1 дешифратора К555ИД7. Вывод RA3 используется для индикации запя-
той. На выводе RA4 прявляется уровень логического ноля для срабатывания
звукового сигнала. Этот вывод можно применить для включения сильноточ-
ной нагрузки по сигналу будильника, естественно, используя соответствую-
29
Устройства с цифровой индикацией
V_________________V______________V ______________ч
О.Обнулеше шахмат 1,Уст. минут будильшка 2.Ивдикашя будильняса З.Уст. часов будильняса 4. Работ а с вкл. будильн При любом разряде работа в режиме часов О.Уст. минут трав, шах 1,Уст. минут лев. шах 2.Уст. адреса зашей З.Зашеь в ПЗУ 4.Уст. адр. считывали 5.Считывание зашей 6.Инцисашя шахмат 7.Уст. мнут шах общ, 8.Включение шахмат О.Обнуление мин. сек. 1-Устанэвка минут 2. Оби. счет, считывания З.Установка часов 4.Обн счетчика зашей
Рис. 7. Алгоритм программы шахматных часов
щую схему включения с самоблокировкой. Используемый звуковой излуча-
тель типа НСМ1206х имеет встроенный генератор с частотой около 2 кГц.
Поэтому управление его включением упрощается до подачи напряжения на
выводы излучателя.
Светодиоды HL1, HL2 индицируют переключение правых-левых шахмат и
устанавливаются возле соответствующих групп цифровых светодиодов.
30
Часы с будильником — шахматные часы
НСМ1206х
DD1
К555ВД7
HG1
+4,5 В
KBbIB16DDl *
KBUB8DD1
-,4,5 В
ZQ1 32768 Гц
Рис. 8. Шахматные часы
Назначение кнопок управления:
SA1 — «Старт-стоп» — кнопка пуска и останова работы шахмат;
SA2 — «Режим» — кнопка выбора режима работы;
SA3 — «Разряд» — кнопка выбора разряда установки;
SA4 — «Установка» — кнопка установки выбранного значения;
SA5 — «R-L» — кнопка переключения правых-левых шахмат.
Выбор режима установки индицируется запятой в правых четырех разрядах.
Выбор разряда индицируется миганием соответствующего разряда с частотой
2...3 Гц. При нажатии кнопок сегменты, к выходам которых подключены кноп-
ки, горят с меньшей яркостью.
Выполняемые часами функции при выборе режима и разряда показаны в
нижней части рис. 8. После включения питания устанавливается индикация
правых разрядов с режимом «О» и разрядом «1». Это, согласно алгоритму, соот-
ветствует установке минут часов. Для перевода часов в режим восьмиразрядной
индикации необходимо переключить запятую на первый разряд или при запя-
той в нулевом разряде выбрать мигающим второй (четвертый) разряд.
Если поставить запятую во второй разряд, индикация переключится на че-
тыре разряда в режим часов при любом значении мигающего разряда. При вы-
бранном режиме работы в третьем разряде происходит работа и установка бу-
дильника. Звуковой сигнал, сработавший в режиме будильника, отключается
переведением запятой (кнопкой «Режим») в нулевой разряд. При этом вклю-
чатся восемь разрядов установки, но дальнейшее переведение запятой до вто-
31
Устройства с цифровой индикацией
рого разряда приводит к включению четырех разрядов режима часов. На следу-
ющий день будильник сработает в то же время, если выбирать режим работы ча-
сов с будильником.
. В режиме первого разряда часы индицируют все, что касается шахмат. Если
произведена раздельная установка правых и левых шахмат, то переходить в ре-
жим включения шахмат необходимо, не отпуская кнопку разряда. Режим вклю-
чения шахмат произойдет при выводе мигающего разряда за пределы индика-
ции в восьмой фиктивный разряд. Для перехода работы от установки к шахма-
там необходимо нажать кнопку «Установка». На табло появятся выбранные
значения минут и запятые во всех разрядах. Запятые свидетельствуют о том, что
часы готовы к пуску режима шахмат. При нажатии кнопки «Старт-стоп» на од-
ну секунду, запятые исчезнут, а часы пойдут в режиме вычитания. Периодич-
ность появления Запятых при длительном удержании кнопки — 2 секунды. Да-
лее, нажимая кнопку «R-L», переключают работу часов. На следующую секунду
после появления нолей на каких-либо часах шахмат включится звуковая сигна-
лизация. Звуковой сигнал выключится после нажатия кнопки «Старт-стоп». Да-
лее нажимают кнопку «Установка» и схема переходит в режим работы часов.
Следующий цикл режима шахмат можно повторить после установки значений
часов шахмат. Если часы используются в режиме таймера, то после выключения
звукового сигнала необходимо нажать кнопку «R-L» и снова запустить режим
шахматы.
Индикация на табло при выбранном первом режиме установки:
Разряд: 0 — минуты правых шахмат _ 00 _ _ 30;
1 — минуты левых шахмат 25 30;
2 — адрес записи __01 __30;
3 — запись в ПЗУ __01 __30;
4 — адрес считывания __00__01;
5 — считывание 30 01;
6 — индикация 25 00 30 00;
7 — установка 01 00 01 00;
8 — включение шахмат 01 00 01 00.
В режиме записи в память необходимо нажать кнопку «Установка» и удер-
живать ее не менее одной секунды. Результат записи желательно сразу прове-
рить и записать на бумаге. В память записывается значение правых шахмат.
А при выборке записанное значение переписывается в правые и левые шахма-
ты (общая установка). При установке шахмат более 9 на индикации в разряде
десятков будут светиться:
• нижняя черта (сегмент d) соответствует значению 10,
• нижняя и средняя черта (d, g) соответствует значению 11,
• нижняя„ средняя и верхняя черта (a, d, g) соответствует значению 12.
Можно изменить значения сегментов в программе до максимально возмож-
ного числа 15. Тогда будет максимальная установка до 159 минут.
Кнопку SA5 можно заменить более привычными для шахматистов двумя
кнопками с зависимым включением типа П2К.
На рис. 9 и 10 показаны печатная плата и расположение элементов часов.
Если вы будете использовать шахматные часы в «стационарных» условиях,
32
Часы с будильником — шахматные часы
можно поставить индикаторы большего размера, чем типа АЛСЗЗЗА. В этом
случае яркость свечения нужно подобрать уменьшением номиналов резисторов
Rl—R8. Полностью убирать резисторы нельзя, поскольку максимальная на-
грузка на порт (не на вывод!) не должна превышать 50 мА. Печатная плата для
четырех светодиодов с общим катодом показана на рис. 11.
Рис. 9. Шахматные часы. Печатная плата
GB1
SA4 SA2 HL1 SA5 G F Е -4,5 В
ЗАЗ SAI HL2
Рис. 10. Шахматные часы. Расположение элементов на плате
Рис. 11. Печатная плата линейки светодиодов с общим катодом
2 Зак. 241S
33
Устройства с цифровой индикацией
Корпус часов склеен из пластмассы и имеет габариты 70 х 65 х 40. Размер
корпуса определен примененной батареей типа 3R12 (плоская). Часы сделаны
переносными для возможности игры на скамейке или в дороге. При этом но-
миналы резисторов Rl—R8 необходимо увеличить до 560 Ом. Такие часы в ре-
жиме шахмат потребляют ток 23 мА, что хорошо согласуется с емкостью бата-
реи. В режиме резервного питания часы потребляют ток 0,15 мА, поэтому для
него можно применить миниатюрные дисковые элементы. При срабатывании
будильника в режиме резервного питания потребляемый ток увеличивается до
4,5 мА. Поэтому желательно быстрее отключить сигнал. Поскольку индикации
в этом режиме нет, отключить сигнал можно кратковременным нажатием
кнопки «Режим».
; ЧАСЫ-ТАЙМЕР-ШАХМАТНЫЕ ЧАСЫ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ ЕДИНИЧНОГО ИЗГОТОВЛЕНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = SHAHMATU.ASM
; ДАТА ИЗМЕНЕНИЯ: 15-08-02. ,
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: ' 5.61 ..00 .
♦INCLUDE P16F84A.INC
CONFIG 3FF0H
; ИСПОЛЬЗУЕТСЯ ЧАСОВОЙ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 32, ЧТО ВМЕСТЕ
; С TMR0 (256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ,
; ДАЕТ НА ВЫХОДЕ ТАЙМЕРА 1 СЕКУНДУ (4x32x256=32768).
; РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ.
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H /OPTION (RP0=l) .
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
EEDATA EQU 08H /ДАННЫХ ПЗУ.
EEADR EQU 09H /АДРЕСА ПЗУ.
EECON1 EQU 88H /РЕГИСТРЫ ЧТЕНИЯ-ЗАПИСИ.
EECON2 EQU 89H /ПЗУ.
INTCON ' EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
34
Часы с будильником — шахматные часы
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
M_LOW EQU 010H ;ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ
M_HIGH EQU 011H ;ДЕСЯТКИ МИНУТ ИНДИКАЦИИ
H_LOW EQU 012H /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ
H_HIGH EQU 013H /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ
SLO1 EQU 014H ;ЕДИНИЦЫ СЕКУНД 1 ЧАСОВ.
SHI1 EQU 015H ;ДЕСЯТКИ СЕКУНД 1 ЧАСОВ.
MLO1 EQU 016H ;ЕДИНИЦЫ МИНУТ 1 ЧАСОВ.
MHI1 EQU 017H ;ДЕСЯТКИ МИНУТ 1 ЧАСОВ.
SLO EQU 018H ;ЕДИНИЦЫ СЕКУНД 2 ЧАСОВ.
SHI EQU 019H ;ДЕСЯТКИ СЕКУНД 2 ЧАСОВ.
MLO EQU 01 AH ;ЕДИНИЦЫ МИНУТ 2 ЧАСОВ.
MH I EQU 01BH ;ДЕСЯТКИ МИНУТ 2 ЧАСОВ.
; РЕГИСТРЫ ДЛЯ ОРГАНИЗАЦИИ ИНДИКАЦИИ.
; с : KATOD EQU 01CH /КАТОД, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ(0-7).
АТТ EQU 01DH /ПРИЗНАК (АТРИБУТ) УСТАНОВКИ (РЕЖИМ)
COUF EQU 01EH /СЧЕТЧИК ФЛАГА.
SEGD EQU 01FH /СЕГМЕНТЫ.
CAT EQU 020H /УСТАНОВКА РАЗРЯДА МИГАНИЯ.
COUI EQU 021H /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
/ СЧЕТЧИКИ ЗАПИСИ [, СЧИТЫВАНИЯ ППЗУ.
COUEE EQU 022Н /ЗАПИСИ В ПЗУ.
ACOU EQU 023Н /СЧИТЫВАНИЯ ИЗ ПЗУ.
/ ВРЕМЕННЫЕ , Для ХРАНЕНИЯ ПРИ ПРЕРЫВАНИИ И УСТАНОВКЕ
W_TEMP EQU 024H ; БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 025H ; :БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS'ПРИ ПРЕРЫВАНИИ
FSR_TEMP EQU 029H ; :ВРЕМЕННЫЙ ДЛЯ FSR.
DSMH EQU 026H ; /БАЙТ АДРЕСАЦИИ В ПП.
LSMH EQU 027H ; /МЛАДШИЙ БАЙТ В ПОДПРОГРАММЕ.
HSMH EQU 028H ; /СТАРШИЙ БАЙТ В ПП.
SECUM EQU 029H ; /РЕГИСТР СЕКУНД В ПП.
MINUM EQU 02 AH ; /РЕГИСТР МИНУТ В ПП.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ ЧАСОВ.
SEC1 EQU 02BH , /СЕКУНДЫ СЧЕТЧИКА ЧАСОВ.
MINI EQU 02CH , ;МИНУТЫ СЧЕТЧИКА ЧАСОВ.
HOU1 EQU 02DH , /ЧАСЫ СЧЕТЧИКА ЧАСОВ.
SECM EQU 02EH , /СЕКУНДЫ 1 ШАХ.
SECMI EQU 02FH* , /СЕКУНДЫ 2 ШАХ.
MINM EQU ОЗОН , /МИНУТЫ 1 ШАХ.
MINM1 EQU 031H , /МИНУТЫ 2 ШАХ.
35
Устройства с цифровой индикацией
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG.
FLAG EQU 032Н
; 0-> ВКЛЮЧЕНИЕ ЗВОНКА.
; 1-> ПЕРЕКЛЮЧЕНИЕ ШАХМАТНЫХ ЧАСОВ.
; 2-> ОРГАНИЗАЦИЯ ГАШЕНИЯ ВО ВРЕМЯ УСТАНОВКИ.
; 3-> ПЕРЕКЛЮЧЕНИЕ: ЧАСЫ-ШАХМАТЫ.
; 4-> ЗАПЯТОЙ.
; 5-> СТАРТ-СТОП.
; 6-> ФЛАГ УСТАНОВКИ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ БУДИЛЬНИКА.
ALAM EQU ОЗЗН /МИНУТЫ БУДИЛЬНИКА.
ALAH EQU 034Н /ЧАСЫ БУДИЛЬНИКА.
/ ПУСК
ORG О
GOTO INIT
ORG 4
GOTO COUNT
/ ИНИЦИАЛИЗАЦИЯ
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000100' ;ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100,
MOVWF OPTION_REGA80H /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ.
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА
MOVWF INTCON
MOVLW B'00000000' ; RA0-RA4 НА ВЫХОД.
MOVWF TRISAA80H
MOVLW B'10001111' / RB0-RB3, RB7 НА ВХОД, RB4-RB6-BbIXOfl
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF SECM
CLRF MINM
CLRF SECMI
CLRF MINM1
CLRT M LOW
CLRF M HIGH
CLRF H_LOW
CLRF H HIGH
CLRF SLO
CLRF SHI
CLRF MLO
36
Часы с будильником — шахматные часы
CLRF MH I
CLRF SLO1
CLRF SHI1
CLRF MLO1
CLRF MHI1
CLRF HSMH
CLRF LSMH
CLRF ATT
CLRF COUI
CLRF COUF
CLRF ACOU
CLRF COUEE
CLRF ALAM
CLRF ALAH
MOVLW .1 /УСТАНАВЛИВАЕМ НОМЕР
MOVWF CAT /МИГАЮЩЕГО РАЗРЯДА.
; 1. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ И СОСТОЯНИЯ ФЛАГОВ.
KEY
BTFSS PORTB,0 ; ПУСК-СТОП.
CALL KEYC ;НА УСТАНОВКУ-СБРОС ФЛАГА ПУСКА.
BTFSC FLAG,5 ;ЧАСЫ-ШАХМАТЫ.
GOTO KEYSH ;НА ВКЛЮЧЕНИЕ ИНДИКАЦИИ ШАХМАТ.
KEYF BTFSS PORTB,1 /ЕСЛИ РЕЖИМ ВКЛЮЧЕН,
GOTO ATTK /ИДЕМ МЕНЯТЬ ЗНАЧЕНИЕ.
GOTO CATK /ИНАЧЕ ИДЕМ СРАВНИВАТЬ РАЗРЯД УСТАНОВКИ
KEYSH CALL SI /ЧАСЫ НЕ ОСТАНАВЛИВАЮТСЯ.
GOTO SHARL /НА ИНДИКАЦИЮ ШАХМАТ.
KEYC INCF COUF,1 /СЧЕТЧИК ФЛАГА ПУСКА.
BTFSC. COUF,0 /НЕЧЕТНОЕ ЗНАЧЕНИЕ СЧЕТЧИКА
BSF FLAG,5 /ВКЛЮЧАЕТ ФЛАГ ПУСКА.
BTFSS COUF,0 /ЧЕТНОЕ ЗНАЧЕНИЕ СЧЕТЧИКА
BCF FLAG,5 /ВЫКЛЮЧАЕТ ФЛАГ ПУСКА.
BCF FLAG', 0 /ОБНУЛЕНИЕ ФЛАГА ЗВОНКА.
BCF RETURN FLAG,6 /СБРОС ФЛАГА УСТАНОВКИ. f
; 2. ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАЮЩЕГО РАЗРЯДА).
САТК
CALL SI /ЧАСЫ HE ОСТАНАВЛИВАЮТСЯ: ПРИБАВИМ СЕКУНДУ
BTFSC PORTB,2 /ЕСЛИ НЕ ВКЛЮЧЕН ВЫБОР РАЗРЯДА,
GOTO ATTKU /ИДЕМ ВЫБИРАТЬ РЕЖИМ,
INCF CAT, 1 /ИНАЧЕ +1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА.
MOVFW CAT /8 РАЗРЯД ФИКТИВНЫЙ, ЧТОБЫ УБРАТЬ МИГАНИЕ
/С ИНДИКАТОРА.
SUBLW .9 /НЕ БОЛЕЕ 9,
BZ CATKO’ /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
37
Устройства с цифровой индикацией
; ОТ НОМЕРА ВЫБРАННОГО РАЗРЯДА ЗАВИСИТ НАПРАВЛЕНИЕ.
ATTKU MOVFW ADDWF ATT PC, 1 ;КУДА ПОЙТИ ПРИ ;УСТАНОВКЕ:
GOTO CATUH ;ЧАСЫ-МИНУТЫ.
GOTO CATSH ;ШАХМАТЫ,
GOTO CATB ;РАБОТА ЧАСОВ.
САТКО GOTO CATAL /БУДИЛЬНИК,
CLRF CAT ;ОБНУЛЕНИЕ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ
/ 3. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
SEGDATA w 04 cn Co ГО
ADDWF PCL, F / G, F, E, D, С, B, A.
RETLW B' 10111111' / o
RETLW B'10000110' . / 1
RETLW B' 11011011' / 2
RETLW B' 11001111' / 3
RETLW B'11100110 ' / 4
RETLW B' 11101101’ / 5
RETLW B' 11111101' / 6
RETLW B' 10000111' / 7
RETLW B' 11111111' / 8
RETLW B'11101111' / 9
RETLW B' 10001000' / 10 НИЖНЯЯ ЧЕРТА.
4 RETLW B'11001000' /11 НИЖНЯЯ И СРЕДНЯЯ ЧЕРТА.
RETLW B’ 11001001' /12 НИЖНЯЯ, СРЕДНЯЯ И ВЕРХНЯЯ ЧЕРТА.
/ 4. КУДА ПОЙТИ = МУЛЬТИПЛЕКСОР.
CATUH
MOVFW CAT КУДА ПОЙТИ? АТТ=0
ADDWF PC, 1 ЗАВИСИТ ОТ НОМЕРА CAT.
GOTO ATTOO ОБНУЛЕНИЕ ЧАСОВ.
GOTO MINIM УСТАНОВКА МИНУТ ЧАСОВ.
GOTO ACOUOO ОБНУЛЕНИЕ СЧЕТЧИКА СЧИТЫВАНИЯ.
GOTO HOU1H УСТАНОВКА ЧАСОВ.
GOTO COUEEOO ОБНУЛЕНИЕ СЧЕТЧИКА ЗАПИСИ.
GOTO ATTGO ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
CATSH
MOVFW CAT КУДА ПОЙТИ? АТТ=1
ADDWF PC,.l ЗАВИСИТ ОТ НОМЕРА CAT.
GOTO SHUR УСТАНОВКА МИНУТ ПРАВЫХ ШАХМАТ.
GOTO SHUL УСТАНОВКА МИНУТ ЛЕВЫХ ШАХМАТ.
GOTO COUEEU УСТАНОВКА И ИНДИКАЦИЯ АДРЕСА ЗАПИСИ
GOTO ZAPISE ЗАПИСЬ В ПЗУ.
GOTO COUUI УСТАНОВКА И ИНДИКАЦИЯ АДРЕСА СЧИТЫВАНИЯ
GOTO АКТ СЧИТЫВАНИЕ ЗАПИСИ.
38
Часы с будильником — шахматные часы
GOTO GOTO GOTO SHURLIN ; SHURL ; SH H ; 'ИНДИКАЦИЯ ШАХМАТ, ОБЩАЯ. УСТАНОВКА МИНУТ ШАХМАТ, ОБЩАЯ. ВКЛЮЧЕНИЕ ШАХМАТ.
САТВ
MOVFW CAT ; КУДА ПОЙТИ? ПРИ УСТАНОВКЕ АТТ=2
ADDWF PC, 1 ; ЗАВИСИТ ОТ НОМЕРА CAT.
GOTO ATTK5 • ; РАБОТА: ЧАСЫ.
GOTO ATTK5 ; РАБОТА: ЧАСЫ.
GOTO ATTK5 ; г РАБОТА: ЧАСЫ.
GOTO ATTK5 ; РАБОТА: ЧАСЫ.
GOTO ATTK5 ; •РАБОТА: ЧАСЫ.
GOTO ATTK5 ; :РАБОТА: ЧАСЫ.
GOTO ATTK5 ; г РАБОТА: ЧАСЫ.
GOTO ATTK5 ; :РАБОТА: ЧАСЫ.
GOTO ATTK5 ; :РАБОТА: ЧАСЫ.
CATAL
MOVFW CAT ; :КУДА ПОЙТИ? АТТ=3
ADDWF PC, 1 ; ;ЗАВИСИТ ОТ НОМЕРА CAT.
GOTO SHOO ; :ОБНУЛЕНИЕ ШАХМАТ.
GOTO ALOM ; :УСТАНОВКА И ИНДИКАЦИЯ МИНУТ БУДИЛЬНИКА.
GOTO ALOIN. ; :ИНДИКАЦИЯ БУДИЛЬНИКА.
GOTO ALOH i :УСТАНОВКА И ИНДИКАЦИЯ ЧАСОВ БУДИЛЬНИКА.
GOTO OMON ; :РАБОТА ЧАСОВ С БУДИЛЬНИКОМ.
GOTO ATTGO ; :ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO ; :ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO :ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
GOTO ATTGO :ЗАВЕ РШЕНИЕ ПРЕ РЫВАНИЯ.
; 5. ВЫБОР РЕЖИМА УСТАНОВКИ.
АТТК :ВО ВРЕМЯ УСТАНОВКИ ЧАСЫ НЕ ОСТАНАВЛИВАЮТСЯ,
CALL SI :ПРИ ПЕРЕХОДЕ В МИНУТЫ ПРОПУСК УСТАНОВКИ 1 СЕК
INCF ATT,F ;УВЕЛИЧИВАЕМ ЧИСЛО АТРИБУТА.
MOVFW ATT
SUBLW .4 :ИНДИКАЦИЯ РАЗРЕШЕНА ДО 4 ЦИФРЫ (0-3) .
BNZ ATTGO ;ЕСЛИ НЕ РАВНО НУЛЮ, ИДЁМ.
CLRF ATT ;ИНАЧЕ ОБНУЛЯЕМ АТРИБУТ.
GOTO ATTGO . ;ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; 6. ОБНУЛЕНИЕ.
ACOUOO
BTFSC PORTB,3 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ?
GOTO COUUIN /НЕТ - НА ИНДИКАЦИЮ.
CLRF ACOU /ОБНУЛЕНИЕ СЧЕТЧИКА СЧИТЫВАНИЯ.
GOTO COUUIN /НА ИНДИКАЦИЮ.
COUEEOO
BCF FLAG,0 /СБРОС ФЛАГА ЗВОНКА.
BTFSC PORTB,3 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ?
GOTO CO_IN /НЕТ - НА ИНДИКАЦИЮ.
CLRF COUEE /ОБНУЛЕНИЕ СЧЕТЧИКА ЗАПИСИ. (
GOTO CO IN /НА ИНДИКАЦИЮ.
SHOO
BTFSC PORTB,3 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ?
GOTO ATTGO /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
39
Устройства с цифровой индикацией
CLRF CLRF SECM SECMI ';ОБНУЛЯЕМ ;/
CLRF MINM ;/
CLRF MINM1 /РЕГИСТРЫ ШАХМАТ.
GOTO SHURLIN /НА ИНДИКАЦИЮ.
ATTOO
BTFSC PORTB,3 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ.
GOTO ATTK5 / НЕТ.
CLRF SEC1 /ДА, ОБНУЛЯЕМ ДЛЯ УСТАНОВКИ ЧАСОВ
CLRF MINI /ПО СИГНАЛАМ ТОЧНОГО ВРЕМЕНИ
CALL , HIN /И ВЫСВЕЧИВАЕМ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
;,7. УСТАНОВКА И СРАВНЕНИЕ БУДИЛЬНИКА.
ALOM
BTFSC PORTB,3 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ.
GOTO ALOIN /НА ИНДИКАЦИЮ.
INCF ALAM, 1 /+1 В МИНУТЫ БУДИЛЬНИКА.
MOVLW .60 /НЕ БОЛЕЕ 59.
SUBWF ALAM, 0 9
BTFSC STATUS,2
CALL ALOOM /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
MOVFW ALAM
CALL M1U /СМЕНА ЗНАЧЕНИЙ РЕГИСТРОВ ИНДИКАЦИИ.
GOTO ATTGO ;ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
ALOH
BCF STATUS,2 /НА ВСЯКИЙ СЛУЧАЙ.
BTFSC PORTB,3 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ.
GOTO ALOIN /НА ИНДИКАЦИЮ.
INCF ALAH,1 /+1 В ЧАСЫ БУДИЛЬНИКА.
MOVLW .24 /НЕ БОЛЕЕ 23.
SUBWF ALAH,0 9
BTFSC STATUS,2
CALL ALOOH /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
MOVFW ALAH
CALL H1U /СМЕНА ЗНАЧЕНИЙ РЕГИСТРОВ ИНДИКАЦИИ. •
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
ALOOM
CLRF ALAM /ОБНУЛЕНИЕ РЕГИСТРА МИНУТ.
RETURN 9
ALOOH
CLRF ALAH /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
RETURN 9
OMON
MOVFW HOU1 /СРАВНЕНИЕ ЗНАЧЕНИЯ РЕГИСТРА ЧАСОВ
SUBWF ALAH,0 /И РЕГИСТРА ЧАСОВ БУДИЛЬНИКА.
BZ AMON /ЕСЛИ ОНИ РАВНЫ, ИДЕМ СРАВНИВАТЬ МИНУТЫ.
GOTO ATTK5 /ИНАЧЕ ИДЕМ НА ИНДИКАЦИЮ В РЕЖИМЕ ЧАСОВ.
AMON
MOVFW MINI /СРАВНЕНИЕ ЗНАЧЕНИЯ РЕГИСТРА МИНУТ ЧАСОВ
SUBWF ALAM,0 /И РЕГИСТРА МИНУТ БУДИЛЬНИКА.
40
Часы с будильником — шахматные часы
BZ MONA /ЕСЛИ ОНИ РАВНЫ, ИДЕМ УСТАНАВЛИВАТЬ ФЛАГ ЗВОНКА
BCF FLAG,0 ;ИНАЧЕ СБРОСИМ ФЛАГ ЗВОНКА.
GOTO ATTK5 /ИДЕМ НА ИНДИКАЦИЮ В РЕЖИМЕ ЧАСОВ.
MONA BSF FLAG,0 /УСТАНОВИМ ФЛАГ ЗВОНКА.
GOTO ATTK5 /НА ИНДИКАЦИЮ В РЕЖИМЕ ЧАСОВ.
ALOIN
MOVFW ALAM /ИНДИКАЦИЯ ЗНАЧЕНИЙ
CALL M1U /МИНУТ БУДИЛЬНИКА
MOVFW ALAH /И ЧАСОВ БУДИЛЬНИКА.
CALL H1U /
GOTO ATTGO f
/ 8. ’ УСТАНОВКА ЧАСОВ.
MINIM BTFSC PORTB,3 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ.
GOTO ATTGO /НЕТ. ' '
CALL M1M /+1 В РЕГИСТР МИНУТ.
CALL HIH /НА ИНДИКАЦИЮ ЧАСОВ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
HOU1H BTFSC PORTB,3 /АНАЛОГИЧНО ДЛЯ ЧАСОВ.
GOTO ATTGO
CALL HIH /+1 В РЕГИСТР ЧАСОВ.
CALL HIN /НА ИНДИКАЦИЮ МИНУТ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; 9. СМЕНА ИНДИКАЦИИ ПРИ СМЕНЕ РЕЖИМА.
HIN MOVFW MINI
CALL RETURN M1U /ИНДИКАЦИЯ МИНУТ.
HIH MOVFW HOU1
CALL RETURN H1U /ИНДИКАЦИЯ ЧАСОВ.
ATTK5 BCF FLAG,3 /РАБОТА В РЕЖИМЕ ЧАСОВ. /СБРОС ФЛАГА ВКЛЮЧЕНИЯ ШАХМАТ
BCF FLAG,6 /И ФЛАГА УСТАНОВКИ.
CALL HIN /ОБНОВЛЯЕМ ИНДИКАЦИЮ МИНУТ
CALL HIH /И ЧАСОВ.
GOTO ATTGO ;ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
; 10. ПЕРЕКЛЮЧЕНИЕ: ЧАСЫ-ШАХМАТЫ.
SH н
BTFSC PORTB,3 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
BCF FLAG,6 /СБРОС ФЛАГА УСТАНОВКИ
41
Устройства с цифровой индикацией
,—
BTFSS FLAG,3 /ЕСЛИ ВКЛЮЧЕНЫ ЧАСЫ,
GOTO SH Hl /ПЕРЕКЛЮЧИМ НА ШАХМАТЫ. . я
BCF FLAG,3 ;И НАОБОРОТ, ВКЛЮЧИМ ЧАСЫ.
GOTO ATTK5 /НА ИНДИКАЦИЮ ЧАСОВ.
SH_H1 BSF FLAG,3 /ВКЛЮЧЕНИЕ ШАХМАТ.
/ GOTO SHARIN /НА ИНДИКАЦИЮ ШАХМАТ.
; 11. ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
ATTGO
BTFSC INTCON,2 /ЕСЛИ НЕТ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ ТАЙМЕРА,
GOTO RETCONT /ТО ПРОПУСКАЕМ, ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
9 GOTO COUZIKLO /ИЛИ ИДЕМ НА ИНДИКАЦИЮ.
; 12. УСТАНОВКА ШАХМАТ.
SHURL BTFSC PORTB,3 /ЕСЛИ КНОПКА НЕ НАЖАТА,
GOTO SHURLIN /ИДЕМ НА ИНДИКАЦИЮ.
INCF MINM1,1 /+1 В МИНУТЫ ПРАВЫХ ШАХМАТ.
MOVLW .130 /ДО 129 МИНУТ.
SUBWF MINM1,0
BZ SHURLO /НА ОБНУЛЕНИЕ.
SHURLIN
MOVFW MINM1 /ЗНАЧЕНИЕ ПРАВЫХ ШАХМАТ
MOVWF Minm /В РЕГИСТР ЛЕВЫХ ШАХМАТ.
MOVWF DSMH
CALL BINDECH . /ПЕРЕКОДИРУЕМ В 2-10 КОД
MOVFW LSMH
MOVWF MLO /И ЗАПИШЕМ В РЕГИСТРЫ
MOVWF MLO1 /ИНДИКАЦИИ.
MOVFW HSMH Г
MOVWF MH I 9
MOVWF MHI1
CLRF $LO /СЕКУНДЫ НЕ УСТАНАВЛИВАЮТСЯ,
CLRF SHI /А ОБНУЛЯЮТСЯ.
CLRF SLO1 9
CLRF SHI1 9
CLRF SECM 9
CLRF SECMI 9
CLRF LSMH 9
CLRF HSMH
BSF FLAG,6 ;ФЛАГ УСТАНОВКИ.
GOTO ATTGO Г
SHURLO
CLRF MINM1 /ОБНУЛЕНИЕ ПРАВЫХ
CLRF MINM /И ЛЕВЫХ ШАХМАТ.
GOTO SHURLIN /НА ИНДИКАЦИЮ.
; УСТАНОВКА ПРАВЫХ ШАХМАТ.
42
Часы с будильником — шахматные часы
SHUR
BTFSC PORTB,3 /ЕСЛИ КНОПКА HE НАЖАТА,
GOTO SHURIN /ИДЕМ НА ИНДИКАЦИЮ.
INCF MINM1,1 ;+1
MOVLW .130 9
SUBWF MINM1,0
BZ SHURO • /НА ОБНУЛЕНИЕ.
SHURIN
MOVFW MINM1 /ЗНАЧЕНИЕ ПРАВЫХ ШАХМАТ
MOVWF DSMH
CALL BINDECH /ПЕРЕКОДИРУЕМ В 2-10 КОД.
MOVFW LSMH
MOVWF SLO1 /ЗАПИШЕМ В РЕГИСТРЫ
MOVFW HSMH
MOVWF SHI1 /ИНДИКАЦИИ МЛАДШИХ РАЗРЯДОВ.
MOVLW .10 /- ПРОЧЕРК
MOVWF MLO1 /В СТАРШИХ
MOVWF MHI1 /РАЗРЯДАХ.
CLRF SECM 9
CLRF LSMH 9
CLRF HSMH
BSF FLAG,6 /ФЛАГ УСТАНОВКИ.
GOTO ATTGO 9
SHURO
CLRF MINM1 /ОБНУЛЯЕМ МИНУТЫ ПРАВЫХ ШАХМАТ
GOTO SHURIN /НА ИНДИКАЦИЮ.
; УСТАНОВКА ЛЕВЫХ ШАХМАТ.
SHUL
BTFSC PORTB,3 /АНАЛОГИЧНО
GOTO SHULIN /ДЛЯ ЛЕВЫХ ШАХМАТ
INCF MINM,1 9
MOVLW .130 9
SUBWF MINM,0 9
BZ SHULO 9
SHULIN
MOVFW MINM 9
MOVWF DSMH 9
CALL BINDECH 9
MOVFW LSMH 9
MOVWF MLO 9
MOVFW HSMH 9
MOVWF MH I 9
MOVLW .10 9 “
MOVWF SHI 9
MOVWF SLO t 9
CLRF SECMI 9
CLRF LSMH 9
CLRF HSMH 9
BSF FLAG,6 9
GOTO ATTG& 9
SHULO
CLRF MINM 9
43
Устройства с цифровой индикацией
9 GOTO SHULIN
; 13. РАБОТА В РЕЖИМЕ ШАХМАТ
SHARL BTFSS FLAG,5 /ЕСЛИ "ПУСК" HE ВКЛЮЧЕН,
GOTO SHARIN /ИДЕМ НА ИНДИКАЦИЮ.
BTFSS PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ПРАВЫХ ШАХМАТ (=0)
GOTO SHAR /ИДЕМ НА ПРАВЫЕ ЧАСЫ.
BTFSC PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ЛЕВЫХ ШАХМАТ
GOTO SHAL /ИДЕМ НА ЛЕВЫЕ ЧАСЫ.
SHAR DECF SECM1,1 /-1 ИЗ РЕГИСТРА СЕКУНД ПРАВЫХ ШАХМАТ.
MOVLW .255 ;ЕСЛИ В РЕГИСТРЕ 0, ТО РЕЗУЛЬТАТ =255.
SUBWF SECM1,O
BZ SHARM /НА СРАВНЕНИЕ МИНУТ.
GOTO SHARIN /НА ИНДИКАЦИЮ.
SHARM BCF STATUS,2
TSTF MINM1 /ЕСЛИ В РЕГИСТРЕ 0,
BZ ALARMR /ИДЕМ НА ВКЛЮЧЕНИЕ ЗВОНКА.
MOVLW .59 ;ИНАЧЕ УСТАНОВИМ СЕКУНДЫ =59
MOVWF SECMI
DECF MINM1,1 /И ВЫЧТЕМ 1 ИЗ МИНУТ.
MOVLW .255 /ЕСЛИ В РЕГИСТРЕ 0, ТО РЕЗУЛЬТАТ =255.
SUBWF MINM1,O
BZ SHARMO /НА ОБНУЛЕНИЕ МИНУТ.
GOTO SHARIN /НА ИНДИКАЦИЮ.
SHARMO CLRF MINM1 /ОБНУЛЕНИЕ ПРАВЫХ МИНУТ.
GOTO SHARIN /НА ИНДИКАЦИЮ ПРАВЫХ МИНУТ.
SHAL DECF SECM,1 /ДЛЯ ЛЕВЫХ ШАХМАТ
MOVLW .255 /ВСЕ АНАЛОГИЧНО.
SUBWF SECM,0 9
BZ SHALM г
GOTO SHALIN 9
SHALM BCF STATUS,2 9
TSTF MINM 9
BZ ALARML 9
MOVLW .59 9
MOVWF SECM 9
DECF MINM,1 9
MOVLW .255 9
SUBWF MINM,0 9
BZ SHALMO 9
GOTO SHALIN 9
SHALMO CLRF MINM 9
GOTO SHALIN 9
SHARIN
44
Часы с будильником — шахматные часы
MOVFW SECMI /ИНДИКАЦИЯ ПРАВЫХ ШАХМАТ.
MOVWF DSMH
CALL BINDECH ;НА ПЕРЕКОДИРОВКУ.
MOVFW LSMH
MOVWF SLO1 х /ЗНАЧЕНИЕ В МЛАДШИЙ РЕГИСТР СЕКУНД
MOVFW ..HSMH
MOVWF SHI1 . /ЗНАЧЕНИЕ В СТАРШИЙ РЕГИСТР СЕКУНД
CLRF LSMH 9
CLRF HSMH
MOVFW MINM1 /АНАЛОГИЧНО С МИНУТАМИ.
MOVWF DSMH /
CALL BINDECH 9
MOVFW LSMH 9
MOVWF MLO1 9
MOVFW HSMH 9
MOVWF MHI1 9
CLRF LSMH 9
CLRF HSMH
BSF FLAG,6 /ФЛАГ УСТАНОВКИ.
BTFSS FLAG,5 /ЕСЛИ НЕТ ПУСКА,
GOTO SHALIN /ПРОИНДИЦИРУЕМ ЛЕВЫЕ ШАХМАТЫ.
GOTO ATTGO 9
SHALIN
MOVFW SECM /ИНДИКАЦИЯ ЛЕВЫХ ШАХМАТ.
MOVWF DSMH
CALL BINDECH /НА ПЕРЕКОДИРОВКУ.
MOVFW LSMH
MOVWF SLO /ЗНАЧЕНИЕ В МЛАДШИЙ РЕГИСТР СЕКУНД
MOVFW HSMH
MOVWF SHI /ЗНАЧЕНИЕ В СТАРШИЙ РЕГИСТР СЕКУНД
CLRF LSMH 9
CLRF HSMH
MOVFW MINM /АНАЛОГИЧНО С МИНУТАМИ.
MOVWF DSMH г 9
CALL BINDECH 9
MOVFW LSMH 9
MOVWF MLO 9
MOVFW HSMH 9
MOVWF MH I 9
CLRF LSMH 9
CLRF HSMH
BSF FLAG,6 /ФЛАГ УСТАНОВКИ.
GOTO ATTGO
/ 14. ИНДИКАЦИЯ В РЕЖИМЕ ШАХМАТ.
SZIKL
BSF BTFSC INTCON,7 FLAG,5 /ЧТОБЫ HE ЗАЦИКЛИТЬСЯ, РАЗРЕШАЕМ ПРЕРЫВАНИЯ /ЕСЛИ ПУСК ВКЛЮЧЕН,
GOTO SZIKLO /ИДЕМ НА ИНДИКАЦИЮ ШАХМАТ
BTFSS FLAG,3 /ЕСЛИ ВКЛЮЧЕНЫ ЧАСЫ,
GOTO COUblKLO /ИДЕМ НА ИНДИКАЦИЮ ЧАСОВ.
SZIKLO
CLRF KATOD /ОБНУЛЯЕМ КАТОД 2-10.
45
Устройства с цифровой индикацией
MOVLW 014H /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА МЛАДШЕГО
MOVWF SEGD /РАЗРЯДА ШАХМАТ.
SDATA
BTFSC FLAG,0 /ЕСЛИ ВКЛЮЧЕН ЗВОНОК,
BCF KATOD,4 /УСТАНОВИМ В НОЛЬ РАЗРЯД ЗВОНКА.
BTFSS FLAG,0 /ЕСЛИ ЗВОНОК ВЫКЛЮЧЕН,
BSF KATOD,4 /УСТАНОВИМ В ЕДИНИЦУ РАЗРЯД ЗВОНКА.
MOVFW SEGD /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА ДЛЯ ИНДИКАЦИИ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТ В.
MOVFW KATOD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ КАТОДА
MOVWF PORTA /В ПОРТ А.
BCF KATOD,4 /ЕСЛИ РАЗРЯД БЫЛ УСТАНОВЛЕН, ТО СБРОСИМ ИНАЧЕ ;СЧЕТЧИК /БУДЕТ РАБОТАТЬ НЕ ВЕРНО.
BTFSS FLAG,5 /ЕСЛИ НЕТ ПУСКА,
BSF PORTA,3 /ВКЛЮЧАЕМ ВСЕ ЗАПЯТЫЕ.
BTFSC FLAG,5 /ЕСЛИ НАОБОРОТ-
BCF PORTA,3 /ВЫКЛЮЧАЕМ ВСЕ ЗАПЯТЫЕ.
INCF SEGD,F ;+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
INCF KATOD,1 ;+1 В РЕГИСТР КАТОДА.
MOVLW .8 /ЗАПИСЬ ЧИСЛА 8-.
SUBWF KATOD,0 /ПРОВЕРЯЕМ ЗНАЧЕНИЕ КАТОДА.
BC SZIKL /ЕСЛИ РАВНО 0, ИДЕМ.
GOTO SDATA /ИНАЧЕ ИДЕМ СВЕТИТЬ.
; 15. ПП. ИНДИКАЦИИ С ВЫХОДОМ 0-7; 0-3.
COUZIKLO ; ЕСЛИ ВКЛЮЧЕН ПУСК ШАХМАТ,
BTFSC FLAG,5
GOTO SZIKL ; ИДЕМ НА ИНДИКАЦИЮ ШАХМАТ.
BTFSC FLAG,3 /ЕСЛИ ВКЛЮЧЕНЫ ШАХМАТЫ,
GOTO SZIKL / ИДЕМ НА ИНДИКАЦИЮ ШАХМАТ.
BTFSC FLAG,6 ; ЕСЛИ ВКЛЮЧЕНА УСТАНОВКА,
GOTO ' ZIKL /ИДЕМ НА ИНДИКАЦИЮ В РЕЖИМЕ УСТАНОВКИ (ВСЕ
;РАЗРЯДЫ).
CO 0
MOVLW 010H /ЗАПИСЬ НОМЕРА РЕГИСТРА ЕДИНИЦ МИНУТ
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
GOTO ZIKL1 Г
ZIKL
MOVLW 014H /ЗАПИСЬ НОМЕРА РЕГИСТРА ЕДИНИЦ СЕКУНД
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА. ’
ZIKL1
BSF INTCON,7 /ЧТОБЫ НЕ ПРОПУСТИТЬ ПРЕРЫВАНИЕ.
CLRF KATOD /ОБНУЛЯЕМ КАТОД 2-10.
COUZ
MOVFW KATOD /СРАВНИМ НОМЕР КАТОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT, 0 /РАЗРЯДА МИГАНИЯ.
BNZ COUZ1 /ПЕРЕХОД ЕСЛИ НЕ НОЛЬ.
INCF COUI,1 ;+1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
46
Часы с будильником — шахматные часы
MOVLW SUBWF .5 COUI,0 /5- ДЛЯ ОРГАНИЗАЦИИ МИГАНИЯ /ВЫБРАННОГО РАЗРЯДА.
BNC COUZ1 /ЕСЛИ НЕ РАВНО 0, ИДЕМ БЕЗ ГАШЕНИЯ
MOVLW .10 /0-5 -НЕТ ГАШЕНИЯ
SUBWF COUI,0 /5-10 -ЕСТЬ ГАШЕНИЕ
BNZ COUZ2 /МИГАНИЕ ЧАСТОТОЙ ОКОЛО 3 Гц.
CLRF COUI /ОБНУЛИМ СЧЕТЧИК ЦИКЛОВ.
GOTO COUZ1 f
COUZ 2
BSF FLAG,2 /ЕСТЬ ГАШЕНИЕ.
GOTO INDCO f
COUZ1
BCF FLAG,2 /СБРОСИМ ФЛАГ ГАШЕНИЯ В 0.
INDCO
MOVFW KATOD /ЕСЛИ РАЗРЯДЫ СОВПАДАЮТ,
SUBWF ATT, 0 /\
BNZ GDATA ' /ИДЕМ- СВЕТИТЬ С ЗАПЯТОЙ.
BSF FLAG, 4 /ФЛАГ ЗАПЯТОЙ.
GDATA
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА ВКЛЮЧЕН,
BCF KATOD,4 /ОБНУЛИМ РАЗРЯД (ВКЛ.ЗВОНКА).
BTFSS FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА ВЫКЛЮЧЕН,
BSF KATOD,4 /УСТАНОВИМ РАЗРЯД (ВЫКЛ.ЗВОНКА).
MOVFW SEGD /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА ДЛЯ ИНДИКАЦИИ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
BTFSC FLAG,2 /ЕСЛИ ЕСТЬ ГАШЕНИЕ,'
MOVLW B'10000000' /ГАСИМ СЕГМЕНТЫ.
MOVWF PORTB /В ПОРТ В.
MOVFW KATOD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ КАТОДА.
MOVWF PORTA /В ПОРТ А
BTFSC FLAG,4 /ЕСЛИ ФЛАГ =1,
BSF PORTA,3 /ВКЛЮЧИТЬ ЗАПЯТУЮ.
BTFSS FLAG,4 /ЕСЛИ ФЛАГ =0,
BCF PORTA,3 /ВЫКЛЮЧИТЬ ЗАПЯТУЮ.
BCF FLAG,4 /СБРОСИМ ФЛАГ ЗАПЯТОЙ.
BCF KATOD,4 /ЕСЛИ РАЗРЯД БЫЛ УСТАНОВЛЕН, ТО СБРОДИМ ИНАЧЕ
/СЧЕТЧИК
/БУДЕТ РАБОТАТЬ НЕ ВЕРНО.
INCF SEGD,F /+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
INCF KATOD,1 ,-+1 В РЕГИСТР КАТОДА.
BTFSC FLAG,6 /ЕСЛИ РАБОТАЕМ НА УСТАНОВКЕ,
GOTO INDU /ВКЛЮЧАЕМ ВСЕ РАЗРЯДЫ.
BTFSC FLAG,5 /ЕСЛИ РАБОТА В РЕЖИМЕ ШАХМАТ,
GOTO INDU /ТОЖЕ ВКЛЮЧАЕМ ВСЕ РАЗРЯДЫ.
BTFSS FLAG,3 /ПРИ РАБОТЕ В РЕЖИМЕ ЧАСОВ
GOTO INDH /ВКЛЮЧАЕМ 4 ПРАВЫХ РАЗРЯДА.
INDU
MOVLW .8 /ЗАПИСЬ ЧИСЛА 8-.
SUBWF KAT Ob, 0 /ПРОВЕРЯЕМ ЗНАЧЕНИЕ КАТОДА.
BC COUZIKLO /ЕСЛИ РАВНО 0, ИДЕМ,
GOTO COUZ /ИНАЧЕ ИДЕМ СВЕТИТЬ.
47
Устройства с цифровой индикацией
INDH
MOVLW .4
SUBWF KATOD, 0 /ПРОВЕРЯЕМ ЗНАЧЕНИЕ КАТОДА.
BZ COUZIKLO /ЕСЛИ РАВНО 0, ИДЕМ,
GOTO COUZ /ИНАЧЕ ИДЕМ СВЕТИТЬ.
/ 15. ВКЛЮЧЕНИЕ ЗВОНКА.
ALARMR
BTFSS 'FLAG, 5 /ЗВОНОК HE РАБОТАЕТ.
GOTO ATTGO /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
BSF FLAG,0 /ИНАЧЕ УСТАНОВИМ ФЛАГ ЗВОНКА = 1.
CLRF SECMI /СБРОС, ЧТОБЫ НЕ СВЕТИТЬ
CLRF MINM1 /ЧИСЛА ТИПА 255.
GOTO SHARIN /НА ИНДИКАЦИИ СРАБАТЫВАЕТ ГЕНЕРАТОР
ALARML
BTFSS FLAG,5 /ЗВОНОК НЕ РАБОТАЕТ.
GOTO ATTGO /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
BSF FLAG,0 /ИНАЧЕ УСТАНОВИМ ФЛАГ ЗВОНКА = 1.
CLRF SECM /СБРОС, ЧТОБЫ НЕ СВЕТИТЬ
CLRF ftlNM /ЧИСЛА ТИПА 255.
GOTO SHALIN /НА ИНДИКАЦИИ СРАБАТЫВАЕТ ГЕНЕРАТОР
; 17. ПП. ПЕРЕКОДИРОВКИ С БИНАРНОГО В 2-10 КОД (2-_-2-10).
BINDECH MOVLW .10 /10 >W.
BDH BSF STATUS,0 /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDECL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH /ПОВТОРИТЬ.
BINDECL MOVF DSMH,0
ADDLW .10 ,-10+W >w.
MOVWF LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN Г
/ 18. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
COUNT
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUSJTEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
MOVLW B’00000000’ ;ГАШЕНИЕ ИНДИКАЦИИ
MOVWF. PORTB /НА ВРЕМЯ ПРЕРЫВАНИЯ.
BSF STATUS,5
MOVLW B’10001111’ /РАЗРЕШАЕМ ВХОДА RB0-RB3
MOVWF TRISBA80H /ДЛЯ СЧИТЫВАНИЯ СОСТОЯНИЯ КНОПОК.
BCF STATUS,5
GOTO KEY /НА ОПРОС КЛАВИАТУРЫ.
48
Часы с будильником — шахматные часы
RETCONT /ВОССТАНОВЛЕНИЕ,СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BSF STATUS,5
MOVLW B' 10000000' /НА ВЫХОД СЕГМЕНТОВ.
MOVWF TRISBA80H Г
BCF STATUS,5
BCF INTCON,2 /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА
MOVFW STATUS TEMP /(РАЗРЕШАЕМ ПРЕРЫВАНИЯ). /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR TEMP
MOVWF FSR / FSR,
MOVFW W TEMP ,-w.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 19. ЗАПИСЬ В ПАМЯТЬ.
ZAPISE
BSF FLAG,6 /ФЛАГ УСТАНОВКИ.
BTFSC PORTB,3 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ?
GOTO ATTGO / НЕТ.
MOVFW COUEE /ЗНАЧЕНИЕ СЧЕТЧИКА АДРЕСА
MOVWF EEADR /В АДРЕС ЗАПИСИ.
MOVFW MINM1 /ЗНАЧЕНИЕ ПРАВЫХ ШАХМАТ.
MOVWF EEDATA /ЗАПИСЫВАЕМ.
BCF INTCON,GIE /ЗАПРЕТ ПРЕРЫВАНИЙ.
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H, WREN /РАЗРЕШЕНИЕ ЗАПИСИ.
MOVLW 55H /ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
MOVWF EECON2A80H //
MOVLW 0AAH //
MOVWF EECON2A80H //
BSF EECON1A80H, , WR /ПРИ ЗАПИСИ ВО ФЛЕШ ПЗУ.
ZAPIZ BTFSS EECON1A80H, ,4 /ПОКА НЕ БУДЕТ ЗАКОНЧЕНА ЗАПИСЬ
GOTO ZAPIZ /ХОДИМ ПО КРУГУ.
BCF INTCON,6 /ЗАПРЕТ ПРЕРЫВАНИЯ ПО ЗАПИСИ В ПАМЯТЬ.
BCF EECON1A80H, ,4 /
BCF EECON1A80H, .WREN /ЗАПРЕТ ЗАПИСИ.2
BCF STATUS,RPO /БАНК 0.
GOTO SHURIN / 20. УСТАНОВКА АДРЕСА ЗАПИСИ COUEEU BTFSC PORTB,3 GOTO CO_IN INCF COUEE,1 MOVFW COUEE SUBLW .64 BZ EECNOO GOTO CO_IN EECNOO CLRF COUEE /НА ИНДИКАЦИЮ. ЕСЛИ КНОПКА УСТАНОВКИ НЕ НАЖАТА, ИДЕМ НА ИНДИКАЦИЮ. +1 В СЧЕТЧИК АДРЕСА ЗАПИСИ. НЕ БОЛЕЕ 63. ИНАЧЕ ИДЕМ ОБНУЛЯТЬ. ИДЕМ НА ИНДИКАЦИЮ. ОБНУЛЯЕМ СЧЕТЧИК АДРЕСА ЗАПИСИ.
49
Устройства с цифровой индикацией
CO_IN
BSF FLAG,6 ;ФЛАГ УСТАНОВКИ.
MOVFW COUEE
CALL M1U /ИНДИКАЦИЯ АДРЕСА ЗАПИСИ НА МЕСТЕ СЕКУНД
MOVFW M_LOW
MOVWF SLO /ЛЕВОГО РАЗРЯДА.
MOVFW M_HIGH /
MOVWF SHI
MOVLW .10 /НА МЕСТЕ МИНУТ ЛЕВОГО РАЗРЯДА
MOVWF MLO /ВЫСВЕЧИВАЕТСЯ ПРОЧЕРК.
MOVWF MH I
GOTO ATTGO / /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
; 21. УСТАНОВКА АДРЕСА СЧИТЫВАНИЯ.
COUUI
BTFSC PORTB,3 /ЕСЛИ КНОПКА УСТАНОВКИ HE НАЖАТА,
GOTO COUUIN /ИДЕМ НА ИНДИКАЦИЮ.
INCF ACOU,1 /+1 В СЧЕТЧИК АДРЕСА СЧИТЫВАНИЯ.
MOVLW .64 /НЕ БОЛЕЕ 63.
SUBWF ACOU,0 /НА ОБНУЛЕНИЕ.
BZ COUUIO /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
GOTO COUUIN /ИЛИ ИДЕМ НА ИНДИКАЦИЮ.
COUUIO
CLRF ACOU /ОБНУЛИЛИ.
COUUIN
BSF FLAG,6 /ФЛАГ УСТАНОВКИ.
MOVFW ACOU
CALL H1U /ИНДИКАЦИЯ АДРЕСА СЧИТЫВАНИЯ
MOVFW H_LOW /НА МЕСТЕ СЕКУНД
MOVWF SLO1 /ПРАВОГО РАЗРЯДА.
MOVFW H_HIGH Г
MOVWF SHI1
MOVLW .10 /НА МЕСТЕ МИНУТ ПРАВОГО РАЗРЯДА
MOVWF MLO1 /ВЫСВЕЧИВАЕТСЯ ПРОЧЕРК.
MOVWF MHI1
GOTO ATTGO /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
; 22. ЧТЕНИЕ'ЗАПИСИ.
АКТ
BTFSC PORTB,3 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ?
GOTO ATTGO /ЕСЛИ НЕТ, ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ
АКТЕТЕ
MOVFW ACOU /ЗАГРУЗКА АДРЕСА.
MOVWF 'EEADR
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,RD /ЧТЕНИЕ.
BCF STATUS,RPO /БАНК 0.
MOVLW .255 /ЕСЛИ ПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWF EEDATA,0 /ЗАПИШЕМ -0.
BTFSC STATUS,Z Г
GOTO AKTETEO f
MOVFW EEDATA f
50
Часы с будильником — шахматные часы
АКТЕОО
MOVWF MINM1 /ЗАПИСЬ В РЕГИСТР МИНУТ
MOVWF MINM 7
GOTO SHULIN г
АКТЕТЕО
MOVLW .0 ;-о.
GOTO АКТЕ00 /
; 23. СЧЕТ И ПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С-Д.
S1
MOVFW SEC1 /ЗАГРУЗКА ЗНАЧЕНИЙ СЕКУНД В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml
INCF SEC1,F /ИНАЧЕ ПРИБАВИТЬ 1 В РЕГИСТР СЕКУНД.
RETURN
; ОБНУЛЕНИЕ.
Ml CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
/ +1 В РЕГИСТР МИНУТ.
М1М MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1
INCF MINI,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /MINI >W.
/ ПЕРЕКОДИРОВКА 2_2-10 И ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
M1U
MOVWF DSMH ,-W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП. ПЕРЕКОДИРОВКИ.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF M_LOW ,’W > M_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ,
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF M_HIGH ,-W > M_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП..
CLRF RETURN LSMH ;ОБНУЛЕНИЕ МЛ. РЕГ. ПП.. f
; ОБНУЛЕНИЕ.
Hl CLRF MINI /ОБНУЛЯЕМ РЕГИСТР МИНУТ.
CLRF M_LOW /ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
CLRF M_HIGH /ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
/ +1 В РЕГИСТР 1 ЧАСОВ.
Н1Н MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H /- 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
MOVFW HOU1 /HOU >W.
/ ПЕРЕКОДИРОВКА 2_2-10*И ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
H1U MOVWF DSMH /W >DSMH.
51
Устройства с цифровой индикацией
CALL BINDECH /ПЕРЕХОД В ПП..
MOVFW LSMH ;LSMH >W ВРЕМЕННЫЙ.
MOVWF H_LOW ;W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF H_HIGH ;W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП..
CLRF LSMH ;ОБНУЛЕНИЕ МЛ. РЕГ. ПП..
RETURN Г
H10
CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF H_LOW /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF H_HIGH /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
GOTO ATTGO
END
Регистратор событий
Это устройство сделано для скрытого наблюдения за объектами, которые
могут подвергаться несанкционированному вторжению посторонних лиц. Оно
может быть также применено для регистрации на магнитные носители ка-
ких-либо звуковых событий с запоминанием времени (часы, минуты) и даты
(число, месяц). Для регистрации супружеской измены датчик колебаний уста-
навливается под матрасом кровати. Устанавливая различные датчики: вибра-
ции, движения, нагрузки и т. п., можно зарегистрировать в энергонезависимой
памяти микроконтроллера 16 событий. В устройстве применяется система дис-
танционного управления с динамическим кодом фирмы «Меджик системе» ти-
па MSRF-3K (http://www.magicsys.spb.ru).
Блок-схема регистратора показана на рис. 12. Сигнал с датчика поступает
на регистратор. Регистратор может быть запрограммирован на прохождение
определенного числа импульсов за определенное время в секундах. При про-
хождении нужного числа импульсов за выбранное время регистратор зафикси-
рует время и дату происшедшего события. Вначале события регистратор выдаст
на брелок-передатчик импульс длительностью 0,8 секунды. Поскольку один и
Рис. 12. Блок-схема регистратора событий
52
Регистра тор событий
тот же вход регистратора является и его выходом, между регистратором и бре-
локом установлен селектор импульсов. Селектор пропускает импульсы длите-
льностью не менее 0,7 секунды. Через время, запрограммированное (в мину-
тах) пользователем в регистраторе, выдается еще один импульс длительностью
0,8 секунды. Брелок в свою очередь запрограммирован пользователем на рабо-
ту в триггерном режиме. Поэтому по первому импульсу с регистратора брелок
передаст серию импульсов и приемник основного блока MSRF-3K включит
диктофон или видеокамеру. По второму импульсу включенное устройство вы-
ключается. Если вам не нужна регистрация события на диктофон или видеока-
меру, то можно обойтись без системы дистанционного управления. При про-
верке происшедшего события к регистратору подключается четырехразрядный
семисегментный индикатор со своим блоком питания.
Характеристики регистратора
Длительность импульсов с датчика: не менее........30 мс,
не более.........0,5 с
Регистрация события в минутах, поэтому
максимальная погрешность:.................................+59 с
Количество программируемых импульсов до начала регистрации: . 1—20
Время прохождения импульсов до начала регистрации:........1—20 с
Время включения второго импульса:.........................1—20 мин
Возможна непрерывная работа в режиме электронных часов.
Алгоритм программы регистратора представлен на рис. 13. В микроконтрол-
лере PIC16F84A используется два прерывания: прерывание по переполнению
таймера TMR0, и прерывание по изменению сигнала на входе порта В. Пере-
полнение таймера происходит каждую секунду. В это время опрашивается со-
стояние кнопок, и производятся необходимые установки. При нажатии двух
кнопок установки происходит считывание памяти и заполнение регистров ин-
дикации. Для упрощения алгоритм программы в режимах установки и часов на
рис. 13 не показан, так как он мало чем отличается от алгоритма программы
шахматных часов. Естественно, результат при нажатии кнопок другой. Функ-
ции кнопок будут описаны ниже.
Прерывание по изменению сигнала на входе порта В происходит в момент
прихода импульса с датчика. Если это первый импульс, то он записывается в
счетчик входных импульсов. Далее значение счетчика сравнивается с установ-
ленным значением количества импульсов. Если значения не равны, записи в
память не происходит. Если в течение времени в секундах (установленное ва-
ми) значения счетчиков импульсов с датчика и запрограммированного не срав-
няются, счетчик обнулится и следующий цикл сравнения начнется с нуля. Та-
кое усложнение необходимо, если используется вибрационный датчик или дат-
чик колебаний. В этом х случае будут исключены случайные срабатывания
регистратора. В случае равенства значений счетчиков происходит запись в па-
мять микроконтроллера даты, месяца, часов и минут, когда состоялось собы-
тие. При этом устанавливается флаг формирования выходного импульса, а в
программе индикации бформируется импульс длительностью 0,8 секунды. Во
время формирования импульса индикация не производится. Этот импульс
включит кнопку брелока, и основной блок MSRF-3K включит диктофон или
53
Устройства с цифровой индикацией
Рис. 13. Алгоритм программы регистратора событий
видеокамеру. В это время включается минутный счетчик времени регистрации.
При равенстве значений счетчиков прошедшего времени и установленного
снова сформируется импульс длительностью 0,8 секунды. Этот импульс опять
включит кнопку брелока, запрограммированного на триггерный режим. То есть
фактически основной блок выключит диктофон или видеокамеру.
Установка при инициализации (по умолчанию) один импульс за одну се-
кунду с регистрацией в одну минуту. Здесь необходимо вспомнить, что по-
грешность регистрации составляет 59 секунд. То есть регистрация может длить-
ся 1 секунду. Поэтому рекомендуемое минимальное время регистрации 2 ми-
нуты.
На рис. 14 показана схема регистратора с селектором импульсов и брелоком,
от которого использована только настроенная плата без кнопок. Выход DP2.3
подключается к кнопке (кнопка удалена!) передатчика MSRF-3K, — выход на-
строен на работу в триггерном режиме. Выводы порта В RBO—RB6 запрограм-
мированы на выход значений сегментов индикатора. Выводы RBI, RB2 по пре-
54
Регистратор событий
Рис. 14. Регистратор событий
рыванию используются как входы кнопок «Режим» и «Установка». Вывод RB7
используется как вход с прерыванием от датчика SF1 и выход, нагруженный се-
лектором импульсов, собранном на микросхеме DD2. Выводы порта А
RAO—RA3 запрограммированы на , вывод переключения разрядов индикатора
при динамической индикации. Вывод RA4 переключает положение запятой при
установке режима работы и определяет значение индикатора при считывании.
Кроме того, он используется как вход кнопки «Разряд». Условно датчик на схе-
ме обозначен как геркон, хотя это может быть любой датчик, формирующий
необходимую для регистрации длительность импульса. В программе заложено
подавление дребезга контактов длительностью около 24 мс. Поэтому минималь-
ная длительность импульса регистрации должна быть больше этого времени.
При использовании датчика колебаний на герконе это условие выполняется.
Необходимо заметить, что регистрируется импульс с нулевым потенциалом.
Селектор импульсов представляет собой схему, которая обычно использует-
ся для подавления дребезга контактов. Импульсы, длительность которых менее
0,7 секунды, не проходят на выход. Выходной импульс с микроконтроллера
имеет низкий уровень, а кнопка брелока замыкается на плюс питания, поэтому
элемент DD2.3 инвертирует входной импульс. Брелок имеет свой элемент пи-
тания типа А23 или А27 на напряжение 12 В. Но микроконтроллер передатчика
брелока работает на напряжении 5 В. Поэтому согласования уровней не требу-
ется — брелок устойчиво срабатывает при падении напряжении питания мик-
роконтроллера регистратора до 3 В. Чтобы работа регистратора не влияла на
дальность действия передатчика брелока, для питания регистратора использу-
ются свои элементы GB1. Поскольку микроконтроллер работает на малой час-
тоте, потребляемый им ток составляет около сотни микроампер. Перевод мик-
роконтроллера в «спящий» режим невозможен.
На рис. 15 показана схема соединения индикаторов и кнопок управления с
разъемом ХР1. Потребляемый ток с включенными индикаторами составляет
55
Устройства с цифровой индикацией
Рис. 15. Регистратор событий. Индикатор
около 30 мА, поэтому плата индикаторов имеет свои элементы питания. Рези-
стор R1 является нагрузочным для вывода RA4, работающего как выход с от-
крытым стоком. Диоды VD1—VD4 исключают влияние уровней порта В и кно-
пок на выходы порта А. Плата индикаторов подключается к плате регистратора
на время установок режимов работы и на время считывания результата регист-
рации. Подключение можно сделать на любом доступном разъеме. Если реги-
стратор будет использоваться как часы, то схему регистратора и индикатора
можно объединить на одной плате и запитывать от стабилизированного блока
питания на 5 В. Из-за простоты схемы и индивидуальности разъемов печатные
платы на схемы не приводятся.
Назначение кнопок управления:
ТА1 — «Разряд» — выбор мигающего разряда установки;
ТА2 — «Режим» — переключение запятой;
ТАЗ — «Установка» — плюс (минус) единица в выбранный разряд.
Функции, выполняемые регистратором при нажатии кнопок установки:
ч Запятая в нулевом разряде (при выборе мигающего разряда)
0 — индикация числа и месяца;
1 — установка минут;
2 — обнуление часов;
3 — установка часов.
56
Регистратор событий
Запятая в первом разряде
О — установка числа импульсов до начала регистрации;
1 — установка месяца;
2 — индикация числа и месяца;
3 — установка числа.
При запятой во втором разряде и любом выбранном разряде идет работа в
режиме часов.
Запятая в третьем разряде
О — индикация числа импульсов до начала регистрации;
1 — установка времени прохождения импульсов с датчика в секундах;
2 — установка адреса окончания записи;
3 — установка времени включения диктофона (второго импульса 0,8 сек) в
минутах.
При установке месяца и времени в секундах формат индикации - - 01. Но
если значение числа месяца устанавливается прибавлением единицы, то уста-
новка времени в секундах — вычитанием единицы. Следующее за единицей
число времени в секундах будет 20. Аналогично выполняется установка числа и
времени в минутах, но формат индикации 01 -
Считывание информации из памяти регистратора происходит при одновре-
менном нажатии двух кнопок: «Режим» и «Разряд». При этом на индикаторе
появится - - 0,8. Запятая в первом разряде говорит, что индицируется адрес
окончания записи. При нажатии кнопки «Режим» запятая переместится в ну-
левой разряд, а индикация будет во втором и третьем разрядах с прочерками в
нулевом и первом разрядах. В этих разрядах будет высвечиваться адрес считы-
вания. При очередном нажатии кнопки «Режим» запятая переместится во вто-
рой разряд. На табло будут считанные показания числа и месяца. Следующее
нажатие кнопки «Режим» уберет запятую с индикатора, что соответствует ин-
дикации часов и минут. При индикации адреса считывания и нажатии кнопки
«Установка», значение адреса увеличивается на 4. При равенстве адреса считы-
вания й адреса конца записи нажатие кнопки «Установка» приведет к выходу
из режима считывания в режим часов. Если записи не было, то считывания не
произойдет. Предусмотрена установка окончания адреса записи с дискретно-
стью 4. Устанавливая число 60, можно просмотреть все ранее записанные зна-
чения. В этой ситуации надо помнить, что следующая запись начнется с уста-
новленного адреса.
Коротко о технических характеристиках системы дистанционного управления
MSRF-3K
Число каналов управления....................................3
Уверенная дальность управления с брелоком без антенны .......40 м
Дальность управления брелоком с телескопической антенной ....100 м
Напряжение питания основного блока..........................9—15 В
Напряжение питания радиобрелока.............:...............12 В
Напряжение питания нагрузок выходов основного блока, не более . . 25 В
Ток потребления основного блока, не более....................20 мА
Ток покоя радиобрелока, не более ............................1 мкА
Мощность излучения радиобрелока, не более...................5 мВт
Максимальный коммутируемый ток, не более ...................0,6 А
57
Устройства с цифровой индикацией'
Каналы управления можно запрограммировать на работу: в потенциальном
режиме (срабатывание, пока нажата кнопка); в импульсном режиме (замыка-
ние ключа на 0,7 секунды); в триггерном режиме (каждая команда изменяет
состояние ключа); без реакции. Срабатывание выходного транзисторного клю-
ча происходит на общий провод (-12 В).
Некоторые диктофоны имеют вход для их электронного включения. Видео-
камеры лучше включать посредством пульта дистанционного управления.
; ЛИСТИНГ ПРОГРАММЫ "REGISTRATOR"
; РЕГИСТРАТОР СОБЫТИЙ С ЧАСАМИ, ДНЯМИ, МЕСЯЦАМИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ ИЗГОТОВЛЕНИЯ РАДИОЛЮБИТЕЛЯМИ ДЛЯ СЕБЯ.
; ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ,
; saes@mail.ru.
#INCLUDE P16F84A.INC
___CONFIG 3FF0
; 11111111110000
; 0,1-РАЗРЯДЫ ГЕНЕРАТОРА, 00- 32-200 КГЦ.
; 2- WDTE, 0- ВЫКЛ.
; 3- PWRTE, 0- ВКЛ.
; 4-13 ЗАЩИТА КОДА. 1- НЕТ ЗАЩИТЫ.
; ДЕЛЕЖ ПИРОГА.
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H- ;TMR0.
OPTIONR EQU 01H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H 9
PORTB EQU 06H 9
INTCON EQU 0BH 9
DAY1 EQU 0CH /ЧИСЛО СЧЕТЧИКА.'
MON EQU 0DH /МЕСЯЦ.
HOU1 EQU oeh /ЧАСЫ СЧЕТЧИКА.
MINI EQU ofh /МИНУТЫ СЧЕТЧИКА.
SEC1 EQU 010H /СЕКУНДЫ СЧЕТЧИКА.
CAUK EQU 011H /СЧЕТЧИК ПРЕРЫВАНИЙ.
M_LOW EQU 012H /ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
M_HIGH EQU 013H /ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
H_LOW EQU 014H /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ.
H_HIGH EQU 015H /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ.
ATT EQU 018H /ПРИЗНАК (АТРИБУТ) УСТАНОВКИ.
CAU EQU 019H /РЕГИСТР УСТАНОВКИ ПРЕРЫВАНИЙ ЗА 10 СЕК.
ACOU EQU 01AH /СЧЕТЧИК АДРЕСА ПАМЯТИ ПРИ СЧИТЫВАНИИ И ЗАПИСИ
KATOD EQU 01BH /= АНОДУ, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ (ОБЩИЙ ЭЛЕКТРОД)
COUI EQU 01CH /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
58
Регистратор событий
; ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ РЕГИСТРА FLAG.
FLAG EQU 01DH
; О- ФОРМИРОВАНИЯ ИМПУЛЬСА EXE,
; 1- СЧИТЫВАНИЯ ДЛЯ АТТ,
; 2- ГАШЕНИЯ РАЗРЯДА,
; 3- ЗАПИСЬ МИНУТ,
; 4- НАЧАЛА ОТСЧЕТА СЕКУНД,
; 5- ФЛАГ ЗАПЯТОЙ,
; 7- ОБНУЛЕНИЕ СЧЕТЧИКА СЧИТЫВАНИЯ.
ANOD EQU 01EH /АНОД, ПОЗИЦИОННОЕ ЗНАЧЕНИЕ.
SEGD EQU 01FH /РЕГИСТР АДРЕСА РАЗРЯДА ИНДИКАЦИИ.
CAT EQU 020H /УСТАНОВКА РАЗРЯДА МИГАНИЯ.
COU10S EQU 021H /РЕГИСТР ВРЕМЕНИ ВХ. ПРЕРЫВАНИЙ В СЕК.
COU10M EQU 022H /РЕГИСТР ДЛИТЕЛЬНОСТИ EXE В МИНУТАХ.
ATTZ EQU 023H /РЕГИСТР РАЗРЯДА ИНДИКАЦИИ ЗАПЯТОЙ.
W_TEMP EQU 024H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 025H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
DSMH EQU 026H /БАЙТ АДРЕСАЦИИ В ПП.
LSMH EQU 027H /МЛАДШИЙ БАЙТ В ПОДПРОГРАММЕ.
HSMH EQU 028H /СТАРШИЙ БАЙТ В ПП.
FSR_TEMP EQU 029H /ВРЕМЕННЫЙ ДЛЯ FSR.
COUEE EQU 02 AH /СЧЕТЧИК ЗАПИСИ.
MIN10 EQU 02BH /РЕГИСТР ВЫДЕРЖКИ МИНУТ.
DMHM EQU 02CH /ВРЕМЕННЫЙ ПРИ ЗАПИСИ.
CAUCOU EQU 02DH /СЧЕТЧИК ВЫДЕРЖКИ СЕКУНД.
ABC DE EQU 02EH /ВРЕМЕННЫЙ РЕГИСТР ЗАПИСИ КОСВЕННОГО АДРЕСА.
EEDATAD EQU ОЗОН /РЕГИСТР СЧИТЫВАНИЯ ДНЕЙ.
EEDATAM EQU 031H /РЕГИСТР СЧИТЫВАНИЯ МЕСЯЦА.
EEDATAH EQU 032H /'РЕГИСТР СЧИТЫВАНИЯ ЧАСОВ.
EEDAMIN EQU 033H /РЕГИСТР СЧИТЫВАНИЯ МИНУТ.
; ПУСК.
ORG О
GOTO INIT
ORG 4
BTFSC INTCON,RBIF ;0?
GOTO ZAPISI
BTFSC INTCON,2
GOTO COUNT
; ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO ;БАНК 1.
MOVLW В'00000100' -/ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100.
MOVWF OPTION_REGA80H
MOVLW В'10101000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ. ТАЙМЕРА,
MOVWF INTCON /ИЗМЕНЕНИЮ СИГНАЛА PORTB.
59
Устройства с цифровой индикацией
MOVLW В'00000000' /RA0-RA4-HA ВЫХОД.
MOVWF TRISAA80H
MOVLW В'10000000' /RB0-RB6-HA ВЫХОД, RB7-BXOfl.
MOVWF TRI SB"18 ОН BCF STATUS,RPO /БАНК 0.
CLRF ACOU ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF TMR0 CLRF SEC1 CLRF MINI CLRF HOU1 CLRF M_LOW CLRF M_HIGH CLRF H_LOW CLRF H_HIGH CLRF HSMH
CLRF LSMH CLRF DMHM CLRF COUEE CLRF ATT CLRF CAUK
CLRF CAUCOU CLRF MIN10 CLRF CAT CLRF FLAG MOVLW .1 MOVWF MON ;МЕСЯЦ=1.
MOVWF DAY1 ;ЧИСЛО=1.
MOVWF COUIOS /РЕГИСТР ПРЕРЫВАНИЙ ЗА СЕКУНД=1.
MOVWF COU10M ;РЕГИСТР EXE =МИНУТ=1.
MOVWF CAU /ПО УМОЛЧАНИЮ 1 ПРЕРЫВАНИЕ ЗА 1 СЕК
; 1. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KEY /ПРОВЕРЯЕМ НАЖАТИЕ 2 КНОПОК НА СЧИТЫВАНИЕ.
COMF PORTB,W /ЗАГРУЖАЕМ ПОРТ С ИНВЕРСИЕЙ.
XORLW B' 00000110'* /СРАВНИВАЕМ.
BTFSC STATUS,Z /ЕСЛИ РАВНО 1,
BSF FLAG,1 /УСТАНАВЛИВАЕМ ФЛАГ СЧИТЫВАНИЯ.
COMF PORTB,W /ЕЩЕ РАЗ ЗАГРУЖАЕМ ПОРТ С ИНВЕРСИЕЙ.
XORLW B'10000110' /СРАВНИВАЕМ.
BTFSC STATUS,Z /ЕСЛИ РАВНО 0,
BSF FLAG,1 /ПРОПУСКАЕМ, ИЛИ СТАВИМ ФЛАГ СЧИТЫВАНИЯ
BTFSC FLAG,1 /ВОЗМОЖНО РАНЕЕ БЫЛ УСТАНОВЛЕН ФЛАГ?
GOTO АКТ /ЕСЛИ ДА, ИДЕМ.
BTFSS PORTB,1 ’ /ВКЛЮЧЕН ЛИ ВЫБОР РЕЖИМА УСТАНОВКИ? /
GOTO ATTK ;ДА. ’
GOTO CATK ; НЕТ.
; 2. ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАЮЩЕГО РАЗРЯДА).
САТК
CALL SI /+1 В СЕКУНДЫ
BTFSC PORTB,2 / 0?
GOTO CATKU / НЕТ.
60
Регистратор событий
INCF CAT, 1 /ДА, +1 В СЧЕТЧИК УСТАНОВКИ
MOVFW CAT
SUBLW .5 ;НЕ БОЛЕЕ 4,
BZ CATKO ;ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
GOTO CATKU ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
MOVFW CAT /КУДА ПОЙТИ ПРИ
ADDWF PC, 1 /УСТАНОВКЕ:
GOTO ATTIN /ИНДИКАЦИЯ,
GOTO ATTUM /УСТАНОВКА МИНУТ,
GOTO ATTB /УСТАНОВКА,
GOTO ATTUH /УСТАНОВКА ЧАСОВ,
GOTO CATKO ATTIN /ИНДИКАЦИЯ.
CLRF CAT /ОБНУЛЕНИЕ.
GOTO ATTGO /ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
3. ВЫБОР РЕЖИМА УСТАНОВКИ.
АТТК /ВО ВРЕМЯ УСТАНОВКИ ЧАСЫ НЕ ОСТАНАВЛИВАЮТСЯ
CALL SI
INCF ATT,F /УВЕЛИЧИВАЕМ ЧИСЛО АТРИБУТА.
MOVFW ATT
SUBLW .4 /ИНДИКАЦИЯ РАЗРЕШЕНА ДО 3 ЦИФРЫ (0-3).
BNZ ATTGO /ЕСЛИ НЕ РАВНО НУЛЮ ИДЕМ,
CLRF ATT /ИНАЧЕ ОБНУЛЯЕМ АТРИБУТ.
GOTO ATTGO ;ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ.
4. ЗАПОЛНЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ ДЛЯ СЧИТЫВАНИЯ.
АКТЕЕ
MOVLW .10 /В РАЗРЯДАХ H
MOVWF H_LOW t
MOVWF H_HIGH
MOVFW COUEE /ВЫСВЕТИМ НОМЕР АДРЕСА ОКОНЧАНИЯ ЗАПИСИ
CALL M1U /НА МЕСТЕ МИНУТ.
GOTO ATTGO f
AKTCO
MOVLW .10 /В РАЗРЯДАХ МИНУТ
MOVWF M_LOW /
MOVWF M_HIGH
MOVFW ACOU /ВЫСВЕТИМ НОМЕР АДРЕСА НАЧАЛА ЗАПИСИ
CALL H1U /НА МЕСТЕ ЧАСОВ.
GOTO ATTGO ;
АКТ DM
MOVFW EEDATAD / ДЕНЬ
CALL H1U /НА МЕСТЕ ЧАСОВ.
MOVFW EEDATAM /МЕСЯЦ
CALL M1U /НА МЕСТЕ МИНУТ.
GOTO ATTGO Г
AKTHM
MOVFW EEDATAH *
CALL H1U /ЧАСЫ.
MOVFW EEDAMIN f
61
Устройства с цифровой индикацией
CALL GOTO M1U ATTGO ;МИНУТЫ.
ATTDATA
MOVFW ATT 7
ADDWF PCL,F
GOTO AKTCO /АДРЕС ЗАПИСИ НАЧАЛО.
GOTO АКТ DM /ЧИСЛО МЕСЯЦ.
GOTO AKTHM /ЧАСЫ МИНУТЫ.
GOTO AKTEE /АДРЕС ЗАПИСИ КОНЕЦ.
ZAPDATA
MOVFW ATT /ДЛЯ УСТАНОВКИ НУЖНОЙ ЗАПЯТОЙ
ADDWF PCL,F /ПРИ ИНДИКАЦИИ.
RETLW B'00100010' /0, ЗАПИСЬ, НАЧАЛО 000,0
RETLW B'OIOOOIOO' /1, ЧИСЛО, МЕСЯЦ 00,00
RETLW B'00000000' /2, ВРЕМЯ 0000 .
RETLW B'OOOIOOOI' /3, ЗАПИСЬ, КОНЕЦ 0000,
; 5. КУДА ПОЙТИ = МУЛЬТИПЛЕКСОР.
ATTUM /
MOVFW ATT КУДА ПОЙТИ? ПРИ УСТАНОВКЕ САТ=1.
ADDWF PC,1 ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO MINIM УСТАНОВКА МИНУТ.
GOTO MON IM УСТАНОВКА МЕСЯЦА.
GOTO HIN РАБОТА: ЧАСЫ МИНУТЫ.
GOTO ECUS УСТАНОВКА ВРЕМЕНИ В СЕК (10 СЕК).
ATTUH
MOVFW ATT КУДА ПОЙТИ? САТ=3.
ADDWF PC, 1 ; ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO HOU1H УСТАНОВКА ЧАСОВ.
GOTO DAY1D . УСТАНОВКА ЧИСЛА.
GOTO HIN РАБОТА: ЧАСЫ МИНУТЫ.
GOTO ECUM УСТАНОВКА ВРЕМЕНИ В МИНУТАХ (10 МИН).
АТТВ
MOVFW ATT КУДА ПОЙТИ? САТ=2.
ADDWF PC,1 ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO ATTOO ОБНУЛЕНИЕ ЧАСОВ.
GOTO DEYIN ИНДИКАЦИЯ ЧИСЛА И МЕСЯЦА.
GOTO HIN РАБОТА: ЧАСЫ МИНУТЫ.
GOTO EEFF УСТАНОВКА НОМЕРА ЗАПИСИ, КОНЕЦ.
ATTIN \
MOVFW ATT КУДА ПОЙТИ? САТ=0,4.
ADDWF PC, 1 ЗАВИСИТ ОТ НОМЕРА АТТ.
GOTO DEYIN / ИНДИКАЦИЯ ЧИСЛА И МЕСЯЦА.
GOTO OCAU1 УСТАНОВКА ЧИСЛА ПРЕРЫВАНИЙ НА 10 СЕК.
GOTO HIN ; РАБОТА: ЧАСЫ МИНУТЫ.
GOTO ОСAUI ; ИНДИКАЦИЯ ПРЕРЫВАНИЯ.=1. (15)
; б. ИНДИКАЦИЯ ЧИСЛА И МЕСЯЦА.
DEYIN
MOVFW DAY1 /ВЫСВЕТИМ ДНИ
CALL ' H1U /НА МЕСТЕ ЧАСОВ.
MOVFW MON , /МЕСЯЦ-
62
Регистратор событий
CALL GOTO MID ATTGO /НА МЕСТЕ МИНУТ.
DAYMON ' MOVFW MON /ЗАГРУЗКА ЧИСЕЛ В МЕСЯЦЕ
ADDWF PCL,F
NOP' /0
1 RETLW .31 ;1-ЯНВАРЬ
RETLW .28 ;2-ФЕВРАЛЬ
RETLW .31 ;3-МАРТ
RETLW .30 ;4-АПРЕЛЬ
RETLW .31 /5-МАЙ
RETLW .30 ;б-ИЮНЬ
RETLW .31 ;7-ИЮЛЬ
RETLW .31 ;8-АВГУСТ
RETLW .30 ;9-СЕНТЯБРЬ
RETLW .31 ;10-ОКТЯБРЬ
RETLW .30 ;11-НОЯБРЬ
RETLW .31 /12-ДЕКАБРЬ
; 7. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
SEGDATA /RB7, б, 5, 4, 3, 2, 1, 0 ADDWF PCL,F ;ЕХЕ, А, В, С, D, Е, F, G RETLW B'lllllllO’ ;0 RETLW В’10110000' /1 RETLW В'11101101' /2 RETLW В'11111001' ;3 RETLW В’10110011* /4 RETLW В'11011011* ;5 RETLW В'11011111' /б RETLW" В'11110000' ;7 RETLW В'11111111' /8 RETLW В'11111011' /9 RETLW В'10000001' ;- ; 8. ОБНУЛЕНИЕ СЕКУНД И МИНУТ. АТТОО BTFSC PORTA,4 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ. GOTO ATTGO /НЕТ. CLRF SEC1 /ДА. CLRF MINI GOTO HIN /.НА ИНДИКАЦИЮ.
/ 9. УСТАНОВКА И ИНДИКАЦИЯ НОМЕРА ПОСЛЕДНЕЙ ЗАПИСИ В ПАМЯТЬ.
EEFF
BTFSC PORTA,4 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ
GOTO AKTEE
MOVLW .4 /+4
ADDWF COUEE,1
MOVLW .64 /НЕ БОЛЕЕ 63 (3F) .
SUBWF COUEE,0*
BZ EEFFO /НА УСТАНОВКУ.
GOTO AKTEE
63
Устройства с цифровой индикацией
EEFFO ;MOVLW ;MOVWF CLRF GOTO .4 COUEE COUEE AKTEE /ПРИ НУЛЕВОМ АДРЕСЕ „ ;НЕТ СЧИТЫВАНИЯ. /НА ИНДИКАЦИЮ.
; 10. ПОДПРОГРАММЫ УСТАНОВКИ.
MINIM
BTFSC PORTA,4 /ПРОВЕРКА НАЖАТИЯ КНОПКИ УСТАНОВКИ.
GOTO ATTGO ; НЕТ.
CALL M1M ;+1 В РЕГИСТР МИНУТ.
MOVFW HOU1 /MINI >W.-
CALL H1U /НА ИНДИКАЦИЮ ЧАСОВ.
GOTO ATTGO
HOU1H
BTFSC PORTA,4 /УСТАНОВКА ЧАСОВ.
GOTO ATTGO
CALL HIH /+1 В РЕГИСТР ЧАСОВ.
MOVFW MINI /MINI >W.
CALL M1U /НА ИНДИКАЦИЮ МИНУТ.
GOTO ATTGO
DAY ID
BTFSC PORTA,4 /УСТАНОВКА ЧИСЕЛ.
GOTO DAY1DI
CALL DIH /+1 В РЕГИСТР ДНЕЙ.
DAY1DI
MOVFW DAY1 /ЧИСЛО ВЫСВЕЧИВАЕТСЯ НА МЕСТЕ
CALL H1U /ЧАСОВ.
MOVLW .10
MOVWF M HIGH /ПРОЧЕРК НА МЕСТЕ МИНУТ.
MOVWF M LOW /
GOTO ATTGO
MONIM
BTFSC PORTA,4 /УСТАНОВКА МЕСЯЦА.
GOTO MON1MI
CALL MO1H /+1 В РЕГИСТР МЕСЯЦА.
MON1MI
MOVFW MON /МЕСЯЦ ВЫСВЕЧИВАЕТСЯ НА МЕСТЕ'
CALL M1U /МИНУТ.
MOVLW .10
MOVWF H HIGH /ПРОЧЕРК НА МЕСТЕ ЧАСОВ.
MOVWF H LOW f
GOTO ATTGO -
; 11. ПОДГОТОВКА К ВЫБОРКЕ ЗАПИСИ НА ИНДИКАЦИИ.
АКТ
CALL SI ;+1 В СЕКУНДЫ.
BCF STATUS,Z /НА ВСЯКИЙ СЛУЧАЙ.
BTFSS PORTB,1 /ЕСЛИ КНОПКА НАЖАТА,
GOTO EEAKT /ТО ИДЕМ МЕНЯТЬ ИНДИКАЦИЮ,
64 J
Регистратор событий
BTFSC GOTO BTFSC GOTO CLRF BSF PORTA,4 ATTGO FLAG,7 АКТ 2 ACOU FLAG,7 /НАЖАТА ЛИ КНОПКА УСТАНОВКИ? /ЕСЛИ НЕТ, ЗАВЕРШЕНИЕ ПРЕРЫВАНИЯ. ;ОБНУЛЕНИЕ БЫЛО? /ДА. /НЕТ, ОБНУЛЯЕМ. /УСТАНОВИМ ФЛАГ ОБНУЛЕНИЯ.
АКТ 2 CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF EEDATAD /ЗАПИСЬ В РЕГИСТР ДНЕЙ.
INCF ACOU,1 /1
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF EEDATAM /ЗАПИСЬ В РЕГИСТР МЕСЯЦЕВ.
INCF ACOU,1 ;2
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF EEDATAH /ЗАПИСЬ В РЕГИСТР ЧАСОВ.
INCF ACOU,1 /3
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF EEDAMIN /ЗАПИСЬ В РЕГИСТР МИНУТ.
INCF ACOU,1 /+1
MOVFW COUEE /СРАВНИМ СЧЕТЧИК ПОСЛЕДНЕЙ ЗАПИСИ.
ADDLW .4 / + 4.
SUBWF ACOU,0 /СО СЧЕТЧИКОМ АДРЕСА СЧИТЫВАНИЯ.
BZ АКТ 4 /ЕСЛИ ОНИ РАВНЫ, ИДЕМ ОБНУЛЯТЬ,
GOTO ЕЕАКТ1 /ИНАЧЕ ИДЕМ НА ВЫБОРКУ.
АКТ 4 BCF FLAG,1 /СБРАСЫВАЕМ ФЛАГ СЧИТЫВАНИЯ.
CLRF ACOU /ОБНУЛЯЕМ.
BCF FLAG,7
GOTO ATTGO /ЗАВЕРШАЕМ.
АКТЕТЕ MOVFW ACOU /ЗАГРУЗКА АДРЕСА.
MOVWF EEADR
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,RD /ЧТЕНИЕ.
BCF STATUS,RPO /БАНК 0.
MOVLW .255 /ЕСЛИ ПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWF EEDATA,0 /ЗАПИШЕМ -0.
BTFSC STATUS,Z / '
GOTO AKTETEO /
MOVFW RETURN EEDATA г
АКТЕТЕО MOVLW RETURN .0 /-о.
ЕЕАКТ INCF ATT,F /УВЕЛИЧИВАЕМ ЧИСЛО АТРИБУТА.
MOVFW ATT
SUBLW .4 /ИНДИКАЦИЯ РАЗРЕШЕНА ДО 3 ЦИФРЫ (0-3)
SKPNZ /ПРОПУСТИТЬ, ЕСЛИ НЕ НОЛЬ,
CALL AKTO /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
ЕЕАКТ1 MOVFW ATT /
3 Зак. 2418
65
Устройства с цифровой индикацией
CALL MOVWF GOTO ZAPDATA ; ATTZ ; ATTDATA ; г ПЕРЕКОДИРОВКА АТТ В ПОЗИЦИЮ ЗАПЯТОЙ. ;РЕГИСТР ЗАПЯТОЙ. г УСТАНОВИМ ЗНАЧЕНИЯ В ЧАСАХ* И МИНУТАХ.
АКТО CLRF RETURN ATT /ОБНУЛЯЕМ.
; 12. УСТАНОВКА И ИНДИКАЦИЯ СЧЕТЧИКОВ СЕКУНД И МИНУТ ПРИ ПРЕРЫВАНИИ.
ECUS
BTFSC GOTO PORTA,4 ECUSIN /УСТАНОВКА СЧЕТЧИКА СЕКУНД.
. DECF COUIOS,1 /-1.
TSTF COUIOS /0?
BZ ECUSO /ДА, НА УСТАНОВКУ.
ECUSIN
MOVFW COUIOS
CALL M1U /ИНДИКАЦИЯ НА МЕСТЕ МИНУТ.
MOVLW .10
MOVWF H_HIGH /ПРОЧЕРК НА МЕСТЕ ЧАСОВ.
MOVWF H_LOW Г
GOTO ATTGO
ECUSO
MOVLW .20 /УСТАНАВЛИВАЕМ 20 (КОМУ НАДО, МОЖНО БОЛЬШЕ)
MOVWF COUIOS
GOTO ECUSIN /НА ИНДИКАЦИЮ.
ECUM
BTFSC PORTA,4 /УСТАНОВКА СЧЕТЧИКА МИНУТ.
GOTO ECUMIN
DECF ' COUIOM,1 /-1-
TSTF COUIOM /0?
BZ. ECUMO /ДА, НА УСТАНОВКУ.
ECUMIN
MOVFW COUIOM
CALL H1U /ИНДИКАЦИЯ НА МЕСТЕЧАСОВ.
MOVLW .10
MOVWF M_HIGH /ПРОЧЕРК НА МЕСТЕ МИНУТ.
MOVWF M_LOW f
GOTO ATTGO
ECUMO 1
MOVLW .20 /УСТАНАВЛИВАЕМ 20 (КОМУ НАДО, МОЖНО БОЛЬШЕ)
MOVWF COUIOM
GOTO ECUMIN /НА ИНДИКАЦИЮ.
; 13. ИНДИКАЦИЯ ЧАСОВ И МИНУТ ПРИ СМЕНЕ ИНДИКАЦИИ.
HIN
MOVFW MINI /ИНДИКАЦИЯ ЧАСОВ И МИНУТ
CALL M1U /ИНДИКАЦИЯ МИНУТ.
MOVFW HOU1
CALL H1U /ИНДИКАЦИЯ ЧАСОВ. '
GOTO ATTGO
66
Регистратор событий
• s===s=s=ss==s========:=s==========s==:s========
; 14. ИНДИКАЦИЯ ЗАПИСИ.
EEIN BTFSS FLAG,1 /ФЛАГ СЧИТЫВАНИЯМ? ПРОПУСТИТЬ
GOTO COUZIKLO ;ИНАЧЕ ИДЕМ.
BSF STATUS,C ;УСТАНОВИТЬ В 1.
MOVLW B'liioiiio ' ;ЗАПИСЬ-НУЛЕВОГО КАТОДА.
MOVWF ANOD
MOVLW 012H /ЗАПИСЬ НОМЕРА РЕГИСТРА ЕДИНИЦ МИНУТ.
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
EEIN1 BCF FLAG,5 ;0
COMF ANOD,0 /ЕСЛИ РАЗРЯДЫ СОВПАДАЮТ,
XORWF ATTZ,0 , (
BNZ EEIN3 /ИДЕМ СВЕТИТЬ ЗАПЯТУЮ.
BSF FLAG,5 /1
EEIN3
MOVFW SEGD /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА ДЛЯ ИНДИКАЦИИ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТУ в.
MOVFW ANOD /СВЕТЯЩИЙСЯ РАЗРЯД
MOVWF PORTA /В ПОРТ А.
BTFSC FLAG,5 /ЕСЛИ ФЛАГ =1,
BSF PORTA,4 /ВЫКЛЮЧИТЬ ЗАПЯТУЮ.
BTFSS FLAG,5 /ЕСЛИ ФЛАГ =0,
BCF PORTA,4 /ВКЛЮЧИТЬ ЗАПЯТУЮ.
EEIN4 INCF SEGD,F /+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
MOVLW B’01110111 ' /ЕСЛИ СВЕТИТСЯ КРАЙНИЙ РАЗРЯД,
XORWF ANOD,0 /ТО НЕТ УСТАНОВКИ РАЗРЯДА "С" В 1
BTFSC STATUS,Z /ЕСЛИ 0, ПРОПУСКАЕМ,
GOTO EEIN /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
BSF STATUS,C /УСТАНОВИТЬ В 1.
RLF ANOD,1 /СДВИГАЕМ ВЛЕВО.
GOTO EEIN1 9
; 15. ЧИСЛО ПРЕРЫВАНИЙ НА 10 СЕК, УСТАНОВКА И ИНДИКАЦИЯ.
0CAU1 BTFSC PORTA,4 /ЕСЛИ КНОПКА НЕ НАЖАТА,
GOTO ОС AU I /ИДЕМ НА ИНДИКАЦИЮ.
INCF CAU, 1 /+1
MOVLW .21 /ДО 20 НА 10 СЕК (ТЕМП!).
SUBWF CAU,0 /ЕСЛИ РАВНО 0, ТО
BZ OCAUO /ИДЕМ НА УСТАНОВКУ.
GOTO ОС AU I /ИЛИ НА ИНДИКАЦИЮ.
OCAUO MOVLW .1 /УСТАНАВЛИВАЕМ 1.
MOVWF CAU 9
ОС AU I CLRF H_HIGH 9
67
Устройства с цифровой индикацией
CLRF H_LOW /О НА МЕСТЕ ЧАСОВ.
MOVFW CALL GOTO . CAU M1U ATTGO /ИНДИКАЦИЯ НА МЕСТЕ МИНУТ. 9 9
; 16. ЗАВЕРШЕНИЕ'ПРЕРЫВАНИЯ.
ATTGO
BTFSC INTCON,2 /ЕСЛИ НЕТ ПРЕРЫВАНИЯ, ИДЕМ НА ИНДИКАЦИЮ
GOTO RETCONT /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
GOTO COUZIKLO /НА ИНДИКАЦИЮ.
; 17". ПП. ИНДИКАЦИИ С ВЫХОДОМ 0-7; 0-3.
COUZIKLO
BSF STATUS,C /УСТАНОВИТЬ В 1.
MOVLW B’11101110’ /ЗАПИСЬ НУЛЕВОГО КАТОДА.
MOVWF ANOD ;
BTFSC FLAG,1 /0? ПРОПУСТИТЬ.
GOTO eeIn /НЕТ, НА ИНДИКАЦИЮ ЗАПИСИ.
BSF INTCON,7
CLRF KATOD /ОБНУЛЯЕМ КАТОД 2-10.
MOVLW 012H /ЗАПИСЬ НОМЕРА РЕГИСТРА ЕДИНИЦ МИНУТ
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
GOTO COUZ 1
ZIKL
INCF KATOD,1 ;+1 В РЕГИСТР КАТОДА.
MOVLW B’00000100’ /ЗАПИСЬ ЧИСЛА 4.
SUBWF KATOD,0 /ПРОВЕРЯЕМ ЗНАЧЕНИЕ КАТОДА.
BZ COUZIKLO /ЕСЛИ РАВНО 0, ИДЕМ.
COUZ
INCF COUI,1 ;+1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
MOVLW .40 /40- ДЛЯ ОРГАНИЗАЦИИ МИГАНИЯ
SUBWF COUI,0 /ВЫБРАННОГО РАЗРЯДА.
BNZ COUZ3 /ЕСЛИ НЕ РАВНО 0, ИДЕМ.
GOTO COUZ1 /ИДЕМ, ЕСЛИ РАВНО НУЛЮ.
COUZ1
CLRF COUI /ОБНУЛИМ СЧЕТЧИК ЦИКЛОВ.
BTFSC FLAG,2 /ПРОПУСТИТЬ, ЕСЛИ 0,
GOTO COUZ2 9
BSF FLAG,2 9
GOTO COUZ3 9
COUZ2
BCF FLAG,2 /СБРОСИМ ФЛАГ ГАШЕНИЯ В 0.
COUZ3
BTFSS FLAG,2 /ПРОПУСТИТЬ, ЕСЛИ 1.
GOTO INDCO
MOVFW KATOD /СРАВНИМ НОМЕР КАТОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT, 0 /РАЗРЯДА МИГАНИЯ.
BNZ INDCO /ПЕРЕХОД ЕСЛИ НЕ НОЛЬ.
INDCG
MOVLW B’ 1111 ’ /ИНАЧЕ ГАСИМ ВСЕ КАТОДЫ
MOVWF PORTA /И ИДЕМ МЕНЯТЬ ЗНАЧЕНИЕ
GOTO INDC1 /СЕГМЕНТОВ (РАЗРЯД ПОГАШЕН).
68
Регистратор событий
INDCO MOVFW KATOD /ЕСЛИ РАЗРЯДЫ СОВПАДАЮТ,
SUBWF' ATT, 0 ;\
BNZ GDATA ;INDC /ИДЕМ СВЕТИТЬ С ЗАПЯТОЙ.
GDATA BSF FLAG,5 /ФЛАГ ЗАПЯТОЙ.
MOVFW SEGD /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА ДЛЯ ИНДИКАЦИИ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТУ В.
MOVFW ANOD f
MOVWF PORTA
BTFSC FLAG,5 /ЕСЛИ ФЛАГ =1,
BSF PORTA,4 /ВЫКЛЮЧИТЬ ЗАПЯТУЮ.
BTFSS FLAG,5 /ЕСЛИ ФЛАГ 4=0,
INDC1 BCF PORTA,4 /ВКЛЮЧИТЬ ЗАПЯТУЮ?
BCF FLAG,5
INCF SEGD, F /+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
MOVLW B’OlllOlll' /ЕСЛИ СВЕТИТСЯ КРАЙНИЙ РАЗРЯД,
XORWF ANOD,0 /ТО НЕТ УСТАНОВКИ РАЗРЯДА "С" В 1.
BTFSC STATUS,Z /ЕСЛИ 0, ПРОПУСКАЕМ.
GOTO INDO
INDO BSF STATUS,C /УСТАНОВИТЬ В 1.
RLF ANOD, 1 /СДВИГАЕМ ВЛЕВО.
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ИМПУЛЬСА УСТАНОВЛЕН,
GOTO INDCF /ИДЕМ ФОРМИРОВАТЬ ВЫХОДНОЙ ИМПУЛЬС.
GOTO ZIKL /ИНАЧЕ ИДЕМ СВЕТИТЬ.
; 18. ФОРМИРОВАНИЕ ВЫХОДНОГО ИМПУЛЬСА.
INDCF
BSF INTCON,5 /РАЗРЕШАЕМ ПРЕРЫВАНИЕ.
BSF STATUS,RPO /БАНК 1.
MOVLW B'00000000' /ВСЕ НА ВЫХОД, 7 РАЗРЯД ДАЕТ 0 НА ЕХЕ.
MOVWF TRISBA80H
BCF STATUS,RPO /БАНК 0.
BSF PORTB,7 /0
BCF INTCON,5 /ЗАПРЕЩАЕМ ПРЕРЫВАНИЕ.
INDCFN
BCF PORTB,7 /0
MOVLW .255 /255 ЦИКЛОВ ИНДИКАЦИИ ДЛИТЕЛЬНОСТЬ ИМПУЛЬСА
/ЕХЕ (0,8 СЕК).
INDCFNN
BCF PORTB,7 /0
ADDLW -1H
NOP
NOP
NOP
NOP
NOP
NOP
69
Устройства с цифровой индикацией
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP /
NOP
NOP
BZ INDCFO f
GOTO INDCFNN r
INDCFO
BSF PORTB,7 /ОЧИСТИМ ПОРТ, ЧТОБЫ HE ВЫЗВАТЬ НОВОГО ПРЕРЫВАНИЯ
BCF FLAG,0 ;0
NOP
NOP
BSF STATUS,RPO ;БАНК 1.
MOVLW B'10000000'
MOVWF TRISBA80H ;РАЗРЯД НА ВХОД.
BCF STATUS,RPO ;БАНК 0.
BCF INTCON,0 г
BSF INTCON,5
GOTO COUZIKLO /НА ИНДИКАЦИЮ.
; 19. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ РЕГИСТРОВ ПРИ ЗАПИСИ В ПАМЯТЬ.
ZAPISI
MOVWF W TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR TEMP
BTFSC PORTB,7 /0?
GOTO RECONST ; ' i
GOTO KEYC f
RECONST ;ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ
MOVFW STATUS_TEMP
MOVWF STATUS /РЕГИСТРОВ W И STATUS,
MOVFW FSR_TEMP /FSR.
MOVWF FSR /
MOVFW W TEMP
BCF INTCON,6 /ЗАПРЕТ ПРЕРЫВАНИЯ ПО ЗАПИСИ В ПАМЯТЬ.
BCF INTCON,0 /РАЗРЕШАЕМ ПРЕРЫВАНИЕ ПО ВХОДУ В.
BSF INTCON,7 /РАЗРЕШАЕМ ВСЕ ПРЕРЫВАНИЯ. .
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
70
Регистратор событий
; 20. ЗАПИСЬ В ПАМЯТЬ.
KEYC MOVLW .50 200 ЦИКЛОВ
KEYC1 ADDLW -1H :24 MS- ДЛЯ УСТРАНЕНИЯ ДРЕБЕЗГА
BTFSS STATUS, Z ; ;КОНТАКТОВ.
GOTO KEYCI
BTFSC PORTB,7 г ЕЩЕ НАЖАТА КНОПКА?
GOTO RECONST :НЕТ. .
BTFSC FLAG,3 УЖЕ ЕСТЬ ЗАПИСЬ 1?
GOTO RECONST ДА.
BTFSC FLAG,0 /ПРОШЕЛ ИМПУЛЬС EXE?
GOTO RECONST / НЕТ.
BSF FLAG,4 /ВКЛ. СЧЕТЧИК 10 СЕК.
INCF CAUK,1 /+1 В СЧЕТЧИК ПРЕРЫВАНИЙ.
BCF STATUS, Z
MOVFW CAUK /СРАВНИМ ВЫЧИСЛЕННОЕ ЗНАЧЕНИЕ
SUBWF CAU, 0 /С УСТАНОВЛЕНЫМ.
BZ ZAPIS ;=о
GOTO RECONST 9
ZAP IS CLRF CAUK /ОБНУЛЯЕМ СЧЕТЧИК ПРЕРЫВАНИЙ.
CLRF ACOU
BSF FLAG,0 /ФЛАГ EXE.
BSF FLAG, 3 /1
ZAPISO MOVLW OCH /АДРЕС ПЕРВОЙ ЗАПИСИ В EEDATA.
MOVWF ABCDE /ЧИСЛО, МЕСЯЦ, ЧАСЫ, МИНУТЫ.
ZAPISE MOVFW ABCDE ' /ПО КОСВЕННОЙ АДРЕСАЦИИ
MOVWF FSR >, ЗАГРУЖАЕМ ЗНАЧЕНИЕ
MOVFW INDF /РЕГИСТРА
MOVWF DMHM /ДЛЯ ЗАПИСИ.
MOVFW COUEE /СЧЕТЧИК АДРЕСА.
MOVWF EEADR 9
MOVFW DMHM 9
MOVWF EEDATA
BCF INTCON, GIE /ЗАПРЕТ ПРЕРЫВАНИЙ.
BSF STATUS, RPO /БАНК 1.
BSF EECON1A 8OH,WREN /РАЗРЕШЕНИЕ ЗАПИСИ.2
MOVLW 55H ;ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
MOVWF EECON2A 80H ,’/
MOVLW OAAH //
MOVWF EECON2A 80H //
BSF EECON1A 80H,WR /ПРИ ЗАПИСИ ВО ФЛЕШ ПЗУ.1
ZAPIZ BTFSS EECON1A 80Н,4 /ПОКА НЕ БУДЕТ ЗАПИСИ
GOTO ZAPIZ /ХОДИМ ПО КРУГУ.
BCF INTCON, 6 /ЗАПРЕТ ПРЕРЫВАНИЯ ПО ЗАПИСИ В ПАМЯТЬ
BCF EECONli ,80Н, 4 9
BCF EECON1A 8ОН,WREN /ЗАПРЕТ ЗАПИСИ.2
BCF STATUS, RP0 /БАНК 0.
INCF COUEE,1 /+1 В СЧЕТЧИК АДРЕСА.
71
Устройства с цифровой индикацией
MOVFW COUEE f
SUBLW .64 f
BZ EECNOO
INCF ACOU,1 ;+1 В СЧЕТЧИК ЦИКЛА.
MOVLW .4 /0-3.
SUBWF ACOU,0 t
BZ EECNOOO
INCF ABCDE,1 ;+1 В СЧЕТЧИК АДРЕСА.
GOTO ZAPISE /ПО КРУГУ ДО КОНЦА ЗАПИСИ
EECNOO
CLRF COUEE /ОБНУЛЯЕМ СЧЕТЧИК ЗАПИСИ.
EECNOOO
CLRF ACOU
GOTO RECONST /ЗАВЕРШИТЬ ПРЕРЫВАНИЕ.
; 21. ПП. .ПЕРЕКОДИРОВКИ 2-_-2-10.
BINDECll .10 /ПЕРЕКОДИРОВКА С БИНАРНОГО В 2-10 КОД /10 >W.
MOVLW
BDH BSF STATUS,0 /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS.
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDECL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH ;ПОВТОРИТЬ.
BINDECL MOVF DSMH,0
ADDLW .10 ,-10+W >w.
MOVWF RETURN LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.. Г
; 22. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
COUNT
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
MOVLW B'llllllll' /ГАШЕНИЕ ИНДИКАЦИИ НА ВРЕМЯ ПРЕРЫВАНИЯ.
MOVWF PORTA /ПОСЛЕ ОНА САМА ВОССТАНОВИТСЯ.
MOVWF PORTB
BSF STATUS,RPO /БАНК 1.
MOVLW B'00010000' /RA4 РАЗРЕШАЕМ ВХОД НА ВРЕМЯ ПРЕРЫВАНИЯ.
MOVWF TRISAA80H
MOVLW B'lOOOOllO' /РАЗРЕШАЕМ ВХОДА НА ВРЕМЯ ПРЕРЫВАНИЯ (В1, В2, В7)
MOVWF TRISBA80H
BCF STATUS,RPO /БАНК 0.
GOTO KEY
RETCONT. /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
BSF STATUS,RPO /1 БАНК.
MOVLW B'10000000' /ВСЕ ВЫХОДЫ, В7- ВХОД.
MOVWF TRISBA80H
MOVLW B'00000000' /ВСЕ ВЫХОДЫ.
MOVWF TRISAA80H Г
72
Регистратор событий
BCF EECON1A80H,4
BCF STATUS,RPO /БАНК 0.
BCF INTCON,6
BCF INTCON,2 ;СБРОС ФЛАГА (TOIF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА ;(РАЗРЕШАЕМ ПРЕРЫВАНИЯ).
MOVFW STATUS TEMP ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
MOVWF STATUS /РЕГИСТРОВ W И STATUS,
MOVFW FSR TEMP /FSR. -
MOVWF FSR f
MOVFW W TEMP
RETFIE. /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 23. СЧЕТ И ПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С, ДНИ-МЕСЯЦЫ.
S1 BTFSS FLAG,4 /ОТСЧЕТ 10 СЕК НАЧАТ?
GOTO SIS / НЕТ.
INCF CAUCOU,1 /ДА, .+ 1.
MOVFW CAUCOU
SUBWF COUIOS,0 /СЧЕТЧИК 10 СЕКУНД ПОЛОН?
BZ SUNT ;ДА.
GOTO SIS / НЕТ.
SUNT CLRF CAUCOU /ОБНУЛЯЕМ.
CLRF CAUK 1/
BCF FLAG,4 /СБРОСИМ ФЛАГ 10 СЕК.
SIS MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,F /ПРИБАВИТЬ 1 В СЕКУНДЫ.
RETURN f
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
BTFSS FLAG,3 /ЕСТЬ ЗАПИСЬ?
GOTO M1M /ДА, ПРОПУСКАЕМ.
INCF MIN10,1 /+1 В СЧЕТЧИК 10 МИН.
MOVFW MIN10 /СРАВНИМ ЗНАЧЕНИЯ.
SUBWF COUIOM,0
BZ MIO /10 МИН. ПРОШЛО? ИДЕМ ОБНУЛЯТЬ,
GOTO M1M /ИНАЧЕ УСТАНАВЛИВАЕМ МИНУТЫ.
MIO CLRF MIN10
BSF FLAG,0 /ИМПУЛЬС ЕХЕ ВЫДАЕТСЯ ПО ОКОНЧАНИЮ МИН. ЦИКЛА
BCF FLAG,3 /СБРОСИМ ФЛАГ ЗАПИСИ.
M1M MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MINI,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /MINI >W.
M1U MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
73
Устройства с цифровой индикацией
MOVWF MOVFW M_LOW HSMH ;W > M_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ. /HSMH >W ВРЕМЕННЫЙ.
MOVWF M_HIGH ;W > M_HIGH В РЕГИСТР ИНДЙКАЦИИ ДЕСЯТКОВ МИНУТ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH t
RETURN f
Hl
CLRF MINI ;ОБНУЛЯЕМ РЕГИСТР МИНУТ.
CLRF M_LOW /ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ.
CLRF M_HIGH /ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ.
H1H
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
MOVFW HOU1 ,-HOU >W.
H1U
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF H_LOW ,'W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF H_HIGH ,'W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH f
RETURN г
H10
CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF H_LOW /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF H_HIGH /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
DIH
CALL DAYMON /СКОЛЬКО ДНЕЙ В МЕСЯЦЕ?
SUBWF DAY1,0 /УЖЕ КОНЕЦ МЕСЯЦА?
BZ DOI /ДА. ИДЕМ УСТАНАВЛИВАТЬ.
INCF DAY1,F /НЕТ. +1 К ЧИСЛАМ.
RETURN
DOI
MOVLW 01H /УСТАНОВКА В 1
MOVWF DAY1 /ЧИСЛА (0- ЧИСЛА НЕТ).
MO1H
INCF MON, F /+1 В МЕСЯЦ
MOVFW MON
ADDLW -ODH /УЖЕ 12 МЕСЯЦЕВ?
BZ MOO /ДА.
RETURN
MOO
MOVLW 01H /УСТАНОВИМ 1 МЕСЯЦ (0-НЕТ).
MOVWF MON • f
RETURN
END
74
Автомобильный цифровой тахометр
Автомобильный цифровой тахометр
Этот тахометр предназначен для использования при регулировке холостого
хода карбюраторов двигателей внутреннего сгорания. Его можно применять и
для контроля частоты вращения вала автомобильных или лодочных двигателей
во время движения.
Принцип работы заимствован из статьи А. Бирюкова [4]. Для увеличения
точности измерения оборотов введен предел измерения 3 секунды.
Тахометр имеет три разряда индикации с пределом измерения от 60 мин-1
до 7800 мин-1. Погрешность измерения на пределе 1 секунда равна 30 мин-1, а
на пределе 3 секунды — 10 мин-1. Нижний предел ограничен погрешностью
измерения, а верхний — количеством прерываний между индикацией. Из-за
чего индикация разрядов становится прерывистой.
В статье-прототипе указана неверная формула [(2N х 3)/60] для вычисления
частоты вращения коленчатого вала. Поскольку за один оборот коленчатого ва-
ла двигателя происходит два искрообразования, то мы подсчитываем за одну
секунду 2N импульсов. То есть в два раза большее количество, чем произошло
оборотов (N). Чтобы получить значение оборотов в минуту, необходимо умно-
жить значение оборотов за секунду на 60 (Ns х 60 = Nm). Так как мы цодсчиты-
ваем число импульсов не N, a 2N, то умножать нужно уже не на 60, а на 30.
А поскольку аппаратно мы отбрасываем разряд единиц, то фактически делим
значение оборотов на 10. Из этого следует расчетная формула:
Nm = 2NS х 3 мин-1. Где Nm — значение оборотов в минуту, 2NS — число импу-
льсов с прерывателя за одну секунду. Если подсчитывать число импульсов за 3
секунды, то Nm = 2NS мин-1. Таким образом, подсчитанное число импульсов за
секунду достаточно умножить на 3 и перекодировать в двоично-десятичное,
чтобы получить значение оборотов в минуту без единиц. А на пределе 3-х се-
кунд просто перекодировать полученное значение. Показания индикатора, рав-
ные 100, будут соответствовать значению 1000 мин-1.
Тахометр реализован на одной микросхеме микроконтроллера PIC16F84A.
Алгоритм программы тахометра представлен на рис. 16. После включения пи-
тания происходит начальная инициализация всех регистров с последующей ин-
дикацией. После инициализации вступает в работу таймер TMR0. Таймер име-
ет коэффициент деления, равный 256, что вместе с предделителем, имеющим
коэффициент деления, равный 32, и циклом процессора, равным 4, дает пре-
рывания каждую секунду (4 х 32 х 256 = 32768).
При замыкании контактов прерывателя с входа RB0 также происходит пре-
рывание. При прерывании сохраняются значения регистров, задействованных
на момент прерывания, и определяется происхождение прерывания. Если пре-
рывание с входа RB0, то двоичный 16-разрядный счетчик увеличивается на
единицу. Таким образом, подсчитывается количество прерываний с входа RB0
между прерываниями от переполнения таймера, то есть за 1 секунду. Каждое
прерывание заканчивается восстановлением ранее сохраненных значений реги-
стров, и процессор переключается на работу с индикацией.
Если прерывание произошло по переполнению таймера, то определяется
состояние переключателя предела измерения и, если переключатель на пределе
75
Устройства с цифровой индикацией
Рис. 16. Алгоритм программы тахометра
одной секунды, двоичное значение 16-разрядного счетчика умножается на 3
(2N х 3). 16-разрядный счетчик обнуляется, готовясь к новому циклу измере-
ния. Полученное двоичное значение перекодируется в трехразрядное двоич-
но-десятичное число и переписывается в регистры индикации. После восста-
новления значений регистров индикация происходит с новыми данными. То
есть индикация обновляется каждую секунду.
Если установлен предел измерения, равный 3 секундам, то при переполне-
нии таймера значение счетчика секунд увеличивается на единицу. Если значе-
ние счетчика секунд еще не равно трем, прерывание завершается без обнуле-
ния 16-разрядного счетчика. В противном случае в 16-разрядном счетчике на-
капливается количество прерываний с входа RB0 за три секунды. Это значение
перекодируется в двоично-десятичное число и переписывается в регистры ин-
дикации. Двоичный счетчик обнуляется и цикл повторяется. В данном случае
индикация обновляется каждые три секунды.
76
Автомобильный цифровой тахометр
Схема тахометра показана на рис. 17. Входной сигнал с контактов прерыва-
теля стабилизируется стабилитроном VD1 на уровень ТТЛ и подается на вход
RB0. При бесконтактной системе зажигания сигнал снимается с выхода комму-
татора, выдающего перепад напряжения 3 В. Этого напряжения достаточно для
срабатывания микроконтроллера.
R1 36 к
PR
VD1 22
КС147А
2
3
17
18
DD1
PIC16F84A
MCLR
RA0
RA1
RA2
RA3
14,
—Писс
-MPGND
16 ---
OSC1
ср и
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
OSC2
ZQ1 32768 Гц
6 PR
10 D
11 Е
12 F
13 G
15
С1
30
С2
30
о о
U. U.
HG1-HG3
АЛ304Г
R
DA1
+12 В
3
KP142EH5AF
2
сз
0,01
R3-R9
430
1s
SA1
R2 Юк
-12 В
VD2
КД 102
4
8 В
2
R
2
9 С
О
ц
Рис. 17. Автомобильный цифровой тахометр
Входы RA0-RA2 коммутируют аноды светодиодов, реализуя динамиче-
скую индикацию. Вход RA3 нагружен переключателем предела измерения
«Is—3s». Внутренние подтягивающие резисторы программно отключены, но
ими снабжены только входы «В» микроконтроллера, поэтому возникла необ-
ходимость в установке резистора R2. Входы RBI—RB7 использованы для
вывода значений сегментов. Поскольку микроконтроллер работает при верх-
нем питающем напряжении 6 В, то микросхему стабилизатора напряжения
КР142ЕН5 можно взять с любой буквой, обеспечивающей это напряжение.
Потребляемый тахометром ток около 25 мА, поэтому микросхема стабилиза-
тора напряжения не нуждается в радиаторе. Диод VD2 защищает прибор от
переполюсовки. Если тахометр будет использоваться при регулировке кар-
бюраторов, то светодиоды АЛ304Г нежелательно заменять индикаторами с
большими размерами цифр.
Топология печатной платы и расположений элементов на ней показаны на
рис. 18. Печатная плата может быть выполнена на одностороннем фольгиро-
ванном стеклотекстолите, однако лучше сделать ее из двухстороннего стекло-
текстолита. Фольгу со стороны установки элементов необходимо использо-
вать в качестве экрана, раззенковав отверстия установки элементов сверлом
большего диаметра. Это улучшит помехозащищенность прибора, Особенно ес-
ли высоковольтные провода двигателя имеют микротрещины. После монтажа
элементов выводы кварцевого резонатора ZQ1 и микросхемы стабилизатора
DA1 изгибают так, чтобы резонатор и микросхема были параллельны плате.
77
Устройства с цифровой индикацией
42,5
Рис. 18. Автомобильный цифровой тахометр.
Печатная плата
Рис. 19. Тахометр. 3-х разрядный индикатор на
АЛ304Г. Сторона установки светодиодов
Печатная плата индикаторов со стороны их установки показана на рис. 19.
Пунктирными линиями обозначены проводники, идущие с обратной стороны
платы. При монтаже и пайке выводов с изгибом по краю корпуса необходимо
действовать аккуратно и быстро, чтобы не повредить соединение внутри пласт-
массового корпуса светодиода. Для желающих на плате предусмотрен вывод
сегмента запятой во втором разряде, чтобы отделить значение тысяч. Его необ-
ходимо подключить через резистор 430—510 Ом на минус 5 В.
Тахометр в настройке не нуждается. Только необходимо перед установкой
проверить кварцевый резонатор на соответствие его номинальной частоте.
В противном случае придется корректировать частоту автогенератора в готовом
приборе параллельным или последовательным подключением к кварцу конден-
саторов, что не предусмотрено конструкцией платы.
Проверку работоспособности тахометра можно выполнить при помощи
любого низкочастотного импульсного генератора. Зависимость частоты Fru от
показаний тахометра N следующая: Fru х 3 = N. И наоборот, чтобы иметь
представление о частоте вращения коленчатого вала в герцах, необходимо по-
казания тахометра разделить на три. Например, если подать на вход тахометра
частоту 100 Гц, то показания индикатора должны быть равны 300, что соот-
ветствует 3000 мин-1. При показании тахометра, равном 150 (соответствует
1500 мин-1), частота вращения коленчатого вала в герцах будет равна 50 Гц.
Для определения частоты вращения двухцилиндровых двигателей, например
автомобилей «Ока», показания тахометра необходимо умножать на два.
; АВТОМОБИЛЬНЫЙ ТАХОМЕТР С ТРЕМЯ РАЗРЯДАМИ ИНДИКАЦИИ.
; ВРЕМЯ ИЗМЕРЕНИЯ 1 И 3 СЕКУНДЫ.
; ПОГРЕШНОСТЬ ИЗМЕРЕНИЯ В РЕЖИМЕ 1 СЕК. - 30 ОБ./МИН.
; В РЕЖИМЕ 3 СЕК. - 10 ОБ./МИН.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; РАЗРАБОТКА Н.ЗАЕЦ.
; ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
78
Автомобильный цифровой тахометр
♦INCLUDE P16F84A.INC
__CONFIG 3FFC
/ 11111111111100
; 0,1-РАЗРЯДЫ ГЕНЕРАТОРА, 00- 32-200,КГЦ.
/ 2- WDTE, 1- ВКЛ.
; 3- PWRTE, 1- ВКЛ.
; 4-13 ЗАЩИТА КОДА. 1- НЕТ ЗАЩИТЫ.
•====:======================================== *
; ПОДСЧЕТ ИМПУЛЬСОВ С ПРЕРЫВАТЕЛЯ ПРОИЗВОДИТСЯ 1 СЕКУНДУ.
; ЗА 1 ОБОРОТ КОЛЕНВАЛА ПРОХОДИТ ДВА ИМПУЛЬСА. ЗНАЧЕНИЕ В СЧЕТЧИКЕ БУДЕТ
; 2N ЗА СЕКУНДУ. ЗА МИНУТУ НАДО УМНОЖИТЬ НА 60. НА 10 МЫ ДЕЛИМ АППАРАТНО,
; УБРАВ РАЗРЯД ЕДИНИЦ. НА 2 УМНОЖЕНИЕ КОНСТРУКТИВНОЕ - 2 ИМПУЛЬСА ЗА.1
ОБОРОТ.
; ПОЛУЧИМ: Nx60=>2Nx3=n ОБ/МИН. 1 СЕК. ПОЛУЧАЕМ С TMR0, С ПРЕДДЕЛИТЕЛЕМ
К=32:
; 256x32x4=32768. ПОДСЧЕТ ЗА 3 СЕКУНДЫ НЕПОСРЕДСТВЕННО ИДЕТ НА ИНДИКАЦИЮ.
• ======:=:=== ==s= =================================
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ.
INDF EQU ООН /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TMR0 EQU 01Н ;TMR0.
OPTION_REG EQU 81Н /OPTION (RP0=l).
РС EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
DESI SOTI TUSI EQU EQU EQU 010Н 011Н 012Н /ДЕСЯТКИ ИНДИКАЦИИ. /СОТНИ. ;ТЫСЯЧИ.
; РЕГИСТРЫ ДЛЯ ОРГАНИЗАЦИИ ИНДИКАЦИИ.
ANOD SEGD EQU EQU 013Н , 014Н , ;АНОД. Г СЕГМЕНТЫ.
; ВРЕМЕННЫЕ :, ДЛЯ ХРАНЕНИЯ ПРИ ПРЕРЫВАНИИ. \
W_TEMP EQU 015H
STATUS_TEMP EQU 016H
FSR_TEMP EQU 017H
/БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
/БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
/ВРЕМЕННЫЙ ДЛЯ FSR.
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ СЧЕТА.
DES EQU 018H /МЛАДШИЙ РАЗРЯД РЕГИСТРА СЧЕТА
SOT EQU 019H* /СТАРШИЙ РАЗРЯД.
SEC EQU 01 AH /СЕКУНДЫ.
SOTU EQU 01BH /ВРЕМЕННЫЙ РЕГИСТР.
79
Устройства с цифровой индикацией
; ОСНОВНАЯ ПРОГРАММА.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 1. ИНИЦИАЛИЗАЦИЯ ’
INIT
BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF CLRF CLRF CLRF CLRF CLRF CLRF CLRF CLRF STATUS,5 В’11000100’ OPTION_REGA80H В' 10110000' INTCON В ’ 00011000 • TRISAA80H В ’ 00000001’ TRISBA80H STATUS,5 TtfRO DESI DES SOTI SOT SOTU TUSI SEC /ПЕРЕХОДИМ В БАНК 1. ;ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100, /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВЫКЛЮЧЕНЫ, ФРОНТ ;НАРАСТАНИЯ. /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА /И ИЗМЕНЕНИЮ ВХОДНОГО СИГНАЛА ПОРТА В. / RA0-RA2 НА ВЫХОД, RA3, РА4-ВХОД. / RB0 НА ВХОД, РВ1-ДВ7-ВЫХОД. /ПЕРЕХОДИМ В БАНК 0. /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ. /
/ 2. ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ КНОПОК И ФЛАГОВ.
Г KEY BTFSS GOTO BCF BTFSS GOTO INTCON,2 INDZIKL0 INTCON,2 PORTA,3 THREES /ЕСЛИ НЕТ ПРЕРЫВАНИЯ, /ИДЕМ НА ИНДИКАЦИЮ. /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ /(РАЗРЕШАЕМ ПРЕРЫВАНИЯ). /ЕСЛИ КНОПКА НАЖАТА, /ИДЕМ СЧИТАТЬ СЕКУНДЫ. ТАЙМЕРА
,; 3. УМНОЖЕНИЕ ЗНАЧЕНИЙ ; НА 3.
/ MOVFW ADDWF BTFSC INCF BCF ADDWF BTFSC INCF MOVFW ADDWF ADDWF MOVFW DES DES, 0 STATUS,0 SOTU,1 STATUS,0 DES, 1 STATUS,0 SOTU,1 SOT SOT, 0 SOT, 1 SOTU /МЛАДШИЙ РАЗРЯД. /1 + 1 /ЕСЛИ НЕТ ПЕРЕНОСА, - /+1 В СТАРШИЙ РАЗРЯД. ; 0 . /2 + 1. /ЕСЛИ НЕТ ПЕРЕНОСА, /+1 В СТАРШИЙ РАЗРЯД. /СТАРШИЙ РАЗРЯД. /1 + 1.' /2 + 1. /ПРИБАВИМ ПЕРЕНОС ИЗ МЛАДШЕГО РАЗРЯДА.
80
Автомобильный цифр9вей тахометр
ADDWF SOT,1 /ЗАПИШЕМ В СТАРШИЙ РАЗРЯД. /ОБНУЛИМ ВРЕМЕННЫЙ.
CLRF SOTU
; 4. ПЕРЕКОДИРОВКА ИЗ 16 -И РАЗРЯДНОГО 2-ГО В 3-Х РАЗРЯДНОЕ 2-10-Е.
RAS
CLRWDT
CLRF DESI /ОБНУЛИМ РЕГИСТРЫ ИНДИКАЦИИ.
CLRF SOTI
CLRF TUSI
BCF STATUS, 2 t /ОЧИСТКА БИТА "Z" РЕГИСТРА STATUS.
TSTF SOT /ПРОВЕРИМ НА НОЛЬ.
BZ RAS1 /ЕСЛИ РАВНО, ИДЕМ.
RASO
MOVLW 64 /100.
RAS2
BSF STATUS, 0 , /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS.
RAS3
SUBWF DES,1 BNC BINDES /ВЫЧИТАЕМ ИЗ РЕГИСТРА 100 > DES. /ПЕРЕХОД ЕСЛИ ПЕРЕНОС.
INCF TUSI,1 GOTO RAS3 BINDES /ПРИБАВИМ 1 К ТЫСЯЧАМ РЕГИСТРА ИНДИКАЦИИ. ;ПОВТОРИТЬ. *
CLRWDT
BCF STATUS, TSTF SOT BZ RAD DECF SOT,1 2 , /ОЧИСТКА БИТА "Z" РЕГИСТРА STATUS. /ПРИВЕРИТЬ РЕГИСТР НА НОЛЬ. /ЕСЛИ 0, ИДЕМ. /ВЫЧЕСТЬ ИЗ РЕГИСТРА 1.
INCF TUSI,1 GOTO RAS2 /ПРИБАВИМ 1 К ТЫСЯЧАМ РЕГИСТРА ИНДИКАЦИИ. ;ПОВТОРИТЬ.
RAD
ADDWF DES,1 MOVLW .10 /ВОССТАНОВИМ ДЕСЯТКИ (В АКК. - 100) . /10.
BSF STATUS, RADO SUBWF DES,1 BNC BINDED INCF SOTI,1 GOTO RADO 0 , /ОЧИСТКА БИТА "С" РЕГИСТРА STATUS. /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DES. /ПЕРЕХОД, ЕСЛИ ПРОПАЛ ПЕРЕНОС. /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ. /ПОВТОРИТЬ.
BINDED
ADDWF DES,0 MOVWF DESI CLRF DES CLRF SOT GOTO RECONST /+10. /ЗАПИШЕМ В РЕГИСТР ИНДИКАЦИИ. ( /ОБНУЛИМ.
RAS1
BCF STATUS, TSTF DES BZ RECONST GOTO RASO / 5. ТРИ СЕКУНДЫ. 2 /ОЧИСТКА БИТА "Z" РЕГИСТРА STATUS. /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА = 0, /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ, /ИНАЧЕ ИДЕМ СЧИТАТЬ.
;===================м===
THREES
MOVLW -2
81
Устройства с цифровой индикацией
ADDWF SEC, 0 /ЕСЛИ УЖЕ 2 СЕКУНДЫ,
BZ THREES0 ;ОБНУЛЯЕМ,
INCF SEC, 1 /ИНАЧЕ +1 В СЕКУНДЫ
GOTO RECONST
THREES0 CLRF SEC ;СБРОС.
GOTO RAS /ИДЕМ СЧИТАТЬ.
; 6. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО АНОДА.
SEGDATA /7, 6, 5, 4, 3, 2, 1, 0.
ADDWF PCL, F ;G, F, E, D, C, B, A, PR
АНОД КАТОД
RETLW B’lOOOOOOl’ / о B'01111111'
RETLW B'11110011' ; 1 B'00001101'
RETLW B'01001001' / 2 B'10110111'
RETLW B'01100001' ; 3 B'10011111'
RETLW B'00110011' ; 4 B'11001101'
RETLW B'00100101' / 5 B'11011011'
RETLW B'00000101' ./ 6 B\iinioii'
RETLW B'11110001' /' 7 B'00001111'
RETLW B'00000001' / 8 B'llllllll'
RETLW B'00100001' / 9 B'11011111'
; 7. ИНДИКАЦИЯ.
INDZIKL0
CLRWDT
CLRF ANOD /ОБНУЛЯЕМ АНОД, ЧТОБЫ ОЧИСТИТЬ СТАРШИЕ РАЗРЯДЫ
BSF INTCON,7 /ЧТОБЫ НЕ ПРОПУСТИТЬ ПРЕРЫВАНИЕ.
BSF ANOD,0 /УСТАНОВИМ МЛ. РАЗРЯД АНОДА.
MOVLW 010H /ЗАПИСЬ НОМЕРА РЕГИСТРА МЛ. РАЗРЯДА
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
INDZIKL1
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТ В.
MOVFW ANOD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ АНОДА.
MOVWF PORTA /В ПОРТ А.
CALL REST /НА ОТДЫХ.
BCF STATUS,0 /ОБНУЛИМ.
RLF ANOD,1 /+1 В РЕГИСТР АНОДА.
BTFSC ANOD,3 /ЗАПИСЬ ЧИСЛА 3.
GOTO INDZIKL0 /ЕСЛИ РАВНО 0, ИДЕМ,
CLRWDT /ВРЕМЯ ТАЙМЕРА - 18 МС.
INCF SEGD,F /+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
MOVFW SEGD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ
GOTO INDZIKL1 /И ИДЕМ.
REST .
MOVLW .10 /ЗАДЕРЖКА В 41 ЦИКЛ.
82
Автомобильный цифровой тахометр
RESTO
ADDLW -01H ;ВРЕМЯ НА ГОРЕНИЕ СЕГМЕНТА
BTFSS STATUS,2 ;64 ЦИКЛА=7,81 МСЕК.
GOTO RESTO ;ЗАЦИКЛИВАЕМСЯ. /
RETURN
; а— х=
; 8. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
BCF INTCON,7 ;ЗАПРЕТ ПРЕРЫВАНИЙ.
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS ;STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
BTFSC INTCON,1 /ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДУ В,
GOTO DES1 /+1 В РЕГИСТРЫ СЧЕТА.
GOTO KEY /ИНАЧЕ ИДЕМ НА ОПРОС КЛАВИАТУРЫ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR / FSR,
MOVFW W_TEMP /W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 9. СЧЕТ.
DES1
MOVFW DES /ЗАГРУЗКА ЗНАЧЕНИЙ МЛ. РАЗРЯДА В РАБ. РЕГИСТР
SUBLW OFFH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 255.
BZ SOT1 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ,
INCF DES,F /ИНАЧЕ ПРИБАВИТЬ 1 В РЕГИСТР МЛ. РАЗРЯДА.
BCF INTCON,1 /СБРОС ФЛАГА ПРЕРЫВАНИЯ.
GOTO RECONST 9
SOT1
CLRF DES /ОБНУЛЕНИЕ РЕГИСТРА МЛ. РАЗРЯДА.
MOVFW SOT /ЗАГРУЗКА СТ. РАЗРЯДА В РАБ. РЕГИСТР.
SUBLW OFFH • ' ' /ВЫЧЕСТЬ'ИЗ РЕГИСТРА 255.
BZ FALSH /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ЗНАЧИТ ОШИБКА.
INCF SOT, F /ПРИБАВИТЬ 1 В СТ. РАЗРЯД.
BCF INTCON,1 /СЦРОС ФЛАГА ПРЕРЫВАНИЯ.
GOTO RECONST 9
FALSH
CLRF SOT /ОБНУЛЯЕМ.
CLRF DES
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
/
END
83
Устройства с цифровой индикацией
Программатор
После публикации статьи [3] автору пришло много писем по электронной
почте с просьбой расширить функциональный диапазон часов. Идя навстречу
всем пожеланиям, получилась эта разработка. Хотя микроконтроллеры, по су-
ти, являются однокристальными мини-ЭВМ с возможностью программирова-
ния в устройствах специального назначения, имеется возможность сделать их
многофункциональными. Также, как и в данной работе, многофункциональ-
ность программы микроконтроллера иногда ставит в затруднительное положе-
ние при определении ее названия. Назвать часами с будильником эту разработ-
ку уже нельзя (хотя она может выполнять такую функцию), поскольку 32 раза
просыпаться за один день — это многовато. Можно было бы назвать: «Устрой-
ство для- периодического включения и выключения вентилятора (нагревателя,
холодильника, освещения, бытовых приборов...)». Я остановился на програм-
маторе потому, что эта разработка, на мой взгляд, идеально подходит для про-
граммирования звонков в учебном заведении или программирования расписа-
ния дня.
В энергонезависимую память программатора можно записать 32 значения
времени, в которые включится (выключится) исполнительное устройство. Ди-
скретность установки — 1 минута. Поскольку исполнительный устройств мо-
жет быть много, то для определенности будем называть их просто будильни-
ком. Будильники имеют следующие режимы звонков:
• непрерывный режим — непрерывное звучание будильника (читай: работа
устройства) от одного запрограммированного времени до следующего, за-
тем пауза до следующего установленного времени и т. д.;
• режим 1 минута — звучание будильника 1 минуту;
• режим 5 секунд — звучание будильника 5 секунд;
* режим 1 секунда — звучание будильника 1 секунду.
Имеется возможность устанавливать ограничения работы будильников по
дням:
• работа будильников все дни;
• работа все дни, кроме 6 и 7 дня;
• работа все дни, кроме 7 дня;
• отключение всех будильников.
Кроме этого в программаторе имеются следующие режимы работы:
• обнуление всех установок будильников;
• коррекция хода часов за неделю в пределах ±4 сек;
• ручная установка часов по сигналам точного времени;
• ежедневная автоустановка часов по сигналам точного времени в диапазо-
не времени ±10 секунд от полуночи;
• установка и индикация дней недели;
• работа индикации в попеременном режиме: индикация текущего времени
10 секунд, затем индикация значения запрограммированного времени бу-
дильника, следующего за сработавшим, — 2 сек. *
Естественно, все цифровые значения можно легко изменить в программе
под конкретные требования.
84
Программатор
Рис. 20. Алгоритм работы программы программатора
Для выполнения всех перечисленных возможностей пришлось полностью
изменить программу микроконтроллера, хотя принципиальная схема от такой
переработки пострадала мало. Рассмотрим укрупненный алгоритм работы про-
граммы, который представлен на рис. 20.
После пуска и выполнения всех предварительных установок включается
предделитель с коэффициентом деления, равным 16. По переполнению тайме-
ра TMR0, имеющего коэффициент деления 256, происходит прерывание и ин-
крементируется регистр делителя на 250. Если регистр делителя переполняет-
ся, последовательно инкрементируются значения регистров секунд, минут, ча-
сов и дней. Таким образом, с учетом машинного цикла общий коэффициент
деления составляет 4 х 16 х 256 х 250 = 4096000. То есть, регистр секунд инк-
рементируется с частотой 1 секунда. После инициализации программа перехо-
дит на индикацию нулевого разряда. Нулевым разрядом считается младший,
т. е. разряд единиц секунд. Индикация всех разрядов происходит одинаково, и
достаточно подробно рассмотреть индикацию нулевого разряда. Сначала зна-
чение нулевого регистра индикации переписывается во временный регистр
индикации. Временной регистр в подпрограмме индикации дополняется, в
случае необходимости, установкой запятой и включения будильника. После
выполнения подпрограммы индикации процессор переходит к выполнению
85
Устройства с цифровой индикацией
функций программатора, которые установлены после этого разряда. Закончив
работу по сравнению и установкам, программа ожидает прерывания. После
отработки прерывания вся процедура повторяется со следующим разрядом.
После последнего, пятого, разряда программа возвращается к индикации ну-
левого разряда. Таким образом, индикация каждого разряда постоянна и длит-
ся 1/250 секунды, т. е. 4 мс. За это время можно выполнить 4096 команд.
Чтобы не загружать выполнением всех функций программатора после одно-
го разряда, они распределены следующим образом:
• в нулевом разряде происходит сравнение установленных значений буди-
льников с текущим временем:
• в первом разряде проверяется запрет будильников по дням;
• во втором разряде проверяется значение часов на автоустановку по сигна-
лам точного времени в полночь;
• в третьем разряде проверяется состояние кнопок и выполняются установ-
ки по нажатым кнопкам;
• в четвертом разряде происходит смена индикации при изменении режима
работы.
На каждую из перечисленных функций можно нарисовать свой алгоритм
работы^ но ничего интересного они не будут представлять. Единственное, на
что можно обратить внимание, это запись в память 64 регистров информации с
регистров, которые по количеству превышают флэш-память в два раза. Поско-
льку во всех регистрах записи занято только 4 разряда из восьми, то при записи
в память старшие 4 разряда занимают десятки (минут, часов), а в младшие
4 разряда записывается значение единиц. Сравнение записанных значений вре-
мени с текущими производится в том же формате, что значительно экономит
ресурсы при проверке всей флэш-памяти. Чтобы не возникало путаницы при
считывании и записи, значения минут записываются в память с номером от
0 до 31. А значение часов увеличено на 32. Сначала проверяется совпадение
минут, затем, если произошло совпадение, проверяется адрес, увеличенный на
32, на совпадение часов.
Принципиальная схема программатора показана на рис. 21. Как видно, она
мало отличается от схемы в [3] и, если вы уже сделали часы, то минимальные
доработки позволят вам сделать программатор. В том и преимущество микро-
контроллеров, что, изменив программу, можно придать устройству совершенно
новые потребительские свойства. Эта схема оставлена из-за своей универсаль-
ности, т. е. возможности установки различных семисегментных индикаторов.
Для этого необходимо только заменить микросхемы дешифраторов, как это хо-
рошо описано в различной литературе [2].
Выводы RAO—RA2 микроконтроллера используются для вывода 2-10 кода
сегментов, а выводы RBI—RB4 — кода разряда. Вывод RB5 запрограммирован
для вывода запятой. Вывод RB6 используется для выхода потенциала на испол-
нительное устройство. Выводы RB7, RA3, RA4 используются как входы уста-
новки соответственно: записи, разряда, установки. Вывод установки ALA испо-
льзуется для включения будильника. Вывод RB0, который в часах применялся
для гашения, имеет постоянный нулевой потенциал для разрешения работы
микросхемы мультиплексора DD3. Гашение в программе не используется, но
выход оставлен для преемственности схемы. В связи с увеличением числа
86
Программатор
команд поставлен высокочастотный кварц на частоту 4,096 МГц. При этом
скорректированы значения конденсаторов С1 и С2.
Для подключения сильноточной нагрузки через промежуточное реле уста-
новлен транзистор VT7, работающий в ключевом режиме. Для контроля вклю-
чения нагрузки или для будильника может служить звуковой излучатель
НСМ1206х с частотой излучения около 2 кГц. Резервное питание от двух эле-
ментов типа А10—А12 или типа ААА.
Работа с программатором
Кнопка «Разряд» перемещает запятую для выбора разряда установки.
Кнопка «Установка» прибавляет единицу в выбранный разряд.
Кнопка «Запись» фиксирует установленный режим работы, производит за-
пись в память значений будильников и производит автоустановку часов в
полночь.
Режимы работы программатора устанавливаются числами в двух младших
разрядах и имеют следующие значения:
40 — режим часов;
41 — попеременный режим;
42 — установка часов;
43 — установка дней;
45 — звонок звучит непрерывно;.
46 — звонок звучит 1 минуту;
47 — звонок звучит 5 секунд;
87
Устройства с цифровой индикацией
48 — звонок звучит 1 секунду;
49 — звонок отключен;
50 — звонок звучит все дни, кроме 6,7;
51 — звонок звучит все дни, кроме 7;
52 — звонок звучит все дни;
53 — установка коррекции;
54 — обнуление всех будильников;
55 — обнуление минут и секунд часов.
Все режимы установки начинают работать после фиксации их нажатием
кнопки «Запись». Индикация произведенной записи выполняется сменой по-
ложения запятой. Если запятая находилась в любом разряде, кроме би 1, то
при выполнении фиксации режима запятая переместится в первый разряд.
Это относится к режимам 45—52. При установке режимов работы 41, 42, 55
запятая перемещается в 6 разряд и индикатор высвечивает значение часов.
Индикация установки 54 режима производится нулями во всех разрядах.
Кнопку «Запись» не нужно нажимать при установках дней, коррекции и ча-
сов. Нельзя установить два взаимоисключающих режима, таких как 45—49 и
50—52. Будет работать последний установленный режим. После выполнения
любых'установок, необходимо проверить показания часов в 42 режиме и за-
кончить установку в выбранном режиме часов 40 или 41. После выполнения
всех необходимых установок запятая выводится в 6 фиктивный разряд (выво-
дится за пределы индикатора) и программатор переходит в режим индикации
значений часов с секундами. Если установлен попеременный режим, то часы
индицируются 10 секунд, затем индицируется значение будильника по адресу,
следующему за уже сработавшим. Если будильник еще не сработал, высвечи-
вается значение будильника по первому адресу. Если необходимо переместить
запятую с первого разряда в нулевой, то делать это надо, не отрывая пальца
от кнопки «Разряд», чтобы проскочить 6 разряд. Иначе установка не будет
выполнена.
Установка адресов будильников производится установкой чисел в младших
разрядах от 0 до 31. При установке значения от 32 до 39 индикатор сбрасыва-
ется в ноль. Это может произойти при установке режимов, если сначала уста-
новлено значение в нулевом разряде, а затем производится установка в первом
разряде с переходом через тройку. Поэтому сначала лучше устанавливать зна-
чение первого разряда. Значения будильников могут устанавливаться с диск-
ретностью 1 минута. Если вы предусматриваете работу программатора в попе-
ременном режиме индикации, то желательно программировать значения буди-
льников по возрастающей. При работе в непрерывном режиме первое
значение от текущего времени будет включать исполнительное устройство, а
следующее — выключать его. Нулевые значения установок игнорируются про-
граммой, поэтому, если необходимо срабатывание будильника в полночь,
нужно выставить значение 1 минуты до или после полуночи. Если необходимо
отключить выбранный будильник, достаточно установить фиктивное значение
часов, например 25. Если вы не предусматриваете работу в попеременном ре-
жиме, то будильники можно программировать в любой последовательности,
поскольку сравнение на совпадение производится по всему массиву памяти.
После установки адреса и значения будильника запись в память производится
88
Программатор
нажатием кнопки «Запись». Индикация выполнения записи производится пе-
ремещением запятой в нулевой разряд. Это сделано для упрощения установки
адреса следующего будильника. Поскольку запись в память выполняется в
третьем разряде индикации, то при удержании кнопки «Запись» яркость этого
разряда увеличивается.
При установке 43 режима (установка дней) значения дней индицируются в
4 разряде. На табло высвечивается: сО-сс- 43. Для установки дней недели необ-
ходимо запятую переместить в четвертый разряд. Значение дней не может быть
установлено более 7. Установка дней недели необходима, если вы собираетесь
ввести ограничение будильников по дням.
При установке 53 режима (установка коррекции) на табло высвечивается:
сО-сО-53. Во втором разряде высвечивается устанавливаемое значение коррек-
ции, а в четвертом разряде — значение знака коррекции. Значение коррекции
не мож!ет быть более 4. Знак коррекции положителен, если в четвертом разряде
ноль, и отрицательный (часы спешат) — если единица. Практика показала, что
ежедневное введение коррекции нецелесообразно. При обычном кварце суточ-
ный ход часов лежит в пределах ±0,5 сек. Поэтому коррекцию лучше вводить
за неделю. Коррекция вводится автоматически в 00-00-05 часов при переходе
из 7 дня в 1.
Если вы будете пользоваться автоустановкой по сигналам точного времени,
то вводить значение этого режима нет необходимости. Этот режим включается
автоматически в пределах ±10 секунд от полуночи. Импульс установки должен
быть подан на вывод RB7 (REC). Поскольку цикл индикации всех разрядов ра-
вен 4 х 6 = 24 мкс, то длительность импульса установки не должна быть мень-
ше этого значения. Установка производится высоким уровнем ТТЛ. Естествен-
но, при использовании автоустановки устанавливаемое значение' коррекции
(режим 53) должно быть нулевым.
Режим 55 обнуление минут и секунд используется для ручной установки ча-
сов при нажатии кнопки «Запись». При индикации часов кнопка «Запись» не
реагирует на нажатие. Кнопка «Установка» запараллелена кнопкой с фиксато-
ром «Вкл. будильника».
Непрерывный режим будильника предназначен для периодического вклю-
чения и выключения мощной нагрузки. Для примера на рис. 21 нагрузка
включается при помощи промежуточного реле. У автора это реле типа РЭС49
паспорт PC.569.426, хотя подойдет любое на соответствующее напряжение и
ток. Промежуточный каскад может быть выполнен и на оптопарах, и на си-
мисторе.
Режим звучания будильника 1 минута можно использовать для обычного
будильника. Режим 5 секунд предназначается для подачи звонков в учебном
заведении. Режим звучания будильника 1 секунда выполняется в начале каждо-
го часа (кукушка) и может служить для включения мелодии, например имита-
ции боя курантов.
Если установить программатор в учительской на попеременном режиме, то
будет видно время, оставшееся до окончания перемены или урока.
Топология печатных плат и расположение элементов даны на рис. 22—24.
Пунктирными линиями обозначены проводники со стороны установки эле-
ментов.
89
Устройства с цифровой индикацией
Рис. 22. Программатор. Печатная плата
g b d К1 А6 А2 А1
BF1
h
REC
ALA CAT+GBl -9B +9B
Рис. 23. Программатор. Расположение элементов
Рис. 24. Печатная плата линейки светодиодов с общим анодом
; ПРОГРАММАТОР - ЭТО ЧАСЫ С 32-МЯ БУДИЛЬНИКАМИ,
; 4 РЕЖИМАМИ ЗВОНКОВ,
; ЗАПРЕТОМ ЗВОНКОВ' ПО ВЫХОДНЫМ И Т.П.
; И ВОЗМОЖНОСТЬЮ УНИВЕРСАЛЬНОЙ ИНДИКАЦИИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru _ .
; ПРОГРАММА = SHOOL.ASM
; ВЕРСИЯ: 01-06-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
^CONFIG 3FF1H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,096 МГЦ.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 16, ЧТО ВМЕСТЕ
; С TMR0 (256), ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ И ДЕЛИТЕЛЕМ НА 250,’
90
Программатор
; ДАЕТ НА ВЫХОДЕ 1 СЕКУНДУ (4x16x256x250=4096000) • /
; RA0-RA2 - 2_10 ВЫХОД СЕГМЕНТОВ. ; RA3- ВХОД ВЫБОРА РАЗРЯДА. ; RA4- ВХОД УСТАНОВКИ И ВКЛЮЧЕНИЯ БУДИЛЬНИКОВ. ; RB1-RB4 - 2_10 ВЫХОД НОМЕРА АНОДА (КАТОДА). ; RB5- ВЫХОД ЗАПЯТОЙ. ; RB6- ВЫХОД ВКЛЮЧЕНИЯ ЗУММЕРА БУДИЛЬНИКА. ; RB7- ВХОД ЗАПИСИ. ; RB0- НА ВЫХОДЕ "0" ДЛЯ ПРЕЕМСТВЕННОСТИ СХЕМЫ С CHASU.ASM
f — ; СПЕЦ РЕГИСТРЫ.
INDF EQU ООН /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR. TIMER0 EQU 01Н /TMR0. OPTIONR EQU 81Н /OPTION (RP0=l). PC EQU 02H /СЧЕТЧИК КОМАНД. , STATUS EQU O3H /РЕГИСТР СОСТОЯНИЯ АЛУ. FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ. PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА. PORTB EQU 06H /ПОРТ.В ВВОДА/ВЫВОДА. TRISA EQU' 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А. TRISB EQU 86Н /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В. EEDATA EQU 08Н /ДАННЫХ ПЗУ. EEADR EQU 09Н /АДРЕСА ПЗУ. EECON1 EQU 88Н /РЕГИСТРЫ ЧТЕНИЯ-ЗАПИСИ EECON2 EQU 89Н /ПЗУ., INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
SCO SCI SC2 SC3 SC4 SC5 COUE SMC CAT EQU ОСН /МЛАДШИЙ РАЗРЯД СЧЕТЧИКА. EQU 0DH EQU 0EH EQU 0FH EQU ЮН EQU- 11Н /СТАРШИЙ РАЗРЯД. EQU 12Н /СЧЕТЧИК ЦИКЛОВ СЧИТЫВАНИЯ EQU 13Н /СЧЕТЧИК 4 МИЛЛИСЕКУНД. EQU 14Н /УСТАНОВКА ЗАПЯТОЙ. И ЗАПИСИ.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG.
FLAG EQU 15Н
0-> ВКЛЮЧЕНИЕ ЗВОНКА.
1-> ВКЛЮЧЕНИЕ КОРРЕКЦИИ. В 0-0-0 Ч-М-С.
2-> ФЛАГ УСТАНОВКИ.
3-> РАВЕНСТВА МИНУТ БУДИЛЬНИКОВ.
4-> УСТАНОВКА Ч/уЗОВ.
5-> РЕЗЕРВ.
6-> УСТАНОВКА БУДИЛЬНИКОВ.
7-> РАВЕНСТВА ЧАСОВ БУДИЛЬНИКА.
91
Устройства с цифровой индикацией
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ СЧЕТА.
SECL EQU 020Н /ЕДИНИЦЫ СЕКУНД.
SECH EQU 021Н /ДЕСЯТКИ СЕКУНД.
MINL EQU 022Н /ЕДИНИЦЫ минут.
MINH EQU 023Н /ДЕСЯТКИ МИНУТ.
HOUL EQU 024Н /ЕДИНИЦЫ ЧАСОВ.
HOUH EQU 025Н /ДЕСЯТКИ ЧАСОВ.
DAY1 EQU 026Н /СЧЕТЧИК ДНЕЙ НЕДЕЛИ
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG1.
FLAG1 EQU 027Н ;
; 0-> РЕЖИМ ЧАСОВ.
; 1-> УСТАНОВКА ДНЕЙ.
; 2-> РАВЕНСТВА БУДИЛЬНИКА.'
; 3—> ЗАПРЕТ БУДИЛЬНИКОВ ПО ДНЯМ.
; 4-> УСТАНОВКА ПОПЕРЕМЕННОГО РЕЖИМА.
; 5-> НЕПРЕРЫВНОЕ ЗВУЧАНИЕ БУДИЛЬНИКА.
; 6-> ЗВОНОК 1 МИНУТУ.
; 7-> ЗВОНОК 5 СЕКУНД.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG2.
FLAG2 EQU ОЗОН ;
; 0-> ЗВОНОК КАЖДЫЙ ЧАС ПО 1 СЕКУНДЕ (БОЙ).
; 1-> УСТАНОВКА КОРРЕКЦИИ.
/ 2-> БУДИЛЬНИК ЗВОНИТ ВСЕ ДНИ, КРОМЕ 6,7 ДНЯ.
; 3-> ....КРОМЕ 7 ДНЯ.
; 4-> ....ВСЕ ДНИ.
; 5-> БУДИЛЬНИКИ ОТКЛЮЧЕНЫ.
; 6-> ОБНУЛЕНИЕ ВСЕХ БУДИЛЬНИКОВ.
; 7-> ОБНУЛЕНИЕ ЧАСОВ.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG3.
FLAG3 EQU 032Н /
0-> ЗАПЯТАЯ ЗА ИНДИКАТОРОМ.
1-> РЕЗЕРВ.
2-> РАВЕНСТВА ЧАСОВ В ПОЛНОЧЬ.
3-> РАВЕНСТВА МИНУТ В ПОЛНОЧЬ.
4-> РАВЕНСТВА СЕКУНД В ПОЛНОЧЬ
5-> • РЕЗЕРВ.
6-> РЕЗЕРВ.
7-> • РЕЗЕРВ.
РЕГИСТРЫ: УСТАНОВКИ, БУДИЛЬНИКОВ, КОРРЕКЦИИ, ГАШЕНИЯ.
ZVONS EQU 028Н ;СЧЕТЧИК СЕКУНД ЗВОНКА.
COBAHU EQU 029Н /СЧЕТЧИК ПОПЕРЕМЕННОЙ ИНДИКАЦИИ.
ZVONNEP EQU 02АН /СЧЕТЧИК МИНУТ НЕПРЕРЫВНОГО РЕЖИМА.
92
Программатор
BUDHEX EQU 01DH /ВОСЬМЕРИЧНОЕ ЗНАЧЕНИЕ НОМЕРА БУДИЛЬНИКА.
ANOD EQU 02EH /АНОД, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ(0-5).
SEG EQU 02FH /СЕГМЕНТЫ, ДЕСЯТИЧНОЕ ЗНАЧ.(2-10 КОД).
COR EQU 033H /РЕГИСТР УСТАНОВКИ КОРРЕКЦИИ.
W_TEMP EQU 034H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 035H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
BUHL EQQ 036H ./ЕДИНИЦЫ ЧАСОВ БУДИЛЬНИКА.
BUHH EQU 037H /ДЕСЯТКИ ЧАСОВ БУДИЛЬНИКА.
COBA EQU 038H /АДРЕС СРАБОТАВШЕГО БУДИЛЬНИКА.
FSR_TEMP EQU 039H /ВРЕМЕННЫЙ ДЛЯ FSR.
CORNEG ' EQU 03AH /ЗНАК КОРРЕКЦИИ, БИТ-0.
NEGCOR EQU 03BH /ВРЕМЕННЫЙ ДЛЯ ОТРИЦАТЕЛЬНОЙ КОРРЕКЦИИ.
BUM EQU 03CH /РЕГИСТР МИНУТ БУДИЛЬНИКА.
BUDO EQU 03DH /ЕДИНИЦЫ НОМЕРА БУДИЛЬНИКА.
BUD1 EQU 03EH /ДЕСЯТКИ НОМЕРА БУДИЛЬНИКА.
вин EQU 03FH /РЕГИСТР ЧАСОВ БУДИЛЬНИКА.
BUML EQU 040H /ЕДИНИЦЫ МИНУТ БУДИЛЬНИКА.
BUMH EQU 041H /ДЕСЯТКИ МИНУТ БУДИЛЬНИКА.
ACOU EQU 047H /СЧЕТЧИК ЦИКЛОВ ЗАПИСИ.'
SB2 EQU 048H /МЛ. РАЗРЯД ЗНАЧЕНИЙ ТЕКУЩЕГО БУДИЛЬНИКА.
SB3 EQU 049H Г
SB4 EQU 04 AH
SB5 EQU 04BH /СТ. РАЗРЯД ЗНАЧЕНИЙ ТЕКУЩЕГО БУДИЛЬНИКА.
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
’ GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000011' /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=16 ...011,
MOVWF OPTION_REGA80rf /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ.
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА.
MOVWF INTCON
MOVLW B'00011000' / RA0-RA2-HA ВЫХОД, RA3,РА4-ВХОД.
MOVWF TRISAA80H
MOVLW B'lOOOOQOO' ; RB0-RB6-HA ВЫХОД, РВ7-ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
BCF PORTB,6 /СБРОСИМ БИТ БУДИЛЬНИКА.
CLRF CORNEG /СБРАСЫВАЕМ ФЛАГ ЗНАКА КОРРЕКЦИИ,
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF FLAG1
CLRF FLAG2
CLRF FLAG3
CLRF- TMR0 * /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCO ,
CLRF SCI
93
Устройства с цифровой индикацией
CLRF SC2
CLRF SC3
CLRF SC4 4*
CLRF SC5
CLRF SECL
CLRF SECH
CLRF MINL
CLRF, MINH
CLRF HOUL
CLRF HOUH
CLRF BUML CLRF BUMH
CLRF BUHL
CLRF BUHH
CLRF COR
CLRF SMC CLRF ZVONS QLRF ZVONNEP
CLRF COBAHU
MOVLW .1 ;УСТАНАВЛИВАЕМ ВЫБОР
MOVWF CAT ;РАЗРЯДА
MOVWF DAY1 /И ДНИ НЕДЕЛИ.
MOVWF MINL
GOTO ZIKL /ИДЕМ НА ИНДИКАЦИЮ. ,
; 3. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KEY
BTFSC FLAG3,0 /ЕСЛИ ЗПТ ЗА ПРЕДЕЛАМИ ИНДИКАТОРА,
GOTO KEYO /КНОПКА ЗАПИСИ НЕ РАБОТАЕТ.
BTFSC PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ЗАПИСИ,
GOTO KEYZ /ИДЕМ НА ЗАПИСЬ.
KEYO
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА (ЗАПЯТАЯ) НАЖАТА
CALL САТК /ИДЕМ СРАВНИВАТЬ РАЗРЯД УСТАНОВКИ.
BTFSC FLAG3,0 /ЕСЛИ ЗПТ ЗА ИНДИКАТОРОМ,
GOTO KEY1 /ПРОПУСКАЕМ УСТАНОВКУ.
BTFSC PORTA,4 /ЕСЛИ НАЖАТА КНОПКА УСТАНОВКИ,
CALL UST /ИДЕМ НА УСТАНОВКУ.
KEY1
BTFSC FLAG,1 /ЕСЛИ ПОЛНОЧЬ НАСТУПИЛА,
' GOTO KEYC /ИДЕМ СЧИТАТЬ 5 СЕКУНД,
RETURN KEYC
MOVLW .5 /5 СЕК
SUBWF SC0,0 /ЕСЛИ НЕ РАВНО 0, ПРОПУСКАЕМ
BZ CORN /ИЛИ ИДЕМ КОРРЕКТИРОВАТЬ СЕКУНДЫ.
RETURN
KEYZ
BTFSC FLAG,6 /ПРИ УСТАНОВКЕ
GOTO KEYZO /РАЗРЕШАЕТСЯ ЗАПИСЬ.
BTFSC FLAG1,O /ЕСЛИ ЧАСЫ РАБОТАЮТ,
RETURN /ЗАПРЕЩЕНА ЗАПИСЬ.
BTFSC FLAG1,4 /В ПОПЕРЕМЕННОМ РЕЖИМЕ
94
Программатор
RETURN /ЗАПИСЬ ЗАПРЕЩЕНА.
KEYZO
ВСЕ FLAG,6 /СБРОСИМ ФЛАГ УСТАНОВКИ БУДИЛЬНИКОВ.
GOTO ZAPIS /НА ЗАПИСЬ.
/ 4. ЗАПИСЬ ЗНАЧЕНИЙ БУДИЛЬНИКОВ.
ZAPBIN
MOVFW SCI ПЕРЕКОДИРОВКА ДЕСЯТИЧНОГО ЗНАЧЕНИЯ
ADDWF PC,1 /ДЕСЯТКОВ НОМЕРА БУДИЛЬНИКА В ДВОИЧНОЕ.
RETLW В'00000000’ 0
RETLW В’00001010’ 10
RETLW В’00010100' 20
RETLW В’00011110' 30
RETLW В’00101000’ 40
RETLW В’00110010’ 50
/ RETLW В'00111100' 60
.ZAPIS
MOVLW .4 ЗАПИСЬ В ПАМЯТЬ ВОЗМОЖНА
SUBWF SC1,O ТОЛЬКО ПРИ 3 В ПЕРВОМ РАЗРЯДЕ.
BTFSC STATUS,0 ,
RETURN
BTFSC FLAG2,6 ЕСЛИ ФЛАГ ОБНУЛЕНИЯ ВСЕХ БУДИЛЬНИКОВ УСТАНОВЛЕН
GOTO scoo ИДЕМ ОБНУЛЯТЬ.
CALL ZAPBIN ПЕРЕКОДИРОВКА НОМЕРА БУДИЛЬНИКА
ADDWF SC0,0 ИЗ ДЕСЯТИЧНОГО В ДВОИЧНОЕ
MOVWF BUDHEX ЧИСЛО.
ZAPOO’
MOVLW .32 ЕСЛИ ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ
SUBWF BUDHEX,0 НОМЕРА БУДИЛЬНИКА
BTFSC STATUS,0 БОЛЬШЕ ИЛИ РАВНО 32,
GOTO ZABOR ИДЕМ ОБНУЛЯТЬ.
BTFSC FLAG2,6 ЕСЛИ ОБНУЛЕНИЕ БУДИЛЬНИКОВ УСТАНОВЛЕНО,
GOTO ZAPISM ИДЕМ НА ЗАПИСЬ.
BTFSC FLAG,6 ЕСЛИ УСТАНОВКА ВКЛЮЧЕНА,
RETURN ВОЗВРАТ.
ZAPISO
SWAPF BUMH,0 ЗАПИСЬ МЛАДШЕГО И СТАРШЕГО
IORWF BUML,0 РЕГИСТРОВ МИНУТ
MOVWF BUM В ОДИН РЕГИСТР ЗАПИСИ МИНУТ.
SWAPF BUHH,0 ЗАПИСЬ МЛАДШЕГО И СТАРШЕГО
IORWF BUHL,0 РЕГИСТРОВ ЧАСОВ
MOVWF BUH В ОДИН РЕГИСТР ЗАПИСИ ЧАСОВ.
ZAPISM
BTFSC ACOU,0 ПРИ ЕДИНИЧНОМ ЗНАЧЕНИИ СЧЕТЧИКА
GOTO ZAPISH ИДЕМ НА ЗАПИСЬ ЧАСОВ.
MOVFW BUDHEX
MOVWF EEADR
MOVFW' BUM ИНАЧЕ ЗАПИСЫВАЕМ МИНУТЫ.
MOVWF EEDATA
GOTO ZAPISE
ZAPISH J*
MOVFW BUDHEX ЗНАЧЕНИЯ ЧАСОВ ЗАПИСЫВАЕМ
ADDLW .32 •НАЧИНАЯ С 32 АДРЕСА.
95
Устройства с цифровой индикацией
MOVWF EEADR
MOVFW BUH
MOVWF EEDATA ; *
ZAPISE
BCF INTCON,GIE /ЗАПРЕТ ПРЕРЫВАНИЙ.
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,WREN /РАЗРЕШЕНИЕ ЗАПИСИ.2
MOVLW 55H- /ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
MOVWF EECON2A80H // ,
MOVLW ОААН //
MOVWF EECON2A80H //
BSF EECON1A80H,WR /ПРИ ЗАПИСИ ВО ФЛЕШ ПЗУ.
ZAPIZ
BTFSS EECON1A80H,4 /ПОКА НЕ БУДЕТ ЗАПИСИ
GOTO •ZAPIZ- /ХОДИМ ПО КРУГУ.
BCF INTCON,6 . /ЗАПРЕТ ПРЕРЫВАНИЯ ПО ЗАПИСИ В ПАМЯТЬ.
BCF EECON1A80H,4 /
BCF EECON1A80H,WREN /ЗАПРЕТ ЗАПИСИ.
BCF STATUS,RPO /БАНК 0.
INCF ACOU,1 . /+1 В СЧЕТЧИК ЦИКЛА.
MOVLW .2 /0-1.
' SUBWF ACOU,0
BZ EECNOO
GOTO ZAPISM /ПО КРУГУ-ДО КОНЦА ЗАПИСИ.
ZABOR .
BCF FLAG2,6 ;ОБНУЛЕНИЕ ФЛАГА
CLRF SCO /И РЕГИСТРОВ НОМЕРА ЗАПИСИ.
CLRF SCI
RETURN f
EECNOO
CLRF ACOU /ПО ОКОНЧАНИИ ЗАПИСИ ОБНУЛЯЕМ СЧЕТЧИК
CLRF CAT ' /И ПЕРЕМЕЩАЕМ ЗАПЯТУЮ В НУЛЕВОЙ РАЗРЯД
BTFSS FLAG2,6 /ЕСЛИ ИДЕТ ОБНУЛЕНИЕ ВСЕХ БУДИЛЬНИКОВ,
RETURN /ПРОПУСКАЕМ ВОЗВРАТ.
SC31
INCF BUDHEX,1 /УВЕЛИЧИМ СЧЕТЧИК
GOTO ZAPOO /И ИДЕМ НА ЗАПИСЬ НУЛЕЙ.
SCOO
CLRF BUM /ОБНУЛЯЕМ РЕГИСТР МИНУТ
CLRF BUH /И ЧАСОВ.
GOTO ZAPOO /НА ЗАПИСЬ.
; 5. ВЫБОР РАЗРЯДА УСТАНОВКИ (ЗАПЯТОЙ).
САТК
BTFSS FLAG,2 RETURN INCF CAT,1 BCF FLAG,2 MOVFW CAT SUBLW .7 BZ CATKO RETURN . CATKO /УСТАНОВКА РАЗРЕШЕНА ЕСЛИ ПРОШЛА 1 СЕК. ,-+1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА. /ЧТОБЫ ЖДАТЬ ДО СЛЕДУЮЩЕЙ СЕКУНДЫ. /6 РАЗРЯД ФИКТИВНЫЙ, ЧТОБЫ УБРАТЬ ЗАПЯТУЮ /С ИНДИКАТОРА. /НЕ БОЛЕЕ 6, /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ. Г
Программатор
CLRF CAT /ОБНУЛЕНИЕ.
BCF FLAG3,0 /СБРОСИМ ФЛАГ 6 РАЗРЯДА.
RETURN
/ 6. ВЫБОР РЕЖИМА УСТАНОВКИ.
ATTU MOVLW .6 /ЕСЛИ ЗАПЯТАЯ ЗА ПРЕДЕЛАМИ
SUBWF CAT, 0 /ИНДИКАТОРА,
BZ ATTUH /ИДЕМ В РЕЖИМ ЧАСОВ.
BCF FLAG1,4 /ПРИ УСТАНОВКЕ РАБОТАЕТ
BSF FLAG1,0 /РЕЖИМ ЧАСОВ.
MOVLW .4 /ЕСЛИ 4 В ПЕРВОМ РАЗРЯДЕ,
SUBWF SCI, 0
BZ ATTU4 /ИДЕМ НА ВЫБОР РЕЖИМА.
MOVLW .5 /ЕСЛИ 5 В ПЕРВОМ РАЗРЯДЕ,
SUBWF SCI, 0
BZ ATTU5 /ИДЕМ НА ВЫБОР РЕЖИМА».
MOVLW .6
SUBWF SCI, 0 /ЕСЛИ 6 В ПЕРВОМ РАЗРЯДЕ,
BTFSC STATUS,2
CLRF SCI /ОБНУЛЯЕМ РАЗРЯД.
BSF FLAG,6 /ИНАЧЕ ПОСТАВИМ ФЛАГ УСТАНОВКИ
GOTO BIN /ИДЕМ НА ИНДИКАЦИЮ БУДИЛЬНИКОВ
ATTU4 BCF FLAG,6 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW SCO /ПО ЗНАЧЕНИЮ НУЛЕВОГО РАЗРЯДА*
ADDWF PC, 1 /ВЫБЕРЕМ РЕЖИМ ИНДИКАЦИИ.
GOTO HATUB /УСТАНОВКА РЕЖИМА ЧАСОВ.
GOTO HOBBI /ПОПЕРЕМЕННЫЙ РЕЖИМ.
GOTO HATU /УСТАНОВКА ЧАСОВ.
GOTO. DIN /УСТАНОВКА ДНЕЙ.
GOTO INDSC /ВСЕ НУЛИ.
GOTO BUNE /НЕПРЕРЫВНЫЙ РЕЖИМ ЗВОНКА.
GOTO BUI /ЗВОНОК 1 МИНУТУ.
GOTO BU5 /ЗВОНОК 5 СЕК.
GOTO BOI /ЗВОНОК 1 СЕК КАЖДЫЙ ЧАС.
GOTO BUVO /ЗВОНОК ОТКЛЮЧЕН.
ATTU5 BCF FLAG,6 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW SCO /ПО ЗНАЧЕНИЮ НУЛЕВОГО РАЗРЯДА
ADDWF PC, 1 /ВЫБЕРЕМ РЕЖИМ ИНДИКАЦИИ.
GOTO BU67 /ЗВОНОК ВСЕ ДНИ КРОМЕ 6 И 7.
GOTO BU7 /ВСЕ ДНИ КРОМЕ 6.
GOTO BUV /ЗВОНОК ВСЕ ДНИ.
GOTO CORAT /УСТАНОВКА КОРРЕКЦИИ.
GOTO BUOO /ОБНУЛЕНИЕ ВСЕХ БУДИЛЬНИКОВ.
GOTO RETURN RETURN RETURN RETURN ATOO /ОБНУЛЕНИЕ ЧАСОВ. / г г t
ATTUH J*
BSF FLAG3,0 /УСТАНОВИМ ФЛАГ 6 РАЗРЯДА.
BCF FLAG,6 /СБРОСИМ ФЛАГ УСТАНОВКИ.
4 Зак. 2418
97
Устройства с цифровой индикацией
GOTO HAT /НА ИНДИКАЦИЮ ЧАСОВ.
; 7. ОБНУЛЕНИЕ МИНУТ И СЕКУНД.
АТОО ВСЕ FLAG,4 ;СБРОСИМ ФЛАГ УСТАНОВКИ.
АТОК
BTFSS PORTB,7 /ПРОВЕРКА НАЖАТИЯ КНОПКИ ЗАПИСИ.
RETURN MOVLW . 9 /НЕТ. /ДА.
SUBWF MINL,0 /ЕСЛИ В МИНУТАХ 9,
BTFSC STATUS,2 /НАДО УВЕЛИЧИТЬ
CALL HLU /ЗНАЧЕНИЕ ЧАСОВ.
CLRF SECL /ОБНУЛЯЕМ ДЛЯ УСТАНОВКИ ЧАСОВ
CLRF SECH
CLRF MINL /ПО СИГНАЛАМ ТОЧНОГО ВРЕМЕНИ.
CLRF MINH
BTFSC FLAG3,4 /ЕСЛИ УСТАНОВЛЕН ФЛАГ АВТОСБРОСА,
CALL KYRAO /СХОДИМ СБРОСИТЬ ФЛАГИ. .
MOVLW .6 /ПОСЛЕ УСТАНОВОК
MOVWF CAT /ЗАПЯТАЯ ПЕРЕМЕЩАЕТСЯ В 6 РАЗРЯД
GOTO HATUH /ПРОИНДИЦИРУЕМ НОВОЕ ЗНАЧЕНИЕ.
; 8. УСТАНОВКА РАЗРЯДОВ ИНДИКАЦИИ.
UST
BTFSS FLAG,2 /ЕСЛИ СБРОШЕН ФЛАГ УСТАНОВКИ,
RETURN BCF FLAG,2 ;ВОЗВРАЩАЕМСЯ. /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW CAT /ПО ПОЛОЖЕНИЮ ЗАПЯТОЙ
ADDWF PC, 1 /ОПРЕДЕЛЯЕМ РАЗРЯД УСТАНОВКИ.
GOTO USTO /0
GOTO UST1 /1
GOTO UST2 /2
GOTO UST3 /3
GOTO UST4 /4
GOTO UST5 /5
GOTO HAT /ИНДИКАЦИЯ ЧАСОВ.
USTO INCF SCO, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10
SUBWF SCO, 0
BTFSC STATUS,0 /С (ПЕРЕНОС) = 1, ЕСЛИ 10’И БОЛЕЕ
CLRF ' SCO /
GOTO ' UST6 /
UST1
INCF SCI, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5.
MOVLW .6 9
SUBWF SCI, 0 9
BTFSC STATUS,0 9
CLRF SCI 9
GOTO UST6 9
UST2
INCF SQ2, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
98
Программатор
SUBWF SC2, 0
BTFSC STATUS,0 ;
CLRF SC2
GOTO UST6 ' ;
UST3
INCF SC3,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5
MOVLW .6
SUBWF SC3,0
BTFSC STATUS,0 /
CLRF SC3
GOTO UST6
UST4
INCF SC4,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9
MOVLW .10.
SUBWF SC4,0
BTFSC STATUS,0 /
CLRF SC 4
GOTO UST6
UST5
INCF SC5,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2
MOVLW .3
SUBWF SC5,0
BTFSC STATUS,0 /
‘ CLRF SC5
GOTO UST6
; 9. ЗАПРЕТ БУДИЛЬНИКОВ ПО ДНЯМ.
BUR7
BCF FLAG,4
MOVLW .7 /ЕСЛИ УЖЕ 7 ДЕНЬ,
SUBWF DAY1,0 7
SKPNZ
BSF FLAG1,3 /УСТАНОВИМ ФЛАГ ЗАПРЕТА ПО дням
SKPZ
BCF FLAG1,3 /ИНАЧЕ СБРОСИМ ФЛАГ.
RETURN 9
BUR67
BCF FLAG,4
MOVLW .6 /ЕСЛИ УЖЕ 6 ДЕНЬ,
SUBWF DAY1,0 9
SKPNZ
BSF FLAG1,3 /УСТАНОВИМ ФЛАГ ЗАПРЕТА ПО дням
SKPZ
BCF FLAG1,3 /ИНАЧЕ СБРОСИМ.ФЛАГ.
SKPZ
GOTO BUR7 /ИДЕМ ПРОВЕРЯТЬ 7 ДЕНЬ.
RETURN 9
10. УСТАНОВКА ФЛАГОВ РЕЖИМОВ.
HATUB
BTFSS PORTB,?’ /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
BSF FLAG1,0 /УСТАНОВИМ РЕЖИМ ЧАСОВ. '
99
Устройства с цифровой индикацией
BCF FLAG1,4 ;СБРОСИМ ПОПЕРЕМЕННЫЙ РЕЖИМ.
MOVLW . 6 ;ПРОИНДИЦИРУЕМ УСТАНОВКУ
MOVWF CAT ;СМЕНОЙ ПОЛОЖЕНИЯ ЗАПЯТОЙ. *
RETURN
HOBBI
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
BSF FLAG1,4 ;УСТАНОВИМ ПОПЕРЕМЕННЫЙ РЕЖИМ.
BCF FLAG1,0 /СБРОСИМ РЕЖИМ ЧАСОВ.
MOVLW .6 /ПРОИНДИЦИРУЕМ УСТАНОВКУ
MOVWF CAT ;СМЕНОЙ ПОЛОЖЕНИЯ ЗАПЯТОЙ.
RETURN
BUNE
BCF FLAG,4
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА, -
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,5 /ВКЛЮЧИМ ФЛАГ НЕПРЕРЫВНОГО ЗВУЧАНИЯ БУДИЛЬНИКА.
BCF FLAG1,6 /СБРОСИМ ФЛАГИ ДРУГИХ ЗВОНКОВ.
BCF FLAG1,7 9
BCF FLAG2,0
. BCF FLAG2,5 /И ФЛАГ ОТКЛЮЧЕНИЯ БУДИЛЬНИКОВ. *
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BUI
BCF FLAG,4
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,6 /ВКЛЮЧИМ ФЛАГ 1 МИНУТЫ.
BCF FLAG1,5 /СБРОСИМ ФЛАГИ ДРУГИХ ЗВОНКОВ.
BCF FLAG1,7 9
BCF FLAG2,0
BCF FLAG2,5 /И ФЛАГ ОТКЛЮЧЕНИЯ БУДИЛЬНИКОВ.
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BU5
BCF FLAG, 4,
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,7 /ВКЛЮЧИМ ФЛАГ 5 СЕКУНД.
BCF FLAG1,6 /СБРОСИМ ФЛАГИ ДРУГИХ ЗВОНКОВ.
BCF FLAG1,5 9
BCF FLAG2,0
BCF FLAG2,5 /И ФЛАГ ОТКЛЮЧЕНИЯ БУДИЛЬНИКОВ.
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BO I
BCF FLAG,4
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG2,0 /ВКЛЮЧИМ ФЛАГ 1 СЕКУНДЫ.
BSF FLAG1,0 /В ЭТОМ РЕЖИМЕ НЕ МОЖЕТ БЫТЬ ПОПЕРЕМЕННОГО РЕЖИМА.
BCF FLAG1,4 /СБРОСИМ ФЛАГИ ДРУГИХ ЗВОНКОВ.
BCF FLAG1,6 9
BCF FLAG1,7
BCF FLAG2,5 /И ФЛАГ ОТКЛЮЧЕНИЯ БУДИЛЬНИКОВ.
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
100
Программатор
BU67
BCF FLAG,4
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ HE НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
BSF FLAG2,2 /ВКЛЮЧИМ ФЛАГ ЗВОНКА КРОМЕ ВЫХОДНЫХ ДНЕЙ
BCF FLAG2,3 ;СБРОСИМ ФЛАГИ ДРУГИХ РЕЖИМОВ ПО дням.
BCF FLAG2,4'
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BU7
BCF FLAG,4
BTFSS PORTB,7 ;ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG2,3 /ВКЛЮЧИМ ФЛАГ ВОСКРЕСНОГО ДНЯ.
BCF FLAG2,2 /СБРОСИМ ФЛАГИ ДРУГИХ РЕЖИМОВ ПО дням.
BCF FLAG2,4
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BUV 1
BCF FLAG,4
BTFSS, PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG2,4 /ВКЛЮЧИМ ЗВОНОК ПО ВСЕМ ДНЯМ.
BCF FLAG1,3 /СБРОСИМ ФЛАГ ЗАПРЕТА ПО ДНЯМ.’
BCF FLAG2,3 /СБРОСИМ’ ФЛАГИ ДРУГИХ РЕЖИМОВ ПО дням.
BCF FLAG2,2
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BUVO
BCF . FLAG,4
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,3 /УСТАНОВИМ ФЛАГ ЗАПРЕТА ЗВОНКА ПО ДНЯМ.
BCF FLAG2,3 /СБРОСИМ ФЛАГИ ДРУГИХ РЕЖИМОВ ПО дням.
BCF FLAG2,4 /
BCF FLAG2,2
GOTO BUCAT /НА СМЕНУ ЗАПЯТОЙ.
BUOO
BCF FLAG,4
BCF FLAG2,1
BTFSS PORTB,7 /ЕСЛИ КНОПКА ЗАПИСИ НЕ НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG2,6 /ВКЛЮЧИМ ОБНУЛЕНИЕ ВСЕХ БУДИЛЬНИКОВ.
CLRF SCO /ОБНУЛИМ 0 И 1 РАЗРЯДЫ.
CLRF SCI
CLRF BUDHEX /ОБНУЛИМ СЧЕТЧИК АДРЕСА ЗАПИСИ.
CALL BUCAT /НА СМЕНУ ЗАПЯТОЙ.
GOTO KEYZ /И ПОЙДЕМ НА ЗАПИСЬ.
BUCAT
MOVLW .1 /ПОСЛЕ УСТАНОВОК ФЛАГОВ
MOVWF CAT /ЗАПЯТАЯ ПЕРЕМЕЩАЕТСЯ В ПЕРВЫЙ РАЗРЯД.
RETURN t
; 11. ЗАПИСЬ УСТАНОВОК J3 РЕГИСТРЫ.
UST6
BTFSC FLAG,6
101
Устройства с цифровой индикацией
GOTO BUST /РЕГИСТРЫ: БУДИЛЬНИКА
BTFSC FLAG,4
GOTO HUST ;ЧАСОВ
BTFSC FLAG1,1
GOTO DUST ; ДНЕЙ
BTFSC FLAG2,1
GOTO RETURN CUST /КОРРЕКЦИИ.
; 12. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ.
BUST
BCF FLAG,6 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ РЕГИСТРОВ ИНДИКАЦИИ
/ MOVWF - BUML /В РЕГИСТРЫ БУДИЛЬНИКА.
MOVFW SC3 9
MOVWF BUMH 9
MOVFW SC4 9
MOVWF BUHL 9
MOVFW SC5 9
MOVWF BUHH 9
RETURN
HUST
BCF FLAG,4 /СБРОСИМ ФЛАГ УСТАНОВКИ ЧАСОВ
MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ РЕГИСТРОВ ИНДИКАЦИИ
MOVWF MINL /В РЕГИСТРЫ ЧАСОВ.
MOVFW SC3 9
MOVWF MitiH
MOVFW SC4 /
MOVWF HOUL 9
MOVFW SC5 9
MOVWF HOUH 9
RETURN
DUST
BCF FLAG1,1 /СБРОСИМ ФЛАГ УСТАНОВКИ ДНЕЙ.
MOVLW . 10 /ВО 2,3,5 РАЗРЯДЫ ЗАПИШЕМ' "с"
MOVWF SC2 9
MOVWF SC3 9
MOVWF SC5
MOVLW .8 /8 ДНЯ НЕТ.
SUBWF SC4,0
BTFSC STATUS,0 /ЕСЛИ 8 ИЛИ БОЛЬШЕ,
CLRF SC4 /ОБНУЛИМ.
BTFSC STATUS,0
BSF SC4,0 /И УСТАНОВИМ В 1.
MOVFW SC4 /ПЕРЕПИШЕМ В РЕГИСТР ДНЕЙ.
MOVWF DAY1 9
RETURN
CUST
BCF FLAG2,1 /СБРОСИМ ФЛАГ УСТАНОВКИ КОРРЕКЦИИ. .
MOVLW .10 /В 3,5 РАЗРЯДЫ ЗАПИШЕМ "с".
MOVWF SC3 9
MOVWF SC5
MOVLW .2 /ЕСЛИ ЗПТ ВО ВТОРОМ РАЗРЯДЕ,
SUBWF CAT, 0 9
102
Программатор
SKPZ GOTO 'CUSTG /ПРОПУСТИМ.
MOVLW .5 /ЗНАЧЕНИЕ МОЖЕТ БЫТЬ НЕ БОЛЕЕ 4.
SUBWF SC2, 0 /
BTFSC STATUS,0
CLRF SC2 /ИНАЧЕ ОБНУЛЯЕМ РАЗРЯД.
MOVFW SC2
MOVWF COR /ПЕРЕПИШЕМ В РЕГИСТР КОРРЕКЦИИ.
RETURN
CUSTG
MOVLW .4 /ЕСЛИ ЗАПЯТАЯ
SUBWF CAT, 0 /В 4 РАЗРЯДЕ,
SKPZ
RETURN /ПРОПУСТИМ. •
MOVLW .2 /ЗНАЧЕНИЕ ЗНАКА КОРРЕКЦИИ НЕ БОЛЕЕ 1
SUBWF SC4,0 9
BTFSC STATUS,0
CLRF SC4 /ЕСЛИ БОЛЕЕ 1, ОБНУЛИМ.
MOVFW SC4 /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ЗНАКА
MOVWF CORNEG /В РЕГИСТР ЗНАКА КОРРЕКЦИИ.
RETURN
; 13. СМЕНА ИНДИКАЦИИ ПРИ СМЕНЕ РЕЖИМА.
HAT BTFSC PORTA,3 /ЕСЛИ КНОПКА РЕЖИМА НАЖАТА,
RETURN ,• ВОЗВРАЩАЕМСЯ.
BTFSC FLAG1,4 /ЕСЛИ ВКЛЮЧЕН ПОПЕРЕМЕННЫЙ РЕЖИМ,
GOTO HOB I /ИДЕМ НА ЭТОТ РЕЖИМ.
HATU BCF FLAG1,1 /СБРОСИМ ФЛАГ УСТАНОВКИ ДНЕЙ.
BSF FLAG,4 /ВКЛЮЧИМ ФЛАГ УСТАНОВКИ ЧАСОВ.
HATUH BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА'РЕЖИМА НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BTFSC FLAG3,0 /ЕСЛИ ЗАПЯТАЯ, НЕ В 6 РАЗРЯДЕ,
CALL HAT1 /ПРОПУСТИМ ЗАПИСЬ В РАЗРЯДЫ СЕКУНД
MOVFW MINL /ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ
MOVWF SC2 /ЗНАЧЕНИЯ РЕГИСТРОВ ЧАСОВ.
MOVFW MINH /
MOVWF SC3 ’
MOVFW нои!' . '"‘'Ц 9
MOVWF SC4 9
MOVFW . HOUH 9
MOVWF SC5 9
BTFSC FLAG1,4
BCF FLAG,2 /СБРОСИМ ФЛАГ УСТАНОВКИ
RETURN /ДЛЯ ПОПЕРЕМЕННОГО РЕЖИМА.
НАТ1 MOVFW SECL' /ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ
MOVWF SCO /ЗНАЧЕНИЯ РЕГИСТРОВ СЕКУНД.
MOVFW SECH 9
MOVWF RETURN SCI 9
103
Устройства с цифровой индикацией
BIN
BCF . FLAG,4 ;СБРОСИМ ФЛАГ УСТАНОВКИ ЧАСОВ.
MOVLW .2 ;СМЕНА ИНДИКАЦИИ
SUBWF CAT, 0 /ЕСЛИ ЗПТ В НУЛЕВОМ
BTFSC STATUS,0 /ИЛИ ПЕРВОМ РАЗРЯДЕ.
RETURN
CALL ZAPIS /ИДЕМ НА ЗАПИСЬ, ЧТОБЫ
MOVFW BUDHEX /ПЕРЕКОДИРОВАТЬ НОМЕР БУДИЛЬНИКА.
MOVWF COUE /ПЕРЕПИШЕМ ЕГО В РЕГИСТР АДРЕСА.
BINHB
CALL AKTETE /СЧИТАЕМ ЗНАЧЕНИЕ БУДИЛЬНИКА
MOVFW EEDATA /ПО ЭТОМУ АДРЕСУ.
MOVWF BUML /РАСШИФРУЕМ ЗНАЧЕНИЕ ПО МЛАДШЕМУ
MOVLW B'OOOOllll 9
ANDWF BUML,1 9
MOVFW EEDATA
MOVWF BUMH ;И СТАРШЕМУ РЕГИСТРАМ МИНУТ.
SWAPF BUMH,1 9
MOVLW B'OOOOllll 9
ANDWF BUMH,1
MOVFW BUML /ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ.
MOVWF SC2 9
MOVFW BUMH 9
MOVWF SC3
MOVLW .32 /МИНУТЫ ЗАПИСАНЫ ДО 31 АДРЕСА,
ADDWF COUE,1 /ЧАСЫ С 32 АДРЕСА.
CALL AKTETE /СЧИТАЕМ ЗНАЧЕНИЕ ЧАСОВ.
MOVFW EEDATA /РАСШИФРУЕМ ЗНАЧЕНИЕ ПО МЛАДШЕМУ
MOVWF BUHL 9
MOVLW B'OOOOllll 9
ANDWF BUHL,1 9
MOVFW EEDATA
MOVWF BUHH /И СТАРШЕМУ РЕГИСТРАМ ЧАСОВ.
SWAPF BUHH,1 9
MOVLW B'OOOOllll 9
ANDWF BUHH,1
MOVFW BUHL /ПЕРЕПИШЕМ ЗНАЧЕНИЯ ЧАСОВ
MOVWF SC4 /В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFW BUHH 9
MOVWF SC5
MOVLW .32 /ПРИВЕДЕМ ЗНАЧЕНИЕ СЧЕТЧИКА АДРЕСА
SUBWF COUE,1 /В ДИАПАЗОН МИНУТ.
RETURN
DIN
л BCF FLAG,4 /СБРОСИМ ФЛАГ УСТАНОВКИ ЧАСОВ.
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РЕЖИМА НАЖАТА,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,1 /ВКЛЮЧИМ ФЛАГ УСТАНОВКИ ДНЕЙ.
MOVLW .10 /ВО .2,3,5 РАЗРЯДЫ ЗАПИШЕМ "с".
MOVWF SC2 9
MOVWF SC3 9
MOVWF SC5
MOVFW DAY1 /ЗНАЧЕНИЕ РЕГИСТРА ДНЕЙ
MOVWF SC4 /ПЕРЕПИШЕМ В РЕГИСТР ИНДИКАЦИИ.
RETURN
104
Программатор
CORAT
BCF FLAG, 4 ;СБРОСИМ ФЛАГ УСТАНОВКИ ЧАСОВ.
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РЕЖИМА НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
BSF FLAG2,1 /ВКЛЮЧИМ ФЛАГ УСТАНОВКИ КОРРЕКЦИИ.
MOVLW . 10 ГВ 3,5 РАЗРЯДЫ ЗАПИШЕМ "с".
MOVWF SC3 9
MOVWF SC5
MOVFW COR /ЗНАЧЕНИЕ РЕГИСТРА КОРРЕКЦИИ
MOVWF SC2 /ПЕРЕПИШЕМ В РЕГИСТР ИНДИКАЦИИ.
MOVFW CORNEG /ЗНАЧЕНИЕ РЕГИСТРА ЗНАКА КОРРЕКЦИИ
MOVWF SC4 /ПЕРЕПИШЕМ В РЕГИСТР ИНДИКАЦИИ.
RETURN
INDSC
CLRF SC2 /ВО ВСЕ РЕГИСТРЫ ИНДИКАЦИИ
CLRF SC3 /ЗАПИШЕМ НУЛИ.
CLRF SC4 9
CLRF SC5 9
RETURN
HOB I
BTFSC FLAG,6 /ЕСЛИ ИДЕТ УСТАНОВКА
RETURN /ВОЗВРАЩАЕМСЯ. ' '
BTFSC PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ЗАПИСИ,
GOTO нови /УСТАНОВИМ ФЛАГ ПОПЕРЕМЕННОГО РЕЖИМА.
BTFSC PORTA,3 /ЕСЛИ ИДЕТ ВЫБОР РЕЖИМА,
RETURN /ВОЗВРАЩАЕМСЯ.
BTFSS FLAG1,4 /ЕСЛИ НЕ ВКЛЮЧЕН ПОПЕРЕМЕННЫЙ РЕЖИМ,
RETURN /ВОЗВРАЩАЕМСЯ.
BTFSS FLAG,2 /ЕСЛИ НЕ ВКЛЮЧЕН ФЛАГ УСТАНОВКИ,
RETURN /ВОЗВРАЩАЕМСЯ.
INCF COBA,0 /УВЕЛИЧИМ АДРЕС ПРОЗВЕНЕВШЕГО БУДИЛЬНИКА.
MOVWF COUE
BSF FLAG,6 /СИМУЛИРУЕМ УСТАНОВКУ БУДИЛЬНИКОВ.
CALL BINHB /СЧИТАЕМ ЗНАЧЕНИЕ СЛЕДУЮЩЕГО БУДИЛЬНИКА.
BCF FLAG,6 /СБРОСИМ СИМУЛЯЦИЮ.
MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ БУДИЛЬНИКА ИЗ РЕГИСТРОВ
MOVWF SB2 /ИНДИКАЦИИ В РЕГИСТРЫ ИНДИКАЦИИ БУДИЛЬНИКА.
MOVFW SC3 /
MOVWF SB3 9
MOVFW SC4 9
MOVWF SB4 9
MOVFW SC5 9
MOVWF SB5
INCF COBAHU,1 /УВЕЛИЧИМ СЧЕТЧИК СЕКУНД ПОПЕРЕМЕННОГО РЕЖИМА.
BCF STATUS,0
MOVLW .11 /10 СЕКУНД ИНДИКАЦИЯ ЧАСОВ.
SUBWF COBAHU,0
BTFSC STATUS,0 /ЕСЛИ БОЛЬШЕ,
GOTO BUHOI /ИДЕМ НА ИНДИКАЦИЮ БУДИЛЬНИКА.
GOTO HATU /ИЛИ НА ИНДИКАЦИЮ ЧАСОВ.
BUHOI
BCF STATUS,2
MOVLW .12 * /2 СЕКУНДЫ ИНДИКАЦИЯ БУДИЛЬНИКА.
SUBWF COBAHU,0
BTFSC STATUS,2 /ЕСЛИ УЖЕ 2 СЕКУНДЫ,
105
Устройства с цифровой индикацией
CLRF COBAHU /ОБНУЛИМ СЧЕТЧИК.
CLRF SCO /СЕКУНДЫ В ПАМЯТЬ НЕ ЗАПИСЫВАЮТСЯ
CLRF SCI
’ MOVFW SB2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ БУДИЛЬНИКА
MOVWF SC2 /В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFW SB3 9
MOVWF SC3 9
MOVFW SB4 9
MOVWF SC4 9>
MOVFW SB5 9
MOVWF SC5
BCF RETURN нови FLAG,2 /СБРОСИМ ФЛАГ УСТАНОВКИ.
BSF FLAG1,4 /ВКЛЮЧИМ ПОПЕРЕМЕННЫЙ РЕЖИМ.
BCF FLAG1,0 /СБРОСИМ РЕЖИМ ЧАСОВ.
MOVLW .6 /ПЕРЕМЕСТИМ'ЗАПЯТУЮ ЗА ИНДИКАТОР.
MOVWF CAT 9
RETURN 9
; 14. ПРОВЕРКА ЗАПРЕТА БУДИЛЬНИКОВ ПО ДНЯМ.-
U4851
BTFSC FLAG2,2 /ЕСЛИ ФЛАГ 6,7 ДНЯ УСТАНОВЛЕН
GOTO BUR67 /ПРОВЕРИМ ЗНАЧЕНИЕ ДНЕЙ.
BTFSC FLAG2,3 /ЕСЛИ ФЛАГ 7 ДНЯ УСТАНОВЛЕН,
GOTO BUR7 /ПРОВЕРИМ ЗНАЧЕНИЕ ДНЕЙ.
RETURN
; 15. ПП. ИНДИКАЦИИ С ВЫХОДОМ В ДВОИЧНО-ДЕСЯТИЧНОМ КОДЕ И ЗВОНКА БУДИЛЬНИКА.
• ==ssszssszszs=s=ss:5ess:ss========ss=:==s==s=s=s=s=s==:==s=s==s==ss==s:==5==s=====:==s==s=s=s=sss=szs==s=szs=s=szs=s:s=:sscss
ZIKL CLRF ANOD /ОБНУЛЯЕМ РЕГИСТР АНОДА.
ZSO BSF INTCON,7 /РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
MOVFW SCO /ПЕРЕПИШЕМ ЗНАЧЕНИЕ НУЛЕВОГО РАЗРЯДА ИНДИКАЦИИ
CALL INDZIKL /И ПОЙДЕМ НА ИНДИКАЦИЮ.
CALL ATTU /ПРОИНДИЦИРУЕМ ЗНАЧЕНИЯ РЕЖИМОВ.
ZS01 BTFSS INTCON,7 /ЖДЕМ ПРЕРЫВАНИЯ.
GOTO ZS1 /ХОДИМ ПО КРУГУ.
GOTO ZS01 /ПОСЛЕ ОТРАБОТКИ ПРЕРЫВАНИЯ ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ /РАЗРЯДУ.
ZS1 BSF INTCON,7 /ВСЕ РАЗРЯДЫ ИНДИЦИРУЕМ АНАЛОГИЧНО НУЛЕВОМУ.
MOVFW SCI 9
CALL INDZIKL
CALL U4851 /ПРОВЕРИМ ЗАПРЕТ БУДИЛЬНИКОВ ПО ДНЯМ.
ZS12 BTFSS INTCON,7 9
GOTO ZS2
GOTO ZS12 9
ZS2 BSF INTCON,7 9
MOVFW SC2 9
106
Программатор
CALL CALL INDZIKL KYRANT ;ПРОВЕРИМ АВТОУСТАНОВКУ ПО СИГНАЛАМ В 00 ЧАСОВ
ZS23 BTFSS INTCON,7 /
GOTO ZS3 /
GOTO ZS23 9
ZS3 BSF INTCON,7 9
MOVFW SC3 9
CALL INDZIKL
CALL KEY /ПРОВЕРИМ КНОПКИ.
ZS34 BTFSS INTCON,7 9
GOTO ZS4 9
GOTO ZS34 9
ZS4 BSF INTCON,7 9
MOVFW SC4 9
CALL INDZIKL
CALL BUDC /ПРОВЕРИМ СОВПАДЕНИЕ УСТАНОВЛЕННЫХ БУДИЛЬНИКОВ
ZS45 BTFSS INTCON,7 9
GOTO ZS5 9 ,
GOTO ZS45 9
ZS5 BSF INTCON,7 9
MOVFW SC5 9
CALL INDZIKL 9
ZS50 BTFSS INTCON,7 9
GOTO ZIKL 9
GOTO ZS50 9
INDZIKL MOVWF SEG /ЗАПИСЬ ЗНАЧЕНИЯ РАЗРЯДА ВО ВСПОМОГАТЕЛЬНЫЙ
РЕГИСТР BCF STATUS,0 /СБРОСИМ ПРИЗНАК ПЕРЕНОСА.
RLF SEG, 1 /СДВИГАЕМ ВЛЕВО, ВЫРАВНИВАЯ ВЫХОДНОЙ РЕГИСТР.
MOVFW ANOD /ЗАГРУЖАЕМ НОМЕР АНОДА.
SUBWF CAT, 0 /СРАВНИВАЕМ С ПОЛОЖЕНИЕМ ЗАПЯТОЙ.
BTFSC STATUS,2 /ЕСЛИ СОВПАДАЮТ,
BCF SEG, 5 /УСТАНОВИМ ЗАПЯТУЮ.
BTFSS STATUS,2
BSF SEG, 5 /ИНАЧЕ СБРОСИМ ЗАПЯТУЮ.
BTFSS PORTA,4 /ЕСЛИ КНОПКА БУДИЛЬНИКА ОТЖАТА,
GOTO INDZVON /ПРОПУСКАЕМ УСТАНОВКУ ЗВОНКА.
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 1,
BSF SEG, 6 /ТО УСТАНОВИМ ПОТЕНЦИАЛ НА RB6 (EXE).
BTFSS FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 0,
INDZVON BCF SEG, 6 /СБРОСИМ РАЗРЯД ЗВОНКА.
MOVFW SEG /ПЕРЕПИШЕМ СФОРМИРОВАННОЕ ЗНАЧЕНИЕ
MOVWF PORTB /В ВЫХОДНОЙ РЕГИСТР ПОРТА TRISB.
MOVFW ANOD * /ЗАГРУЖАЕМ НОМЕР АНОДА
MOVWF PORTA /В ПОРТ А. .
INCF ANOD,1 /4-1 В РЕГИСТР АНОДА.
107
Устройства с цифровой индикацией
RETURN
; 16. УСТАНОВКА ПО СИГНАЛАМ ТОЧНОГО ВРЕМЕНИ В 00 ЧАСОВ.
KYRANT
BTFSC FLAG3,4 ;ЕСЛИ РАВЕНСТВО БЫЛО,
GOTO ATOK /ИДЕМ НА ОЖИДАНИЕ СИГНАЛА.
BTFSS FLAG3,2 /ЕСЛИ РАВЕНСТВА ЧАСОВ НЕ БЫЛО,
GOTO KYRAH /ИДЕМ СРАВНИВАТЬ ЧАСЫ.
BTFSS FLAG3,3 ;ЕСЛИ РАВЕНСТВА МИНУТ НЕ БЫЛО,
GOTO KYRAM /ИДЕМ СРАВНИВАТЬ МИНУТЫ.
BTFSS FLAG3,4 /ЕСЛИ РАВЕНСТВА ДЕСЯТКОВ СЕКУНД НЕ БЫЛО
GOTO KYRASH /ИДЕМ СРАВНИВАТЬ СЕКУНДЫ.
GOTO KYRASL /ИЛИ СЕКУНДЫ ПОСЛЕ ПОЛУНОЧИ.
KYRAH MOVLW 023H /ЕСЛИ УЖЕ 23 ЧАСА,
SUBWF BUH, 0 f
BTFSC STATUS,2
BSF RETURN FLAG3,2 /УСТАНОВИМ ФЛАГ РАВЕНСТВА ЧАСОВ.
KYRAM . MOVLW 059H /ЕСЛИ УЖЕ 59 МИНУТ,
SUBWF BUM, 0 f ,
BTFSC STATUS,2
BSF RETURN FLAG3,3 /УСТАНОВИМ ФЛАГ РАВЕНСТВА МИНУТ.
KYRASH MOVLW .5 /ЕСЛИ УЖЕ 50 СЕКУНД,
SUBWF SECH,0 /
BTFSC STATUS,2
BSF RETURN FLAG3,4 /УСТАНОВИМ.ФЛАГ РАВЕНСТВА СЕКУНД.
KYRASL MOVLW .1 /ЕСЛИ НЕ БЫЛО ОБНУЛЕНИЯ ДО ПОЛНОЧИ,
SUBWF SECH,0 /ЖДЕМ 10 СЕКУНД ПОСЛЕ ПОЛУНОЧИ.
BTFSC STATUS,2
GOTO RETURN KYRAO ;И ИДЕМ НА СБРОС ФЛАГОВ.
KYRAO BCF FLAG3,2 /ПОСЛЕ АВТООБНУЛЕНИЯ СБРОСИМ
BCF FLAG3,3 /ВСЕ ФЛАГИ
BCF FLAG3,4
MOVLW .6 ;И ПОСТАВИМ ЗАПЯТУЮ
MOVWF RETURN CAT /В 6 РАЗРЯД.
; 17. СРАВНЕНИЕ : РЕГИСТРОВ БУДИЛЬНИКА И ЧАСОВ.
BUDC BTFSC FLAG1,3 /ЗАПРЕТ СРАВНЕНИЯ ПО ДНЯМ?
/ RETURN /ДА.
BTFSC FLAG2,5 /ЗАПРЕТ СРАВНЕНИЯ ПО СЕКУНДАМ?
RETURN /ДА.
BTFSC FLAG1,2 / СРАВНЕНИЕ ВЫПОЛНЕНО.?
RETURN /ДА.
BTFSC FLAG,6 /ИДЕТ УСТАНОВКА?
108
Программатор
RETURN ;ДА.
SWAPF HOUH,0 ;ЗАПИСЬ МЛАДШЕГО И ’СТАРШЕГО
IORWF HOUL,0 /РЕГИСТРОВ ЧАСОВ
MOVWF BUH /В ОДИН РЕГИСТР ЗАПИСИ ЧАСОВ.
SWAPF MINH,0 /ЗАПИСЬ МЛАДШЕГО И СТАРШЕГО
IORWF MINL,0 /РЕГИСТРОВ МИНУТ
MOVWF BUM /В ОДИН РЕГИСТР ЗАПИСИ МИНУТ.
CLRF COUE /СБРОС СЧЕТЧИКА АДРЕСА.
BCF STATUS,2 /СБРОС БИТА НУЛЯ.
MOVLW .0 /ЕСЛИ ЧАСЫ НЕ РАВНЫ НУЛЮ,
SUBWF BUH, Q /
BTFSS STATUS,2.
'GOTO AKTM /ИДЕМ ВЫБИРАТЬ С АДРЕСА ЧАСОВ.
BCF STATUS,2
MOVLW .0 /ЕСЛИ МИНУТЫ НЕ РАВНЫ НУЛЮ,
SUBWF BUM, 0 /
BTFSS STATUS,2 / 4
GOTO AKTM /ИДЕМ ВЫБИРАТЬ С АДРЕСА МИНУТ.
RETURN /НУЛЕВЫЕ ЗНАЧЕНИЯ НЕ СРАВНИВАЮТСЯ.
BUDH BCF STATUS,2
MOVFW EEDATA /СРАВНИМ СЧИТАННОЕ ЗНАЧЕНИЕ ЧАСОВ
SUBWF BUH, 0 /БУДИЛЬНИКА С ТЕКУЩИМ ВРЕМЕНЕМ.
BTFSC STATUS,2 /ЕСЛИ ОНИ РАВНЫ,
BSF FLAG,7 /УСТАНОВИМ ФЛАГ РАВЕНСТВА ЧАСОВ.
BTFSS STATUS,2
BCF FLAG,3 /ИНАЧЕ СБРОСИМ ФЛАГ РАВЕНСТВА МИНУТ.
MOVLW .32 /ПРИВЕДЕМ ЗНАЧЕНИЕ
SUBWF COUE,1 /СЧЕТЧИКА АДРЕСА В ДИАПАЗОН МИНУТ.
BTFSS FLAG,7 /ЕСЛИ ЧАСЫ НЕ СОВПАЛИ,
GOTO BUDM1 /ПРОВЕРИМ ОСТАВШИЕСЯ ЗНАЧЕНИЯ МИНУТ.
BSF FLAG1,2 /УСТАНОВИМ ФЛАГ РАВЕНСТВА БУДИЛЬНИКА И ЧАСОВ
MOVFW COUE /ЗАФИКСИРУЕМ АДРЕС СОВПАВШЕГО БУДИЛЬНИКА
MOVWF COBA /В СЧЕТЧИКЕ' ПОПЕРЕМЕННОГО РЕЖИМА.
BCF FLAG,3 /СБРОСИМ ФЛАГИ РАВЕНСТВА МИНУТ
BCF FLAG,7 /И ЧАСОВ.
BTFSC FLAG1,6 /ЕСЛИ ВКЛЮЧЕН РЕЖИМ ЗВОНКА 1 МИНУТУ,
BSF FLAG,0 /ВКЛЮЧИМ' ФЛАГ ЗВОНКА.
BTFSC FLAG1,5 /ЕСЛИ ВКЛЮЧЕН НЕПРЕРЫВНЫЙ РЕЖИМ ЗВОНКА,
GOTO RETURN BUDMZ /ПОЙДЕМ ВКЛЮЧАТЬ ЗВОНОК.
BUDMZ BTFSS ZVONNEP, 0 /ЕСЛИ РЕГИСТР ЗВОНКА НЕЧЕТНЫЙ,
BSF FLAG,0 /ВКЛЮЧИМ ЗВОНОК.
BTFSC ZVONNEP,0 /ЕСЛИ РЕГИСТР ЗВОНКА ЧЕТНЫЙ,
BCF RETURN FLAG,0 /ВЫКЛЮЧИМ ФЛАГ ЗВОНКА.
BUDM MOVFW EEDATA /ВЫЧТЕМ СЧИТАННОЕ ЗНАЧЕНИЕ
SUBWF BUM, 0 /ИЗ РЕГИСТРА МИНУТ.
BTFSS STATUS,2 /ЕСЛИ НЕТ РАВЕНСТВА,
BCF FLAG,3 /СБРОСИМ ФЛАГ РАВЕНСТВА МИНУТ.
BTFSC STATUS,2 /ЕСЛИ РАВЕНСТВО,
BSF FLAG,3 /УСТАНОВИМ ФЛАГ РАВЕНСТВА МИНУТ.
BTFSC FLAG,3 /ЕСЛИ ФЛАГ РАВЕНСТВА МИНУТ УСТАНОВЛЕН,
109
Устройства с цифровой индикацией
BUDM1 GOTO ВСЕ INCF MOVLW SUBWF BTFSC RETURN GOTO AKTH STATUS,0 COUE,1 .32 COUE,0 STATUS,0 AKTETE /ИДЕМ СРАВНИВАТЬ ЧАСЫ. /ЗНАЧЕНИЕ СЧЕТЧика адеЕСА ;МОЖЕТ БЫТЬ НЕ БОЛЕЕ 31. /ЕСЛИ УЖЕ 32, /ЗАКОНЧИМ СРАВНЕНИЕ МИНУТ.' /ИНАЧЕ ПРОДОЛЖИМ СРАВНЕНИЕ.
; 18. ВЫБОРКА ИЗ ПАМЯТИ.
АКТН
MOVLW ADDWF .32 COUE,1 ; НАЧИНАЕМ СРАВНЕНИЕ С 32 АДРЕСА.
АКТМ GOTO AKTETE ; НА ВЫБОРКУ ЧАСОВ. •
CLRF COUE НАЧИНАЕМ С НУЛЕВОГО АДРЕСА.
АКТЕТЕ
MOVFW COUE /УСТАНОВИМ АДРЕС И НАЧНЕМ
MOVWF EEADR /СЧИТЫВАНИЕ.
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,RD /ЧТЕНИЕ.
BCF STATUS,RPO /БАНК 0.
MOVLW .255 /ЕСЛИ ПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWF EEDATA,0 /ЗАПИШЕМ -0.
BTFSC STATUS,Z f
CALL AKTEO
BTFSC FLAG,6 /ЕСЛИ ИДЕТ УСТАНОВКА, СЧИТЫВАЕТСЯ
RETURN /ЗНАЧЕНИЕ ПО ОДНОМУ АДРЕСУ.
BTFSC FLAG,3 /ЕСЛИ РАВЕНСТВО МИНУТ БЫЛО,
GOTO BUDH /ИДЕМ СРАВНИВАТЬ ЧАСЫ.
BTFSS FLAG,3 /ЕСЛИ РАВЕНСТВА МИНУТ НЕ БЫЛО,
GOTO BUDM /ПРОДОЛЖАЕМ СРАВНИВАТЬ МИНУТЫ.
АКТЕО GOTO BUDH /ИНАЧЕ СРАВНИМ ЧАСЫ.
CLRF RETURN EEDATA /ОБНУЛИМ, Т.К. 255 НЕ ВПИСЫВАЕТСЯ
; 19. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF MOVFW MOVWF MOVFW MOVWF W_TEMP STATUS STATUS_TEMP FSR FSR TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W /STATUS, ; FSR. r И
RECONST CALL SI /ПРИБАВИМ1 1 В СЧЕТЧИК СЕКУНД. /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
’ BCF INTCON,2 (РАЗРЕШАЕМ ПРЕРЫВАНИЯ). MOVFW STATUS_TEMP MOVWF STATUS MOVFW FSR_TEMP MOVWF FSR /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ: /STATUS, /FSR, ТАЙМЕРА
ПО
Программатор
MOVFW RETURN W_TEMP ;w. /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 20. СЧЕТ Ч-М -с-д.
SI • INCF SMC,1 /ДЕЛИТЕЛЬ НА 250.
MOVFW SMC
ADDLW -0FAH /250=0FAH.
BZ SLFO t '
RETURN
SLFO
CLRF SMC /ОБНУЛИМ СЧЕТЧИК МИЛЛИСЕКУНД.
BSF FLAG,2 /УСТАНОВИМ ФЛАГ УСТАНОВКИ.
MOVLW .9 /ЕСЛИ УЖЕ 9 СЕКУНД,
SUBWF SECL,0
BC SH /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ СЕКУНД.
INCF SECL,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
BTFSC FLAG2,0 /ЕСЛИ ЗВОНОК ПО 1 СЕК. КАЖДЫЙ ЧАС,
GOTO SLF1 /ТО ИДЕМ УСТАНАВЛИВАТЬ ФЛАГИ.
BTFSC FLAG1,7 /ЕСЛИ ЗВОНОК -5 СЕКУНД,
GOTO SLF5 . /ИДЕМ ОТСЧИТЫВАТЬ.
RETURN
SLF1 BTFSC FLAG,0 /СБРОС ФЛАГА ЗВОНКА.
BCF FLAG,0 /УСТАНОВКА ЗАПРЕТА СРАВНЕНИЯ БУДИЛЬНИКОВ
RETURN
SLF5 BTFSS FLAG1,2 /ЕСЛИ ЗВОНОК РАЗРЕШЕН,
RETURN
BSF FLAG,0 /УСТАНОВИМ ФЛАГ ЗВОНКА.
INCF ZVONS,1 /ПРИБАВИМ ЕДИНИЦУ В СЧЕТЧИК ЗВОНКА.
MOVLW .6 /ЕСЛИ УЖЕ 5 СЕКУНД,
SUBWF ZVONS,0
BZ SLF50 RETURN ;ИДЕМ УСТАНАВЛИВАТЬ ФЛАГИ.
CLRF ZVONS /ОБНУЛИМ СЧЕТЧИК ЗВОНКА.
BCF FLAG,0 /СБРОС ФЛАГА ЗВОНКА.
BCF FLAG1,2 /СБРОС ФЛАГА РАВЕНСТВА ЧАСОВ.
BSF FLAG2,5 /УСТАНОВКА ЗАПРЕТА СРАВНЕНИЯ БУДИЛЬНИКОВ
RETURN
SH CLRF SECL /ОБНУЛИМ СЕКУНДЫ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW SECH /ЕСЛИ ДЕСЯТКИ СЕКУНД
ADDLW -5H /РАВНЫ 5,
BZ ML /ИДЕМ СРАВНИВАТЬ МИНУТЫ.
INCF SECH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ СЕКУНД.
RETURN
ML CLRF SECH /ОБНУЛИМ ДЕСЯТКИ СЕКУНД.
MLU BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW MINL /ЕСЛИ ЕДИНИЦЫ МИНУТ
111
Устройства с цифровой индикацией
ADDLW -9H ;РАВНЫ 9,
BZ MH /ИДЕМ СРАВНИВАТЬ ДЕСЯТКИ.
INCF MINL,1 ;ИНАЧЕ УВЕЛИЧИМ МИНУТЫ.
BTFSC FLAG1,7 Г
BCF FLAG2,5
BTFSC FLAG1,6 /ЕСЛИ УСТАНОВЛЕН ФЛАГ 1 МИНУТЫ,
GOTO MHF /ИДЕМ УСТАНАВЛИВАТЬ ФЛАГИ.
BTFSC FLAG1,5 /ЕСЛИ УСТАНОВЛЕН ФЛАГ НЕПРЕРЫВНОГО ЗВОНКА,
CALL BUNZ /ИДЕМ ВКЛЮЧАТЬ СЧЕТЧИК.
BCF FLAG1,2 /СБРОСИМ ФЛАГ РАЗРЕШЕНИЯ ЗВОНКА ДЛЯ 1 МИНУТЫ
RETURN
MHF
BTFSS FLAG1,2 ;ЕСЛИ ЗВОНОК РАЗРЕШЕН,
RETURN
BCF FLAG,0 /ВЫКЛЮЧИМ ЗВОНОК
BCF FLAG1,2 /И ФЛАГ РАЗРЕШЕНИЯ
RETURN
BUNZ
BTFSS FLAG1,2 /ЕСЛИ ЗВОНОК РАЗРЕШЕН,
RETURN
INCF ZVONNEP, 1 /УВЕЛИЧИМ ЗНАЧЕНИЕ СЧЕТЧИКА НЕПРЕРЫВНОГО РЕЖИМА
BTFSC ZVONNEP,0 /ЕСЛИ ЗНАЧЕНИЕ НЕЧЕТНОЕ,
BSF FLAG,0 /ВКЛЮЧИМ звонок.
BTFSS ZVONNEP,0 /ЕСЛИ ЗНАЧЕНИЕ ЧЕТНОЕ,
BCF FLAG,0 /ВЫКЛЮЧИМ ЗВОНОК.
RETURN
MH
CLRF MINL /ОБНУЛИМ ЕДИНИЦЫ МИНУТ.
BTFSC FLAG1,6 /ЕСЛИ ВКЛЮЧЕН РЕЖИМ ЗВОНКА 1 МИНУТА,
CALL MHF /ИДЕМ СБРАСЫВАТЬ ФЛАГИ.
BTFSC FLAG1,5 /ЕСЛИ ВКЛЮЧЕН НЕПРЕРЫВНЫЙ РЕЖИМ ЗВОНКА
CALL BUNZ /ПРОВЕРИМ СЧЕТЧИК НЕПРЕРЫВНОГО РЕЖИМА.
BCF FLAG1,2 /СБРОСИМ ЗАПРЕТ ЗВОНКА.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW MINH /ЕСЛИ ДЕСЯТКИ МИНУТ
ADDLW -5H /РАВНЫ 5,
BZ HL /ИДЕМ СРАВНИВАТЬ ЧАСЫ.
INCF MINH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ МИНУТ.
RETURN
HL
CLRF MINH /ОБНУЛИМ ДЕСЯТКИ МИНУТ.
HLU BCF MOVFW ADDLW BZ MOVFW STATUS,2 HOUH -2H HL4 HOUL /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ. /ЕСЛИ ДЕСЯТКИ ЧАСОВ /РАВНЫ 2, /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ. /ЕСЛИ ЕДИНИЦЫ ЧАСОВ РАВНЫ 9,
ADDLW BZ INCF BTFSC -9H HH HOUL,1 FLAG2,0 /УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ. /ИНАЧЕ УВЕЛИЧИМ ЕДИНИЦЫ ЧАСОВ. /ЕСЛИ ВКЛЮЧЕН РЕЖИМ ЗВОНКА 1 СЕК. (БОЙ)
BSF FLAG,0 RETURN /ВКЛЮЧИМ ЗВОНОК.
112
Программатор
HL4
BCF STATUS,2 ;СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW HOUL /ЕСЛИ ЕДИНИЦЫ ЧАСОВ .
ADDLW -3H /РАВНЫ 3,
BZ HH /ИДЕМ ОБНУЛЯТЬ.
INCF HOUL,1 /ИЛИ ПРИБАВИМ ЕДИНИЦУ.
BTFSC FLAG2,0 ‘ /ЕСЛИ ВКЛЮЧЕН РЕЖИМ ЗВОНКА 1 СЕК. (БОЙ)
BSF FLAG,0 /ВКЛЮЧИМ ЗВОНОК.
RETURN
НН
CLRF HOUL /ОБНУЛИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG2,0 /ЕСЛИ ВКЛЮЧЕН РЕЖИМ ЗВОНКА 1 СЕК. (БОЙ)
BSF FLAG,0 /ВКЛЮЧИМ ЗВОНОК.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW HOUH - /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -2H , /РАВНЫ ДВУМ,
BZ DL /ИДЕМ УВЕЛИЧИВАТЬ ДНИ.
INCF HOUH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
RETURN
DL
CLRF HOUH /ОБНУЛИМ ДЕСЯТКИ ЧАСОВ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW DAY1 /НЕ БОЛЕЕ 7 ДНЯ.
ADDLW -7H /ЕСЛИ РАВНО,
BZ DAY /ИДЕМ УСТАНАВЛИВАТЬ В 1, ЕСЛИ НЕТ - ПРОПУСКАЕМ
INCF DAY1,1 /ПРИБАВИМ ЕДИНИЦУ К ДНЯМ.
RETURN
DAY
MOVLW 01H /УСТАНОВКА В' 1
MOVWF DAY1 /ДНЕЙ НЕДЕЛИ (0- ДНЯ НЕТ).
BSF FLAG,1 /УСТАНОВКА БИТА ОТСЧЕТА 5 СЕК. ДЛЯ КОРРЕКЦИИ
RETURN
; 21. ВВЕДЕНИЕ КОРРЕКЦИИ CO ЗНАКОМ.
CORN
BTFSS GOTO MOVFW CORNEG,0 CORN1 COR /ПРОПУСТИТЬ, ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ (=1) /ИНАЧЕ ИДЕМ УВЕЛИЧИВАТЬ ЗНАЧЕНИЕ СЕКУНД. /ЗАГРУЖАЕМ УСТАНОВОЧНЫЙ РЕГИСТР КОРРЕКЦИИ
MOVWF NEGCOR /ПЕРЕПИСЫВАЕМ ВО ВРЕМЕННЫЙ РЕГИСТР.
NEGF NEGCOR,0 /ИЗМЕНИМ ЗНАК ЧИСЛА И ПРИБАВИМ
ADDWF SECL,1 /К СЕКУНДАМ.
VXVM 1 BCF RETURN FLAG,1 /СБРОСИМ ФЛАГ 5 СЕКУНД.
MOVFW COR /ПРИБАВИМ ПОЛОЖИТЕЛЬНУЮ КОРРЕКЦИЮ
ADDWF SECL,1 /К СЕКУНДАМ.
BCF RETURN FLAG,1 ft /СБРОСИМ ФЛАГ 5 СЕКУНД.
END
113
Устройства с цифровой индикацией
Универсальный таймер
Трудно перечислить все применения таймеров в быту. Это и кухонный тай-
мер, и таймер включения вентилятора, приема лекарств, включения освещения
или электронных приборов... Автор стремился реализовать в предлагаемом тай-
мере все возможные случай применения с широким диапазоном выдержки
времени от единиц секунд до 13 суток и 3 часов. Таймер имеет возможность
непрерывного и единичного (повторного) режима работы, запись в память од-
ной установки и выключение индикации для уменьшения энергопотребления.
Таймер запрограммирован на микроконтроллере PIC16F84A и имеет три
разряда индикации на светодиодах АЛ304Г с общим анодом. Алгоритм про-
граммы показан на рис. 25.
После пуска и начальной установки регистров включаются таймер с предде-
лителем, имеющими такой коэффициент деления, что таймер переполняется
каждую секунду. По переполнению таймера происходит прерывание. Во время
прерывания происходит опрос состояния кнопок и флагов. В первую секунду по
нажатой кнопке устанавливается соответствующий флаг. В следующую секунду
по установленному флагу выполняется необходимая установка. Установка значе-
ний производится в регистры установки, поэтому после каждой установки про-
исходит перезапись в регистры индикации. Запись в необходимые регистры ин-
дикации осуществляется в зависимости от положения запятой. Если запятая в
нулевом разряде, то счет происходит в секундах; если — в первом разряде, то
счет в минутах, и, наконец, если запятая во втором разряде, то счет в часах. Вер-
нее сказать, не счет, а установка и индикация. Дискретность счета постоянна и
равна одной секунде. Каждое действие установки заканчивается восстановлени-
ем значений регистров после прерывания. По завершении прерывания процес-
сор выполняет основную работу по организации динамической индикации.
Если установка не происходит и флаг установки равен нулю, то включается
счетчик паузы. Каждую секунду значение восьмиразрядного регистра счетчика
увеличивается на единицу. Таким образом, регистр паузы переполнится (уста-
новится в ноль) через 256 секунд (4 мин 16 сек) и включит флаг паузы. После
завершения прерывания в подпрограмме индикации индикация выключится.
После нажатия кнопки «Стоп» все флаги сбросятся и индикация снова вклю-
чится. Поскольку во время паузы значения регистров не изменяются, то после
включения индикации на табло высветятся те же значения, что были до вы-
ключения индикации. Из режима паузы можно выйти и нажатием кнопки
«Пуск». В этом случае таймер сразу начнет счет по ранее установленному зна-
чению, сохраненному в регистрах установки. Так осуществляется повторный
режим по заранее установленному значению.
Если устанавливается непрерывный режим работы, то необходима запись
установленного значения в энергонезависимую память. В память записывается
как установленное значение, так и местоположение запятой. Выборка из памяти
в непрерывном режиме происходит автоматически после завершения каждого
цикла счета. Выборку из памяти можно также произвести и в ручном режиме.
На рис. 26 приведена принципиальная схема таймера. Входы RBO—RB7 ис-
пользуются как выходы значений сегментов светодиодов. Во время прерывания
входы RB4—RB7 нагружаются кнопками SA2—SA5: «Плюс», «Минус», «Пуск»,
114
Универсальный таймер
Рис. 25. Алгоритм программы универсальный таймер
115
Устройства с цифровой индикацией
Рис. 26. Универсальный таймер
«Стоп». Кнопка SA1 (ЗПТ) подключена к постоянному входу RA3. Выводы
RAO—RA3 используются как выходы анодов светодиодов. Вывод RA4 на схеме
нагружен звуковым излучателем НСМ120бх со встроенным генератором часто-
той 2 кГц. Этот вывод включает нагрузку нулевым потенциалом и может быть
использован для подключения мощной нагрузки обычными способами, т. е.
при помощи реле, оптопары или симметричного тиристора. В непрерывном
режиме работы на этом выводе потенциал будет изменяться с каждым циклом,
поэтому включать нагрузку можно как высоким уровнем, так и низким.
Питание таймера осуществляется тремя элементами типа АА (пальчиковые).
Потребляемый ток при всех включенных сегментах равен 15 мА. Малый по-
требляемый ток в режиме «Пауза», равный 0,1 мА, позволяет обойтись без вы-
ключателя питания. Если таймер будет использоваться для коммутации силь-
ноточной нагрузки, то напряжение источника питания не должно превышать
6 В. Необходимо заметить, что гасящие резисторы Rl—R8 подобраны для мак-
симальной яркости и, в зависимости от условий эксплуатации, могут быть уве-
личены до 560 Ом, что немного уменьшит потребляемый ток таймера с вклю-
ченной индикацией. Если схема будет запитываться от блока питания, то воз-
можна установка светодиодов с большими размерами цифр, например АЛЗЗЗГ.
В этом случае значение гасящих резисторов Rl—R8 должно быть равно 200 Ом
(общая нагрузка на порт: не более 50 мА). Кварцевый резонатор ZQ1 на часто-
ту 32768 Гц цилиндрический, часовой. Применяемые кнопки: миниатюрные
импортные мембранного типа.
Назначение кнопок и работа с таймером
SA1 (ЗПТ) — для переключения запятой по разрядам индикатора;
SA2 (Плюс) — для прибавления единицы в выбранный разряд установки;
SA3 (Минус) — для вычитания единицы из выбранного разряда установки;
116
Универсальный таймер
SA4 (Пуск) — включение индикации и таймера;
SA5 (Стоп) — для включения индикации и остановки таймера.
Одновременное нажатие кнопок:
«Стоп» + «Плюс» вызывает запись в энергонезависимую память индицируе-
мого значения;
«Стоп» + «Минус» Вызывает считывание из памяти;
«Стоп» + «ЗПТ» включает непрерывный режим.
Индикация непрерывного режима осуществляется чередованием включения
всех запятых и запятой в выбранном разряде.
Работу с таймером необходимо начинать с выбора разряда установки при
помощи кнопки «ЗПТ». В выбранном разряде устанавливается необходимое
значение кнопками «Плюс» или «Минус». Изменение на единицу значения в
выбранном разряде будет происходить через одну секунду. Далее необходимо
установить запятую на разряд в зависимости от времени счета. Если предпола-
гается непрерывный режим работы, то необходимо записать значение индика-
тора в память одновременным нажатием кнопок «Стоп» и «Плюс». Затем
включается непрерывный режим («Стоп» + «ЗПТ»). Кнопка «Пуск» может
быть нажата в любое время, даже после включения режима «Пауза». Установ-
ленные ранее значения сохранятся и будут отработаны таймером. Выход из ре-
жима непрерывной работы осуществляется кнопкой «Стоп», при этом сбрасы-
вается индикация непрерывного режима.
Работа таймера в одноразовом (повторном) режимах исключает запись в па-
мять, так как для этого режима значения выбираются из регистров установки.
Однако одноразовый режим может быть включен и после считывания значения
из памяти. После отработки таймером времени в одноразовом режиме включа-
ется звуковой излучатель. Выключение зуммера происходит при нажатии кноп-
ки «Стоп». Нажатием кнопки «Стоп» можно остановить работу таймера в лю-
бой момент. При повторном нажатии кнопки «Пуск» таймер начнет работу со
значений, записанных в,установочных регистрах.
Счет таймера производится в вычитающем режиме, но в часовом формате.
Например, установленное значение 560, в секундах будет соответствовать 5 ми-
нутам и 60 секундам, т. е. фактически — 6 минутам.
Максимально возможные значения установки таймера:
Запятая в нулевом разряде — 999, = 9 мин 99 сек =10 мин 39 сек.
Запятая в первом разряде — 99,9 = 9 час 99 мин = 10 час 39 мин.
Запятая во втором разряде — 9,99 = 9 дней 99 часов =13 дней 3 часа.
Выключение индикации происходит не только во время простоя таймера,
но и во время работы длительностью более 10 минут. Вернее, при изменении
состояния регистра счетчика десятков минут. То есть при работе со счетом в
секундах (запятая в нулевом разряде) индикация выключаться не будет, потому
что нет изменения регистра десятков минут. Установлен только регистр единиц
минут. При установке значения, например, 01,1 (11 минут) индикация выклю-
чится через одну минуту. Выключение индикации выполнено для экономии
энергии элементов, поскольку в этом режиме потребляемый ток такой же, как
и в режиме «Паузы». Включение индикации без нарушения работы таймера
осуществляется кнопкой «Пуск».
117
Устройства с цифровой индикацией
То, что таймер начал работу, например, в режиме часового счета после на-
жатия кнопки «Пуск», будет свидетельствовать уменьшение на единицу значе-
ния нулевого разряда. Это произойдет потому, что все предыдущие разряды
равны нулю.
На рис. 27 и 28 изображены печатная плата и расположение элементов тай-
мера. На рис. 29 показана печатная плата для светодиодов АЛ304Г со стороны
их установки. Пунктирными линиями обозначены проводники, идущие с об-
ратной стороны.
Рис. 27. Универсальный таймер.
Печатная плата
Рис. 28. Универсальный таймер.
Расположение элементов на печатной плате
Рис. 29. Универсальный таймер. 3-х разрядный индикатор на АЛ304Г. Сторона установки светодиодов
; УНИВЕРСАЛЬНЫЙ ТАЙМЕР.
; 3 РАЗРЯДА ИНДИКАЦИИ НА АЛ304Г.
; УСТАНОВКА ПЛЮС, МИНУС ДО 999.
; В ЧАСАХ 9.99, МИНУТАХ 99.9, СЕКУНДАХ 999.
; ВКЛЮЧЕНИЕ НЕПРЕРЫВНОГО РЕЖИМА.
; СЧЕТ В ЧАСОВОМ ФОРМАТЕ.
; ЗАПИСЬ В ПАМЯТЬ НАБРАННОГО ЗНАЧЕНИЯ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
118
Универсальный таймер
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ ОБЛАСТИ.
/ saes@mail.ru
; ПРОГРАММА = KUXTIM.ASM
; ДАТА ИЗМЕНЕНИЯ: 10-11-02 (ВЕРСИЯ: 10.11.02).
/ АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
_______________CONFIG 3FF0H
• =ss===ssss==ss=ssssss=s:===s:ss===ss=====s:==s:======= ==========
; ИСПОЛЬЗУЕТСЯ ЧАСОВОЙ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 32, ЧТО ВМЕСТЕ
; С TMR0 (256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ,
; ДАЕТ НА ВЫХОДЕ ТАЙМЕРА 1 СЕКУНДУ (4x32x256=32768).
; РЕГИСТРЫ СПЕЦИАЛЬНОГО НАЗНАЧЕНИЯ.
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TMR0 EQU 01H ;ТАЙМЕР.
OPTIQNR EQU 81H ;(RP0=l) УПРАВЛЕНИЯ И КОНФИГУРАЦИИ
PCL EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ.'
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA . EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
EEDATA EQU 08H /ДАННЫХ ПЗУ.
EECON1 EQU 88H /РЕГИСТР ЧТЕНИЯ-ЗАПИСИ ПЗУ.
EEADR EQU 09H /АДРЕСА ПЗУ.'
EECON2 EQU 89H /РЕГИСТР ЧТЕНИЯ-ЗАПИСИ ПЗУ.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
SECO EQU 0CH /МЛАДШИЙ РАЗРЯД СЧЕТЧИКА
SEC1 EQU 0DH /СРЕДНИЙ РАЗРЯД.
SEC2 EQU 0EH /СТАРШИЙ РАЗРЯД.
CAT EQU 0FH /УСТАНОВКА ЗАПЯТОЙ.
/ ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ ФЛАГОВ.
FLAG EQU 02ОН
; ФЛАГИ УСТАНОВОК:
; 0-> ПУСК.
; 1-> УСТАНОВКА ПЛЮС.
; 2-> УСТАНОВКА МИНУС.
; 3-> ЗАПИСЬ В ПАМЯТЬ.
; 4->
; 5-> РЕЖИМ: ОДНОРАЗОВЫЙ - НЕПРЕРЫВНЫЙ.
; 6-> ВКЛЮЧЕНИЯ СПЯЩЕГО РЕЖИМА.
119
Устройствас цифровой индикацией
; 7 -> СЧИТЫВАНИЯ.
FLA ; ФЛАГИ ; 0 ; 1 ; 2 ; 3 EQU 021H РЕЗУЛЬТАТА РАБОТЫ: - > ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ. - > ЗАПЯТАЯ. - > ЗВОНОК. - > ИНДИКАЦИИ ВСЕХ ЗАПЯТЫХ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
SECL SECH MINL MINH HOUL HOUH DEYL ANOD SEGD EQU 010Н ; EQU 011Н , EQU 012H , EQU 013H , EQU 014H , EQU 015H EQU 016H , EQU 017H EQU 018H ;ЕДИНИЦЫ СЕКУНД ИНДИКАЦИИ. ;ДЕСЯТКИ СЕКУНД ИНДИКАЦИИ. /ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ. /ДЕСЯТКИ МИНУТ ИНДИКАЦИИ. /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ. /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ. /ЕДИНИЦЫ ДНЕЙ ИНДИКАЦИИ. /АНОД. , • /СЕГМЕНТЫ.
; РЕГИСТРЫ: ВРЕМЕННЫЕ, УСТАНОВКИ.
PAUSA EQU 01 ЭН PAUSI EQU 01AH COU EQU 01BH ABC EQU 01CH W_TEMP EQU 01DH STATUS_TEMP EQU 01EH FSR_TEMP EQU 01FH SEC EQU 022H COUI EQU 023H /ВРЕМЯ ДО ВХОЖДЕНИЯ В СПЯЩИЙ РЕЖИМ. ;ВРЕМЯ ДО ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ. ;СЧЕТЧИК ЦИКЛОВ СЧЕТА. ;ВРЕМЕННЫЙ РЕГИСТР ЗАПИСИ. ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ. /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ЙРИ ПРЕРЫВАНИИ. /ВРЕМЕННЫЙ ДЛЯ FSR. /ВРЕМЕННЫЙ ДЛЯ ЗАПИСИ. /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ. -
/ 1. ПУСК.
f ORG 0 GOTO INIT ORG 4 GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BCF CLRF STATUS,RPO B'OOOOOIOO' OPTION_REGA80H B'lOlOOOOO' INTCON B'OOOOIOOO' TRISAA80H B'00000000' TRISBA80H STATUS,RPO FLAG /ПЕРЕХОДИМ В БАНК 1. /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100, /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ. /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = TMR0.. / RA0-RA2, RA4 - НА ВЫХОД, RA3 - ВХОД. /RBO- RB7-ВЫХОД /ПЕРЕХОДИМ В БАНК 0. /СБРАСЫВАЕМ ВСЕ ФЛАГИ -
120
Универсальный таймер
CLRF CLRF FLA TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SECO
CLRF SEC1
CLRF SEC2
CLRF SECL
CLRF SECH
CLRF MINL
CLRF MINH
CLRF HOUL
CLRF HOUH
CLRF DEYL
CLRF PAUSA *
CLRF PAUS I
CLRF COU
CLRF COUI
CLRF ABC
MOVLW .1 ;УСТАНАВЛИВАЕМ
MOVWF CAT /РАЗРЯД ЗАПЯТОЙ.
G^TO INDZIKLO t
; 3. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KEY
KEY BTFSS PORTB,7 /.ЕСЛИ ПУСК ВКЛЮЧЕН (ВКЛЮЧАЕТСЯ НУЛЕМ)
GOTO KEY3 /ИДЕМ ВКЛЮЧАТЬ ФЛАГ ПУСКА.
BTFSS PORTB,6 /ОПРЕДЕЛИМ УСТАНОВКУ ФЛАГОВ
BSF FLAG,1 /ПЛЮСА
BTFSS PORTB,5 /И
BSF FLAG,2 /МИНУСА.
TSTF FLAG /ЕСЛИ НИЧЕГО НЕ НАЖАТО,
BZ KEY 2 /ТО ИДЕМ СЧИТАТЬ ВРЕМЯ ДО ПАУЗЫ.
CLRF PAUSA /СБРОСИМ РЕГИСТР ПАУЗЫ.
GOTO RECONST Г
KEY2 BCF STATUS,2
INCF PAUSA,1 /ПРИБАВЛЯЕМ 256 РАЗ В СЕКУНДАХ
BTFSC STATUS,2 /ЕСЛИ УЖЕ НОЛЬ,
BSF FLA, 0 /УСТАНОВИМ ФЛАГ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ.
GOTO RECONST /ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
KEY3
BSF FLAG,0 GOTO IND ; 4. ВЫБОР РАЗРЯДА УСТАНОВКИ CATI TSTF CAT / BZ САТО BCF STATUS,, 0 RLF CAT, 1 BTFSS CAT,3 GOTO RECONST УСТАНОВИМ ФЛАГ ПУСКА. И СДЕЛАЕМ ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ. ЕСЛИ ИЗ ПАМЯТИ СЧИТАН НОЛЬ, ИДЕМ УСТАНАВЛИВАТЬ. ОБНУЛИМ РАЗРЯД, ЧТОБЫ ПРИ СДВИГЕ ЗАПИСАТЬ 0. СДВИНЕМ ВЛЕВО НА 1 РАЗРЯД ЗАПЯТУЮ. ЕСЛИ ЕЩЕ НЕ 3 РАЗРЯД,
121
Устройства с цифровой индикацией
CLRF CAT ;ИНАЧЕ УСТАНАВЛИВАЕМ
BSF CAT, 0 /НУЛЕВОЙ РАЗРЯД.
GOTO IND /ОБНОВИМ ИНДИКАЦИЮ.
САТО
BSF CAT, 0 /УСТАНАВЛИВАЕМ НУЛЕВОЙ РАЗРЯД
GOTO RECONST /
; 5. ТАБЛИЦА ЗНАЧЕНИЙ СЕГМЕНТОВ.
SEGDATA ;7, 6, 5, 4, 3, 2, 1, 0
ADDWF PCL, F ;H, G, F, E, D, C, B, A
АНОД КАТОД
RETLW B'llOOOOOO' ; о В'ОШШ'
RETLW B'11111001' / 1 B'0000110'
RETLW B'10100100' / 2 B'1011011'
RETLW B'10110000' / 3 B'1001111'
RETLW B'10011001' ; 4 B'1100110'
RETLW B'10010010' / 5 B'1101101'
RETLW B'10000010' / 6 B'1111101'
RETLW B'11111000 ' / 7 B'OOOQlll'
RETLW B'10000000' / 8 B' 1111111 '
RETLW B'10010000' ; 9 B'1101111'
; б. ИНДИКАЦИЯ.
INDZIKLO BSF INTCON,7 /ЧТОБЫ HE ПРОПУСТИТЬ ПРЕРЫВАНИЕ.
BTFSC FLA, 0 /ЕСЛИ ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ ВКЛЮЧЕН,
GOTO MRAK /ПОЙДЕМ ГАСИТЬ ИНДИКАЦИЮ.
CLRF ANOD ' /ОБНУЛЯЕМ АНОД, ЧТОБЫ ОЧИСТИТЬ СТАРШИЕ РАЗРЯДЫ
BSF ANOD,0 /УСТАНОВИМ МЛ. РАЗРЯД АНОДА.
BTFSS FLAG,0 /ЕСЛИ ПУСК НЕ ВКЛЮЧЕН,
GOTO ZIKLS /ИНДИКАЦИЯ В СЕКУНДАХ.
BTFSC CAT, 1 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ РАЗРЯДЕ,
GOTO ZIKLM ./ИНДИКАЦИЯ В МИНУТАХ.
BTFSC CAT, 2 /ЕСЛИ ЗАПЯТАЯ ВО ВТОРОМ РАЗРЯДЕ,
GOTO ZIKLH /ИНДИКАЦИЯ В ЧАСАХ.
ZIKLS MOVLW 010H /ЗАПИСЬ НОМЕРА РЕГИСТРА МЛ. РАЗРЯДА СЕКУНД
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
GOTO ZIKLC 7
ZIKLM MQVLW 012H /ЗАПИСЬ МЛ. РАЗРЯДА МИНУТ
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
GOTO ZIKLC /
ZIKLH MOVLW 014H /ЗАПИСЬ МЛ. РАЗРЯДА ЧАСОВ.
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
ZIKLC BTFSS FLAG,5 /ЕСЛИ ВКЛЮЧЕН НЕПРЕРЫВНЫЙ РЕЖИМ
GOTO ZIKLA
INCF COUI,1 ,-+1 СЧИТАЕМ ЦИКЛЫ ИНДИКАЦИИ.
MOVLW . 150 /150 ЦИКЛОВ ГОРЯТ ВСЕ ЗАПЯТЫЕ,
SUBWF COUI,0 /ИНДИЦИРУЯ НЕПРЕРЫВНЫЙ РЕЖИМ.
122
Универсальный таймер
BZ COUZ
BTFSS FLA, 3 /ЕСЛИ ФЛАГ ЦИКЛОВ РАВЕН 0,
GOTO GOTO ZIKLA /ЗАПЯТАЯ СВЕТИТСЯ.
ZIKLF . /ИНАЧЕ СВЕТЯТСЯ ВСЕ ЗАПЯТЫЕ.
couzo BCF FLA,3 /СБРАСЫВАЕМ ФЛАГ ЦИКЛОВ.
ZIKLA MOVFW ANOD /СРАВНИМ РАЗРЯД АНОДА
SUBWF CAT, 0 /С РАЗРЯДОМ ЗАПЯТОЙ.
BTFSC STATUS,2 /ЕСЛИ ОНИ СОВПАДАЮТ,
BSF FLA,1 . /УСТАНОВИМ ФЛАГ ЗАПЯТОЙ.
GOTO ZIKLF /ВЫСВЕТИМ.
COUZ CLRF COUI /ОБНУЛИЛИ СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
BTFSC FLA, 3 /ПРОПУСТИТЬ, ЕСЛИ 0.
GOTO COUZO /ИНАЧЕ ИДЕМ СБРАСЫВАТЬ ФЛАГ И СВЕТИТЬ ЗАПЯТУЮ
BSF FLA, 3 /УСТАНОВКА ФЛАГА ЦИКЛОВ.
ZIKLF BTFSC FLA, 2 /ЕСЛИ ВКЛЮЧЕН ЗВОНОК,
BCF ANOD,4 /УСТАНОВИМ В НОЛЬ РАЗРЯД ЗВОНКА (О-ВКЛЮЧЕНО).
BTFSS FLA, 2 /ЕСЛИ ЗВОНОК ВЫКЛЮЧЕН,
BSF ANOD,4 /УСТАНОВИМ В ЕДИНИЦУ РАЗРЯД ЗВОНКА.
MOVFW SEGD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТ В.
BTFSC FLA, 1 /ЕСЛИ ФЛАГ ЗАПЯТОЙ ВКЛЮЧЕН,
BCF PORTB,7 /ТО ВЫСВЕТИМ ЗАПЯТУЮ.
BTFSC FLA, 3 /ЕСЛИ ФЛАГ ЦИКЛОВ =1,
BCF PORTB,7 /ТО ВЫСВЕТИМ ЗАПЯТУЮ.
MOVFW ANOD /ЗАГРУЖАЕМ ЗНАЧЕНИЕ АНОДА.
MOVWF PORTA /В ПОРТ А..
BCF FLA, 1 /СБРОСИМ ФЛАГ ЗАПЯТОЙ.
BCF ANOD,4 . /СБРОСИМ РАЗРЯД ЗВОНКА, ЧТОБЫ НЕ МЕШАЛ
СРАВНЕНИЮ.
BCF STATUS,0 /ОБНУЛИМ, ЧТОБЫ НЕ ЗАПИСАТЬ В МЛ. РАЗРЯД.
RLF ANOD,1 /СДВИГ 1 АНОДА НА 1 РАЗРЯД ВЛЕВО.
BTFSC ANOD,3 /ЕСЛИ УЖЕ ДОШЛИ ДО 3 РАЗРЯДА,
GOTO INDZIKLO /ИДЕМ ОБНУЛЯТЬ.
INCF SEGD,F /+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
GOTO ZIKLC /И ИДЕМ.
MRAK MOVLW OFFH /ПОГАСИМ СЕГМЕНТЫ.
MOVWF PORTB
BTFSS FLA, 0 /ЕСЛИ ИНДИКАЦИЯ ВКЛЮЧЕНА,
GOTO INDZIKLO /ПОЙДЕМ СВЕТИТЬ.
BTFSC FLA, 2 /ЕСЛИ ВКЛЮЧИЛСЯ ЗВОНОК,
GOTO MRAKI /ИДЕМ ВКЛЮЧАТЬ ИНДИКАЦИЮ.
BSF INTCON,7 /УСТАНАВЛИВАЕМ БИТ РАЗРЕШЕНИЯ ПРЕРЫВАНИЯ.
GOTO MRAK „ ;ЗАЦИКЛИМСЯ.
MRAKI BCF FLA, 0 /ВКЛЮЧИМ ИНДИКАЦИЮ.
GOTO INDZIKLO /НА ИНДИКАЦИЮ.
123
Устройства с цифровой индикацией
; 7. ВЫБОРКА ИЗ ПАМЯТИ.
АКТ
BCF FLAG,7 ;СБРОСИМ ФЛАГ СЧИТЫВАНИЯ.
CLRF EEADR /НУЛЕВОЙ АДРЕС.
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF SECO /ЗАПИСЬ В РЕГИСТР .
. INCF EEADR,1 /1 АДРЕС.
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF SEC1 /ЗАПИСЬ В РЕГИСТР .
INCF EEADR,1 /2 АДРЕС.
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ.
MOVWF SEC2 /ЗАПИСЬ В РЕГИСТР .
INCF EEADR,1 /3 АДРЕС.
CALL AKTETE /ВЫБОРКА ИЗ ПАМЯТИ. -
MOVWF CAT /ЗАПИСЬ В РЕГИСТР .
CLRF EEADR /НУЛЕВОЙ АДРЕС. . '
GOTO IND /ОБНОВИМ ИНДИКАЦИЮ.
AKTETE
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,RD /ЧТЕНИЕ.
BCF STATUS,RPO /БАНК 0.
MOVLW .255 /ЕСЛИ ПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWF EEDATA,0 /ЗАПИШЕМ -0.
BTFSC STATUS,Z Г
CALL ’ AKTEO
MOVFW EEDATA /ПЕРЕПИШЕМ ДАННЫЕ.
RETURN
АКТЕО
CLRF EEDATA /
RETURN
; 8. ЗАПИСЬ В ПАМЯТЬ.
ZAPISO
CLRF EEADR /ОБНУЛИМ АДРЕС.
MOVLW OCH /АДРЕС ПЕРВОЙ ЗАПИСИ В ЕЕDATA.
MOVWF ABC /ВО ВРЕМЕННЫЙ РЕГИСТР.
ZAPISE
MOVFW ABC /ПО КОСВЕННОЙ АДРЕСАЦИИ
MOVWF FSR ‘/ЗАГРУЖАЕМ ЗНАЧЕНИЕ
MOVFW INDF /РЕГИСТРА.
.MOVWF EEDATA /ЗАПИСЫВАЕМ.
BCF INTCON,GIE /ЗАПРЕТ ПРЕРЫВАНИЙ.
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H, WREN /РАЗРЕШЕНИЕ ЗАПИСИ.
MOVLW 55H /ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
MOVWF EECON2A80H //
MOVLW OAAH //
MOVWF EECON2A80H //
BSF EECON1A80H, WR /ПРИ ЗАПИСИ ВО ФЛЕШ ПЗУ.
ZAPIZ
BTFSS EECON1A80H, .4 /ПОКА НЕ БУДЕТ ЗАКОНЧЕНА ЗАПИСЬ -
124
Универсальный таймер
GOTO ZAPIZ ;ХОДИМ ПО КРУГУ.
ВСЕ EECON1A80H,4 f
ВСЕ EECON1A80H,WREN /ЗАПРЕТ'ЗАПИСИ.2
ВСЕ STATUS,RPO ;БАНК 0.
INCF EEADR,1 ’
MOVFW EEADR /ЕСЛИ УЖЕ 4,
SUBLW .4
BZ EEOO /ТО ИДЕМ ОБНУЛЯТЬ.
INCF ABC, 1 ;+1 В СЧЕТЧИК АДРЕСА.
GOTO EEOO ZAPISE /ПО КРУГУ ДО КОНЦА ЗАПИСИ
CLRF EEADR /ОБНУЛИМ АДРЕС
BCF FLAG,3 /И ФЛАГ.
GOTO RECONST Г
; 9. УСТАНОВКА - МИНУС.
MINUS
BCF FLAG,2 ;СБРОСИМ ФЛАГ МИНУСА.
BTFSC CAT, 1 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ РАЗРЯДЕ,
GOTO MINUS1 /ИДЕМ УСТАНАВЛИВАТЬ ПЕРВЫЙ РАЗРЯД.
BTFSC CAT, 2 /ЕСЛИ ЗАПЯТАЯ ВО ВТОРОМ РАЗРЯДЕ,
GOTO MINUS2 /ИДЕМ УСТАНАВЛИВАТЬ ВТОРОЙ РАЗРЯД.
/ DECF SECO,1 /-1 ИЗ РЕГИСТРА МЛАДШЕГО РАЗРЯДА.
MOVLW .255 /ЕСЛИ В РЕГИСТРЕ 0, ТО РЕЗУЛЬТАТ =255
SUBWF SECO,0 /ЕСЛИ РАВНО 0, ИДЕМ
BZ MINUS9 /НА УСТАНОВКУ 9 В МЛАДШЕМ РАЗРЯДЕ.'
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
MINUS9
MOVLW .9
MOVWF SECO /УСТАНОВКА 9 В МЛАДШЕМ РАЗРЯДЕ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
MINUS1
DECF SEC1,1 /-1 ИЗ РЕГИСТРА СРЕДНЕГО РАЗРЯДА.
MOVLW .255 /ЕСЛИ В РЕГИСТРЕ 0, ТО РЕЗУЛЬТАТ =255
SUBWF SEC1,0 /ЕСЛИ РАВНО 0, ИДЕМ
BZ MINUS19 /НА УСТАНОВКУ 9 В СРЕДНЕМ РАЗРЯДЕ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
MINUS19
MOVLW .9
MOVWF SEC1 /УСТАНОВКА 9 В СРЕДНЕМ РАЗРЯДЕ.'
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
MINUS2
DECF SEC2,1 /-1 ИЗ РЕГИСТРА СТАРШЕГО РАЗРЯДА.
MOVLW .255 /ЕСЛИ В РЕГИСТРЕ 0, ТО РЕЗУЛЬТАТ =255
SUBWF SEC2,0 /ЕСЛИ РАВНО 0, ИДЕМ
BZ MINUS29 /НА УСТАНОВКУ 9 В СТАРШЕМ РАЗРЯДЕ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
MINUS29
MOVLW . 9 *
MOVWF SEC2 /УСТАНОВКА 9 В СТАРШЕМ РАЗРЯДЕ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
125
Устройства с цифровой индикацией
; 10. УСТАНОВКА - ПЛЮС.
PLUS BCF FLAG,1 ;СБРОС ФЛАГА ПЛЮСА.
BTFSC CAT, 1 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ РАЗРЯДЕ,
GOTO PLUS1 /ИДЕМ УСТАНАВЛИВАТЬ ПЕРВЫЙ РАЗРЯД.
BTFSC CAT, 2 /ЕСЛИ ЗАПЯТАЯ ВО ВТОРОМ РАЗРЯДЕ,
GOTO PLUS2 /ИДЕМ УСТАНАВЛИВАТЬ ВТОРОЙ РАЗРЯД.
INCF SECO,1 ,-+1 В РЕГИСТР.
MOVLW .10 /ЕСЛИ В РЕГИСТРЕ 10, ТО
SUBWF SECO,0
BZ PLUSO /ИДЕМ ОБНУЛЯТЬ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
PLUS0 CLRF SECO
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
PLUS1 INCF SEC1,1 /+1 В РЕГИСТР.
MOVLW .10 /ЕСЛИ В РЕГИСТРЕ 10, ТО
SUBWF SEC1,0
BZ PLUS10 /ИДЁМ ОБНУЛЯТЬ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
PLUS10 CLRF SEC1
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
PLUS2 INCF SEC2,1 /+1 В РЕГИСТР.
MOVLW .10 /ЕСЛИ В РЕГИСТРЕ 10, ТО
SUBWF SEC2,0
BZ PLUS20 /ИДЕМ ОБНУЛЯТЬ.
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
PLUS20 CLRF SEC2
GOTO IND /НА УСТАНОВКУ РЕГИСТРОВ ИНДИКАЦИИ.
; 11. ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
IND ‘ BTFSS FLAG,0 /ЕСЛИ ПУСКА НЕТ,
GOTO INDS . /ИНДИЦИРУЕМ В СЕКУНДАХ.
BTFSC CAT, 1 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ РАЗРЯДЕ,
GOTO INDM /ИНДИЦИРУЕМ В МИНУТАХ.
BTFSC CAT, 2 /ЕСЛИ ЗАПЯТАЯ ВО ВТОРОМ РАЗРЯДЕ,
GOTO INDH /ИНДИЦИРУЕМ В ЧАСАХ.
INDS CLRF ' DEYL /ОБНУЛЯЕМ РЕГИСТРЫ
CLRF HOUH ' /СТАРШИХ РАЗРЯДОВ.
CLRF HOUL 9
CLRF MINH
MOVFW SECO /ЗНАЧЕНИЕ МЛ. РАЗРЯДА УСТАНОВКИ
MOVWF SECL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД СЕКУНД.
MOVFW SEC1 /ЗНАЧЕНИЕ СРЧ РАЗРЯДА УСТАНОВКИ
MOVWF ' SECH /ПЕРЕПИСЫВАЕМ В СТ. РАЗРЯД СЕКУНД
126
Универсальный таймер
MOVFW SEC2 /ЗНАЧЕНИЕ СТ. РАЗРЯДА УСТАНОВКИ
MOVWF MINL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД .МИНУТ.
GOTO RECONST Г
INDM
CLRF SECL /ОБНУЛЯЕМ РЕГИСТРЫ
CLRF SECH /ПРЕДЫДУЩИХ РАЗРЯДОВ.
- CLRF HOUH /И СТАРШИХ РАЗРЯДОВ.
CLRF DEYL
MOVFW SECO /ЗНАЧЕНИЕ МЛ. РАЗРЯДА УСТАНОВКИ
MOVWF MINL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД МИНУТ.
MOVFW SEC1 /ЗНАЧЕНИЕ СР. РАЗРЯДА УСТАНОВКИ
MOVWF MINH /ПЕРЕПИСЫВАЕМ В СТ. РАЗРЯД МИНУТ.
MOVFW SEC2 /ЗНАЧЕНИЕ СТ. РАЗРЯДА УСТАНОВКИ
MOVWF HOUL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД ЧАСОВ.
GOTO RECONST /
INDH
CLRF SECL /ОБНУЛЯЕМ РЕГИСТРЫ
CLRF SECH /ПРЕДЫДУЩИХ
CLRF MINL /РАЗРЯДОВ.
CLRF MINH Г 1
MOVFW SECO /ЗНАЧЕНИЕ МЛ. РАЗРЯДА УСТАНОВКИ
MOVWF HOUL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД ЧАСОВ.
MOVFW SEC1 /ЗНАЧЕНИЕ СР. РАЗРЯДА УСТАНОВКИ
MOVWF HOUH /ПЕРЕПИСЫВАЕМ В СТ. РАЗРЯД ЧАСОВ.
MOVFW SEC2 /ЗНАЧЕНИЕ СТ. РАЗРЯДА УСТАНОВКИ
MOVWF DEYL /ПЕРЕПИСЫВАЕМ В МЛ. РАЗРЯД ДНЕЙ.
GOTO RECONST Г
; 12. СТОП.
STOP
BTFSC FLA, 2 /ЕСЛИ ВКЛЮЧЕН ЗВОНОК,
GOTO STOPO /ПОЙДЕМ ВЫКЛЮЧИМ ЕГО.
CLRF FLAG /ЕСЛИ НАЖАТА ТОЛЬКО КНОПКА СТОП,
CLRF FLA /СБРОСИМ ФЛАГИ.
BTFSS PORTB,6 /ЕСЛИ ВКЛЮЧЕН СТОП И ЛЛЮС,
BSF FLAG,3 /УСТАНОВИМ ФЛАГ ЗАПИСИ.
BTFSS PORTB,5 /ЕСЛИ ВКЛЮЧЕН СТОП И МИНУС,
BSF FLAG,7 /УСТАНОВИМ ФЛАГ СЧИТЫВАНИЯ.
•BTFSS PORTA,3 /ЕСЛИ ВКЛЮЧЕН СТОП И ЗПТ.,
BSF FLAG,5 /УСТАНОВИМ ФЛАГ НЕПРЕРЫВНОГО РЕЖИМА.
TSTF FLAG /ЕСЛИ ЕСТЬ УСТАНОВКА,
BTFSC STATUS,2
CLRF PAUSA /ОБНУЛИМ ПАУЗУ.
GOTO RECONST f
STOPO
BCF FLA, 2 /ОБНУЛИМ ФЛАГ ЗВОНКА.
BTFSC FLAG,0 /ЕСЛИ НЕПРЕРЫВНЫЙ РЕЖИМ (ПУСК НЕ ВЫКЛЮЧЕН),
GOTO SL /ИДЕМ СЧИТАТЬ ДАЛЬШЕ.
GOTO RECONST /ИНАЧЕ ЗАВЕРШАЕМ ПРЕРЫВАНИЕ.
; 13. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
127
Устройства с цифровой индикацией
MOVFW STATUS ;STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
BSF STATUS,5 ;БАНК 1.
MOVLW B'11110000' /РАЗРЕШАЕМ ВХОДА RB4-RB7
MOVWF TRISBA80H /ДЛЯ СЧИТЫВАНИЯ СОСТОЯНИЯ КНОПОК
MOVLW B'10100000' Г
MOVWF INTCON
BCF STATUS,5 /БАНК 0.
BTFSS PORTB,4 /ЕСЛИ НАЖАТА КНОПКА "СТОП",
GOTO STOP /ИДЕМ НА СТОП.
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ПУСКА =1,
GOTO SL /ТО ИДЕМ СЧИТАТЬ.
BTFSS PORTA,3 /ЕСЛИ НАЖАТА КНОПКА ЗАПЯТОЙ,
GOTO CAT I /ИДЕМ МЕНЯТЬ ЗНАЧЕНИЕ.
BTFSC FLAG,3 /ЕСЛИ ФЛАГ ЗАПИСИ УСТАНОВЛЕН,
GOTO ZAPISO /ИДЕМ НА ЗАПИСЬ.
BTFSC FLAG,1 /ЕСЛИ УСТАНОВЛЕН ФЛАГ ПЛЮСА,
GOTO PLUS /ИДЕМ НА ПЛЮС.
BTFSC FLAG,2 /ЕСЛИ УСТАНОВЛЕН ФЛАГ МИНУСА,
GOTO MINUS /ИДЕМ НА МИНУС.
BTFSC FLAG,7 /ЕСЛИ УСТАНОВЛЕН ФЛАГ СЧИТЫВАНИЯ
GOTO АКТ /ИДЕМ СЧИТЫВАТЬ.
GOTO KEY /НА ОПРОС КЛАВИАТУРЫ.
RECONST /ЁОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BSF STATUS,5 /БАНК 1.
MOVLW B'OOOOOOOO' /РАЗРЕШАЕМ ВСЕ НА ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,5 /БАНК 0.
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR / FSR,
MOVFW W_TEMP ;W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 14. СЧЕТ В ЧАСОВОМ ФОРМАТЕ.
SL BTFSS PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ПУСК,
BCF FLA, 0 /ВКЛЮЧИМ ИНДИКАЦИЮ..
TSTF SECL /ЕСЛИ МЛАДШИЙ РАЗРЯД РАВЕН НУЛЮ,
BZ SH /ПРОВЕРИМ СТАРШИЙ РАЗРЯД СЕКУНД.
DECF SECL,F /ИНАЧЕ -1 ИЗ РЕГИСТРА МЛ. РАЗРЯДА
GOTO RECONST Г
SH BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF SECH /ЕСЛИ СТАРШИЙ РАЗРЯД РАВЕН НУЛЮ,
BZ ML /ПРОВЕРИМ МЛАДШИЙ РАЗРЯД МИНУТ.
MOVLW .9 /УСТАНОВИМ
MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД.
DECF SECH,F /-1 ИЗ СТАРШЕГО РАЗРЯДА СЕКУНД.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
128
Универсальный таймер
ML 1
ВСЕ STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF ' MINL /ЕСЛИ МЛАДШИЙ РАЗРЯД РАВЕН НУЛЮ,
BZ MH /ПРОВЕРИМ СТАРШИЙ РАЗРЯД МИНУТ.
MOVLW .9, /УСТАНОВИМ
MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД.
MOVLW .5 9
MOVWF SECH
DECF MINL,F /-1 В СТ. РАЗРЯД.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
МН
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF MINH- /ЕСЛИ СТАРШИЙ РАЗРЯД МИНУТ РАВЕН НУЛЮ,
BZ HL ,Проверим младший разряд часов.
MOVLW .9 /УСТАНОВИМ
MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД И
MOVWF MINL /РЕГИСТР МЛ. РАЗРЯДА МИНУТ.
MOVLW .5 /УСТАНОВИМ
MOVWF SECH /РЕГИСТР СТ. РАЗРЯДА СЕКУНД.
DECF MINH,F /-1 ИЗ РЕГИСТРА СТ. РАЗРЯДА МИНУТ.
BSF FLA, 0 /ВЫКЛЮЧИМ ИНДИКАЦИЮ.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
HL
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF HOUL /ЕСЛИ МЛАДШИЙ РАЗРЯД РАВЕН НУЛЮ,
BZ HH /ПРОВЕРИМ СТАРШИЙ РАЗРЯД ЧАСОВ.
MOVLW .9 /УСТАНОВИМ
' ’MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД И
MOVWF MINL /РЕГИСТР МЛ. РАЗРЯДА МИНУТ.
MOVLW .5 /УСТАНОВИМ
MOVWF SECH /РЕГИСТР СТ. РАЗРЯДА СЕКУНД И
MOVWF MINH /РЕГИСТР СТ. РАЗРЯДА МИНУТ.
DECF HOUL,F /-1 ИЗ МЛ. РАЗРЯДА ЧАСОВ.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
НН
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF HOUH /ЕСЛИ СТАРШИЙ РАЗРЯД ЧАСОВ РАВЕН НУЛЮ,
BZ DL /ПРОВЕРИМ РАЗРЯД ДНЕЙ.
MOVLW .9 /УСТАНОВИМ
MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД,
MOVWF MINL /РЕГИСТР МЛ. РАЗРЯДА МИНУТ,
MOVWF HOUL /РЕГИСТР МЛ. РАЗРЯДА ЧАСОВ.
MOVLW .5 * /УСТАНОВИМ
MOVWF SECH /РЕГИСТР СТ. РАЗРЯДА СЕКУНД И
MOVWF MINH /РЕГИСТР СТ. РАЗРЯДА МИНУТ.
DECF HOUH,F /-1 ИЗ СТАРШЕГО РАЗРЯДА РЕГИСТРА ЧАСОВ.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
DL
BCF STATUS,2 . /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
TSTF DEYL /ЕСЛИ МЛАДШИЙ РАЗРЯД РАВЕН НУЛЮ,
BZ TUSO /ИДЕМ ВКЛЮЧАТЬ ЗВОНОК.
MOVLW .9 /ИНАЧЕ УСТАНОВИМ
MOVWF SECL /РЕГИСТР МЛ. РАЗРЯДА СЕКУНД,
MOVWF MINL /РЕГИСТР МЛ. РАЗРЯДА МИНУТ,
5 Зак. 2418
129
Устройства с цифровой индикацией
MOVLW .5 ;УСТАНОВИМ
MOVWF SECH /РЕГИСТР СТ. РАЗРЯДА СЕКУНД И
.MOVWF MINH /РЕГИСТР СТ. РАЗРЯДА МИНУТ».
MOVLW .2 ;УСТАНОВИМ
MOVWF HOUH /РЕГИСТР СТ. РАЗРЯДА ЧАСОВ.
MOVLW .3 /УСТАНОВИМ
MOVWF HOUL /РЕГИСТР МЛ. РАЗРЯДА ЧАСОВ.
DECF DEYL,F . /-1 ИЗ РАЗРЯДА ДНЕЙ.
GOTO RECONST /НАЧИНАЕМ СНАЧАЛА.
TUSO
BTFSC FLAG,5 /ЕСЛИ ВКЛЮЧЕН НЕПРЕРЫВНЫЙ РЕЖИМ,
GOTO NEPER /ИДЕМ.
BSF FLA, 2 /ИНАЧЕ ВКЛЮЧИМ ЗВОНОК.
BCF FLAG,0 /ФЛАГ ПУСКА ВЫКЛЮЧАЕМ.
GOTO IND /ЗАПИСЬ ИЗ РЕГИСТРОВ УСТАНОВКИ.
NEPER
INCF COU, 1 /+1 В СЧЕТЧИК.
BTFSC COU, 0 /ЕСЛИ МЛАДШИЙ РАЗРЯД 1,
BSF FLA, 2 /УСТАНОВИМ ФЛАГ ЗВОНКА.
BTFSS COU, 0 /ЕСЛИ МЛАДШИЙ РАЗРЯД 0,
BCF FLA, 2 /СБРОСИМ ФЛАГ ЗВОНКА.
GOTO АКТ /СЧИТЫВАНИЕ ИЗ ПАМЯТИ.
. END
= =±2:=== = == = = = = = = = = = =:==:=:========:=:
Автомат включения Освещения
В настоящее время существует несколько способов включения ночного
освещения. Первый — это включение освещения «дедушкиным» способом,
т. е. вручную. Более «продвинутый» способ — автоматическое включение и вы-
ключение освещения в фиксированное время. И последнее достижение техни-
ки — это автоматическое включение освещения по освещенности фотодатчика.
У каждого из этих способов свои недостатки. Предлагаю еще один способ
включения освещения, который лишен недостатков.
Данный автомат может включать и выключать освещение по времени суточ-
ного изменения продолжительности дня в течение года независимо от широты
и долготы места применения. Предусмотрена также возможность выключения
освещения в фиксированное время. Это делает возможным применение авто-
мата для досвечивания до необходимого светового дня в теплицах, птичниках,
животноводческих фермах, аквариумах или на лестничной площадке.
В автомате используются данные изменения светового дня, взятые из пере-
кидного календаря на текущий год. Год от года эти данные изменяются за счет
прецессии и нутации земной оси и влияния сезонной неравномерности враще-
ния Земли в небольших пределах и укладываются в диапазон потребительской
точности. Моменты восхода и захода Солнца не могут являться временем
включения-выключения освещения, так как из-за рефракции атмосферы есте-
ственное освещение предшествует этим моментам. Светлому и темному време-
ни суток предшествуют сумерки. Сумерки, при которых не видны даже наибо-
лее яркие звезды, называются гражданскими. Продолжительность гражданских
130
Автомат включения освещения
сумерек изменяется ежедневно и зависит от положения Солнца на эклиптике
(проекция годичной траектории Солнца на небесную сферу) или склонения
Солнца. Практически это выражается в ежедневном изменении высоты Солнца
над горизонтом. Время продолжительности гражданских сумерек взято из еже-
годного школьного астрономического календаря с разбивкой по 15 дней и ап-
проксимировано на каждый день. В перекидном календаре даются ежедневные
данные продолжительности дня для Москвы. Но эти данные будут отличаться
в любом другом пункте, имеющем свою широту и долготу, т. к. в том месте бу-
дет действовать свое истинное местное время.
Тема времени самая трудная и интересная в астрономии, поэтому во все ее
тонкости вникать нет смысла. Зная о поясном времени с разбивкой по земно-
му шару через 15 градусов, необходимо упомянуть и о декретном времени. На-
пример, в Татарии декретом от 1918 года было установлено, что в республике
будет действовать московское время. Хотя фактически поясное время там будет
отличаться от московского на один час. Этим же декретом установлено по всей
стране декретное время, отличающееся от поясного на один час. Если бы мы
жили по поясному времени, то в дни равноденствия восход солнца был бы в
5 часов, а заход — в. 17 часов (вместо 6 и 18 часов). Можно согласиться со сто-
ронниками экономии электроэнергии. О действии летнего времени все знают
। и поэтому нет смысла о нем говорить. Итожа небольшую прогулку по времени,
можно сказать, что в каждом населенном пункте будет свое время начала и
[. окончания ночи, а следовательно, свое необходимое время включения и вы-
1 ключения ночного освещения. Чтобы учесть все тонкости изменения местного
j истинного времени, в автомате предусмотрено введение утренней и вечерней
[ поправки со своим знаком. Можно было бы вводить в программу широту и
J долготу местности и по ним вычислять время, но это проще только для про-
I граммы, а для потребителя сложнее. Определить координаты местности, даже
имея мелкомасштабную Карту, не всем по силам. А определить опытным путем
необходимую поправку очень просто. Причем однажды определенные утрен-
няя и вечерняя поправки, будут действовать постоянно.
В небольших населенных пунктах, с целью экономии электроэнергии, ноч-
ное освещение выключают в определенное время (00 часов или в 1 час). Для
этого в автомате предусмотрено фиксированное время выключения освещения.
Таким образом, применение этого автомата возможно в любом пункте се-
верного полушария Земли (кроме Заполярья и экватора). Для южного полуша-
рия Земли необходима замена зимнего нулевого дня на летний и наоборот. На
других широтах, возможно, потребуется изменение таблицы поправок в про-
грамме автомата.
Расчет времени включения и выключения освещения производится в следу-
ющей последовательности. За нулевой день принят день зимнего солнцестоя-
ния, т. е. 22 декабря. Поворотным нулевым днем является день летнего солнце-
стояния — 22 иЮня. Для симметричности принято в году 366 дней. Для этого
прибавлен день високосного года — 29 февраля. На каждую установленную да-
ту (число, месяц) рассчитывается, каким по порядку днем (счетный день) явля-
ется данный день, считая от нулевого дня. При достижении дня летнего солн-
цестояния, который принят за нулевой летний день, отсчет идет в обратной
последовательности. Например, 26 июня будет четвертым счетным днем, и по-
правки будут суммироваться ко времени нулевого летнего дня. Это сделано
131
Устройства с цифровой индикацией
из-за того, что по косвенной адресации в один восьмиразрядный регистр мож-
но записать только 256 значений поправок, но никак не 366. Поэтому в регистр
программ записано 183 значения поправки от зимнего дб летнего нулевого дня.
Кроме того, расчет поправки занимает довольно много времени (0,7 сек), хотя
он и производится один раз в сутки. Если производить расчет поправок от ну-
левого дня до 365-го, то это займет около 1,5 секунды, а значит, будет пропу-
щено прерывание на увеличение регистра секунд и часы будут отставать. Но в
этом нет необходимости, поскольку приращение поправок на каждый день от
одного солнцестояния до другого примерно (с бытовой точностью) симметрич-
ны, но имеют разные знаки.
По номеру счетного дня вычисляются утренняя и вечерняя поправки, сум-
мированием всех поправок, начиная от нулевого дня. К полученным поправ-
кам прибавляются со своим знаком установочные утренние и вечерние поправ-
ки. Далее полученные пЪправки прибавляются к времени включения-выключе-
ния освещения нулевого дня, и получаем время включения-выключения
освещения на текущую дату.
Укрупненный алгоритм работы программы показан на рис. 30. После пуска
и инициализации регистров включается предцелитель и таймер TMR0, настро-
енные на переполнение таймера через одну секунду. В это время программа
выполняет индикацию, если идет установка, и сравнение вычисленного значе-
ния времени с текущим временем, если нет установки. При сравнении време-
ни, если есть совпадение, переключаются выходы На включение, если вечернее
время, или на выключение, если утреннее время. По переполнению таймера
происходит прерывание. Увеличиваются значения регистров часов и, если есть
изменение даты (00 часов), выполняются расчеты счетного числа, поправок и
времени включения-выключения. Если нет изменения даты и нет установки,
то программа возвращается из прерывания. Если идет установка, то выполня-
ется проверка нажатых кнопок: «режим», «разряд», «установка». Если во время
установки были изменения числа или месяца, производится перерасчет време-
ни включения-выключения. Если дата не изменялась, то прерывание заверша-
ется. Цикл завершается до следующего прерывания.
На рис. 31 показана принципиальная схема автомата включения освещения.
Выходы микроконтроллера DD1 RAO—RA3 коммутируют катоды светодиодов
HG1—HG3. Выход RA4 работает на вход и на выход. На выход он включает сег-
мент Н, а в режиме входа принимается состояние, кнопки SB4 — «Установка».
Входы RBO—RB6 двунаправленные. В режиме индикации и работы на выход
они включают сегменты светодиодов. При работе на вход к выводам RBI, RB2
подключены кнопки SB1, SB2 «Режим» и «Установка». В рабочем режиме выво-
ды RB3, RB4 работают на выход, коммутируя реле К1 и К2. Вывод RB7 работает
постоянно на вход, управляя включением режима индикации. Цепочка Rl, С1
является схемой сброса микроконтроллера при включении, обеспечивая его
нормальное функционирование. От типа часового кварца (плоский, цилиндри-
ческий, миниатюрный) на частоту 32768 Гц зависит номинал конденсаторов С2,
СЗ, который может лежать в пределах 20...33 пФ. Конденсаторы подбираются
по устойчивому запуску микроконтроллера и при подстройке частоты генера-
ции кварца. В аварийном режиме резервное питание осуществляется элемента-
ми GB1. В обычном режиме питание осуществляется через стабилизатор напря-
жения КР142ЕН5А или аналогичный импортный.
132
Автомат включения освещения
Рис. 30. Автомат включения освещения. Алгоритм работы программы
133
Устройства с цифровой индикацией
УО4КД522Б
Рис. 31. Автомат включения освещения
- т
Автомат может использоваться в единичном экземпляре для частного испо-
льзования или в многократном исполнении, например, в коммунальном хозяй-
стве. Имея много пунктов коммутации освещения, достаточно иметь один ин-
дикатор для установки времени и поправок. Поэтому в схему введен разъем
ХР1, через него подсоединяется плата со светодиодами и их резисторами, а так-
же с кнопками. В последнем случае кнопка с фиксацией SB3 и резистор R14 не
нужны. Вместо них на плате индикации устанавливается перемычка между об-
щим выводом GND и выводом UST. На схеме перемычка показана пунктиром.
Транзисторы VT1, VT2 и реле KI, К2 включают и выключают пусковое реле
КЗ (рис. 32). Реле К1 нормально-разомкнутым контактом К1.1 замыкает цепь
питания реле КЗ при высоком уровне на выходе RB3 микроконтроллера. Сво-
им контактом К3.1 реле КЗ блокируется. При появлении высокого уровня на
выводе RB4 микроконтроллера включится реле К2 и своим нормально-замкну-
тым контактом К2.1 разомкнет цепь питания реле КЗ. При срабатывании реле
КЗ замкнутся контакты К3.2—К3.4. Эти контакты (в зависимости от положе-
ния переключателей SAI—SA3) подключат ту или иную линию освещения
ELI—EL3. Пусковые кнопки SB5, SB6, работающие в ручном режиме, остают-
ся для работы в аварийном режиме.
Печатная плата для единичного изготовления автомата приведена на
рис. 33, расположение элементов на ней — рис. 34. Печатная плата для свето-
диодов показана на рис. 35. Печатная плата разработана для реле типа РЭС15
134
Автомат включения освещения
Рис. 32."Автомат включения освещения. Схема подключения силовых элементов
паспорт РС4.591.003. Без переделки платы можно использовать миниатюрные
реле типа РЭС49 паспорт РС4.569.426.
Назначение кнопок:
SB1 — «Режим», выбор режима установки перемещением запятой по раз; -
дам индикатора;
SB2 — «Разряд», выбор мигающего разряда, в который будет производиться
установка;
SB3 — «Индикация», кнопка с фиксацией для включения светодиодов и ре-
жима установки;
SB4 — «Установка», плюс единица в мигающий разряд.
Описание режимов работы автомата:
00 00 (запятая в нулевом разряде) — установка знака и значения вечерней
поправки;
00 0,0 (запятая в первом разряде) — установка значения фиксированного
времени выключения освещения;
00, 00 (запятая во втором разряде) — установка текущего числа и месяца;
0,0 00 (запятая в третьем разряде) — установка знака и значения утренней
поправки;
00 00 (запятая за пределами индикатора) — установка текущего времени
(часы, минуты).
Знаки поправок устанавливаются в третьем разряде. Единица в этом разряде
соответствует знаку минус, а ноль — знаку плюс. В нулевом и первом разрядах
устанавливается значение поправок в минутах, а во втором разряде — значение
поправок в часах. Число устанавливается во втором и третьем разрядах индика-
тора. Месяц устанавливается в нулевом и первом разрядах индйкатора. Фикси-
135
Устройства с цифровой индикацией
Рис. 33. Автомат включения освещения. Печатная плата
SB4 SB1
HDEFG 3 2 к SB3 А В С 0 1
-GBI -9 В
KSB1-SB4
Рис. 34. Автомат включения освещения. Расположение элементов на печатной плате
Рис. 35. Автомат включения освещения. 4-х разрядный индикатор на АЛ314А.
Сторона установки светодиодов
136
Автомат включения освещения
рованное время выключения и текущее, время устанавливаются в часах и мину-
тах. При установке значений необходимо помнить, что программа не имеет
«защиты от дурака» и требует корректных установок (просто не хватило объема
памяти). Установка фиксированного времени выключения, равная 25 часам и
99 минутам работать не будет. Это же произойдет: если фиксированное время
выключения освещения придется на светлое время суток; если величина по-
правки будет очень большой и перехлестнет длительность ночи. Только уста-
новка текущего месяца автоматически переустанавливается в единичное значе-
ние, если она выполнена некорректно. Собственно, этим можно пользоваться
при установке января. Поскольку при изменении даты происходит перерасчет
значений времени включения и выключения освещения, после каждой уста-
новки в режиме даты индикация кратковременно гаснет (до 0,7 сек). Устанав-
ливая значение месяца, равное 24, после перерасчета высветится значение ме-
сяца, равное 04. Если установить значение месяца, равное 20 — то высветится
значение, равное 01. Десятки месяца можно устанавливать, не переходя на пер-
вый разряд.
Если на индикаторе ни один разряд не мигает, кнопкой «Установка» можно
обнулить значения выбранного режима. При этом обнуляются значения всего
индикатора. Для режима часов обнуляются только значения минут и секунд.
Переключение времени выключения освещения происходит по состоянию
флага, который устанавливается при установке либо утренней поправки, либо
фиксированного времени выключения. Из этого следует, что значение фикси-
рованного времени (как и значение утренней поправки) может находиться на
индикаторе, но не работать. Для того чтобы включились эти режимы, необхо-
дима переустановка любого значения на этом режиме. Например, установлены
значения: 1,0 25 и 12 0,0. Вы не помните, какой из этих режимов устанавливал-
ся Последним. Установите мигающим нулевой разряд в выбранном режиме и
установите 0 или 5 еще раз. После установки будет работать тот режим, в кото-
ром вы делали переустановку.
Для упрощения выполнения расчетов времени включения и выключения
освещения текущее время устанавливается смещенным на 12 часов. В 12 часов
дня (по часам) необходимо в автомате устанавливать 00 чаеов. И в это время
будет смена даты. В 14 часов (по часам) необходимо устанавливать 02 часа
и т. п. При смене даты происходит, как упоминалось выше, перерасчет време-
ни включения-выключения. Число необходимо устанавливать до обеда (по ча-
сам) сегодняшнее, а после обеда — завтрашнее. Сообразуясь со здравым смыс-
лом, естественно, что все установки необходимо производить, когда освещение
выключено. Поскольку выходы, включающие реле К1 и К2, работают на инди-
кацию, то возможно переключение реле от импульсов индикации (как прави-
ло, в состояние выключено). При включении индикации состояние выходов
запоминается. После выключения индикации состояние выходов возвращается
в исходное. В зависимости от типа применяемого реле KI, К2 (различное
время срабатывания), возможно, потребуется отключение базы транзистора
VT1 на время установки. Особенно это может сказаться при установке даты.
Если имеется рубильник для выключения освещения, то лучше его выключить
на время установки.
Определение поправок эмпирическим путем выполняется следующим обра-
зом. Включается автомат с нулевыми поправками на текущую дату. Запомина-
137
Устройства с цифровой индикацией
ется время включения и выключения освещения. Если освещение включается,
когда еще светло, то вечерняя поправка устанавливается со знаком плюс. Эта
поправка будет равна разности времени, на которое необходимо позже вклю-
чить освещение. Если необходимо раньше включить освещение, то поправка
устанавливается со знаком минус.- То есть устанавливается единица в третьем
разряде. Если освещение выключается позже, чем необходимо, т. е. когда уже
светло, то поправка устанавливается со знаком минус. Если освещение выклю-
чается раньше необходимого времени, когда еще темно, то поправка устанав-
ливается со знаком плюс на необходимое время в минутах. Если поправки рав-
ны по абсолютной величине и знаку, то есть другой путь их учета. Для этого
необходимо установить в автомате время, смещенное на данную величину. На-
пример, если вечерняя и утренняя поправки равны плюс 30 минут, то, устанав-
ливая время в автомате в 9 часов утра, необходимо установить 21 час 30 минут.
Тогда отпадает необходимость в установке поправок. Это возможно в пунктах,
имеющих приблизительно равную широту с широтой Москвы. Все определе-
ния поправок эмпирическим путем необходимо выполнять в солнечные дни.
Если посмотреть на работу устройства в общем, то оно представляет собою
автомат для досвечивания светлого времени суток до 24 часов. Изменяя время
выключения освещения, можно установить любое время досвечивания, то есть ]
продления светового дня до необходимого значения. Это бывает необходимо в
теплицах, птичниках, фермах. Для организации досвечивания необходимо из -j
24 часов вычесть время, необходимое вам для досвечивания. Например, необ- j
ходимо установить светлое время в теплице, равное 14 часам. 24 часа минус I
14 часов будет равно 10 часов. Таким образом, устанавливаем утреннюю по-
правку, равную минус 9 часов (1,9 00), а вечернюю поправку, равную минус 1
1 час (примерная продолжительность гражданских сумерек в осенний, зимний, I
весенний периоды). Эти поправки будут действовать до того времени, пока
долгота дня будет оставаться меньше или равна 14 часам (примерно до 12 апре-
ля). Дальнейшая работа автомата будет некорректной и потребуется выключе-
ние или переустановка поправок.
; АВТОМАТ ВКЛЮЧЕНИЯ НОЧНОГО ОСВЕЩЕНИЯ.
; С ВВЕДЕНИЕМ ПОПРАВОК НА МЕСТНОЕ ВРЕМЯ
;. ИЛИ ВЫКЛЮЧЕНИЕМ В ФИКСИРОВАННОЕ ВРЕМЯ. •
; ДЛЯ ЕДИНИЧНОГО ИЗГОТОВЛЕНИЯ РАДИОЛЮБИТЕЛЯМИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ..
; РАБОЧАЯ ВЕРСИЯ БЕЗ ОГРАНИЧЕНИЯ-
; ФАЙЛ: SVET,ASM.
; ВЕРСИЯ: 14-01-03.
; saes@mail.ru
♦INCLUDE P16F84A.INC
__CONFIG 3FF0
;============================================
; КВАРЦ = 32768 ГЦ. х256х4х32= 1 СЕК.
; ДЕЛЕЖ ПИРОГА.
• s:s=====s:======s:s===s=:=s:==s==:====s==========s:
INDF EQU ООН /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01Н ;TMR0.
138
Автомат включения освещения
OPTIONR EQU 01H /OPTION (RP0=l).
PC - EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /СОСТОЯНИЕ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H Г
PORTB EQU 06H
INTCON EQU OBH /РЕГИСТР ПРЕРЫВАНИЙ.
DAY1 EQU OCH /РЕАЛЬНОЕ ЧИСЛО.
MON EQU ODH /СЧЕТНЫЙ МЕСЯЦ.
ATT EQU OEH /ПОЛОЖЕНИЕ ЗАПЯТОЙ (ВЫБОР РЕЖИМА).
MINI EQU OFH /МИНУТЫ СЧЕТЧИКА.
SEC1 EQU 010H /СЕКУНДЫ СЧЕТЧИКА.
DAY IL EQU 011H /ЕДИНИЦЫ ДНЕЙ.
SCO EQU 0.12 H /ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
SCI EQU 013H /ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
SC2 EQU 014H /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ.
SC3 EQU 015H /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ.
DAY1H EQU 016H /ДЕСЯТКИ ДНЕЙ.
MON IL EQU 017H /ЕДИНИЦЫ МЕСЯЦА.
HOU1 EQU 018H /ЧАСЫ.
В DEKM EQU 019H /ВЕЧЕРНИЕ МИНУТЫ НУЛЕВОГО ДНЯ.
UDEKM EQU 01 AH /УТРЕННИЕ МИНУТЫ НУЛЕВОГО ДНЯ.
KATOD EQU 01BH /= АНОДУ, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ (ОБЩИЙ ЭЛЕКТРОД)
COUI EQU 01CH /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
FLAG EQU 01DH
; О- УСТАНОВКА ФИКСИРОВАННОГО ВРЕМЕНИ ВЫКЛЮЧЕНИЯ,
; 1- СОСТОЯНИЯ ВЫХОДОВ,
; 2- ГАШЕНИЯ РАЗРЯДА,
; 5- ЗАПЯТОЙ,
ANOD EQU 01EH /=КАТОДУ, ПОЗИЦИОННОЕ ЗНАЧЕНИЕ.
SEGD EQU 01FH /РЕГИСТР АДРЕСА РАЗРЯДА ИНДИКАЦИИ.
CAT EQU 020H /УСТАНОВКА РАЗРЯДА МИГАНИЯ.
MONO EQU 021H /НУЛЕВОЙ МЕСЯЦ.
DAYO EQU 022H /НУЛЕВОЙ ДЕНЬ.
BM EQU 023H /МИНУТЫ ОБЩЕЙ ВЕЧЕРНЕЙ ПОПРАВКИ.
W TEMP EQU 024H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 025H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
DSMH EQU 026H /БАЙТ АДРЕСАЦИИ В ПП.
LSMH ' EQU 027H /МЛАДШИЙ БАЙТ В ПОДПРОГРАММЕ.
HSMH EQU 028H /СТАРШИЙ БАЙТ В ПП.
FSR TEMP EQU 029H /ВРЕМЕННЫЙ ДЛЯ FSR.
SUMUL EQU 02 AH /МИНУТЫ УТРЕННЕГО ВЫКЛЮЧЕНИЯ ОСВЕЩЕНИЯ.
FLAG1 EQU 02BH /ФЛАГ ПОДСЧЕТА ДНЕЙ И ПОПРАВОК.
; О- ВЫПОЛНЕНО СРАВНЕНИЕ ДО КОНЦА НУЛЕВОГО МЕСЯЦА,
; 1- РАВЕНСТВО РЕАЛЬНОГО И СЧЕТНОГО МЕСЯЦА,
; 2- ЗНАК ОБЩЕЙ ПОПРАВКИ,
; 3- ВЫЧИСЛЕНИЯ ВЕЧЕРНЕЙ ПОПРАВКИ,
139
Устройства с цифровой индикацией
; 4- ВЫЧИСЛЕНИЯ УТРЕННЕЙ ПОПРАВКИ,
; 6- ПЕРЕПОЛНЕНИЕ РЕГИСТРА УТРЕННЕЙ ПОПРАВКИ (256) .
; 7- ПЕРЕПОЛНЕНИЕ РЕГИСТРА ВЕЧЕРНЕЙ ПОПРАВКИ.
SUMBL EQU 02CH /МИНУТЫ ВЕЧЕРНЕГО ВКЛЮЧЕНИЯ ОСВЕЩЕНИЯ.
MON1 EQU 02DH ;СЧЕТНЫЙ МЕСЯЦ.
MON1H EQU 02EH /ДЕСЯТКИ УСТАНОВКИ МЕСЯЦА.
DAYZ EQU 02FH /ЧИСЛО ДНЕЙ ДО РАСЧЕТА ПОПРАВКИ.
DAY EQU ОЗОН /РАБОЧЕЕ ЧИСЛО ДНЕЙ.
DATAU EQU 031H /РЕГИСТР ПРЕОБРАЗОВАНИЯ УТРЕННЕЙ ПОПРАВКИ.
DATAV EQU 032H /РЕГИСТР ПРЕОБРАЗОВАНИЯ ВЕЧЕРНЕЙ ПОПРАВКИ-
SUMU EQU 033H /СУММА УТРЕННИХ ПОПРАВОК ДО РАСЧЕТНОГО ДНЯ.
M_LOW EQU ’ 034H /ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
M_HIGH EQU 035H /ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
H_LOW EQU 036H /ЕДИНИЦЫ ЧАСОВ ИНДИКАЦИИ.
H_HIGH EQU 037H /ДЕСЯТКИ ЧАСОВ ИНДИКАЦИИ.
POPUO EQU 038H /УТРЕННЯЯ ПОПРАВКА, ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ
POPU1 EQU 039H /ДЕСЯТКИ МИНУТ.
POPU2 EQU ОЗАН /ЕДИНИЦЫ ЧАСОВ.
POPU3 EQU 03BH /ЗНАК УТРЕННЕЙ,ПОПРАВКИ.
POPVO. EQU 03CH /ВЕЧЕРНЯЯ ПОПРАВКА, ЕДИНИЦЫ МИНУТ.ИНДИКАЦИИ
POPV1 EQU 03DH /ДЕСЯТКИ МИНУТ.
POPV2 EQU ОЗЕН /ЕДИНИЦЫ МИНУТ.
POPV3 EQU 03FH /ЗНАК ВЕЧЕРНЕЙ ПОПРАВКИ.
FIK0 EQU 040Н /ЕДИНИЦЫ МИНУТ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
FIK1 EQU 041Н /ДЕСЯТКИ МИНУТ.
FIK2 EQU 042Н /ЕДИНИЦЫ ЧАСОВ.
FIK3 EQU 043Н /ДЕСЯТКИ ЧАСОВ".
POPUL EQU 044Н /МИНУТЫ УТРЕННЕЙ ПОПРАВКИ.
POPVL EQU 045Н /МИНУТЫ ВЕЧЕРНЕЙ ПОПРАВКИ.
FI KM EQU 046Н /МИНУТЫ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
FIKH EQU 047Н /ЧАСЫ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
SUMB EQU 048Н ' /СЕММА ВЕЧЕРНИХ ПОПРАВОК ДО РАСЧЕТНОГО ДНЯ.
SUMUH EQU 049Н /ЧАСЫ УТРЕННЕГО ВЫКЛЮЧЕНИЯ ОСВЕЩЕНИЯ.
SUMBH ’ EQU 04 АН /ЧАСЫ ВЕЧЕРНЕГО ВКЛЮЧЕНИЯ ОСВЕЩЕНИЯ.
UM EQU ’ 04ВН /МИНУТЫ УТРЕННЕЙ ПОПРАВКИ.
BH EQU 04СН /МИНУТЫ ВЕЧЕРНЕЙ ПОПРАВКИ.
UDEKH EQU 04DH /УТРЕННИЕ ЧАСЫ НУЛЕВОГО ДНЯ.
BDEKH EQU 04ЕН /ВЕЧЕРНИЕ ЧАСЫ НУЛЕВОГО ДНЯ.
UH EQU 04FH /ЧАСЫ УТРЕННЕЙ ПОПРАВКИ.
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
SEGDATA ; 6, 5, 4, 3, 2, 1, О
ADDWF PCL,F ; А, В, С, D, Е, F, G
RETLW В'01111110' /О
RETLW В'00110000' /1
140
Автомат включения освещения
RETLW B'OllOllOl' ;2
RETLW B'OllllOOl' /3
RETLW B'OOllOOll' /4
RETLW B'.01011011' /5
RETLW B'OlOlllll' ;6
RETLW B'OlllOOOO' /7
RETLW В'ОИНШ' /8
RETLW В'01111011' ;9
э. ПЕРЕКОДИРОВКА ДЕСЯТИЧНОГО ЗНАЧЕНИЯ ДЕСЯТКОВ В ДВОИЧНОЕ.
DECBIN
ADDWF PC, 1
RETLW B'00000000' /0
RETLW B'00001010' /10
RETLW B'00010100' /20
RETLW B'OOOllllO' /30
RETLW B'00101000' /40
RETLW B'OOHOOIO' ; 50
RETLW B'OOllllOO' ; 60
RETLW B'OIOOOHO' /70
RETLW B'01010000' ; 80
RETLW B'OIOHOIO' ; 90
; 4. ПЕРЕЗАПИСЬ УСТАНОВОК В РЕГИСТРЫ.
UST4 MOVFW ATT ;КУДА ПОЙТИ ПРИ
ADDWF PC, 1 /УСТАНОВКЕ: ..
GOTO VETSHI /ВЕЧЕРНЯЯ ПОПРАВКА.
GOTO FIKSI /ФИКСИРОВАННОЕ ВРЕМЯ ВЫКЛЮЧЕНИЯ
GOTO DAMONI /ДЕНЬ И МЕСЯЦ.
GOTO UTROI /УТРЕННЯЯ ПОПРАВКА.
GOTO HOMII /ЧАСЫ.
; 5. НАХОЖДЕНИЕ РАСЧЕТНОГО ДНЯ.
DUMA
MOVFW MON1 ;УСТАНОВОЧНЫЙ..
SUBWF MONO,0 /НУЛЕВОЙ.
SKPNZ /ЕСЛИ МЕСЯЦЫ РАВНЫ,
GOTO DIMA12 /ВЫЧИСЛЯЕМ В НУЛЕВОМ МЕСЯЦЕ.
SKPZ /ЕСЛИ МЕСЯЦЫ НЕ РАВНЫ,
CALL DIMA9 /ПРИБАВИМ ДНИ ДО КОНЦА МЕСЯЦА
DUMAO
MOVFW MON1 /ИНАЧЕ СРАВНИМ УСТАНОВОЧНЫЙ
SUBWF MON, 0 /СО СЧЕТНЫМ МЕСЯЦЕМ.
SKPNZ /ЕСЛИ ОНИ УЖЕ РАВНЫ,
GOTO DUMOO /ПРИБАВИМ ДНИ.
MOVFW MON /ОЧЕРЕДНОЙ МЕСЯЦ.
CALL DAYMON /СКОЛЬКО ДНЕЙ В МЕСЯЦЕ?
ADDWF DAYZ,1 /ПРИБАВИМ ДНИ К СЧЕТЧИКУ.
INCF MON, F /УВЕЛИЧИМ СЧЕТНЫЙ МЕСЯЦ.
141
Устройства с цифровой индикацией
DU6M
MOVLW .183 УЖЕ РАВНО ПОЛОВИНЕ ГОДА
SUBWF DAYZ,0 ; ЧИСЛО В СЧЕТЧИКЕ ДНЕЙ?
SKPNC ЕСЛИ БОЛЬШЕ ИЛИ РАВНО,
CALL DIMF ; ПРОПУСКАЕМ.
GOTO DUMA ; :ИНАЧЕ ПРИБАВИМ ЕЩЕ МЕСЯЦ.
DIMF BTFSC FLAG1,2 i :ЕСЛИ ЗНАК УЖЕ УСТАНОВЛЕН,
RETURN :ВОЗВРАЩАЕМСЯ.
BSF FLAG1,2 , ;ИНАЧЕ УСТАНОВИМ ФЛАГ.
MOVWF RETURN DAYZ ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ В СЧЕТЧИК.
DIMA9 BTFSC FLAG1,O /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
RETURN ;ВЕРНЕМСЯ.
MOVLW .9 /ПРИБАВИМ ЧИСЛА ДО КОНЦА
ADDWF DAYZ,1 /МЕСЯЦА.
CLRF MON /УСТАНОВИМ
BSF MON, 0 /ЯНВАРЬ.
BSF RETURN FLAG1,0 /ФЛАГ ВЫПОЛНЕННОГО СРАВНЕНИЯ УСТАНОВЛЕН.
DIMA12 BCF STATUS,0
MOVFW DAYO /СРАВНИМ НУЛЕВОЙ ДЕНЬ С ТЕКУЩИМ.
SUBWF 'dayi,0
BC DIMAP /ЕСЛИ БОЛЬШЕ ИЛИ РАВНО, СТАВИМ ФЛАГ ПЛЮСА
GOTO DIMAM /ИНАЧЕ СТАВИМ ФЛАГ МИНУСА.
DIMAP MOVWF DAYZ /ОСТАТОК ДНЕЙ В РЕГИСТР СЧЕТЧИКА ДНЕЙ.
BCF FLAG1,2 /ФЛАГ МИНУСА СБРОСИМ.
BSF RETURN FLAG1,1 /УСТАНОВИМ ФЛАГ РАВЕНСТВА МЕСЯЦА.
DIMAM ADDLW 0B7H /183
MOVWF DAYZ /ОСТАТОК В СЧЕТЧИК ДНЕЙ.
BSF FLAG1,2 /ЗНАК ОТРИЦАТЕЛЬНЫЙ.
BSF RETURN FLAG1,1 /УСТАНОВИМ ФЛАГ РАВЕНСТВА МЕСЯЦА.
DUMOO BTFSC FLAG1,1 /ЕСЛИ ФЛАГ УСТАНЕОВЛЕН,
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ РАВЕНСТВА МЕСЯЦА.
MOVFW DAYI /ПРИБАВИМ ТЕКУЩИЙ ДЕНЬ
ADDWF DAYZ,1 /К СЧЕТЧИКУ ДНЕЙ.
MOVLW .183 /ПРОШЛО ПОЛГОДА?
SUBWF SKPC RETURN DAYZ,0 t /НЕТ
MOVWF DAYZ /ДА, ОБНУЛИМ СЧЕТЧИК ДНЕЙ.
BTFSC FLAG1,2 /ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,
BCF FLAG1,2 /СБРОСИМ ЕГО.
BTFSS FLAG1,2 /И НАОБОРОТ - УСТАНОВИМ.
BSF RETURN FLAG1,2 /ЗНАК ПОПРАВКИ ОТРИЦАТЕЛЬНЫЙ.
142
Автомат включения освещения
; б. ТАБЛИЦА ДНЕЙ МЕСЯЦЕВ.
DAYMON
ADDWF PCL,F
NOP ;0
RETLW .31 /1-ЯНВАРЬ
RETLW .29 ;2-ФЕВРАЛЬ
RETLW .31 /3-МАРТ
RETLW .30 ;4-АПРЕЛЬ
RETLW .31 ;5-МАЙ
RETLW .30 ;6-ИЮНЬ
RETLW .31 ; 7-ИЮЛЬ
RETLW .31 ;8-АВГУСТ
RETLW .30 ;9-СЕНТЯБРЬ
RETLW .31 ;10-ОКТЯБРЬ
RETLW .30 ;11-НОЯБРЬ
RETLW .31 ;12-ДЕКАБРЬ
/ 7. ВЫБОР РАЗРЯДА УСТАНОВКИ.
UST
MOVFW CAT /ПО ПОЛОЖЕНИЮ МИГАЮЩЕГО РАЗРЯДА
ADDWF PC, 1 /ОПРЕДЕЛЯЕМ РАЗРЯД УСТАНОВКИ.
GOTO USTO ;0
GOTO UST1 /1
GOTO UST2 /2
GOTO UST3 /3
GOTO OOOO ;ОБНУЛЕНИЕ.
RETURN
; 8. ВЫБОР РЕЖИМА УСТАНОВКИ.
АТТК
INCF ATT, F /УВЕЛИЧИВАЕМ ЧИСЛО АТРИБУТА.
MOVFW ATT
SUBLW .5 /ИНДИКАЦИЯ РАЗРЕШЕНА ДО 4 ЦИФРЫ (0-4)
SKPNZ /ЕСЛИ НЕ РАВНО НУЛЮ ИДЕМ,
CLRF ATT /ИНАЧЕ ОБНУЛЯЕМ АТРИБУТ.
ATKU
MOVFW ATT /КУДА ПОЙТИ ПРИ
ADDWF PCL, 1 /УСТАНОВКЕ:
GOTO VETSH /ВЕЧЕРНЯЯ ПОПРАВКА.
GOTO FIKS ;ВРЕМЯ ВЫКЛЮЧЕНИЯ.
GOTO DAMON /ДЕНЬ И МЕСЯЦ.
GOTO UTRO /УТРЕННЯЯ ПОПРАВКА.
GOTO HOMI /УСТАНОВКА ЧАСОВ.
; 9. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP f
143
Устройства с цифровой индикацией
MOVFW FSR /FSR.
MOVWF FSR TEMP 9 *
CALL SI ; D1UI ; M1M
BTFSC PORTB,7 /ВКЛЮЧЕНА УСТАНОВКА (ВКЛЮЧЕНИЕ НУЛЕМ)?
GOTO RETCONT ; НЕТ.
BSF STATUS,RPO /БАНК 1.
MOVLW B'00010000' /RA4 РАЗРЕШАЕМ ВХОД НА ВРЕМЯ ПРЕРЫВАНИЯ.
MOVWF TRISAA80H
MOVLW B'10000110 /РАЗРЕШАЕМ ВХОДА НА ВРЕМЯ ПРЕРЫВАНИЯ (В1, В2, В7)
MOVWF TRISBA80H
BCF STATUS,RPO /БАНК 0.
CALL RETCONT KEY /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
BTFSS FLAG,1 9
BSF PORTB,4 1
BTFSC FLAG,1 9
BSF PORTB,3
BSF STATUS,RPO /1 БАНК.
MOVLW B'10000000 ' /ВСЕ ВЫХОДЫ, В7- ВХОД.
MOVWF TRISBA80H
MOVLW B'00000000' /ВСЕ ВЫХОДЫ.
MOVWF TRISAA80H
BCF STATUS,RPO /БАНК 0.
BCF INTCON,2 /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА /(РАЗРЕШАЕМ ПРЕРЫВАНИЯ).
.. MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
MOVWF STATUS /РЕГИСТРОВ W И STATUS,
MOVFW FSR_TEMP ;FSR.
MOVWF FSR 9
MOVFW W_TEMP
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
10. ПЕРЕЗАПИСЬ ИЗ РЕГИСТРОВ ИНДИКАЦИИ.
VETSHI
MOVFW SCO /РЕГИСТРЫ ВЕЧЕРНЕЙ ПОПРАВКИ.
MOVWF POPVO 9
MOVFW SCI 9
MOVWF POPV1
CALL DECBIN ;ПРЕОБРАЗОВАНИЕ ДЕСЯТКОВ.
ADDWF POPVO,0
MOVWF POPVL /МИНУТЫ ПОПРАВКИ.
MOVFW SC2 9
MOVWF POPV2 9
MOVFW SC3
MOVWF POPV3 /ЗНАК ПОПРАВКИ.
RETURN
FIKSI
BSF FLAG,.O /УСТАНОВКА ФЛАГА.
MQVFW SCO /ФИКСИРОВАННОЕ ВРЕМЯ ВЫКЛЮЧЕНИЯ
MOVWF FIK0 9 *
144
Автомат включения освещения
MOVFW SCI f
MOVWF FIK1
CALL DECBIN ;СУММИРОВАНИЕ- МИНУТ
ADDWF FIKO,0
MOVWF FIKM /В ОДНОМ РЕГИСТРЕ МИНУТ.
MOVFW SC2 Z
MOVWF FIK2 z
MOVFW SC3
MOVWF - FIK3 /СУММИРОВАНИЕ ЧАСОВ
CALL DECBIN Z
ADDWF FIK2,0
MOVWF FIKH /В РЕГИСТРЕ ЧАСОВ.
RETURN
DAMONI MOVFW SCO /ДЕНЬ И МЕСЯЦ.
MOVWF MON IL Z
MOVFW SCI
MOVWF MON1H /ДЕСЯТКИ МЕСЯЦА.
CALL DECBIN
ADDWF MONIL,0 /ЕДИНИЦЫ МЕСЯЦА.
MOVWF MON1 /СЧЕТНЫЙ МЕСЯЦ.
CALL MO1U Z
MOVFW SC2 Z
MOVWF DAY IL Z
MOVFW SC3 Z
MOVWF DAY1H • 1 -г
CALL DECBIN Z
ADDWF DAY1L,0
MOVWF DAYI /СЧЕТНЫЙ ДЕНЬ
CALL D1U /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ.
CALL DAMON /ПЕРЕПИШЕМ ЗНАЧЕНИЯ В РЕГИСТРЫ ИНДИКАЦИИ.
CLRF RETURN FLAG1 /ПОСЛЕ УСТАНОВКИ ТРЕБУЕТСЯ ПЕРЕРАСЧЕТ ПОПРАВОК
UTROI BCF FLAG,0 /УТРЕННЯЯ ПОПРАВКА.
MOVFW SCO t 7
MOVWF POPUO г
MOVFW SCI f
MOVWF POPU1 Z
CALL DECBIN Z
ADDWF POPUO,0
MOVWF POPUL /МИНУТЫ УТРЕННЕЙ ПОПРАВКИ.
MOVFW SC2 Z
MOVWF POPU2 Z
MOVFW SC3
MOVWF RETURN POPU3 /ЗНАК ПОПРАВКИ.
HOMII MOVFW SCO* /МИНУТЫ И ЧАСЫ.
MOVWF M_LOW Z
MOVFW SCI Z
MOVWF M_HIGH Z
145
Устройства с цифровой индикацией
CALL DECBIN /
ADDWF M_LOW,0
MOVWF MINI ;МИНУТЫ- ЕДИНИЦЫ И ДЕСЯТКИ
MOVFW SC2 t
MOVWF H_LOW 9
MOVFW SC3 f
MOVWF H_HIGH 9
CALL DECBIN 9
ADDWF H_LOW,0
mOvwf HOU1 /ЧАСЫ- ЕДИНИЦЫ И ДЕСЯТКИ.
RETURN
; 11. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
KEY
BTFSS PORTB,1 /ВКЛЮЧЕН ЛИ ВЫБОР РЕЖИМА УСТАНОВКИ?
CALL ATTK /ДА.
BTFSC PORTB,1 /ЕСЛИ ВЫКЛЮЧЕН ВЫБОР РЕЖИМА,
CALL ATKU /ПОМЕНЯЕМ ЗНАЧЕНИЯ.
BTFSS PORTB,2 /ВЫБОР РАЗРЯДА УСТАНОВКИ?
CALL CATK /ДА.
BTFSS PORTA,4 /УСТАНОВКА +1?
CALL UST /ДА.
BTFSS PORTA,4 9
RETURN
BTFSC FLAG1,1 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
RETURN /ЗАВЕРШАЕМ.
KEYU
CLRF FLAG1 /СБРОСИМ ФЛАГ
CLRF DAYZ /И СЧЕТНЫЕ ДНИ.
CALL DUMA /ПОДСЧИТАЕМ ЧИСЛО ДНЕЙ.
CALL ZET /ПОДСЧИТАЕМ ПОПРАВКИ.
CALL OBSAK /ПОДСЧИТАЕМ ВРЕМЯ ВКЛЮЧЕНИЯ И ВЫКЛЮЧЕНИЯ
RETURN •
; 12. ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАЮЩЕГО РАЗРЯДА).
САТК
INCF CAT, 1 /+1 В СЧЕТЧИК УСТАНОВКИ.
MOVFW CAT
SUBLW SKPNZ .5 /НЕ БОЛЕЕ 4, ИНАЧЕ ИДЕМ ОБНУЛЯТЬ
CLRF RETURN CAT /ОБНУЛЕНИЕ. 9
/ 13. ЗАПИСЬ ИЗ РЕГИСТРОВ В РЕГИСТРЫ ИНДИКАЦИИ.
VETSH
MOVFW POPVO /ВЕЧЕРНЯЯ ПОПРАВКА
MOVWF SCO
MOVFW POPV1
MOVWF SCI
146
Автомат включения освещения
MOVFW POPV2
MOVWF SC2
MOVFW POPV3
MOVWF SC3
RETURN
FIKS
MOVFW FIKO / ФИКСИРОВАННОЕ ВРЕМЯ ВЫКЛЮЧЕНИЯ.
MOVWF SCO
MOVFW FIK1
MOVWF SCI
MOVFW FIK2
MOVWF SC2
MOVFW FIK3
MOVWF SC3
RETURN
DAMON
CALL D1U /ПЕРЕКОДИРОВКА ДНЕЙ ДЛЯ ИНДИКАЦИИ.
CALL MO1U /ПЕРЕКОДИРОВКА МЕСЯЦА ДЛЯ ИНДИКАЦИИ
MOVFW MONIL
MOVWF SCO
MOVFW MON1H
MOVWF SCI
MOVFW DAY1L
MOVWF SC2
MOVFW DAY1H
MOVWF SC3
RETURN
UTRO
MOVFW POPUO /УТРЕННЯЯ ПОПРАВКА.
MOVWF SCO
MOVFW POPU1
MOVWF SCI
MOVFW POPU2
MOVWF SC2
MOVFW POPU3
MOVWF SC3
RETURN
HOMI
MOVFW M_LOW /МИНУТЫ И ЧАСЫ.
MOVWF SCO
MOVFW M_HIGH
MOVWF SCI
MOVFW H_LOW
MOVWF SC2
MOVFW H_HIGH
MOVWF SC3
RETURN
• ЖЖ88вЗЖ«ЗЖ«383ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ
/ 14. УСТАНОВОКА.
• «зхзжжжжжжжвзжжжжжжжжжжжжжжжжжжжжжжж
UST0
MOVLW .2 /ЕСЛИ УСТАНАВЛИВАЕТСЯ
SUBWF АТТ,О /МЕСЯЦ,
BZ USTOA /ТО УСТАНОВКА В ОДНОМ РАЗРЯДЕ.
147
Устройства с цифровой индикацией
INCF MOVLW SUBWF BTFSC CLRF GOTO SCO, 1 .10 SCO, 0 STATUS,0 SCO UST4 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.. 9 /С (ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ. /НА ЗАПИСЬ В РЕГИСТРЫ.
USTOA
INCF SCO, 1 ;РАЗРЯД'УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF SCO, 0
BTFSC STATUS,0 ;С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
BSF SCI, 0 /УСТАНОВИМ ДЕСЯТКИ МЕСЯЦА.
BTFSC STATUS,0
CLRF SCO /ЕДИНИЦЫ ОБНУЛИМ.
GOTO UST4 /НА ЗАПИСЬ В РЕГИСТРЫ МЕСЯЦА.
UST1
INCF SCI, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
. MOVLW .10 9
SUBWF SCI, 0 9
BTFSC STATUS,0 9
CLRF SCI
GOTO UST4 /НА ЗАПИСЬ В РЕГИСТРЫ.
UST2
INCF SC2, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF SC2, 0 9
BTFSC STATUS,0 9
CLRF SC2
GOTO UST4 /НА ЗАПИСЬ В РЕГИСТРЫ.
UST3
INCF SC3, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF SC3, 0 9
BTFSC STATUS,0 9
CLRF SC3
GOTO UST4 , /НА ЗАПИСЬ В РЕГИСТРЫ.
0000
BTFSC PORTA,4 /ОБНУЛЕНИЕ ВСЕХ
GOTO UST4 /РЕГИСТРОВ.
BTFSC ATT, 2 /ЕСЛИ ИДЕТ СБРОС ЧАСОВ,
CLRF SEC1 /ТО ОБНУЛЯЕМ СЕКУНДЫ
BTFSC ATT, 2 /И МИНУТЫ.
GOTO OOOS 9
CLRF SC2
CLRF SC3
000S
CLRF SCO
CLRF SCI
GOTO UST4 /НА ЗАПИСЬ В РЕГИСТРЫ.
; 15. ПП. ИНДИКАЦИИ С ВЫХОДОМ 0-7 ; 0-3.
ZIKL0
BTFSC PORTB,7 /ИНДИКАЦИИ НЕТ ЕСЛИ ИДЕТ УСТАНОВКА.
GOTO KRUG /РАБОТА ПО КРУГУ С ПРОВЕРКОЙ СОВПАДЕНИЙ
148
Автомат включения освещения
BSF INTCON,7 ;ЧТОБЫ HE ПРОПУСТИТЬ ПРЕРЫВАНИЯ.
MOVLW B'lllOlllO' ; ЗАПИСЬ. НУЛЕВОГО КАТОДА.
MOVWF ANOD /ПОЗИЦИОННОЕ ЗНАЧЕНИЕ КАТОДА.
CLRF KATOD /ОБНУЛЯЕМ КАТОД 2-10.
MOVLW 012H- /ЗАПИСЬ НОМЕРА РЕГИСТРА НУЛЕВОГО РАЗРЯДА.
MOVWF SEGD /В РЕРИСТР АДРЕСА РАЗРЯДА.
GOTO ZIKL COUZ
INCF COUZ KATOD,1 /+1 В РЕГИСТР КАТОДА.
INCF COUI,1 /+1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
MOVLW .50 /50- ДЛЯ ОРГАНИЗАЦИИ МИГАНИЯ
SUBWF COUI,0 /ВЫБРАННОГО РАЗРЯДА.
BNZ COUZ3 /ЕСЛИ НЕ РАВНО 0, ИДЕМ.'
COUZ1
CLRF COUI /ОБНУЛИМ СЧЕТЧИК ЦИКЛОВ.
BTFSC FLAG,2 /ПРОПУСТИТЬ, ЕСЛИ 0,
GOTO' COUZ2 /ИНАЧЕ МЕНЯЕМ ЗНАЧЕНИЕ ФЛАГА НА ПРОТИВОПОЛОЖНОЕ
BSF FLAG,2 /УСТАНОВИМ В 1.
GOTO COUZ3 Г
COUZ2
BCF FLAG,2 /СБРОСИМ ФЛАГ ГАШЕНИЯ В 0.
GOTO INDCO /НА ИНДИКАЦИЮ.
COUZ3
BTFSS FLAG, 2, /ПРОПУСТИТЬ, ЕСЛИ 1.
GOTO INDCO /НА ИНДИКАЦИЮ.
MOVFW KATOD /СРАВНИМ НОМЕР КАТОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT, 0 /РАЗРЯДА МИГАНИЯ.
BNZ INDCO /ПЕРЕХОД ЕСЛИ НЕ НОЛЬ.
INDCG
MOVLW B'11111' /ИНАЧЕ ГАСИМ ВСЕ КАТОДЫ
MOVWF PORTA /И ИДЕМ МЕНЯТЬ ЗНАЧЕНИЕ
GOTO INDC1 /СЕГМЕНТОВ -(РАЗРЯД ПОГАШЕН).
INDCO
MOVFW KATOD /ЕСЛИ РАЗРЯДЫ СОВПАДАЮТ,
SUBWF SKPNZ ATT, 0 /\ /ИДЕМ СВЕТИТЬ С ЗАПЯТОЙ.
BSF FLAG,5 /ФЛАГ ЗАПЯТОЙ.
GDATA
MOVFW SEGD /ЗАГРУЖАЕМ АДРЕС РЕГИСТРА ДЛЯ ИНДИКАЦИИ
MOVWF FSR /В РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF /ВЫБИРАЕМ 2-10 ЗНАЧЕНИЕ.
CALL SEGDATA /ПРЕОБРАЗУЕМ В СЕМИСЕГМЕНТНОЕ ДЛЯ ИНДИКАЦИИ
MOVWF PORTB /В ПОРТУ в.
MOVFW ANOD /ЗНАЧЕНИЯ КАТОДА
MOVWF PORTA /В ПОРТ А.
BTFSC FLAG,5 /ЕСЛИ ЕСТЬ ЗАПЯТАЯ,
BSF PORTA,4 /УСТАНОВИМ ЕЕ.
BTFSS FLAG,5 /ИНАЧЕ
BCF PORTA,4 /СБРОСИМ ЗАПЯТУЮ.
BCF INDC1 FLAG,5 /СБРОСИМ ЗАПЯТУЮ.
INCF SEGD, F ,-+1 В РЕГИСТР АДРЕСА РАЗРЯДА.
MOVLW B'011101111 '/ЕСЛИ СВЕТИТСЯ КРАЙНИЙ РАЗРЯД,
149
Устройства с цифровой индикацией
XORWF ANOD,0 ;TO НЕТ УСТАНОВКИ РАЗРЯДА "С" В 1
BTFSC STATUS,Z /ЕСЛИ 0, ПРОПУСКАЕМ.
GOTO ZIKLO ;НАЧНЕМ ИНДИКАЦИЮ С НУЛЯ.
INDO
BSF STATUS,C /УСТАНОВИТЬ В 1.'
RLF ANOD,1 ;СДВИГАЕМ ВЛЕВО.
GOTO ZIKL Г
KRUG
MOVLW OFFH t
MOVWF PORTA
BTFSS PORTB,7 /ПРИ ВКЛЮЧЕНИИ УСТАНОВКИ
GOTO ZIKLO /ИДЕМ НА ИНДИКАЦИЮ.
CALL ITOG /ПРОВЕРЯЕМ СОВПАДЕНИЕ.
GOTO KRUG ;ЗАЦИКЛИВАЕМСЯ.
; 16. НАХОЖДЕНИЕ ПОПРАВКИ НА РАСЧЕТНЫЙ ДЕНЬ.
ZET
CLRF SUMU /ОБНУЛИМ
CLRF SUMB /РАБОЧИЕ
CLRF DAY /РЕГИСТРЫ.’
BTFSS FLAG1,2 /ЕСЛИ ЗНАК ПОЛОЖИТЕЛЬНЫЙ,.
GOTO ZETO /НАЧНЕМ С НУЛЯ.
MOVLW .183 /ИНАЧЕ
MOVWF DAY /ОПРЕДЕЛИМ
NEGF DAYZ,0 /ДОПОЛНИТЕЛЬНЫЙ КОД СУММЫ ДНЕЙ.
ADDWF DAY, 0 /НАЙДЕМ ДОПОЛНЕНИЕ ДО 182.
MOVWF DAYZ /ЗАПИШЕМ В СЧЕТНЫЕ ДНИ.
ZETO CALL DELTA /ОПРЕДЕЛИМ ПОПРАВКУ НА ДЕНЬ.
CLRF PCLATH /обнулим Старший бит счетчика команд.
MOVWF DATAU /ПЕРЕПИШЕМ ЗНАЧЕНИЯ 1
MOVWF DATAV /В ОБА РЕГИСТРА.
MOVLW B'OOOOllll' /ЗАМАСКИРУЕМ МЛАДШИЕ БИТЫ.
ANDWF DATAV,1 /ЗНАЧЕНИЕ ПИШЕМ В РЕГИСТР ВЕЧЕРНЕЙ ПОПРАВКИ
MOVLW B'11110000' /ЗАМАСКИРУЕМ СТАРШИЕ БИТЫ.
ANDWF DATAU,1 /ЗАПИШЕМ В РЕГИСТР УТРЕННЕЙ ПОПРАВКИ.
SWAPF DATAU,1 /ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.
MOVFW DATAU /ПРИБАВИМ УТРЕННЮЮ ПОПРАВКУ
ADDWF SUMU,1 /К ОБЩЕЙ СУММЕ.
SKPNC BSF FLAG1,6 /ЕСЛИ ПРОИЗОШЛО ПЕРЕПОЛНЕНИЕ РЕГИСТРА, /УСТАНОВИМ ФЛАГ (256).
MOVFW DATAV /ПРИБАВИМ ВЕЧЕРНЮЮ ПОПРАВКУ
ADDWF SUMB,1 /К ОБЩЕЙ СУММЕ.
SKPNC /ЕСЛИ ПРОИЗОШЛО ПЕРЕПОЛНЕНИЕ РЕГИСТРА,
BSF FLAG1,7 f /УСТАНОВИМ ФЛАГ (256).
MOVFW DAYZ /СРАВНИМ ЗНАЧЕНИЕ РАСЧИТАННОГО ДНЯ
SUBWF DAY, 0 /СО СЧЕТНЫМ.
SKPNZ RETURN /ЕСЛИ ОНИ НЕ РАВНЫ, /ТО, В ЗАВИСИМОСТИ ОТ ЗНАКА,
BTFSC FLAG1,2 /УМЕНЬШИМ
DECF DAY, 1
BTFSS FLAG1,2 /ИЛИ УВЕЛИЧИМ
INCF DAY, 1 /РАССЧЕТНЫЙ ДЕНЬ.
GOTO ZETO /ПОВТОРИМ ЦИКЛ.
150
Автомат включения освещения
/ 17. СЧЕТЧИКИ С. М. Ч. Д. МЕСЯЦЕВ.
S1
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,F /ПРИБАВИТЬ 1 В СЕКУНДЫ.
RETURN 9 '
Ml CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
М1М MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW- -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MIN1,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /MINI >W.
M1U MOVWF DSMH /W >DSMH.
' CALL BINDECH /ПЕРЕХОД В-ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF M LOW /W > M LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF M_HIGH /W > M_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ.
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH /И МП.
RETURN 9
Hl CLRF MINI /ОБНУЛЯЕМ РЕГИСТР МИНУТ.
CLRF M_LOW /ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ.
CLRF M HIGH /ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ.
HIH
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H ,•- 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
MOVFW HOU1 /HOU >W.
H1U MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF H LOW ,-W > Н LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF H_HIGH ,-W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH /И МП.
RETURN 9
НЮ CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF H LOW /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF H_HIGH „ /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
D1UI MOVFW MON1
CALL DAYMON /СКОЛЬКО ДНЕЙ В МЕСЯЦЕ?
151
Устройства с цифровой индикацией
SUBWF DAYI,0 /УЖЕ КОНЕЦ МЕСЯЦА?
ВС DOI /ДА. ИДЕМ УСТАНАВЛИВАТЬ.
INCF DAYI,F ;НЕТ. +1 К ЧИСЛАМ. -
D1U
MOVFW DAYI /ПЕРЕКОДИРОВКА ДНЕЙ НА ДЕСЯТКИ И ЕДИНИЦЫ.
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF DAY IL /W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF DAY1H /W >'h_high в регистр индикации десятков часов
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH /МЛ.
BTFSS PORTB,7 /ЕСЛИ ИДЕТ УСТАНОВКА,
RETURN /ВОЗВРАЩАЕМСЯ.
BTFSC FLAG1,1 /ЕСЛИ СРАВНЕНИЕ ВЫПОЛНЕНО,
INCF DAYZ,1 /УВЕЛИЧИМ СЧЕТНЫЙ ДЕНЬ.
CALL KEYU /РАССЧИТАЕМ НОВЫЕ ЗНАЧЕНИЯ ВКЛЮЧЕНИЯ И
ВЫКЛЮЧЕНИЯ.
RETURN Г
DOI
MOVLW 01H /УСТАНОВКА В ЕДИНИЦУ.
MOVWF DAYI /НУЛЕВОГО ЧИСЛА НЕТ.
MOVWF DAY IL
CLRF DAY1H /ОБНУЛЕНИЕ ДЕСЯТКОВ ДНЕЙ.
INCF DAYZ,1 /УВЕЛИЧИМ СЧЕТНЫЙ ДЕНЬ.
MO1U
MOVFW MON1 /ПЕРЕКОДИРОВКА МЕСЯЦА НА ДЕСЯТКИ И ЕДИНИЦЫ.
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF MON IL /W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF MON1H /W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH
BTFSC PORTB,7 /ЕСЛИ НЕТ УСТАНОВКИ,
INCF MON, 1 /УВЕЛИЧИМ РАБОЧИЙ РЕГИСТР.
BTFSC PORTB,7 /ЕСЛИ НЕТ'УСТАНОВКИ,
GOTO MOD
BCF STATUS,2 /НИЖЕ ВСЕ ДЛЯ УСТАНОВКИ.
TSTF MON1 /ПРОТЕСТИРУЕМ НА НОЛЬ.
BTFSC STATUS,2 /ЕСЛИ РАВНО НУЛЮ, ИДЕМ НА
GOTO MOO /УСТАНОВКУ, НУЛЕВОГО МЕСЯЦА НЕТ.
RETURN
MOD
MOVFW MON1
ADDLW -OCH /УЖЕ 12 МЕСЯЦЕВ?
BC MOO ;ДА.
INCF MON1,F /ТО +1 В МЕСЯЦ
CALL KEYU /РАССЧИТАЕМ НОВЫЕ ЗНАЧЕНИЯ ВКЛЮЧЕНИЯ И
ВЫКЛЮЧЕНИЯ.
RETURN
MOO
MOVLW 01H /УСТАНОВИМ 1 МЕСЯЦ (0-НЕТ).
152
Автомат включения освещения
MOVWF MON1
MOVWF MON
CALL KEYU /РАССЧИТАЕМ НОВЫЕ ЗНАЧЕНИЯ ВКЛЮЧЕНИЯ И
ВЫКЛЮЧЕНИЯ.
RETURN
• z:r:===x~=======================================x======x=====
; 18. ТАБЛИЦА ПОПРАВОК С 22.12 ПО 21.06.
DELTA
MOVLW HIGH 021B
MOVWF PCLATH
MOVFW DAY
ADDWF PC, 1
RETLW OOH ;0
RETLW OOH ; 1
RETLW 01H ;2
RETLW' 01H ;3
RETLW OOH ;4
RETLW 01H ;5
RETLW 01H ; 6
RETLW 01H ;7
RETLW 01H ;8
RETLW 01H ;9 31.ДЕКАБРЯ.
RETLW 02H ;10
RETLW 01H ;H
RETLW 01H ;12
RETLW 11H ; 13
RETLW 12H ; 14
RETLW 11H ;15
RETLW 12H ;16
RETLW 01H ; 17
RETLW 12H ;18
RETLW UH ;19
RETLW 12H ;20
RETLW 12H
RETLW 12H ;1 ДЕКАБРЯ.
RETLW 11H
RETLW 12H
RETLW 12H
RETLW 01H
RETLW UH
RETLW 12H
RETLW 12H
RETLW 12H ;30
RETLW 22H
RETLW 12H
RETLW 12H
RETLW 12H
RETLW 22H
RETLW 22H
RETLW 12H
RETLW 22H
RETLW 11H
RETLW UH ;40 31 ЯНВАРЯ
RETLW UH -
153
Устройства с цифровой индикацией
RETLW 12H
RETLW 12H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 23H
RETLW 22H
RETLW 22H
RETLW 32H ;50
RETLW 22H
RETLW 22H ;1 НОЯБРЯ.
RETLW 23H
RETLW 22H
RETLW 22H
RETLW OOH
RETLW 21H
RETLW 22H
RETLW 33H
RETLW 22H ;60
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 23H
RETLW 32H
RETLW 22H
RETLW OOH
RETLW 21H ;70 1 МАРТА
RETLW 32H
RETLW 22H
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 33H
RETLW 22H
RETLW 32H
RETLW 22H ;80
RETLW 32H
RETLW 22H
RETLW 32H ;1 ОКТЯБРЯ.
RETLW 32H
RETLW 21H
RETLW 22H
RETLW 22H
RETLW 32H
RETLW 32H
RETLW 22H ;90
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 32H
RETLW 22H
RETLW 32H
154
Автомат включения освещения
RETLW 32H
RETLW 32H
RETLW 32H
RETLW 32H ;100
RETLW 33H ;1 АПРЕЛЯ.
RETLW 33H
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 23H
RETLW 32H ;110 1 СЕНТЯБРЯ
RETLW 22H
RETLW 32H
RETLW 33H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 22H ;12 0
RETLW 32H
RETLW 22 H
RETLW 22H
RETLW 32H
RETLW 22H
RETLW 32H
RETLW 32H
RETLW 32H
RETLW 32H
RETLW 32H ; 130
RETLW 33H ;1 МАЯ.
RETLW 33H
RETLW 23H
RETLW 33H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H ;140
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H ;1 АВГУСТА
RETLW 22H
RETLW 23H
RETLW 23H
RETLW 22H
RETLW 22H
RETLW 22H ;150
RETLW 22H
155
Устройства с цифровой индикацией
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H /160
RETLW 22H
RETLW 22H /1 ИЮНЯ.
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 22H
RETLW 12H
RETLW 12H
RETLW 11H
RETLW 11H ;170
RETLW 10H
RETLW UH
RETLW 11H
RETLW UH /1 ИЮЛЯ.
RETLW UH
RETLW 01H
RETLW 01H
RETLW 01H
RETLW 01H
RETLW 01H /180
RETLW 01H
RETLW ООН /21 ИЮНЯ
RETLW ООН /22 ИЮНЯ
; 19. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /БАНК 1.
MOVLW B'00000100' /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, K=32 ...100.
MOVWF OPTION_REGA80H
MOVLW B' 10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА,
MOVWF INTCON
MOVLW B'00000000' /RA0-RA4-HA ВЫХОД.
MOVWF TRISAA80H
MOVLW. B'lOOOOOOO' /RB0-RB6-HA ВЫХОД, БВ7-ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /БАНК 0.
CLRF TMR0
CLRF SEC1
CLRF MINI
CLRF HOUl
CLRF M_LOW
CLRF M_HIGH
CLRF H_LOW
CLRF H_HIGH
CLRF HSMH
156
Автомат включения освещения
CLRF LSMH
CLRF ATT
CLRF MON
CLRF DAYZ
CLRF CAT
CLRF FLAG
CLRF FLAG1
CLRF POPUO
CLRF POPU1
CLRF POPU2
CLRF POPU3
CLRF POPUL
CLRF POPVO
CLRF POPV1
CLRF POPV2
CLRF POPV3
CLRF POPVL
CLRF FIKO
CLRF FIK1
CLRF FIK2
CLRF FIK3
CLRF FIKM
CLRF FIKH
MOVLW .12
MOVWF MONO /МЕСЯЦ=12.
MOVWF MON1
MOVLW .22
MOVWF DAYO /ЧИСЛО=22.
MOVWF DAY1
GOTO ZIKLO
; 20. ПП. ПЕРЕКОДИРОВКИ 2-_-2-10.
BINDECH MOVLW .10 /ПЕРЕКОДИРОВКА С БИНАРНОГО В 2-10 КОД /10 >W.
BDH BSF STATUS,0 /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS.
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ. РЕГИСТРА 10 > DSMH.
BNC BINDECL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH /ПОВТОРИТЬ.
BINDECL MOVF DSMH,0
ADDLW .10 /Ю+W >W.
MOVWF LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN /
; 21. ВЫЧИСЛЕНИЕ ОБЩЕЙ ПОПРАВКИ.
OBSAK
BTFSC FLAG1,2 ;ЕСЛИ ЗНАК ПОЛОЖИТЕЛЬНЫЙ,
CALL POPIOty /ПРОПУСКАЕМ.
BTFSS FLAG1,2 . /ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,
CALL POPDEK /ПРОПУСКАЕМ.
157
Устройства с цифровой индикацией
BTFSC POPU3,0 ЗНАК УТРЕННЕЙ ПОПРАВКИ ОТРИЦАТЕЛЬНЫЙ,
CALL NEGATU ИДЕМ.
BTFSC POPV3,0 ЕСЛИ ЗНАК ВЕЧЕРНЕЙ ПОПРАВКИ-ПОЛОЖИТЕЛЬНЫЙ,
CALL NEGATB ПРОПУСКАЕМ.
BTFSS POPU3,0 ЗНАК УТРЕННЕЙ ПОПРАВКИ ПОЛОЖИТЕЛЬНЫЙ,
CALL POLU ИДЕМ.
BTFSS POPV3,0 ЕСЛИ ЗНАК ВЕЧЕРНЕЙ ПОПРАВКИ ПОЛОЖИТЕЛЬНЫЙ,
CALL POLB ИДЕМ.
GOTO POLUM СЧИТАЕМ ОБЩУЮ ПОПРАВКУ.
POPION
MOVLW .30 ЗАГРУЖАЕМ ВРЕМЯ ВОСХОДА И ЗАХОДА
MOVWF UDEKM ЛЕТНЕГО НУЛЕВОГО ДНЯ
MOVLW .32
MOVWF BDEKM 22 ИЮНЯ.
MOVLW .10
MOVWF BDEKH
MOVLW .14
MOVWF UDEKH
RETURN
POPDEK
MOVLW .5 ЗАГРУЖАЕМ ВРЕМЯ ВОСХОДА И ЗАХОДА
MOVWF BDEKH ЗИМНЕГО НУЛЕВОГО ДНЯ
MOVLW .20 22 ДЕКАБРЯ.
MOVWF UDEKH
CLRF UDEKM
CLRF BDEKM
RETURN
NEGATU
MOVFW POPU2 УТРЕННЮЮ ОТРИЦАТЕЛЬНУЮ ПОПРАВКУ
SUBWF UDEKH,0 ОТНИМАЕМ ОТ НУЛЕВОГО ДНЯ.
MOVWF SUMUH /ЧАСЫ.
MOVFW POPUL МИНУТЫ.
BSF STATUS,0
SUBWF UDEKM,0
BTFSC STATUS,0
MOVWF SUMUL •
BTFSC STATUS,0
RETURN
MOVLW .60 /ЕСЛИ НУЖНО,
ADDWF UDEKM,0 /ТО ДЕЛАЕМ
MOVWF SUMUL ; ЗАЕМ
MOVFW POPUL /ИЗ
SUBWF SUMUL,1 ;РАЗРЯДА
DECF SUMUH,1 ;ЧАСОВ.
RETURN
NEGATE
BSF STATUS,0 /ВЕЧЕРНЮЮ ОТРИЦАТЕЛЬНУЮ
MOVFW POPV2 /ПОПРАВКУ
SUBWF BDEKH,0 /ОТНИМАЕМ
.BTFSS STATUS,0 /ОТ НУЛЕВОГО ДНЯ.
CALL NEGB24 /ЕСЛИ НАДО, ДОБАВИМ 24 ЧАСА.
MOVWF SUMBH /ЧАСЫ.
MOVFW POPVL /МИНУТЫ.
158
Автомат включения освещения
BSF STATUS,0 9 -
SUBWF BDEKM,0 9
BTFSC STATUS,0 9 ‘
MOVWF SUMBL 9
BTFSC RETURN STATUS,0 9
MOVLW .60 ;ДЕЛАЕМ
ADDWF BDEKM,0 ; ЗАЕМ
MOVWF SUMBL /ИЗ
MOVFW POPVL /РАЗРЯДА
SUBWF SUMBL,1 ;ЧАСОВ.
DECF RETURN SUMBH,1 Г
NEGB24 MOVLW .24 /ДЛЯ КОРРЕКТНОСТИ.
ADDWF BDEKH,0 /ПРИБАВИМ 24 ЧАСА
MOVWF SUMBH
MOVFW POPV2 /И СНОВА
SUBWF RETURN SUMBH,0 /ВЫЧТЕМ.
POLU MOVFW UDEKH /ПРИБАВИМ УТРЕННЮЮ ПОПРАВКУ
ADDWF POPU2,0 /В ЧАСАХ К НУЛЕВОМУ ДНЮ.
MOVWF SUMUH /В ОБЩИЙ РЕГИСТР ПОПРАВОК.
MOVFW UDEKM /АНАЛОГИЧНО ПРИБАВИМ
ADDWF POPUL,0 /И МИНУТЫ.
MOVWF RETURN SUMUL 9
POLB MOVFW BDEKH /ПОВТОРИМ ВСЕ С ВЕЧЕРНЕЙ
ADDWF POPV2,0 /ПОПРАВКОЙ. >
MOVWF SUMBH 9
MOVFW BDEKM г
ADDWF POPVL,0 9
MOVWF RETURN SUMBL 9
; 22. ВРЕМЯ ВКЛЮЧЕНИЯ - . ВЫКЛЮЧЕНИЯ.
POLUM CLRF UM /ОБНУЛИМ
CLRF UH ;РАБОЧИЕ
CLRF BM /РЕГИСТРЫ.
GLRF BH 9
CALL HDECU 9
CALL HDECB
BTFSC FLAG1,2 /ЕСЛИ ЗНАК ОТРИЦАТЕЛЬНЫЙ,
CALL NEGBM /ТО ИДЕМ.
BTFSS FLAG1,2 /ЕСЛИ ЗНАК ПОЛОЖИТЕЛЬНЫЙ,
CALL RETURN POLSUM /ТО ИДЕМ.
HDECU BSF STATUS,0 9
159
Устройства с цифровой индикацией
MOVLW .60 /ПРЕОБРАЗУЕМ УТРЕННЮЮ ОБЩУЮ
SUBWF SUMU,1 /ПОПРАВКУ В МИНУТАХ
BTFSC STATUS,0 /В ЧАСЫ И МИНУТЫ.
INCF UH, 1 9
, BTFSC STATUS,0 г
GOTO HDECU г
BTFSS FLAG1,6 г
GOTO HDCU г
BCF FLAG1,6 9
INCF UH, 1 9
GOTO HDECU 9
HDCU
MOVLW .60 9
ADDWF SUMU,0 9
MOVWF UM 9
RETURN
HDECB
BSF STATUS,0
MOVLW .60 /ПРЕОБРАЗУЕМ ВЕЧЕРНЮЮ ОБЩУЮ
SUBWF SUMB,1 /ПОПРАВКУ В МИНУТАХ
BTFSC STATUS,0 /В ЧАСЫ И МИНУТЫ.
INCF BH, 1 9
BTFSC STATUS,0 9
GOTO HDECB 9
BTFSS FLAG1,7 9
GOTO HDCB 9
BCF FLAG1,7 9
INCF BH, 1 9
GOTO HDECB 9
HDCB
MOVLW .60 9
ADDWF SUMB,0 9
MOVWF BM 9
RETURN
POLSUM
MOVFW UH /ПРИ ПОЛОЖИТЕЛЬНОМ ЗНАКЕ УТРЕННЯЯ
SUBWF SUMUH,1 /ПОПРАВКА ВЫЧИТАЕТСЯ
MOVFW UM /ИЗ ОБЩЕЙ СУММЫ.
BSF STATUS,0 9
SUBWF SUMUL,1 9
BTFSC STATUS,0 9
GOTO POLBM 9
MOVLW .60 9
ADDWF SUMUL,1 9
DECF SUMUH,1 9
POLBM
MOVFW BH /ВЕЧЕРНЯЯ ПОПРАВКА
ADDWF SUMBH,1 /ПРИБАВЛЯЕТСЯ
MOVFW BM /К ОБЩЕЙ
ADDWF SUMBL,1 /СУММЕ.
PLBM
MOVLW .60 /ПРИ ПЕРЕПОЛНЕНИИ
BSF STATUS,0 /УВЕЛИЧИВАЕМ
SUBWF SUMBL,1 /РЕГИСТР
BTFSC STATUS,0 /ЧАСОВ.
160
Автомат включения освещения
INCF SUMBH,1 9
BTFSC STATUS,0 9
GOTO PLBM 9
MOVLW .60 9
ADDWF SUMBL,1 9
RETURN
NEGBM
MOVFW BH /ПРИ ОТРИЦАТЕЛЬНОМ ЗНАКЕ
SUBWF SUMBH,1 ;ВЕЧЕРНЯЯ ПОПРАВКА ВЫЧИТАЕТСЯ
MOVFW BM /ИЗ.
BSF STATUS,0 9
SUBWF SUMBL,1 9
»BTFSC STATUS,0
GOTO NEGUM /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ.
MOVLW . 60 /ЕСЛИ ЕСТЬ, ТО УМЕНЬШИМ
ADDWF SUMBL,1 /РЕГИСТР
DECF SUMBH,1 /ЧАСОВ.
GOTO NEGO 9
NEGUM
BTFSC STATUS,0 9
CALL PLBM 9
NEGO
MOVFW UH /УТРЕННЯЯ ПОПРАВКА
ADDWF SUMUH,1 /ПРИБАВЛЯЕТСЯ.
MOVFW UM /
ADDWF SUMUL,1 /
NGUM
MOVLW .60 /ПРОВЕРКА НА ПЕРЕПОЛНЕНИЕ
BSF STATUS,0
SUBWF SUMUL,1 /РЕГИСТРА МИНУТ.
BTFSC STATUS,0 9
INCF SUMUH,1 9
BTFSC STATUS,0 9
GOTO NGUM 9
MOVLW .60 9
ADDWF SUMUL,1 9
RETURN
; 23. СРАВНЕНИЕ С РЕАЛЬНЫМ ВРЕМЕНЕМ.
ITOG ' BTFSC FLAG,0 /ЕСЛИ УСТАНОВЛЕН ФЛАГ ФИКСИРОВАННОГО
GOTO FITOG /ВЫКЛЮЧЕНИЯ ИДЕМ ТУДА.
MOVFW SUMUH /СРАВНИМ РАСЧЕТНОЕ УТРЕННЕЕ ВРЕМЯ
SUBWF HOU1,0 /ЧАСОВ С РЕАЛЬНЫМ ВРЕМЕНЕМ.
SKPZ /ЕСЛИ ОНИ НЕ СОВПАДАЮТ,
GOTO ITOGB /ПРОВЕРИМ ВЕЧЕРНЕЕ ВРЕМЯ.
MOVFW SUMUL /ИНАЧЕ СРАВНИМ МИНУТЫ.
BCF STATUS,2
SUBWF MINI,0 /ЕСЛИ И ОНИ СОВПАДАЮТ,
BZ RETURN WUXODU /ПЕРЕКЛЮЧИМ ВЫХОДЫ.
FITOG MOVFW FIKH /СРАВНИМ ФИКСИРОВАННОЕ ВРЕ}МЯ
SUBWF HOU1,0 /ВЫКЛЮЧЕНИЯ С РЕАЛЬНЫМ ВРЕМЕНЕМ.
6 Зак. 2418
161
Устройства с цифровой индикацией
SKPZ GOTO ITOGB ;ЕСЛИ ОНИ HE СОВПАДАЮТ, /ПРОВЕРИМ ВЕЧЕРНЕЕ ВРЕМЯ.
MOVFW FI KM f
BCF STATUS,2
SUBWF MINI,0
BZ WUXODU /ПЕРЕКЛЮЧИМ ВЫХОДЫ.
RETURN
ITOGB
MOVFW SUMBH /ПРОВЕРИМ НА СОВПАДЕНИЕ
SUBWF HOUl,0 /ВРЕМЯ ВКЛЮЧЕНИЯ ОСВЕЩЕНИЯ.
SKPZ Г
RETURN
MOVFW SUMBL f
BCF STATUS,2
SUBWF MINI,0
BZ WUXODB /ПЕРЕКЛЮЧИМ ВЫХОДЫ.
RETURN
WUXODU
BCF PORTB,3 /ВЫКЛЮЧЕНИЕ ПРЯМОГО
BSF PORTB,4 /И ВКЛЮЧЕНИЕ ИНВЕРСНОГО ВЫХОДОВ.
BCF FLAG,1 /СБРОСИМ ФЛАГ. СОСТОЯНИЯ ВЫХОДА.
RETURN
WUXODB
BSF PORTB,3 / ВКЛЮЧЕНИЕ ПРЯМОГО ‘
BCF PORTB,4 /И ВЫКЛЮЧЕНИЕ ИНВЕРСНОГО ВЫХОДОВ
BSF , FLAG,1 /УСТАНОВИМ ФЛАГ СОСТОЯНИЯ ВЫХОДА
RETURN
END
Счетчик витков
Данное устройство разработано для применения в качестве счетчика витков
при намотке трансформаторов. Устройство может быть использовано как вось-
миразрядный низкочастотный счетчик с частотой счета до 15 кГц. Например,
это может &Ить шагомер, велоодометр, или счетчик посетителей. При совпаде-
нии установленного значения со счетным включается звуковая сигнализация.
Счетчик реализован на двух микросхемах: микроконтроллере PIC16F84A,
дешифраторе К555ИД7, блоке светодиодов АЛС318А и на трех мембранных
кнопках установки. Алгоритм работы программы счетчика витков показан на
рис. 36.
После включения счетчика и обнуления рабочих регистров начинается ин-
дикация первого разряда. Индикация всех разрядов идентична и состоит из за-
грузки в рабочий регистр значения регистра индикации, установки в выходные
регистры портов значений сегментов и разрядов и временной задержки Длите-
льностью около 3 мс. Но в нулевом и первом разрядах происходит еще сравне-
ние и проверка нажатых кнопок установки.
После индикации нулевого разряда проверяется флаг установки. Если уста-
новка не производится, процессор начинает сравнение всех разрядов индика-
ции с нулем. Если все разряды индикации нулевые (счет еще не начинался или
162
Счетчик витков
Рис. 36. Алгоритм работы программы счетчика витков
163
Устройства с цифровой индикацией
после обнуления), звуковая сигнализация не производится и процессор идет
выполнять выдержку времени, равную 3 мс. Если хотя бы один разряд индика-
ции не равен нулю, производится сравнение регистров "установки и регистров
индикации. Если нет равенства регистров, процессор возвращается на выпол-
нение выдержки времени — 3 мс. Если есть совпадение, устанавливается флаг
совпадения, а при индикации следующего разряда на выходе RA4 нулевым по-
тенциалом включится зуммер. Индикация каждого разряда заканчивается вы-
держкой времени.
После индикации первого разряда производится проверка нажатых кнопок
установки. Если установка уже производится, флаг установки включен, запре-
щаются все прерывания (запрет счета). Проверяется кнопка выбора разряда.
Если кнопка нажата, регистр выбора разряда инкрементируется. Аналогично
проверяется кнопка установки и, если она нажата, прибавляется единица в
выбранный разряд. Далее проверяется состояние кнопки выбора разряда. Если
кнопка нажата, то не имеет значения за индикатором разряд или нет, все рав-
но установка продолжится в следующих циклах. Поэтому, проверив кнопку
обнуления, программа перейдет к отработке выдержки времени. Если кнопка
выбора разряда не нажата, проверяется значение выбранного разряда. Если
значение равно 8, ни один разряд не мигает, устанавливается флаг и разреша-
ются прерывания. В режиме разрешения счета устройство может отреагиро-
вать только на нажатие одной кнопки, кнопки обнуления. При обнулении, ес-
ли разрешен счет, сбрасываются значения разрядов индикации и флагов счета
и равенства. Поэтому после обнуления возможно перемещение мигающего
разряда, при нажатии кнопки выбора разряда. Если идет установка, то обнуля-
ются и разряды установки.
Если флаг установки нулевой (установки нет), то разрешаются прерывания,
проверяется нажатие кнопки обнуления и отрабатывается выдержка времени
для первого разряда. После окончания выдержки времени седьмого разряда
производится индикация нулевого разряда и весь цикл повторяется.
В режиме счета разрешены прерывания по спаду сигнала на входе RB0.
Прерывание возможно с любой точки программы, на на рис. 36 оно условно
показано от индикации нулевого разряда. Как обычно, при прерывании проис-
ходит сохранение значений регистров. Инкрементируется счетчик и восстанав-
ливаются значения регистров.
На рис. 37 показана схема счетчика витков. Выходы микроконтроллера DD2
RBI—RB13 используются для вывода значений сегментов индикатора. Выходы
RAO—RA2 выдают значения разрядов в двоично-десятичном коде на дешифра-
тор DD1. Выход RA4 включает зуммер' НСМ1206х. На выход RB0 подаются
счетные импульсы. Срабатывание счетчика происходит по перепаду из высоко-
го в низкий уровень ТТЛ. Это удобно для подключения герконового или кон-
тактного датчика оборотов. Вход зашунтирован резисторами Rll, R 12 и кон-
денсаторами С6, С7 для уменьшения влияния импульсов коммутации светоди-
одов. Такое же назначение имеют и конденсаторы СЗ, С4. Если счетчик будет
использоваться с малым уровнем помех по питанию или как цифровая шкала,
то резисторы Rll, R12 можно не устанавливать.
Печатная плата счетчика витков показана на рис. 38, а расположение эле-
ментов на ней — рис. 39.
164
Счетчик витков
Работать с устройством очень просто. После включения напряжения на ин-
дикаторе высвечиваются нули, а нулевой разряд будет мигать. Кнопкой «Раз-
ряд» выбирается необходимый разряд для установки значения количества вит-
ков. Кнопкой «Установка» набирается необходимое число в данном разряде.
Скорость перемещения мигающего разряда и установка осуществляются с час-
тотой около одного герца. Если числа набраны неверно, можно сбросить все
показания, нажав кнопку «Обнуление». После обнуления мигающий разряд не
изменит своего положения. При выборе разряда переход от седьмого разряда к
нулевому необходимо выполнять, не отрывая пальца от кнопки «Разряд». После
выполнения установки кнопкой «Разряд» мигающий разряд убирается за преде-
лы индикатора. После отпускания кнопки устройство переходит в режим счета.
На индикаторе будут высвечиваться установленные значения, а, значит, счет-
чик выдаст звуковой сигнал совпадения набранного и индицируемого значения.
Это свидетельствует об исправности счетчика и звуковой сигнализации. После
нажатия кнопки .«Обнуление» звуковой сигнал прекратится, а все разряды уста-
новятся в ноль. Можно включать намоточный станок. При выборе датчика обо-
ротов лучше использовать оптопару. Датчик на герконе прост, но на частоте
вращения около 10 Гц (ручная «моталка» с редуктором 1:10) он «залипает».
Проверить работоспособность устройства можно, если подключить вход IN
к выводу 1 (RA2) микроконтроллера.
Перейти в режим установки можно после обнуления показаний индикатора
и смещения мигающего разряда в зону индикатора. При обнулении индикатора
установочные значения не обнуляются. То есть если вам необходимо намотать
одинаковое количество витков несколько раз, то делать установку не надо.
165
Устройству с цифровой индикацией
55
А И7!
-5 В D Е F G SAI SA2
Рис. 38. Счетчик витков. Печаткная плата
BF1
SA2 SAI G F Е D -5 В
Рис. 39. Счетчик витков. Расположение элементов на плате
Необходимо отметить, что совпадение и звуковая сигнализация происходят
только на частоте до 150 Гц. На большей частоте подпрограмма сравнения не
успевает отслеживать изменения в разрядах индикации. Увеличения частоты
сравнения и счета в 2,5 раза можно добиться применением микроконтроллера
с тактовой частотой 10 МГц (PIC16F84A-10I/P). При этом если необходима
предварительная установка, потребуется увеличение разрядности счетчика
установки (ведь частота установки тоже увеличится в 2,5 раза).
Потребляемый ток при напряжении питания 5 В составляет 30 мА. Если вы
будете использовать это устройство как цифровую шкалу с питанием от гальва-
нических элементов, то потребляемый ток при напряжении питания 3 В соста-
вит 10 мА.
; СЧЕТЧИК ВИТКОВ. МАКСИМАЛЬНАЯ ЧАСТОТА СЧЕТА ДО 15 КГЦ.
; 8 РАЗРЯДОВ ИНДИКАЦИИ С УСТАНОВКОЙ ЧИСЛА СОВПАДЕНИЯ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
166
Счетчик витков
; ПРОГРАММА = SETSIK.ASM
; ВЕРСИЯ: 05-02-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
9
♦include pl6f84a.inc
CONFIG 3FF2H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,0 МГЦ.
; СПЕЦ РЕГИСТРЫ.
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H ; OPTION (RP0-1) .
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU • 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В.ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 8 6H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
SCO EQU 0CH /МЛАДШИЙ РАЗРЯД СЧЕТЧИКА.
SCI EQU 0DH 9
SC2 EQU 0EH 9
SC3 EQU 0FH 9
SC4 EQU 10H 9
SC5 EQU 11H 9
SC6 EQU 12H
SC7 EQU 13H ;СТАРШИЙ РАЗРЯД.
CAT EQU 14H /ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАНИЯ)
ANOD EQU 15H /КАТОД, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ(0-7).
SEG EQU 16H /СЕГМЕНТЫ-
COUI EQU 025H /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
В ; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG.
FLAG EQU 17Н
/ 0-> ВКЛЮЧЕНИЕ ЗВОНКА.
/ 1-> ФЛАГ УСТАНОВКИ 1 СЕК.
/ 2-> МИГАНИЕ ЗА ИНДИКАТОРОМ.
/ з-> РАБОТА.
/ 4-> СЧЕТЧИКА ГАШЕНИЯ ИНДИКАЦИИ.
5»-> ГАШЕНИЕ РАЗРЯДА ИНДИКАЦИИ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
SECL EQU 18Н /СЧЕТЧИК УСТАНОВКИ
исо EQU 19Н /ЕДИНИЦЫ.
167
Устройства с цифровой индикацией
UC1 EQU 1AH ; ДЕСЯТКИ.
UC2 EQU 1BH ; СОТНИ.
UC3 EQU 1CH ; ТЫСЯЧИ.
UC4 EQU 1DH ; ДЕСЯТКИ ТЫСЯЧ.
UC5 EQU 1EH / сотни тысяч.
UC6 EQU 1FH ; МИЛЛИОНЫ.
UC7 EQU 02 OH / ДЕСЯТКИ миллионов.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W TEMP EQU 021H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS TEMP EQU 022H ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR TEMP EQU 023H /ВРЕМЕННЫЙ ДЛЯ FSR.
C0U3 EQU 024H /СЧЕТЧИК ВЫДЕРЖКИ ИНДИКАЦИИ СЕГМЕНТА.
; 1. ПУСК.
f ORG 0
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B' 00000000' /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ.
MOVWF OPTION REGA80H
MOVLW B' 10010000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ИЗМЕНЕНИИ СИГНАЛА
ПОРТВ, B0.
MOVWF INTCON
MOVLW B’ 00001000' /RAO, RAI, RA2, RA4 - НА ВЫХОД, RA3 - НА ВХОД.
MOVWF TRISAA80H
MOVLW B' 00000001' / RB1-RB7-HA ВЫХОД, RBO-ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И1 УСТАНАВЛИВАЕМ
CLRF SCO
CLRF SCI
CLRF SC2
CLRF SC3
CLRF SC4 f
CLRF SC5
CLRF SC6
CLRF SC7
CLRF UCO ✓
' CLRF UC1
CLRF UC2
CLRF UC3
CLRF UC4
CLRF UC5
CLRF UC6
CLRF UC7
168
Счетчик витков
CLRF CLRF CLRF GOTO SEG SECL CAT ZIKL /ИДЕМ НА ИНДИКАЦИЮ.
; 3. ОБНУЛЕНИЕ. KZO CLRF SCO /ОБНУЛЯЕМ РЕГИСТРЫ ИНДИКАЦИИ
CLRF SCI
CLRF SC2
CLRF SC3
CLRF SC4
, CLRF SC5
CLRF SC6
CLRF SC7
BCF FLAG,3 /ЧТОБЫ МОЖНО БЫЛО ДВИГАТЬ.
BCF FLAG, 1' /ЧТОБЫ САМО НЕ ПОШЛО.
BCF FLAG,0 /ЧТОБЫ ЗАМОЛЧАЛ.
BTFSC FLAG,2 /В РЕЖИМЕ СЧЕТА РЕГИСТРЫ'
RETURN ;УСТАНОВКИ HE СБРАСЫВАЮТСЯ. .
CLRF UC0 /ОБНУЛЯЕМ РЕГИСТРЫ УСТАНОВКИ
CLRF UC1
CLRF UC2
CLRF UC3
CLRF UC4
CLRF UC5
CLRF UC6
CLRF UC7
RETURN
; 4. ВЫБОР РАЗРЯДА УСТАНОВКИ.
САТК
BTFSS FLAG,1 /УСТАНОВКА РАЗРЕШЕНА ЕСЛИ ПРОШЛА 1 СЕК
RETURN
BCF FLAG,2 /ЗАКОНЧИЛИ РЕЖИМ СЧЕТА.
BCF FLAG,1 /ЧТОБЫ ЖДАТЬ ДО СЛЕДУЮЩЕЙ СЕКУНДЫ.
MOVFW CAT , /9 РАЗРЯД = 0.
SUBLW .8
BZ CATKO /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
INCF CAT, 1 /+1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА.
RETURN f
САТКО
CLRF CAT /ОБНУЛЯЕМ.
BCF INTCON,7 /ЗАПРЕТ ПРЕРЫВАНИЙ НА ВРЕМЯ УСТАНОВКИ.
BCF FLAG,2 /СБРОСИМ ФЛАГ 8 РАЗРЯДА.*
BCF FLAG,3 /РЕЖИМ СЧЕТА.
GOTO UST8 /ВЫСВЕТИМ УСТАНОВКУ.
/ 5. ЗАПИСЬ УСТАНОВОК В в» РЕГИСТРЫ.
UST
BTFSS , FLAG,1 /УСТАНОВКА РАЗРЕШЕНА ЕСЛИ ПРОШЛА .1 СЕК.
169
Устройства с цифровой индикацией
RETURN
ВСЕ FLAG,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW CAT /ПО ПОЛОЖЕНИЮ МИГАЮЩЕГО РАЗРЯДА
ADDWF PC, 1 /ОПРЕДЕЛЯЕМ РАЗРЯД УСТАНОВКИ.
GOTO USTO /0
GOTO UST1 /1
GOTO UST2 /2
GOTO UST3 /3
GOTO UST4 /4
GOTO UST5 /5
GOTO UST6 /б
UST0 GOTO RETURN UST7 /7
INCF UCO, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 Z
SUBWF UC0,0
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ
CLRF UCO 9
GOTO UST8 9
UST1
INCF UC1,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC1,0 9
BTFSC STATUS,0 г
CLRF UC1 9
UST2 GOTO UST8 9
INCF UC2,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC2, 0 9
BTFSC STATUS,0 9
CLRF UC2 9
GOTO UST8, 9
UST3
INCF UC3,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC3, 0 9
BTFSC STATUS,0 9
CLRF UC3-
'’goto UST8 9
UST4
INCF UC4,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC4,0 9
BTFSC STATUS,0 9
CLRF UC4
GOTO UST8
UST5
INCF UC5, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC5, 0 9
BTFSC STATUS,0 9
CLRF UC5 9
170
Счетчик витков
GOTO ustfe
UST6
INCF UC6,1 ;РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9
MOVLW .10
SUBWF UC6,0
BTFSC STATUS,0 ;
CLRF UC6
GOTO UST8
UST7
INCF UC7,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9
MOVLW .10
SUBWF UC7,0 ; \
BTFSC STATUS,0 ; V
CLRF UC7 ’ ;
GOTO UST8
; 6. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
UST8
MOVFW UCO
MOVWF SCO
MOVFW UC1
MOVWF SCI
MOVFW UC2
MOVWF SC2
MOVFW UC3
MOVWF SC3
MOVFW UC4
MOVWF SC4
MOVFW UC5
MOVWF SC5
MOVFW UC6
MOVWF SC6
MOVFW UC7
MOVWF SC7
RETURN
; 7. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
СОМР
TSTF SCO /ЕСЛИ ВСЕ РАЗРЯДЫ НУЛЕВЫЕ,
SKPZ /ТО СРАВНЕНИЕ НЕ ПРОИЗВОДИТСЯ
GOTO COM
TSTF SCI
SKPZ
GOTO COM
TSTF SC2
SKPZ
GOTO COM
TSTF SC3
SKPZ
GOTO COM
TSTF SC4
SKPZ
171
Устройства с цифровой индикацией
GOTO COM
TSTF SKPZ scs
GOTO COM
TSTF SKPZ SC6
GOTO COM
TSTF SKPZ SC7
GOTO RETURN COM .DM
BSF FLAG,3 /ЕСЛИ ИДЕТ СРАВНЕНИЕ, ЗНАЧИТ РАБОЧИЙ РЕЖИМ.
MOVFW SCO /ЗАГРУЖАЕМ РЕГИСТР РАЗРЯДА И
SUBWF UC0,0 ;ВЫЧТЕМ ИЗ РЕГИСТРА УСТАНОВКИ.
SKPZ /ЕСЛИ РАВНО НУЛЮ,
RETURN /ПРОПУСКАЕМ И СРАВНИВАЕМ СЛЕДУЮЩИЙ РАЗРЯД.
MOVFW SCI
SUBWF SK: Z RETURN UC1,O
MOVFW SC2
SUBWF SKPZ UC2,0
RETURN
MOVFW зсз ;
SUBWF- SKPZ исз,о
RETURN
MOVFW SC4
SUBWF UC4,0
SKPZ
RETURN
MOVFW SC5
SUBWF SKPZ RETURN UC5, 0
MOVFW SC6
SUBWF SKPZ UC6, 0
RETURN
MOVFW SC7
SUBWF UC7,0
SKPZ RETURN
BSF FLAG,0 /ЕСЛИ ВСЕ РАЗРЯДЫ РАВНЫ, СТАВИМ ФЛАГ РАВЕНСТВА
RETURN
; 8. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
SEGDATA / 7, 6, 5, 4, 3, 2, 1, 0.
ADDWF ' PCL,F / G, F, Е, D, С, В, A, IN.
; ОБЩИЙ: КАТОД АНОД
RETLW В'ОИШП' ; В'ЮООООО' 0
172
Счетчик витков
RETLW B'00001101' ; B'1111001' 1
RETLW B'10.110111' ; B'0100100', 2
RETLW B'10011111' ; B'0110000' 3
RETLW B'11001101' ; B'OCHlOOl' 4
RETLW B'11.011011' ; B'0010010' 5
RETLW B'11111011' ; B'0000010' 6
RETLW B'00001111' ; B'1111000' 7
RETLW B'llllllll' ; B'0000000' 8
RETLW B'11011111' ; B'0010000' 9
; 9. ПП. ИНДИКАЦИИ.
ZIKL CLRF ANOD ОБНУЛЯЕМ- РЕГИСТР АНОДА.
ZSO MOVFW SCO ПЕРЕПИШЕМ ЗНАЧЕНИЕ НУЛЕВОГО РАЗРЯДА ИНДИКАЦИИ
CALL INDZIKL И ПОЙДЕМ НА ИНДИКАЦИЮ.
BTFSC FLAG,2 ; ЕСЛИ ЗАПЯТАЯ ЗА ИНДИКАТОРОМ,
CALL COMP ИДЕМ НА СРАВНЕНИЕ-.
CALL MC4 ВЫДЕРЖКА 3 МС.
ZS1 MOVFW SCI ВСЕ РАЗРЯДЫ ИНДИЦИРУЕМ АНАЛОГИЧНО НУЛЕВОМУ.
CALL INDZIKL ;
BSF STATUS,5 ; ПРОВЕРКА КНОПОК.
MOVLW B'00000110' /РАЗРЕШАЕМ ВХОД С RBI, RB2,
MOVWF TRISBA80H
BCF ST,ATUS>5
BTFSC FLAG,3 ; ЕСЛИ ИДЕТ УСТАНОВКА,
GOTO • ZOOS ; ПРОПУСТИМ.
BTFSS PORTB,1 ; ЕСЛИ-КНОПКА ВЫБОРА РАЗРЯДА НАЖАТА,
CALL CATK ; ИДЕМ СРАВНИВАТЬ РАЗРЯД УСТАНОВКИ.
BTFSS PORTB,2 ; ЕСЛИ НАЖАТА КНОПКА УСТАНОВКИ,
CALL UST ; ИДЕМ НА УСТАНОВКУ.
BTFSS PORTB,1 ; ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА НАЖАТА,
GOTO ZOOS ; ПРОПУСКАЕМ УСТАНОВКУ ФЛАГА.
MOVFW CAT ; 8 РАЗРЯД ФИКТИВНЫЙ, ЧТОБЫ УБРАТЬ МИГАНИЕ С ИНДИКАТОРА.
SUBLW .8 ; НЕ БОЛЕЕ 8,
SKPNZ ЕСЛИ РАВНО НУЛЮ,
BSF FLAG,2 ; УСТАНОВИМ ФЛАГ "РАЗРЯД ЗА ИНДИКАТОРОМ".
SKPNZ ЕСЛИ РАВНО НУЛЮ,
BSF INTCON,7 ; ^РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
zoos BTFSS PORTA,3 ; ’ЕСЛИ НАЖАТА КНОПКА СБРОСА,
CALL KZO ; 'ИДЕМ НА СБРОС.
BSF STATUS,5 ;
MOVLW В'ОООООООГ ';РАЗРЕШАЕМ ВХОД RB0.
MOVWF TRISB^8OH
BCF STATUS,5
CALL MC4 ; :ВЫДЕРЖКА 3 МС.
ZS2
MOVFW SC2 ; :ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВТОРОГО РАЗРЯДА ИНДИКАЦИИ
CALL INDZIKL ; :И ПОЙДЕМ НА ИНДИКАЦИЮ.
CALL MC4 i :ВЫДЕРЖКА 3 МС.
173
Устройства с цифровой индикацией
ZS3
MOVFW SC3 f
CALL INDZIKL f
CALL MC4
ZS4
MOVFW SC4 r
CALL INDZIKL f
CALL MC4
ZS5
MOVFW SC5 !
CALL INDZIKL f
CALL MC4
ZS6
MOVFW SC6 !
CALL INDZIKL f
CALL MC4
ZS7
MOVFW SC7 !
CALL INDZIKL f
CALL MC4
GOTO ZIKL /НАЧНЕМ СНАЧАЛА.
INDZIKL
CALL SEGDATA /ОПРЕДЕЛИМ ЗНАЧЕНИЯ СЕГМЕНТОВ.
MOVWF SEG /ЗАПИСЬ ЗНАЧЕНИЯ РАЗРЯДА ВО ВСПОМОГАТЕЛЬНЫЙ
/РЕГИСТР.
MOVFW ANOD /СРАВНИМ НОМЕР КАТОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT, 0 /РАЗРЯДА МИГАНИЯ.
BNZ COUZ2 /ПЕРЕХОД, ЕСЛИ НЕ НОЛЬ.
INCF COUI,1 /ЕСЛИ НОЛЬ, +1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
MOVLW .10 /МОЖНО ПОСТАВИТЬ .5 И МИГАНИЕ БУДЕТ ЧАЩЕ.
SUBWF COUI,0 /ВЫЧЛИ.
SKPZ /ЕСЛИ РАВНО 0, ПОЙДЕМ УСТАНАВЛИВАТЬ БИТ ГАШЕНИЯ
GOTO COUZ /ЕСЛИ НЕ РАВНО НУЛЮ, ИДЕМ НА ИНДИКАЦИЮ.
C0UZ1
CLRF COUI /ОБНУЛИЛИ СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
BTFSC FLAG,4 /ПРОПУСТИТЬ,ЕСЛИ 0.
BCF FLAG,4 /МЕНЯЕМ ЗНАЧЕНИЕ ФЛАГА НА ПРОТИВОПОЛОЖНОЕ.
BTFSS FLAG,4 /ЕСЛИ ЕДИНИЦА, ПРОПУСКАЕМ.
BSF FLAG,4 /УСТАНОВКА БИТА ГАШЕНИЯ СЧЕТЧИКА В 1.
BTFSC FLAG,4 /ЕСЛИ ЕДИНИЦА,
BSF FLAG,5 /УСТАНОВИМ ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ.
GOTO COUZ /ИДЕМ НА ИНДИКАЦИЮ.
C0UZ2
BCF FLAG,5 /УСТАНОВКА БИТА ГАШЕНИЯ ИНДИКАЦИИ В 0.
COUZ
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 1,
BCF ANOD,4 /ТО РАЗРЕШАЕМ ВКЛЮЧЕНИЕ ЗВОНКА.
BTFSS FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 0,
BSF ANOD,4 /СБРОСИМ РАЗРЯД ЗВОНКА (ЗВОНОК ВЫКЛЮЧЕН)
MOVFW . ANOD /ЗАГРУЖАЕМ НОМЕР КАТОДА
MOVWF PORTA /В ПОРТ А.
BTFSS FLAG, 5- /ЕСЛИ УСТАНОВЛЕН ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ,
MOVFW SEG /ПРОПУСТИМ, ИНАЧЕ ПЕРЕПИШЕМ ЗНАЧЕНИЕ СЕГМЕНТОВ.
BTFSC FLAG,5 /ЕСЛИ УСТАНОВЛЕН ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ,
174
Счетчик витков
CLRF PORTB /ОБНУЛИМ ПОРТ, ПОГАСИВ ИНДИКАТОРЫ С ОБЩИМ КАТОДОМ
BTFSS FLAG,5 /ЕСЛИ ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ НУЛЕВОЙ,
MOVWF PORTB /В ВЫХОДНОЙ РЕГИСТР ПОРТА В ПЕРЕПИШЕМ ЗНАЧЕНИЯ
/СЕГМЕНТОВ.
BCF ANOD,4 /ДЛЯ ВЕРНОСТИ СЧЕТА, СБРОСИМ РАЗРЯД ЗВОНКА. INCF ANOD,1 /+1 В РЕГИСТР КАТОДА.
МС4 RETURN
MOVLW .250 /ЗАДЕРЖКА НА ИНДИКАЦИЮ 3 МС.
МС2 MOVWF COU3
/ DECF COU3,1 /ВЫЧИТАЕМ 1 ДО НУЛЯ. NOP NOP NOP NOP NOP NOP NOP SKPZ /ЕСЛИ РАВНО НУЛЮ, ИДЕМ НА УСТАНОВКУ ФЛАГА. GOTO МС2 /ЗАЦИКЛИВАЕМСЯ ДО ОБНУЛЕНИЯ РЕГИСТРА.
; 10. ФЛАГ УСТАНОВКИ.
SEC
DTFSC FLAG,3 /В РАБОЧЕМ РЕЖИМЕ НЕТ УСТАНОВКИ. RETURN INCF ' SECL,1 /+1 В РЕГИСТР ДО ПЕРЕПОЛНЕНИЯ (256). TSTF SECL /ТЕСТИРУЕМ РЕГИСТР НА НОЛЬ. SKPNZ /ЕСЛИ РАВНО НУЛЮ, BSF FLAG,1 /УСТАНОВИМ ФЛАГ УСТАНОВКИ. RETURN
; 11. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И MOVFW STATUS /STATUS, MOVWF STATUS_TEMP ; MOVFW FSR /FSR. MOVWF FSR_TEMP GOTO SOI . ;ПРИБАВИМ 1 В СЧЕТЧИК. RECONST ,-ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,1 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ВХОДУ ВО. MOVFW STATUS TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS, MOVFW FSR_TEMP MOVWF FSR /FSR, MOVFW W_TEMP /W. RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 12. СЧЕТ.
SOI
BTFSS FLAG,2 /ЗАПЯТАЯ ЗА ИНДИКАТОРОМ (РЕЖИМ СЧЕТА).
175
Устройства с цифровой индикацией
GOTO RECONST
MOVLW .9 ;ЕСЛИ УЖЕ 9,
SUBWF SCO, 0
ВС S10 /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ.
INCF SCO, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S10 CLRF SCO
MOVLW . 9 /ЕСЛИ УЖЕ 9,
SUBWF SCI, 0
BC S100 /ИДЕМ НА СРАВНЕНИЕ СОТЕН.
INCF SCI, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S100 CLRF SCI
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC2,0
BC S103 /ИДЕМ НА СРАВНЕНИЕ ТЫСЯЧ.
INCF SC2, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S103 CLRF SC2
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC3,0
BC S104 /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ ТЫСЯЧ
INCF SC3, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S104 CLRF SC3
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC4, 0
BC S105 /ИДЕМ НА СРАВНЕНИЕ СОТЕН ТЫСЯЧ.
INCF SC4,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S105 CLRF SC4
MOVLW . 9 /ЕСЛИ УЖЕ 9,
SUBWF SC5, 0
BC S106 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC5, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S106 CLRF SC5
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC6, 0
BC S107 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC6,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S107 CLRF SC6
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC7,0
BC S108 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC7, 1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
176
Кабельный пробник
GOTO RECONST
S108
CLRF SC7 /ОБНУЛЯЕМ СТАРШИЙ РАЗРЯД.
GOTO RECONST
END
Кабельный пробник
Для идентификации проводов в многожильных кабелях применяются при-
боры под названием кабельные пробники. Схемы кабельных пробников не раз
публиковались в журнале «Радио» [8, 9], но они либо сложны [8], либо имеют
ограничение по числу проверяемых проводов [9]. Предлагаемым пробником
можно одновременно идентифицировать до 80 проводников с цифровой инди-
кацией условного номера проводника на стороне приемника. Применение
микроконтроллеров PIC16F84A в устройстве предельно упростило схему проб-
ника и работу с ним.
Пробник состоит из передатчика и приемника. На стороне передатчика
проводники вставляются в пронумерованные зажимы, а на стороне приемника
щупом прикасаются к проводникам. На цифровом табло будет высвечиваться
номер зажима, к которому подключен данный проводник. Для определения
номеров жил необходимо идентифицировать один провод и подключить его к
общему выводу приемника и передатчика.
Передатчик работает в режиме распределителя импульсов по десяти выво-
дам микроконтроллера. Каждый вывод имеет свою константу, к которой при-
бавляются десятки в момент смены кода десятков. Для того чтобы все 80 цик-
лов распределения импульсов производились за одно и то же время, каждый
цикл выполняется за время от одного прерывания до другого. Прерывания вы-
полняются по переполнению таймера TMR0. Таймер имеет предварительную
установку коэффициента деления, определенную так, чтобы в длительность
времени от прерывания к прерыванию поместилось 80 периодов выходных
импульсов.
Рассмотрим алгоритм работы программы передатчика, показанный на
рис. 40. После пуска программы и инициализации регистров обнуляется ре-
гистр десятков. Значение регистра десятков переписывается в порт А для ком-
мутации мультиплексоров. Далее разрешаются прерывания и по двоичному
числу десятков находится его десятичное значение. Десятичное значение при-
бавляется к константе первого выхода. Константа для каждого выхода опреде-
ляется его номером. То сть первый выход имеет константу К = 1, а десятый
выход имеет константу К = 10. При нулевом значении десятков на каждом вы-
ходе будет число импульсов, равное номеру выхода. Далее программа проверя-
ет регистр К на ноль. Если ноля нет, то из регистра вычитается единица. Вы-
читание единицы сопровождается переключением выхода в единичное состоя-
ние. Выдерживается пауза на время 24 мкс и выход переводится в нулевое
состояние. Нулевое Состояние выхода длится 30 мкс. Следовательно, период
импульсов равен 24 + 30 = 54 мкс. После этого программа проверяет регистр
на ноль. Если регистр пустой, то программа переходит в ожидание прерыва-
177
Устройства с цифровой индикацией
ния. А если значение регистра не равно нулю, то весь цикл формирования им-
пульса на выходе повторяется. Таким образом, на выходе будет сформировано
такое число импульсов, которое было записано в регистр К.
Рис. 40. Алгоритм работы программы передатчика кабельного пробника. Передатчик
178
Кабельный пробник
После инициализации регистров включается предделитель, имеющий коэф-
фициент деления, равный 32, и таймер с коэффициентом деления, равным
256 — 119 = 137. При кварце с частотой 4 МГц прерывание по переполнению
таймера должно быть через 4,38 мс (32 х 137 = 4384 = 4,38 мс), но возврат из
прерывания выполняете^ командой без разрешения прерывания. К этому вре-
мени прибавляется время циклов до разрешения прерывания и, собственно,
время на само выполнение прерывания. Общее среднее число циклов равно 16.
Поэтому длительность между прерываниями составляет 4,4 мс. Как не трудно
подсчитать (54 х 80 = 4320 = 4,32 мс), 80 периодов импульсов будут длиться
4,32 мс. То есть 80 импульсов не выходят за границы длительности между'пре-
рывдниями.
После переполнения таймера выполняется обычная процедура сохранения
значений регистров при прерывании и прибавляется (можно и вычитать) еди-
ница в счетчик прерываний. Значения этого счетчика нигде не используются
программой, а сам сч;тчик необходим для выполнения прерывания. Но его
удобно использовать при отладке программы. После восстановления значений
регистров разрешается прерывание для формирования импульсов со следую-
щего выхода.
После того как будут сформированы импульсы на десятом выходе, регистр
десятков увеличивается на единицу и весь цикл повторится с команды записи
двоичного кода десятков в порт А. В новом цикле число сформированных импу-
льсов на каждом выходе будет увеличено на десять. Если значение десятков ста-
ет равно 8, то цикл формирования импульсов начнется с обнуления регистра
десятков. Таким образом, максимальное значение десятков равно семи, а макси-
мальное число импульсов будет на десятом выходе (10 + 70 = 80). Все 80 циклов
прерываний будут длиться 0,352 секунды (4,4 мс х 80 = 352 мс = 0,352 с). Это
время определяет гарантированную длительность паузы между выдачей им-
пульсов на каждом выходе. Для одиночного импульса на первом выходе дли-
тельность паузы будет увеличена почти на время, равное времени между
прерываниями, а для 80 импульсов на 10 выходе пауза будет 0авна 0,352 с.
Этот момент необходимо отметить, чтобы лучше понять работу приемника
кабельного пробника.
Схема передатчика показана на рис. 41. Все выводы порта В настроены на
выход и имеют коэффициенты от одного, до восьми. Выводы RAO—RA2 испо-
льзуются для выхода значений регистра десятков в двоичном коде. Выводы
RA3, RA4 используются как выходы с коэффициентом 9, 10 соответственно.
Поскольку выход RA4 имеет открытый сток, то он нагружен резистором R1.
Каждый* вход 3 мультиплексоров DD2—DD11 подключен к выходу микроконт-
роллера со своим коэффициентом. Адресные входы всех мультиплексоров сое-
динены параллельно и подключены к выходам десятков микроконтроллера.
Таким образом, при нулевом значении регистра десятков на всех мульти-
плексорах будет выбран нулевой адрес. А на выводах 13 всех мультиплексоров
будет появляться количество импульсов, равное коэффициенту выхода микро-
контроллера, который подключен к входу 3 мультиплексора. На выводе 13
микросхемы DD2 будет постоянно присутствовать только один импульс, а на
том же выводе микросхемы DD11 будет 10 импульсов. При увеличении адреса
мультиплексора на единицу переключится его выход, а число импульсов на
179
Устройства с цифровой индикацией
Рис. 41. Кабельный пробник. Передатчик
нем увеличится на десять. Таким образом, на каждом выходе мультиплексоров
последовательно будет выдаваться только свое количество импульсов. Нижний
по схеме выход необходимо подключать к одному известному проводу, кото-
рый будет общим для передатчика и для приемника.
Приемник кабельного пробника работает по принципу двухразрядного счет-
чика. Регистр счетчика увеличивается на единицу при прерывании от измене-
ния сигнала на входе RB0. Алгоритм работы программы приемника показан
на рис. 42. После пуска и инициализации программа переходит к выполнению
динамической индикации двух светодиодов с общим катодом. Время на инди-
кацию одного светодиода равно 5 мс. То есть весь цикл индикации выполняет-
ся с частотой 100 Гц.
В приемнике используются два прерывания: по переполнению таймера
TMR 0 и от изменения сигнала на входе RB0. При поступлении импульса на
вход RB0 сохраняются значения текущих регистров. Далее программа проверя-
ет источник прерывания. Если прерывание произошло не по переполнению
таймера, то инкрементируется счетчик импульсов. Производится переустанов-
ка таймера (256 — 120 = 136) и сброс счетчика предделителя. Программа вос-
станавливает значения регистров, и продолжается работа по индикации. Таким
образом, при поступлении импульсов с входа RB0 таймер постоянно переуста-
180
Кабельный пробник
Рис. 42. Алгоритм работы программы кабельный пробник. Приемник
навливается. Поэтому невозможно прерывание от переполнения таймера до тех
пор, пока на входе присутствуют импульсы.
Если на входе длительное время отсутствуют импульсы, то произойдет пре-
рывание от переполнения таймера. Для надежности работы приемника время
от прерывания до прерывания немного уменьшено по сравнению с передатчи-
ком и равно 4,38 мс. Каждое прерывание от переполнения таймера подсчиты-
вается счетчиком прерываний. Пауза между импульсами на каждом выходе пе-
редатчика равна 80 прерываниям, поэтому счетчик прерываний в приемнике
имеет счет до 80. Если за это время не было входных импульсов, то программа
перепишет значения регистров счетчиков импульсов в регистры индикации.
Индикация обновится. Это будет происходить каждые 0,35 с.
Схема приемника показана на рис. 43. Выходы микроконтроллера
RBI—RB7 коммутируют сегменты светодиодов HG1, HG2. Выходы RAO, RA1
коммутируют катоды светодиодов. Импульсы со щупа поступают на вход RB0.
181
Устройства с цифровой индикацией
Рис. 43. Кабельный пробник. Приемник
Зажим щупа подключается к известной жиле кабеля, которая служит общим
проводом для приемника и передатчика. Если выход мультиплексора передат-
чика не выбран адресом, то на нем будет присутствовать неопределенный уро-
вень. Тогда при появлении импульсов на счетчике приемника будет одно лож-
ное срабатывание. Это не зависит от установленного перепада срабатывания
счетчика то ли из ноля в единицу, то ли из единицы в ноль. Чтобы не было
ложных импульсов, вход зашунтирован резистором R1.
Питание приемника и передатчика осуществляется от трех элементов типа
ДА или ААА. Если предполагается длительная работа с приемником, то жела-
тельно использовать плоскую батарею типа 3R12X. В приемнике и передатчике
используется кварц на частоту 4 МГц. Без каких-либо переделок схемы и про-
граммы можно использовать кварцы на частоты до 1 МГц. При этом соответст-
венно увеличится время смены индикации до 4 раз. Коммутация светодиодов
останется на приемлемой для глаз частоте (до 25 Гц).
Печатная плата для передатчика на 40 выходов показана на рис. 44 (вид со
стороны проводников), а на рис. 45 дано расположение элементов. Печатная
плата на оставшиеся 40 выходов аналогична приведенной на рис. 44 и 45, но
без микросхемы DD1 и с добавлением резистора R1. Две платы расположены
одна под одной, а между ними устанавливается пенал для трех элементов типа
ААА на уровне микросхемы DD1. Платы стягиваются винтами со стойками.
Отверстия под винты на рис. не показаны, так как могут быть просверлены в
любом удобном для монтажа месте.
Зажимы для проводов самодельные и изготавливаются из листовой пружи-
нящей бронзы шириной 2,5 мм. Нижний и верхний зажим впаиваются в плату.
Края зажимов загибают под углом, предварительно просверлив в них отверстия
0 1,2 мм. Прижимая верхний и нижний зажим, в совпадающие отверстия
вставляют провод. После окончательного монтажа зажимы нумеруются так,
чтобы при вращении передатчика (низ стал верхом) были видны их номера.
182
Кабельный пробник
Рис. 44. Кабельный пробник. Передатчик. Печатная плата на 40 выводов
GND
9 10
б
Рис. 45. Кабельный пробник. Передатчик. Расположение элементов на печатной плате
Файл передатчика — kabelpd.asm, а для приемника — kabelpm.asm.
; СЧЕТЧИК ВИТКОВ. МАКСИМАЛЬНАЯ ЧАСТОТА СЧЕТА ДО 15 КГЦ.
; 8 РАЗРЯДОВ ИНДИКАЦИИ С УСТАНОВКОЙ ЧИСЛА СОВПАДЕНИЯ.
; -РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
183
Устройства с цифровой индикацией
; ПРОГРАММА = SETSIK.ASM
; ВЕРСИЯ: 05-02-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
9
#include pl6f84a.inc
__CONFIG 3FF2H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,0 МГЦ.
/ СПЕЦ РЕГИСТРЫ.
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H /TMR0.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA ' EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
/ ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
SCO EQU ОСН /МЛАДШИЙ РАЗРЯД СЧЕТЧИКА. .
SCI EQU 0DH /
SC2 EQU OEH /
SC3 EQU OFH 9
SC4 EQU 10H 9
SC5 EQU 11H 9
SC6 EQU 12H
SC7 EQU 13H /СТАРШИЙ РАЗРЯД.
CAT EQU 14H . /ВЫБОР РАЗРЯДА УСТАНОВКИ (МИГАНИЯ)
ANOD EQU 15H /КАТОД, ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ(0-7).
SEG EQU 16H /СЕГМЕНТЫ.
COUI EQU 025H /СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG. -
/============================================ j
FLAG EQU 17H i
/ 0-> ВКЛЮЧЕНИЕ ЗВОНКА. '
/ l-> ФЛАГ УСТАНОВКИ 1 СЕК.
/ 2-> МИГАНИЕ ЗА ИНДИКАТОРОМ. <
; 3-> РАБОТА.
; 4-> СЧЕТЧИКА ГАШЕНИЯ ИНДИКАЦИИ.
5-> ГАШЕНИЕ РАЗРЯДА ИНДИКАЦИИ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
SECL EQU 18Н /СЧЕТЧИК УСТАНОВКИ.
184
Кабельный пробник
UCO EQU 19H /ЕДИНИЦЫ.
UC1 ’ EQU 1AH /ДЕСЯТКИ.
UC2 EQU 1BH /СОТНИ.
UC3 EQU 1CH /ТЫСЯЧИ.
UC4 EQU 1DH /ДЕСЯТКИ ТЫСЯЧ.
UC5 EQU 1EH /СОТНИ тысяч.
UC6 EQU 1FH /МИЛЛИОНЫ.
UC7 EQU 020H /ДЕСЯТКИ миллионов
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 021H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS-TEMP EQU 022H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
fsr_t£mp EQU 023H /ВРЕМЕННЫЙ ДЛЯ FSR.
соиз EQU 024H /СЧЕТЧИК ВЫДЕРЖКИ ИНДИКАЦИИ СЕГМЕНТА.
; 1. ПУСК.
ORG О
GOTO INIT
ORG' 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B100000000' /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ.
MOVWF OPTION_REG"80H
MOVLW B'lOOlOOOO' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ИЗМЕНЕНИИ СИГНАЛА
ПОРТВ, B0.
MOVWF INTCON
MOVLW B'OOOOIOOO' /RAO, RAI, RA2, RA4 - НА ВЫХОД, RA3 - НА ВХОД.
MOVWF TRISAA80H
MOVLW B'00000001' / RB1-RB7-HA ВЫХОД, RBO-ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCO
CLRF SCI
CLRF SC2
CLRF SC3
CLRF SC4 Л
CLRF SC5
CLRF SC6
CLRF SC7
CLRF UCO
CLRF UC1
CLRF UC2
CLRF , UC3
CLRF UC4
CLRF UC5
CLRF UC6
185
Устройства с цифровой индикацией
CLRF UC7
CLRF SEG
CLRF SECL
CLRF CAT
GOTO ZIKL /ИДЕМ НА ИНДИКАЦИЮ.
; 3. ОБНУЛЕНИЕ.
KZO
CLRF SCO /ОБНУЛЯЕМ РЕГИСТРЫ ИНДИКАЦИИ
CLRF SCI
CLRF SC2
CLRF SC3
CLRF SC4
CLRF SC5
CLRF SC6
CLRF SC7
BCF FLAG,3 /ЧТОБЫ МОЖНО БЫЛО ДВИГАТЬ.
BCF FLAG, 1 /ЧТОБЫ САМО НЕ ПОШЛО.
BCF FLAG,0 /ЧТОБЫ ЗАМОЛЧАЛ.
BTFSC FLAG,2 /В РЕЖИМЕ СЧЕТА РЕГИСТРЫ
RETURN /УСТАНОВКИ НЕ СБРАСЫВАЮТСЯ.
CLRF UCO /ОБНУЛЯЕМ РЕГИСТРЫ УСТАНОВКИ
CLRF UC1
CLRF UC2
CLRF UC3
CLRF UC4
CLRF UC5
CLRF UC6
CLRF UC7
RETURN
; 4. ВЫБОР РАЗРЯДА УСТАНОВКИ.
САТК
BTFSS FLAG,1 /УСТАНОВКА РАЗРЕШЕНА ЕСЛИ ПРОШЛА 1 СЕК
RETURN
BCF FLAG,2 /ЗАКОНЧИЛИ РЕЖИМ СЧЕТА.
BCF FLAG,1 /ЧТОБЫ ЖДАТЬ ДО СЛЕДУЮЩЕЙ СЕКУНДЫ.
MOVFW CAT /9 РАЗРЯД = 0.
SUBLW .8
BZ CATKO /ИНАЧЕ ИДЕМ ОБНУЛЯТЬ.
INCF CAT, 1 /+1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА.
RETURN
САТКО /ОБНУЛЯЕМ.
CLRF CAT
BCF INTCON,7 /ЗАПРЕТ ПРЕРЫВАНИЙ НА ВРЕМЯ УСТАНОВКИ
BCF FLAG,2 /СБРОСИМ ФЛАГ &,РАЗРЯДА.
BCF FLAG,3 /РЕЖИМ СЧЕТА.
GOTO UST8 /ВЫСВЕТИМ УСТАНОВКУ.
; 5. ЗАПИСЬ УСТАНОВОК В РЕГИСТРЫ.
UST
BTFSS FLAG,1 /УСТАНОВКА РАЗРЕШЕНА ЕСЛИ ПРОШЛА 1 СЕК.
186
Кабельный пробник
RETURN
BCF FLAG,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOVFW CAT /ПО ПОЛОЖЕНИЮ МИГАЮЩЕГО РАЗРЯДА
-ADDWF PC, 1 /ОПРЕДЕЛЯЕМ РАЗРЯД УСТАНОВКИ.
GOTO USTO /0
GOTO UST1 /1
GOTO UST2 • /2
GOTO UST3 /3
GOTO UST4 /4
GOTO UST5 /5
GOTO UST6 /6
GOTO RETURN UST7 /7 /
USTO
INCF UCO, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UCO, 0
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ
CLRF UCO 9
GOTO UST8 9
UST1
INCF UC1, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC1,0 9
BTFSC STATUS,0 9
CLRF UC1 9
UST2 GOTO UST8 9
INCF UC2,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9. .
MOVLW .10 9
SUBWF UC2,0 9
BTFSC STATUS,0 9
CLRF UC2 9
GOTO UST8 9
UST3
INCF UC3, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC3, 0 9
BTFSC STATUS,0 9
CLRF UC3 9
GOTO UST8 9
UST4
INCF UC4,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC4,0 9
BTFSC STATUS, 0' 9
CLRF UC4 9
GOTO UST8 9
UST5
INCF UC5, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF UC5, 0„ 9
BTFSC STATUS,0 9
CLRF UC5 9
GOTO UST8 9
187
Устройства с цифровой индикацией
UST6
INCF UC6, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9
MOVLW .10 t
SUBWF UC6, 0 f
BTFSC STATUS,0 r
CLRF UC6 r
GOTO UST8 !
UST7
INCF UC7, 1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9
MOVLW .10 f
SUBWF UC7,0 t
BTFSC STATUS,0 r
CLRF UC7 r
GOTO UST8 !
; 6. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
UST8
MOVFW UCO
MOVWF SCO
MOVFW UC1
MOVWF SCI
MOVFW UC2
MOVWF SC2
MOVFW UC3
MOVWF SC3
MOVFW UC4
MOVWF SC4
MOVFW UC5
MOVWF SC5
MOVFW UC6
MOVWF SC6
MOVFW UC7
MOVWF SC7
RETURN
; 7. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
COMP
TSTF SCO /ЕСЛИ ВСЕ РАЗРЯДЫ НУЛЕВЫЕ,
SKPZ /ТО СРАВНЕНИЕ НЕ ПРОИЗВОДИТСЯ
GOTO COM
TSTF SCI
SKPZ
GOTO. COM
TSTF SC2
SKPZ
GOTO COM
TSTF SC3
SKPZ
GOTO COM
TSTF SC4
SKPZ
GOTO COM
188
Кабельный пробник
TSTF SC5
SKPZ
GOTO COM
• TSTF SC6
SKPZ
GOTO COM
TSTF SC7
SKPZ
GOTO COM .
RETURN j
COM
BSF FLAG,3 /ЕСЛИ ИДЕТ СРАВНЕНИЕ, ЗНАЧИТ РАБОЧИЙ РЕЖИМ.
MOVFW SCO /ЗАГРУЖАЕМ РЕГИСТР РАЗРЯДА И
SUBWF UC0,0 /ВЫЧТЕМ ИЗ РЕГИСТРА УСТАНОВКИ.
SKPZ /ЕСЛИ РАВНО НУЛЮ,
RETURN /ПРОПУСКАЕМ И СРАВНИВАЕМ СЛЕДУЮЩИЙ РАЗРЯД.
MOVFW SCI
SUBWF UC1,O
£kpz
RETURN
MOVFW SC2
SUBWF UC2, 0
SKPZ
RETURN
MOVFW SC3
SUBWF UC3, 0
SKPZ
RETURN
MOVFW SC4
SUBWF UC4,0
SKPZ
RETURN
MOVFW SC5
SUBWF UC5,0
SKPZ
RETURN
MOVFW SC6
SUBWF UC6, 0
SKPZ
RETURN
MOVFW SC7
SUBWF UC7,0
SKPZ
RETURN
BSF FLAG,0 /ЕСЛИ ВСЕ РАЗРЯДЫ РАВНЫ, СТАВИМ ФЛАГ РАВЕНСТВА
RETURN
/ 8. ТАБЛИЦА СЕГМЕНТОВ ДЛЯ ОБЩЕГО КАТОДА.
SEGDATA / 7, 6, 5, 4, 3, 2, 1, 0.
ADDWF PCL,F ; G, F, E, D, С, B, A, IN.
; ОБЩИЙ: .КАТОД АНОД
RETLW В'ОППШ' / В'ЮООООО' 0
RETLW B'00001101' ; B'llllOOl' 1 '
189
Устройства с цифровой индикацией
RETLW B'10110111' ; B'0100100' 2
RETLW B'lOOlllll' ; B'0110000' 3
RETLW B'llOOllOl' ; B'0011001' 4
RETLW B'llOllOll' ; B'0010010' 5
• RETLW B’11111011' ; B'0000010' 6
RETLW B'00001111' ; B'llllOOO' 7
RETLW В'ПШШ' ; B'0000000’ 8
RETLW B'llOlllll' ; B'OOIOOOO' 9
9. ПП. ИНДИКАЦИИ.
ZIKL
CLRF ANOD ОБНУЛЯЕМ РЕГИСТР АНОДА.
zso MOVFW SCO ПЕРЕПИШЕМ ЗНАЧЕНИЕ НУЛЕВОГО РАЗРЯДА ИНДИКАЦИИ
CALL INDZIKL ; •И ПОЙДЕМ НА ИНДИКАЦИЮ.
BTFSC FLAG,2 ; ЕСЛИ ЗАПЯТАЯ ЗА ИНДИКАТОРОМ,
CALL COMP ; ИДЕМ НА СРАВНЕНИЕ.
CALL MC4 ; :ВЫДЕРЖКА 3 МС.
ZS1 MOVFW SCI ; :ВСЕ РАЗРЯДЫ ИНДИЦИРУЕМ АНАЛОГИЧНО НУЛЕВОМУ.
CALL INDZIKL ;
BSF STATUS,5 ; :ПРОВЕРКА КНОПОК.
MOVLW B'00000110' РАЗРЕШАЕМ ВХОД С RBI, RB2,
MOVWF TRISBA80H
BCF STATUS,5
BTFSC FLAG,3 ; ;ЕСЛИ ИДЕТ УСТАНОВКА,
GOTO ZOOS ;ПРОПУСТИМ.
BTFSS PORTB*, 1 /ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА НАЖАТА,
CALL CATK /ИДЕМ СРАВНИВАТЬ РАЗРЯД УСТАНОВКИ.
BTFSS PORTB,2 /ЕСЛИ НАЖАТА КНОПКА УСТАНОВКИ,
CALL UST /ИДЕМ НА УСТАНОВКУ.
BTFSS PORTB,1 /ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА НАЖАТА,
GOTO ZOOS /ПРОПУСКАЕМ УСТАНОВКУ ФЛАГА.
MOVFW CAT /8 РАЗРЯД ФИКТИВНЫЙ, ЧТОБЫ УБРАТЬ МИГАНИЕ /С ИНДИКАТОРА.
SUBLW .8 /НЕ БОЛЕЕ.8,
SKPNZ /ЕСЛИ РАВНО НУЛЮ,
BSF FLAG,2 /УСТАНОВИМ ФЛАГ "РАЗРЯД ЗА ИНДИКАТОРОМ".
SKPNZ /ЕСЛИ РАВНО НУЛЮ,
BSF INTCON,7 /РАЗРЕШАЕМ ПРЕРЫВАНИЯ. '
zoos BTFSS PORTA,3 ;ЕСЛИ НАЖАТА КНОПКА СБРОСА,
CALL KZO /ИДЕМ НА СБРОС.
BSF STATUS,5
MOVLW B'00000001 РАЗРЕШАЕМ ВХОД RB0.
MOVWF TRISBA80H
BCF STATUS,5
CALL MC4 /ВЫДЕРЖКА 3 МС.
ZS2 MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВТОРОГО РАЗРЯДА ИНДИКАЦИИ
CALL INDZIKL /И ПОЙДЕМ НА ИНДИКАЦИЮ.
CALL MC4 /ВЫДЕРЖКА 3 МС.
190
Кабельный пробник
ZS3
MOVFW SC3
CALL INDZIKL
CALL MC4
ZS4
MOVFW SC 4
CALL INDZIKL
CALL MC4
ZS5
MOVFW SC5
CALL INDZIKL
CALL MC4
ZS6
MOVFW SC 6
CALL INDZIKL - ;
CALL MC4
ZS7 Ж
MOVFW SC7
CALL INDZIKL
CALL MC4
GOTO ZIKL /НАЧНЕМ СНАЧАЛА.
INDZIKL
CALL SEGDATA /ОПРЕДЕЛИМ ЗНАЧЕНИЯ СЕГМЕНТОВ.
MOVWF SEG /ЗАПИСЬ ЗНАЧЕНИЯ РАЗРЯДА ВО ВСПОМОГАТЕЛЬНЫЙ РЕГИСТР.
MOVFW ANOD /СРАВНИМ НОМЕР КАТОДА С НОМЕРОМ УСТАНОВКИ
SUBWF CAT,0 /РАЗРЯДА МИГАНИЯ.
BNZ COUZ2 /ПЕРЕХОД, ЕСЛИ НЕ НОЛЬ.
INCF COUI,1 /ЕСЛИ НОЛЬ, +1 В СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
MOVLW .10 /МОЖНО ПОСТАВИТЬ .5 И МИГАНИЕ БУДЕТ ЧАЩЕ.
SUBWF COUI,0 /ВЫЧЛИ.
SKPZ /ЕСЛИ РАВНО 0, ПОЙДЕМ УСТАНАВЛИВАТЬ БИТ ГАШЕНИЯ.
GOTO COUZ /ЕСЛИ НЕ РАВНО НУЛЮ, ИДЕМ НА ИНДИКАЦИЮ.
COUZ1
CLRF COUI /ОБНУЛИЛИ СЧЕТЧИК ЦИКЛОВ ИНДИКАЦИИ.
BTFSC FLAG,4 /ПРОПУСТИТЬ, ЕСЛИ 0.
BCF FLAG,4 /МЕНЯЕМ ЗНАЧЕНИЕ ФЛАГА НА ПРОТИВОПОЛОЖНОЕ.
BTFSS FLAG,4 /ЕСЛИ ЕДИНИЦА, ПРОПУСКАЕМ.
BSF FLAG,4 /УСТАНОВКА БИТА ГАШЕНИЯ СЧЕТЧИКА В 1.
BTFSC FLAG,4 /ЕСЛИ ЕДИНИЦА,
BSF FLAG,5 /УСТАНОВИМ ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ.
GOTO COUZ /ИДЕМ НА ИНДИКАЦИЮ.
COUZ2
BCF FLAG,5 /УСТАНОВКА БИТА ГАШЕНИЯ ИНДИКАЦИИ В 0.
COUZ
BTFSC FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА = 1,
BCF ANOD,4 /ТО РАЗРЕШАЕМ ВКЛЮЧЕНИЕ ЗВОНКА.
BTFSS FLAG,0 /ЕСЛИ ФЛАГ ЗВОНКА =.0,
BSF ANOD,4 /СБРОСИМ РАЗРЯД ЗВОНКА (ЗВОНОК ВЫКЛЮЧЕН).
MOVFW ANOD /ЗАГРУЖАЕМ НОМЕР КАТОДА
MOVWF PORTA /В ПОРТ А.
BTFSS FLAG,5 /ЕСЛИ УСТАНОВЛЕН ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ,
MOVFW SEG * /ПРОПУСТИМ, ИНАЧЕ ПЕРЕПИШЕМ ЗНАЧЕНИЕ СЕГМЕНТОВ.
BTFSC FLAG,5 /ЕСЛИ УСТАНОВЛЕН ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ,
CLRF PORTB /ОБНУЛИМ ПОРТ, ПОГАСИВ ИНДИКАТОРЫ С ОБЩИМ КАТОДОМ.
191
Устройства с цифровой индикацией
BTFSS ' FLAG,5 /ЕСЛИ ФЛАГ ГАШЕНИЯ ИНДИКАЦИИ НУЛЕВОЙ,
MOVWF PORTB ;В ВЫХОДНОЙ РЕГИСТР ПОРТА В ПЕРЕПИШЕМ ЗНАЧЕНИЯ /СЕГМЕНТОВ.
BCF ANOD,4 /ДЛЯ ВЕРНОСТИ СЧЕТА, СБРОСИМ РАЗРЯД ЗВОНКА.
INCF RETURN •ANOD,1 ;+1 В РЕГИСТР КАТОДА.
MC4
MOVLW .250 /ЗАДЕРЖКА НА ИНДИКАЦИЮ 3 МС.
MOVWF COU3
MC2
DECF NOP NOP NOP NOP NOP NOP NOP SKPZ COU3,1 /ВЫЧИТАЕМ 1 ДО НУЛЯ. /ЕСЛИ РАВНО НУЛЮ, ИДЕМ НА УСТАНОВКУ ФЛАГА.
GOTO MC2 /ЗАЦИКЛИВАЕМСЯ ДО ОБНУЛЕНИЯ РЕГИСТРА. '
; 10. ФЛАГ УСТАНОВКИ.'
SEC
BTFSC RETURN FLAG,3 /В РАБОЧЕМ РЕЖИМЕ НЕТ УСТАНОВКИ.
INCF SECL,1 /+1 В РЕГИСТР ДО ПЕРЕПОЛНЕНИЯ (256).
TSTF SKPNZ SECL /ТЕСТИРУЕМ РЕГИСТР НА НОЛЬ. /ЕСЛИ РАВНО НУЛЮ,
BSF RETURN FLAG,1 /УСТАНОВИМ ФЛАГ УСТАНОВКИ.
11. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS TEMP
MOVFW FSR /FSR.
MOVWF. FSR TEMP
GOTO SOI /ПРИБАВИМ 1 В СЧЕТЧИК.
RECONST 1 /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,1 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ВХОДУ ВО.
MOVFW STATUS TEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR TEMP
MOVWF FSR / FSR,
MOVFW W TEMP ;W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
==========
/ 12. СЧЕТ.
• = =
SOI
BTFSS FLAG,2 ЗАПЯТАЯ ЗА ИНДИКАТОРОМ (РЕЖИМ СЧЁТА).
192
Кабельный пробник
GOTO RECONST
MOVLW .9 /ЕСЛИ УЖЕ 9,.
SUBWF SCO, 0
ВС S10 /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ.
INCF SCO,1 ;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S10 CLRF SCO
movl!w .9 /ЕСЛИ УЖЕ 9,
SUBWF SCI, 0
BC S100 /ИДЕМ НА СРАВНЕНИЕ СОТЕН.
INCF SCI, 1 ;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S100 CLRF SCI
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC2,0
BC S103 /ИДЕМ НА СРАВНЕНИЕ ТЫСЯЧ.
INCF SC2,1 ;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S103 CLRF SC2
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC3, 0
BC S104 /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ ТЫСЯЧ
INCF SC3,1’ ;ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S104 CLRF SC3
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC4,0
BC S105 /ИДЕМ НА СРАВНЕНИЕ СОТЕН ТЫСЯЧ.
INCF SC4,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S105 CLRF SC4
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC5, 0
BC S106 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC5,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S106 CLRF SC5
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC6, 0
/ BC S107 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC6,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
GOTO RECONST
S107 CLRF SC6
MOVLW .9 /ЕСЛИ УЖЕ 9,
SUBWF SC7,0 *
BC S108 /ИДЕМ НА ОБНУЛЕНИЕ.
INCF SC7,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
7.Зак. 2418
193
Устройства с цифровой индикацией
GOTO RECONST
S108
CLRF SC7 /ОБНУЛЯЕМ СТАРШИЙ РАЗРЯД.
GOTO RECONST
END
Радиоохрана
. Предлагаемое устройство — модулятор и демодулятор на двух микроконт-
роллерах может работать совместно с передатчиком и приемником с частотной
или амплитудной модуляцией. Устройство контролирует ежесекундную додачу
импульсов с охраняемого объекта. Производится контроль состояния 11 датчи-
ков. При пропадании контрольных импульсов из-за значительного удаления от
объекта или выключения передатчика включается звуковой сигнал. После
включения тревожного сигнала можно определить, по какому из параметров
или датчиков включилась сигнализация.
Алгоритм работы программы модулятора показан на рис. 46. После пуска и
инициализации регистров программа переходит к постоянному контролю дат-
чиков на размыкание. Контроль датчиков производится в то время, когда несу-
щая включена. Это происходит через одну секунду. Если любой из 11 датчиков
сработал, то номер этого датчика переписывается в регистр модуляции. Далее
значение регистра модуляции сравнивается на ноль, и если оно не равно нулю,
то регистр декрементируется. Устанавливается логическая единица на выходе
RA3, включая тем самым модуляцию передатчика. Отработав паузу, равную
2,7 мс, выход устанавливается в нулевое состояние. Программа переходит на
сравнение регистра модуляции на ноль. Таким образом, в то время, когда
включена несущая, произойдет модуляция количеством импульсов, равным
номеру сработавшего датчика.
Когда регистр модуляции обнулится, программа выключит несущую и уста-
новит флаг выключения несущей по срабатыванию датчика. Далее программа
ожидает выключения флага несущей по переполнению таймера. Прерывание
по переполнению таймера происходит либо из подпрограммы ожидания вы-
ключения флага несущей, либо, если датчик не сработал, из подпрограммы
опроса датчиков.
При кварцевом резонаторе на частоту 32768 Гц, коэффициенте деления
предделителя, равном 32, и коэффициенте деления таймера, равном 256, пре-
рывание по переполнению таймера будет происходить каждую секунду. После
сохранения регистров проверяется флаг включения несущей. Если несущая
была включена, то проверяется флаг выключения несущей по срабатыванию
датчиков. Если несущая выключена, то прерывание завершается восстановле-
нием регистров. Если несущая не выключена по срабатыванию датчиков, фор-
мируется импульс модуляции, выключается несущая и устанавливается флаг
выключения несущей по переполнению таймера. Прерывание завершается.
Через секунду все повторится с включения несущей и формирования импу-
льса модуляции, если не произошло выключение несущей по срабатыванию
датчиков. Если датчики сработали, то импульс модуляции не формируется. Та-
194
Радиоохрана
ВОССТАНОВЛЕНИЕ
РЕГИСТРОВ
Рис. 46. Алгоритм работы программы модулятора для радиоохраны
ким образом, если ни один датчик не разомкнут, каждую секунду будет форми-
роваться импульс модуляции длительностью 2,7 мс. Импульс модуляции будет
сформирован в центре»импульса включения несущей. Длительность импульса
включения несущей равна 8 миллисекундам. Если же какой-либо датчик сра-
ботал, то несущая включится на время формирования количества импульсов
195
Устройства с цифровой индикацией
модуляции, равном номеру датчика. Если охранные датчики не сработали, то
идет постоянный опрос датчиков и сброс флага выключения несущей по сра-
батыванию датчиков.
Принципиальная схема модулятора показана на рис. 47. На выходе RA3 по-
являются импульсы модуляции положительной полярности. На выходе RA4
появляется единичный потенциал включения несущей. Все остальные входы
микроконтроллера задействованы охранными датчиками. Охранное положение
датчиков нормально замкнутое. Программно ко всем входам порта «В» под-
ключены подтягивающие резисторы, поэтому при размыкании датчиков про-
грамма обнаружит единичный потенциал на разомкнутом датчике. Входы пор-
та «А» программно не подтягиваются к плюсовому напряжению питания, поэ-
тому установлены резисторы Rl—R3. При подключении вывода RA4 к схеме
передатчика необходимо иметь в виду, что этот выход имеет открытый сток,
поэтому, в зависимости от схемы передатчика, может потребоваться нагрузоч-
ный резистор.
Алгоритм работы программы демодулятора показан на рис. 48. В демодуля-
торе используется два прерывания: по переполнению таймера и по изменению
сигнала на входе порта «ВО». После пуска и инициализации программа выпол-
няет постоянную индикацию. В дежурном режиме регистр индикации нулевой
и все сегменты индикации будут иметь нулевое значение. Для семисегментного
индикатора с общим катодом это равносильно выключению индикатора.
В дежурном режиме радиоохраны с компаратора приемника будут поступать
импульсы на вход RB0 с интервалом в одну секунду. С такой же частотой будет
происходить прерывание по входу RB0. После сохранения значений регистров
Рис. 47. Радиоохрана. Модулятор передатчика
196
Радиоохрана
Рис. 48. Алгоритм работы программы, демодулятора для радиоохраны
Рис. 48.1. Алгоритм работы программы демодулятора для радиоохраны
197
Устройства с цифровой индикацией
определяется, почему произошло прерывание-. Если прерывание произошло не
по переполнению таймера, то проверяется длительность входного импульса.
Если длительность импульса короче, чем половина длительности импульса по-
сылки с передатчика (т. е. 1,34 мс), то такой импульс воспринимается как по-
меха и не подсчитывается счетчиком. Если длительность импульса больше
1,34 мс, то обнуляется таймер, предделитель и счетчик миллисекунд. Если флаг
переполнения включен (было переполнение), то инкрементируется регистр
счета. Далее процессор проверяет значение регистра счета. Если в регистр за-
писано 20 и более импульсов, то регистр обнуляется и включается звуковой
сигнал. Ситуация, когда на счетчик приходит 20 импульсов, принята аварий-
ной. Это возможно при работе радиоохраны в зоне повышенных помех или по-
мех, которые наводятся специально.
Каждые 0,125 секунды может происходить прерывание от переполнения
таймера. За одну секунду между импульсами, поступающими на вход RB0, про-
изойдет 8 прерываний по переполнению таймера. При каждом прерывании бу-
дет инкрементироваться счетчик миллисекунд. Но поскольку коэффициент де-
ления счетчика миллисекунд равен 11, то переполнения счетчика за одну се-
кунду не будет. А каждая новая секунда будет начинаться с обнуления таймера
и счетчика миллисекунд. При значении счетчика, равном 5 (0,6 с), переписы-
вается значение регистра счета в регистр индикации. Это необходимо для того,
чтобы при выходе передатчика из аварийного режима обнулялось предыдущее
значение регистра счета. Далее проверяется значение регистра индикации, что-
бы оно не превышало число 12. Если значение регистра индикации равно или
больше 12, то регистр обнуляется. Последующая проверка регистра счета на
число 20 является дублирующей аналогичную проверку при инкрементирова-
нии регистра счета.
При значении счетчика миллисекунд, равном 7 (0,88 с), выключается звуко-
вой сигнал, если он был включен, и сбрасывается флаг переполнения
(рис. 48.1). Это также необходимо для нормального выхода из аварийного ре-
жима, поскольку эти операции (при значении счетчика 5 и 7) выполняются в
интервале времени, равном 1 секунде.
Если после последнего импульса, пришедшего на вход, прошло более 1 се-
кунды, точнее, 1,125, а это соответствует значению счетчика миллисекунд, рав-
ному 9, включится звуковой сигнал и установится флаг переполнения. Включе-
ние флага переполнения разрешает подсчет входных импульсов. А при каждом
входном импульсе сбрасывается счетчик миллисекунд, таймер и предделитель.
Поэтому значение счетчика миллисекунд, равное 11, возможно только тогда,
когда приемник выходит из зоны действия передатчика или если передатчик
прекратил функционирование. В этой ситуации счетчик миллисекунд обнуля-
ется, а звуковой сигнал уже включен.
Таким образом, при поступлении импульсов на вход RB0 каждую секунду,
что свидетельствует о нормальной работе охраны, сигнал тревоги включаться
не будет, а цифровой индикатор не будет светиться. При размыкании любого
из датчиков произойдет переполнение счетчика миллисекунд, включится сиг-
нал, а на индикаторе можно наблюдать номер сработавшего датчика.
Схема демодулятора показана на рис. 49. Вход RB0 подключается к выходу
компаратора приемника. Выход компаратора должен быть с уровнями ТТЛ.
Остальные выводы порта «В» задействованы под выход сегментов индикатора.
198
Радиоохрана
ВХОД С КОМПАРАТОРА
ПРИЕМНИКА.
Рис. 49. Радиоохрана. Демодулятор
К выходу RA4 подключается зуммер НСМ120бх. Кнопка SA1 включает индика-
тор. Резистор R1 необходимо подобрать по приемлемой яркости для свечения
3—4 сегментов. Тогда один сегмент будет светиться ярче, а восемь сегментов
будут светиться слабее.
Для наглядности алгоритма работы программы демодулятора рассмотрим
диаграмму, показанную на рис. 50 (для наглядности на диаграмме масштаб не
соблюдается). В дежурном режиме каждое включение несущей передатчика со-
провождается выдачей импульса модуляции. Импульс модуляции с выхода
компаратора приемника будет поступать на демодулятор через одну секунду.
В аварийном режиме несущая передатчика будет включаться только на время
«t» для формирования импульсов с числом, равным номеру датчика. Учитывая,
что период импульсов равен 5,37 мс, максимальное значение «t» будет прибли-
зительно равно 0,06 мс (11 импульсов). А максимальное значение длительности
паузы между импульсами будет равно 2 — 0,06 = 1,94 с. Счетчик миллисекунд
демодулятора до включения аварийного режима имеет коэффициент деления,
равный 9, поэтому переполнение счетчика будет происходить через 1,125 се-
кунды, что гораздо меньше максимального значения паузы.
При первом переполнении счетчика миллисекунд включается флаг перепол-
нения. После включения флага переполнения начинает заполняться регистр сче-
та. Перезапись в регистр индикации производится спустя 0,6 с после прихода по-
следнего импульса. Таким образом, индикация обновляется каждые две секунды.
Если число импульсов, поступивших с компаратора, больше 11, то результат
не выводится на индикатор как заведомо ложный. Такой вариант возможен при
высоком уровне помех. Но даже и в этом случае включение звукового сигнала
будет свидетельствовать о несанкционированном вторжении на охраняемый
объект. При поступлении более 20 импульсов при любом значении флага пере-
полнения включится тревожный сигнал. Это сделано для того, чтобы невозмож-
но было вывести систему из строя путем подачи непрерывного сигнала помехи.
199
Устройства с цифровой индикацией
Включение
несущей
передатчика.
Дежурные
импульсы
с компаратора.
Включение
несущей
в аварийном
режиме.
Аварийные
импульсы с
номером
датчика.
Флаг
переполнения.
Регистр
счета.
Регистр
индикации
Рис. 50. Диаграммы работы демодулятора
При экспериментировании с подачей сигнала сильной помехи по общему
проводу наблюдался самопроизвольный переход микроконтроллеров в режим
повышенного энергопотребления. Это я объясняю самопроизвольной переус-
тановкой регистра, который определяет установку входа как выход (TRISA,
TRISB). Поэтому последовательно охранным датчиком желательно установить
токоограничивающие резисторы номиналом 200 Ом. Сами микроконтроллеры
необходимо подключать к питанию через резистор номиналом 100 Ом.
Перед подключением радиоохраны к приемнику и передатчику желательно
проверить ее на совместную работу. Для этого необходимо выход несущей и
модуляции с модулятора подать на входы логического элемента микросхемы
К561ЛА7 и, инвертировав сигнал еще одним элементом, подать на вход демо-
дулятора. При проверке индикации число 10 на индикаторе высвечивается
нижней чертой (сегмент d), а число 11 — средней чертой (сегмент g).
Все временные характеристики приведены для случая использования квар-
цевого резонатора на частоту 32768 Гц. Но если у вас и у соседа будут одинако-
вые охранные системы, то трудно будет определить, чья из двух сработала. По-
этому, кроме различных частот несущей, можно установить различные значе-
ния кварцевых резонаторов. Мною успешно опробованы кварцевые
резонаторы на частоты до 4 МГц. Главное условие, чтобы модулятор и демоду-
лятор имели одинаковые значения по номиналу. То есть специального подбора
кварцев не требуется. Однако если во время проверки с нормально замкнуты-
ми датчиками включится звуковой сигнал, то необходимо поменять местами
200
Радиоохрана
кварцевые резонаторы. То есть кварц из демодулятора поставить на плату мо-
дулятора и наоборот. Из двух одинаковых кварцев один окажется с большей
частотой. Соответственно все временные характеристики с другим кварцем бу-
дут в столько же раз больше (меньше), в сколько раз «новый» кварц имеет ме-
ньшую (большую) частоту. Для кварца 4 МГц все параметры уменьшатся в
122 раза (4000000/32768 = 122). Так, например, 1 с превратится в 8 мс. Конеч-
но, на меньших частотах система более помехозащищенная.
Файл модулятора: oxpanapd.asm, файл демодулятора: oxpanapm.asm.
; РАДИООХРАНА НА 11 ДАТЧИКОВ,
; МОДУЛЯТОР ПЕРЕДАТЧИКА.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = OXPANAPD.ASM
; ВЕРСИЯ: 11-04-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
9
#include pl6f84a.inc
__CONFIG 3FF0H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
; RB0=l, RB1=2, RB2=3, RB4=4, RB5=6, RB6=7, RB7=8,
; RA0=9, RAl=10, RA2=11 - ВХОДЫ ДАТЧИКОВ.
; РАЗ-ВЫХОД МОДУЛЯЦИИ, RA4-ВЫХОД ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
; СПЕЦ РЕГИСТРЫ.
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ,АЛУ.
FSR . EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 0 6H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
/ ОПРЕДЕЛЕНИЕ РЕГИСТРОВ. '
SC EQU ОСН /РЕГИСТР ИНДИКАЦИИ.
COU . EQU 0DH ;СЧЕТЧИК'ПАУЗЫ.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 0EH /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 0FH /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
201
Устройства с цифровой индикацией
FSR_TEMP EQU ЮН /ВРЕМЕННЫЙ ДЛЯ FSR.
; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG.
FLAG EQU 11Н ;
; 0-> НЕСУЩАЯ ВЫКЛЮЧЕНА ПО ДАТЧИКУ.
; 1-> НЕСУЩАЯ ВКЛЮЧЕНА ЧЕРЕЗ 1 СЕКУНДУ.
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ВЫВОД ИМПУЛЬСОВ МОДУЛЯЦИИ.
MOVLW .2 /АНАЛОГИЧНО ПЕРВОМУ.
MOVWF SC
GOTO IDZ
MOVLW .3
MOVWF SC
GOTO IDZ •
ID4 MOVLW MOVWF GOTO .4 SC IDZ
ID5 MOVLW .5
MOVWF SC
GOTO IDZ
ID6 MOVLW . 6
MOVWF SC
GOTO IDZ
ID7 MOVLW .7
MOVWF SC
GOTO IDZ
ID8 MOVLW .8
MOVWF SC
GOTO IDZ
ID9
MOVLW .9
202
Радиоохрана
MOVWF GOTO SC ibz
ID10 MOVLW .10
MOVWF SC
GOTO IDZ
ID11 MOVLW .11
MOVWF SC
GOTO IDZ
IDl
MOVLW MOVWF .1 SC /ЗАПИШЕМ НОМЕР ДАТЧИКА /В РЕГИСТР ИНДИКАЦИИ.
IDZ
TSTF SC ; ЕСЛИ
SKPNZ /РЕГИСТР НУЛЕВОЙ,
GOTO IDOI /ИДЕМ НА ЗАВЕРШЕНИЕ.
DECF SC, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BSF PORTA,3 /ВКЛЮЧИМ ВЫХОД.
CALL ID21 /ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ
BCF PORTA,3 /ВЫКЛЮЧИМ ВЫХОД.
CALL ID2O /ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ НОЛЯ.
GOTO IDZ /НАЧНЕМ СНАЧАЛА.
IDOI
CLRWDT
BCF PORTA,4 /ВЫКЛЮЧИМ НЕСУЩУЮ.
BSF FLAG,0 /ВКЛЮЧИМ ФЛАГ ВЫКЛЮЧЕНИЯ НЕСУЩЕЙ.
BTFSC FLAG,1 /ЖДЕМ ПОКА ВКЛЮЧИТСЯ ФЛАГ ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
GOTO IDOI /ХОДИМ ПО КРУГУ.
GOTO KEY /ПРОВЕРИМ ДАТЧИКИ.
; 3. ПАУЗА.
______________________________ ।
ID20
MOVLW MOVWF .2 COU /ПАУЗА 2,69 МИЛЛИСЕКУНДЫ /ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA DECF COU, 1 /ВЫЧТЕМ 1.
TSTF COU /ПРОТЕСТИРУЕМ НА НОЛЬ.
SKPZ /ЕСЛИ НЕ РАВНО НУЛЮ,
GOTO PAUSA /ПОВТОРИМ.
ID21 RETURN MOVLW .2 /ПАУЗА 2,69 МИЛЛИСЕКУНДЫ
MOVWF COU . /ОБЩАЯ ДЛИНА-22 ТАКТА.
PAUSA1 DECF COU, 1 /ВЫЧТЕМ 1.
CLRWDT NOP
NOP TSTF COU /ПРОТЕСТИРУЕМ НА НОЛЬ.
203
Устройства с цифровой индикацией
SKPZ /ЕСЛИ НЕ РАВНО НУЛЮ,
GOTO PAUSA1 ;ПОВТОРИМ.
RETURN
; 4. ОПРОС ДАТЧИКОВ.
KEY
CLRWDT
BTFSS FLAG,1 /ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧЕНА,
GOTO KEY ;ОПРОС ДАТЧИКОВ НЕ ПРОИЗВОДИТСЯ.
BTFSC PORTB,0 /ЕСЛИ ДАТЧИК РАЗОРВАН,
GOTO ID1 /ИДЕМ ФОРМИРОВАТЬ ИМПУЛЬС МОДУЛЯЦИИ
BTFSC PORTB,1
GOTO ID2
BTFSC PORTB,2
GOTO ID3
BTFSC PORTB,3
GOTO ID4
BTFSC PORTB,4
GOTO ID5
BTFSC PORTB,5
GOTO ID6
BTFSC PORTB,6
GOTO ID7
BTFSC PORTB,7
GOTO ID8
BTFSC PORTA,0
GOTO ID9
BTFSC PORTA,1
GOTO ID10 '
BTFSC PORTA,2
GOTO ID11
BCF FLAG,0
GOTO KEY /ЕЩЕ РАЗ ПРОВЕРИМ ДАТЧИКИ.
; 5. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR / FSR,
MOVFW W_TEMP ,-w.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
204
Радиоохрана
II • 1 II 1 II 1 • ч •<* • ВКЛЮЧЕНИЕ НЕСУЩЕЙ.
/ S1
BTFSC FLAG,1 /ЕСЛИ НЕСУЩАЯ БЫЛА'ВКЛЮЧЕНА,
v GOTO S10 /ТО ИДЕМ ВЫКЛЮЧАТЬ.
BSF PORTA,4 /ВКЛЮЧИМ НЕСУЩУЮ,
BSF FLAG,1 /ПОСТАВИМ ФЛАГ ВКЛЮЧЕНИЯ.
BTFSC FLAG,0 /ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,
RETURN /ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.
CALL ID2O /ПАУЗА, РАВНАЯ НУЛЮ.
BSF PORTA,3 /ВКЛЮЧИМ ВЫХОД.
CALL ID21 /ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ,
BCF PORTA,3 /ВЫКЛЮЧИМ ВЫХОД.
CALL ID2O /ПАУЗА, РАВЙАЯ НУЛЮ.
BCF PORTA,4 /ВЫКЛЮЧИМ НЕСУЩУЮ.
RETURN
S10
BCF FLAG,1 /СБРОСИМ ФЛАГ ВКЛЮЧЕНИЯ НЕСУЩЕЙ.
BTFSC FLAG,0 /ЕСЛИ НЕСУЩАЯ ВЫКЛЮЧАЛАСЬ ПО ДАТЧИКУ,
RETURN /ИМПУЛЬС НЕ ФОРМИРУЕТСЯ.
BSF PORTA,4 /ВКЛЮЧИМ НЕСУЩУЮ,
CALL ID2O /ПАУЗА, РАВНАЯ НУЛЮ.
BSF PORTA,3 /ВКЛЮЧИМ ВЫХОД.'
CALL ID21 /ОТРАБОТАЕМ ПАУЗУ, РАВНУЮ ДЛИТЕЛЬНОСТИ ЕДИНИЦЫ
BCF PORTA,3 /ВЫКЛЮЧИМ ВЫХОД.
CALL ID2O /ПАУЗА, РАВНАЯ НУЛЮ.
BCF PORTA,4 /ВЫКЛЮЧИМ НЕСУЩУЮ.
RETURN
; 7, . ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B’OOOOOIOO’ /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=32 ...100,
MOVWF OPTION_REGZ '8ОН /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ.
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА
MOVWF INTCON
MOVLW B'00000111' ' /RA3,RA4-HA ВЫХОД, RAO-RA2-BXOfl.
MOVWF TRISAA80H
MOVLW B'llllllll’ ' /RB0-RB7-HA ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF FLAG
CLRF PORTA
CLRF COU
GOTO KEY /ИДЕМ НА ОПРОС ДАТЧИКОВ.
END
; РАДИООХРАНА НА 11 ДАТЧИКОВ,
205
Устройства с цифровой индикацией
; ДЕШИФРАТОР ПРИЕМНИКА.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
/ saes@mail.ru
; ПРОГРАММА = OXPANAPM.ASM
; ВЕРСИЯ: 12-04-03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
Г
#include pl6f84a.inc
CONFIG 3FF0H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32768 ГЦ.
; RB0 - ВХОД.
; RA4 - ВЫХОД СИГНАЛА ТРЕВОГИ.
; RB1-RB7 - ВЫХОД СЕГМЕНТОВ.
; СПЕЦ РЕГИСТРЫ.
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H /TMR0.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РАБОЧИХ РЕГИСТРОВ.
SCN EQU ОСН /СЧЕТЧИК ИМПУЛЬСОВ.
SMC EQU 0DH ;СЧЕТЧИК МИЛЛИСЕКУНД
SIN EQU 0EH /РЕГИСТР ИНДИКАЦИИ.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 0FH /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 10H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR_TEMP EQU 11H /ВРЕМЕННЫЙ ДЛЯ FSR.
; ОПРЕДЕЛЕНИЕ БИТОВ РЕГИСТРА FLAG.
FLAG EQU 12Н
; 0-> ФЛАГ ВКЛЮЧЕНИЯ ПЕРЕПОЛНЕНИЯ.
; 1-> ФЛАГ ВЫПОЛНЕННОЙ ПЕРЕЗАПИСИ.
206
Радиоохрана
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT BSF 1 STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW В'01000001 ' ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=4 ...1.
MOVWF OPTION REG л80Н /СРАБАТЫВАНИЕ ПО ПЕРЕДНЕМУ ФРОНТУ.
MOVLW B'10110000 ' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ИЗМЕНЕНИИ СИГНАЛА RB0
MOVWF INTCON
MOVLW B'00000000 ' /ВСЕ - НА ВЫХОД.
MOVWF TRISAA80H
MOVLW B'00000001 ' / RB1-RB7-HA ВЫХОД, RBO-ВХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCN
CLRF SMC
CLRF SIN
CLRF PORTB
CLRF FLAG
GOTO IND /ИДЕМ НА ИНДИКАЦИЮ.
/ 3. ТАБЛИЦА СЕГМЕНТОВ' ДЛЯ ОБЩЕГО КАТОДА.
Г ~ SEGDATA / 7, 6, 5, 4, 3, 2, 1, 0.
ADDWF PCL,F / 0, F, Е, D, С, В, A, IN.
Z ОБЩИЙ: КАТОД АНОД
RETLW В'00000000' / В'1111111' СЕГМЕНТЫ ВЫКЛЮЧЕНЫ.
RETLW В'00001100' / В'1111001' 1
RETLW В'10110110' / В'ОЮОЮО' 2
RETLW В'10011110' / В'ОИОООО' 3
RETLW В(11001100' / В'0011001' 4
RETLW В'11011010' / В'ООЮОЮ' 5
RETLW В'11111010' / В'ОООООЮ' 6
RETLW В'00001110' / В'1111000' 7
RETLW В'11111110' / В'0000000' 8
RETLW В'11011110' / В'ООЮООО' 9
RETLW В'ОООЮООО' / В'1110111' 10
RETLW В'ЮОООООО' / В'0111111' 11
; 4. ПП. ИНДИКАЦИИ.
IND
MOVFW SIN /ПЕРЕПИШЕМ ЗНАЧЕНИЕ РАЗРЯДА ИНДИКАЦИИ.
CALL SEGDATA /ОПРЕДЕЛИМ ЗНАЧЕНИЯ СЕГМЕНТОВ.
MOVWF PORTEf /В ВЫХОДНОЙ РЕГИСТР ПОРТА "В" ПЕРЕПИШЕМ ЗНАЧЕНИЯ
СЕГМЕНТОВ.
GOTO IND /ПОВТОРИМ.
207
Устройства с цифровой индикацией
; 5. СЧЕТЧИК ИМПУЛЬСОВ НОМЕРА ДАТЧИКА.
SEC
BTFSS PORTB,0 /ДЛЯ ИСКЛЮЧЕНИЯ ИМПУЛЬСА ПОМЕХИ.
RETURN /ИМПУЛЬС КОРОЧЕ 1,34 МС. ОТСЕКАЕМ.
CLRF SMC /СЧЕТЧИК И ТАЙМЕР СБРАСЫВАЮТСЯ
CLRF TMRO /ПРИ КАЖДОМ ИМПУЛЬСЕ.
BTFSS FLAG,0
RETURN INCF SCN,1 • /ПРИ ЕДИНИЧНОМ ФЛАГЕ СЧИТАЕМ ИМПУЛЬСЫ
MOVLW .20 /ЕСЛИ УЖЕ 20 И БОЛЬШЕ,
SUBWF SCN, 0 • 7
SKPNC
BCF PORTA,4 /ВКЛЮЧИМ СИГНАЛ.
RETURN
; 6. ПЕРЕЗАПИСЬ В РЕГИСТР ИНДИКАЦИИ.
SES
MOVFW SCN /ПЕРЕПИШЕМ ЗНАЧЕНИЯ СЧЕТЧИКА ИМПУЛЬСОВ
MOVWF SIN /В РЕГИСТР ИНДИКАЦИИ.
MOVLW .12 /ЕСЛИ УЖЕ 12 И БОЛЬШЕ,
SUBWF SIN, 0 9
SKPNC
CLRF SIN /ОБНУЛИМ.
MOVLW .20 /ЕСЛИ УЖЕ 20 И БОЛЬШЕ,
SUBWF SCN, 0 9
SKPNC
BCF PORTA,4 /ВКЛЮЧИМ СИГНАЛ.
CLRF SCN /ОБНУЛИМ.
RETURN
; 7. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR / FSR.
MOVWF FSR_TEMP 9
BTFSS INTCON,1
GOTO SOI /ПРИБАВИМ 1 В СЧЕТЧИК.
CALL SEC /СБРОСИМ ТАЙМЕР ИЛИ УВЕЛИЧИМ СЧЕТЧИК.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОСИМ ФЛАГ ПО ПЕРЕПОЛНЕНИЮ ТАЙМЕРА
BCF INTCON,1 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ВХОДУ RB0
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR /FSR,
MOVFW W_TEMP ,-W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
208
Электронный домоуправ
; 8. СЧЕТЧИК МИЛЛИСЕКУНД.
S01 INCF SMC,1 /ЕСЛИ ДЕЛИТЕЛЬ НА 8, ТО БУДЕТ 1 СЕКУНДА. MOVFW SMC .
ADDLW -05Н ;К=5. ЧТОБЫ ОБНУЛИТЬ SKPNZ /СЧЕТЧИК ПОСЛЕ CALL SES /АВАРИЙНОГО РЕЖИМА. MOVFW SMC /ПЕРЕЗАПИСЬ ADDLW -07Н /К=7. ЧТОБЫ РАЗРЕШИТЬ ЗАПИСЬ SKPNZ BCF FLAG,0 /В АВАРИЙНОМ РЕЖИМЕ. SKPNZ /ПОСЛЕ АВАРИЙНОГО РЕЖИМА BSF PORTA,4 /ВЫКЛЮЧИМ СИГНАЛ. MOVFW SMC /ЕСЛИ ДЕЛИТЕЛЬ НА 9, ТО БУДЕТ БОЛЬШЕ 1 СЕКУНДЫ ADDLW -09Н /К=9.. SKPNZ /ПРИ ПЕРЕПОЛНЕНИИ СЧЕТЧИКА BCF PORTA,4 /ВКЛЮЧИМ СИГНАЛ. SKPNZ BSF FLAG,0 /РАЗРЕШИМ СЧЕТ. MOVFW SMC ADDLW -0BH /К=11. SKPNZ CLRF SMC /ОБНУЛИМ СЧЕТЧИК МИЛЛИСЕКУНД. GOTO RECONST
. END
Электронный домоуправ
С проблемой управления домашним хозяйством сталкиваются все, кто по-
кидает дом на неделю, на день или на месяц. Как накормить домашних питом-
цев, полить цветы или включить освещение и телевизор, имитируя присутствие
хозяев? А как заблокировать дверной замок на время отсутствия хозяев? А если
вы хотите проснуться утром от включенного телевизора под запах сваренного
кофе и чтобы через открытые оконные жалюзи брызги солнца взбодрили на
весь рабочий день, как быть тогда? Во всех подобных ситуациях вам поможет
электронный домоуправ. Домоуправ — это домашний управляющий автомат.
Автомат может управлять 8 сетевыми объектами в любое время суток. Все
управляемые объекты могут включаться/выключаться 32 энергонезависимыми
установками времени с дискретностью 1 минута.
32 установки можно сделать для управления одним объектом или по 4 уста-
новки на все 8 объектов (дважды включить и выключить каждый объект). То
есть число установок неизменно, а число устанавливаемы^ выходов зависит от
потребителя.
Управляющий автомат состоит из трех блоков, которые конструктивно сое-
диняются между собой разъемами. Блок управления автомата запрограммиро-
ван на микроконтроллере PIC16F84A. Блок индикации состоит из двух дешиф-
209
Устройства с цифровой индикацией
раторов: дешифратора из двоичного в семисегментный код и дешифратора из
двоичного в позиционный код. Индикатором может служить любая линейка
светодиодов с общим катодом. Силовой блок выполнен на симисторах ТС 106,
которые включаются оптронами серии АОУ160. Конструкция автомата, сде-
ланная на разъемах, позволяет устанавливать имеющиеся в наличии комплек-
тующие (с переделкой плат) для силового блока и блока индикации.
Алгоритм работы программы домашнего управляющего автомата показан на
рис. 51. После пуска и инициализации регистров программы проверяется флаг
включения индикации. Если индикация включена, проверяется состояние кно-
Рис. 51. Алгоритм работы программы управляющего автомата
210
Электронный домоуправ
пок. Если две кнопки не нажаты одновременно, выполняется поразрядная ин-
дикация. После каждого отработанного разряда индикации ожидается выпол-
нение прерывания. Поскольку прерывание происходит через 4 мс, то индика-
ция каждого разряда длится 4 мс. После выполнения прерывания индикация
загружается значением следующего разряда и выполняется его индикация. По-
дробнее алгоритм работы программы аналогичной индикации рассмотрен
в [10]. Через каждые две секунды проверяется состояние кнопок установки.
Если нажаты одновременно две кнопки, программа выходит из режима ин-
дикации и переходит в режим установки выходов. При этом обнуляется счет-
чик адреса и выбирается значение, записанное по этому адресу. В восьмираз-
рядном регистре Flash-памяти младшие 4 бита занимают единицы разряда ча-
сов (минут), а старшие 4 бита занимают десятки. Но в десятках часов
значащими будут только два бита, поскольку максимальное число десятков ча-
сов равно 2 (Ю2). А в десятках минут значащими будут 3 бита, при максималь-
ном числе десятков минут, равном 5 (IOI2). Свободные биты заполняются раз-
рядами номера выхода установок. Максимальное число, которое можно запи-
сать в 3 разрядах, равно 8. Именно этим ограничено число устанавливаемых
выходов. Младший бит номера установки записывается в 7 бит регистра
Flash-памяти минут. Минуты записываются в память с нулевого по 31 адрес, а
часы занимают Flash-память с 31 по 63 адрес. Первый и второй биты номера
выхода установки записываются в 6 и 7 биты памяти часов. Поэтому значение,
считанное из памяти, нуждается в двойной расшифровке. Первая расшифровка
выполняется по выделению единиц и десятков, а вторая расшифровка выделя-
ет и объединяет биты номера выхода установки.
После расшифровки значения часов и минут сравниваются на ноль. Если
они равны нулю, а нулевые значения не сравниваются, проверяется значение
счетчика адреса. Если значение счетчика адреса равно 31, то он обнуляется и
цикл выборки/сравнения повторяется. Если значение счетчика адреса не равно
31, то счетчик инкрементируется и выборка продолжается.
Если считанные значения часов и минут не равны нулю, то выполняется
сравнение выбранных значений с реальным временем. Если они равны, уста-
навливается флаг равенства и по номеру выбранной установки (считанной из
памяти вместе с часами и минутами) изменяется значение выхода на противо-
положное. Например, если на 7 выходе был логический ноль, то при совпаде-
нии установки на выходе станет логическая единица. И наоборот. После вы-
полнения установки выхода включается флаг выполненной установки и до тех
пор, пока флаг равен единице, сравнение не производится. Флаг установки
сбросится через одну минуту в счетчике минут. Поэтому нельзя делать одно-
временную установку нескольких выходов. Если такая установка в память про-
изведена, то сработает та из них, которая записана в младшем адресе. Минима-
льная разница между установками составляет одну минуту.
Каждые 2 секунды производится опрос кнопок на изменение режима работы.
Во время инициализации включается предделитель с коэффициентом деле-
ния, равным 16. Коэффициент деления таймера равен 256. Имея кварц на
4,096 МГц, прерывание по переполнению таймера будет каждые 4 мс. Значе-
ние 4 мс выбрано для” организации индикации одного разряда. Прерывание ре-
жима индикации выполняется после индикации каждого разряда, а прерыва-
ние режима установки выходов возможно из любой точки программы. Поэтому
211
Устройства с цифровой индикацией
возврат из прерывания, после восстановления сохраненных значений, в режим
индикации выполняется без разрешения прерывания (командой RETURN), а в
режим установки выходов — с разрешением прерывания (командой RETFIE).
Для дополнения до 1 секунды служит делитель на 250. Счетчики секунд,
минут и часов инкрементируются последовательно, как и в любой программе
часов. При увеличении счетчика минут сбрасывается флаг выполненной уста-
новки, если он был равен единице.
При проверке состояния кнопок в режиме индикации производится выбор
разряда установки и увеличение индицируемых значений, а также установка и
выбор номера выхода, адреса записи и запись в память по выбранному адресу.
На рис. 51 алгоритм работы программы проверки кнопок не показан, посколь-
ку ранее неоднократно рассматривался автором.
Принципиальная схема блока управления автомата показана на рис. 52.
В режиме установки выходов все выводы порта «В» настроены на выход. На-
стройка порта «А» в обоих режимах одинакова. В режиме индикации выходы
RBO—RB3 используются для выдачи двоично-десятичного кода индицируемого
числа. На выходе RB4 устанавливается значение запятой. Выход RB8 использу-
ется как вход для значения состояния кнопки «Запись». На выходы RAO—RA2
выдается двоично-десятичный код для коммутации катодов индикатора. Выхо-
ды RA3, RA4 используются как входы для кнопок «Разряд» и «Установка».
Резервное питание на GB1 развязано от питания блока индикации и сило-
вого блока диодами VD1—VD3. Поэтому микросхему DA1 можно взять с лю-
бой буквой, т. к. избыток напряжения погасится падением напряжения на дио-
дах до уровня рабочего напряжения микроконтроллера. Кратковременное про-
падание напряжения питания не повлияет на установки выходов. Хуже, если
напряжение выключено на время, за которое установка должна была включи-
XS1
ХР2
Рис. 52. Управляющий автомат. Блок управления
212
Электронный домоуправ
HG1
vpi DD1
КР514ВД1
АЛС318А
Рис. 53. Блок индикации управляющего автомата
ться и выключится. В таком случае срабатывание управляемого устройства не
будет выполнено. Для подключения к блоку управления блока индикации и
силового блока используются разъемы типа МРН 14-1.
Принципиальная схема блока индикации показана на рис. 53. Дешифратор
DD 1 преобразует двоичный код числа в его семисегментный эквивалент. Де-
шифратор DD2 преобразует двоичный код в позиционный для динамической
коммутации катодов индикатора. Яркость свечения индикатора можно устано-
вить подбором номиналов резисторов Rl—R7. Вместо индикатора АЛС318А
подойдет линейка светодиодов АЛС314А. Вместо дешифратора КР514ИД1
можно применить дешифратор типа К176ИД2 с небольшим изменением ри-
сунка печатной платы. При такой замене на вход 1 дешифратора необходимо
подать логическую единицу, а на входы 6 и 7 необходимо подать логический
ноль. На питание микросхемы надо подать напряжение 9 вольт от платы блока
управления через свободный вывод разъема. Резисторы Rl—R7 из схемы уби-
раются. После такой замены ярче будут светиться светодиоды типа АЛС314А.
У каждого радиолюбителя существует «своя» любимая схема включения се-
тевых устройств. Для примера на рис. 54 показана схема включения нагрузки
симистором ТС 106, который управляется оптроном АОУ160А. Схема показана
только для первого выхода, а для остальных выходов она идентична. Симисто-
ры необходимо снабдить радиаторами, размеры которых зависят от мощности
нагрузки.
Печатные платы для всех блоков и расположение элементов на них показа-
но на рис. 55—60. Кнопки управления находятся на плате блока управления.
213
Устройства с цифровой индикацией
Рис. 54. Силовой блок управляющего автомата
Рис. 55. Блок управления автомата. Печатная плата
Рис. 56. Блок управления автомата. Печатная плата и расположение элементов
(сторона установки деталей)
214
Электронный домоуправ
Рис. 57. Блок индикации управляющего
автомата. Печатная плата
Рис. 58. Блок индикации. Печатная плата
и расположение элементов
(сторона установки деталей)
Линейка светодиодов АЛС318А припаивается непосредственно к плате блока
индикации так, чтобы кнопки и индикатор были направлены в одну сторону.
Назначение кнопок управления
Кнопка «Разряд» перемещает запятую по разрядам для выбора разряда уста-
новки.
Кнопка «Установка» прибавляет единицу в выбранный разряд.
Кнопка «Запись» производит запись в память установленных значений по
выбранному адресу и для выбранного номера выхода, а также обнуление минут
и секунд часов.
Одновременное нажатие кнопок «Разряд» и «Установка» изменяет режим
работы автомата с периодом 2 секунды с режима индикации на режим установ-
ки выходов (рабочий режим).
Работа с управляющим автоматом „
Перед выполнением установки необходимо отключить силовой блок от
блока управления и подключить к нему блок индикации. После подачи напря-
жения питания на блок управления на любом из разрядов индикатора высве-
тится ноль, а остальные разряды будут погашены. Включается рабочий режим.
Для перехода в режим индикации необходимо кратковременно нажать , одно-
временно две кнопки: «Разряд» и «Установка». Высветятся нули во всех разря-
дах, а в нулевом разряде будет 9 и запятая. Автомат перейдет в режим индика-
ции. Если кнопки продолжать удерживать, то режимы будут изменяться с пе-
риодом две секунды.
При 9 в нулевом разряде производится установка часов, а при 8 — обнуле-
ние минут и секунд. Обнуление происходит корректно при нажатии кнопки
«Запись» в пределах плюс/минус минута от часа. Выбрав необходимый разряд,
215
Устройства с цифровой индикацией
Рис. 59. Силовой блок управляющего автомата. Печатная плата
Рис. 60. Силовой блок. Расположение элементов на плате
нажатием кнопки «Разряд» производят установку значения времени кнопкой
«Установка». Перемещение запятой и установка производятся с периодом, рав-
ным двум секундам. Минуты устанавливаются во втором и третьем разрядах, а
часы — в четвертом и пятом разрядах индикатора. При выборе разряда уста-
новки запятая движется от младшего к старшему разряду. Прохождение запя-
той первого разряда необходимо выполнять, не отрывая пальца от кнопки.
Многократное прохождение запятой от пятого к нулевому разряду при уста-
216
Электронный домоуправ
новке часов не изменяет показаний индикатора. При установке часов (8 или 9
в нулевом разряде) запятая не мигает.
После установки времени перемещают запятую в нулевой разряд и устанав-
ливают необходимый для коммутации номер вывода от 0 до 7. Если будет задей-
ствовано много выходов, то желательно перед выполнением установки соста-
вить на бумаге таблицу, в которой будут указаны: номер вывода (номер выхода
от номера вывода отличается на единицу), время включения и выключения и
номер адреса записи. Эта таблица окажется полезной при дальнейших переуста-
новках. Дело в том, что номер вывода установки можно наблюдать при записи
по известному адресу, но при считывании значения из памяти, изменениии ад-
реса номер вывода на индикатор не выводится. Высвечивается только номер
вывода якобы новой установки. Таблицу необходимо составлять не по возраста-
нию времени (от 00 часов до 24 часов), а по возрастанию номеров выводов. При
выборке данных сравнение производится по всему массиву памяти и не зависит
от очередности по времени. То есть по 31 адресу можно запйсать значение:
00 часов 01 минута.
Очередность номеров выводов удобна при записи в память, уменьшается
количество переходов в нулевой разряд для изменения номера вывода. Кроме
того, легче проследить, чтобы число установок по одному выходу было четным.
Поскольку при инициализации программы все выходы обнуляются, а при пе-
реходе в режим индикации состояния выходов запоминаются и потом восста-
навливаются, то четность установок будет говорить о том, что коммутируемое
устройство будет включено и выключено. Каждое совпадение установки по
времени изменяет состояние выхода на противоположное.
После установки номера вывода запятую перемещают в первый разряд. За-
пятая начнет мигать с периодом две секунды. Когда запятая на индикаторе (од-
ну секунду), в нулевом и первом разрядах высвечивается адрес записи. Когда
запятая исчезает (на одну секунду), в нулевом разряде высвечивается номер
вывода, по которому производится запись, а в первом разряде высвечивается
ноль. Таким образом, при установке и записи в память на индикаторе можно
постоянно контролировать номер вывода и адрес записи.
Кнопкой «Установка» набирают в нулевом и первом разрядах необходимый
адрес от 0 до 31, при этом запятая находится в первом разряде. Пока нажата
кнопка «Установка», нет мигания запятой при любом ее расположении. После
набора адреса переходят к установке времени включения/выключения, переме-
щая запятую по разрядам. Запись по выбранному адресу производится при на-
жатии кнопки «Запись». Запись можно произвести, если запятая не находится
в нулевом или первом разрядах. Если запись произведена, запятая переместит-
ся в первый разряд для выполнения установки следующего адреса. Если по вы-
бранному адресу нет записи, то в разрядах часов и минут высвечиваются нули.
Если по выбранному адресу есть запись, то ее значение высветится на индика-
торе. Этим удобно пользоваться для просмотра выполненных записей по всем
адресам. Нулевые значения записи не отслеживаются.
При перемещении запятой с первого в- нулевой разряд мигание запятой бу-
дет продолжаться до jex пор, пока не. будет изменен номер вывода. Показания
индикатора не изменятся, потому что адрес не изменялся. При переходе в пер-
вый разряд после переустановки номера вывода будет высвечиваться предыду-
щий адрес с записанными по нему значениями времени.
217
Устройства с цифровой индикацией
> Переход в рабочий режим желательно выполнять при запятой в первом раз-
ряде. В этом положении запятой, при неодновременном.нажатии двух кнопок,
невозможно случайно изменить выполненные установки. После перехода в ра-
бочий режим отсоединяется плата блока индикации и подсоединяется плата
силового блока. Автомат готов к работе. Если во время работы вам необходимо
сделать переустановку времени включения выходов, то ее надо делать в то вре-
мя, когда включено минимальное число нагрузок. После переустановки состо-
яние выходов не изменяется, поэтому, чтобы получить желаемый результат,
переустанавливать необходимо выключенные в данный момент выходы.
; УПРАВЛЯЮЩИЙ АВТОМАТ,
; 8 ВЫХОДОВ, 32 УСТАНОВКИ ВКЛЮЧЕНИЯ/ВЫКЛЮЧЕНИЯ
; ПЕРИФЕРИИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = UPRAT.ASM
; ВЕРСИЯ: 08-04-03'.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
f ♦INCLUDE ; P16F84A.INC -
CONFIG 1 3FF1H
; ИСПОЛЬЗУЕТСЯ : KBAPL ' ЧАСТОТОЙ 4,096 МГЦ.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 16, ЧТО ВМЕСТЕ
; С TMR0 (256) , ЦИКЛОМ, РАВНЫМ 4 ТАКТAM И ДЕЛИТЕЛЕМ НА 250,
; ДАЕТ НА ВЫХОДЕ 1 СЕКУНДУ (4x16x256x250^4096000).
; СПЕЦ РЕГИСТРЫ.
INDF EQU ООН ; ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01Н ; TMR0.
OPTIONR . EQU 81Н ; OPTION (RP0=l).
PC EQU 02Н ; СЧЕТЧИК КОМАНД.
STATUS EQU ОЗН ; РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04Н ; РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05Н- ; ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06Н ; ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85Н ; НАПРАВЛЕНИЯ- ДАННЫХ ПОРТА А?
TRISB EQU 8 6Н ; НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
EEDATA EQU 08Н ; данных пзу;
EEADR EQU 09Н ; АДРЕСА ПЗУ. *•
EECON1 EQU В8Н ; РЕГИСТРЫ ЧТЕНИЯ-ЗАПИСИ
EECON2 EQU 89Н ; ПЗУ.
INTCON EQU 0BH ; РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ ИНДИКАЦИИ.
SCO EQU 1 ОСН /МЛАДШИЙ РАЗРЯД СЧЕТЧИКА.
*SQ1 EQU 1 0DH /
218
Электронный домоуправ
SC2 EQU OEH
SC3 EQU OFH f
SC4 EQU 10H
SC5 EQU 11H /СТАРШИЙ РАЗРЯД.
COUE EQU 12H /СЧЕТЧИК ЦИКЛОВ СЧИТЫВАНИЯ И ЗАПИСИ
SMC EQU 13H /СЧЕТЧИК 4 МИЛЛИСЕКУНД.
CAT EQU 14H /УСТАНОВКА РАЗРЯДА ЗАПЯТОЙ.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG.
•—газззяз—зззх=звв===з===г===з===============
FLAG EQU 15Н
; 0—> ВКЛЮЧЕНИЯ ИНДИКАЦИИ.
; 1-> НОМЕР ВЫХОДА-АДРЕС.
; 2-> 1 СЕКУНДЫ.
; 3-> ФЛАГ 2 СЕКУНД.
; 4-> ВЫПОЛНЕНА УСТАНОВКА.
; 5-> НЕТ МИГАНИЯ ПРИ УСТАНОВКЕ ЧАСОВ.
; 6-> РАВЕНСТВА УСТАНОВОК И ЧАСОВ.
; 7-> УСТАНОВКА ВЫХОДОВ.
• ааааг!ваааа=ааааааа=ааааааааааааааааааа
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ СЧЕТА. -
• ааааааааааааааааааааааааааааааааааааа
SE.CL EQU 016H ;ЕДИНИЦЫ СЕКУНД.
SECH EQU 017H /ДЕСЯТКИ СЕКУНД.
MINL EQU 018H /ЕДИНИЦЫ МИНУТ.
MINH EQU 019H /ДЕСЯТКИ МИНУТ.
HOUL EQU 020H /ЕДИНИЦЫ ЧАСОВ.
HOUH EQU 021H /ДЕСЯТКИ ЧАСОВ.
• aaaaaaaaa saaaas saaaaaa ааааааааааааа
/ РЕГИСТРЫ :.УСТАНОВКИ, ВРЕМЕННЫЕ.
•aaaaaaaaa ====== saaaaaa ааааааааааааа
vux EQU 023H /РЕГИСТР ИНДИКАЦИИ НОМЕРА ВЫХОДА.
vuxu EQU 024H /УСТАНОВКА НОМЕРА ВЫХОДА.
BUDHEX EQU 025H /ВОСЬМЕРИЧНОЕ ЗНАЧЕНИЕ НОМЕРА УСТАНОВКИ.
ANOD EQU 026H /КАТОД.
SEG ' EQU 027H /СЕГМЕНТЫ, ДЕСЯТИЧНОЕ ЗНАЧ.(2-10 КОД).
PRB УСТАНОВКИ. EQU 028H /РЕГИСТР ХРАНЕНИЯ ЗНАЧЕНИЯ ПОРТА "В" НА ВРЕМЯ
W TEMP EQU 029H /СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS TEMP EQU 02 AH /СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
BUHL EQU 02BH /ЕДИНИЦЫ ЧАСОВ УСТАНОВКИ.
BUHH EQU 02CH /ДЕСЯТКИ ЧАСОВ УСТАНОВКИ.
TEMP EQU 02DH /ВРЕМЕННЫЙ ДЛЯ ЗАПИСИ/СЧИТЫВАНИЯ КОДА ВЫХОДА.
FSRJTEMP EQU 02EH /ВРЕМЕННЫЙ ДЛЯ FSR.
BUMHX EQU 02FH /ДЕСЯТКИ МИНУТ УСТАНОВКИ С КОДОМ ВЫХОДА.
BUHHX EQU ОЗОН /ДЕСЯТКИ ЧАСОВ УСТАНОВКИ С КОДАМИ ВЫХОДА.
BUM EQU 031H /ОБЩИЙ РЕГИСТР МИНУТ УСТАНОВКИ (ЕДИНИЦЫ+ДЕСЯТКИ).
BUH EQU 032H /ОБЩИЙ РЕГИСТР ЧАСОВ УСТАНОВКИ (ЕДИНИЦЫ+ДЕСЯТКИ).
BUML EQU 033H /ЕДИНИЦЫ МИНУТ УСТАНОВКИ.
BUMH EQU 034H /ДЕСЯТКИ МИНУТ УСТАНОВКИ.
ACOU EQU 035H* /СЧЕТЧИК ЦИКЛОВ ЗАПИСИ.
SCOA EQU 036Н /ВРЕМЕННЫЙ ДЛЯ ЕДИНИЦ АДРЕСАчЗАПИСИ.
SC1A EQU 037Н /ВРЕМЕННЫЙ ДЛЯ ДЕСЯТКОВ АДРЕСА ЗАПИСИ.
219
Устройства с цифровой индикацией
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'10000011' /ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ, К=16 ...011,
MOVWF OPTION_REGA80H /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВЫКЛЮЧЕНЫ.
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ = ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА
MOVWF INTCON
MOVLW B'00011000' / RA0-RA2-HA ВЫХОД, RA3,RA4-ВХОД.
MOVWF TRISAA80H
MOVLW B'00000000' ; RB0-RB7-HA ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF PORTB /ОБНУЛИМ ВЫХОДЫ.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF FLAG1
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCI
CLRF SC2
CLRF SC3
CLRF SC4
CLRF SC5
CLRF SECL
CLRF SECH
CLRF MINL
CLRF MINH
CLRF HOUL
CLRF HOUH
CLRF BUML
CLRF BUMH
CLRF BUHL
CLRF BUHH
CLRF SMC
CLRF VUX
CLRF vuxu
CLRF CAT
CLRF SC0A
CLRF SC1A
MOVLW .9
MOVWF SCO
GOTO ZIKL /ИДЕМ НА ИНДИКАЦИЮ.
; 3. ВЫБОР ВКЛЮЧАЕМОГО/ВЫКЛЮЧАЕМОГО РАЗРЯДА.
PCUX
MOVFW VUX ~ ;ПО НОМЕРУ ВЫХОДА
ADDWF РС,1 ;ОПРЕДЕЛЯЕМ НОМЕР ПОРТА ДЛЯ ИЗМЕНЕНИЯ.
220
Электронный домоуправ
GOTO RBO
GOTO RBI
GOTO RB2
GOTO RB3
GOTO RB4
GOTO RB5
GOTO RB6
GOTO RB7
; 4. ЗАПИСЬ ЗНАЧЕНИЙ БУДИЛЬНИКОВ.
ZAPBIN
MOVFW SCI /ПЕРЕКОДИРОВКА ДЕСЯТИЧНОГО ЗНАЧЕНИЯ
ADDWF PC, 1 /ДЕСЯТКОВ НОМЕРА УСТАНОВКИ В ДВОИЧНОЕ.
RETLW B'00000000' /0. НОМЕР УСТАНОВКИ = АДРЕСУ ЗАПИСИ.
RETLW B'00001010' /10
RETLW B'00010100' /20
RETLW B’OOOllllO' /30
RETLW B'00101000' ,,‘40
RETLW B'00110010’ /50
RETLW B'00111100' /60
ZAP IS
MOVLW .4 /ЗАПИСЬ В ПАМЯТЬ ВОЗМОЖНА,
SUBWF SC1,O /ТОЛЬКО ЕСЛИ ПЕРВЫЙ РАЗРЯД МЕНЬШЕ ИЛИ РАВЕН 3
BTFSC STATUS,0 /ЕСЛИ ЗНАЧЕНИЕ ПЕРЕНОСА ИЗМЕНИЛОСЬ,
RETURN MOVLW .2 /ТО ВОЗВРАЩАЕМСЯ. /ЗАПИСЬ В ПАМЯТЬ ВОЗМОЖНА,
SUBWF CAT, 0 /ЕСЛИ ЗАПЯТАЯ НЕ В НУЛЕВОМ
BTFSS STATUS,0 /И НЕ В ПЕРВОМ РАЗРЯДЕ.
RETURN /ИНАЧЕ ВЕРНЕМСЯ.
CALL ZAPBIN /ПЕРЕКОДИРОВКА НОМЕРА УСТАНОВКИ
ADDWF SCO, 0 /ИЗ ДЕСЯТИЧНОГО В ДВОИЧНОЕ числе
MOVWF BUDHEX /ДЛЯ ОПРЕДЕЛЕНИЯ АДРЕСА ЗАПИСИ.
ZAPOO MOVLW .32 /ЕСЛИ ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ
SUBWF BUDHEX,0 /номера Установки
BTFSC STATUS,0 /БОЛЬШЕ ИЛИ РАВНО 32,
GOTO ZABOR /ИДЁМ ОБНУЛЯТЬ.
ZAPVMH
MOVFW BUMH /ПЕРЕПИШЕМ ЗНАЧЕНИЯ ДЕСЯТКОВ МИНУТ
MOVWF BUMHX /И ЧАСОВ В РЕГИСТРЫ,КОТОРЫЕ БУДУТ
MOVFW BUHH /СОДЕРЖАТЬ РАЗРЯДЫ НОМЕРОВ ВЫХОДА
MOVWF BUHHX /УСТАНОВКИ.
ZAPVUX - MOVFW vuxu /ПЕРЕПИШЕМ НОМЕР ВЫХОДА УСТАНОВКИ
MOVWF TEMP /ВО ВРЕМЕННЫЙ РЕГИСТР.
RRF TEMP,1 /СДВИНЕМ ВПРАВО И,
BTFSS STATUS,0 /В ЗАВИСИМОСТИ ОТ ЗНАЧЕНИЯ
BCF BUMHX,3 /СДВИНУТОГО БИТА,
BTFSC STATUS,0 /УСТАНОВИМ СВОБОДНЫЙ БИТ ДЕСЯТКОВ
BSF BUMHX,3 /МИНУТ В 1 ИЛИ В 0.
RRF TEMP,1 /ЕЩЕ РАЗ СДВИНЕМ РЕГИСТР И,
BTFSS STATUS,0 /В ЗАВИСИМОСТИ ОТ ЗНАЧЕНИЯ
BCF BUHHX,2 /СДВИНУТОГО БИТА,
BTFSC STATUS,0 /УСТАНОВИМ СВОБОДНЫЙ БИТ ДЕСЯТКОВ
221
Устройства с цифровой индикацией
BSF RRF BTFSS BUHHX,2 h?EMP, 1 STATUS, ;ЧАСОВ. /АНАЛОГИЧНО ВПИШЕМ 0 /СТАРШИЙ БИТ НОМЕРА ВЫХОДА
BCF BUHHX,3 /В СВОБОДНЫЙ БИТ
BTFSC STATUS, 0 /ДЕСЯТКОВ
BSF BUHHX,3 /ЧАСОВ.
ZAPISO
SWAPF BUMHX,0 /ЗАПИСЬ МЛАДШЕГО И СТАРШЕГО
IORWF BUML,0 /РЕГИСТРОВ МИНУТ
MOVWF BUM /В ОДИН РЕГИСТР ЗАПИСИ МИНУТ.
SWAPF BUHHX,0 /ЗАПИСЬ МЛАДШЕГО И СТАРШЕГО
IORWF BUHL,0 /РЕГИСТРОВ ЧАСОВ
MOVWF BUH /В ОДИН РЕГИСТР ЗАПИСИ ЧАСОВ.
ZAPISM
BTFSC ACOU,0 ;ПРИ ЕДИНИЧНОМ -ЗНАЧЕНИИ СЧЕТЧИКА
GOTO ZAPISH /ИДЕМ НА ЗАПИСЬ ЧАСОВ.
MOVFW BUDHEX /ПЕРЕПИШЕМ НОМЕР АДРЕСА
MOVWF EEADR /В РЕГИСТР АДРЕСА ЗАПИСИ.
MOVFW BUM ;ЗАПИСЫВАЕМ МИНУТЫ
MOVWF EEDATA /В РЕГИСТР ДАННЫХ.
GOTO ZAPISE /ЗАПИШЕМ МИНУТЫ.
ZAPISH
MOVFW BUDHEX /ЗНАЧЕНИЯ ЧАСОВ ЗАПИСЫВАЕМ
ADDLW .32 /НАЧИНАЯ С 32 АДРЕСА.
MOVWF EEADR
MOVFW BUH /ПЕРЕПИШЕМ ЧАСЫ
MOVWF EEDATA /В РЕГИСТР ДАННЫХ.
ZAPISE
BCF INTCON, GIE /ЗАПРЕТ ПРЕРЫВАНИЙ.
BSF STATUS, RP0 /БАНК 1.
BSF EECON1A 8ОН,WREN /РАЗРЕШЕНИЕ ЗАПИСИ.
MOVLW 55H ;ОБЯЗАТЕЛЬНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ
MOVWF EECON2A 80Н //
MOVLW OAAH //
MOVWF EECON2A 80Н //
BSF EECON1A 80H,WR /ПРИ ЗАПИСИ ВО ФЛЕШ ПЗУ.
ZAPIZ
BTFSS EECON1A 80Н,4 /ПОКА НЕ БУДЕТ ЗАПИСИ
GOTO ZAPIZ /ХОДИМ ПО КРУГУ.
BCF INTCON, б /ЗАПРЕТ ПРЕРЫВАНИЯ ПО ЗАПИСИ В ПАМЯТЬ.
BCF EECON1A 80Н,4 /
BCF EECON1A 80Н,WREN ;ЗАПРЕТ ЗАПИСИ.
BCF STATUS, RP0 /БАНК 0.
INCF ACOU,1 /+1 В СЧЕТЧИК ЦИКЛА ЗАПИСИ.
MOVLW .2 /ЗНАЧЕНИЕ СЧЕТЧИКА
SUBWF ACOU,0 /МОЖЕТ БЫТЬ НЕ БОЛЕЕ 1.
BZ EECNOO /ЕСЛИ БОЛЬШЕ, ТО ИДЕМ ОБНУЛЯТЬ.
GOTO ZAPISM /ПО КРУГУ ДО КОНЦА ЗАПИСИ МИНУТ И ЧАСОВ
ZABOR
• CLRF SCO /ОБНУЛИМ НУЛЕВОЙ И
CLRF SCI /ПЕРВЫЙ РЕГИТРЫ УСТАНОВКИ.
CLRF BUDHEX /ОБНУЛИМ АДРЕС УСТАНОВКИ.
RETURN
EECNOO
CLRF ACOU /ПО ОКОНЧАНИИ ЗАПИСИ ОБНУЛЯЕМ СЧЕТЧИК
222
Электронный домоуправ
MOVLW MOVWF RETURN .1 CAT /И УСТАНАВЛИВАЕМ ЗАПЯТУЮ ;B ПЕРВЫЙ РАЗРЯД, ИНДИЦИРУЯ ВЫПОЛНЕННУЮ ЗАПИСЬ ;ВОЗВРАТ.
• 8S8SS38S8S SB 88 88 88 88 8S=88 88 88 SB 88 = = SB = = 88 88 88 SB 88 88 = 88 88 CS 88=SB 88 = =
; 5. ПРОВЕРКА НАЖАТЫХ КНОПОК УСТАНОВКИ.
• 8888SB88S SB 888888 = = 88 = = S S SB88 88 88SB 88 = SB = = SB SB S :=s====s===
KEY
BTFSC PORTA,3 /ЕСЛИ НАЖАТА КНОПКА ВЫБОРА РАЗРЯДА,
GOTO KEYC /ПРОВЕРИМ КНОПКУ УСТАНОВКИ.
BTFSC PORTA,4 /ЕСЛИ НАЖАТА КНОПКА УСТАНОВКИ,
GOTO KEYU /ИДЕМ НА УСТАНОВКУ.
KEYP
BTFSS FLAG,0 /ЕСЛИ ФЛАГ 1, ПОЙДЕМ ДАЛЬШЕ,
RETURN /ИНАЧЕ ВЕРНЕМСЯ.
BTFSC PORTB,7 /ЕСЛИ НАЖАТА КНОПКА ЗАПИСИ,
GOTO ZAP IS /ИДЕМ НА ЗАПИСЬ.
RETURN /ИЛИ ВОЗВРАЩАЕМСЯ.
KEYC
BTFSC PORTA,4 /ЕСЛИ КНОПКА УСТАНОВКИ НАЖАТА,
GOTO KEYF /ТО ИДЕМ МЕНЯТЬ ФЛАГ.
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА (ЗАПЯТОЙ) НАЖАТА,
GOTO CATK /ИДЕМ УСТАНАВЛИВАТЬ РАЗРЯД.
RETURN /ИЛИ ВОЗВРАЩАЕМСЯ.
KEYU
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РАЗРЯДА (ЗАПЯТОЙ) НАЖАТА,
GOTO KEYF /ТО ИДЕМ МЕНЯТЬ ФЛАГ.
BTFSC PORTA,4 /ЕСЛИ НАЖАТА КНОПКА УСТАНОВКИ,
GOTO UST /ИДЕМ НА УСТАНОВКУ.
RETURN /ИЛИ ВОЗВРАЩАЕМСЯ.
KEYF
BCF FLAG,3 /СМЕНА ФЛАГА ВОЗМОЖНА ЧЕРЕЗ 2 СЕКУНДЫ.
BTFSC FLAG,0 /СМЕНА ФЛАГА ИНДИКАЦИИ
GOTO KEYFO /НА ПРОТИВОПОЛОЖНЫЙ.
BSF FLAG,0 /УСТАНАВЛИВАЕМ ФЛАГ ИНДИКАЦИИ.
MOVFW PORTB /СОХРАНИМ ЗНАЧЕНИЕ ПОРТА
MOVWF PRB /В РЕГИСТРЕ ХРАНЕНИЯ.
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'10000000' /RB0-RB6-HA ВЫХОД, ВВ7-ВХОД.
MOVWF TRISBA80H /НАПРАВЛЕНИЕ ПОРТА ДЛЯ УСТАНОВКИ.
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
GOTO KEYP /НА ПРОВЕРКУ КНОПКИ ЗАПИСИ.
KEYFO
BCF FLAG,0 /БРОСИМ ФЛАГ ИНДИКАЦИИ.
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
CLRF . TRISBA80H /RB0-RB7-HA ВЫХОД, ВСЕ ВЫХОДЫ УПРАВЛЯЮЩИЕ.
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
MOVFW PRB /ВОССТАНОВИМ СОХРАНЕННОЕ ЗНАЧЕНИЕ
MOVWF PORTB /ПОРТА, БЫВШЕЕ ДО УСТАНОВКИ.
RETURN ;ВОЗВРАЩАЕМСЯ.
; б. ВЫБОР РАЗРЯДА УСТАНОВКИ (ЗАПЯТОЙ).
* s:=====s:s:========s==s==: = ================
CATK
/УСТАНОВКА РАЗРЕШЕНА, ЕСЛИ ПРОШЛА 1 СЕК.
BTFSS FLAG,2
RETURN
223
Устройства с цифровой индикацией
INCF CAT, 1 ;+1 В СЧЕТЧИК ВЫБОРА РАЗРЯДА.
BCF FLAG,2 ;ЧТОБЫ ЖДАТЬ ДО СЛЕДУЮЩЕЙ СЕКУНДЫ
MOVFW CAT ;ЗАПЯТАЯ ДВИГАЕТСЯ
SUBLW .6 /ДО 5 РАЗРЯДА,
BTFSC STATUS,2
CLRF CAT ;ИНАЧЕ ОБНУЛЯЕМ.
MOVLW .2 /ПРОВЕРИМ УСТАНОВКУ ЗАПЯТОЙ.
SUBWF CAT, 0 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ
SKPC /ИЛИ НУЛЕВОМ -РАЗРЯДЕ,
GOTO UST /СМЕНИМ ФЛАГ.
BSF FLAG,5 /ЗАПРЕТИМ МИГАНИЕ ЗАПЯТОЙ.
RETURN
; 1. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
•===========================
ATTU
BTFSC FLAG,1 /ЕСЛИ УСТАНОВЛЕН АДРЕС,
GOTO ATUC /ИДЕМ НА ИНДИКАЦИЮ.
MOVLW .9 /ЕСЛИ 9 В НУЛЕВОМ РАЗРЯДЕ,
SUBWF SCO, 0
BZ HATU /ИДЕМ НА УСТАНОВКУ ЧАСОВ.
MOVLW .8 /ЕСЛИ 8 В НУЛЕВОМ РАЗРЯДЕ,
к SUBWF SCO, 0
BZ ATUC ATOO /ИДЕМ НА ОБНУЛЕНИЕ МИНУТ И СЕКУНД.
MOVLW .1 /ПРОВЕРИМ УСТАНОВКУ ЗАПЯТОЙ'.
SUBWF SKPNZ CAT, 0 /ЕСЛИ ЗАПЯТАЯ В ПЕРВОМ РАЗРЯДЕ,
GOTO SKPNC BIN /ИДЕМ НА ИНДИКАЦИЮ УСТАНОВКИ ИЗ ПАМЯТИ.
GOTO УСТАНОВКУ. BUST /ЕСЛИ ЗАПЯТАЯ ЗА ПЕРВЫЙ РАЗРЯДОМ, ИДЕМ НА
RETURN
/ 8. ОБНУЛЕНИЕ МИНУТ И СЕКУНД. .
ATOO
CALL HATU /ПРОИНДИЦИРУЕМ ЧАСЫ.
BTFSS RETURN PORTB,7 /ПРОВЕРКА НАЖАТИЯ КНОПКИ ЗАПИСИ. ; НЕТ.
MOVLW .9 /ДА.
SUBWF MINL,0 /ЕСЛИ В МИНУТАХ 9,
BTFSC STATUS, 2 ;НАДО УВЕЛИЧИТЬ
CALL HL /ЗНАЧЕНИЕ ЧАСОВ. • _
CLRF SECL /ОБНУЛЯЕМ ДЛЯ РУЧНОЙ УСТАНОВКИ
CLRF SECH /ПО СИГНАЛАМ ТОЧНОГО
CLRF ' MINL /ВРЕМЕНИ.
CLRF MINH
GOTO HATU /ПРОИНДИЦИРУЕМ НОВОЕ ЗНАЧЕНИЕ.
/ 9. УСТАНОВКА РАЗРЯДОВ ИНДИКАЦИИ. >
•============== UST ========= ______==_==
BTFSC RETURN PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РЕЖИМА НАЖАТА, ;ВОЗВРАЩАЕМСЯ.
224
Электронный домоуправ
BCF FLAG,3 ;СБРОСИМ ФЛАГ 2 СЕКУНД.
MOVFW CAT /ПО ПОЛОЖЕНИЮ ЗАПЯТОЙ
ADDWF PC, 1 ;ОПРЕДЕЛЯЕМ РАЗРЯД УСТАНОВКИ.
GOTO USTO /0
GOTO UST1 /1
GOTO UST2 /2
GOTO . UST3 /3
GOTO UST4 /4
GOTO UST5 ;5
USTO
BSF FLAG,5 /ЗАПРЕЩАЕМ МИГАНИЕ ЗАПЯТОЙ.
BTFSC FLAG,1 /ЕСЛИ БЫЛА ЗАПИСЬ НОМЕРА УСТАНОВКИ,
CALL USTAV /ПЕРЕПИШЕМ НОМЕР УСТАНОВКИ.
BCF FLAG,1 /СБРОСИМ ФЛАГ ПЕРВОГО РАЗРЯДА.
BTFSS PORTA,4 /ЕСЛИ КНОПКА УСТАНОВКИ НЕ НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
INCF SCO, 1 /УВЕЛИЧИМ ЗНАЧЕНИЕ НУЛЕВОГО РАЗРЯДА.
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF SCO, 0
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF SCO /ОБНУЛИМ РАЗРЯД, ЕСЛИ БОЛЬШЕ 9.
MOVLW .8 /ЕСЛИ ЗНАЧЕНИЕ РАЗРЯДА МЕНЬШЕ 8,
SUBWF SC0,0
BNC USTV /ТО ИДЕМ НА ЗАПИСЬ НОМЕРА ВЫХОДА.
GOTO HATU /ЕСЛИ 8 И БОЛЕЕ, ТО ИДЕМ НА УСТАНОВКУ ЧАСОВ.
USTAV
MOVFW VUXU /ПЕРЕПИШЕМ НОМЕР ВЫХОДА ИЗ РЕГИСТРА УСТАНОВКИ
MOVWF SCO /В РЕГИСТР ИНДИКАЦИИ.
CLRF SCI /ПЕРВЫЙ РАЗРЯД ОБНУЛИМ.
RETURN
USTV
MOVFW SCO /ПЕРЕПИШЕМ ЗНАЧЕНИЕ РАЗРЯДА
MOVWF VUXU ,-в регистр' установки номера выхода.
CLRF SCI /ПЕРВЫЙ РАЗРЯД ОБНУЛИМ.
RETURN
UST1
BCF FLAG,5 /РАЗРЕШИМ МИГАНИЕ ЗАПЯТОЙ.
BTFSS FLAG,1 /ЕСЛИ БЫЛА УСТАНОВКА НОМЕРА ВЫХОДА,
CALL USTA /ЗАГРУЗИМ АДРЕС ЗАПИСИ.
BSF FLAG,1 /УСТАНОВИМ ФЛАГ ПЕРВОГО РАЗРЯДА.
BTFSS PORTA,4 /ЕСЛИ'КНОПКА УСТАНОВКИ НЕ НАЖАТА,
RETURN ;ВОЗВРАЩАЕМСЯ.
MOVFW SCI /ЕСЛИ ДЕСЯТКИ
ADDLW -3H /РАВНЫ 3,
BZ UST10 /ПРОВЕРИМ ЕДИНИЦЫ.
MOVFW SCO /ЕСЛИ ЕДИНИЦЫ РАВНЫ 9,
ADDLW -9H
BZ USTO1 /УВЕЛИЧИМ ДЕСЯТКИ.
INCF ' SCO,1 /ИНАЧЕ УВЕЛИЧИМ ЕДИНИЦЫ. !
GOTO USTAlT /СОХРАНИМ УСТАНОВКИ.
UST10
MOVFW SCO /НОМЕР УСТАНОВКИ ДОЛЖЕН БЫТЬ НЕ БОЛЕЕ 31.
в Зак. 2418
225
Устройства с цифровой индикацией
ADDLW -1H /ЕСЛИ ЕДИНИЦЫ =1,
BZ USTOO /ИДЕМ ОБНУЛЯТЬ.
INCF SCO, 1 /ИЛИ ПРИБАВИМ ЕДИНИЦУ.
GOTO USTAL /СОХРАНИМ УСТАНОВКИ.
USTA
MOVFW SCOA /ВОССТАНОВИМ АДРЕС ЗАПИСИ
MOVWF SCO /НУЛЕВОГО И
MOVFW SC1A /ПЕРВОГО РАЗРЯДОВ.
MOVWF SCI
RETURN
USTAL
MOVFW SCO /СОХРАНИМ АДРЕС ЗАПИСИ
MOVWF SCOA /НУЛЕВОГО И
MOVFW SCI /ПЕРВОГО РАЗРЯДОВ. .
MOVWF SC1A
RETURN
USTOO
CLRF SCO /ОБНУЛИМ ЕДИНИЦЫ.
CLRF SCI /ОБНУЛИМ ДЕСЯТКИ.
GOTO USTAL /СОХРАНИМ УСТАНОВКИ.
USTO1
CLRF SCO • /ОБНУЛИМ ЕДИНИЦЫ.
INCF SCI, 1 /УВЕЛИЧИМ ДЕСЯТКИ.
GOTO USTAL /СОХРАНИМ УСТАНОВКИ.
======== —————————— =============================
UST2
INCF SC2,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW •10 9
SUBWF SC2, 0 9
BTFSC STATUS,0 9
CLRF SC2
GOTO UST6 /ПРОИНДИЦИРУЕМ УСТАНОВЛЕННОЕ ЗНАЧЕНИЕ
UST3
INCF SC3,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5.
MOVLW .6 9
SUBWF SC3, 0 9
BTFSC STATUS,0 9 ‘
CLRF SC3
GOTO UST6 /ПРОИНДИЦИРУЕМ УСТАНОВЛЕННОЕ ЗНАЧЕНИЕ
UST4 -
INCF SC4,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
MOVLW .10 9
SUBWF SC4,0 9
BTFSC STATUS,0 9
CLRF . SC4
GOTO UST6 /ПРОИНДИЦИРУЕМ УСТАНОВЛЕННОЕ- ЗНАЧЕНИЕ
UST5
INCF SC5,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
MOVLW .3 9
SUBWF SC5, 0 9
BTFSC STATUS,0
CLRF SC5
GOTO UST6 /ПРОИНДИЦИРУЕМ УСТАНОВЛЕННОЕ ЗНАЧЕНИЕ
226
Электронный домоуправ
• ============ ; 10. ЗАПИСЬ S===================== УСТАНОВОК В РЕГИСТРЫ.
• ====== = ===== ======================
UST6
BTFSC FLAG,1 /ЕСЛИ БЫЛ НОМЕР УСТАНОВКИ,
GOTO BUST /ЗАПИШЕМ В РЕГИСТРЫ УСТАНОВКИ.
BTFSS FLAG,1 /ЕСЛИ ЗАПЯТАЯ В НУЛЕВОМ РАЗРЯДЕ
GOTO HUST /ЗАПИШЕМ В РЕГИСТРЫ ЧАСОВ.
RETURN
* ==================================================
; 11. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ.
BUST
HUST
BCF FLAG,5 /РАЗРЕШИМ МИГАНИЕ ЗАПЯТОЙ.
MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ РЕГИСТРОВ ИНДИКАЦИИ
MOVWF BUML /В РЕГИСТРЫ УСТАНОВОК.
MOVFW SC3 9
MOVWF BUMH 9
MOVFW SC4 !
MOVWF BUHL 9
MOVFW SC5 9
MOVWF BUHH 9
RETURN
MOVFW SC2 /ПЕРЕПИШЕМ ЗНАЧЕНИЯ РЕГИСТРОВ ИНДИКАЦИИ
MOVWF MINL /В РЕГИСТРЫ ЧАСОВ.
MOVFW SC3 ' /
MOVWF MINH 9
MOVFW SC4 9
MOVWF HOUL 9
MOVFW SC5 9
MOVWF HOUH 9.
RETURN
; 12. СМЕНА ИНДИКАЦИИ ПРИ СМЕНЕ РЕЖИМА.
• ====================== ================ =
HATU
BTFSC PORTA,3 /ЕСЛИ КНОПКА ВЫБОРА РЕЖИМА НАЖАТА
RETURN /ВОЗВРАЩАЕМСЯ.
BSF FLAG,5 /НЕТ МИГАНИЯ 0 И 1 РАЗРЯДОВ.
MOVFW MINL /ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ
MOVWF SC2 /ЗНАЧЕНИЯ РЕГИСТРОВ ЧАСОВ.
MOVFW MINH 9 ,
MOVWF SC3 9
MOVFW HOUL 9
’ MOVWF SC4 9
MOVFW HOUH 9
MOVWF SC5 9
RETURN 9
BIN
BSF FLAG,1
CALL USTA* /ЗАПОЛНИМ НУЛЕВОЙ И 1 РАЗРЯДЫ.
BCF FLAG,5 /РАЗРЕШАЕМ МИГАНИЕ ЗАПЯТОЙ. /
CALL ZAPBIN /ПЕРЕКОДИРОВКА НОМЕРА УСТАНОВКИ
227
Устройства с цифровой индикацией
ADDWF SC0,0 /ИЗ ДЕСЯТИЧНОГО В ДВОИЧНОЕ
MOVWF BUDHEX /ЧИСЛО.
MOVWF COUE /ПЕРЕПИШЕМ ЕГО В СЧЕТЧИК АДРЕСА.
BlNHB
CALL AKTETE /СЧИТАЕМ ЗНАЧЕНИЕ УСТАНОВКИ
MOVFW EEDATA /ПО ЭТОМУ АДРЕСУ.
MOVWF BUML „ / РАСШИФРУЕМ ЗНАЧЕНИЕ ПО МЛАДШЕМУ
MOVLW B'OOOOllll'z
ANDWF BUML,1
MOVFW EEDATA
MOVWF BUMHX /И СТАРШЕМУ РЕГИСТРАМ МИНУТ.
MOVWF TEMP /МЛАДШИЙ БИТ НОМЕРА ВЫХОДА ЗАПИСАН В СТАРШЕМ БИТЕ
RLF TEMP, 1 /СЧИТАННОГО РЕГИСТРА МИНУТ.'
BTFSS STATUS,0 /ВЫДЕЛИМ' И ПЕРЕПИШЕМ МЛАДШИЙ БИТ
BCF VUX,0 /В НУЛЕВОЙ БИТ РЕГИСТРА ВЫХОДА
BTFSC STATUS,0 /В ЗАВИСИМОСТИ ОТ'ЕГО ЗНАЧЕНИЯ
BSF VUX,0 /ЛИБО 0, ЛИБО 1.
SWAPF BUMHX,1 /ВЫДЕЛИМ 3 ЗНАЧАЩИХ РАЗРЯДА
MOVLW В'00000111'/ДЕСЯТКОВ МИНУТ
ANDWF BUMHX,0 /В РЕГИСТР УСТАНОВКИ
MOVWF BUMH /ДЕСЯТКОВ МИНУТ.
MOVLW .32 /МИНУТЫ ЗАПИСАНЫ ДО 31 АДРЕСА,
ADDWF COUE,1 /ЧАСЫ С 32 АДРЕСА.
CAJjL AKTETE /СЧИТАЕМ ЗНАЧЕНИЕ ЧАСОВ.
MOVFW EEDATA /РАСШИФРУЕМ ЗНАЧЕНИЕ ПО-МЛАДШЕМУ
MOVWF BUHL
MOVLW B'OOOOllll'z
ANDWF BUHL,1
MOVFW EEDATA
MOVWF BUHHX /И СТАРШЕМУ РЕГИСТРАМ ЧАСОВ.
MOVWF TEMP /ВЫДЕЛИМ ВТОРОЙ БИТ
RLF TEMP,1 /НОМЕРА ВЫХОДА
BTFSS STATUS,0 /И ПЕРЕПИШЕМ ЕГО ЗНАЧЕНИЕ
BCF VUX,2 >В РЕГИСТР ВЫХОДА.
BTFSC STATUS,0 ;
BSF VUX,2
RLF TEMP,1 /ВЫДЕЛИМ ПЕРВЫЙ БИТ
BTFSS STATUS,0 /НОМЕРА ВЫХОДА
BCF VUX,1 /И ПЕРЕПИШЕМ ЕГО ЗНАЧЕНИЕ
BTFSC STATUS,0 /В РЕГИСТР ВЫХОДА.
BSF VUX,1
SWAPF BUHHX,1 /ВЫДЕЛИМ ДВА ЗНАЧАЩИХ РАЗРЯДА
MOVLW В'00000011'/ДЕСЯТКОВ ЧАСОВ
ANDWF BUHHX,0 /И ПЕРЕПИШЕМ ИХ
MOVWF BUHH /В РЕГИСТР ЧАСОВ УСТАНОВОК.
MOVLW .32 /ПРИВЕДЕМ ЗНАЧЕНИЕ /
SUBWF COUE,1 /СЧЕТЧИКА АДРЕСА В ДИАПАЗОН МИНУТ.
BTFSS FLAG,0 /ЕСЛИ ВКЛЮЧЕН ФЛАГ ИНДИКАЦИИ,
RETURN % . /ПРОПУСТИМ ВОЗВРАТ.
MOVFW BUML /ПЕРЕПИШЕМ В РЕГИСТРЫ ИНДИКАЦИИ
228
Электронный домоуправ
MOVWF SC2 /СЧИТАННЫЕ ЗНАЧЕНИЯ УСТАНОВОК
MOVFW BUMH /ПЕРЕПИШЕМ ЗНАЧЕНИЯ МИНУТ
MOVWF SC3 /В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFW BUHL /ПЕРЕПИШЕМ ЗНАЧЕНИЯ ЧАСОВ
MOVWF SC4 /В РЕГИСТРЫ ИНДИКАЦИИ.
MOVFW BUHH f
MOVWF SC5 t
RETURN
; 13. ПП. ИНДИКАЦИИ С ВЫХОДОМ В ДВОИЧНО-ДЕСЯТИЧНОМ КОДЕ.
ZIKL
ZIKL BTFSC FLAG,3 ./РАЗ В ДВЕ СЕКУНДЫ
CALL BCF . KEY FLAG,7 /ПРОВЕРИМ КНОПКИ. /СБРОСИМ ФЛАГ УСТАНОВКИ.
CLRF ANOD /ОБНУЛЯЕМ РЕГИСТР АНОДА.
ZSO
BSF BTFSC GOTO BTFSC INTCON,7 FLAG,5 ZSOO FLAG,3 /РАЗРЕШАЕМ ПРЕРЫВАНИЯ. /ЕСЛИ ИНДИКАЦИЯ БЕЗ ЗАПЯТОЙ, /ИНДИЦИРУЕМ НУЛЕВОЙ РАЗРЯД. /ИЛИ, ЕСЛИ ПРОШЛО 2 СЕКУНДЫ,
MOVFW BTFSS VUXU FLAG,3 /НОМЕР УСТАНАВЛИВАЕМОГО ВЫХОДА. /ЕСЛИ ПРОШЛО 2 СЕКУНДЫ,
ZSOD
MOVFW CALL SCO INDZIKL /ПЕРЕПИШЕМ ЗНАЧЕНИЕ НУЛЕВОГО РАЗРЯДА ИНДИКАЦИИ /И ПОЙДЕМ НА ИНДИКАЦИЮ.
ZSO1
BTFSS INTCON,7 /ЖДЕМ ПРЕРЫВАНИЯ.
GOTO ZS1 /ПОСЛЕ ОТРАБОТКИ ПРЕРЫВАНИЯ /РАЗРЯДУ. ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ
ZS1 GOTO ZS01 /ХОДИМ ПО КРУГУ.
BSF BTFSC GOTO BTFSS INTCON,7 FLAG,5 ZS10 FLAG,3 / РАЗРЕШАЕМ .ПРЕРЫВАНИЯ. /ЕСЛИ ИНДИКАЦИЯ БЕЗ ЗАПЯТОЙ, /ОБНУЛЯЕМ. /ЕСЛИ ПРОШЛО 2 СЕКУНДЫ,
MOVFW BTFSC SCI FLAG,3 /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ПЕРВОГО /ЕСЛИ ПРОШЛО 2 СЕКУНДЫ; РАЗРЯДА ИНДИКАЦИИ,
ZS10
ZS12 MOVLW CALL BTFSS .0 INDZIKL INTCON,7 /ПЕРВЫЙ РАЗРЯД РАВЕН НУЛЮ. /ПОЙДЕМ НА ИНДИКАЦИЮ. /ЖДЕМ ПРЕРЫВАНИЯ.
GOTO ZS2 /ПОСЛЕ ОТРАБОТКИ ПРЕРЫВАНИЯ /РАЗРЯДУ. ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ
ZS2 GOTO ZS12 /ХОДИМ ПО КРУГУ.
BSF INTCON,7 /РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
ZS23 MOVFW CALL BTFSS SC2 INDZIKL INTCON,7 /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВТОРОГО /И ПОЙДЕМ НА ИНДИКАЦИЮ. /ЖДЕМ ПРЕРЫВАНИЯ. РАЗРЯДА ИНДИКАЦИИ
GOTO ZS3 /ПОСЛЕ ОТРАБОТКИ ПРЕРЫВАНИЯ /РАЗРЯДУ. ПЕРЕХОДИМ К СЛЕДУЮЩЕМУ
229
Устройства с цифровой индикацией
GOTO ZS23 ;ХОДИМ ПО КРУГУ.
ZS3
BSF INTCON,7 /ВСЕ ОСТАЛЬНЫЕ РАЗРЯДЫ ИНДИЦИРУЕМ АНАЛОГИЧНО ;ВТОРОМУ.
MOVFW SC3 /
CALL INDZIKL
CALL ATTU ;ПРОИНДИЦИРУЕМ ЗНАЧЕНИЯ РЕЖИМОВ.
ZS34 BTFSS INTCON,7 9
/ GOTO ZS4 9
GOTO ZS34 9
ZS4 BSF INTCON,7 9
MOVFW SC4 9
CALL INDZIKL 9
ZS45 DTFSS INTCON,7 9
GOTO ZS5 9
GOTO ZS45 9
ZS5 BSF INTCON,7 9
MOVFW SC5 9
CALL INDZIKL 9
ZS50 BTFSS INTCON,7 9
GOTO ZIKL 9
GOTO ZS50 9
INDZIKL BTFSS FLAG,0 /ЕСЛИ ФЛАГ УСТАНОВКИ НУЛЕВОЙ,
GOTO INDVUX /ИДЕМ УСТАНАВЛИВАТЬ ВЫХОДЫ.
MOVWF SEG ;ЗАПИСЬ ЗНАЧЕНИЯ РАЗРЯДА ВО ВСПОМОГАТЕЛЬНЫЙ РЕГИСТР
BTFSC FLAG,5 ;ЕСЛИ ФЛАГ ВКЛЮЧЕН,
GOTO INDZ /ИДЕМ ИНДИЦИРОВАТЬ ЗАПЯТУЮ.
BTFSC FLAG,3 /ЕСЛИ ПРОШЛО 2 СЕКУНДЫ,
GOTO INDZO ;ИНДИЦИРУЕМ БЕЗ ЗАПЯТОЙ
INDZ MOVFW ANOD /ЗАГРУЖАЕМ НОМЕР КАТОДА.
SUBWF CAT, 0 /СРАВНИВАЕМ С ПОЛОЖЕНИЕМ ЗАПЯТОЙ.
SKPNZ /ЕСЛИ ОНИ СОВПАДАЮТ,
BSF SEG, 4 /ТО УСТАНОВИМ РАЗРЯД ЗАПЯТОЙ.
SKPZ 9
INDZO BCF SEG, 4 /ИНАЧЕ СБРОСИМ ЗАПЯТУЮ.
MOVFW SEG /ПЕРЕПИШЕМ СФОРМИРОВАННОЕ ЗНАЧЕНИЕ
MOVWF PORTB /В ВЫХОДНОЙ РЕГИСТР ПОРТА В.
MOVFW ANOD /ЗАГРУЖАЕМ НОМЕР КАТОДА
MOVWF PORTA /В ПОРТ А.
INCF ANOD,1 ;+1 В РЕГИСТР КАТОДА.
RETURN /ПЕРЕЙДЕМ К СЛЕДУЮЩЕМУ РАЗРЯДУ.
/ 14. УСТАНОВКА ВЫХОДОВ.
INDVUX
BSF INTCON,7 /РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
230
Электронный домоуправ
BTFSC FLAG,3 /РАЗ В ДВЕ СЕКУНДЫ
CALL KEY ;ПРОВЕРИМ КНОПКИ.
BSF FLAG,7 /ВКЛЮЧИМ ФЛАГ УСТАНОВКИ выходов.
BTFSC FLAG,0 /ЕСЛИ ВКЛЮЧЕН ФЛАГ ИНДИКАЦИИ,
GOTO ZIKL /ПОЙДЕМ НА ИНДИКАЦИЮ.
CALL BUDC /ПРОВЕРИМ СОВПАДЕНИЕ УСТАНОВОК И ЧАСОВ
BTFSS FLAG, 6' ; /ЕСЛИ СРАВНЕНИЕ ВЫПОЛНЕНО,
GOTO ' INDVUX /ЖДЕМ СБРОСА ФЛАГА.
BTFSC FLAG,4 /ЕСЛИ УСТАНОВКА УЖЕ ВЫПОЛНЕНА,
GOTO INDVUX /ЖДЕМ СЛЕДУЮЩЕЙ УСТАНОВКИ.
BSF FLAG,4 /ВКЛЮЧИМ ФЛАГ ВЫПОЛНЕННОЙ УСТАНОВКИ.
GOTO PCUX /УЗНАЕМ, "КАКОЙ ВЫХОД УСТАНАВЛИВАТЬ.
RBO
BTFSC PORTB,0 /ЕСЛИ НА ВЫХОДЕ БЫЛА- ЛОГ. 1,
GOTO t RBOQ /УСТАНОВИМ ЛОГ. 0.
BSF PORTB,0 /ИНАЧЕ УСТАНОВИМ ЛОГ. 1.
GOTO INDVUX /ИДЕМ ЖДАТЬ СЛЕДУЮЩЕЙ УСТАНОВКИ.
RBOO
BCF PORTB,0 /УСТАНОВИМ ЛОГ. 0.
GOTO INDVUX /ИДЕМ ЖДАТЬ СЛЕДУЮЩЕЙ УСТАНОВКИ.
RBI
BTFSC PORTB,1 /ОСТАЛЬНЫЕ ВЫХОДЫ, ' АНАЛОГИЧНО
GOTO RB10 /НУЛЕВОМУ, ИЗМЕНЯЮТ
BSF PORTB,1 /УРОВЕНЬ НА ПРОТИВОПОЛОЖНЫЙ.
GOTO INDVUX 9
RB10
BCF PORTB,1 9
GOTO INDVUX 9
RB2
BTFSC PORTB,2 9 ч
GOTO RB20 9
BSF PORTB,2 9
GOTO INDVUX 9
RB20
BCF PORTB,2 9
GOTO INDVUX 9
RB3
BTFSC PORTB,3 9
GOTO RB30 9
BSF PORTB,3 9
GOTO INDVUX
RB30
BCF PORTB,3 9
GOTO INDVUX 9 v 1
RB4
BTFSC PORTB,4 9
GOTO RB40 9
BSF PORTB,4 9
GOTO INDVUX 9
RB40
BCF PORTB,4 9
GOTO INDVUX 9
RB5
BTFSC PORTB,5 9
231
Устройства с цифровой индикацией
GOTO RB50
BSF PORTB,5
GOTO INDVUX
RB50
BCF ' PORTB,5
GOTO INDVUX
RB6
BTFSC PORTB,6
GOTO . RB60
BSF PORTB,6
GOTO INDVUX
RB60
BCF PORTB,6
GOTO INDVUX
RB7
. BTFSC PORTB,7
GOTO RB70
BSF PORTB,7
GOTO INDVUX
RB70
BCF PORTB,7
GOTO INDVUX
/ = * ; 15. СРАВНЕНИЕ РЕГИСТРОВ УСТАНОВОК И ЧАСОВ.
— — — — — -
BUDC
BTFSC FLAG,6 ;СРАВНЕНИЕ ВЫПОЛНЕНО?
RETURN /ДА.
BTFSC FLAG,0 /ИДЕТ УСТАНОВКА?
RETURN /ДА.
CLRF COUE ;НАЧНЕМ СРАВНЕНИЕ С НУЛЕВОГО ЗНАЧЕНИЯ СЧЕТЧИКА
/АДРЕСА.
; СРАВНЕНИЕ НА НОЛЬ, НУЛЕВЫЕ ЗНАЧЕНИЯ НЕ СРАВНИВАЮТСЯ.
BUDOO
CALL BINHB /СЧИТАЕМ ЗНАЧЕНИЕ ИЗ ПАМЯТИ И РАСШИФРУЕМ ЕГО
MOVLW .0
BCF STATUS,2
SUBWF BUML,0 /ЕСЛИ ХОТЯ БЫ ОДИН
BTFSS STATUS,2 /РЕГИСТР НЕ РАВЕН НУЛЮ,
GOTO BUDM /ИДЕМ НА СРАВНЕНИЕ УСТАНОВОК С ЧАСАМИ.
MOVLW .0
BCF STATUS,2
SUBWF BUMH,0
BTFSS STATUS,2
GOTO BUDM
MOVLW .0
BCF STATUS,2
SUBWF BUHL,0
BTFSS STATUS,2
GOTO BUDM
232
Электронный домоуправ
MOVLW .0
BCF STATUS,2 /ЕСЛИ ВСЕ РЕГИСТРЫ
SUBWF BUHH,0 ;РАВНЫ НУЛЮ,
BTFSC STATUS,2 /ТО УВЕЛИЧИМ АДРЕС
GOTO BUDM1 /И ПРОВЕРИМ СЛЕДУЮЩУЮ ЗАПИСЬ
; СРАВНЕНИЕ УСТАНОВОК С ЧАСАМИ.
BUDM
MOVFW BUML ; СРАВНИМ' ЗАПИСАННЫЕ МИНУТЫ
SUBWF MINL,0 /С РЕАЛЬНЫМИ.
SKPZ GOTO BUDM1 /ЕСЛИ НЕТ РАВЕНСТВА, /ТО УВЕЛИЧИМ АДРЕС.
MOVFW BUMH ;ИНАЧЕ СРАВНИМ ДЕСЯТКИ МИНУТ.
SUBWF MINH,0 f
SKPZ GOTO BUDM1 ;УВЕЛИЧИМ АДРЕС.
/ MOVFW BUHL /СРАВНИМ ЗАПИСАННЫЕ ЧАСЫ
SUBWF HOUL,0 ;С РЕАЛЬНЫМИ.
SKPZ GOTO BUDM1 /ЕСЛИ НЕТ РАВЕНСТВА, /ТО УВЕЛИЧИМ АДРЕС.
MOVFW BUHH /ИНАЧЕ СРАВНИМ ДЕСЯТКИ ЧАСОВ.
SUBWF HOUH,0
SKPNZ BSF FLAG,6 /ЕСЛИ ЕСТЬ ПОЛНОЕ СОВПАДЕНИЕ РЕГИСТРОВ, /ТО УСТАНОВИМ ФЛАГ РАВЕНСТВА УСТАНОВКИ И ЧАСОВ
BTFSC STATUS,2 /ЕСЛИ ЕСТЬ ПОЛНОЕ СОВПАДЕНИЕ РЕГИСТРОВ
BCF FLAG,4 ' /СБРОСИМ ФЛАГ ВЫПОЛНЕННОЙ УСТАНОВКИ,
BTFSC STATUS,2 /ЧТОБЫ СДЕЛАТЬ НОВУЮ УСТАНОВКУ.
BUDM1 RETURN BCF STATUS,0
INCF COUE,1 /УВЕЛИЧИМ ЗНАЧЕНИЕ СЧЕТЧИКА АДРЕСА СЧИТЫВАНИЯ.
MOVLW .32 /ЗНАЧЕНИЕ СЧЕТЧИКА АДРЕСА
SUBWF COUE,0 /МОЖЕТ БЫТЬ НЕ БОЛЕЕ 31.
BTFSC STATUS,0 /ЕСЛИ УЖЕ 32,
RETURN GOTO BUDOO /ЗАКОНЧИМ СРАВНЕНИЕ. /ИЛИ ПОЙДЕМ НА ВЫБОРКУ ДРУГОГО ЗНАЧЕНИЯ.
; 16. ВЫБОРКА ИЗ ПАМЯТИ.
AKTETE
MOVFW COUE /УСТАНОВИМ АДРЕС И НАЧНЕМ
MOVWF EEADR /СЧИТЫВАНИЕ.
BSF STATUS,RPO /БАНК 1.
BSF EECON1A80H,RD ;ЧТЕНИЕ.
BCF STATUS, RPO /БАНК 0.
MOVLW .255 /ЕСЛИ ПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWF EEDATA,0 /ЗАПИШЕМ -0.
BTFSC STATES, Z
CLRF ' RETURN EEDATA /ОБНУЛИМ, Т.К. 255 НЕКОРРЕКТНО Г
233
Устройства с цифровой индикацией
; 17. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК СЕКУНД.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИИ.
BCF INTCON,2 /СБРОС ФЛАГА (T0IF) ПЕРЕПОЛНЕНИЯ ТАЙМЕРА
,• (РАЗРЕШАЕМ ПРЕРЫВАНИЯ) .
, MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /•STATUS,
MOVFW FSR_TEMP
MOVWF FSR /FSR,
MOVFW W_TEMP / W.
BTFSS FLAG,7 /ЕСЛИ ИДЕТ УСТАНОВКА,
RETURN /ТО ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ БЕЗ РАЗРЕШЕНИЯ
/ПРЕРЫВАНИЯ.
RETFIE /ИНАЧЕ ВОЗВРАТ С РАЗРЕШЕНИЕМ ПРЕРЫВАНИЯ.
/ 18. СЧЕТ Ч-М-С. \
S1
INCF SMC,1 /ДЕЛИТЕЛЬ HA 250.
MOVFW SMC
ADDLW -OFAH /250=0FAH. 244=F4 -ДЛЯ КВАРЦА 4.0 МГц.
BZ SLF /ПРИ ПЕРЕПОЛНЕНИИ СЧЕТЧИКА, ИДЕМ ДАЛЬШЕ
RETURN
SLF
CLRF SMC /ОБНУЛИМ 1СЧЕТЧИК МИЛЛИСЕКУНД.
BSF FLAG,2 /УСТАНОВИМ ФЛАГ 1 S.
BTFSS SECL,0
BSF FLAG,3 /УСТАНОВИМ ФЛАГ 2 СЕКУНД.
BTFSC SECL,0
BCF FLAG,3 /СБРОСИМ ФЛАГ 2 СЕКУНД.
MOVLW .9 /ЕСЛИ УЖЕ 9 СЕКУНД,
SUBWF SECL,0
BC SH /ИДЕМ НА СРАВНЕНИЕ ДЕСЯТКОВ СЕКУНД.
INCF SECL,1 /ИНАЧЕ ПРИБАВИМ ЕДИНИЦУ.
RETURN
SH
CLRF SECL /ОБНУЛИМ СЕКУНДЫ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW SECH /ЕСЛИ ДЕСЯТКИ СЕКУНД
ADDLW -5H /РАВНЫ 5,
BZ ML /ИДЕМ СРАВНИВАТЬ МИНУТЫ.
INCF SECH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ СЕКУНД.
RETURN
ML
CLRF SECH /ОБНУЛИМ ДЕСЯТКИ СЕКУНД.
BCF FLAG,6 /СБРОСИМ ФЛАГ РАВЕНСТВА (ПРОШЛА МИНУТА)
234
Электронный домоуправ
ВСЕ MOVFW ADDLW STATUS,2 MINL -9H ;СБРОСИМ БИТ ПРИЗНАКА НУЛЯ. /ЕСЛИ ЕДИНЙЦЫ МИНУТ /РАВНЫ 9,
BZ MH /ИДЕМ СРАВНИВАТЬ ДЕСЯТКИ.
INCF MINL,1 /ИНАЧЕ УВЕЛИЧИМ МИНУТЫ.
RETURN
MH
CLRF MINL /ОБНУЛИМ ЕДИНИЦЫ МИНУТ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW MINH /ЕСЛИ ДЕСЯТКИ МИНУТ
ADDLW -5H /РАВНЫ 5,
BZ HL /ИДЕМ СРАВНИВАТЬ ЧАСЫ.
INCF MINH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ МИНУТ
RETURN
HL
CLRF MINH /ОБНУЛИМ ДЕСЯТКИ МИНУТ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW HOUH /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -2H /РАВНЫ 2,
BZ HL4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
MOVFW HOUL /ЕСЛИ ЕДИНИЦЫ ЧАСОВ РАВНЫ 9,
ADDLW -9H
BZ HH /УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
INCF HOUL,1 /ИНАЧЕ УВЕЛИЧИМ ЕДИНИЦ^ ЧАСОВ
RETURN
HL4
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW HOUL /ЕСЛИ ЕДИНИЦЫ ЧАСОВ
ADDLW -3H /РАВНЫ 3,
BZ HH /ИДЕМ ОБНУЛЯТЬ.
INCF HOUL,1 /ИЛИ ПРИБАВИМ ЕДИНИЦУ.
RETURN
HH
CLRF HOUL /ОБНУЛИМ ЕДИНИЦЫ ЧАСОВ.
BCF STATUS,2 /СБРОСИМ БИТ ПРИЗНАКА НУЛЯ.
MOVFW HOUH /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -2H /РАВНЫ ДВУМ,
BZ DL /ИДЕМ ОБНУЛЯТЬ.
INCF HOUH,1 /ИНАЧЕ УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ
RETURN
DL
CLRF HOUH /ОБНУЛИМ ДЕСЯТКИ ЧАСОВ.
RETURN
END
235
Устройства с индикацией точечными
светодиодами
Предлагаю несколько интересных вариантов устройств без привычной циф-
ровой индикации.
Два автомата суточного включения нагрузки
Устройство предназначено для включения и выключения нагрузки в фикси-
рованное время в течение суток. Нагрузкой могут быть телефон или квартир-
ный звонок с отключением их на ночь, насос для поливки на даче или охран-
ная сигнализация. Рассматриваются два варианта устройства. Первый вариант
предусматривает предварительную установку часов и времени включения и вы-
ключения нагрузки при помощи двух кнопок и двух светодиодов. Второй вари-
ант автомата устанавливает время включения и выключения нагрузки при по-
мощи одной кнопки. Кнопка нажимается в необходимый момент времени
включения и. выключения нагрузки.
Устройство с установкой часов и времени включения и выключения удобно
использовать, если необходимо делать установки за один раз и изменять их че-
рез некоторое время. Индикация установок осуществляется двумя светодиода-
ми красного и желтого цвета. Под каждым светодиодом ставится кнопка уста-
новки, которая далее будет называться цветом своего светодиода (красная
кнопка, желтая кнопка). Светодиод красного цвета индицирует значение реги-
стра десятков часов, а светодиод желтого цвета индицирует значение регистра
единиц часов. Поскольку индикация всех установок одинакова, то отличить их
можно только по частоте мигания светодиодов.
Рассмотрим алгоритм работы программы автомата суточного включения
нагрузки, показанный на рис. 61. После пуска и инициализации регистров
проверяется флаг установки. Если установки нет,, гасятся светодиоды и еще
раз проверяется флаг установки. Если подтверждается отсутствие установки,
производится сравнение значения регистра часов с регистром времени вклю-
чения. При их совпадении выход устанавливается в единицу и сравнение по-
вторяется. Если регистры не совпадают, проверяется совпадение значений ре-
гистра часов и времени выключения. При их совпадении выход обнуляется и
сравнение повторяется. Во время работы устройства процессор выполняет по-
стоянное сравнение.
После нажатия двух кнопок одновременно во время прерывания (будет по-
казано ниже) сбрасывается флаг сравнения, и устройство переходит в режим
установки. На две секунды включаются оба светодиода. После отработки двух
секунд проверяются нажатые кнопки. По тому, какая кнопка нажата, устанав-
236
Два автомата суточного включения нагрузки
Рис. 61. Алгоритм работы программы автомата суточного включения нагрузки
ливается соответствующий флаг, и программа зацикливается еще на две секун-
ды. Это необходимо для устранения дребезга контактов и предотвращения не-
верного срабатывания при неодновременном нажатии (отпускании) кнопок.
Пока кнопки нажаты, установок и индикации нет. После отпускания кнопок
гасятся светодиоды и проверяется выбранный режим индикации установки.
В соответствии с выбранным режимом производится индикация времени
включения, выключения или часов. Все три режима индикации идентичны и
отличаются лишь временем свечения светодиодов.
237
Устройства с индикацией точечными светодиодами
Алгоритм работы программы индикации показан на рис. 61.1. Сначала про-
веряется флаг красного светодиода. Если флаг установлен, программа идет на
индикацию красного светодиода, в противном случае — выключается (ёсли он
горел) красный светодиод. Затем проверяется на ноль регистр индикации жел-
того светодиода. Если значение регистра равно нулю, программа идет на инди-
кацию красного светодиода. Если регистр не нулевой, проверяется регистр па-
узы для данного режима. Это необходимо для синхронизации включения и вы-
К ПРОВЕРКЕ
УСТАНОВКИ
Рис. 61.1. Алгоритм работы программы автомата
суточного включения нагрузки. Индикация
ПРЕРЫВАНИЕ
Рис. 61.2. Алгоритм работы программы автомата
суточного включения нагрузки. Прерывание
238
Два автомата, суточного включения нагрузки
ключения светодиодов. После отработки паузы вычитается единица из
регистра индикации желтого светодиода и устанавливается флаг выполненного
вычитания. Включается желтый светодиод, и снова выдерживается пауза, рав-
ная времени свечения светодиода. После отработки паузы желтый светодиод
выключается. Теперь отрабатывается пауза, необходимая для индикации погас-
шего светодиода, и сбрасывается флаг вычитания. Далее регистр индикации
снова проверяется на ноль. Если регистр еще не нулевой, индикация повторя-
ется. Когда регистр индикации обнулится, устанавливается флаг красного све-
тодиода и производится запись в регистры индикации установленных значений
' для данного режима. Заканчивается цикл индикации проверкой флага установ-
ки рис. 61. Для красного светодиода вся работа программы повторяется, но со
своими значениями паузы.
Прерывание программы происходит при переполнении таймера каждую
четверть секунды рис. 61.2. Счетчик миллисекунд имеет коэффициент деления,
равный 4, и предназначен для организации коротких вспышек светодиодов. За
счетчиком миллисекунд последовательно инкрементируются регистры часов,
t Далее проверяется установка флага двух секунд. Если две секунды не прошли,
прерывание завершается восстановлением значений сохраненных регистров.
В противном случае проверяется, нажаты ли одновременно две кнопки. Если
кнопки нажаты, включается флаг установки и производится смена режима ин-
дикации. Пока кнопки нажаты, установок нет и прерывание завершается. По-
сле нажатия и отпускания красной или желтой кнопки прибавляется единица в
соответствующий регистр установки выбранного режима. Это произойдет через
‘ две секунды после отпускания кнопок. Завершаются установки восстановлени-
' ем значений регистров. Если в течение пяти минут не нажимались одновре-
менно две кнопки, программа сбрасывает флаг индикации и переходит к по-
стоянному сравнению значений регистров.
Схема автомата очень простая и показана на рис. 62. Прямой выход RA0
выдает логическую единицу при включении нагрузки. Инверсный выход RA1
DD1
Рис. 62. Автомат суточного включения нагрузки
239
Устройства с индикацией точечными светодиодами
зарезервирован для случая необходимости включения нагрузки логическим ну-
лем. Светодиоды HL1, HL2 могут быть любыми, желательно миниатюрными.
Порядок работы с автоматом следующий. После подачи напряжения пита-
ния на две секунды загораются оба светодиода. Светодиод красного цвета ин-
дицирует значение установки десятков часов, а светодиод желтого цвета —
установку единиц часов. По умолчанию первым включается режим индикации
установки времени включения. Поскольку установок нет и регистры индика-
ции нулевые, светодиоды будут выключены. Нажмите желтую кнопку на время
не менее 2 секунд и отпустите ее. Через две секунды зажжется желтый светоди-
од. Аналогично включается красный светодиод. После повторного нажатия
желтой кнопки число вспышек светодиода увеличится на единицу. Нажатием
двух кнопок одновременно изменяется режим индикации установки. После от-
пускания двух кнопок сначала высветится значение предыдущего режима, так
как установка уже была сделана, а новая установка в регистр индикации запи-
шется только через две секунды после отпускания кнопок. Поэтому после оче-
редной смены режима достоверная информация будет считана только после
выполнения полного цикла индикации (красный — желтый). Определить, ка-
кая установка в данный момент производится, можно по длительности свече-
ния светодиодов. Для того чтобы невозможно было спутать короткие и длин-
ные вспышки, разбег по их длительности очень большой. Короткая вспышка
длится 1/4 с, а длинная — 1 с.
Желтая вспышка короткая, а красная — длинная — индикация времени
включения.
Желтая вспышка длинная, а красная — короткая — индикация времени вы-
ключения.
Оба светодиода мигают короткими вспышками — индикация установки ча-
сов.
Очередность переключения режимов следующая: включение — выключе-
ние — часы — включение...
При каждой установке часов обнуляется регистр минут, поэтому часы необ-
ходимо устанавливать вблизи определенного часа. Значение этого времени и
устанавливается. Например, вы начали установку в 19,55, значит, необходимо
установить две вспышки красного светодиода (20). Установку надо выполнять
как можно ближе к 20 часам. Установка значений 25 или 30 часов не поддер-
живается, и регистр единиц, в первом случае, или регистр десятков, во втором
случае, обнулится. Включение и выключение нагрузки будет производиться
при смене часа. То есть дискретность установки равна одному часу. Через
5 минут после нажатия двух кнопок индикация выключается. Этого времени с
избытком достаточно для установки одного значения единиц и десятков часов.
Схема второго автомата включения нагрузки еще проще и показана на
рис. 63.
Это устройство хорошо использовать, когда необходимо один раз устано-
вить время включения и выключения нагрузки и забыть о нем. Ну, возможно,
если кварц окажется нестабильным, придется один раз в год сделать переуста-
новку. Нагрузкой в данном случае может быть телефон или квартирный зво-
нок, который отключается на ночь. Алгоритм работы программы этого автома-
та предельно прост и не нуждается в иллюстрации. При включении устройства
в любое время начинают работать «внутренние» часы. Не имеет значения, ка-
240
Два автомата суточного включения нагрузки
DD1
PIC16F84A
С1
ZQ1 32768 Гц
Рис. 63. Автомат суточного включения нагрузки
кое время «на часах» внутри микроконтроллера. В момент реального времени,
когда необходимо выключить нагрузку, нажимается кнопка SA1. Нагрузка вы-
ключится. В момент реального времени, когда необходимо включить нагрузку,
снова нажимается кнопка. Нагрузка включится. Кнопку необходимо удержи-
вать не менее 2...3 секунд. В момент нажатия кнопки значение регистров часов
и минут «внутренних» часов переписывается в регистры сравнения. Каждое на-
жатие кнопки изменяет установку. То есть если было установлено время вы-
ключения, то следующая установка будет для времени включения. При после-
дующих совпадениях значений «внутренних» часов со значениями, записанны-
ми в регистры сравнения, будет каждые сутки происходить включение и
выключение нагрузки. Время включения и выключения нагрузки будет повто-
ряться с точностью до одной минуты.
После включения напряжения питания все регистры обнуляются и совпаде-
ние значений регистров будет как для включения устройства, так и для выклю-
чения. Программно сделано так, чтобы в момент включения питания устройст-
во было включено. Поскольку первое нажатие кнопки фиксирует момент вы-
ключения нагрузки, то нажимать кнопку необходимо не ранее чем через одну
минуту после включения напряжения питания. В этом случае время включения
и время выключения нагрузки не будут равны друг другу. Если в течение суток
не будет устанавливаться время включения нагрузки, то нагрузка будет включа-
ться в то время, когда было подано напряжение питания на автомат. В данном
устройстве желательно предусмотреть резервное питание от трех дисковых, ми-
ниатюрных элементов.
Для подключения к устройствам сетевой нагрузки можно использовать схе-
му, показанную на рис. 64 [11]. На рис. 65 [12] показана схема подключения
микроконтроллера к телефонной линии для выключения телефона. В данном
случае микроконтроллер питается от телефонной сети. Для того чтобы можно
было самим сделать ночной звонок, необходимо установить параллельно элек-
тронному ключу тумблер (на схеме показан пунктиром).
241
Устройства с индикацией точечными светодиодами
Rl*470 R2 100
К выходу
микроконтроллера.
Рис. 64. Схема коммутации сетевой нагрузки
220 В
Рис. 65. Подключение микроконтроллера к телефонной линии
Файл для первого варианта устройства: telef.asm, а файл для второго вариан-
та устройства: knopka.asm.
; ТАЙМЕР ВЫКЛЮЧЕНИЯ ТЕЛЕФОНА НА НОЧЬ.
; ИНДИКАЦИЯ УСТАНОВКИ ДВУМЯ СВЕТОДИОДАМИ.
; УСТАНОВКА - ДВУМЯ КНОПКАМИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = TELEF.ASM
; ВЕРСИЯ: 20.02.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
_________________CONFIG 3FF0H
• s=sx=s=s=es=s=s=s=s==s==s=s=s=»ees=s=sxs==s==s=s===s=s=s=s==es=
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ.
242
Два автомата суточного включения нагрузки
СПЕЦ. РЕГИСТРЫ
INDF EQU OOH /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H /TMRO.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05П /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRTSB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU OBH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ. .
ОПРЕДЕЛЕНИЕ ВХОДОВ
RB0 > ВХОД КРАСНОЙ КНОПКИ.
RB1 > ВХОД ЖЕЛТОЙ КНОПКИ.
RB2 > ВЫХОД, КРАСНЫЙ СВЕТОДИОД.
RB3 > ВЙХОД, ЖЕЛТЫЙ СВЕТОДИОД.
RA0 > ВЫХОД ПРЯМОЙ (1).
RA1 > ВЫХОД ИНВЕРСНЫЙ (0).
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ
SCO EQU 10H /РЕГИСТР ИНДИКАЦИИ ЖЕЛТОГО ДИОДА.
SCI EQU 11H /РЕГИСТР ИНДИКАЦИИ КРАСНОГО ДИОДА
COUS EQU 12H /СЧЕТЧИК МИЛЛИСЕКУНД.
ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG
FLAG
EQU 14Н
; 0-> ВЫКЛЮЧЕНИЕ ИНДИКАЦИИ.
/ 1-> ФЛАГ СЧЕТЧИКА МИЛЛИСЕКУНД.
/ ^-> НАЖАТА КРАСНАЯ КНОПКА.
/ з-> НАЖАТА ЖЕЛТАЯ КНОПКА.
; 4-> НАЖАТЫ ОБЕ КНОПКИ.
/ 5-> УСТАНОВКА ВКЛЮЧЕНИЯ.
; 6-> УСТАНОВКА ВЫКЛЮЧЕНИЯ.
/ 1~> УСТАНОВКА ЧАСОВ.
FLAG1 EQU 15Н
о-> 0-УСТАНОВКА ЖЕЛТОГО СВ. ДИОДА, 1-УСТАНОВКА КРАСНОГО СВ. ДИОДА
/ 1-> ФЛАГ УСТАНОВКИ ПОРТА. 0-ПОРТ УСТАНОВКИ ВЫКЛЮЧЕН, 1-ПОРТ УСТАНОВКИ ВКЛЮЧЕН.
/ 2-> ФЛАГ ДВУХ СЕКУНД (ПАУЗА).
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
UC0
EQU 16Н /ЕДИНИЦЫ ЧАСОВ ВКЛЮЧЕНИЯ.
243
Устройства с индикацией точечными светодиодами
UCl EQU 17H /ДЕСЯТКИ ЧАСОВ ВКЛЮЧЕНИЯ.
ucwo EQU 18H /ЕДИНИЦЫ ЧАСОВ ВЫКЛЮЧЕНИЯ.
UCW1 EQU 19H /ДЕСЯТКИ ЧАСОВ ВЫКЛЮЧЕНИЯ.
SEC1 EQU 1AH /СЧЕТЧИК СЕКУНД.
MINI EQU 1BH ;СЧЕТЧИК МИНУТ.
DSMH EQU 1CH /ВРЕМЕННЫЙ РЕГИСТР ДЛЯ ПЕРЕКОДИРОВКИ
LSMH EQU 1DH /ВРЕМЕННЫЙ РЕГИСТР, МЛАДШИЙ РАЗРЯД.
HOUl EQU 1EH /СЧЕТЧИК ЧАСОВ.
H_LOW EQU 1FH /ЕДИНИЦЫ ЧАСОВ.
H_HIGH EQU 20H /ДЕСЯТКИ ЧАСОВ.
HSMH EQU 21H /ВРЕМЕННЫЙ, СТАРШИЙ РАЗРЯД.
UCW EQU 22H /ВРЕМЯ ВЫКЛЮЧЕНИЯ В ЧАСАХ.
UC EQU 23H /ВРЕМЯ ВКЛЮЧЕНИЯ В ЧАСАХ.
MIN5 EQU 24H /РЕГИСТР СЧЕТА 5 МИНУТ.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
•==========: ==== =
W_TEMP EQU 28H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ. ’
STATUS_TEMP EQU 29H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR_TEMP EQU 2AH /ВРЕМЕННЫЙ ДЛЯ FSR.
COUZ EQU 2BH /СЧЕТЧИК РЕЖИМОВ.’ 1
/ 1. ПУСК.
•====================:
ORG О
GOTO INIT
ORG 4
GOTO CONST
• ====== =
; 2. ИНИЦИАЛИЗАЦИЯ.
• ==================
INIT
BSF STATUS,RPO • /ПЕРЕХОДИМ В БАНК 1.
MOVLW B’00000010' /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=8 =...10
MOVWF OPTION_REGA80H
MOVLW B’lOlOOOOO’’ /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0..
MOVWF INTCON
MOVLW B'00000000' /ВСЕ НА ВЫХОД.
MOVWF TRISAA80H
MOVLW B’OOOOOOll’ ,-RB0, R31-HA ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF FLAG1
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCO
CLRF SCI
CLRF UCO
CLRF UCl
CLRF UC
CLRF UCW
CLRF UCWO
CLRF UCW1
CLRF J2OUS
CLRF "couz
244
Два автомата суточного включения нагрузки
BSF COUZ,0 /СЧЕТЧИК РЕЖИМА В 1.
CLRF MIN5
CLRF LSMH
CLRF HSMH
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF PORTB
CLRF PORTA
. BSF* PORTA,0
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ.
• =====
; 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.
= =============== = = = = ;== =
KEY KWK KWUK KHO KOZ MOVFW PORTB ;ЗАГРУЖАЕМ ПОРТ ДЛЯ ОПРЕДЕЛЕНИЯ BCF STATUS,2 ;НАЖАТЫХ ДВУХ КНОПОК. ANDLW В'00000011’/СРАВНИВАЕМ. BTFSC STATUS,2 /ЕСЛИ РАВНО 0, BSF FLAG,4 /УСТАНАВЛИВАЕМ ФЛАГ СМЕНЫ РЕЖИМА. BTFSC FLAG,4 /ЕСЛИ ФЛАГ УСТАНОВЛЕН, BCF FLAG,0 ;СБРОСИМ ФЛАГ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ. BTFSC FLAG,4 /ЕСЛИ ФЛАГ СМЕНЫ РЕЖИМА УСТАНОВЛЕН, GOTO. KOZ. /СМЕНИМ ФЛАГИ РЕЖИМОВ. BTFSS PORTB,0 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА, BSF FLAG,2 /УСТАНОВИМ ФЛАГ. BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. RETURN BTFSC FLAG,2 /ЕСЛИ ФЛАГ УСТАНОВЛЕН, CALL UST‘ /ИДЕМ НА УСТАНОВКУ. BTFSS PORTB,1 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА, BSF FLAG,3 /УСТАНОВИМ ФЛАГ. BTFSS PORTB,1 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. RETURN BTFSC FLAG,3 /ЕСЛИ ФЛАГ УСТАНОВЛЕН, CALL UST /ИДЕМ НА УСТАНОВКУ. RETURN ' /ЕСЛИ НИЧЕГО НЕ НАЖАТО, ВОЗВРАЩАЕМСЯ. BSF FLAG,5 /УСТАНОВИМ ФЛАГ УСТАНОВКИ ВРЕМЕНИ ВКЛЮЧЕНИЯ. BCF FLAG,6 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ. BCF FLAG,7 RETURN BSF FLAG,6 /УСТАНОВИМ ФЛАГ УСТАНОВКИ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ BCF FLAG,5 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ. BCF FLAG,7 RETURN BSF FLAG,7 /УСТАНОВИМ ФЛАГ УСТАНОВКИ ЧАСОВ. BCF FLAG,5 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ. BCF FLAG,6 RETURN BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. RETURN
245
Устройства с индикацией точечными светодиодами
BTFSS PORTB,1 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN
BCF FLAG,4 ;СБРОСИМ ФЛАГИ.
BCF FLAG,3 ;ЧТОБЫ НЕ СРАБОТАЛА УСТАНОВКА
BCF FLAG,2 /ПРИ НЕОДНОВРЕМЕННОМ ОТПУСКАНИИ КНОПОК
CLRF MIN5 /ЧТОБЫ ПРОДЛИТЬ УСТАНОВКИ НА 5 МИНУТ.
BCF FLAG1,2 /ФЛАГ 2 СЕКУНД.
BCF STATUS,0 /ЧТОБЫ МЛАДШИЙ РАЗРЯД БЫЛ НУЛЕВЫМ.
RLF COUZ,1 /+1 В СЧЕТЧИК РЕЖИМА.
BTFSC COUZ,3. /ЕСЛИ ЕДИНИЦА УЖЕ ДОШЛА ДО 3 РАЗРЯДА,
CALL KOZO /ПОЙДЕМ НА УСТАНОВКУ.
BTFSC couz,o /ЕСЛИ ЕДИНИЦА,
CALL. KWK /УСТАНОВИМ ФЛАГ ВКЛЮЧЕНИЯ.
BTFSC COUZ,1 /ЕСЛИ ЕДИНИЦА,
CALL KWUK /УСТАНОВИМ ФЛАГ ВЫКЛЮЧЕНИЯ.
BTFSC COUZ,2 /ЕСЛИ ЕДИНИЦА,
CALL KHO /УСТАНОВИМ ФЛАГ ЧАСОВ.
RETURN
KOZO
CLRF COUZ
BSF couz,o /УСТАНОВИМ ' РАЗРЯД.
RETURN
; 4. ЗАПИСЬ УСТАНОВОК В РЕГИСТРЫ.
• SSSSSSSSSSSSSSSSSSSSSSSSSSSS SS=SS= SS SS==J GS SS SS SS SSSSSS SS SS SS SS
UST
, BTFSS FLAG1,2 /УСТАНОВКА РАЗРЕШЕНА, ЕСЛИ ПРОШЛО 2 СЕК
RETURN
' BTFSC FLAG,6 /ЕСЛИ УСТАНОВЛЕН ФЛАГ,
GOTO USTW . /ИДЕМ УСТАНАВЛИВАТЬ ВРЕМЯ ВЫКЛЮЧЕНИЯ.
BTFSC FLAG,7 /ЕСЛИ УСТАНОВЛЕН ФЛАГ,
GOTO USTH /ИДЕМ УСТАНАВЛИВАТЬ ЧАСЫ.
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTO /УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO UST1 /УСТАНОВИМ ДЕСЯТКИ ЧАСОВ.
RETURN
; 5. УСТАНОВКА ВРЕМЕНИ ВКЛЮЧЕНИЯ.
1
• SSSSSSSSSSX=SSS5SSSSSSSSS5X=SSSSS5SSS5S5SSSSSSSSSSSSSSSfsSSSS5S5SSSSX5S5SSSSSSSSeSSSSSSSSSSSSSSSS=XSSSSSS
UST0
BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF UCO,1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД.
UST2
MOVFW UC1 /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -002H /РАВНЫ 2,
SKPNZ
CALL UST4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ БЫЛА НАЖАТА КРАСНАЯ КНОПКА,
RETURN /ТО ИДЕМ УСТАНАВЛИВАТЬ СТАРШИЙ РАЗРЯД
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF UC0,0
BTFSC STATUS,0 /С(ПЕРЕНОС) - 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF UCO /ОБНУЛИМ РЕГИСТР.
246
Два автомата суточного включения нагрузки
GOTO ’ UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
UST4 MOVFW UCO /ЕСЛИ ДЕСЯТКИ ЧАСОВ РАВНЫ 2,
BCF STATUS,0 /А ЕДИНИЦЫ ЧАСОВ
ADDLW SKPNC -004H /РАВНЫ ИЛИ БОЛЬШЕ 4,
CLRF RETURN UCO /ОБНУЛИМ ЕДИНИЦЫ ЧАСОВ.
UST1 INCF UC1,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
CALL UST2
MOVLW .3 f
SUBWF UC1,0
BTFSC STATUS,0 /С - 1, ЕСЛИ З'И БОЛЕЕ.
CLRF UC1 /ОБНУЛИМ ДЕСЯТКИ ЧАСОВ.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
/ б. УСТАНОВКА ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
USTW
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTWO /УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO RETURN USTW1 /УСТАНОВИМ ДЕСЯТКИ ЧАСОВ.
USTW0 BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF UCWO,1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД
USTW2 MOVFW UCW1 /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -002H /РАВНЫ 2,
SKPNZ CALL USTW4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC RETURN FLAG,2
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF UCWO,0
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF UCWO /ОБНУЛИМ РЕГИСТР.
GOTO USTW3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
USTW4 MOVFW UCWO
BCF STATUS,0
ADDLW -004H'
SKPNC CLRF RETURN UCWO
USTW1 INCF UCW1,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
CALL USTW2
MOVLW .3 f
SUBWF UCW1,0
BTFSC STATUS,0 /С = 1, ЕСЛИ 3 И БОЛЕЕ.
247
Устройства с индикацией точечными светодиодами
CLRF UCW1 /ОБНУЛИМ РЕГИСТР.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO USTW3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ
7. УСТАНОВКА ЧАСОВ
USTH
BTFSC GOTO FLAG,3 USTHO /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА, /УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO USTH1 /УСТАНОВИМ ДЕСЯТКИ ЧАСОВ.
RETURN
USTHO
BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF H_LOW, 1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД
USTH2
MOVFW H_HIGH /ЕСЛИ.ДЕСЯТКИ ЧАСОВ
ADDLW -002H /РАВНЫ 2,
SKPNZ
CALL USTH4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2
RETURN
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF H_LOW,0
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF H_LOW /ОБНУЛИМ РЕГИСТР.
GOTO USTHOO /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
USTH4
MOVFW H_LOW
BCF STATUS,0
ADDLW -004H
SKPNC
CLRF H_LOW
RETURN
USTH1
INCF H_HIGH,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
CALL USTH2
MOVLW .3 9
SUBWF H_HIGH,0
BTFSC STATUS,0 /С = 1, ЕСЛИ 3 И БОЛЕЕ.
CLRF H_HIGH /ОБНУЛИМ РЕГИСТР.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO USTHOO /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
; 8. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
• 88SS=S=SXS3SSS3S3S3SSSXB3S&5=XXS3S3S3S3SSSSS=SS2&5&5553SSS = = = »= = = = =SZZSS=X= 5SSSSSSSSS=S=X=SSS3SSS3S=S=X=S=X3S
UST3
MOVFW UCO /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ ЧАСОВ
MOVFW UCl /И ДЕСЯТКОВ ЧАСОВ ВРЕМЕНИ ВКЛЮЧЕНИЯ
MOVWF SCI /В РЕГИСТРЫ ИНДИКАЦИИ.
CALL DECBIN /ДЛЯ УДОБСТВА СРАВНЕНИЯ,
ADDWF UCO, 0 /ПЕРЕКОДИРУЕМ ЗНАЧЕНИЯ
MOVWF UC /В ОДИН РЕГИСТР.
RETURN
248
Два автомата суточного включения нагрузки
USTW3
MOVFW UCWO /АНАЛОГИЧНО ДЛЯ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
MOVWF SCO
MOVFW UCW1 9
MOVWF SCI 9
CALL DECBIN 9
ADDWF UCW0,0 9 • !
MOVWF UCW 9
RETURN
USTHOO
CLRF MINI /ОБНУЛЕНИЕ МИНУТ ПРИ КАЖДОЙ УСТАНОВКЕ ЧАСОВ
USTH3
MOVFW H_LOW /АЙАЛОГИЧНО ДЛЯ ЧАСОВ.
MOVWF SCO 9
MOVFW HJ1IGH 9
MOVWF SCI 9
MOVFW H_HIGH 9
CALL DECBIN 9
ADDWF H_LOW,0
MOVWF HOU1 /ЧАСЫ: ЕДИНИЦЫ + ДЕСЯТКИ.
RETURN
; 9. ТАБЛИЦА ПЕРЕКОДИРОВКИ РАЗРЯДА ДЕСЯТКОВ В БИНАРНЫЙ КОД.
• ======= ====================== SB = SS = = =3S = == = SS== = = = === = SS ===S = = =
DECBIN
ADDWF PC, 1
RETLW B'00000000' /0
RETLW B’00001010' /10
RETLW B'00010100 ' /20
; 10. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
COMP BTFSS FLAG,0 /ЕСЛИ ФЛАГ ВЫКЛЮЧЕНИЯ УСТАНОВКИ НУЛЕВОЙ,
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ.УСТАНОВОК.
BCF FLAG,2
BCF FLAG,3
BSF PORTB,2 /ПОГАСИМ ИНДИКАЦИЮ УСТАНОВОК.
BSF PORTB,3
MOVFW HOU1 /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF UCW, 0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BZ COMW /ЕСЛИ ОНИ РАВНЫ, ВЫКЛЮЧИМ выходы:
MOVFW HOU1 /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF UC, 0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COM /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧИМ ВЫХОДЫ.
GOTO COMP /НА СРАВНЕНИЕ.
COM BSF PORTA,0 /ВЫХОД ВКЛЮЧЕН (ТЕЛЕФОН}.
BCF - PORTA,1 /ВЫКЛЮЧЕН.
GOTO COMP /НА СРАВНЕНИЕ.
COMW BCF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
BSF PORTA,1 /ВКЛЮЧЕН.
GOTO COMP /НА СРАВНЕНИЕ.
249
Устройства с индикацией точечными светодиодами
; 11. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
zoo
BTFSC FLAG,0 /ЕСЛИ УСТАНОВКА ВЫКЛЮЧЕНА,
GOTO COMP /ИДЕМ НА СРАВНЕНИЕ.
BTFSS PORTB,0 /ЕСЛИ КРАСНАЯ КНОПКА НАЖАТА,
BCF PORTB,3 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS PORTB,1 /ЕСЛИ ЖЕЛТАЯ КНОПКА НАЖАТА,
BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.,
BTFSS FLAG1,2 /ЕСЛИ 2 СЕКУНДЫ ЕЩЕ НЕ ПРОШЛО,
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,0 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ.
GOTO ZOO /ВЕРНЕМСЯ. ,
BTFSS PORTB,1 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ.
GOTO ZOO /ВЕРНЕМСЯ.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BSF PORTB,2 /ПОГАСИМ СВЕТОДИОДЫ.
BSF PORTB,3
BTFSC FLAG,6 /ЕСЛИ ФЛАГ ВКЛЮЧЕН,
GOTO WUKL /ИДЕМ СВЕТИТЬ ВРЕМЯ ВЫКЛЮЧЕНИЯ.
BTFSC FLAG,7 /ЕСЛИ ФЛАГ ВКЛЮЧЕН,-
GOTO HOKL /ИДЕМ СВЕТИТЬ ЧАСЫ.
; ===«== := ========: ==========================
; 12. ИНДИКАЦИЯ УСТАНОВКИ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
• ===== ;=========: ==========================
WKL BTFSC FLAG1,0 /ЕСЛИ ЖЕЛТЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO ZH /ИДЕМ СВЕТИТЬ КРАСНЫЙ.
ZL BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
TSTF SCO /ЕСЛИ ЗНАЧЕНИЕ
SKPNZ /РЕГИСТРА НУЛЕВОЕ,
GOTO ZLO /ИДЕМ ПРОВЕРЯТЬ СТАРШИЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO ZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ ЕДИНИЦА,
GOTO ZOL /ДЕКРЕМЕНТИРУЕМ РЕГИСТР.
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА ИНДИКАЦИИ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
ZOL BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА УЖЕ НУЛЕВОЙ,
GOTO ZOL1
. BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
ZOL1 . TSTF SCO /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
SKPZ GOTO WKL ;ZL /НАЧНЕМ СНАЧАЛА.
ZLO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO ZOL • /УСТАНОВКИ ПОРТА.
BSF FLAG1,0 /УСТАНОВИМ ФЛАГ КРАСНОГО ДИОДА.
250
Два автомата суточного включения нагрузки
BCF GOTO FLAG1,2 ZOO /СБРОСИМ ФЛАГ 2 СЕКУНД. /ВЫДЕРЖКА 2 СЕК. И ПРОВЕРКА НАЖАТЫХ КНОПОК
ZH BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
TSTF SCI /ЕСЛИ РЕГИСТР НУЛЕВОЙ,
SKPNZ GOTO ZHO /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO ZOH /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS SEC1,0 /ЕСЛИ ЕДИНИЦА,
GOTO ZOH /ДЕКРЕМЕНТИРУЕМ РЕГИСТР.
DECF SCI, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА ИНДИКАЦИИ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ ДИОД.’
ZOH
BTFSC SEC1,O /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO BSF ZOH1 PORTB,3 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
Z0H1
TSTF SCI /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
SKPZ
GOTO WKL ;ZH /НАЧНЕМ СНАЧАЛА.
ZHO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO ZOH /УСТАНОВКИ ПОРТА.
CALL UST3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ ЖЕЛТОГО ДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
/ 13. ИНДИКАЦИЯ УСТАНОВКИ [ ВРЕМЕНИ ВЦКЛЮЧЕНИЯ.
WUKL BTFSC FLAG1,0 /ВСЁ АНАЛОГИЧНО ВРЕМЕНИ ВКЛЮЧЕНИЯ. /ЕСЛИ ЖЕЛТЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO UZH /ИДЕМ СВЕТИТЬ КРАСНЫЙ.
UZL
BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
TSTF SCO /ЕСЛИ НЕТ УСТАНОВКИ,
SKPNZ GOTO UZLO /РЕГИСТР НУЛЕВОЙ, /ИДЕМ ПРОВЕРЯТЬ КРАСНЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO UZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS SEC1,O /ЕСЛИ ЕДИНИЦА,
GOTO UZOL /ДЕКРЕМЕНТИРУЕМ РЕГИСТР.
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF ' PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
UZOL
BTFSC SEC1,0 /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO UZOL1
BSF PORTB,2 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ. .
UZ0L1
TSTF SCO /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
251
Устройства с индикацией точечными светодиодами
SKPZ GOTO WUKL
UZLO BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO UZOL УСТАНОВКИ ПОРТА.
BSF FLAG1,0 УСТАНОВИМ ФЛАГ КРАСНОГО ДИОДА.
BCF FLAG1,2 СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
UZH BSF PORTB,2 ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
TSTF SCI /ЕСЛИ РЕГИСТР НУЛЕВОЙ,
SKPNZ GOTO UZHO /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO UZOH /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ ЕДИНИЦА,
GOTO UZOH /ДЕКРЕМЕНТИРУЕМ РЕГИСТР.
DECF SC1,1 /ВЫЧТЕМ ЕДИНИЦУ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ диод.
UZOH BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА НУЛЕВОЙ,
GOTO UZOH1
-BSF < POR£B,3 /ВЫКЛЮЧИМ выход.
UZ0H1 BCF FLAG1,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
TSTF SCI /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ
SKPZ Г
, GOTO WUKL
UZHO BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO UZOH /УСТАНОВКИ ПОРТА.
CALL USTW3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ ЖЕЛТОГО ДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
; 14. ИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ.
HOKL /ВСЁ АНАЛОГИЧНО ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BTFSC FLAG1,0
' GOTO HOZH
HOZL . BSF PORTB,3
TSTF SCO /ЕСЛИ НЕТ УСТАНОВКИ,
SKPNZ /РЕГИСТР НУЛЕВОЙ,
GOTO HOZLO /ИДЕМ ПРОВЕРЯТЬ КРАСНЫЙ РЕГИСТР.
BTFSC FLAG1,1 Г
GOTO HOZOL f
BTFSS COUS,0 г
GOTO HOZOL
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BSF FLAG1,1
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ВЫХОД.
252
Два автомата суточного включения нагрузки
HOZOL BTFSS FLAG,1
GOTO HOZOL1
BSF PORTB,2 ; ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 ;
H0Z0L1 TSTF SCO i ЕСЛИ РЕГИСТР УЖЕ ПУСТОЙ,-
SKPZ GOTO HOKL
HOZLO BTFSC FLAG1,1 i
GOTO HOZOL ;
BSF FLAG1,O ;
BCF FLAG1,2 9
GOTO ZOO
HOZH BSF PORTB,2
TSTF SCI
SKPNZ GOTO HOZHO
BTFSC FLAG1,1 ,
GOTO HOZOH
BTFSS cous,o
GOTO HOZOH 4
DECF SC1,1 ВЫЧТЕМ ЕДИНИЦУ.
BSF FLAG1,1
BCF PORTB,3 , /ВКЛЮЧИМ КРАСНЫЙ ДИОД.
HOZOH BTFSS FLAG,1
GOTO HOZOH1
BSF PORTB,3
BCF FLAG1,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
H0Z0H1 TSTF SCI /ЕСЛИ РЕГИСТР' УЖЕ ПУСТОЙ,
SKPZ GOTO HOKL
HOZHO BTFSC FLAG1,1 Г
GOTO HOZOH
CALL USTH3 /ПЕРЕУСТАНОВИМ ЕГО.
BCF FLAG1,0 9
BCF FLAG1,2
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
; 15. ПП. ПЕРЕКОДИРОВКИ С БИНАРНОГО В 2-10 КОД (2-_-2-10).
BINDECH -
MOVLW .10 /10 >W.
BDH BSF STATUS,0 /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDE(fL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH /ПОВТОРИТЬ.
253
Устройства с индикацией точечными светодиодами
BINDECL
MOVF DSMH,О
ADDLW .10 ,-10+W >W.
MOVWF LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN
• ==================================================================
; 16. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
; _= CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS TEMP ;
MOVFW FSR /FSR.
MOVWF FSR TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
BTFSC FLAG1,2 /ОПРОС КНОПОК ЧЕРЕЗ 2 СЕК.
CALL KEY /ПРОВЕРИМ КНОПКИ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF • INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ,.
MOVFW STATUS TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /Status,
• . MOVFW FSR .TEMP й
M6VWF FSR ; FSR,
; MOVLW .150 /MOVWF TMRO
MOVFW W TEMP /W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
• ================== / 17. СЧЕТ.
SI
INCF COUS,1 /+1 В СЧЕТЧИК.
BTFSS COUS,0 BSF FLAG,1 BTFSC COUS,0 BCF FLAG,1
MOVLW .4 /ЕСЛИ УЖЕ 1 СЕКУНДА,
SUBWF COUS,0 9
SKPZ t
RETURN
CLRF COUS /ОБНУЛИМ СЧЕТЧИК.
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ,РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,F /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSC SEC1,1 /ЕСЛИ РАЗРЯД ЕДИНИЦА,
BSF FLAG1,2 /УСТАНОВИМ ФЛАГ*2 СЕКУНД.
RETURN 9
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
CALL M5M /УВЕЛИЧИМ СЧЕТЧИК 5 МИНУТ.
M1M
MOVFW MINI ,-загрУзка минут в РАБ. РЕГИСТР.
ADDLW -3BH /.-59.
254
Два автомата суточного включения нагрузки
BZ INCF RETURN Hl MIN1,F /СРАВНИТЬ HA 0, ЕСЛИ РАВНО, ПЕРЕЙТИ HA Hl. /ПРИБАВИТЬ 1 В МИНУТЫ. 9
Hl
CLRF MINI ;ОБНУЛЯЕМ РЕГИСТР МИНУТ.
Н1Н .
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H /- 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н10.
INCF HOUlfcF /ПРИБАВИТЬ 1 В ЧАСЫ.
MOVFW HOU1 /HOU'>W.
H1U
MOVWF DSMH ,-W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF H_LOW ,-W > H_LOW В. РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF H_HIGH ,-W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
H10 CLRF RETURN LSMH /И МЛ. 9
CLRF’ HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF H_LOW /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF RETURN H_HIGH /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
M5M
INCF MIN5,1 /+1 В РЕГИСТР 5 МИНУТ.
MOVLW .5 /ЕСЛИ УЖЕ 5 МИНУТ,
SUBWF SKPNZ MIN5,0 9
BSF SKPNZ FLAG,0 /УСТАНОВИМ ФЛАГ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ.
CLRF RETURN MIN5 /И ОБНУЛИМ СЧЕТЧИК.
END
; АВТОМАТ СУТОЧНОГО ВКЛЮЧЕНИЯ НАГРУЗКИ.
; БЕЗ ИНДИКАЦИИ.
; УСТАНОВКА ОДНОЙ КНОПКОЙ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = KNOPKA.ASM
/ ВЕРСИЯ: 23.02.03.
/ АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
9Г
♦INCLUDE P16F84A.INC
__CONFIG 3FF0H
255
Устройства с индикацией точечными светодиодами
ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ
СПЕЦ. РЕГИСТРЫ
INDF EQU OOH /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H /TMRO.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU OBH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
ОПРЕДЕЛЕНИЕ ВХОДОВ
RB0 > ВХОД КНОПКИ.
RA0 > ВЫХОД ПРЯМОЙ (1).
RA1 > ВЫХОД ИНВЕРСНЫЙ (0)
ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG
FLAG
EQU 14H
0—> НАЖАТОЙ КНОПКИ.
1-> КОММУТАЦИИ РЕЖИМОВ.
2-> 2 СЕКУНД. -
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ
SEC1 EQU 1AH /СЧЕТЧИК СЕКУНД.
MINI EQU 1BH /СЧЕТЧИК МИНУТ.
HOU1 EQU 1EH /СЧЕТЧИК ЧАСОВ.
HWK EQU 22H /ВРЕМЯ ВКЛЮЧЕНИЯ В ЧАС.
HWUK EQU 23H /ВРЕМЯ ВЫКЛЮЧЕНИЯ В ЧАСАХ.
MWK EQU 24H /ВРЕМЯ ВКЛЮЧЕНИЯ В МИНУТАХ.
MWUK EQU 25H /ВРЕМЯ ВЫКЛЮЧЕНИЯ В МИНУТАХ
ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 28H ;БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 29H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
FSR TEMP EQU 2АН /ВРЕМЕННЫЙ ДЛЯ FSR.
1. ПУСК.
ORG 0
GOTO INIT
ORG 4
GOTO CONST
256
Два автомата суточного включения нагрузки
/ _== =___= ; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO ; ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000100' ; • ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=32 =
MOVWF OPTION REGA80H ;
MOVLW B'10100000' ; г РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0
MOVWF INTCON ;
MOVLW B'00000000' ; ВСЕ НА ВЫХОД.
MOVWF TRISAA80H
MOVLW B'00000001' ; :RB0-HA ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RPO ; г ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG ; ;СБРАСЫВАЕМ ВСЕ ФЛАГИ.
CLRF TMRO ; г ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF HWK
CLRF HWUK
CLRF MWK
CLRF. MWUK
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF PORTB
CLRF PORTA
BSF PORTA,0
GOTO COMP /HA СРАВНЕНИЕ.
; 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.
' — KEY BTFSS PORTB,0 /ЕСЛИ НАЖАТА КНОПКА,
BSF FLAG,0 /УСТАНОВИМ ФЛАГ.
BCF FLAG,2 ;СБРОСИМ ФЛАГ 2 СЕКУНД.
BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN • BTFSC FLAG,0 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
CALL UST /ИДЕМ НА УСТАНОВКУ.
RETURN /ВОЗВРАЩАЕМСЯ.
; 4. УСТАНОВКА.
UST
BCF FLAG,0 /СБРОСИМ ФЛАГ КНОПКИ.
BTFSS FLAG,1 /ЕСЛИ ФЛАГ НУЛЕВОЙ,
GOTO UST1 /ИЗМЕНИМ ЕГО ЗНАЧЕНИЕ.
BCF FLAG,1 /В ПРОТИВНОМ СЛУЧАЕ, ТОЖЕ ИЗМЕНИМ ЗНАЧЕНИЕ
GOTO USTWK /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
UST1
BSF FLAG,1 /ФЛАГ В 1.
GOTO USTWUK /ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
USTWK MOVFW HOU1 / ;ЗНАЧЕНИЕ ЧАСОВ
MOVWF HWK /В РЕГИСТР ВКЛЮЧЕНИЯ.
.100.
‘,9 3аГ2418
257
Устройства с индикацией точечными светодиодами
MOVFW MINI /ЗНАЧЕНИЯ МИНУТ
MOVWF MWK /В РЕГИСТР ВКЛЮЧЕНИЯ.
RETURN
USTWUK
MOVFW HOUl /ЗНАЧЕНИЕ ЧАСОВ
MOVWF HWUK /В РЕГИСТР ВЫКЛЮЧЕНИЯ
MOVFW MINI /ЗНАЧЕНИЯ МИНУТ
MOVWF MWUK /В РЕГИСТР ВЫКЛЮЧЕНИЯ
RETURN
; 5. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
• ======
СОМР
MOVFW HOUl /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF HWK, 0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BNZ COMP1 /ЕСЛИ ОНИ НЕ РАВНЫ, ПРОВЕРИМ ВРЕМЯ ВЫКЛЮЧЕНИЯ
MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF MWK, 0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COM /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧАЕМ ВЫХОД.
СОМР1
MOVFW HOUl /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF HWUK,0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BNZ COMP /ЕСЛИ ОНИ НЕ РАВНЫ, НАЧНЕМ СНАЧАЛА.
MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF MWUK,0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BZ COMW /ЕСЛИ ОНИ РАВНЫ, ВЫКЛЮЧИМ выходы.
GOTO COMP /НА СРАВНЕНИЕ.
сом BSF PORTA, 0 /ВЫХОД ВКЛЮЧЕН (ТЕЛЕФОН).
BCF PORTA, 1 /ВЫКЛЮЧЕН.
GOTO COMP /НА СРАВНЕНИЕ.
COMW BCF PORTA, 0 /ВЫХОД ВЫКЛЮЧЕН.
BSF PORTA, 1 /ВКЛЮЧЕН.
GOTO COMP /НА СРАВНЕНИЕ.
• =:===========================s===========s=======:====s============s:
; б. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
======== ============= =========================================
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR /FSR.
MOVWF FSR_TEMP
CALL SI • /ПРИБАВИМ 1' В СЧЕТЧИК.
BTFSC FLAG,2
CALL KEY /ПРОВЕРИМ КНОПКИ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ.
MOVFW STATUS_TEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR_TEMP
MOVWF FSR ; FSR,
MOVFW W_TEMP /‘w.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
258
Часы-будильник
7. СЧЕТ
S1
MOVFW ADDLW SEC1 -3BH /ЗАГРУЗКА В РАБ. РЕГИСТР. /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml
INCF SEC1,1 /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSC SEC1,1 /ЕСЛИ РАЗРЯД ЕДИНИЦА,
BSF FLAG,2 /УСТАНОВИМ ФЛАГ 2 СЕКУНД.
RETURN f J
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
M1M
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MIN1,F /ПРИБАВИТЬ 1 В МИНУТЫ.
RETURN
Hl
CLRF MINI /ОБНУЛЯЕМ РЕГИСТР МИНУТ.
H1H
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H /- 23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
RETURN
H10
CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
RETURN
END
Часы-будильник
Если внимательно посмотреть на алгоритм работы программы автомата су-
точного включения нагрузки, то можно заметить, что имеется установка часов
и время включения нагрузки. Если добавить в программу установку минут
вместо установки времени выключения и соответственно добавить индикацию
установки минут, то получим часы с индикацией точечными светодиодами.
А если время включения нагрузки использовать для включения зуммера, то
получатся часы с будильником. Для этого необходимо только добавить йро-
грамму установки и индикации минут будильника. Все четыре алгоритма ра-
боты программы установки и индикации одинаковы и отличаются лишь вре-
менем мигания светодиодов и загрузкой своих (часы, минуты) значений'в ре-
гистры индикации.
Алгоритм работы программы часов идентичен алгоритму работы программы
автомата суточного включения нагрузки, только в опрос состояния кнопок до-
бавляется опрос еще одной кнопки, кнопки индикации часов. Если нажать эту
259
Устройства с индикацией точечными светодиодами
кнопку, то светодиоды будут попеременно индицировать значение часов и ми-
нут до тех пор, пока нажата кнопка.
Схема часов показана на рис. 66. Кнопки SAI, SA2 предназначены для уста-
новки времени в десятках или единицах часов и минут. Красный светодиод
HL2 индицирует установленное значение в десятках, а желтый светодиод HL1
индицирует установленное значение в единицах. Кнопка SA3 используется для
попеременной индикации часов и минут. К прямому выходу RA 0 плюсом под-
ключается импортный звуковой излучатель типа НСМ1206х с встроенным ге-
нератором. На минус излучателя подается минус 4,5 В. К инверсному выводу
RA1 излучатель подключается обратной полярностью. К выходу RA2 можно
подключить этот же излучатель без буквы «х» или отечественный пьезоизлуча-
тель типа ЗП1. При срабатывании будильника на этот вывод подаются импуль-
сы с частотой около 1 кГц с прерыванием через четверть секунды.
Рис. 66. Часы с индикацией двумя светодиодами
Длительности свечения светодиодов при различных установках (режимах)
следующие:
• желтый и красный светодиоды мигают длинными импульсами — индика-
ция часов;
• желтый и красный светодиоды мигают короткими импульсами — индика-
ция минут; -
• желтый — короткий, красный — длинный — индикация минут будильника;
• желтый — длинный, красный — короткий — индикаций часов будильника.
Короткая вспышка длится четверть секунды, а длинная — половину секун-
ды. Перерывы между вспышками светодиода одного цвета равны длительности
вспышек. Цикл индикации заканчивается паузой (светодиоды выключены) с
длительностью, равной двум секундам.
Логически, для лучшего запоминания, длительность горения светодиодов
легко отождествить с режимом установки, если смотреть на желтый светодиод.
Если вспышки короткие, значит, идет индикация минут (минуты короче ча-
сов!). Если вспышки желтого светодиода длинные, значит, идет индикация ча-
сов. При различных вспышках желтого и красного светодиодов — идет индика-
ция установки будильника.
260
Часы-будильник
Работа с часами. После подачи напряжения питания необходимо установить
часы и будильник. Оба светодиода загорятся на две секунды. Программно часы
переходят в режим установки часов. Можно делать установку часов. Для смены
режима установки и индикации необходимо одновременно нажать красную и
желтую кнопки на время не менее одной секунды. При этом оба светодиода
включатся. После смены режима достоверная информация будет считываться
не ранее, чем через один цикл индикации. Это связано с тем, что нажатие кно-
пок можно сделать в любой момент, и, либо регистры индикации могут быть
заполнены значениями предыдущей установки, и продолжать индикацию, либо
будет заканчиваться индикация предыдущей установки. Желательно нажимать
две кнопки во время двухсекундных пауз. Порядок смены режимов установки
следующий: установка часов — установка минут — установка часов будильни-
ка — установка минут будильника — установка часов...
Выключение установки произойдет автоматически через пять минут после
последнего нажатия двух кнопок. Каждое нажатие красной или желтой кноп-
ки на время не менее одной секунды прибавляет единицу в выбранный ре-
гистр и увеличивает число вспышек светодиода на единицу. Некорректная
установка исправляется. При нажатии красной или желтой кнопки загорается
соответствующий светодиод. Кнопки установки желательно нажимать во вре-
мя двухсекундных пауз в начале и в конце каждого цикла. Нулевое значение
будильника не отслеживается, поэтому если вам временно не нужен будиль-
ник, то его значения необходимо установить равными нулю (светодиоды уста-
новки часов и минут не горят). Соответственно, если вам необходимо звуча-
ние будильника в ноль часов, ноль минут, то необходимо установить будиль-
ник на одну минуту раньше или позже этого времени. Один раз установленное
значение будильника будет звонить ежедневно. Время звучания будильника
равно одной минуте. Выключить будильник можно, если перейти в режим
установки одновременным нажатием двух кнопок. Установки делать необяза-
тельно. Через пять минут индикация установок выключится. Прервать звуча-
ние будильника также можно, если нажать кнопку индикации часов и удержи-
вать ее некоторое время.
Индикация значений часов может производиться нажатием кнопки SA3 в
любое необходимое время. Во время установки часов и минут также можно
включить индикацию часов. Это удобно, если, устанавливая минуты, необхо-
димо «вспомнить» установленные часы, не прибегая к смене индикации при
помощи нажатия двух кнопок. Если нажать кнопку индикации часов во время
установки значений будильника, то индикация часов не включится. Текущее
значение часов и минут высвечивается попеременно и не влияет на установки.
Паузы длительностью, равной двум секундам, при индикации времени нет.
Максимальное время считывания значений часов будет при 19 часах 59 минут.
Это время будет равняться 16 секундам. Бели во время индикации значений
часов (но не установки!) будут случайно нажаты красная или желтая кнопки,
установка не изменится. Случайное нажатие одной кнопки во время транспор-
тировки также не изменит сделанных ранее установок. Поскольку после вклю-
чения напряжения питания часы уже идут, то при установке минут число
вспышек может стать йа единицу больше, чем устанавливаемое.
Такие часы хорошо оформить в виде брелока с питанием от трех миниатюр-
ных дисковых элементов (часовых). Потребляемый ток без индикации составля-
261
Устройства с индикацией точечными светодиодами
ет 0,15 мА, а во время индикации определяется потребляемым током применен-
ных светодиодов. Использовать их удобно тем, кто работает в ночное время.
; ЧАСЫ С БУДИЛЬНИКОМ.
/ ИНДИКАЦИЯ И УСТАНОВКА ДВУМЯ СВЕТОДИОДАМИ.
; УСТАНОВКА - ДВУМЯ КНОПКАМИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = CHASIKI.ASM
; ВЕРСИЯ: 01.03.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
______________CONFIG 3FF0H
• ======================================
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 .КГЦ.
; СПЕЦ. РЕГИСТРЫ.
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
F.SR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.'
ОПРЕДЕЛЕНИЕ ВХОДОВ.
=============================================
RB0 > ВХОД КРАСНОЙ КНОПКИ.
RB1 > ВХОД ЖЕЛТОЙ КНОПКИ.
RB2 > ВЫХОД, КРАСНЫЙ СВЦТОДИОД.
RB3 > ВЫХОД, ЖЕЛТЫЙ СВЕТОДИОД.
RB4 > ВХОД КНОПКИ ИНДИКАЦИИ ЧАСОВ.
RA0 > ВЫХОД ПРЯМОЙ (1).
RA1 > ВЫХОД ИНВЕРСНЫЙ (0).
RA2 > ВЫХОД С ЧАСТОТОЙ 0,8 КГЦ И ПАУЗОЙ 1/4 СЕК.
=================================
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ.
SCO EQU 10H /РЕГИСТР ИНДИКАЦИИ ЖЕЛТОГО ДИОДА.
SCI EQU 11H /РЕГИСТР ИНДИКАЦИИ КРАСНОГО ДИОДА
COUS EQU 12H /СЧЕТЧИК МИЛЛИСЕКУНД. - i
:===============================:
ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG.
============================================
262
Часы-будильник
FLAG EQU 14H
; 0-> ВЫКЛЮЧЕНИЕ ИНДИКАЦИИ УСТАНОВОК.
; 1-> ФЛАГ- СЧЕТЧИКА МИЛЛИСЕКУНД.
; 2-> НАЖАТА КРАСНАЯ КНОПКА.
; 3-> НАЖАТА ЖЕЛТАЯ КНОПКА.
; 4-> НАЖАТЫ ОБЕ КНОПКИ.
; 5-> УСТАНОВКА ЧАСОВ БУДИЛЬНИКА.
; 6-> УСТАНОВКА МИНУТ.
л 1 । 1 Г- 1 УСТАНОВКА ЧАСОВ.
FLAG1 EQU 15Н
; 0-> ФЛАГ СМЕНЫ ИНДИКАЦИИ СВЕТОДИОДА
; 1-> ФЛАГ УСТАНОВКИ ПОРТА.
О-ПОРТ УСТАНОВКИ ВЫКЛЮЧЕН,
1-ПОРТ УСТАНОВКИ ВКЛЮЧЕН.
; 2-> ФЛАГ ДВУХ СЕКУНД (ПАУЗА).
; 3-> МИНУТ БУДИЛЬНИКА.
; 4-> ИНДИКАЦИЯ ЧАСОВ.
/ . 5-> ФЛАГ 1 СЕКУНДЫ.
==== = ===3========== = ===SS====S3 = ===
ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
===зх=г=г===з==========з=5=5==га===заг=ХЕ=з===
BUL EQU 16H /ЕДИНИЦЫ ЧАСОВ БУДИЛЬНИКА.
вин EQU 17H /ДЕСЯТКИ ЧАСОВ БУДИЛЬНИКА.
MIL EQU 18H /ЕДИНИЦЫ МИНУТ ЧАСОВ.
MIH EQU 19H /ДЕСЯТКИ МИНУТ ЧАСОВ.
SEC1 EQU 1AH /СЧЕТЧИК СЕКУНД. .
MINI EQU 1BH /СЧЕТЧИК МИНУТ.
DSMH EQU 1CH /ВРЕМЕННЫЙ РЕГИСТР ДЛЯ ПЕРЕКОДИРОВКИ
LSMH EQU 1DH /ВРЕМЕННЫЙ РЕГИСТР, МЛАДШИЙ РАЗРЯД.
HOU1 EQU 1EH ;СЧЕТЧИК ЧАСОВ.
HOL EQU 1FH /ЕДИНИЦЫ ЧАСОВ.
HOH EQU 20H /ДЕСЯТКИ ЧАСОВ.
HSMH EQU 21H /ВРЕМЕННЫЙ, СТАРШИЙ РАЗРЯД.
BUDO EQU 22H /СУММА ЧАСОВ И МИНУТ БУДИЛЬНИКА.
BUD EQU 23H /БУДИЛЬНИК В ЧАСАХ.
MIN5 EQU 24H /РЕГИСТР СЧЕТА 5 МИНУТ.
BUML EQU 25H /ЕДИНИЦЫ МИНУТ БУДИЛЬНИКА.
BUMH EQU 26H /ДЕСЯТКИ МИНУТ БУДИЛЬНИКА.
BUDM EQU 27H /ОБЩИЙ МИНУТ БУДИЛЬНИКА.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 28H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 29H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR_TEMP EQU 2AH /ВРЕМЕННЫЙ ДЛЯ FSR.
COUZ EQU 2BH /СЧЕТЧИК РЕЖИМОВ.
1. ПУСК. ,
==;; = === = =;□ = ===== = ==»=
ORG О
GOTO INIT
263
Устройства с индикацией точечными светодиодами
ORG 4
GOTO CONST
;₽=================
; 2. ИНИЦИАЛИЗАЦИЯ.
t
INIT BSF MOVLW STATUS,RP0 В' 00000010' /ПЕРЕХОДИМ В БАНК 1. /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К= =8 =.. .10
MOVWF OPTION_REGA80H ; MOVLW B'lOlOtJOOO' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMRO. MOVWF INTCON MOVLW В'00000000' /ВСЕ НА ВЫХОД. MOVWF TRISAA80H MOVLW B'00010011' /RBO, RBI, RB4-HA ВХОД, ОСТАЛЬНЫЕ - ВЫХОД. MOVWF TRISBA80H BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0. CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ. CLRF FLAG1 CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ., CLRF SCO CLRF SCI CLRF HQL CLRF HOH CLRF BUL CLRF BUH' •CLRF MIL CLRF MIH CLRF COUS CLRF COUZ CLRF MIN5 CLRF LSMH CLRF HSMH CLRF SEC1 CLRF MINI CLRF HOUl CLRF BUDO CLRF PORTB CLRF PORTA BSF COUZ,0 /СЧЕТЧИК РЕЖИМА В 1. BSF FLAG, 7, /УСТАНОВИМ ФЛАГ ИНДИКАЦИИ ЧАСОВ. BSF PORTA,1 /ВКЛЮЧИМ ИНВЕРСНЫЙ ВЫХОД. GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ. • ============================ / 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.,
KEY
MOVFW PORTB /ЗАГРУЖАЕМ ПОРТ ДЛЯ ОПРЕДЕЛЕНИЯ
BCF STATUS,2 /НАЖАТЫХ ДВУХ КНОПОК.
ANDLW B'00000011' /СРАВНИВАЕМ.
BTFSC STATUS,2 /ЕСЛИ РАВНО 0,
BSF FLAG,4 /УСТАНАВЛИВАЕМ ФЛАГ СМЕНЫ РЕЖИМА.
BTFSC FLAG,4 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
BCF FLAG,0 /СБРОСИМ ФЛАГ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ
BTFSC FLAG,4 /ЕСЛИ ФЛАГ СМЕНЫ РЕЖИМА УСТАНОВЛЕН
264
Часы-будильник
GOTO KOZ ;СМЕНИМ ФЛАГИРЕЖИМОВ:
BTFSS PORTB,0 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
BSF FLAG,2 /УСТАНОВИМ ФЛАГ.
BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN
BTFSC FLAG,2 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
GOTO UST /ИДЕМ НА УСТАНОВКУ.
BTFSS PORTB,1 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
BSF FLAG,3 /УСТАНОВИМ ФЛАГ.
BTFSS. PORTB,1 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN
BTFSC FLAG,3 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
GOTO UST /ИДЕМ НА УСТАНОВКУ.
BCF * FLAG1,5
RETURN /ЕСЛИ НИЧЕГО НЕ НАЖАТО, ВОЗВРАЩАЕМСЯ.
KBUH
BSF FLAG,5 /УСТАНОВИМ ФЛАГ ЧАСОВ БУДИЛЬНИКА.
BCF FLAG,6 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ.
BCF FLAG,7 9
BCF FLAG1,3 9
.RETURN
KMIN
BSF FLAG,6 /УСТАНОВИМ ФЛАГ УСТАНОВКИ МИНУТ.
BCF FLAG,5 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ.,
BCF FLAG,7 9
BCF FLAG1,3 9 '
RETURN
KHO
BSF FLAG,7 /УСТАНОВИМ ФЛАГ УСТАНОВКИ ЧАСОВ.
BCF FLAG,5 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ.
BCF FLAG,6 9
BCF FLAG1,3 9
RETURN
KBUM
BSF FLAG1,3 /УСТАНОВИМ ФЛАГ МИНУТ БУДИЛЬНИКА.
BCF FLAG,5 /ОСТАЛЬНЫЕ ФЛАГИ СБРОСИМ.
BCF FLAG,6 9
BCF FLAG,7 9
RETURN
KOZ
BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN
BTFSS PORTB,1 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЁТ.
RETURN
CLRF SCO /ОБНУЛИМ РЕГИСТРЫ
CLRF SCI /ИНДИКАЦИИ.
BCF FLAG1,0 /СБРОСИМ ФЛАГ СМЕНЫ СВЕТОДИОДА.
BCF FLAG,4 /СБРОСИМ ФЛАГИ.
BCF FLAG,3 /ЧТОБЫ НЕ СРАБОТАЛА УСТАНОВКА
BCF FLAG,2 /ПРИ НЕОДНОВРЕМЕННОМ ОТПУСКАНИИ КНОПОК
CLRF MIN5 /ЧТОБЫ ПРОДЛИТЬ УСТАНОВКИ НА 5 МИНУТ.
BCF FLAG1,5 /ФЛАГ 1 СЕКУНДЫ.
BCF STATUS,0 /ЧТОБЫ МЛАДШИЙ РАЗРЯД БЫЛ НУЛЕВЫМ.
RLF COUZ,1 /+1 В СЧЕТЧИК РЕЖИМА.
265
Устройства с индикацией точечными светодиодами
BTFSC COUZ,4 . /ЕСЛИ ЕДИНИЦА УЖЕ ДОШЛА ДО 4 РАЗРЯДА
GOTO KOZO /ПОЙДЕМ НА УСТАНОВКУ.
BTFSC COUZ,0 /ЕСЛИ ЕДИНИЦА,
GOTO KHO . /УСТАНОВИМ ФЛАГ ЧАСОВ.
BTFSC COUZ,1 /ЕСЛИ ЕДИНИЦА,
GOTO KMIN /УСТАНОВИМ ФЛАГ МИНУТ.
BTFSC COUZ,2 /ЕСЛИ ЕДИНИЦА,
GOTO KBUH /УСТАНОВИМ ФЛАГ ЧАСОВ БУДИЛЬНИКА.
BTFSC COUZ,3 /ЕСЛИ ЕДИНИЦА,
GOTO KBUM /УСТАНОВИМ ФЛАГ МИНУТ БУДИЛЬНИКА.
RETURN
кого CLRF COUZ / обнулим' И
BSF COUZ,0 /УСТАНОВИМ НУЛЕВОЙ РАЗРЯД.
GOTO KHO /УСТАНОВИМ ФЛАГ ЧАСОВ.
• ===== ========== ========= ====================================
; 4. ТАБЛИЦА ПЕРЕКОДИРОВКИ РАЗРЯДА ДЕСЯТКОВ В БИНАРНЫЙ КОД.
? ===’= ========== ========= ====================================
DECBIN
ADDWF PC, 1 г
RETLW B’00000000’ /0
RETLW B'OOOOIOIO’ /10
'RETLW B'00010100' /20
4 RETLW B’00011110’ /30
RETLW B'00101000' /40
RETLW B’00110010' ;50
• = = = == :=========: x=======s ======================================
; 5. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
• ==== :=========: ========= 'S=se===sss=sssssessasssssasssBsSBSsesss===sss=
UST3 CLRF BUDO /ОБНУЛИМ ОБЩИЙ РЕГИСТР.
MOVFW BUL /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ ЧАСОВ
MOVFW BUH /И ДЕСЯТКОВ ЧАСОВ БУДИЛЬНИКА
MOVWF SCI /В РЕГИСТРЫ ИНДИКАЦИИ.
CALL DECBIN /ДЛЯ УДОБСТВА СРАВНЕНИЯ,
ADDWF BUL, 0 /ПЕРЕКОДИРУЕМ ЗНАЧЕНИЯ
MOVWF BUD /В ОДИН РЕГИСТР.
ADDWF BUDM,0 /ПРИБАВИМ ОБЩЕЕ ЗНАЧЕНИЕ МИНУТ.
MOVWF RETURN BUDO /ПЕРЕПИШЕМ В ОБЩИЙ РЕГИСТР.
USTM3
CLRF BUDO /ОБНУЛИМ ОБЩИЙ РЕГИСТР.
MOVFW BUML /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ МИНУТ
MOVFW BUMH /И ДЕСЯТКОВ МИНУТ БУДИЛЬНИКА.
MOVWF SCI /В РЕГИСТРЫ ИНДИКАЦИИ.
CALL DECBIN /ДЛЯ УДОБСТВА СРАВНЕНИЯ,
ADDWF BUML,0 /ПЕРЕКОДИРУЕМ ЗНАЧЕНИЯ
MOVWF BUDM /В ОДИН РЕГИСТР. ’
ADDWF BUD, 0 /ПРИБАВИМ ОБЩЕЕ ЗНАЧЕНИЕ ЧАСОВ.
MOVWF RETURN BUDO , /ПЕРЕПИШЕМ В ОБЩИЙ РЕГИСТР.
266
Часы-будильник
USTW3 1
BTFSS PORTB,4 /ЕСЛИ ИНДИКАЦИЯ ЧАСОВ ВКЛЮЧЕНА,
CALL UST2S /ВЫДЕРЖИМ ПАУЗУ, РАВНУЮ 2 СЕКУНДАМ.
MOVFW MIL ;ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ МИНУТ
MOVFW MIH /И ДЕСЯТКОВ МИНУТ
MOVWF SCI /В РЕГИСТРЫ ИНДИКАЦИИ.
BTFSS RETURN PORTB,4 /ЕСЛИ ИДЕТ ИНДИКАЦИЯ, /ПЕРЕКОДИРОВКИ НЕТ.
MOVFW MIH
CALL DECBIN /ДЛЯ УДОБСТВА СРАВНЕНИЯ,
ADDWF MIL, 0 /ПЕРЕКОДИРУЕМ ЗНАЧЕНИЯ
USTH3 MOVWF RETURN MINI /В ОДИН РЕГИСТР.
BTFSS PORTB, 4 /ЕСЛИ ИНДИКАЦИЯ ЧАСОВ ВКЛЮЧЕНА,
CALL UST2S /ВЫДЕРЖИМ ПАУЗУ, РАВНУЮ 2 СЕКУНДАМ.
MOVFW HOL /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ ЧАСОВ
MOVFW HOH /И ДЕСЯТКОВ ЧАСОВ
MOVWF SCI /В РЕГИСТРЫ ИНДИКАЦИИ.
BTFSS RETURN PORTB,4 /ЕСЛИ ИДЕТ ИНДИКАЦИЯ, /ПЕРЕКОДИРОВКИ НЕТ.
MOVFW HOH /ДЛЯ УДОБСТВА СРАВНЕНИЯ,
CALL DECBIN /ПЕРЕКОДИРУЕМ ЗНАЧЕНИЯ
ADDWF HOL, 0 /В ОДИН РЕГИСТР.
UST2S MOVWF RETURN HOU1 /ЧАСЫ: ЕДИНИЦЫ + ДЕСЯТКИ.
BTFSC RETURN FLAG1,2 /ЖДЕМ УСТАНОВКИ ФЛАГА 2 СЕКУНД.
UST256 GOTO UST2S /ЗАЦИКЛИВАЕМСЯ НА 2 СЕКУНДЫ.
MOVLW .10 /ЧИСЛО В РЕГИСТРЕ '
SUBWF SCO, 0 /НЕ ДОЛЖНО БЫТЬ
BTFSC STATUS, 0 /БОЛЕЕ 9.
CALL UST2OO /ИНАЧЕ ОБНУЛИМ РЕГИСТРЫ ИНДИКАЦИИ.
MOVLW .10 /ЧИСЛО В РЕГИСТРЕ
SUBWF SCI, 0 /НЕ ДОЛЖНО БЫТЬ
UST2OO BTFSS RETURN STATUS, 0 /БОЛЕЕ 9.
CLRF SCO ;ОБНУЛИМ
CLRF RETURN SCI /РЕГИСТРЫ ИНДИКАЦИИ.
; 6. ЗАПИСЬ УСТАНОВОК В РЕГИСТРЫ.
BTFSS FLAG Г, 5 /УСТАНОВКА РАЗРЕШЕНА, ЕСЛИ ПРОШЛА 1 СЕК..
RETURN
BTFSC FLAG,б /ЕСЛИ УСТАНОВЛЕН ФЛАГ,
267
Устройства с индикацией точечными светодиодами
GOTO USTM /ИДЕМ УСТАНАВЛИВАТЬ МИНУТЫ.
BTFSC FLAG,7 /ЕСЛИ УСТАНОВЛЕН ФЛАГ,
GOTO USTH /ИДЕМ УСТАНАВЛИВАТЬ ЧАСЫ.
BTFSC FLAG,5 /ЕСЛИ УСТАНОВЛЕН ФЛАГ,
GOTO USTBH /УСТАНОВИМ ЧАСЫ БУДИЛЬНИКА.
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTBML /УСТАНОВИМ ЕДИНИЦЫ МИНУТ БУДИЛЬНИКА.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO USTBMH /УСТАНОВИМ ДЕСЯТКИ МИНУТ БУДИЛЬНИКА.
RETURN
; 7. УСТАНОВКА МИНУТ БУДИЛЬНИКА.
USTBML
BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF BUML,1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF BUML,0 /
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1,.ЕСЛИ 10 И БОЛЕЕ.
CLRF BUML ;ОБНУЛИМ РЕГИСТР.
GOTO USTM3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
USTBMH
INCF BUMH,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5.
MOVLW .6 /
SUBWF BUMH,0
BTFSC STATUS,0 /С = 1, ЕСЛИ 6 И БОЛЕЕ.
CLRF BUMH /ОБНУЛИМ ДЕСЯТКИ ЧАСОВ.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO USTM3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
; 8. УСТАНОВКА ЧАСОВ БУДИЛЬНИКА.
USTBH
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTBHO /УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO USTBH1 /УСТАНОВИМ ДЕСЯТКИ ЧАСОВ.
RETURN
'USTBH0
BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF BUL, 1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД.
USTBH2
MOVFW BUH /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -002H /РАВНЫ 2,
SKPNZ
CALL USTBH4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ ИДЕТ УСТАНОВКА ДЕСЯТКОВ ЧАСОВ
RETURN /ВЕРНЕМСЯ.
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF BUL, 0
BTFSC STATUS, 0 /С.(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF BUL /ОБНУЛИМ РЕГИСТР.
268
Часы-будильник
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ ИНДИКАЦИИ.
USTBH4 MOVFW BUL /ЕСЛИ ЕДИНИЦЫ ЧАСОВ
BCF STATUS,0 /РАВНЫ 4,
ADDLW -004Н /А ДЕСЯТКИ ЧАСОВ РАВНЫ 2,
SKPNC CLRF RETURN BUL /ОБНУЛИМ ЕДИНИЦЫ ЧАСОВ БУДИЛЬНИКА.
USTBH1 INCF BUH,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
CALL USTBH2 /ПРОВЕРИМ НА 24 ЧАСА, ЧТОБЫ СБРОСИТЬ ЕДИНИЦЫ.
MOVLW . З /
SUBWF вин,о
BTFSC STATUS,0 /С = 1, ЕСЛИ 3 И БОЛЕЕ.
CLRF BUH /ОБНУЛИМ РЕГИСТР.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ ИНДИКАЦИИ.
; 9. УСТАНОВКА МИНУТ.
USTM
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTW0 /УСТАНОВИМ ЕДИНИЦЫ МИНУТ.
BTFSC FLAG,2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO RETURN USTW1 /УСТАНОВИМ ДЕСЯТКИ МИНУТ.
USTWO BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF MIL,1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД.
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF MIL,0 /
BTFSC STATUS,0 /С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF MIL /ОБНУЛИМ РЕГИСТР.
GOTO USTW3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ ИНДИКАЦИИ.
USTW1 INCF М1Н,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 5.
MOVLW .6
SUBWF М1Н,0
BTFSC STATUS,0 /С = 1, ЕСЛИ 3 И БОЛЕЕ.
CLRF MIH /ОБНУЛИМ РЕГИСТР.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO USTW3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
• =====
; 10. УСТАНОВКА ЧАСОВ.
:===== SSSSSSSSS ssssssssssssssssse ssssssseessssssssssssssse
USTH BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTH0 /УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG*, 2 /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
СОТО RETURN USTH1 /УСТАНОВИМ ДЕСЯТКИ ЧАСОВ.
269
Устройства с индикацией точечными светодиодами
USTHO
BCF FLAG,3 /СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF HOL, 1 /ПРИБАВИМ ЕДИНИЦУ В МЛАДШИЙ РАЗРЯД.
USTH2
MOVFW НОН /ЕСЛИ ДЕСЯТКИ ЧАСОВ
ADDLW -002Н /РАВНЫ 2,
SKPNZ
CALL USTH4 /ПРОВЕРИМ ЕДИНИЦЫ ЧАСОВ.
BTFSC FLAG,2 /ЕСЛИ ИДЕТ УСТАНОВКА ДЕСЯТКОВ ЧАСОВ,
RETURN /ВЕРНЕМСЯ.
MOVLW .10 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 9.
SUBWF HOL, 0
BTFSC STATUS,0 /С (ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF HOL /ОБНУЛИМ РЕГИСТР.
GOTO USTH3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
USTH4
MOVFW HOL /ЕСЛИ ЕДИНИЦЫ ЧАСОВ
BCF STATUS,0 /РАВНЫ 4,
ADDLW -004Н /А ДЕСЯТКИ ЧАСОВ РАВНЫ 2,
SKPNC
CLRF HOL /ОБНУЛИМ ЕДИНИЦЫ ЧАСОВ.
RETURN
USTH1
INCF НОН,1 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 2.
CALL USTH2 /ПРОВЕРИМ НА 24 ЧАСА, ЧТОБЫ СБРОСИТЬ ЕДИНИЦЫ
MOVLW .3
SUBWF нон,о
BTFSC STATUS,0 /С = 1, ЕСЛИ 3 И БОЛЕЕ.
CLRF НОН ;ОБНУЛИМ РЕГИСТР.
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ.
GOTO USTH3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
• sssssasssssssssssssasssssssssssssssssssssssssK&sssssssasss
; 11. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
• =ххх as as=ss ss ss ss ss ss =ss ss as==ss ss ж
СОМР
BTFSS PORTB,4 /ЕСЛИ НАЖАТА КНОПКА ИНДИКАЦИИ ЧАСОВ,
GOTO HOKL /ИДЕМ НА ИНДИКАЦИЮ ЧАСОВ.
BTFSS FLAG,0 /ЕСЛИ ФЛАГ ВЫКЛЮЧЕНИЯ УСТАНОВКИ НУЛЕВОЙ,
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ УСТАНОВОК.
BCF FLAG,2 /СБРОСИМ ФЛАГИ КНОПОК.
BCF FLAG,3
BSF PORTB,2 /ПОГАСИМ ИНДИКАЦИЮ УСТАНОВОК.
BSF ( PORTB,3
TSTF ’ BUDO /ЕСЛИ В РЕГИСТРАХ НУЛИ,
BZ COMW /БУДИЛЬНИК НЕ РАБОТАЕТ, СРАВНЕНИЯ НЕТ.
MOVFW HOUl /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF BUD, 0 /СО ЗНАЧЕНИЕМ ЧАСОВ БУДИЛЬНИКА.
BNZ COMW /ЕСЛИ ОНИ НЕ РАВНЫ, ВЫКЛЮЧИМ ВЫХОДЫ.
MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF BUDM,0 /СО ЗНАЧЕНИЕМ МИНУТ БУДИЛЬНИКА.
BZ COM /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧИМ ЗУММЕР.
COMW
BCF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
270
Часы-будильник
BSF GOTO PORTA,1 ;ВКЛЮЧЕН.
COMP ;HA СРАВНЕНИЕ.
сом
BSF PORTA,0 ;ВЫХОД ВКЛЮЧЕН.
BCF PORTA,1 ;ВЫКЛЮЧЕН.
BTFSC cous,o /ЕСЛИ 1/4 СЕКУНДЫ НЕЧЕТНАЯ,
GOTO COMP /СИГНАЛ НЕ ЗВУЧИТ.
COMWO
BTFSC cous,o /ЕСЛИ 1/4 СЕКУНДЫ УЖЕ СТАЛА НЕЧЕТНОЙ
GOTO COMP /СИГНАЛ НЕ ЗВУЧИТ.
BCF PORTA,2 /ВЫКЛЮЧИМ ВЫХОД.
NOP /ДЛЯ ВЫРАВНИВАНИЯ
NOP /ДЛИТЕЛЬНОСТИ
NOP /ИМПУЛЬСА И ПАУЗЫ.
NOP /ПЕРИОД РАВЕН 1,22 МС « 0,8 КГЦ.
BSF PORTA,2 /ВКЛЮЧИМ ВЫХОД.
GOTO COMWO /ПОВТОРИМ.
• SSXXXXXXSXXXXXBCSCSSaSISXSXSSXX
; 12. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
• sasxaxx=xsx=xsxxs«s=xxxx==xs
zoo
BTFSC FLAG,0 /ЕСЛИ УСТАНОВКА ВЫКЛЮЧЕНА,
GOTO COMP /ИДЕМ НА СРАВНЕНИЕ.
BTFSS PORTB,0 /ЕСЛИ КРАСНАЯ КНОПКА НАЖАТА,
BCF PORTB,3 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS PORTB,1 /ЕСЛИ ЖЕЛТАЯ КНОПКА НАЖАТА,
BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS FLAG1,2 /ЕСЛИ 2 СЕКУНДЫ ЕЩЕ НЕ ПРОШЛО,
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,0 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,1 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ
GOTO z6o , /ВЕРНЕМСЯ.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BSF PQRTB,2 /ПОГАСИМ СВЕТОДИОДЫ.
BSF PORTB,3
BTFSC FLAG,5 /ЕСЛИ ФЛАГ ВКЛЮЧЕН,
GOTO BUHKL /ИДЕМ СВЕТИТЬ ЧАСЫ БУДИЛЬНИКА.
BTFSC FLAG,6 /ЕСЛИ ФЛАГ ВКЛЮЧЕН,
GOTO MUKL /ИДЕМ СВЕТИТЬ МИНУТЫ. '
BTFSC FLAG,7 /ЕСЛИ ФЛАГ ВКЛЮЧЕН,
GOTO HOKL /ИДЕМ СВЕТИТЬ ЧАСЫ.
sxs=xxx=xxxxxxxxxxxsxsxsxxsaxxxsxxxxxx=s=x=x
; 13. ИНДИКАЦИЯ УСТАНОВКИ МИНУТ БУДИЛЬНИКА.
♦ х==х==х= sxxxxx₽==x sxx=xass=x sb sb ss ss ax ss ss =s ax sb =s ss ss==ax
BUMKL BTFSC FLAG1,0 /ЕСЛИ ЖЕЛТЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO ZH /ИДЕМ СВЕТИТЬ КРАСНЫЙ.
ZL BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР
TSTF SCO * /ЕСЛИ ЗНАЧЕНИЕ
SKPNZ GOTO ZLO /РЕГИСТРА НУЛЕВОЕ, /ИДЕМ ПРОВЕРЯТЬ СТАРШИЙ РЕГИСТР.
271
Устройства с индикацией точечными светодиодами
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO ZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 ;ЕСЛИ ЕДИНИЦА,
GOTO ZOL
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА ИНДИКАЦИИ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
ZOL
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА УЖЕ НУЛЕВОЙ,
GOTO ZOL1
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
ZOL1
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCO /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
SKPZ
GOTO BUMKL /НАЧНЕМ СНАЧАЛА.
ZLO >
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO ZOL /УСТАНОВКИ ПОРТА.
BSF FLAG1,0 /УСТАНОВИМ ФЛАГ КРАСНОГО ДИОДА.
GOTO ZOO /ВЫДЕРЖКА 2 СЕК. И ПРОВЕРКА НАЖАТЫХ КНОПОК.
ZH
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCI /ЕСЛИ РЕГИСТР >НУЛЕВОЙ,
SKPNZ
GOTO ZHO /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,,
GOTO ZOH * /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА/
BTFSS COUS,1 /ЕСЛИ ЕДИНИЦА,
GOTO ZOH
DECF SCI, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА ИНДИКАЦИИ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ ДИОД.
ZOH
BTFSC COUS, 1 /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO ZOH1
BSF PORTB,3 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
ZOH1
CALL UST25& /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCI' /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
SKPZ
GOTO BUMKL /НАЧНЕМ СНАЧАЛА.
ZHO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO ZOH /УСТАНОВКИ ПОРТА.
CALL USTM3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ ЖЕЛТОГО ДИОДА.
' BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
272
Часы-будильник
г- S У
• =xsx:=x :=sxxx=xsss3s==ssx=sssxs=ssxxxxxxxxxx=x=
' ; 14. ИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ БУДИЛЬНИКА.
• xsx=xxxs=s=xxxx: SXXXBXxXXXXXXXXxXXXXXSaSXXXXXXX
.’ BUHKL BTFSC FLAG1,0 /ВСЁ АНАЛОГИЧНО ИНДИКАЦИИ МИНУТ. /ЕСЛИ ЖЕЛТЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO UZH /ИДЕМ СВЕТИТЬ КРАСНЫЙ.
; UZL -
BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCO /ЕСЛИ НЕТ УСТАНОВКИ,
SKPNZ /РЕГИСТР НУЛЕВОЙ,
GOTO UZLO /ИДЕМ ПРОВЕРЯТЬ КРАСНЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO UZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,1 /ЕСЛИ НЕ ЕДИНИЦА,
GOTO UZOL /ЖДЕМ СМЕНЫ ЗНАЧЕНИЯ БИТА.
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
UZOL BTFSC COUS,1 /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO BSF UZOL1 PORTB,2 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
UZOL1 CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF 1 SCO /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА НЕ РАВНО НУЛЮ,
SKPZ GOTO BUHKL /НАЧНЕМ СНАЧАЛА. ,
UZLO BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO UZOL /УСТАНОВКИ ПОРТА.
BSF FLAG1, 0 /УСТАНОВИМ ФЛАГ КРАСНОГО ДИОДА.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
UZH
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCI /ЕСЛИ РЕГИСТР НУЛЕВОЙ,
SKPNZ GOTO UZHO /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO UZOH /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ ЕДИНИЦА,
GOTO UZOH
DECF SC1,1 /ВЫЧТЕМ ЕДИНИЦУ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ ДИОД.
UZOH *
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЁТЧИКА НУЛЕВОЙ,
GOTO UZOH1
BSF PORTB,3 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG*1, 1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
UZOH1
CALL UST256 . /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР..
273
Устройства с индикацией точечными светодиодами
TSTF SCI /ЕСЛИ ЗНАЧЕНИЕ РЕГИСТРА HE РАВНО НУЛЮ,
SKPZ
GOTO BUHKL /НАЧНЕМ СНАЧАЛА.
UZHO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO UZOH /УСТАНОВКИ ПОРТА.
CALL UST3 . /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ ЖЕЛТОГО ДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
• 3ssssxssasxssxsssxsxs=xs=xx=xssssxs=:xssxssssssss:xsxss
; 15. ИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ.
• sassxxKss:xasaa=sasssxsxsx=xsxsasasB=3B32
HOKL
BTFSC FLAG1,0 /ЕСЛИ КРАСНЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO HOZH /ИДЕМ СВЕТИТЬ ЖЕЛТЫЙ.
BTFSS PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
CALL USTH3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
HOKLO
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCI /НЕТ УСТАНОВКИ,
SKPNZ /ЕСЛИ РЕГИСТР НУЛЕЦРЙ,
GOTO HOZLO /ИДЕМ СВЕТИТЬ ЖЕЛТЫЙ ДИОД.
HOZL
BTFSS COUS,1 /ЕСЛИ НЕ ЕДИНИЦА,
GOTO HOZL /ЖДЕМ, ПОКА БУДЕТ 1,
DECF SC1,1 /ИНАЧЕ ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ ВЫХОД.
HOZOL
BTFSC COUS,1 /ЕСЛИ РАЗРЯД ЕЩЕ НЕ НУЛЕВОЙ,
GOTO HOZOL /ЖДЕМ, ПОКА БУДЕТ 0.
BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ ВЫХОД.
GOTO HOKLO /ПРОВЕРИМ РЕГИСТР НА НОЛЬ.
HOZLO
BSF FLAG1,0 /УСТАНОВИМ ФЛАГ СМЕНЫ ДИОДА.
BTFSC PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
GOTO ZOO /ПРОПУСТИМ.
HOZH
BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCO /ЕСЛИ РЕГИСТР РАВЕН НУЛЮ,
SKPNZ
GOTO HOZHO /ЗАВЕРШАЕМ ИНДИКАЦИЮ.'
HOZH1
BTFSS COUS,1 /ЕСЛИ ЕЩЕ НЕ ЕДИНИЦА,
GOTO HOZH1 /ЗАЦИКЛИВАЕМСЯ.
DECF SCO,1 /ВЫЧТЕМ ЕДИНИЦУ.
BCF PORTB,2 /ВКЛЮЧИМ СВЕТОДИОД.
HO ZOH
BTFSC COUS,1 /ЕСЛИ РАЗРЯД НЕ НУЛЕВОЙ,
GOTO HOZOH /ИДЕМ ЖДАТЬ ОБНУЛЕНИЯ.
BSF PORTB,2 /ИНАЧЕ ВЫКЛЮЧИМ СВЕТОДИОД.
GOTO HOZH /ПРОВЕРИМ РЕГИСТР НА НОЛЬ.
274
Часы-будильник
HOZHO
BTFSC PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
CALL USTH3 /НЕТ ПЕРЕУСТАНОВКИ РЕГИСТРОВ ИНДИКАЦИИ
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ СМЕНЫ ДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BTFSC PORTB,4 /ЕСЛИ НЕ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА,
• sesss&xsxsxsssxsxsxs^ssxsxsxssxsxsxsxsssxss: =xss3X3==xssxsxs==:==&:
; 16. ИНДИКАЦИЯ УСТАНОВКИ МИНУТ.
• зЕаЕхеаззехввхвхвхвахеаЕвхвхвяввхвхвгехвхваЕа&хвзехвхвхвхвяЕЯЕХВЯЕа&вхваЕаг
MUKL BTFSC FLAG1,O /ЕСЛИ, КРАСНЫЙ ДИОД УЖЕ ВЫСВЕТИЛИ,
GOTO MOZH /ИДЕМ СВЕТИТЬ ЖЕЛТЫЙ.
BTFSS PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
CALL USTW3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
MOZL
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ СВЕТОДИОД.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
«> TSTF SCI /ЕСЛИ НЕТ УСТАНОВКИ,
SKPNZ GOTO MOZLO - /РЕГИСТР НУЛЕВОЙ, /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAG1,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO MOZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ НЕ ЕДИНИЦА,
GOTO MOZOL /ЖДЕМ СМЕНЫ ЗНАЧЕНИЯ БИТА.
DECF SC1,1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.,
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
MOZOL
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА УЖЕ НУЛЕВОЙ,
GOTO MOZOL1
BSF PORTB,3 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ ВЫЧИТАНИЯ.
MOZOL1 CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCI /ЕСЛИ РЕГИСТР ЕЩЕ НЕ ПУСТОЙ,
SKPZ GOTO MOZL /НАЧНЕМ СНАЧАЛА.
MOZLO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO MOZOL /УСТАНОВКИ ПОРТА.
BSF FLAG1,0 /УСТАНОВИМ ФЛАГ СМЕНЫ СВЕТОДИОДА.
BTFSC PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
GOTO ZOO /ПРОПУСТИМ ПАУЗУ,
MOZH
BSF PORTB,3 /ВЫКЛЮЧИМ КРАСНЫЙ диод.
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCO /ЕСЛИ РЕГИСТР НУЛЕВОЙ,
SKPNZ GOTO MOZHO /ЗАВЕРШАЕМ ИНДИКАЦИЮ.
BTFSC FLAG1, 1. /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO MOZOH * /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ НЕ ЕДИНИЦА,
GOTO MOZOH /ЖДЕМ СМЕНЫ ЗНАЧЕНИЯ БИТА.
275
Устройства с индикацией точечными светодиодами
DECF SCO, 1 /ВЫЧТЕМ ЕДИНИЦУ.
BSF FLAG1,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ СВЕТОДИОД.
MOZOH
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА УЖЕ НУЛЕВОЙ^
GOTO MOZOH1
BSF, PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ СВЕТОДИОД.
BCF FLAG1,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
MOZOH1
CALL UST256 /ПРОВЕРИМ НА ПЕРЕПОЛНЕНИЕ РЕГИСТР.
TSTF SCO /ЕСЛИ РЕГИСТР ЕЩЕ НЕ ПУСТОЙ,
SKPZ
GOTO MOZH /НАЧНЕМ' СНАЧАЛА.
MOZHO
BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO MOZOH /УСТАНОВКИ ПОРТА.
BTFSC PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
CALL USTW3 /ПРОПУСТИМ ПЕРЕУСТАНОВКУ РЕГИСТРОВ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ СМЕНЫ СВЕТОДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BTFSC PORTB,4 /ЕСЛИ ВКЛЮЧЕНА ИНДИКАЦИЯ ЧАСОВ,
GOTO ZOO /ПРОПУСТИМ ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
GOtO HOKL /НА ИНДИКА1&0 ЧАСОВ.
• sxsxsscaxxsxs:: at ss ss sss xe ss XE ss ss as XE xs xs a XE s = XE xs XE XE as as XE ss as эх xz s* ss sz xx XE ss sz xs ss ss ss===ss = as:
; 17. ПП. ПЕРЕКОДИРОВКИ С БИНАРНОГО В 2-10 КОД (2-_-2-10).
• xsxsszxxexaxs: sxxxxxxxxx: ек&хахвва&ваввавхахвааавХав&ххххвххх
BINDECH
MOVLW .10 /10 >w.
BDH
BSF STATUS,0 /УСТАНОВКА БИТА "С" РЕГИСТРА STATUS.
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.,
BNC BINDECL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH /ПОВТОРИТЬ.
BINDECL
MOVF DSMH,0
ADDLW .10 /Ю+W >W.
MOVWF LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN 7
• xzsxxxxxxxxxx: 35 SS s SS SS SS s SB SB ss: =х==хххах=:х=====:хх==х====аахх=======:=а==;====
/ 18. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
• axxxxsxscaxxasxa=xx: ax ss=xx a as ss ss ss ss ? xxxxsxxsaaaxxxxaxsxsxssxasaSsxaaxasKxxxxaaxax
CONST -
MOVWF W_TEMP ' /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ НИ
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP /
MOVFW . FSR /FSR. ' ' х :
MOVWF FSR_TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
BTFSC FLAG1,5 /ОПРОС КНОПОК ЧЕРЕЗ 1 СЕК. /
CALL KEY /ПРОВЕРИМ КНОПКИ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ.
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
276
Часы-будильник
MOVWF STATUS / STATUS,
MOVFW FSR TEMP
MOVWF FSR /FSR,
; MOVLW .230
;MOVWF TMRO
MOVFW W_TEMP ;W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
«sass see
; 19. ЧАСЫ.
SI -
INCF COUS,1 ;+1 В СЧЕТЧИК.
BTFSS COUS,0 /ЕСЛИ НОЛЬ,
BSF FLAG,1 /УСТАНОВИМ ФЛАГ В 1.
BTFSC COUS,0 ;ЕСЛИ ЕДИНИЦА,
BCF FLAG,1 /УСТАНОВИМ ФЛАГ В 0.
MOVLW .4 /ЕСЛИ УЖЕ 1 СЕКУНДА, ,
SUBWF COUS,0 /4 х 1/4 СЕК.
SKPZ Г
RETURN
CLRF COUS /ОБНУЛИМ СЧЕТЧИК.
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,F /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSC SEC1,0 /ЕСЛИ НУЛЕВОЙ БИТ ЕДИНИЦА,
BSF FLAG1,5 /УСТАНОВИМ ФЛАГ 1 СЕКУНДЫ.
BTFSC SEC1,1 /ЕСЛИ ПЕРВЫЙ БИТ ЕДИНИЦА,
BSF FLAG1,2 /УСТАНОВИМ ФЛАГ 2 СЕКУНД. .
RETURN /
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
CALL M5M /УВЕЛИЧИМ СЧЕТЧИК 5 МИНУТ.
M1M
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH ,•-59.
BZ Hl Л /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MINI,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /ДЛЯ ПЕРЕКОДИРОВКИ.
MIU
MOVWF DSMH /W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF MIL ,-W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF MIH ,-W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ
CLRF HSMH ./ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH /И МЛ.
RETURN
Hl
CLRF MINI * /ОБНУЛЯЕМ РЕГИСТР МИНУТ.
CLRF MIL
CLRF MIH f
277
Устройства с индикацией точечными светодиодами
Н1Н MOVFW HOU1 ;ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H ,•-23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
MOVFW HOU1 ,-HOUl >W, ДЛЯ ПЕРЕКОДИРОВКИ.
H1U
MOVWF DSMH ;W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW . LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF HOL /W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF HOH ,-W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ
CLRF HSMH /ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF RETURN LSMH /И МЛ. f
ню CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF HOL /ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF RETURN HOH /ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
М5М INCF MIN5,1 /+1 В РЕГИСТР 5 МИНУТ.
MOVLW .5 /ЕСЛИ УЖЕ 5 МИНУТ,
SUBWF SKPNZ MIN5,0
BSF FLAG,0 /УСТАНОВИМ ФЛАГ ВЫКЛЮЧЕНИЯ ИНДИКАЦИИ.
SKPNZ CLRF RETURN MIN5 /И ОБНУЛИМ СЧЕТЧИК.
END
Будильник с установкой времени
Этот будильник подаст звуковой сигнал через время, которое будет установ-
лено при помощи двух кнопок и двух светодиодов.
Красный светодиод высвечивает устанавливаемое время в единицах часов.
Желтый светодиод высвечивает устанавливаемое время в десятках минут. Уста-
новка в часах возможна до 15 часов, а установка десятков минут возможна
до 5. Фактически будильник является таймером, но алгоритм работы его про-
граммы такой же, как у автомата суточного включения нагрузки, с уменьшен-
ным числом установок и сравнением двух параметров.
Схема будильника, показанная на рис. 67, отличается от схемы часов
(рис. 66) только отсутствием кнопки индикации времени. Поэтому все, сказан-
ное выше о схеме часов, будет верно и для схемы будильника. Оба светодиода
мигают короткими вспышками, длительностью 1/4 секунды с такой же длите-
льностью пауз. Длительность паузы между циклами равна двум секундам.
Работать с будильником очень просто. После включения напряжения пита-
ния будильник переходит в режим ожидания. В этом режиме не работают
278
*
Будильник с установкой времени
« - ,
DD1
Рис. 67. Будильник с установкой времени
«внутренние» часы и нет сравнения установок. После нажатия одновременно
двух кнопок и удержания их не менее двух секунд будет мигать желтый свето-
диод. В то время, когда кнопки нажаты, горят оба светодиода. Будильник пе-
рейдет в режим индикации и установки. Подсчитайте время, через которое вам
необходимо включить будильник. Например, установка делается в 20 часов.
Необходимо включить будильник в 6 часов 30 минут. Значит, необходимо уста-
новить в будильнике значение 10 часов 30 минут. То есть необходимо устано-
вить десять миганий красного светодиода и три мигания желтого светодиода.
Каждое нажатие кнопки прибавляет одно мигание соответствующего светодио-
да. Для того чтобы включить будильник после выполнения установки, необхо-
димо нажать две кнопки одновременно. Каждое нажатие двух кнопок изменяет
режим работы будильника на противоположный. Если во время работы буди-
льника переключиться на режим установки, значения уже отсчитанных часов и
минут сбросятся. При следующем переходе в режим будильника счет начнется
сначала. «
После того как пройдет установленное в будильнике время, включится зум-
мер. Время звучания зуммера равно одной минуте. После этого будильник пе-
реходит в режим ожидания и для его последующего включения требуется пере-
установка. Если вам необходимо включать сигнал ежедневно в одно и то же
время, необходимо установить значение часов равное 12. После включения
зуммера необходимо дважды нажать две кнопки одновременно, запустив, та-
ким образом, будильник снова.
; БУДИЛЬНИК.
; ИНДИКАЦИЯ УСТАНОВКИ ДВУМЯ СВЕТОДИОДАМИ.
; ЕДИНИЦЫ ЧАСОВ'УСТАНАВЛИВАЮТСЯ ДО 15 (КРАСНАЯ КНОПКА),
; ДЕСЯТКИ МИНУТ УСТАНАВЛИВАЮТСЯ ДО 5 (ЖЕЛТАЯ КНОПКА).
; УСТАНОВКА - ДВУМЯ КНОПКАМИ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
279
Устройства с индикацией точечными светодиодами
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
/ п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = BUDAK.ASM
; ВЕРСИЯ: 25.02.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
#INCLUDE P16F84A.INC
____CONFIG 3FF0H
• sxxsses:s:s:=:x=:s:s:s:=x=:s:s:s:=:s:s:s:s:s:x==As:s:==s:=s:=
/ ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ.
• aasxssxsassxssxssxsasxsaassxssxssxssxssxsassxssxssxssxssxsssxsasxsassxsaxsxssasxssxssxsasxsss
; СПЕЦ. РЕГИСТРЫ.
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H ;OPTION (RP0=l).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB fiQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
•xxSscxxasasxxxsasxxcxsxxsaxxxxaxxxxxxaxxxxxxx
; ОПРЕДЕЛЕНИЕ ВХОДОВ.
RB0 > ВХОД КРАСНОЙ КНОПКИ.
RB1 > ВХОД ЖЕЛТОЙ КНОПКИ.
; RB2 > ВЫХОД, ; RB3 > ВЫХОД, / RA0 > ВЫХОД г RA1 > ВЫХОД / RA2 > ВЫХОД • axasSxaxxxxxx: КРАСНЫЙ СВЕТОДИОД. ЖЕЛТЫЙ СВЕТОДИОД. ПРЯМОЙ (1). ИНВЕРСНЫЙ (0). 1 КГЦ ЧЕРЕЗ 1/4 СЕК. sxx=xxxx=xxxxxesxxxxx
; ОПРЕДЕЛЕНИЕ • SSSSSESESSSESSSSSXSSSSSS SCO EQU SCI EQU COUS ' EQU РЕГИСТРОВ. zxxxxxxxxxxxxxxxxxxsx , ЮН - / РЕГИСТР ИНДИКАЦИИ ЖЕЛТОГО ДИОДА. 11Н /РЕГИСТР ИНДИКАЦИИ КРАСНОГО ДИОДА. 12Н /СЧЕТЧИК МИЛЛИСЕКУНД. в st = ах а ах ах as ха xs=as ax a? ax ax as ax ss as xa ss a=as ax xa ss=xe as ss
/ ОПРЕДЕЛЕНИЕ •хххххххвхяхх: БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG. B=B=sBsB=sBaaaaaasxsxa==sBasBsBx:aaxsBSBx:aaaa
FLAG EQU 14H
; 0-> ВЫКЛЮЧЕНИЕ ИНДИКАЦИИ.
; 1-> ФЛАГ СЧЕТЧИКА МИЛЛИСЕКУНД. '
; 2-> НАЧАТА КРАСНАЯ КНОПКА.
; 3-> НАЖАТА ЖЕЛТАЯ КНОПКА.'
; 4-> НАЖАТЫ ОБЕ КНОПКИ.
; 5-> ФЛАГ РАВЕНСТВА.
♦хх=хххххихахх=хх=х=и==ххя=ххх=
5
280
Будильник с установкой времени
FLAGl EQU 15Н
0-> О-УСТАНОВКА ЖЕЛТОГО СВ. ДИОДА,
1-УСТАНОВКА КРАСНОГО СВ. ДИОДА'.
1-> ФЛАГ УСТАНОВКИ ПОРТА. - /
О-ПОРТ УСТАНОВКИ ВЫКЛЮЧЕН,
1-ПОРТ УСТАНОВКИ ВКЛЮЧЕН.
2-> ФЛАГ ДВУХ СЕКУНД*(ПАУЗА).
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
UMNO EQU 16H /УСТАНОВКИ ДЕСЯТКОВ МИНУТ.
UHO EQU 17H /УСТАНОВКИ ЕДИНИЦ ЧАСОВ.
MIL EQU 18H /ЕДИНИЦЫ МИНУТ.
MIH EQU 19H /ДЕСЯТКИ МИНУТ.
SEC1 EQU 1AH /СЧЕТЧИК СЕКУНД.
MINI EQU 1BH /СЧЕТЧИК МИНУТ.
DSMH EQU 1CH /ВРЕМЕННЫЙ РЕГИСТР ДЛЯ ПЕРЕКОДИРОВКИ
LSMH EQU 1DH /ВРЕМЕННЫЙ РЕГИСТР, МЛАДШИЙ РАЗРЯД.
HOUl EQU 1EH /СЧЕТЧИК ЧАСОВ.
H_LOW EQU 1FH /ЕДИНИЦЫ ЧАСОВ.
H_HIGH EQU 20H /ДЕСЯТКИ ЧАСОВ.
HSMH EQU 21H /ВРЕМЕННЫЙ, СТАРШИЙ РАЗРЯД.
; ВРЕМЕННЫЕ РЕГИСТРЫ.
•W_TEMP EQU 28H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 29H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR TEMP EQU 2AH /ВРЕМЕННЫЙ ДЛЯ FSR.
; 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW В'00000010' /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=8 =...10
' MOVWF OPTION_REGA80H /
MOVLW В'10100000* /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0.
MOVWF INTCON
MOVLW В'00000000' /ВСЕ НА ВЫ^ОД.
MOVWF TRISAA80H
MOVLW В'00000011' /RB0, RBI-НА ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG , /СБРАСЫВАЕМ ВСЕ ФЛАГИ
.CLRF FLAGl
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCO
281
Устройства с индикацией точечными светодиодами
CLRF CLRF BSF CLRF CLRF CLRF CLRF CLRF CLRF CLRF CLRF BSF GOTO SCI UMNO UMNO,0 UHO LSMH HSMH SEC1 MINI HOU1 PORTB PORTA PORTA,0 ZOO . » 1 /ИДЕМ НА ИНДИКАЦИЮ.
; 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.
• ===== ======== :=========== :====
KEY KOZ KOZO MOVFW BCF ANDLW BTFSC BSF BT^SC GOTO BTFSS BSF BTFSS RETURN BTFSC CALL BTFSS BSF BTFSS RETURN BTFSC CALL RETURN BTFSS RETURN BTFSS. RETURN BCF BCF BCF BCF BTFSS GOTO BCF BCF RETURN BSF RETURN PORTB STATUS,2 B'00000011’ STATUS,2 FLAG,4 FLAG,4 KOZ PORTB,0 FLAG,2 PORTB,0 FLAG,2 UST PORTB,1 FLAG,3 PORTB,1 FLAG,3 UST PORTB,0 PORTB,1 FLAG,4 FLAG,3 FLAG,2 FLAG1,2 FLAG,0 KOZO FLAG,0 FLAG,5 FLAG,0 /ЗАГРУЖАЕМ ПОРТ ДЛЯ ОПРЕДЕЛЕНИЯ /НАЖАТЫХ ДВУХ КНОПОК. /СРАВНИВАЕМ. /ЕСЛИ РАВНО 0, /УСТАНАВЛИВАЕМ ФЛАГ СМЕНЫ РЕЖИМА. /ЕСЛИ ФЛАГ СМЕНЫ РЕЖИМА УСТАНОВЛЕН, /СМЕНИМ ФЛАГИ РЕЖИМОВ. /ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА, /УСТАНОВИМ ФЛАГ. /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. /ЕСЛИ ФЛАГ УСТАНОВЛЕН, /ИДЕМ НА УСТАНОВКУ. /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА, /УСТАНОВИМ ФЛАГ. /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. /ЕСЛИ ФЛАГ УСТАНОВЛЕН, /ИДЕМ НА УСТАНОВКУ. /ЕСЛИ НИЧЕГО НЕ НАЖАТО, ВОЗВРАЩАЕМСЯ. /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ. /СБРОСИМ ФЛАГИ. /ЧТОБЫ НЕ СРАБОТАЛА УСТАНОВКА /ПРИ НЕОДНОВРЕМЕННОМ ОТПУСКАНИИ КНОПОК. /ФЛАГ 2 СЕКУНД. /ИЗМЕНЯЕМ ЗНАЧЕНИЕ ФЛАГА /НА ПРОТИВОПОЛОЖНОЕ. /РАЗРЕШАЕМ СЧЕТ. /СБРОСИМ ФЛАГ РАВЕНСТВА И РАЗРЕШИМ СЧЕТ /РАЗРЕШАЕМ ИНДИКАЦИЮ.
282
Будильник с установкой времени
! звжжжжжжжжжжжжжжжжжжжжжжжжжжжжэвявжж
; 4. ЗАПИСЬ УСТАНОВОК В РЕГИСТРЫ.
• з=Е»=====!х====а:зЕх:»х:авзвавггггзяг
UST
BTFSS FLAG,0 /ЕСЛИ ИНДИКАЦИЯ ЗАПРЕЩЕНА,
RETURN ;ВЕРНЕМСЯ.
BTFSS FLAG1,2 ;УСТАНОВКА РАЗРЕШЕНА, ЕСЛИ ПРОШЛО 2 СЕК.
RETURN
BTFSC FLAG,3 /ЕСЛИ НАЖАТА ЖЕЛТАЯ КНОПКА,
GOTO USTO ;УСТАНОВИМ ДЕСЯТКИ МИНУТ.
BTFSC FLAG,2 •;ЕСЛИ НАЖАТА КРАСНАЯ КНОПКА,
GOTO USTH ;УСТАНОВИМ ЕДИНИЦЫ ЧАСОВ.
RETURN
• жаржжжжжжжжжжжж ь вкжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; 5. УСТАНОВКА ДЕСЯТКОВ МИНУТ. '
жжжжжжжжжжж жж жжжжжжцвжжжжжжжжжжг:
USTO
BCF FLAG,3 ;СБРОСИМ ФЛАГ ЖЕЛТОЙ КНОПКИ.
INCF UMNO,1 /ПРИБАВИМ ЕДИНИЦУ В РАЗРЯД.
MOVLW .6 /РАЗРЯД УСТАНАВЛИВАЕТСЯ ДО 6.
SUBWF UMNO,0
BTFSC STATUS, 0 ;С(ПЕРЕНОС) = 1, ЕСЛИ 10 И БОЛЕЕ.
CLRF UMNO /ОБНУЛИМ РЕГИСТР.
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
•ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ ЖЖЖЖЖЖЖЖЖ8ВЖЖЖЖЖЖЖЖЖЖЖ9=ЖЖЖЖЖЖЖЖЖЖЖ
; 6. УСТАНОВКА ЕДИНИЦ ЧАСОВ.
•жжжжжжжжжжжжжз гж^жжжжжж жжгхжжжжжжжжжжжжжжжжжжЖжжжжжжжжжжжж
USTH
BCF FLAG,2 /СБРОСИМ ФЛАГ КРАСНОЙ КНОПКИ. е
MOVLW .15 f
SUBWF UHO, 0
BTFSC STATUS, 0 /С = 1, ЕСЛИ 15 И БОЛЕЕ.
GOTO USTHO
INCF UHO, 1 /ПРИБАВИМ ЕДИНИЦУ В РАЗРЯД.
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ.
USTHO /
CLRF UHO /ОБНУЛИМ РЕГИСТР.
• жжжжжж жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
; 7. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
•жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
UST3
MOVFW UMNO /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ДЕСЯТКОВ МИНУТ.
MOVFW UHO /АНАЛОГИЧНО ДЛЯ ЧАСОВ
MOVWF SCI f
RETURN
жжжжж^жжжжжжжжжжжжжжжжжжжжжжжжжж
8. СРАВНЕНИЕ, ЗНАЧЕНИЙ РЕГИСТРОВ.
СОМРОТ
BTFSS PORTB, 0 /ЕСЛИ КРАСНАЯ КНОПКА НАЖАТА,
BCF PORTB,3 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS PORTB,1 /ЕСЛИ ЖЕЛТАЯ КНОПКА НАЖАТА,
BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.
283
Устройства с индикацией точечными светодиодами
BTFSS GOTO FLAG,1 ; COMPOT ; :ЕСЛИ 0,25 СЕКУНДЫ ЕЩЕ HE ПРОШЛО, :ВЕРНЕМСЯ.
СОМР BTFSC FLAG,0 , :ЕСЛИ ФЛАГ ВЫКЛЮЧЕНИЯ УСТАНОВКИ НУЛЕВОЙ,
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ УСТАНОВОК.
BCF FLAG,2 , ;СБРОСИМ ФЛАГИ КНОПОК.
BCF FLAG,3
BSF. PORTB,2 , ;ПОГАСИМ ИНДИКАЦИЮ УСТАНОВОК.
BSF PORTB,3 ,
MOVFW HOUl ;СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF UHO, 0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BNZ COM /ЕСЛИ ОНИ РАВНЫ, ВЫКЛЮЧИМ ВЫХОДЫ.
MOVFW MIH ;СРАВНИМ ЗНАЧЕНИЕ
SUBWF UMNO,0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COMW /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧИМ ВЫХОДЫ.
сом BCF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
BSF PORTA,1 ;ВКЛЮЧЕН.
GOTO COMPOT /НА СРАВНЕНИЕ.
COMW BSF PORTA,0 /ВЫХОД ВКЛЮЧЕН.
BCF PORTA,1 /ВЫКЛЮЧЕН. -
BSF FLAG,5
- BTFSg COUS,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА НЕЧЁТНЫЙ,
GOTO COMPOT ;СИГНАЛ' НЕ ЗВУЧИТ.
COMWO BTFSC COUS,1 /ЕСЛИ РАЗРЯ УЖЕ СТАЛ НЕЧЕТНЫМ,
' GOTO COMP /СИГНАЛ НЕ ЗВУЧИТ.
BCF PORTA,2 /ВЫКЛЮЧИМ ВЫХОД.
NOP /ДЛЯ ВЫРАВНИВАНИЯ
NOP /ДЛИТЕЛЬНОСТИ
1 NOP /ИМПУЛЬСА И ПАУЗЫ.
NOP /ПЕРИОД РАВЕН 1,22 МС = 0,8 КГЦ.
BSF PORTA,2 /ВКЛЮЧИМ ВЫХОД.
GOTO COMWO /ПОВТОРИМ.
1 II 1 <0 II 1 • II 1 II »=:===================== ВЫБОР РЕЖИМА ИНДИКАЦИИ. । ч
zoo
BTFSS FLAG,0 /ЕСЛИ УСТАНОВКА ВЫКЛЮЧЕНА,
GOTO COMPOT /идем на сравнение.
BTFSS PORTB,0 /ЕСЛИ КРАСНАЯ КНОПКА НАЖАТА,
BCF PORTB,3 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS PORTB,1 /ЕСЛИ ЖЕЛТАЯ КНОПКА НАЖАТА,
- BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS FLAGl,2 /ЕСЛИ 2 СЕКУНДЫ ЕЩЕ НЕ ПРОШЛО,
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,0 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ.
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,1 /ЕСЛИ КНОПКА НАЖАТА, УСТАНОВКИ НЕТ.
GOTO ZOO /ВЕРНЕМСЯ.
BCF FLAGl,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BSF PORTB,2 /ПОГАСИМ СВЕТОДИОДЫ.
284
Будильник с установкой времени
BSF PORTB, 3 ;
/ 10. ИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ.
HOKL
BTFSC GOTO FLAGl,0 HOZH /ЕСЛИ ЖЕЛТЫЙ ДИОД УЖЕ .ВЫСВЕТИЛИ, /ИДЕМ СВЕТИТЬ КРАСНЫЙ.
HOZL
BSF PORTB,3 ;ВЫКЛЮЧИМ КРАСНЫЙ СВЕТОДИОД.
TSTF SCO /ЕСЛИ НЕТ УСТАНОВКИ,
t SKPNZ ;РЕГИСТР НУЛЕВОЙ,
GOTO HOZLO /ИДЕМ ПРОВЕРЯТЬ КРАСНЫЙ РЕГИСТР.
BTFSC FLAGl,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO HOZOL /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS.O /ЕСЛИ ЕДИНИЦА,
GOTO HOZOL
DECF SCO,1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BSF FLAGl,1 ^УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,2 /ВКЛЮЧИМ ЖЕЛТЫЙ ВЫХОД.'
HOZOL
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO HOZOL1 f
BSF PORTB, 2 /ВЫКЛЮЧИМ выход. .
BCF FLAGl,1 /СБРОСИМ фла!1 вычитания.
HOZOL1
TSTF SCO /ЕСЛИ РЕГИСТР.УЖЕ ПУСТОЙ,
SKPZ
GOTO HOKL /НАЧНЕМ СНАЧАЛА.
HOZLO
BTFSC FLAGl,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO HOZOL /УСТАНОВКИ ПОРТА.
BSF FLAGl,0 /УСТАНОВИМ ФЛАГ КРАСНОГО ДИОДА.
BCF FLAGl,2 /СБРОСИМ ФЛАГ 2 СЕКУНД. ♦
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
HOZH
BSF PORTB,2 /ВЫКЛЮЧИМ ЖЕЛТЫЙ ДИОД.
TSTF SCI /ЕСЛИ РЕГИСТР НУЛЕВОЙ,
SKPNZ
GOTO HOZHO /ИДЕМ ПРОВЕРЯТЬ ЖЕЛТЫЙ РЕГИСТР.
BTFSC FLAGl,1 /ЕСЛИ ВЫЧИТАНИЕ СДЕЛАНО,
GOTO HOZOH /ИДЕМ ЖДАТЬ СБРОСА ФЛАГА.
BTFSS COUS,0 /ЕСЛИ ЕДИНИЦА,
GOTO HOZOH
DECF SCI, 1 /ВЫЧТЕМ ЕДИНИЦУ.
BSF FLAGl,1 /УСТАНОВИМ ФЛАГ ВЫЧИТАНИЯ.
BCF PORTB,3 /ВКЛЮЧИМ КРАСНЫЙ ДИОД.
HOZOH
BTFSS FLAG,1 /ЕСЛИ РАЗРЯД СЧЕТЧИКА НУЛЕВОЙ,
GOTO HOZOH1
BSF PORTB,3 /ВЫКЛЮЧИМ ВЫХОД.
BCF FLAGl,1 /СБРОСИМ ФЛАГ УСТАНОВКИ.
HOZOH1 4»
TSTF SCI /ЕСЛИ РЕГИСТР УЖЕ ПУСТОЙ,
SKPZ /ПРОПУСКАЕМ.
285
Устройства с индикацией точечными светодиодами
GOTO HOKL /НАЧНЕМ СНАЧАЛА.
HOZHO BTFSC FLAG1,1 /ЖДЕМ, ПОКА СБРОСИТСЯ ФЛАГ
GOTO HOZOH /УСТАНОВКИ ПОРТА.
CALL UST3 /ПЕРЕУСТАНОВИМ РЕГИСТРЫ ИНДИКАЦИИ.
BCF FLAG1,0 /УСТАНОВИМ ФЛАГ ЖЕЛТОГО ДИОДА.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
GOTO ZOO /НА ИНДИКАЦИЮ НАЧАЛА ЦИКЛА.
• =S== = = K = = =! = X=S= ========== ==================================
; 11. ПП. ПЕРЕКОДИРОВКИ C БИНАРНОГО В 2-10 КОД (2-_-2-10).
•ssss========== ========== ==================================
BINDECH
MOVLW .10 /10 >W. ‘
BDH
BSF STATUS,0 /УСТАНОВКА’БИТА "С" РЕГИСТРА STATUS
SUBWF DSMH,1 /ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDECL /ПЕРЕХОД ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 /ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH /ПОВТОРИТЬ.
BINDECL
• MOVF DSMH,0 ,
ADDLW .10 ,-10+W >W.
MOVWF LSMH /ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN Г
; 12. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS TEMP / ч
MOVFW FSR ; FSR.
MOVWF FSR TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
BTFSC FLAG1,2 /ОПРОС КНОПОК ЧЕ^ЕЗ 2 СЕК.
CALL KEY ' /ПРОВЕРИМ КНОПКИ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
BCF INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ.
MOVFW STATUS TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /•STATUS,
MOVFW FSR_TEMP
MOVWF FSR /FSR,
MOVFW W_TEMP ,-W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
• =============: =====
/ 13. СЧЕТ.-
====
SI
INCF COUS,1 /+1 . В СЧЕТЧИК.
BTFSS COUS,0 /ЕСЛИ РАЗРЯД НУЛЕВОЙ,
BSF FLAG,1 - /УСТАНОВИМ ФЛАГ.
BTFSC COUS,0 /ЕСЛИ РАЗРЯД ЕДИНИЧНЫЙ,
BCF FLAG,1 /СБРОСИМ ФЛАГ.
MOVLW .4 /ЕСЛИ УЖЕ 1 СЕКУНДА,
286
Будильник с установкой времени
SUBWF COUSrO /4 x 0,25,
SKPZ 9
RETURN
CLRF COUS /ОБНУЛИМ СЧЕТЧИК.
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,F /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSC SEC1,1 /ЕСЛИ РАЗРЯД ЕДИНИЦА,
BSF FLAG1,2 /УСТАНОВИМ ФЛАГ 2 СЕКУНД.
RETURN 9
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
BTFSC FLAG,5 /ЕСЛИ УЖЕ БЫЛО РАВЕНСТВО,
GOTO HOO /ИДЕМ НА ОБНУЛЕНИЕ.
BTFSC FLAG,0 /ПОКА ИДЕТ УСТАНОВКА,
GOTO HOO /МИНУТЫ И ЧАСЫ НЕ СЧИТАЕМ.
M1M ч
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MIN1,F /ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
M1U
MOVWF DSMH ;W >DSMH.
CALL BINDECH /ПЕРЕХОД В ПП.
MOVFW LSMH /LSMH >W ВРЕМЕННЫЙ.
MOVWF MIL /W > MIL В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ.
MOVFW HSMH /HSMH >W ВРЕМЕННЫЙ.
MOVWF MIH ,-W > MIH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ
CLRF HSMH /ОБНУЛЕНИЕ СТ..РЕГ. ПП.
CLRF LSMH /И МЛ.
RETURN
Hl
CLRF MINI /ОБНУЛЯЕМ РЕГИСТР МИНУТ.
H1H к
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -OFH 15.
BZ HOO. /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НОО.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
RETURN
HOO
CLRF HOU1 /ОБНУЛЯЕМ ЧАСЫ,
CLRF MIL /ЕДИНИЦЫ МИНУТ,
CLRF MIH /ДЕСЯТКИ МИНУТ,
CLRF MINI /ОБЩИЙ'РЕГИСТР МИНУТ.
RETURN
END
• sssssssssss&sssssssssssssss:
/SSSSSSSSSSSSSSSS SS
287
Устройства с индикацией точечными светодиодами
Походный будильник
*
Этот будильник удобно использовать, если вам необходимо ежедневное зву-
чание зуммера в одно и то же время.
Алгоритм работы программы будильника повторяет алгоритм программы
автомата суточного включения нагрузки для второго варианта. Из программы
удалено сравнение на время выключения устройства. Схема будильника, пока-
занная на рис. 68, отличается от схемы автомата только наличием дополните-
льного выхода RA2. К этому выходу подключается пьезоизлучатель типа ЗП1.
Звуковые излучатели типа НСМ1206х можно подключить к прямому или ин-
версному выходу.
DD1
Рис. 68. Походный будильник
Работа с будильником
Допустим, вам необходимо ежедневное включение будильника в 6 часов.
Для этого необходимо нажать кнопку в 6 часов. Кнопку необходимо удержи-
вать не менее двух секунд. И все. Если со временем будет большой уход звуча-
ния зуммера от установленного времени, снова нажмите кнопку в необходи-
мое время. Будильник сделает внутреннюю переустановку. В данном случае не
имеют значения «показания» внутренних часов. Время звучания излучателя
равно одной минуте. Частота звучания излучателя равна 0,8 кГц с перерывом в
одну секунду.
Кнопку установки желательно разместить так, чтобы доступ к ней был за-
труднен, чтобы нельзя было случайно нажать эту кнопку во время эксплуата-
ции.
; БУДИЛЬНИК.
; БЕЗ ИНДИКАЦИИ.
; УСТАНОВКА ОДНОЙ КНОПКОЙ.
288
Походный будильник
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = BUDIK.ASM
; ВЕРСИЯ: 23.02.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
__CONFIG 3FF0H
ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ.
СПЕЦ. РЕГИСТРЫ.
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMRO.
OPTIONR EQU 81H ;OPTION (RP0=l).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 0 6H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
ОПРЕДЕЛЕНИЕ ВХОДОВ.
RB0 > ВХОД КНОПКИ.
RA0 > ВЫХОД ПРЯМОЙ (1).
RA1 > ВЫХОД ИНВЕРСНЫЙ (0) .
RA2 > ВЫХОД 1 КГЦ ЧЕРЕЗ 1 СЕК.
ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРА FLAG.
FLAG EQU ЮН
0-> НАЖАТОЙ КНОПКИ.
2-> 2 СЕКУНД.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
SEC1 EQU 1AH /СЧЕТЧИК СЕКУНД.
MINI EQU 1BH /СЧЕТЧИК МИНУТ.
HOUl EQU 1CH /СЧЕТЧИК ЧАСОВ.
HWK EQU 1DH /ВРЕМЯ ВКЛЮЧЕНИЯ В ЧАСАХ.
MWK EQU 1EH /ВРЕМЯ ВКЛЮЧЕНИЯ В МИНУТАХ
W Зак. 2418
289
/
Устройства с индикацией точечными светодиодами
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 20H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 21H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR TEMP EQU 22H /ВРЕМЕННЫЙ ДЛЯ FSR.
/ 1. ПУСК.
ORG О
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
• ====== ============
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'000003,00' ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=32 =.. . .100.
MOVWF OPTION_REGa80H Г
MOVLW B'10100000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0.
MOVWF INTCON •
MOVLW B'00000000' /ВСЕ НА ВЫХОД.
MOVWF TRISAA80H
MOVLW B'00000001' /RBO-НА ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H /
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ.
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF HWK
CLRF MWK
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF PORTB
CLRF PORTA
BSF PORTA,0
GOTO COMP НА СРАВНЕНИЕ.
/ 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.
KEY
BTFSS PORTB,0 /ЕСЛИ НАЖАТА КНОПКА,
BSF FLAG,0 /УСТАНОВИМ ФЛАГ. *
BCF FLAG,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN
BTFSC FLAG,0 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
CALL UST /ИДЕМ НА УСТАНОВКУ.
RETURN /ВОЗВРАЩАЕМСЯ.
290
Походный будильник
4. УСТАНОВКА
UST
BCF FLAG,0 ;СБРОСИМ ФЛАГ КНОПКИ.
MOVFW HOUl ;ЗНАЧЕНИЕ ЧАСОВ
MOVWF HWK /В РЕГИСТР ЧАСОВ ВКЛЮЧЕНИЯ
MOVFW MINI /ЗНАЧЕНИЯ МИНУТ
MOVWF MWK /В РЕГИСТР МИНУТ ВКЛЮЧЕНИЯ
RETURN
5. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
СОМР
СОМ
COMWO
MOVFW HOUl СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF HWK,0 ; CO ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BNZ COM ЕСЛИ ОНИ НЕ РАВНЫ, ЗАЦИКЛИВАЕМСЯ,
MOVFW MINI СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF MWK,0 ; СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COMW ; ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧАЕМ ВЫХОД.
BCF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
BSF PORTA,1 /ВКЛЮЧЕН. ,
GOTO COMP /НА СРАВНЕНИЕ.
BSF PORTA,0 /ВЫХОД ВКЛЮЧЕН.
BCF PORTA,1 ;ВЫКЛЮЧЕН.
BTFSC SEC1,0 /ЕСЛИ СЕКУНДА НЕЧЕТНАЯ,
GOTO COMP /СИГНАЛ НЕ ЗВУЧИТ.
BTFSC SEC1,O /ЕСЛИ СЕКУНДА УЖЕ СТАЛА НЕЧЕТНОЙ
GOTO COMP /СИГНАЛ НЕ ЗВУЧИТ.
BCF PORTA,2 /ВЫКЛЮЧИМ ВЫХОД.
NOP /ДЛЯ ВЫРАВНИВАНИЯ
NOP /ДЛИТЕЛЬНОСТИ
NOP /ИМПУЛЬСА И ПАУЗЫ.
NOP /ПЕРИОД РАВЕН 1,22 МС = 0,8 КГЦ.
BSF PORTA,2 /ВКЛЮЧИМ ВЫХОД.
GOTO COMWO /ПОВТОРИМ.
6. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.’
CONST
MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS /STATUS,
MOVWF STATUS_TEMP
MOVFW FSR / FSR.
MOVWF FSR_TEMP
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
BTFSC FLAG,2
CALL KEY /ПРОВЕРИМ КНОПКИ.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ
BCF ’ INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ.
MOVFW STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
291
Устройства с индикацией точечными светодиодами
MOVWF MOVFW MOVWF MOVFW RETFIE STATUS FSR_TEMP FSR W_TEMP /STATUS, /FSR, ;W. /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
; 7. СЧЕТ.
S1
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,1 /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSC SEC1,1 /ЕСЛИ РАЗРЯД ЕДИНИЦА,
BSF.- FLAG,2 /УСТАНОВИМ ФЛАГ 2 СЕКУНД.
RETURN /
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
М1М
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH /-59.
, BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MINI,F /ПРИБАВИТЬ 1 В МИНУТЫ.
RETURN f
Hl /
CLRF MINI /РБНУЛЯЕМ РЕГИСТР МИНУТ.
Н1Н
MOVFW HOU1 /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H ,•-23.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ.
INCF HOU1,F /ПРИБАВИТЬ 1 В ЧАСЫ.
RETURN
ню
CLRF HOU1 /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
RETURN
END
«Песочные» часы ,
Этот минутный таймер может найти различное применение как в процедур-
ных кабинетах поликлиник, так и в быту (например на кухне).
Алгоритм работы программы таймера аналогичен алгоритму работы про-
граммы будильника с установкой времени. Отличие заключается в установке
только единиц минут. Минуты устанавливаются до 15. Установка значений ми-
нут (рис. 69) производится кнопкой SA1. Индикация установки осуществляется
светодиодом HL1.
Работа с таймером. После подачи напряжения питания схема переходит в
режим индикации. Поскольку нулевого значения установки таймера нет, то
при инициализации устанавливается значение, равное одной минуте. Поэтому
292
’Песочные» часы
DD1
единица будет индицироваться, вспышкой светодиода. Длительность вспышки
и паузы равна четверти секунды. Пауза между циклами равна двум секундам.
После установки нужного числа минут необходимо нажать кнопку SA2 «Пуск».
Таймер включен. После отсчета времени включится зуммер. Выключить зум-
мер можно нажатием кнопки «Пуск». Нажатие кнопки «Пуск» переключит
таймер в режим установки. При нажатии любой кнопки включается светодиод.
Пока кнопка нажата, горит светодиод, а реакция на кнопку будет только после
ее отпускания. То есть таймер будет включаться не в момент нажатия кнопки
«Пуск», а в момент ее отпускания. Кнопки необходимо удерживать, не менее
двух секунд.
; МИНУТНЫЕ "ПЕСОЧНЫЕ" ЧАСЫ.
; ИНДИКАЦИЯ УСТАНОВКИ ОДНИМ СВЕТОДИОДОМ.
; МИНУТЫ УСТАНАВЛИВАЮТСЯ ДО 15.
; УСТАНОВКА - ОДНОЙ КНОПКОЙ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = PESOK.ASM
; ВЕРСИЯ: 28.02.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
__CONFIG 3FF0H
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ.
; СПЕЦ. РЕГИСТРЫ.
293
Устройства с индикацией точечными светодиодами
INDF EQU OOH /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMERO EQU 01H /TMRO.
OPTIONR EQU 81H /OPTION (RPO=1).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR • EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05-H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H у НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU ОВН /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
ОПРЕДЕЛЕНИЕ ВХОДОВ.
RB0 > ВХОД КНОПКИ УСТАНОВКИ.
RB1 > ВХОД КНОПКИ СМЕНЫ РЕЖИМА.
RB2 > ВЫХОД СВЕТОДИОДА.
RA0 > выход ПРЯМОЙ (1).
RA1 > выход ИНВЕРСНЫЙ (0).
RA2 > выход 1 КГЦ ЧЕРЕЗ 1/4 СЕК.
; ОПРЕДЕЛЕНИЕ РЕГИСТРОВ.
SCO EQU 10H /РЕГИСТР ИНДИКАЦИИ ДИОДА
COUS EQU 11H /СЧЕТЧИК МИЛЛИСЕКУНД.
UMNO EQU 12H /УСТАНОВКИ МИНУТ.. *
SEC1 EQU 13H у СЧЕТЧИК СЕКУНД.
MINI EQU 14H /СЧЕТЧИК МИНУТ.
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ FLAG.
• ===================г=================5======ж=
FLAG EQU 15Н
0-> ВЫКЛЮЧЕНИЕ ИНДИКАЦИИ.
1-> ФЛАГ РЕЖИМА.
2-> НАЖАТА КНОПКА СМЕНЫ РЕЖИМА
3-> ФЛАГ 1 СЕКУНДЫ.
5-> ФЛАГ РАВЕНСТВА.
FLAG1 EQU 16H
; 0—> КНОПКИ УСТАНОВКИ.
; 2-> ФЛАГ ДВУХ СЕКУНД (ПАУЗА).
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W_TEMP EQU 17H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS_TEMP EQU 18H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ
FSR_TEMP EQU 19H /ВРЕМЕННЫЙ ДЛЯ FSR.
; 1. ПУСК.
ORG О
GOTO INIT
294
«Песочные» часы
ORG 4
GOTO CONST
2. ИНИЦИАЛИЗАЦИЯ
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000010’ /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=8 =...10
MOVWF OPTION_REGA 8 ОН /
MOVLW B’lOlOOOOO' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0.
MOVWF INTCON
MOVLW B'00000000' /ВСЕ НА ВЫХОД.
MOVWF TRISAA80H *
MOVLW B'00000011' /RBO-НА ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RPO /ПЕРЕХОДИМ В БАНК 0.
CLRF FLAG /СБРАСЫВАЕМ ВСЕ ФЛАГИ
CLRF FLAGl
CLRF TMRO /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF SCO
CLRF UMNO
CLRF SEC1
CLRF MINI
CLRF COUS
CLRF PORTB
CLRF PORTA
BSF UMNO,0 /УСТАНОВИМ 1 МИНУТУ.
BSF PORTA,1 /ВКЛЮЧИМ ИНВЕРСНЫЙ ВЫХОД.
BSF FLAG,1 /РАЗРЕШАЕМ ИНДИКАЦИЮ.
GOTO ZOO /ИДЕМ НА ИНДИКАЦИЮ.
/ 3. ПРОВЕРКА НАЖАТЫХ КНОПОК.
• === sssssssssassasassssssssssssss
KEY BTFSS PORTB,0 /ЕСЛИ НАЖАТА КНОПКА,
BSF FLAG,0 /УСТАНОВИМ ФЛАГ.
BTFSS PORTB,0 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN BTFSC FLAG,0 /ЕСЛИ ФЛАГ УСТАНОВЛЕН,
CALL UST /ИДЕМ НА УСТАНОВКУ.
BTFSS PORTB,1 /ЕСЛИ НАЖАТА КНОПКА,
BSF FLAG,2 /УСТАНОВИМ ФЛАГ КНОПКИ СМЕНЫ РЕЖИМА.
BTFSS PORTB,1 /ПОКА НАЖАТА КНОПКА, УСТАНОВКИ НЕТ.
RETURN BTFSS FLAG,2 /ЕСЛИ ФЛАГ УСТАНОВЛЕН, СМЕНИМ РЕЖИМ.
RETURN BCF FLAG,0 /СБРОСИМ ФЛАГИ КНОПОК.
BCF FLAG,2
BCF FLAG,3 /СБРОСИМ ФЛАГ 1 СЕКУНДЫ.
BTFSS FLAG,1 /ИЗМЕНЯЕМ ЗНАЧЕНИЕ ФЛАГА
GOTO KOZO /НА ПРОТИВОПОЛОЖНОЕ.
BCF FLAG,1 /РАЗРЕШАЕМ СЧЕТ.
BCF FLAG,5 /СБРОСИМ ФЛАГ РАВЕНСТВА И РАЗРЕШИМ СЧЕТ
CLRF MINI /ДЛЯ НАЧАЛА СЧЕТА С НУЛЯ.
295
Устройства с индикацией точечными светодиодами
KOZO CLRF SEC1 RETURN
BSF FLAG,1 RETURN /РАЗРЕШАЕМ ИНДИКАЦИЮ.
; 4. СРАВНЕНИЕ .ЗНАЧЕНИЙ РЕГИСТРОВ.
СОМР
BTFSC FLAG,1 /ЕСЛИ ВКЛЮЧЕН ФЛАГ ИНДИКАЦИИ,
GOTO ZOO BTFSS PORTB,1 BCF PORTB,2 BTFSC PORTB,1 BSF PORTB,2 BTFSS PORTB,1 GOTO COMP /ИДЕМ НА ИНДИКАЦИЮ. /ЕСЛИ КНОПКА НАЖАТА, /ВЫСВЕТИМ СВЕТОДИОД. /ЕСЛИ КНОПКА НЕ НАЖАТА, /ПОГАСИМ СВЕТОДИОД. /ПОКА КНОПКА НАЖАТА, /СРАВНЕНИЯ НЕТ.
f MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF UMNO,0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COMW /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧАЕМ ВЫХОД.
г BCF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
COMW BSF PORTA,1 GOTO COMP BSF . PORTA,0 BCF PORTA,1 BSF FLAG,5 BTFSC COUS,0 /ВКЛЮЧЕН. /НА СРАВНЕНИЕ. /ВЫХОД ВКЛЮЧЕН. /ВЫКЛЮЧЕН. /УСТАНОВИМ ФЛАГ РАВЕНСТВА. /ЕСЛИ 1/4 СЕКУНДЫ НЕЧЕТНАЯ,
GOTO COMP COMWO , BTFSC COUS,0 /СИГНАЛ НЕ ЗВУЧИТ. /ЕСЛИ 1/4 СЕКУНДЫ УЖЕ СТАЛА НЕЧЕТНОЙ,
GOTO COMP BCF PORTA,2 NOP NOP NOP NOP BSF PORTA,2 GOTO COMWO /СИГНАЛ НЕ ЗВУЧИТ. /ВЫКЛЮЧИМ ВЫХОД. /ДЛЯ ВЫРАВНИВАНИЯ . /ДЛИТЕЛЬНОСТИ /ИМПУЛЬСА И ПАУЗЫ. /ПЕРИОД РАВЕН 1,22 МС - 0,8 КГЦ. /ВКЛЮЧИМ ВЫХОД. /ПОВТОРИМ.
; 5. УСТАНОВКА ЕДИНИЦ МИНУТ.
UST BTFSS FLAG,1 RETURN BTFSS FLAG,3 /ЕСЛИ ИНДИКАЦИЯ ЗАПРЕЩЕНА, /ВЕРНЕМСЯ. /УСТАНОВКА РАЗРЕШЕНА, ЕСЛИ ПРОШЛА 1 СЕК
RETURN BCF FLAG,3 BCF FLAG,0 MOVLW .15 SUBWF UMNO,0 BTFSC STATUS, /СБРОСИМ ФЛАГ 1 СЕКУНДЫ. /СБРОСИМ ФЛАГ КНОПКИ. /УСТАНОВКА ДО 15. 0 /С = 1, ЕСЛИ 15 И БОЛЕЕ.
296
<Песочные» часы
GOTO USTH1 /ПЕРЕУСТАНОВИМ РЕГИСТР.
INCF UMNO,1 /ПРИБАВИМ ЕДИНИЦУ В РАЗРЯД.
GOTO UST3 /ПЕРЕПИШЕМ УСТАНОВКУ В РЕГИСТРЫ
USTH1
CLRF UMNO /НУЛЕВОГО ЗНАЧЕНИЯ НЕТ.
BSF UMNO,0 /УСТАНОВИМ В ЕДИНИЦУ.
; 6. ПЕРЕЗАПИСЬ УСТАНОВЛЕННЫХ ЗНАЧЕНИЙ В РЕГИСТР ИНДИКАЦИИ.
UST3
MOVFW UMNO /ПЕРЕПИШЕМ ЗНАЧЕНИЯ
MOVWF SCO /ЕДИНИЦ МИНУТ.
RETURN
; 7. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
ZOO
BTFSS GOTO FLAG,1 COMP /ЕСЛИ УСТАНОВКА ВЫКЛЮЧЕНА, /ИДЁМ НА СРАВНЕНИЕ.
BTFSS PORTB,0 /ЕСЛИ КНОПКА НАЖАТА,
BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS PORTB,1 /ЕСЛИ КНОПКА НАЖАТА,
BCF PORTB,2 /ВЫСВЕТИМ СВЕТОДИОД.
BTFSS FLAG1,2 /ЕСЛИ 2 СЕКУНДЫ ЕЩЕ НЕ ПРОШЛО,
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,0 /ПОКА КНОПКА НАЖАТА, УСТАНОВКИ НЕТ
GOTO ZOO /ВЕРНЕМСЯ.
BTFSS PORTB,1 /ПОКА КНОПКА НАЖАТА, УСТАНОВКИ НЕТ
GOTO ZOO /ВЕРНЕМСЯ.
BCF PORTA,0 /ВЫКЛЮЧИМ ПРЯМОЙ ВЫХОД.
BSF PORTA,1 /ВКЛЮЧИМ ИНВЕРСНЫЙ ВЫХОД.
BCF FLAG,3 ,•‘СБРОСИМ ФЛАГ 1 СЕКУНДЫ.
BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
BSF PORTB,2 /ПОГАСИМ СВЕТОДИОД.
CALL UST3 /ПЕРЕУСТАНОВИМ РЕГИСТР ИНДИКАЦИИ.
; 8. ИНДИКАЦИЯ УСТАНОВКИ.
HOKL TSTF SCO /ЕСЛИ НЕТ УСТАНОВКИ,
SKPNZ /РЕГИСТР НУЛЕВОЙ,
GOTO HOZOO /ИДЕМ НА ЗАВЕРШЕНИЕ.
HOKL1 BTFSS COUS,0 /ЕСЛИ РАЗРЯД РАВЕН ЕДИНИЦЕ
GOTO HOKL1
DECF SCO, 1 /ВЫЧТЕМ 1 ИЗ РЕГИСТРА.
BCF PORTB,2 /ВКЛЮЧИМ ВЫХОД.
HOZKLO BTFSC 'COUS,0 /ЕСЛИ РАЗРЯД УЖЕ НУЛЕВОЙ,
GOTO HOZKLO
BSF PORTB,2 /ВЫКЛЮЧИМ ВЫХОД.
GOTO HOKL /НАЧНЕМ СНАЧАЛА.
HOZOO BCF FLAG1,2 /СБРОСИМ ФЛАГ 2 СЕКУНД.
297
Устройства с индикацией точечными светодиодами
CLRF GOTO c6us ZOO /ДЛЯ ВЫРАВНИВАНИЯ ПАУЗЫ ОБНУЛИМ СЧЕТЧИК. /НА ПАУЗУ 2 СЕКУНДЫ.
; 9. СОХРАНЕНИЕ : И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
CONST MOVWF MOVFW MOVWF MOVFW MOVWF CALL BTFSC CALL RECONST BCF MOVFW MOVWF MOVFW MOVWF MOVFW RETFIE W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И STATUS /STATUS, STATUS_TEMP ; FSR /FSR. FSR_TEMP SI /ПРИБАВИМ 1 В СЧЕТЧИК. FLAG,3 . /ОПРОС КНОПОК ЧЕРЕЗ 1 СЕК. KEY /ПРОВЕРИМ КНОПКИ. /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ. INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ. STATUS_TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ: STATUS /STATUS, FSRJTEMP FSR iFSR, W_TEMP /W. /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ1.
; 10. СЧЕТ.
SI Ml M1M INCF COUS,1 MOVLW .4 SUBWF COUS,0 SKPZ RETURN CLRF COUS MOVFW SEC1 ADDLW -3BH BZ Ml INCF SEC1,F BTFSC SEC1,1 BSF FLAGl,2 BTFSC SEC1,O BSF FLAG,3 RETURN CLRF SEC1 BTFSC FLAG,5 GOTO MOO BTFSC FLAG,1 GOTO MOO MOVFW MINI ADDLW -OFH BZ MOO INCF MIN1,1 RETURN /+1 В СЧЕТЧИК. /ЕСЛИ УЖЕ 1 СЕКУНДА, /4 х 0,25, f /ОБНУЛИМ СЧЕТЧИК. /ЗАГРУЗКА В РАБ. РЕГИСТР. /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59. /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml. /ПРИБАВИТЬ 1 В СЕКУНДЫ. /ЕСЛИ РАЗРЯД ЕДИНИЦА, /УСТАНОВИМ ФЛАГ 2 СЕКУНД. /ЕСЛИ РАЗРЯД ЕДИНИЦА, /УСТАНОВИМ ФЛАГ 1 СЕКУНДЫ. f /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД. /ЕСЛИ УЖЕ БЫЛО РАВЕНСТВО, /ИДЕМ НА ОБНУЛЕНИЕ. /ПОКА ИДЕТ УСТАНОВКА, /МИНУТЫ НЕ СЧИТАЕМ. /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР. ,•-15. /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ОБНУЛИМ. /ПРИБАВИТЬ 1 В МИНУТЫ.
298
Автомат управления размораживанием холодильника
моо
CLRF MINI /ОБНУЛИМ ОБЩИЙ РЕГИСТР МИНУТ.
RETURN
END
Автомат управления размораживанием
холодильника
Под таким названием была опубликована статья С. Бирюкова в журнале
«Радио» [15]. Описанное устройство предназначено для автоматического вклю-
чения размораживанием холодильников типа «Ока-6» один раз в течение двух
суток на 30 минут. В этой статье описано аналогичное устройство, в котором
используется один микроконтроллер PIC16F84A вместо 5 логических микро-
схем в оригинальной статье.
Алгоритм работы программы микроконтроллера показан на рис. 70. После
пуска и инициализации, программа постоянно выполняет сравнение значений
часов и минут с установленной константой времени включения выхода. Время
включения выхода запрограммировано через 30 часов после подачи напряжения
питания. А время выключения выхода принято, согласно данным статьи С. Би-
рюкова, через 30 минут после включения двигателя компрессора. Если выход
выключен, то сравнение производится только на включение выхода, т. е. на 30
часов 00 минут. После совпадения значений регистров часов и минут с установ-
ленным временем, устанавливается флаг равенства, и процессор зацикливается
в ожидании установки флага включения дйигателя компрессора.
При поступлении на вход RB0 логического нуля, что свидетельствует о
включении двигателя компрессора, проверяется, было ли равенство часов и
минут. Если равенство было, то проверяется флаг включения двигателя комп-
рессора. При выполнении этих условий прерывание завершается. Если двига-
тель еще не включался, то устанавливается в единицу флаг включения двигате-
ля и производится расчет времени (Ч., М.) выключения выхода. Для этого к те-
кущему значению минут прибавляется 30 минут (время, в течение которого
будет включен клапан) и производится сравнение регистра минут на перепол-
нение. Если значение регистра минут более 60, то инкрементируется регистр
часов и выполняется сравнение на его переполнение (48 часов). Таким обра-
зом, производится привязка времени выключения клапана размораживания ко
времени включения двигателя компрессора. Если двигатель компрессора не
включится вообще (поломка), то размораживание холодильника не произойдет.
Когда выход включен, то следующее сравнение будет производиться по вре-
мени выключения. При равенстве значений регистров часов и минут Ч-часам
М-минутам, выход выключится (установится в «единицу»), сбросятся флаги
равенства и включения двигателя. Программа готова к новому циклу включе-
ния клапана, который произойдет через 48 часов.
Из любого адреса сравнения происходит прерывание. Прерывание возмож-
но при переполнении таймера TMR0 и при изменении сигнала на входе RB0.
После инициализации программы начинает работать предделитель, с коэффи-
299
Устройства с индикацией точечными светодиодами
вход
RB0
УСТАНОВКА ВРЕМЕНИ
ВЫКЛЮЧЕНИЯ- Ч.М.
У
ВОССТАНОВЛЕНИЕ
ЗНАЧЕНИЙ РЕГИСТРОВ
Рис. 70. Алгоритм работы программы автомата управления размораживанием холодильника
циентом деления равным 32, и таймер с коэффициентом деления — 256. После
наступления прерывания сохраняются значения регистров и проверяются зна-
чения флагов прерывания, чтобы определить по какому параметру произошло
прерывание.
Прерывания по переполнению таймера происходят каждую секунду и инк-
рементируют счетчики часов. Счетчик часов установлен на значение 48 часов.
При каждом включении двигателя компрессора происходит прерывание по
изменению сигнала на входе RB0. Программно установлено прерывание по из-
менению сигнала из единицы в ноль. Если не произошло равенство минут и
часов, то прерывание завершается. Если во время прерывания по входу RB0
произойдет переполнение таймера, то после завершения прерывания по входу,
произойдет прерывание по переполнению таймера. Таким образом, прерыва-
300
Автомат управления размораживанием холодильника
ние, которое произошло во время выполнения другого прерывания, обязатель-
но выполняется.
Для контроля работоспособности устройства выход порта RA2 устанавлива-
ется в то же состояние, в котором находится нулевой разряд счетчика секунд
(на рисунке 1 не показано). Таким образом, свечение контрольного светодиода
будет происходить с периодом в 2 секунды (секунда вспышка — секунда пауза).
Пропуск паузы в свечении светодиода в один период будет происходить при
переполнении счетчика секунд, когда происходит увеличение счетчика минут.
На рис. 71 показана схема автомата управления размораживанием холодиль-
ника. Тонкой линией выделена упрощенная схема электрооборудования холо-
дильника. Электродвигатель компрессора обозначен буквой М, клапан размо-
раживания — буквой К, выключатель терморегулятора — SK1, кнопка ручного
включения режима размораживания — SK2.
Рис. 71. Автомат управления размораживанием холодильника
В микроконтроллере прямой выход RA1 продублирован инверсным выхо-
дом RA0. Выход RA2 используется для контроля работоспособности устройст-
ва. Светодиод HL1 установлен синего свечения (красный цвет — цвет опасно-
сти), но может быть любого типа с соответствующей корректировкой номинала
гасящего резистора R2.
С прямого выхода RA1 микроконтроллера, через гасящий резистор R1 на-
пряжение высокого уровня поступает на светодиод оптопары МОС3043М [16].
Оптопару можно брать любую из серии МОСЗОхх, но тогда может потребовать-
ся подбор номинала резистора R1. Импортную оптопару U1 можно заменить
отечественной типа АОУ160А с соответствующим изменением схемы включе-
ния. Светодиод оптопары открывает внутренний оптосимистор, и напряжение
с анода симистора S1 подается на его управляющий вход. Симистор S1 откры-
вается и включает клапан размораживания.
Питание микроконтроллера осуществляется от сети через гасящий конден-
сатор С6 и резистор R6, выпрямитель на диодах VD3, VD4, конденсаторы фи-
301
Устройства с индикацией точечными светодиодами
льтра Cl, С2 и стабилитрон VD5. Напряжение с двигателя компрессора на вход
RB0 подается через выпрямитель на диодах VD1, VD2 и гасящий резистор R4.
Конденсатор С5 предотвращает ложные срабатывания микроконтроллера от
импульсной помехи. Если двигатель компрессора не включен, то на входе RB0
присутствует уровень логической единицы, поскольку все входы RB програм-
мно подтянуты внутренними резисторами микроконтроллера к плюсу напря-
жения питания.
Топология печатной платы автомата, изготовленной из одностороннего
стеклотекстолита, показана на рис. 72. Расположение элементов на плате дано
на рис. 73. Конденсатор С6 должен быть на напряжение не ниже 400 вольт.
Лучше использовать конденсатор типа К73-17 на рабочее напряжение 630
вольт. Кварцевый резонатор ZQ1 — миниатюрный цилиндрический.
В собранное устройство микроконтроллер устанавливается в последнюю
очередь. Сначала, вместо микроконтроллера, параллельно конденсатору С1
установите любой светодиод с соответствующим гасящим резистором. Если,
при подаче напряжения сети, светодиод загорится, то проверьте напряжение на
конденсаторе С1. Его значение должно быть в пределах 4,2—5,2 вольта в зави-
симости от экземпляра стабилитрона VD5. После проверки напряжения пита-
ния, можно устанавливать в микросхемную панельку микроконтроллер.
Работа с устройством. После включения холодильника в сеть должен зами-
гать светодиод. Если светодиод мигает, значит, программа микроконтроллера
работает. Желательно, чтобы размораживание холодильника происходило в
ночное время. Поэтому необходимо включать холодильник в 19—22 часа. Тогда
размораживание холодильника произойдет через 30 (24+6) часов, т. е. с 1 часа
до 4 часов ночи. В последующем размораживание будет происходить в одно и
то же время через 48 часов. Выключение напряжения сети до 30 минут изменя-
Рис. 72. Автомат управления размораживанием
холодильника. Печатная плата
1 К HL1 2 К ни ВЫХ
Рис. 73. Автомат управления размораживанием
холодильника. Расположение элементов на
печатной плате
302
Автомат управления размораживанием холодильника
ет время начала размораживания холодильника на 10—15 минут. За счет напря-
жения заряженного конденсатора микроконтроллер прекращает работу, но
значения регистров сохраняются. Поэтому, после включения напряжения,
микроконтроллер продолжает счет, но с небольшим опозданием по времени.
Это устройство можно применить и для любого другого холодильника, име-
ющего полуавтоматическую систему размораживания.
ВНИМАНИЕ! При работе с устройством необходимо соблюдать осторож-
ность, поскольку все детали находятся под напряжением сети.
/ АВТОМАТ УПРАВЛЕНИЯ РАЗМОРАЖИВАНИЕМ ХОЛОДИЛЬНИКА.
; ВРЕМЯ РАЗМОРОЗКИ - 30 МИНУТ, ЧЕРЕЗ 48 ЧАСОВ.
; РАЗРАБОТАЛ НИКОЛАЙ ЗАЕЦ.
; ДЛЯ СВОБОДНОГО ИСПОЛЬЗОВАНИЯ РАДИОЛЮБИТЕЛЯМИ.
; п.ВЕЙДЕЛЕВКА, БЕЛГОРОДСКОЙ.
; saes@mail.ru
; ПРОГРАММА = XOLOD.ASM
; ВЕРСИЯ: 31.05.03.
; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.61.00.
♦INCLUDE P16F84A.INC
CONFIG 3FF0H
/ ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 32,768 КГЦ.
« — ag~=g=ggg агава as зааевае = as = assess esse =: as as as assess
HWK EQU 1EH .-ВКЛЮЧЕНИЕ ЧЕРЕЗ 30 ЧАСОВ
MWK EQU ООН ' ;ПОСЛЕ ВКЛЮЧЕНИЯ ПИТАНИЯ.
/ВЫКЛЮЧЕНИЕ ЧЕРЕЗ 30 МИНУТ.
• sssessssssssss: ss as asses as aatssss
; СПЕЦ. РЕГИСТРЫ.
• ssasasssasasss assess as seas =====
INDF EQU 00H /ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H /OPTION (RP0=l).
PC EQU 02H /СЧЕТЧИК КОМАНД.
STATUS EQU 03H /РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H /РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ
PORTA EQU 05H /ПОРТ А ВВОДА/ВЫВОДА.
PORTB EQU 06H /ПОРТ В ВВОДА/ВЫВОДА.
TRISA EQU 85H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА А.
TRISB EQU 86H /НАПРАВЛЕНИЯ ДАННЫХ ПОРТА В.
INTCON EQU 0BH /РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
• asasasasasass s as as as as as as ss ss ss ss: ============================
; ОПРЕДЕЛЕНИЕ ВХОДОВ.
♦ =====—s ; RBO > вход : ВКЛЮЧЕНИЯ ДВИГАТЕЛЯ.
; RAI > выход ПРЯМОЙ (1).
; RAO > выход ИНВЕРСНЫЙ (0).
/ ОПРЕДЕЛЕНИЕ РЕГИСТРОВ УСТАНОВКИ.
• ====== .seas as as as as as as as ass: :=================
SEC1 EQU 11Н /СЧЕТЧИК СЕКУНД.
MINI EQU 12Н /СЧЕТЧИК МИНУТ.
303
Устройства с индикацией точечными светодиодами
HOU1 FLAG HWUK MWUK EQU 13H /СЧЕТЧИК ЧАСОВ. EQU 14H / EQU 15H / EQU 16H /
; ВРЕМЕННЫЕ РЕГИСТРЫ.
W TEMP EQU 2ОН /БАЙТ СОХРАНЕНИЯ РЕГИСТРА W ПРИ ПРЕРЫВАНИИ.
STATUS TEMP EQU 21H /БАЙТ СОХРАНЕНИЯ РЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.
FSR_TEMP EQU 22H /ВРЕМЕННЫЙ ДЛЯ FSR.
/ 1. ПУСК.
Г ORG 0
GOTO INIT
ORG 4
GOTO CONST
; 2. ИНИЦИАЛИЗАЦИЯ.
INIT
BSF STATUS,RPO /ПЕРЕХОДИМ В БАНК 1.
MOVLW В'ОООООЮО' /ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ПОДКЛЮЧЕНЫ, К=32 =...100
MOVWF OPTION REGA80H /
MOVLW В'10110000' /РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПО ПЕРЕПОЛНЕНИЮ TMR0
MOVWF INTCON /И ИЗМЕНЕНИЮ СИГНАЛА НА RB0.
MOVLW В'00000000' /ВСЕ НА ВЫХОД.
MOVWF TRISAA80H
MOVLW В'00000001' /RBO-НА ВХОД, ОСТАЛЬНЫЕ - ВЫХОД.
MOVWF TRISBA80H
BCF STATUS,RP0 -/ПЕРЕХОДИМ В БАНК 0.
CLRF TMR0 /ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ.
CLRF SEC1
CLRF MINI
CLRF HOU1
CLRF FLAG
CLRF HWUK
CLRF MWUK
CLRF PORTB
CLRF PORTA
BSF PORTA,1
GOTO COMP /НА СРАВНЕНИЕ.
; 3. .
UST
BTFSS FLAG,1
GOTO RECI
BTFSC FLAG,0
GOTO RECI
BSF FLAG,0
MOVFW HOU1
MOVWF HWUK
MOVFW MINI
ADDLW .30
304
Автомат управления размораживанием холодильника
MOVWF MWUIG
MOVLW .60
SUBWF MWUK,0 '
BTFSC STATUS,0
GOTO $+2
GOTO REC1
MOVWF MWUK
INCF HWUK,1'
MOVLW .48
SUBWF HWUK,0
BTFSS STATUS,0
GOTO REC1
MOVWF HWUK
GOTO RECI
; 4. СРАВНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ.
COMP BTFSC FLAG,0 /ЕСЛИ ВЫХОД ВКЛЮЧЕН,
GOTO COMWU ;ПОЙДЕМ ВЫКЛЮЧАТЬ.
MOVFW HOUl /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBLW HWK /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BNZ COM /ЕСЛИ ОНИ НЕ РАВНЫ, ЗАЦИКЛИВАЕМСЯ.
MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBLW MWK /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВКЛЮЧЕНИЯ.
BZ COMW /ЕСЛИ ОНИ РАВНЫ, ВКЛЮЧАЕМ ВЫХОД.
COM BCF FLAG,1
BCF PORTA,1 /ВКЛЮЧЕН.
BSF PORTA,0 /ВЫХОД ВЫКЛЮЧЕН.
BCF FLAG,0
GOTO COMP /НА СРАВНЕНИЕ.
COMW BSF FLAG,. 1 Z
BTFSS FLAG,0 г
GOTO $-1
BSF PORTA,1 ;ВЫКЛЮЧЕН.
BCF PORTA,0 /ВЫХОД ВКЛЮЧЕН.
COMWU MOVFW HOUl /СРАВНИМ ЗНАЧЕНИЕ ЧАСОВ
SUBWF HWUK,0 / СО'ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BNZ COMP " /ЕСЛИ ОНИ НЕ РАВНЫ, ЗАЦИКЛИВАЕМСЯ
MOVFW MINI /СРАВНИМ ЗНАЧЕНИЕ МИНУТ
SUBWF MWUK,0 /СО ЗНАЧЕНИЕМ ВРЕМЕНИ ВЫКЛЮЧЕНИЯ.
BZ COM /ЕСЛИ ОНИ РАВНЫ, ВЫКЛЮЧАЕМ ВЫХОД.
GOTO COMP /НА СРАВНЕНИЕ.
5. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ
CONST MOVWF W_TEMP /СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И MOVFW STATUS /STATUS, MOVWF STATU?_TEMP / MOVFW FSR /FSR. MOVWF FSR TEMP
305
Устройства с индикацией точечными светодиодами
BTFSC INTCON,1 /ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДУ,
GOTO UST /ОБНУЛИМ.
BTFSC INTCON,2 /ЕСЛИ ПРЕРЫВАНИЕ ПО ТАЙМЕРУ,
CALL SI /ПРИБАВИМ 1 В СЧЕТЧИК.
RECONST /ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
BCF INTCON,2 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ТАЙМЕРУ.
MOVFW STATUS TEMP /ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR TEMP
MOVWF FSR / FSR,
MOVFW W TEMP ,-w.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
RECI
BCF INTCON,1 /СБРОСИМ ФЛАГ ПРЕРЫВАНИЯ ПО ВХОДУ.
MOVFW STATUS TEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS /STATUS,
MOVFW FSR TEMP
MOVWF FSR /FSR,
MOVFW W TEMP ,-W.
RETFIE /ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
/ б. ЧАСЫ.
SI
MOVFW SEC1 /ЗАГРУЗКА В РАБ. РЕГИСТР.
ADDLW -3BH /ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ Ml /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Ml.
INCF SEC1,1 /ПРИБАВИТЬ 1 В СЕКУНДЫ.
BTFSS SEC1,0 /МИГАНИЕ. СВЕТОДИОДА
BSF PORTA,2 /С ЧАСТОТОЙ
BTFSC SEC1,O /1 СЕКУНДА
BCF PORTA,2 /НА ВЫХОДЕ ПОРТА "А2".
RETURN 9
Ml
CLRF SEC1 /ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
M1M
MOVFW MINI /ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH ,•-59.
BZ Hl /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА Н1.
INCF MINI,F /ПРИБАВИТЬ 1 В МИНУТЫ.
RETURN 9
Hl .
CLRF MINI ;ОБНУЛЯЕМ РЕГИСТР МИНУТ.
HIH
MOVFW HOUl /ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -2FH /- 47.
BZ H10 /СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА НЮ
INCF HOUl,F /ПРИБАВИТЬ 1В ЧАСЫ.,
RETURN
H10
CLRF HOUl /ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
RETURN
• ssssss ssssss ssss ssssss ssss sssssssssssesssss ss SS 5252==5235 as 3S 35 =2====ss ss ss ss SS SS SS
END
52 SS 52 52 = = 52 52 SB 52 SS SB = SS 52 = SS 52 52 SB S 52 52 52 52 SS 52 52 SS 52 = = 52 SS SS 52 52 SS SB 52 = 52 52 52 = Sfi
306
Рекомендации
* Для радиолюбителей, которые впервые сталкиваются
с микроконтроллерами, но хотят повторить конструкции
из этой книги
Хорошо, если у вас есть компьютер. В худшем случае придется обратиться к
другу или использовать компьютер на работе (конечно, с разрешения началь-
ника). Компьютер должен иметь доступ в интернет. Интернет необходим для
того, чтобы скачать программу на программатор PonyProg 2000. Эту программу
и сам программатор разработал итальянец Claudio Lanconelli и разместил ее на
своем сайте www.lancos.com для свободного использования. Этот программатор
может программировать много различных микроконтроллеров и микросхем па-
мяти, которые поддерживают последовательное программирование.
Войдя на сайт, откройте страницу PonyProg. Вы увидите различные версии
программы и перечень языковых версий. Выберите русскую версию и перека-
чайте ее на свой компьютер в любую директорию. Если у вас есть журналы
«Радио» за 2001 год, а конкретно номера 6 и 7, то больше ничего с сайта копи-
ровать не надо. Если у вас нет журналов, то необходимо скопировать страницу
со схемами в формате PDF базового блока и адаптеров — si-prog-v2-2.pdf. Не-
обходимо изготовить этот программатор либо по журналу, либо со страницы
автора. Можно делать один адаптер, если вы рассчитываете программировать
один тип микросхем, но можно сделать и все адаптеры (на будущее) без разъе-
мов, расположив их по плоскостям используемого корпуса. Кроме этого необ-
ходимо изготовить кабель-переходник с соединением проводов один к одному.
Если на концах кабеля у вас различные разъемы, например DB-25 и DB-9, то
соответствие их выводов такое: 2-3, 20-4, 7-5, 6-6, 4-7, 5-8, 25-9 (3-2, 8-1,
22-9 — не используются в программаторе). Первая цифра для разъема типа
DB-25. Выводы 25 и 9 используются как общие.
Программа PoniProg2000 для программатора запускается с любой директо-
рии. Если у вас есть программа и программатор, то необходимы еще файлы
программ для программирования микроконтроллеров. Все .hex-файлы для
устройств в этой книге можно взять на странице автора www.radic.newmail.ru.
Работа с программатором РопуРгод2000
Этот программатор — настоящая маленькая лошадка, которая «тянет» про-
граммирование многих микросхем. Откройте программу и нажмите «Установ-
ки» — «Калибровка». После окончания калибровки откройте «Настройки обо-
рудования». 'Установите точку возле используемого вами параллельного или
последовательного порта. Обычно используют последовательный порт, чтобы
быстрее переставлять разъемы от модема к программатору. Выберите надпись
V 307
Рекомендации,
«Si ProgAPI» при последовательном порте и поставьте точку возле порта, кото-
рый используется для модема. Обычно это порт Сот2. Далее откройте «Коман-
ды» — «Настройки программирования». В открывшемся окне поставьте «галоч-
ки» возле надписей: «Открыть заново файлы», «Стереть», «Записать память
программ (FLASH)», «Записать память данных (EEPROM)», «Записать биты
защиты и конфигурации».
Пусть вас не пугает последняя надпись. Дело в том, что в каждой программе
записан регистр конфигурации «_CONFIG» и его восьмеричный код, кото-
рый определяет выбор типа используемого генератора, состояние таймеров
WDTE, PWRTE и биты защиты. Так вот защита во всех программах отключена
установкой битов защиты в единицу (3FF). А установка защиты необходима,
чтобы микроконтроллер правильно определил тип генератора. Если этого не
сделать, то ваше устройство не заработает. Правда, в программе попутаны биты
конфигурации генератора при считывании (выдаются инверсные значения, от-
меченное окно соответствует нулевому значению), но при записи, судя по ра-
ботающим программам, установки производятся правильно.
Ни в коем случае не нужно устанавливать конфигурацию в окне «Считать
биты защиты й конфигурации». Если программируемая микросхема имела пло-
хой контакт, то считывание будет таким, что все окна будут отмечены «галоч-
кой». Произойдет запись защиты и микросхему уже нельзя будет перепрограм-
мировать. Конечно, если у вас одноразовый микроконтроллер с буквой «С», то
это не имеет значения.
Сделав все настройки программы, откройте.hex-файл программы, установите
микросхему в панельку. При установке микросхемы в панельку будьте внимате-
льны. Ключи импортных микросхем отличаются от ключей отечественных мик-
росхем. Но если вы неправильно установили микросхему на короткое время, то
это не приведет к ее выходу из строя. Микроконтроллеры PIC16F 84 имеют боль-
шой запас по прочности. Мне доводилось в устройстве подавать питание 9 В,
устанавливать на плату микросхему ключом в обратную сторону — микросхема
разогревалась (скорее, раскалялась), но позже работоспособность восстанавлива-
лась. Естественно, нет надобности проверять это на собственном опыте.
Установите тип программируемого устройства (в нашем случае это «Р1С 16
micro») и тип микросхемы. Микроконтроллеры PIC16F84 и PIC16F84A иден-
тичны, но программируются с различной скоростью, поэтому необходимо
устанавливать в программаторе именно тот тип микросхемы, который у вас
есть. Нажмите «Команды» «Программирование» и ждите окончания програм-
мирования. Вставлять и вынимать микросхему из программатора можно не от-
ключая питания, но подсоединение программатора к последовательному порф
компьютера рекомендуют выполнять при выключенном компьютере. Это на
тот случай, если вы используете чужой компьютер.
Читать все это, возможно, трудно и непонятно, но, проделав операцию про-
граммирования один раз, в дальнейшем это будет сделать проще, чем включить
освещение1 в комнате. Тем более что все сделанные установки сохраняются.
Единственное, что надо делать при каждом открывании программы Po-
ny Prog2000, так это выполнять калибровку на время прохождения сигнала по
тракту компьютера.'
308
Рекомендации
Для радиолюбителей, которые хотят изменить программы
под свои требования
Для экспериментов с изменением программ вам кроме компьютера будет
необходима программа ассемблера и отладчика микроконтроллеров фирмы
Microchip. Это пакет программ MPLAB. Эта программа постоянно обновляется
новыми типами микроконтроллеров и новыми версиями симуляторов. Поэто-
му каждая версия имеет различный объем. Так версия 5.61 имела объем 12 МБ.
Йоследная версия 6.22 уже имеет объем 26,4 МБ. Скачать программу можно с
сайта www.microcliip.com и www.microchip.ru. На русском сайте программа запи-
сана целиком, а с разбивкой по 1,4 МБ программа качается из американского
сайта. Упакованную программу необходимо распаковать в директорию с анг-
лийскими буквами. Установка программы производится обычным способом.
На русском сайте необходимо скачать файл описания работы программы
MPLAB. Сама программа выполнена на английском языке, но по описанию на
русском языке нетрудно разобраться в назначении надписей на кнопках. Жела-
тельно сразу скопировать и справочные данные (на русском языке) на микро-
контроллер PIC16F84A.
Далее необходимо скопировать исходный текст программы в файл с таким
- же именем. Сначала создайте папку с одинаковым с текстом программы име-
нем. Затем откройте в программе MPLAB «File» — «New». Откроется новое ок-
но. Перепишите исходный текст выбранной программы в это окно. При этом
необходимо соблюдать следующие требования: присваивание значений регист-
рам и имена (метки) подпрограмм пишутся с первой позиции строки, директи-
вы и мнемоники команд можно писать со второй и последующих позиций
строки. После точки с запятой можно писать любые комментарии (общая дли-
на строки 256 знаков). Для ускорения процесса выхода на отладку программы
комментарии можно не писать. Если в этом будет необходимость, то вы всегда
сможете написать комментарии, тем более что книга у вас под рукой. Но при
написании хоть одной новой строчки не ленитесь писать подробные коммента-
рии. После написания программы сохраните ее под именем ранее созданной
папки, откройте «Project» — «New Project». В открывшемся окошке найдите
имя вашей папки и проставьте имя проекта, которое должно быть таким же,
как имя папки.
После нажатия «ОК» появится окно с установками параметров проекта.
В окне «Language Tool Suite» выберите «Microchip». Возле окна «Development
Mode» нажмите «Change...». Откроется окно параметров. На странице «Tools»
установите «MPLAB SIM Simulator», установите тип микроконтроллера в окне
«Processor» либо «PIC16F84A», либо «PIC16F84». Откройте страницу «Clock» и
установите тип кварцевого резонатора и его частоту. Остальные настройки
оставьте без изменений (по умолчанию). Нажмите «ОК», закроется окно пара-
метров и откроется окно параметров проекта. Нажмите «Add Node» и присое-
дините к проекту файл с программой, которую вы написали ранее. Эта про-
грамма будет с расширением .asm. Окно параметров проекта закроется. На-
жмите «File» — «Open» и откройте файл программы. Далее оттранслируйте
программу и в папке появятся файлы с другими расширениями.
Файл с расширением «.wat» хранит имена регистров, которые вы вывели для
наблюдения в процессе работы программы. Файл с расширением «.hex» являет-
309
Рекомендации
ся восьмеричным кодом программы для записи в микроконтроллер. Файл с
расширением «.егг» хранит ошибки, которые обнаружены в программе во вре-
мя трансляции. Файл с расширением «.1st» хранит листинг программы. В файле
«.$$$» находится копия вашей программы, которая сохранена во время послед-
него закрытия программы. Если вы запортили программу так, что трудно
вспомнить,’ куда и что вы вписывали, или во время работы завис ассемблер, то
простым копированием через буфер компьютера можно восстановить либо
фрагмент программы, либо всю программу. После всего вышеперечисленного
можно начинать эксперименты с изменением программы.
Некоторые «глюки» программы MPLAB
Эта программа является мощным инструментом написания и отладки про-
грамм для микроконтроллеров. Появление таких. программ способствовало
продвижению микроконтроллеров в любительские разработки. К сожалению,
во время работы с программой возникают ошибки, которые могут ввести в за-
блуждение программиста. Можно лихорадочно изменять программу, а все дело
будет в ошибке программы ассемблера. Чтобы сохранить ваши нервы и время,
приведу перечень обнаруженных мною «глюков» программы и способы (если
возможно) их игнорирования.
♦Счетчик инкрементируется до определенного числа, а затем сбрасывается
и программа начинается с нулевого адреса. Устранение возможно сменой адре-
са регистра счетчика (переустановка блока программы на другое место в про-
грамме).
♦Программа переустанавливается через 18 мс. Срабатывает WDT-таймер,
хотя его работа запрещена. Устранение разбрасыванием по программе команды
CLRWDT через промежуток времени менее 18 мс.
♦Если в программе была изменена одна буква в мнемонике регистра или
команды, например, команда BTFSC заменена командой BTFSS, то MPLAB
иногда не видит этот регистр или команду. Устранение переписыванием мне-
моники регистра или команды полностыО.
♦Во время работы, чаще в пошаговом режиме, не изменяются значения тай-
мера TMR0 и предделителя. Устранение перезапуском программы.
♦При длительной работе в пошаговом режиме стираются надписи на кноп-
ках. Программа становится неуправляемой. Неустранимо. Нужен перезапуск
программы и компьютера.
♦При случайной записи имени регистра было пропущено присвоение адре-
са. Программа работала, но нельзя было вывести регистр для наблюдения за
его изменением. Устранение: присвоить адрес регистру. ♦
♦Поскольку после прерывания восстанавливается адрес программы, следую-
щий за тем, что был* перед прерыванием, то программа пропускает выполнение
подпрограмм (макроопределений), которые встроены в ассемблер MPASM.
Например, прерывание наступает во время перехода к команде SKPNZ, а по-
сле прерывания возвращается к следующей команде. Поскольку сравнение не
выполнено, то в действительности возвращаться из прерывания необходимо
было бы к той же команде. По всем параметрам сравнения необходимо пропу-
стить следующую команду, а программа ее выполняет.
310
Рекомендации
Устранение: осторожно пользоваться макроопределениями в тех местах про-
граммы откуда возможны прерывания. Лучше не полениться и расписать мак-
роопределение простыми командами. Иногда приходится дублировать команды
сравнения типа BTFSS(C).
*При перезаписи в рабочий регистр значения порта переписывается значе-
нйе регистров установок входов/выходов порта (TRISA, TRISB). Результат
сравнения порта на одновременное нажатие двух кнопок получается ошибоч-
ным. Устранение: переписать фрагмент программы так, чтобы использовать
побитное сравнение значений входов порта.
*При установлении регистров в окне Watch вместо бинарного значения вы-
бранного регистра устанавливается хексадецимальное (восьмеричное). Устра-
нение: перезапуск программы.
♦Постоянное переполнение стека. Устранение: изменением расположения
блоков программы.. Иногда приходится изменять программу.
Программу нельзя оставлять на длительное время свернутой. Потом выска-
кивает «Ошибка в программе». Следствие этого — закрытие программы. Осо-
бенно это обидно, если программа не сохранена. Поэтому надо чаще сохранять
написанную программу. Обязательное сохранение программы перед каждой
трансляцией.
Чтобы не иметь сомнений по поводу того, кто виноват в приведенных выше
«глюках» — программа или компьютер, проверялись в работе две версии про-
граммы: версия 5.50 и версия 5.61. Работа проводилась на двух компьютерах
Р166ММХ и Р500. В результате оказалось, что виновата программа.
Полезные советы при работе с ассемблером
♦Если вам необходима длительная проверка программы, то закройте окно
установки выводов при асинхронной симуляции. Значения установленных вхо-
дов при закрытом окне сохраняются, зато программа начинает работать очень
быстро.
♦Если вы хотите переписать подпрограмму, то старый текст скопируйте ни-
же окончания программы. В дальнейшем его легко можно будет вернуть на
место.
♦Если вы хотите переписать несколько строчек, то не торопитесь убирать
старый текст. Закомментируйте строчки, то есть сделайте их комментариями.
Для этого поставьте точку с запятой перед ненужной строкой. Если в дальней-
шем новая программа не пойдет, то нетрудно восстановить старый текст, убрав
точку с запятой.
♦По этой же причине новый текст программы записывайте смещенным от
основного текста.
♦При необходимости ускорить процесс счета счетчиками можно при возвра-
те из прерывания задать таймеру значение, близкое к прерыванию, а коэффи-
циент деления предделителя установить равным 2, оставив запись в коммента-
риях о правильном значении коэффициента деления. Например:
INIT
BSF STATUS,RPO * /ПЕРЕХОДИМ В БАНК 1.
MOVLW В'00000000' ;К=2. К=32 '....100'
MOVWF OPTION_REGA80H
311
Рекомендации
Значение таймеру необходимо задавать перед восстановлением значения ра-
бочего регистра, чтобы не изменить значение рабочего регистра. Например:
MOVFW FSR_TEMP
MOVWF FSR
MOVLW.250
MOVWF TMRO
MOVFW W_TEMP
RETFIE.
ПРЕРЫВАНИЯ.
; FSR,
;НОВЫЕ
/СТРОЧКИ.
;w.
/ВОЗВРАТ ИЗ
Кроме этого для ускорения работы программы можно временно устанавли-
вать уменьшенные значения различных счетчиков и счетчиков пауз. Для этого
хорошо подходит окно программы «Modifi», в котором можно придать любое
значение выбранному регистру. Для проверки работы часов можно после пре-
рывания сделать посыл не на счетчик секунд, а на счетчик минут. Тогда суточ-
ный ход часов пройдет в 60 раз быстрее.
312
Приложения
ф 1. Справочные данные на микроконтроллер
PIC16F84A
PDIP, SOIC
-----+
RA2 _ RA3 _ 1 18 _RA1 _RA0
RA4/T0CKI_ _OSC1/CLKIN
MCLR_ _OSC2/CLKOUT
Vss _ PIC16F84 _Vdd
RBO/INT _ _RB7
RBI _RB6
RB2 _RB5
RB3 9 10 _RB4
+
Расположение выводов
Функциональиое назначение выводов
Обозначение Нормальный режим Режим записи EEPROM
RAO - RA3 Двунаправленные линии ввода/выво- да. Входные уровни ТТЛ -
RA4/RTCC Вход через триггер Шмитта. Ножка порта ввода/вывода с открытым сто- ком или вход частоты для тайме- ра/счетчика RTCC -
RBO/INT Двунаправленная линия порта вво- да/вывода или внешний вход преры- вания. Уровни ТТЛ -
RBI - RB5 Двунаправленные линии ввода/выво- да. Уровни ТТЛ -
RB6 Двунаправленные линии ввода/ вы- вода. Уровни ТТЛ Вход тактовой частоты для EEPROM
RB7 Двунаправленные линии ввода/ вы- вода. Уровни ТТЛ Вход/выход EEPROM данных
/MCLR/Vpp Низкий уровень на этом входе гене- рирует Сигнал сброса для контролле- ра. Активный низкий Сброс контроллера. Для режима EEPROM — подать Урр.
313
Приложения
Обозначение Нормальный режим Режим записи EEPROM 1
OSC1/CLKIN Для подключения кварца, RC или вход внешней тактовой частоты
OSC2/CLKOUT Генератор, выход тактовой частоты в режиме RC генератора, в остальных случаях — для подкл.кварц
Vdd Напряжение питания Напряжение пиГания
Vss Общий (земля) Общий
RB4—RB7 можно использовать как вход внешнего прерывания по измене-
нию сигнала.
Максимальные значения электрических параметров
Выход параметров за данные пределы может привести к повреждению мик-
росхемы. Работа кристалла на предельно допустимых значениях в течение дли-
тельного времени повлияет на его надежность,
Интервал рабочих температур.......................—55...+125 °C
Температура хранения..............................—65...+150°С
Напряжение на любой ножке относительно
Vss (земли) (исключая Vdd и /MCLR) . . . .........— 0,6...Vdd +0,6 В
Напряжение Vdd относительно Vss...................0...+7.5 В
Напряжение на /MCLR относительно Vss.............. . 0...+14 В (прим. 2)
Общая рассеиваемая мощность....................... 800 мВт (прим. 1)
Макс, ток в ножку Vss.............................150 мА
Макс, ток в ножку Vdd.............................100 мА
Макс, ток в любую ножку ввода.....................±500 мкА
Макс, втекающий ток (любая ножка Вывода)..........25 мА
Макс, вытекающий ток (любая ножка Вывода).........20 мА
Макс, суммарный вытекающий ток
для всех ножек порта_А............................80 мА
Макс, суммарный вытекающий ток
для всех ножек порта_В............................50 мА
Макс, суммарный втекающий ток
для всех ножек порта_А.......................... 50 мА
Макс, суммарный втекающий ток *
для всех ножек порта_В.........'..................100 мА
Примечания:
1. Полная рассеиваемая мощность не должна превышать 800 мВт для каж-
дого корпуса.
2. Понижение напряжения на ножке /MCLR ниже Vss (земля) вызывает бо-
льшие токи, более 80 мА, и может привести к повреждению этой линии. Поэ-
тому рекомендуем подавать сигналы на ножку /MCLR через ограничивающий
резистор 50—100 Ом.
314
1. Справочные данные на микроконтроллер PIC16F84A
Обзор регистров и ОЗУ
Область ОЗУ организована как 128 х 8. К ячейкам ОЗУ можно адресоваться
прямо или косвенно, через регистр указатель FSR (04h). Это также относится и
к EEPROM памяти данных-констант.
Page 0 Page 1 —
00 Indirect add. Indirect add. 80
01 TMRO OPTION 81
02 PCL PCL 82
03 STATUS STATUS 83
04 FSR FSR 84
1 05 PORTA TRISA 85
1 06 POTR В TRISB 86
| 07 87
1 08 EEDATA EECON1 ’ 88 ' ' ‘
| 09 EEADR EECON2 89
0А PCLATH PCLATH 8А
ОВ INTCON INTCON 8В
ос 2F POH POH 8С AF
30 4F POH POH ВО CF
7F не реализованы читаются как 0 не реализованы читаются как 0 FF
Назначение разрядов регистра состояния АЛУ STATUS
| Бит Назначение
7 IRP — выбор банков при индексной адресации через FSR 0 = банки 0, 1 1 = банки 2, 3
6-5 RP1—RP0 — выбор банка (с 0 по 3) при прямой адресации 00 = банк 0 01 = банк 1 10 = банк 2 » 11 = банк 3 1
315
Приложения
Бит Назначение
4 -ТО — флаг переполнения сторожевого таймера 1 = после POR или CLRWDT и SLEEP 0 = после тайм-аута WDT
3 -PD — бит включения питания 1 = после POR и CLRWDT 0 = после выполнения команды SLEEP
2 Z — бит нуля 1 = результат операции равен нулю 0 = результат операции не равен нулю
1 DC — бит десятичного переноса/заема, заем отрицательной полярности 1 = был перенос из младшего полубайта результата или не было заема 0 = был заем из младшего полубайта результата или не было переноса
0 С — бит переноса/Заема, заем имеет отрицательную полярность. 1 = был перенос из старшего бита результата или не было заема 0 = был заем из старшего бита результата или не было переноса
Назначение разрядов регистра прерываний и флагов INTCON
Бит Назначение
7 GIE — общее разрешение прерывания 0 = прерывания запрещены 1 = прерывания разрешены 1
6 EEIE — разрешение прерывания по завершению записи во Flash-ПЗУ 0 = прерывание запрещено 1 = прерывание разрешено
5 T0IE — разрешение прерывания по переполнению TMR0 0 = прерывание запрещено 1 = прерывание разрешено
4 INTE — разрешения внешнего прерывания с входа RBO/INT 0 = прерывание запрещено 1 = прерывание разрешено ♦
3 RBIE — разрешения прерывания по изменению входного сигнала PORTB 0 = прерывание запрещено 1 = прерывание разрешено
2 T0IF — флаг прерывания по переполнению TMR0 0 = переполнение не происходило Г= произошло переполнение TMR0 -- - --- 1
316
1. Справочные данные на микроконтроллер PIC16F84A
Бит Назначение
INTF — флаг внешнего прерывания с входа RB0/INT (подлежит программной очистке) 0 = внешнее прерывание не происходило 1 = произошло внешнее прерывание
L RBIF — флаг прерывания по изменению входного сигнала PORTB (подлежит програм- мной очистке) 0 = сигнал на входах RB4—RB7 не изменялся 1 = изменился сигнал на одном из входов RB4—RB7
Назначение разрядов регистра конфигурации OPTION
Бит Назначение.
7 -RBPU — включение подтягивающих резисторов на входах В 0 = включены 1 = выключены
6 INTEDG — выбор фронта внешнего прерывания с входа RB0/INT 0 = по заднему фронту 1 = по переднему фронту
5 TOCS — выбор источника тактового сигнала для TMR0 0 = CLKOUT — синхронный с машинным циклом тактовый сигнал 1 = тактовый сигнал с входа TOCKI
4 TOSE — выбор активного фронта TOCK.I 0 = передний фронт 1 = задний фронт
3 PSA — управление подключением предделителя 0 = предделитель подключен к TMR0 1 = предделитель подключен к WDT
2-0 PS2—PS0 — выбор коэффициента деления предделителя PS2-PS0 TMRO WDT ООО ,1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 ПО 1:128 1:64 111 . ж 1:256 1:128
317
Приложения
Управление EEPROM
Управляющие регистры для EEPROM
Название Функция Адрес Значение после I включения 1
EEDATA EEPROM регистр данных 08h хххх хххх
EEADR EEPROM регистр ад- реса 09h хххххххх
EECON1 EEPROM 1 управля- ющий регистр 88h 0000 хооо
EECON2 EEPROM 2 управля- ющий регистр 89h
Регистры EECON1 и EECON2
Регистр EECON1 (адрес 88h) — это управляющий регистр шириной пять
бит.
Младшие пять бит физически существуют, а старшие три бита читаются
всегда как 'О'.
Регистр EECON1 Адрес 88h
Сброс при вкл. — 0000X000
- - - EEIF WRERR WREN WR RD
7 6 5 4 3 2 1 0
Управляющие биты RD и WR запускают соответственно чтение и запись.
Они могут быть установлены только программно. Сбрасываются — аппаратно
по завершении операций чтения/записи. Запрет программного сброса бита WR
предотвращает преждевременное окончание записи.
RD — бит чтения.
RD =1: запускает чтение памяти данных EEPROM. Чтение занимает один
цикл. Устанавливается программно. Обнуляется аппаратно.
WR — бит записи.
WR =1 : запускает запись в память данных EEPROM.
Устанавливается программно. Обнуляется аппаратно.
WREN — бит разрешения записи в память данных EEPROM.
WREN = 1: разрешена запись.
WREN = 0: запрещена запись.
После включения питания WREN обнуляется.
Флаг ошибки WRERR устанавливается, когда процесс записи прерывается
сигналом сброса /MCLR или сигналом сброса от WDT-таймера. Рекомендуем
318
1. Справочные данные на микроконтроллер PIC16F84A
проверять этот флаг WRERR и при необходимости производить перезапись
данных, данные и адрес которых сохраняются в регистрах EEDATA и
' EEADR.
WRERR — флаг ошибки записи.
WRERR = 1: флаг устанавливается, когда операция записи преждевременно
прерывается сигналом сброса /MCLR (во время обычного режима или режима
SLEEP) или сигналом сброса WDT во время обычного режима.
Флаг EEIF устанавливается, когда встроенный автомат завершает запись в
память данных. Он должен быть сброшен программно.
EEIF — флаг завершения записи.
EEIF = 1: флаг устанавливается, когда завершена запись.
Соответствующий бит разрешения прерывания — EEIE в регистре
INTCON.
Регистр EECON2 не реализован физически и не допускает чтения. Возмож-
на запись в регистр кодов 0х055/0х0АА для контроля правильности выполне-
ния операции записи. Регистр используется только в обязательной последова-
тельности при записи в память.
Регистры EEADR и EEDATA необходимы для формирования и ввода адреса
и данных в EEPROM. К ним применимы команды обычных регистров.
Регистр конфигурации микроконтроллера
Биты конфигурации располагаются в памяти ПЗУ по адресу 2007h. Этот
адрес находится в особом пространстве памяти < доступном только во время
программирования. Конфигурирование микроконтроллера выполняется на
стадии написания программы введением в нее директивы_CONFIG (первые
два символа — подчеркивание). Регистр конфигурации — это 14-разрядное
слово, в котором содержатся общие параметры работы микроконтроллера.
В каждом файле идентификаторов, которые Имеют расширениелпс в среде
MPLAB, есть ряд параметров, позволяющих выбирать различные опции кон-
фигурационного слова.
Слово конфигурации
0 и 1 бит FOSCO и FOSC1 — определяют выбор типа генератора.
2 бит WDT — разрешает работу сторожевого таймера. 0 = WDT выключен 1 = WDT включен
3 бит PWRTE — включение PWRT 0 = PWRT выключен 1 = PWRT включен
4—13 биты СР — биты защиты содержимого Flash-ПЗУ данных 0 = защиту включена 1 = защита выключена.
319
Приложения
WDT — сторожевой таймер, обнуляет микроконтроллер через 18 мс, если к
нему не подключен предделитель. Позволяет выйти из зацикливания програм-
мы в результате сбоя.
PWRT — таймер задержки включения питания на 72 мс. Позволяет подня-
ться напряжению питания от включения до приемлемого уровня. Медленное
нарастание напряжения питания может стать причиной сбоя программы.
Типы генераторов
Кристаллы PIC16F84A-XT могут работать с четырьмя типами встроенных ге-
нераторов. Пользователь может запрограммировать два конфигурационных бита
(FOSC1 и FOSCO) для выбора одного из четырех режимов: RC, LP, XT, HS.
Кристаллы PIC16... могут также тактироваться и от внешних источников.
Генератор, построенный на кварцевых или керамических резонаторах, требует
периода стабилизации после включения питания. Для этого встроенный тай-
мер запуска генератора держит устройство в состоянии сброса примерно 18 мс
после того, как сигнал на /MCLR-ножке кристалла достигнет уровня логиче-
ской единицы. Таким образом, внешняя цепочка RC, связанная с ножкой
/MCLR, во многих случаях не требуется.
Встроенные генераторы работоспособны при определенных номиналах пи-
тающего напряжения:
Vdd OSC mode Max Freq |
2...3V RC . LP 2 MHz 200 kHz
3...6V RC, XT LP 4 MHz 200 kHz
4,5...5,5 HS 10 MHz
ВНИМАНИЕ! При частотах ниже 500 кГц внутренний генератор может гене-
рировать сбойный импульс на гармониках, когда переключается бит 0 порта А.
Этого не происходит при использовании внешнего генератора или при встро-
енном RC-генераторе.
Генератор на кварцах
PIC16F84A-XT, -HS или -LP требуют подключения кварцевого или кера-
мического резонатора к выводам OSC1 и OSC2.
Маркировка следующая: XT — стандартный кварцевый генератор, HS —
высокочастотный кварцевый генератор, LP — низкочастотный генератор для
экономичных приложений. Резистор Rs может потребоваться для генератора
HS, особенно при частотах ниже 20 МГц для гашения гармоник. Он также мо-
жет потребоваться в режиме XT с резонатором типа AT strip-cut.
320
2. Команды микроконтроллера
Выбор конденсаторов для керамического резонатора
Тип генератора Частота резонатора Конденсатор С1=С2
XT 455 кГц 2 МГц 4 МГц 150...330 пФ 20...330 пФ 20...330 пФ
HS 10 МГц 20...200 пФ
Выбор конденсатора для кварцевого генератора
Тип генератора Частота Конденсатор С1 Конденсатор С2
32 кГц 30 пФ 30...50 пФ
LP 100 кГц 15 пФ 15 пФ
200 кГц 0...15 пФ 0...15 пФ
100 кГц 15...30 пФ 200...300 пФ
200 кГц 15...30 пФ 100...200 пФ
XT 455 кГц 15...30 пФ 15...100 пФ
1 МГц 15...3D пФ 15...30 пФ
2 МГц 15 пФ 15 пФ
4 МГц 15 пФ 15 пФ
HS 4 МГц 15 пФ 15 пФ
10 МГц 15 пФ 15 пФ
Более высокая емкость будет увеличивать стабильность генератора, но так-
же будет увеличивать время запуска. Значения приведены для ориентировки.
В режимах HS и XT, чтобы избежать гармоник, может потребоваться после-
довательный резистор Rs.
2. Команды микроконтроллера
Байт-ориентированные команды
Мнемокод команды Название Изменяемые флаги
ADDWF f,d Сложение W c f С, DC, Z
ANDWF f,d Логическое И W и f Z
CLRF f Сброс регистра f Z
CLRW - Сброс регистра W Z
COMF f,d Инверсия регистра f Z
DECF f,d Декремент регистра f (-1) Z
11 Зак. 2418
321
Приложения
Мнемокод команды Название Изменяемые флаги
DECFSZ f,d Декремент f, пропустить команду, если 0
INCF f,d Инкремент регистра f (+1) Z
INCFSZ f,d Инкремент f, пропустить команду, если 0
IORWF f,d Логическое ИЛИ W и f Z
MOVF f,d Пересылка регистра f Z
MOVWF f Пересылка W в f
NOP - Холостая команда
RLF f,d Сдвиг f влево через перенос с
RRF f,d Сдвиг f вправо через перенос с
SUBWF f,d Вычитание W из f С, DC, Z
SWAPF f,d Обмен местами тетрад в f
XORWF f,d Исключающее ИЛИ W и f Z
Команды с константами
ADDLW k Сложение константы c W С, DC, Z
ANDLW k Логическое И константы и W Z
IORLW k Логическое ИЛИ константы и W Z
SUBLW k Вычитание W из константы
MOVLW k Пересылка константы в W
XORLW k Исключающее ИЛИ константы и W
Бит-ориентированные команды
BCF f,b Сброс бита в регистре f
BSF f,b Установка бита в регистре f
BTFSC f,b Пропустить команду, если бит равен нулю
BTFSS f,b Пропустить команду, если бит равен единице
Переходы
CALL k Вызов подпрограммы
CLRWDT Сброс Watchdog таймера
322
3. Макрокоманды ассемблера MPASM
GOTO к Переход по адресу
RETLW к Возврат из подпрограммы с загрузкой константы в W
RETFIE Возврат из подпрограммы с разрешением прерываний
RETURN Возврат из подпрограммы
SLEEP Переход в режим SLEEP
Каждая команда PIC16F84 — это 14-битовое слово, которое разделено по
смыслу на следующие части: —1. код операции, —2. поле для одного и более
операндов, которые могут участвовать или нет в этой команде. Система команд
PIC16F84 включает в себя байт-ориентированные команды, бит-ориентирован-
ные, операции с константами и команды передачи управления.
Для байт-ориентированных команд Т обозначает собой регистр, с которым
производится действие; "d" — бит определяет, куда положить результат. Если
"d" = 0, то результат будет помещен в W-регистр, при "d" = 1 результат будет
помещен в "Г, упомянутым в команде.
Для бит-ориентированных команд "Ь" обозначает номер бита, участвующего
в команде, а "Г — это регистр, в котором этот бит расположен.
Для команд передачи управления и операций с константами, "к" обозначает
восьми- или одиннадцатибитную константу.
Все команды выполняются в течение одного командного цикла. В двух слу-
чаях исполнение команды занимает два командных цикла: -1. — проверка
условия и переход, -2. — изменение программного счетчика как результат вы-
полнения команды. Один командный цикл состоит из четырех периодов гене-
ратора. Таким образом, для генератора с частотой 4 МГц время исполнения
командного цикла будет 1 мкс.
3. Макрокоманды ассемблера MPASM
Фирмой Microchip разработаны специальные команды для ассемблера
MPASM. Эти команды сокращают объем написанной программы и ускоряют
процесс написания программ. Пользоваться макрокомандами необходимо
осторожно, с учетом сказанного в рекомендациях данной книги.
Мнемоника Действие
ADDCF Прибавление переноса к содержимому регистра
ADDDCF Прибавление десятичного переноса к содержимому регистра
В Безусловный переход к адресу
ВС Переход при переносе
BDC П ереход при десятичном переносе
BNC Переход лри отсутствии переноса
323
Приложения
Мнемоника Действие
BNDC Переход при десятичном переносе *
BNZ Переход при отсутствии признака нуля (результат не нулевой)
BZ Переход при наличии признака нуля
CLRC Сброс флага переноса
CLRDC Сброс флага десятичного переноса
CLRZ Сброс флага равенства нулю
LCALL Вызов подпрограммы за пределами из блока 256 команд
LGOTO Переход за пределы блока из 256 команд
MOVFW Загрузка содержимого регистра в рабочий регистр
NEGF Изменение знака содержимого регистра
SETC Установка флага переноса в 1
SETDC Установка флага десятичного переноса
SETZ Установка признака нуля
SKPC Пропустить следующую команду, если перенос
SKPDC Пропустить следующую команду, если десятичный перенос
SKPNC Пропустить следующую команду, если нет переноса
SKPNDC Пропустить команду, если нет вспомогательного переноса
SKPNZ Пропустить следующую команду, если нет нуля
SKPZ Пропустить следующую команду, если ноль
SUBCF Вычитание переноса из содержимого регистра
SUBDCF Вычитание десятичного переноса из содержимого регистра
TSTF Проверка (тестирование) регистра на равенство нулю
4. Коды прошивок микроконтроллеров
Часы с тремя будильниками
Файл chasu.hex.
:00000001FF
:020000040000FA
:020000000528Dl
:08000800DC298316043081009D
:10001000A0308B00183085008030860083120613D4
: 100020008612AA018F0181018C018D018E01900140
: 1000300091019201930194019501A801A7019801F2
324
4. Коды прошивок микроконтроллеров
100040009901АЗО 196019В01 ADO 19С01АЕО19D01А7
10005000AF01B201B3010130A00097000F1E352897
10006000861B54288F183B28402832083302031976
1000700030280F163028990A1E30190203193D2224
10008000ЕА21851D4928A00A2008073C03195128А7
100090005Е29200882077Е287428602860286А2844
1000А0ОО6А287428А0015Е29ЕА210А309100980А82
1000В00018089000083С031D5E29980190015E29F4
1000C000180882078E28ED28F528FD280529D22852
1000DOOOCB283B291808820797281B2923292B297D
1000E0003329D228CB285029180882075E19A02955
1000F000AF29BE29D628D228CB284629180882073E
100100008828AA28B328BC28A028D228CB2846298A
10011000051E5E298C018D01C5205E29051E5E2904
100120000A30910018089000FD21C8205E29051EA4
100130005Е290А309100180890000F22C5205E2920
10014000051Е5Е290А309100180890003222С52051
10015000C8205E290A309100180890001B0803226D
100160002D0825225E290A309100180890001C08ED
1001700003222E0825225E290A30910018089000DB
100180001D0803222F0825225E290D0803220800DE
100190000Е0825220800170891000А309000С5209В
1001A0OOC8205E29F021C520C8205E290A309100B0
1001В0001808900032082522330803225Е29180807
1001С00090000А3091003008С53Е0319ЕВ28В00АВ0
1001D000300803220800BGO1Е828051Е5Е291В082С
1001EOOOBOOODF2030089BOOAA28Q51Е5Е291C08ED
1001F0OOB0O0DF2030089C00B328051Е5Е291D08D2
10020O0OB0OODF2O30089D00BC28051E5.E293308A1
10021000В1000D213108B300D628180890000А302В
1002200091003108Е93Е03191929В10А3108252244
100230000800В1011629051E5E292D08B1000D2107
100240003108AD00AA28051Е5Е292Е08В1000D2137
100250003108AE00B328051E5E292F08B1000D211C
100260003108AF00BC28051E5E293208B1000D21FF
100270003108B200D628051Е5Е29180890000А3001
100280009100A30A1D30230203195C29180890006D
100290000А30950091002А089400230803225Е2961
1002А000051Е5Е29180890000А3091002А185А2964
1002В0002А1446292А104629А30146290В19Е329А5
1002С0006Е291F3086008500051E6E298F1E6E293F
1002D0008B176129051E6E298F1A61299E01103026
1002E0009F0077299E0A06301Е0203196А29960А82
1002F00064301602031981291E082002031D8D296E
10030000872996010F1986290F1587290F110310С8
100310000F1903140T?188F29952903109529861694
100320000С1C9529861206148F291F088400000DC5
1003300086001E0885000F1806179F0A8B17722962
325
Приложения
: 100340000A309100180890000F102D080E020319B2
: 10035000АА295Е291B080D020319CD295E290A303E "
: 100360009100180890000F102E080E020319B929E9
:100370005E291C080D020319CD295E290A3091005F
:10038000180890000F102F080E020319C8295E29C3
:100390001D080D020319CD295E29051E5E290F14C3
:1003A0005E290A300314A602031CD829A80AD22900
:1003B00026080A3EA7000800A4000308A5000408B8
:1003C000A90006142E280B11250883002908840093
'.1003D000240809000C08C53E0319FA298C0A0800F4
:1003E0000C08A600D1212708900028089100A80138
:1003F000A70108008C01900191010D08C53E031969
:100400000C2A8D0A0D08A600D12127089200280881
:100410009300A801A70108008D01920193010E0825
:10042000E93E03192E2A8E0A8FlAlB2A0E08320261
: 100430000319232A242A0E0833020319202A242A06
:100440008F120F12242A8F160E08A600D12127081A
:10045000940028089500A801A70108008E019401C6
:1004600095018F14970A17089100083C0319392A3F
:100470000800013097Q034225E292AlC482A2308EC
:10048000AB00AB092B0A8C078F109901F0215E2974
:0A04900023088C07F0218F105E296D
:02400E00F03F81
:00000001FF
Часы с будильником - шахматные часы
Файл shahmatu.hex.
:020000040000FA
:020000000528Dl
:080008001A2A8316043081005E
:10001000A0308B00003085008F3086008312B20143
:100020008101AB01AC01AD01AE01B001AF01B10185
:100030009001910192019301980199019A019B010C
:100040009401950196019701A801A7019D01A101C5
:100050009E01A301A201B301B4010130A000061C5E
:100060003820B21A3628861C8B2840288022432943
:100070009E0AlE18B2161ElCB2123210321308004D
: 10008000802206194928A00A2008093C03194F2894
:10009000F2281D0882075F286A2875288028A00199
:1000A000F2288207BF348634DB34CF34E634ED34B3
:1000B000FD348734FF34EF348834C834C934200821
:1000C0008207A328D4289328D9289728F228F22831
:1000D000F228F2282008820713292B29472A312ADF
:1000E0005B2A6F2AFC28F528E92820088207E428E3
:1000F000E428E428E428E428E428E428E428E428A0
:10010000200882079C28A928CF28B328C228F228D3
:10011000F228F228F22880229D0AlD08043C031DC3
326
4. Коды прошивок микроконтроллеров
10012000F2289D01F2288619642АА301642А32105С
100130008619502AA201502A8619F228AE01AF0171
10014000В001В101FC288619Е428ABO 1АСО1DE2026
10015000F2288619CF28B30A3C3033020319BE2097
1001600033088D22F22803118619CF28B40A1830DB
1001700034020319C02034089F22F228B30108007A
10018000B40108002D0834020319C728E4282C08FC
1001900033020319CD283210E4283214E42833083E
1001A0008D2234089F22F2288619F2288722E12026
1001B000F2288619F2289922DE20F2282C088D22B6
1001C00008002D089F220800B2113213DE20E12022
1001D000F2288619F2283213B21DF028B211E42851
1001E000B21571290B19262ABA298619FC28B10AD9
1001F0O082303102031910293108B000A6000F2205
1002000027089А00960028089В00970098019901FA
1002100094019501AE01AF01A701A8013217F228A0
10022000B101B001FC2886191A29B10A82303102C5
10023000031929293108A6000F222708940028084D
1002400095000А3096009700АЕ01А701А801321769
10025000F228B1011A2986193229B00A82303002F7
10026000031941293008A6000F2227089A00280800
100270009B000A3099009800AF01А701А80132172Е
10028000F228B0013229В21Е7129861F4929861В26
100290005D29AF03FF302F0203194F297129031184
1002А000В1080319032A3B30AF00B103FF3031021С
1002В00003195В297129В1017129АЕ03 FF302Е02А8
1002C0000319632987290311B0080319092A3B3050
1002D000AE00B003FF30300203196F298729B00147
1002E00087292F08A6000F222708940028089500C8
1002F000A701А8013108A6000F22270896002808A8
100300009700А701А8013217В21E8729F2282E08EC
10031000A6000F222708980028089900A701A80125
100320003008A6000F2227089A0028089B00A70182
10033000A8013217F2288B17B21AA029B21DBA29C8
100340009С0114309F0032181C12321C1C161F080E
1003500084000008512086001С0885001С12В21Е73
100360008515B21A85119F0A9C0A08301C020318D1
100370009В29А329В21А9В29В2199В29321ВС32995
1003800010309F00C52914309F008B179C011C085A
100390002002031DD829A10A05302102031CD829F7
1003A0000A302102031DD629A101D8293215D929E5
1003В00032111С081D02031DDE29321632181С12D0
1003C000321C1C161F08840000085120321980308Е
1003D00086001C088500321A8515321E85113212DE
1ООЗЕООО1С129F0A9C0A321BF929B21AF929B21D64
1OO3FOOOFE29O8301С020318ВА29С72904301С0240
100400000319BA29C729B21EF2283214AF01B1016B
100410007129B21EF2283214AE01B00187290A30C8
327
Приложения
: 100420000314А602031С162АА80А102А26080АЗЕ4С
: 10043000A7000800A4000308A5000408A9000030D4
:10044000860083168F30860083122F288316803013
: 10045000860083120В1125088300290884002408D4
: 10046000090032178619F22822088900310888000D
:100470008В138316081555308900АА30890088141В
: 10048000081Е402А0В130812081183121А29861914
: 10049000502АА20А2208403С03194F2A502AA201 DE
: 1004A000321722088D2210089800110899000A308E
:1004B0009A009B00F2288619642AA30A403023027E
: 1004C0000319632A642AA301321723089F22120802
: 1004D0009400130895000A3096009700F2288619B8
:1004E000F22823088900831608148312FF300802BB
: 1004F00003197E2A0808 В100B000322900307B2A97
:100500002B08C53E0319862AAB0A0800AB012C084C
:10051000C53E0319962AAC0A2C08A6000F2227080C
: 10052000900028089100A801A7010800AC019001E3
:1005300091012D08E93E0319A82AAD0A2D08A6004D
:100540000F222708920028089300A801A70108009D
:08055000AD0192019301F228B4
:02400E00F03F84
:00000001FF
Регистратор событий
Файл regist.hex
:020000040000FA
-.020000000828CE
:080008000B 18D6290B192F2A51
:10001000831604308100A8308B00003085008030CA
: 10002000860083129A01810190018F018E01920155
:10003000930194019501A801A701AC01AA019801BF
:100040009101AD01AB01A0019D0101308D008C003B
:10005060A100A20099000609063A03199D14060999
:10006000863A03199D149D18DA28861C4A283828D8
: 100070004D2206194128A00A2008053C03194828EA
:100080006429200882078628742880287A288628F0
: 10009000A00164294D22980A1808043C031D642914
: 1000A000980164290A30940095002A087022642976
:1000BO000A30920093001A088222642930088222B2
:1000C00031087022642932088222330870226429A0
-.1000D0001808820758285E286328522818088207 C3
:1000E000223444340034113418088207BC28D12843
:1000F0003029122918088207C228C8283029212946
:1001000018088207AC288C283029B12818088207E3
:100110008C28552930295F290C0882220D0870226D
:1001200064290D08820700001F341C341F341E345C
:100130001F341E341F341F341E341F341E341F342A
328
4. Кодыпрошивокмикроконтроллеров
100140008207FE34B034ED34F934B334DB34DF34B9
10015000F034FF34FB348134051А642990018F0197
100160003029051А52280430АА0740302А02031900
10017000ВА285228АА015228051А64296А220Е08В0
1001800082226429051A64297C220F0870226429BE
10019000051АСВ288Е220С0882220А309300920086
1001A0006429051AD42896220D0870220A30950079
1001B000940064294D220311861С0729051А64291D
1001C0009D1ВЕ4289А019D17FA20B0009A0AFA2094
1001D000B1009A0AFA20B2009A0AFA20B3009A0AE9
1001Е0002А08043Е1А020319F6280C299D109А01С8
1001F0009D1364291А088900831608148312FF309E
100200000802031905290808080000300800980АА8
100210001808043С0319102118086Е20А300682850
1002200098010800051A1829A103A10803191E291D
10023000210870220А309500940064291430А1002Е
100240001829051А2729А203А20803192D29220813
1002500082220A309300920064291430A2002729D8
100260000F0870220E08822264299D1C672903143E
10027000ЕЕ309Е0012309F009D121Е092306031DC2
1002800042299D161F0884000008A02086001E0831
1002900085009D1А05169D1Е05129F0A77301Е06С1
1002А0000319352903149E0D3C29051A5F29990A63
1002В0001530190203195D295F2901309900950154
1002С00094011908702264290В193Е2А6729031426
1002D000EE309E009D1835298В179В0112309F0030
1002E00076299B0A04301B02031967299C0A2830CF
1002F0001С02031D82297C299C011D1981291D15С1
1003000082291D111D1D8B291B082002031D8B290D
100310000F3085009B291В081802031D90299D168С
100320001F0884000008A02086001E0885009D1А72
1003300005169D1E05129D129F0A77301E06031991
10034000A22903149E0D1D18A62971298B16831648
1003500000308600831286178B128613FF308613B7
10036000FF3E000000000000000000000000000050
10037000000000000000000000000000000000007D
10038000000000000000000000000000000000006D
100390000319CB29AF2986171D1000000000831612
1003А0008030860083120В108В166729А400030887
1003B000A5000408A900861BDE29E729250883007B
1003С0002908840024080В130В108В170900323006
1003D000FF3E031DE829861BDE299D19DE291D1815
1003E000DE291D16910A0311110819020319F929B2
1003F000DE2991019A011D149D150C30AE002E08C6
1004000084000008AC002A0889002C0888008B139F
100410008316081555308900AA3089008814081EF3
100420000F2A0B13081208118312АА0А2А08403С4В
100430000319212А9А0А04301А020319222ААЕ0А41
329
Приложения
: 10044000FF29AA019А01DE290A300314А602031С1F
: 100450002B2AA80A252A26080A3EA7000800A4007D -
-.100460000308A5000408A900FF3085008600831654
:10047000103085008630860083122В28831680304А
: 10048000860000308500081283120В130В1125081В
:10049000830029088400240809001DlE582AAD0A7B
: 1004A0002D0821020319552A582AAD0191011D1268
: 1004В0001008С53Е03195Е2А900А080090019D1D90
: 1004С0006А2 ААВ0А2В0822020319672А6 А2ААВ019F
: 1004D0001D149D110F08C53E0319792A8F0A0F08B4
:1ОО4ЕОООА6О0242227О892ОО28О893ООА8О1А7О14В
:1004F00008008F01920193010E08E93E03198B2A2F
:100500008Е0А0Е08А60024222708940028089500С9
:10051000А801А70108008Е019401950191200С0209
: 100520000319942А8С0А080001308C008D0A0D08EA
-.0E053000F33E03199С2А080001308D000800DC
:02400E00F03F81
:00000001FF
Автомобильный цифровой тахометр
Файл taxometr. hex.
:020000040000FA
-.020000000528D1
:0800080080288316С43081003А
: 10001000В0308В00183085000130860083128101DA
: 1000200090019801910199019В0192019А010В1D88
: 1000300066280В11851D53281808180703189B0AFA
: 100040000310980703189В0А1908190799071В083А
: 1000500099079В0164009001910192010311990895
: 1000600003194Е28643003149802031C3928920A9D
: 100070003428640003119908031941289903920А4Е
: 10008000332898070А3003149802031С4928910А60
: 1000900044281807900098019901892803119808AD
:1000A000031989283228FE301A07031959289A0A99
: 1000В00089289А012А2882078134F334493461342В
-.1000C000333425340534F134013421346400930190
: 1000D0008B17131410309400840000085B208600F6
: 1000E000130885007B200310930D93196628640084
:1000F000940A14086C280A30FF3E031D7C2808006F
: 100100008В13950003089600040897008В188F281Е
-.100110001928160883001708840015080900180814
:10012000FF3C03199628980A8B1089289801190812
:10013000FF3C03199E28990A8B1089289901980180
:0201400089280С
:02400E00FC3F75
:00000001FF
330
4. Коды прошивок микроконтроллеров
Программатор
Файл shool.hex.
:020000040000FA
:020000000528Dl
.•080008001С2В8316033081005С
: 1 000 1000А0308В00183085008030860083120613D4
: 10002000ВА019501А701В001В20181018С018D01D6
:100030008E018F0190019101A001A101A201A301F4
: 10004000A401A501C001С101B601B701ВЗО193012B
: 10005000А801AA01А90101309400А600А200612А0А
: 1000600032183428861В42288519972032183A28DE
: 10007000051АЕ42095183D28080005300C020319Е4
: 10008000АА2В0800151В482827180800271А080063
: 10009000151353280D08820700340A3414341E3413
: 1000A000283432343C3404300D0203180800301B6D
: 1000B00094284A200C079D0020301D0203188А282Е
: 1ОООСОООЗО1В6А28151В0800410Е4004ВС00370Е87
: 1000D0003604BF00471871281D0889003C088800B5
: 1000E00076281D08203E89003F0888008B13831660
: 1000F000081555308900АА3089008814081Е7Е280А
: 100100000В13081208118312С70А023047020319А1
: 100110008Е286А2830138С018D010800С7019401D4
:10012000301F08009D0A5C28BC01BF015C28151DlA
:100130000800940А15111408073С0319А0280800А8
: 10014000940132100800063014020319D128271236
:10015000271404300D020319B72805300D020319C6
:10016000C42806300D0203198D011517Е329151354
:100170000C08820726292D29CD290C2A232A342967
: 100180003D2946294F296F2915130C088207592943
: 1001900060296729172A7729D42808000800080051
: 1001A000080032141513C9291512861F08000930DA
:1001B000220203197E23A001A101A201A301321A88
: 1001C000BD2206309460CF29151D08001511140812
:1001D0008207F028F628FC28022908290E29C929B7
: 1001E0008C0A0A300C0203188C0184298D0A06300F
: 1001F0000D0203188D0184298E0A0A300E0203189D
: 100200008E0184298F0A06300F0203188F0184297A
:10021000900A0A301002031890018429910A0330Dl
.*1002200011020318910184291512073026020319BF
: 10023000A715031DA7110800151206302602031981
: 10024000A715031DA711031D14290800861F080008
: 1002500027142712063094000800861F080027166E
: 1002600027100630940008001512861F0800A716F4
: 100270002713A7133010B01281291512861F08000A
: 100280002717A712A7133010B01281291512861F45
: 100290000800A7172713A7123010B01281291512D2
:1002A000861F08003014271427122713A713B01233
331
Приложения
:1002B00081291512861F08003015B01130128129СЕ
-.1002C0001512861F0800B015301130128129151241
: 1002D000861F08003016А711 ВО 11301181291512А0
: 1002Е000861F0800A715В011301230118129151290
:1002F000B010861F080030178C018D019D018121EF
: 100300004228013094000800151B8D29151А9729Е1
: 10031000А718А129В018 AF29080015130Е08С000АЕ
: 100320000F08C1001008B6001108B7000800151228
:100330000E08A2000F08A3001008A4001108A500D1
: 10034000Q800A7100A308E008 F00910008301002BC
: 1003500003189001031810141008A6000800B0102C
:100360000A308F00910002301402031DBE290530AF
: 100370000E0203188E010E08B300080004301402A8
:10038000031D080002301002031890011008BA0083
:10039000080085190800271A282AA710151685199C
-.1003A00008003218DE2122088E0023088F0024085E
:1003B000900025089100271A1511080020088C00CC
:1003C00021088D00080015120230140203180800DD
:1003D00053201D0892000A230808C0000F30C005F2
: 1OO3EOOOO8O8C100C10E0F30C10540088E00410849
:1003F0008F00203092070A230808B6000F30B60598
-.100400000808B700B70E0F30B70536089000370858
:100410009100203092020800151285190800A714D7
: 100420000A308E008F0091002608900008001512F7
:1004300085190800B0140A308F00910033088E002F
: 100440003A08900008008E018F0190019101080088
: 10045000151B0800861B572A85190800271E08004F
: 10046000151D0800380A92001517EB2115130E0808
:10047000C8000F08C9001008CA001108CB00A90A5B
: 1004800003100B3029020318462ACD2903110C3022
: 1004900029020319A9018C018D0148088E00490821
: 1004A0008 F004A0890004B0891001511080027168C
: 1004B000271006309400080030191C29B01914299F
: 1004C0000800AE018B170C088B22A3208B1F692A12
: 1004D000662A8B170D088B225C228B1F702A6D2ACF
: 1004E0008B170E088B22A0228B1F772A742A8B175A
: 1004F0000F088B2230208B1F7E2A7B2A8B17100837
: 100500008B22C3228B1F852A822A8B1711088B22EC
: 100510008B1F612A882AAF000310AF0D2E0814022A
:100520000319AF12031DAF16051E992A15182F17B0
:10053000151C2F132F0886002E088500AE0A080010
: 10054000321AD528321DA92AB21DAE2A321EB32A6C
:10055000B82A23303F0203193215080059303C02F3
:100560000319B215080005302102031932160800DC
:10057000013021020319BD2A08003211B2113212D2
: 10058000063094000800A7190800B01A08002719BF
: 100590000800151B0800250E2404BF00230E2204AA
: 1005A000BC009201031100303F02031D092B0311 OF
332
4. Коды прошивок микроконтроллеров
:1005B00000303C02031D092B0800031108083F020C
:1005С00003199517031D951120309202951FFF2ADC
:1005D00027151208B80095119513271В1514А71А93
:1005E000F22A08002AlC15142A18151008000808F9
:1005F0003C02031D9511031995159519062B03103F
: 10060000920А20301202031808000А2В20309207А9
:100610000А2В920112088900831608148312FF30F6
:10062000080203191A23151B08009519DD2A951DC8
:10063000F72ADD2A88010800B4000308B500040881
:10064000B90029230B1135088300390884003408C8
:100650000800930A1308063E03192F2B0800930184
: 1006600015150930200203184C2BA00A30183B2B1В
:10067000A71B3E2B0800151815100800271D0800Al
: 100680001514A80A063028020319472B0800A801F0
:1006900015102711B0160800A00103112108FB3E18
:1006A0000319542BA10A0800A10103112208F73EE7
: 1006B0000319702BA20AA71BB012271B632BA71AC2
: 1006C000682327110800271D0800151027110800AE
:1006D000271D0800AA0A2A1815142AlC151008003C
:1006E000A201271B6323A71A6823271103112308DC
: 1006F000FB3E03197D2BA30A0800A3010311250863
:10070000FE3E03198B2B2408F73E0319942BA40AFl
: 1007100030181514080003112408FD3E0319942B0A
: 10072000A40A301815140800A40130181514031178
: 100730002508FE3 E03199E2BA50A0800A5010311 FA
:100740002608F93E0319A62BA60A08000130A600C8
: 10075000951408003A1CB32B3308BB00BB093B0AB5 .
:0E076000A007951008003308A00795100800A8
:02400E00F13F80
:00000001FF
Универсальный таймер
Файл kuxtim.hex.
:020000040000FA
:O2OOOOOOO528D1
:08000800432983160430810036
:10001000A0308B0008308500003086008312A001DC
:10002000A10181018C018D018E019001910192014C
: 10003000930194019501960199019A019B01 АЗО 1F5
: 100040009C0101308F004D28861F3428061 FAO 1404
:10005000861E2015A00803192F2899015D29031178
:10006000990A031921145D2920140A298F080319FC
:10007000402803108F0D8FlD5D298F010F140A2951
:100080000F145D298207C034F934A434B034993494
:1000900092348234E834803490348B1721188B28B2
:1000A00097011714201C58288F185B280F195E28F9
:1000B00010309800602812309800602814309800A2
333
Приложения
:1000C000A01E6B28A30A9630230203197028AllDD5
:1OOODOOO6B287428A11117080F020319A1147428A2
:1000E000A301A1196A28A11521191712211D17169C
: 1OOOFOOO18088400000842208600A1188613A11960
:10010000861317088500Al 1017120310970D971971
:100110004D28980A6028FF308600211C4D2821199F
:1001200093288B178B2821104D28A0138901A42018
:100130008C00890AA4208D00890AA4208E00890AD7
:10014000A4208F0089010A29831608148312FF3026
:1001500008020319AD200808080088010800890179
:100160000C309C001C088400000888008B13831648
: 10017000081555308900AA3089008814081EBE2849
:10018000081208118312890A0908043C0319CA28B5
:100190009C0AB2288901A0115D2920118F18DB2843
:1001A0000F19E4288C03FF300C020319D8280A2900
: 1001B00009308C000A298D03FF300D020319E12854
: 1001C0000A2909308D000A298 E03 FF300E02031917
:1001D000EA280A2909308E000A29A0108F18FA2867
:1001E0000F1902298C0A0A300C020319F8280A296F
: 1001F0008C010A298D0A0A300D02031900290A29E7
:100200008D010A298E0A0A300E02031908290A29CB
:100210008E010A29201C10298F181B290F19262945
: 1002200096019501940193010C0890000D0891002E
:100230000E0892005D2990019101950196010C082C
: 1002400092000D0893000E0894005D299001910121
: 10025000920193010C0894000D0895000E08960079
:100260005D2921193F29A001A101061FA015861EA5
: 10027000A017851 DAO 16A008031999015D29211159
:10028000201867295D299D0003089E0004089F002F
:100290008316F0308600A0308B008312061E3129Bl
-.1002A00020186729851D3628A019AF28A018ED2829
: 1002B0002019CD28A01B95282428831600308600FD
:1002C00083121E0883001F0884001D080900861F72
:1002D0002110900803196E2990035D2903119108DC
:1002E000031976290930900091035D2903119208C2
:1002F00003198029093090000530910092035D298F
: 100300000311930803198C290930900092000530DD
:100310009100930321145D2903119408031998296E
:1003200009309000920005309100930094035D29FC
: 10033000031195080319A529093090009200940033
: 1003400005309100930095035D2903119608031968
:10035000B5290930900092000530910093000230D9
:1003600095000330940096035D29A01ABA2921153F
:1OO37OOO2O1OOA299BOA1B1821151B1C21119528E6
:02400E00F03F81
:00000001FF
334
4. Коды прошивок микроконтроллеров
Автомат включения освещения
Файл svet.hex.
:020000040000FA
:02000000E42AF0
:08000800822882077Е343034А7
:100010006D34793433345B345F3470347F347B3403
:10002000820700340А3414341Е34283432343С3409
:10003000463450345A340E088207A228AE28BE280F
:10004000D128DE282D08210203194228031D3A2059
:100050002D080D02031951280D086020AF078D0AE5
:10006000B7302F020318352022282B1908002B1532
:10007000AF0008002B1808000930AF078D010D14E0
:100080002B140800031022080C02031848284C28DF
:1OOO9OOOAFOO2B11AB14O8OOB73EAFOO2B15AB14OB
:1000A0000800AB180800AB140C08AF07B7302F02DC
: 1ОООВООООЗ1C0800AF002B192B112B1D2B1508005A
: 1000C000820700001F341D341F341E341F341E34B9
:1000D0001F341F341E341F341E341F34200882077F
:1000E000342946294C295229582908008E0A0E081D
:1000F000053C03198E010E08820705290E291729D0
:1001000022292B29A4000308A5000408A900C52161
:10011000861B912883161030850086308600831256
:10012000ED209DlC06169D188615831680308600CE
:100130000030850083120B112508830029088400F4
: 10014000240809001208BC001308BD0010203C0759
:10015000C5001408BE001508BF0008001D141208Dl
:10016000C0001308C10010204007C6001408C200D8
:100170001508C30010204207C700080012089700A6
: 100180001308AE0010201707AD000A2214089100D2
: 1001900015089600102011078C00F6211721AB01DD
:1001A00008001D101208B8001308B9001020380705
: 1001B000C4001408BA001508BB0008001208B400F7
:1001C0001308B500102034078F001408B600150876
:1001D000B7001020360798000800861C7620861885
: 1001E0007B20061DFF20051E6E20051E0800AB1893
: 1001F0000800AB01AFO12220A02120230800A00AA3
:100200002008053C0319A00108003C0892003D08A5
:1002100093003E0894003F089500080040089200B3
:100220004108930042089400430895000800F62115
: 100230000A22170892002E0893001108940016084D
:100240009500080038089200390893003A08940095
•Л00250003В089500080034089200350893003608Е2
:10026000940037089500080002300E0203193E2959
:10027000920A0A301202031892011B28920A0A30CD
: 1002800012020318J 314031892011B28930A0A3050
: 100290001302031893011B28940A0A30140203184E
: 1002A00094011B28950A0A301502031895011B2892
335
Приложения
1002В000051А1В280Е1990010Е1960299401950149
1002С000920193011В28861В9А298В17ЕЕ309Е0002
1002D0009B0112309F006D299B0A9C0A32301С0240
1002Е000031D79299C011D1977291D1579291D11D7
1002F00082291D1D82291B082002031D82291F300F
10030000850092291В080Е0203199D161F08840000
100310000008052086001E0885009D1А05169D1EF2
1003200005129D129F0A77301Е06031963290314D4
100330009E0D6C29FF308500861F6329D4239A29DE
10034000В301С801 BOO 12В1DAB29B730B000AF0914
100350002F0A3007AF0028228A01В100B2000F3007
10036000B205F030B105B10E3108B30703182B17F1
100370003208С8070318АВ172F083002031908000А
100380002B19B0032B1DB00AAB291008C53E031969
10039000CB29900A080090010F08C53E0319DB29FC
1003A0008F0A0F08A60015232708B4002808B500F7
1003В000А801А70108008F01В401В5011808Е93ЕА2
1ООЗСООООЗ19ED29980A1808А60015232708В60076
1003D0002808B700A801А70108009801В601В701D5
1003E0002D0860200C020318052A8C0A0C08A600B0
1003F00015232708910028089600A801A701861F49
100400000800АВ18AF0AF920080001308С009100F9
100410009601AF0A2D08A600152327089700280883
10042000АЕ00А801А701861B8D0A861В1С2А03119А
10043000AD080319232A08002D08F43E0318232AC7
10044000AD0AF92008000130AD008D00F920080048
1004500002308А003008820700340034013401344D
1004600000340134013401340134013402340134Е4
100470000134113412341134123401341234113471
10048000123412341234113412341234013411344F
10049000123412341234223412341234123422340С
1004А00022341234223411341134113412341234FF
1004В000223422342234233422342234323422347В
1004C000223423342234223400342134223433348D
1004D000223422343234223432342234233432343B
1004Е000223400342134323422342234323422345F
1004F00032343334223432342234323422343234FB
1005000032342134223422343234323422343234FC
1005100022343234323422343234323432343234СВ
1005200032343334333422343234223432343234В9
1005300022343234223432342334323422343234СА
1005400033343234223432342234323422342234ВА
10055000323422343234323432343234323433347А
1005600033342334333422342234223422342234В8
1005700022342234223422342234223423342334С9
1005800022342234223422342234223422342234ВВ
1005900022342234223422342234223422342234АВ
1005А00022342234223412341234113411341034EF
336
4. Коды прошивок микроконтроллеров
: 1005В0001134113411341134013401340134013453
: 1005С0000134013400340034831604308100А0303В
:1005D0008B000030850080308600831281019001FD
:1005E0008F019801B401B501B601B701A801A701B7
:1005F0008E018D01AF01A0019D01AB01B801B901D0
: 10060000ВА01ВВО1С401ВСО1BDO1ВЕО1BFO1С501 ЕЕ
: 10061000С001С101С201СЗО1С601С7010С30А10064
:10062000AD001630A2008C0063290A300314A60224
: 10063000031С1С2ВА80А162B26080A3EA70008003C
:100640002B192D232BlD36233B183D233F184E23FA
: 100650003В1C68233F1C6F23762B1E309A002030F2
:1006600099000A30CE000E30CD0008000530CE00D3
: 100670001430CD009A01990108003A084D02C900D2
: 10068000440803141А020318АА00031808003С3097
:100690001А07АА004408АА02С903080003143Е0866
: 1006А0004Е02031С6223СА004508031419020318F2
: 1006В000АС00031808003С301907АС004508АС0238
: 1006С000СА03080018 304Е07СА003Е084А02080054
:1006D0004D083A07C9001A084407AA0008004E0846
: 1006Е0003Е07СА0019084507АС000800СВ01 CFO 1 ЗЕ
:1006F000A301CC01812391232B19B9232BlDA12305
-.10070000080003143C30B3020318CF0A0318812BEE
: 100710002В1F8D2B2B13CF0A812B3C303307CB00A3
: 10072000080003143С30С8020318СС0А0318912ВАС
: 10073000АВ1F9D2BAB1ЗСС0А912B3C304807A30079
: 1007400008004F08C9024B080314АА020318АВ2В78
:100750003С30АА07С9034С08СА072308АС073С3041
: 100760000314АС020318СА0А0318AF2B3C30AC07C1
: 1007700008004С08СА0223080314АС020318С42В57
: 100780003С30АС07СА03С62В0318AF234F08C90778
: 100790004В08АА073С300314АА020318С90А03181D
: 1007A000CA2B3C30AA0708001D18Е02В4908180284
: 1007В000031DEA2B2A0803110F020319F42B08006A
: 1007С00047081802031DEA2B460803110F020319FC
: 1007D000F42B08004A081802031D08002C08031116
: 1007E0000F020319F82B0800861106169D10080049
:0807F000861506129D14080095
-.02400E00F03F81
:00000001FF
Счетчик витков
Файл setsik.hex.
:020000040000FA
:020000000528Dl
:080008004А2983160030810033
: 1000100090308B00083085000130860083129701F4
:1000200081018C018D018E018F019001910192015E
12 Зак. 2418
337
Приложения
: 10003000930199019A019B019C019D019E019F01E1
: 10004000А001960198019401E0288C018D018E0198
:100050008F01900191019201930197119710171050
:100060001719080099019A019B019C019D019E01AD
: 100070009F01A0010800971C080017119710140891
:10008000083C03194528940A080094018B131711A2
:1000900097118828971C0800971014088207582881
:1000A0005E2864286A28702876287C288228080020
: 1000B000990A0A3019020318990188289A0A0A3005
: 1000C0001A0203189A0188289B0A0A301B02031897
:1000D0009B0188289C0A0A301C0203189C0188286E
: 1000E0009D0A0A301D0203189D0188289E0A0A30C5
: 1000F0001E0203189E0188289F0A0A301F02031857
:100100009F018828A00A0A3020020318A00188282D
:1001100019088C001A088D001B088E001C088F001F
: 100120001D0890001E0891001F08920020089300EF
: 1001300008008C08031DB2288D08031DB2288E0804
: 10014000031DB2288F08031DB2289008031DB22892
:100150009108031DB2289208031DB2289308031DBD
: 10016000B228080097150C081902031D08000D0895
: 100170001A02031D08000E081B02031D08000F08C9
: 100180001C02031D080010081D02031D08001108B1
: 100190001E02031D080012081F02031D0800130899
:1001A0002002031D08001714080082077F340D3455
:1001B000B7349F34CD34DB34FB340F34FF34DF34B9
: 1001C00095010C0814211719992037210D081421C5
:1001D00083160630860083129719FA28861C3B2066
:1001E000061D4A20861CFA281408083C0319171516
:1001F00003198B17851D2520831601308600831275
: 1002000037210E08142137210F0814213721100837
: 100210001421372111081421372112081421372104
: 10022000130814213721E028D52096001508140260
: 10023000031D2729A50A0A302502031D2829A50127
:10024000171A1712171E1716171A9716282997121A
I1002300017181512171C151615088500971E160875
: 10026000971A8601971E86001512950A0800FA3023
:10027000A400A40300000000000000000000000033
: 100280000000031D392997190800980A98080319D6
: 1002900097140800A1000308A2000408A30057292E
:1002A0008B10220883002308840021080900171DFl
: 1002B000502909300C0203185F298C0A50298C013F
:1002C00009300D02031866298D0A50298D01093065
: 1002D0000E0203186D298E0A50298E0109300F0273
:1002E000031874298F0A50298F010930100203184E
:1002F0007B29900A502990010930110203188229A4
: 10030000910A502991010930120203188929920A91
:10031000502992010930130203189029930A502999
:0403200093015029CC
338
4. Коды прошивок микроконтроллеров
:02400E00F23F7F
:00000001FF
Кабельный пробник.
Передатчик
Файл kabelpd.hex.
:020000040000FA
:020000000528D1
:08000800DF288316043081009B
: 1 000 1000A0308B0000308500003086008312810103
:100020008C018D018E018F0190019101920193014C
: 10003000940195012428820700340A3414341E34B4
:10004000283432343C3446349801180885008В1724
:1000500001308C0018081B208C078C0803193628E7
:100060008C030614D7200610D7202D288BlB36288A
: 100070008B1702308D0018081B208D078D0803197F
:1000800047288D038614D7208610D7203E288B1B47
:1000900047288B1703308E0018081B208E078E0808
:1000A000031958288E030615D7200611D7204F288C
: 1000B0008B1B58288B1704308F0018081B208F07C4
:1000C0008F08031969288F038615D7208611D7203A
: 1000D00060288B1B69288B170530900018081B209F
: 1000E0009007900803197A2890030616D720061265
:1000F000D72071288BlB7A288B170630910018089F
:100100001B209107910803198B2891038616D7208D
:100110008612D72082288BlB8B288B1707309200E2
: 1001200018081B209207920803199C2892030617AF
: 10013000D7200613D72093288B1B9C288B170830B9
: 10014000930018081B20930793080319AD28930305
: 100150008617D7208613D720A4288B1BAD288B1792
: 100160000930940018081B20940794080319BE282E
:1001700094038515D7208511D720B5288BlBBE2861
: 100180008В170A30950018081B209507950803194E
: 10019000CF2895030516D7200512D720C6288B1В1С
:1001A000CF28980A0830180203192428252803307C
-.1001B0009600960300009608031DD92808009900B0
: :Ю01С00003О89А0004089В00ЕЕ200ВША08830014
: 1001D0001B0884007730810019080800970A08007E
:02400E00F13F80
:00000001FF
Кабельный пробник.
Приемник
Файл kabelpm. hex.
:020000040000FA
-.020000000528D1
339
Приложения
:080008004B28831644308100EF
: 10001000B0308B00003085000130860083128101F2
:100020008C018D018E018F01920194019101232891
:1000300082077E340C34B6349E34CC34DA34FA344D
:100040000E34FE34DE34900190140E082E2033203E
:10005000900110140F082E2033202328182086002A
: 100060001008850008009201C8309200920303191D
:1000700008000530FF3E031D3A283628940A503008
:100080001402031D080094010C088E000D088F0057
:100090008C018D010800A1000308A2000408A30040
:1000A0008B185D283E200B118B102208830023083B
:1000B00084007830810021080900810109300C0298
:1000C000031864288C0A53288C0109300D02031888
:0C00D0006B288D0A53288C018D015328E9
:02400E00F23F7F
:00000001FF
Радиоохрана.
Модулятор
Файл oxpanapd.hex.
:020000040000FA
:02000000852851
:08000800602802308C0025285D
:1000100003308C00252804308C00252805308C0006
:10002000252806308C00252807308C00252808302C
:100030008C00252809308C0025280A308C002528C2
:100040000B308C00252801308C008C0803192E28D9
: 100050008C0385153B20851134202528640005126A
: 10006000111491182E28452802308D008D038D081В
: 10007000031D3628080002308D008D036400000047
: 1000800000008D08031D3D2808006400911C4528D0
: 1000900006182328861805280619082886190B280B
:1000A000061A0E28861A1128061B1428861B1728E4
: 1000B00005181A2885181D2805192028111045280B
:1000C0008E0003088F00040890006D200B110F08AC
: 1000D0008300100884000E08090091187A2805167C
: 1000E000911411180800342085153B208511342007
: 1000F0000512080091101118080005163420851506
:100100003B20851134200512080083.16043081003D
:10011000A0308B0007308500FF30860083128101FC
:08012000910185018D014528C4
:02400E00F03F81
:00000001FF
340
4. Коды прошивок микроконтроллеров
Радиоохрана. Демодулятор
Файл oxpanapm.hex.
:020000040000FA ;
:020000000528Dl
:080008003F28831641308100FE
:10001000B0308B00003085000130860083128101F2
: 100020008C018D018E018601920123288207003404
:100030000C34B6349E34CC34DA34FA340E34FE3414
: 10004000DE34103480340E08162086002328061C67
: 1000500008008D018101121C08008C0A14300C026A
: 100060000318051208000C088E000C300E0203184D
:100070008E0114300C02031805128C0108008F0049
: 1000800003089000040891008B1C4F2827200B11B7
:100090008B1010088300110884000F0809008D0AD6
:1000A0000D08FB3E031933200D08F93E0319121009
: 1000B000031905160D08 F73E03190512031912144A
:1000C00003198D0147280D08F63E03198D014728B5
:02400E00F03F81
:00000001FF
Электронный домоуправ
Файл uprat.hex.
:020000040000FA
:020000000528Dl
-.08000800632A83168330810096
:10001000A0308B00183085000030860083128601E6
: 10002000950181018D018E018F0190019101960151
:10003000970198019901A001A101B301B401AB019D
: 10004000AC019301A301A4019401B601B7010930E9
:100050008C00A12923088207F429FA29002A062AFC
:100060000C2A122A182AlE2A0D08820700340A3484
:1000700014341E34283432343C3404300D02031856
: 10008000080002301402031C080034200C07A500ED
: 1000900020302502031887283408AF002C08B00050
: 1000A0002408AD00AD0C031CAF110318AF15 AD0C47
:1000B000031C301103183015AD0C031CB0110318CC
:1000C000B0152F0E3304B100300E2B04B2003518DA
:1000D0006E28250889003108880073282508203EED
: 1000E0008900320888008B13831608155530890063 '
: 1000F000AA3089008814081E7B280B1308120811E7
:100100008312B50A0230350203198B2867288C0147
:100110008D01A5010800B501013094000800851982
:100120009828051A9D28151C0800861B3D280800E4
: 10013000051AA2288519B42808008519A228051ACD
: 10014000DF28080095111518AD2815140608A80019
: 10015000831680308600831293281510831686013B
341
Приложения
100160008312280886000800151D0800940A15113Е
100170001408063C0319940102301402031CDF2802
10018000951608009518СС2809300С020319582937
1001900008300С020319D328013014020319642912
1001А0000318452908005821861F08000930180245
1001B00003199D22960197019801990158298519E3
1001С0000800951114088207EA28022928292E29F7
1001DQ0034293A2995169518FA209510051Е08001D
1001Е0008С0А0А300С0203188С0108300С02031С24
1001F000FE28582924088C008D0108000C08A40052
100200008DO 108009512951С18219514051E0800F3
100210000D08FD3E031912290C08F73E0319252984
100220008С0А1D290C08FF3E031922298С0А1D295E
1002300036088C0037088D0008000C08B6000D0841
10024000B70008008C018D011D298C018D0A1D2924
100250008E0A0A300E0203188E0140298F0A0630DA
100260000F0203188F014029900А0А301002031868
1002700090014029910А033011020318910140298D
1002800095184529951C4F29080095120E08B300B2
100290000F08B4001008AB001108AC0008000E08ED
1002A00098000F0899001008A0001108A10008008C
1002В00085190800951618088E0019088F00200867
1002С00090002108910008009514182195123420FF
1002D0000C07A500920059220808B3000F30B3059F
1002E0000808AF00AD00AD0D031С23100318231444
1002F000AF0E07302F05B4002030920759220808AE
10030000AB000F30AB050808B000AD00AD0D031C0D
10031000231103182315AD0D031 САЗ 100318АЗ 14F8
10032000В00Е03303005АС0020309202151C0800DE
1003300033088E0034088F002B0890002C089100A1
10034000080095198F209513A6018B17951AAB29D4
1003500095192408951D0C08D4218В1FB029AD29AF
100360008В17951АВ629951D0D0895190030D421СЗ
100370008B1FBB29B8298B170E08D4218B1FC129CD
10038000ВЕ298В170F08D421С2208В1FC829C5296D
100390008B171008D4218B1FCE29CB298B1711085E
1003A000D4218В1 FA 129D129151СЕ729А700951А53
1003B000DB299519E0292608140203192716031DC5
1003С00027122708860026088500А60А08008В1732
1003D00095198F2095171518А1292422151FE72993
1003Е000151АЕ72915162A280618F8290614E729E8
1003F0000610E7298618FE298614E7298610E729C2
100400000619042А0615Е7290611Е72986190А2А7А
100410008615Е7298611Е729061А102А0616Е72904
100420000612Е729861А162А8616Е7298612Е72970
10043000061В1С2А0617Е729061ЗЕ729861В222А12
100440008617Е729861ЗЕ729151В080015180800Е9
1004500092016В21003003113302031D3E2A00304C
342
4. Коды прошивок микроконтроллеров
: 1004600003113402031D3E2A003003112В02031D29
: 100470003Е2А003003112С020319522А33081802В5
: 10048000031D522A34081902031D522A2B08200288
: 10049000031D522A2C0821020319151703191512DE
: 1004А000031908000310920А2030120203180800F2
: 1004В000292А12088900831608148312FF300802C3
: 1004С000031988010800А9000308АА000408АЕ0067
:1004D00072220Bl 12A0883002E0884002908951F18
:1004Е00008000900930А1308063Е0319782А080039
:1004F00093011515161С951516189511093016023D
: 100500000318842А960А0800960103111708FB3E77
: 1005100003198С2А970А080097011513031118086С
: 10052000F73E0319952А980А080098010311190843
: 10053000FB3 ЕОЗ199D2A990A08009901031121081D
:10054000FE3E0319A92A2008F73E0319B02AA00A83
: 10055000080003112008FD3E0319В02АА00А080074
:10056000A00103112108FE3E0319B82AA10A0800C0
:04057000A1010800DD
:02400E00F13F80
:00000001FF
Автомат суточного включения и выключения нагрузки
Вариант 1
Файл telef.hex.
:020000040000FA
:020000000528Dl
:08000800АА29831602308100D1
: 10001000А0308В00003085000330860083129401 ED
:10002000950181019001910196019701A301A2011F
:10003000980199019201AB012B14A4019D01A1012A
: 100040009A019B019E01860185010514F928060885
:100050000311033903191416141A1410141A492819
:10006000061C1415061C080014196020861C941523
: 10007000861C080094196020080094161413941329
: 100080000800141794129413080094179412141370
: 100090000800061C0800861C080014129411141194
: 1000A000A40115110310AB0DAB195D202B183D20D9
: 1000B000AB1841202B1945200800AB012B14080078
:1000C000151D0800141B8628941BA62894196B285C
: 1000D00014197E2808009411960A1708FE3E031989
: 1000E0007820141908000A30160203189601C62851
: 1000F00016080310FC3 E031896010800970A6D20AD
:1001000003301702031897011411C62894198B287D
:1001100014199E28($009411980A1908FE3E031924
: 100120009820141908000A30180203189801CE28E4
: 1001300018080310FC3E031898010800990A8D2046
343
Приложения
1001400003301902031899011411СЕ289419АВ2811
100150001419BE28080094119F0A2008FE3E0319B6
10016000В820141908000А301F0203189F01D6286E
100170001F080310FC3E03189F010800Ab0AAD20D 1
10018000033020020318А0011411D628160890008D
1001900017089100Е0201607А30008001808900037
1001А00019089100Е0201807А20008009В011F0811
1001В0009000200891002008Е0201F079E00080002
1001С000820700340А341434141CF92814119411D1
1001D000061586151Е0822020319F6281Е0823029А
1001E0000319F328E42805148510E4280510851464
1001F000E4281418Е428061С8611861С0611151D17
10020000F928061CF928861CF928151106158615ЕВ
10021000141B3D29941B6E29151825298615900855
100220000319202995181929121С192990039514СЕ
100230000611941С1D29061595109008031D0C2904
100240009518192915141511F9280615910803197F
100250003729951830291A1C3029910395148611D5
100260001Al 83429861595109108031D0C29951824
100270003029С62015101511F9281518562986158С
1002800090080319512995184А291 Al C4A299003E4
10029000951406111A184E29061595109008031D7D
1002A0003D2995184A2915141511F92806159108A4
1002B0000319682995186129121C61299103951465
1002C0008611941C6529861595109108031D3D29FA
1002D00095186129CE2015101511F92815188729B0
1002E000861590080319822995187B29121C7B29F1
1002F000900395140611941C7F29061595109008FB
10030000031D6E2995187B2915141511F92806155A
1003100091080319992995189229121C9229910381
1003200095148611941C9629861595109108031D25
100330006E2995189229D72015101511F9280A3021
1003400003149C02031CA629A10AA0291C080A3E2A
100350009D000800A8000308A9000408AA00B9210C
10036000151927200B11290883002A088400280862
100370000900920A121C94141218941004301202EC
10038000031D080092011A08C53E0319CB299A0AD9
100390009A18151508009A01E7211B08C53E031994
1003A000D3299B0A08009B011E08E93E0319E32993
1003B0009E0A1E089C009F211D089F002108A00086
1003C000A1019D0108009E019F01A0010800A40A4F
0E03D00005302402031914140319A4010800B7
02400E00F03F81
0000000IFF
344
4. Коды прошивок микроконтроллеров
Автомат суточного включения и выключения нагрузки
Вариант 2
Файл knopka.hex.
:020000040000FA
:020000000528Dl
:080008004С288316043081002Е
: 10001000A0308B00003085000130860083129401EF
: 100020008101А201А301А401А5019А019В019Е01Е6
: 100030008601850105143528061С14141411061САС
:1000400008001418242008001410941С2928941067
: 100050002В28941430281Е08А2001В08А4000800В6
: 100060001Е08 А3001В08 А50008001Е082202031D8D
: 100070003D281В082402031946281Е082302031DDD
:1000800035281В0825020319492835280514851031
: 100090003528051085143528А8000308А900040890
:1000А000АА005В2014191С200В11290883002А08С0
:1000В0008400280809001А08С53Е031963289А0А13
: 1000С0009А18141508009А011В08С53Е03196A28DE
:1000D0009B0A08009B011E08E93E031971289E0A2D
:0600Е00008009Е0108006В
:02400E00F03F81
:00000001FF
Часы - будильник
Файл chasiki.hex.
:020000040000FA
:020000000528Dl
:080008002F2A8316023081004В
:10001000A0308B00003085001330860083129401DD
: 1000200095018101900191019F01А0019601970125
:10003000980199019201AB01A4019D01A1019A01CE
:100040009B019E01A201860185012B149417851442
: 10005000462906080311033903191416141A14103B
:10006000141A5428061C1415061C08001419B52867
:10007000861C9415861C08009419B5289512080052
: 1000800094161413941395110800141794129413D2
: 1000900095110800941794121413951108009515E2
: 1000A0009412141394130800061C0800861C080000
: 1000B000900191011510141294111411A4019512BC
: 1000C0000310AB0D2B1A6D282B184A28AB184528A6
: 1000D0002B194028AB 194F280800AB012B144A28D4
: 1000E000820700340A3414341E3428343234A20116
: 1000F000160890001708910070201607A300270724
: 10010000A2000800A2012508900026089100702096
: 100110002507A7002307A2000800061EA72018082D
: 10012000900019089100061E080019087020180791
345
Приложения
100130009В000800061ЕА7201F08900020089100С1
10014000061Е0800200870201F079E0008001519D1
100150000800А7280А3010020318В2200А30110242
10016000031С0800900191010800951Е0800141В53
10017000F028941B0329941AD0289419C228141922
10018000С92808009411А50А0А3025020318А50100
100190008228А60А063026020318А6011411822816
1001A0009419D5281419E82808009411960A1708FC
1001B000FE3E0319Е220141908000А301602031843
1001С0009601772816080310FC3E031896010800D4
1001D000970AD720033017020318970114117728С4
1001E0009419F5281419FC2808009411980A0A306B
1001F0001802031898018D28990A0630190203186D
10020000990114118D289419082914191B29080023
1002100094119F0A2008FE3E0319152114190800А5
100220000АЗО 1F0203189F019А281F080310FC3E82
1002300003189F010800А00А0А21033020020318В6
10024000А00114119А28061ЕС329141С4629141152
10025000941106158615A208031936291E082302D3
10026000031D36291В082702031939290510851497
100270002329051485101218232912182329051182
10028000000000000000000005153D291418232976
10029000061С8611861С0611151D4629061С4629ВА
1002A000861C4629151106158615941A8F29141BCC
1002В000ЕА29941ВС329151875298615АА209008С8
1002C0000319712995186929121С6929900395143D
1002D0000611941C6D2906159510АА209008031D7F
1002Е0005В2995186929151446290615АА20910835
1002F0000319892995188129921С81299103951444
1003000086119218852986159510AA209108031D3B
100310005В29951881298220151015114629151879
10032000А9298615АА2090080319А52995189D29A1
10033000921C9D299003951406119218А129061567
100340009510АА209008031D8F2995189D29151432
1003500046290615АА2091080319BD299518В52923
10036000121СВ529910395148611941СВ929861580
100370009510AA209108031D8F299518B52977207B
100380001510151146291518D729061E9A2006158D
10039000АА2091080319D429921ССС299103861113
1003A0009218D0298615C7291514061A46298615CC
1003В000АА2090080319Е429921CDC299003061155
1003С0009218Е0290615D729061А9А2015101511 ЗА
1003D000061А46291518072А061E8D200615АА2О7А
1003Е00091080319022А9518FA29121CFA29910377
1003F00095148611941CFE2986159510АА20910843
10040000031DEE299518FA291514061А4629861592
10041000АА20900803191В2А9518132А121С132АС4
10042000900395140611941C172A06159510AA20FE
346
4. Коды прошивок микроконтроллеров
: 100430009008031D072A9518132А061А8 D201510F7
" : 100440001511061A4629C3290A3003149C02031CFD
:100450002B2AA10A252AlC080A3E9D000800A80094
: 100460000308А9000408АА003Е22951А29200В11АЕ
:10047000290883002A08840028080900920A121C0F
:1004800094141218941004301202031D08009201F3
:100490001А08С53Е0319522А9А0А1 Al 895169А186С
: 1004А000151508009А0179221В08С53Е0319632А15
: 1004В0009В0А1В089С0024221D0898002108990013
: 1004С000А1019D0108009В01980199011Е08Е93ЕС8
: 1004D0000319752А9Е0А1Е089С0024221D089F00ED
: 1004Е0002108А000А1019D0108009Е019F01АОО11В
:1004F0000800A40A05302402031914140319A401E6
:020500000800Fl
:02400E00F03F81
:00000001FF
Будильник с установкой времени
Файл budak.hex.
:020000040000FA
:020000000528Dl
:08000800D028831602308100AC
: 10001000A0308B00003085000330860083129401 ED
: 1000200095018101900191019601161497019D019E
:10003000A1019A019B019E01860185010514852875
:1000400006080311033903191416141A3428061C60
:100050001415061C080014194320861C9415861CD0
: 100060000800941943200800061C0800861C08009C
: 100070001412941114111511141C41281410941207
:10008000080014140800141C0800151D0800941919
:100090004C281419532808009411960A06301602A9
:1000A000031896015B2814110F30170203185A2801
: 1000B000970A5 B289701160890001708910008001E
:1000C000061C8611861C0611941C602814188528AD
:1000D00014119411061586151E081702031D7428A5
:1000E00019081602031977280510851460280514CD
:1000F0008510941692186028921866280511000041
:1001000000000000000005157C28141C6028061C57
:100110008611861C0611151D8528061C8528861C3F
:1001200085281511061586151518AD288615900811
:100130000319A8289518A128121CA128900395142A
: 100140000611941CA528061595109008031D9428E7
:100150009518A1281514151185280615910803195D
:10016000BF289518B828121CB82891039514861139
:10017000941CBC2&861595109108031D9428951889
:10018000B8285B201510151185280A3003149C022D
: 10019000031CCC28 Al 0AC6281C080A3E9D000800A2
347
Приложения
:1001A000A8000308A9000408AA00DF2015192020D0
:1001В0000В11290883002А08840028080900920АЕ4
:1001C000121C94141218941004301202031D08001B
: 1001D00092011А08С53Е0319F1289A0A9A181515В2
:1001E00008009A01941A0C2914180C291B08C53E02
:1001F000031905299B0AlB089C00C5201D089800AF
:1002000021089900A1019D0108009B011E08F13EF3
:1002100003190C299E0A08009E01980199019B016F
:020220000800D4
:02400E00F03F81
:00000001FF
Походный будильник
Файл budik.hex.
:020000040000FA
:020000000528Dl
:0800080040288316043081003A
:10001000A0308B00003085000130860083129001F3
:1000200081019D019E019A019B019C018601850130
: 1000300005142828061C10141011061C080010189E
:100040002220080010101C089D001B089E000800BC
:100050001C081D02031D30281B081E02031933282B
:10006000051085142828051485101A1828281A1830
: 1000700028280511000000000000000005153728A1
: 10008000A0000308A1000408A2004F2010191A20A4
: 100090000B112108830022088400200809001A0897
: 1000A000C53E031957289A0A9A18101508009A0194
:1000B0001B08C53E03195E289B0A08009B011C080B
:0E00C000E93E031965289C0A08009C0108000F
:02400E00F03F81
:00000001FF
«Песочные часы»
Файл pesok.hex.
:020000040000FA
:020000000528Dl
:080008008328831602308100F9
-.10001000A0308B00003085000330860083129501EC
:100020009601810190019201930194019101860151
21000300085011214851495146328061C1514061CDA
:10004000080015185220861C1515861C0800151D61
:100050000800151015119511951C3328951095124F
: 100060009401930108009514080095186328861CD4
:10007000061186180615861C352814081202031965
2100080004428051085143528051485109516111877
: 100090003528111835280511000000000000000067
348
5. PIC-микроконтроллеры в интернете
: 1000А00005154928951С0800951D08009511151087
" :1000B0000F30120203185E28920A6028920112146F
:1000С000120890000800951С3528061С0611861С95
:1000D0000611161D6328061C6328861C632805105C
: 1000Е00085149511161106156020900803198028ВЗ
: 1000F000111С78289003061111187С280615752804
:1001000016119101632897000308980004089900СС
:10011000922095191D200B11 1808830019088400DE
:1001200017080900910А04301102031D080091010B
:100130001308C53E0319A228930A9318161513181D
: 10014000951508009301951AAD289518AD28140847
:0E015000F13E0319AD28940A0800940108003E
:02400E00F03F81
:00000001FF
Автомат управления размораживанием холодильника
Файл xolod.hex.
:020000040000FA
:020000000528Dl
:080008004E288316043081002C
: 10001000B0308B00003085000130860083128101F2
:100020009101920I93019401950196018601850148
: 1000300085143128941C5E2814185E2814141308A3
: 10004000950012081E3E96003C301602051829281F
:100050005E289600950A30301502031C5E28950034
:100060005E281418452813081E3C031D3B2812085F
: 10007000003C0319402894108510051414103128F1
:100080009414141C41288514051013081502031D2F
:1000900031281208160203193B283128A000030852
: 10Q0A000A1000408A2008B181A280B1965200B1157
:1000B0002108830022088400200809008B102108Fl
: 1000C000830022088400200809001108C53E031996
: 1000D0006F28910A111C05151118051108009101CE
: 1000E0001208C53E03197628920A080092011308E7
:0E00F000D 13E03197D28930A080093010800F1
:02400E00F03F81
:00000001FF5.
5. PIC-микроконтроллеры в интернете
Каждый уважающий себя разработчик программ для микроконтроллеров
старается быстрее поделиться рождением новой работы с обитателями интер-
нета. Поэтому, как правило, у каждого разработчика имеется своя интер-
нет-страница. У зарубежных авторов под информацию о микроконтроллерах
выделены целые сайты. Я осуждаю страницы некоторых наших авторов, из ко-
торых нельзя скопировать даже открывшуюся страницу. Не говоря уже о том,
349
Приложения
чтобы иметь упакованные материалы. (У этих авторов цифровая связь, но не-
обходимо думать и о тех посетителях сайта, у кого допотопная связь на реле, а
таких пользователей интернета в нашей стране миллионы.) Их секретность до-
стигает фантастических изощрений, например, заведомо неправильные коман-
ды в исходных текстах программ и т. п. Я считаю, что бороться за посещае-
мость страницы нужно не красивыми картинками, а хорошими работами. Лич-
но я не встречал технической книги с разноцветными формулами и картинами
эпохи Возрождения. Основные требования к техническому сайту — это хоро-
шая читаемость, а. не бледные буквы на бледном фоне, и возможность копиро-
вания информации. Повторю, что это мое личное мнение.
Итак, интернет наполнен сайтами по тематике PIC-микроконтроллеров, не-
обходимо только знать, где их искать. Начинать поиск надо с русских ресурсов.
Для этого хорош сайт журнала «Радио».
♦http://www.radio.ru/links/chip.shtml — раздел: Советуем посетить. Микро-
контроллеры.
Из русских страниц считаю лучшей для начинающих страницу «Микрокон-
троллеры»:
*http://microcon.euro.ru — программирование, конструктивные и програм-
мные решения, советы начинающим программистам.
♦http://yusoft.kulicki.com — много полезной информации.
*http://www.lytnev.newmail.ru — алгоритмы программ на PIC.
♦ http://www.geocities.com/SiliconValley/Bay/9414/pic.html — страница Андрея
Филимонова (на русском языке).
♦ http://www.disall.newmail.ru/ и *http://disall.narod.ni/; - зеркало — интерес-
ная страница Дмитрия Саликова. Много информации и ссылок. К сожалению,
имеются ссылки на коммерческие сайты, что неприемлемо для радиолюбите-
лей.
♦ http://www.kulakov.ru — страница Вячеслава Кулакова. Имеются рассылки
для начинающих программистов. К сожалению, без продолжения.
♦ http://www.kosnet.ru/~burov — страница Михаила Бурова. Выложены публи-
кации статей в журнале «Радио».
♦ http://www.radic.newmail.ru — сайт автора этой книги. Выложены публика-
ции статей в журнале «Схемотехника».
♦ http://pgm.ru — покупные программаторы и отладочные средства, их срав-
нительные характеристики.
♦ http://www.geocites.com/SiliconValley/Way/5807 — страница на английском
языке Алексея Владимирова со списком более 700 интернет-ресурсов, посвя-
щенных PIC-микроконтроллерам. При поиске в этой богатой коллекции рус-
ских сайтов мне не удалось найти.
Невозможно перечислить все сайты на английском языке и посетить их.
Перечислю лишь некоторые из них.
♦ http://www.epemag.wimbome.co.uk/ и ♦ftp://ftp.epemag.wimborne.co.uk — на-
стоящий клад сокровищ с разработками John Becker.
♦ http://www.breuhaha.com/~eric/pic — Erics Pic Page.
♦ http://www.geocities.com/SiliconValley/Lab/6311 — страница Alex Torres.
♦http://www.bobblick.com — сайт Bob Blick.
350
6. Сообщения MPASM
*http://www.picpoint.com — полезные проекты и для каждого 5 Мб бесплатно
для публикации работ по PIC.
*http://www.picnpoke.com — сайт Tony Nixon с системой, содержащей анима-
ционный симулятор потоков данных и исполнения команд в Р1С-микроконт-
роллерах.
*http://www.myke.com — PICMicro and Microcontroller Reference Page. Сайт
Майкла Предко, автора многих книг по микроконтроллерам, в том числе и на
русском языке [5]. Книги автора в формате.рбЕ
*http://www.access.digex/~pha/pic — страница Peter Anderson's.
*http://www.iet.unipi.it/~luigi — страница Luigi Rizzo.
*http://www. vermontficks.org/pic.htm — страница Jon Fick.
Особо в списке сайтов по микроконтроллерам должны находиться сайты
разработчиков и производителей PICMicro фирмы Microchip:
*http://www.microchip.ru
*http://www.microchip.com
Выполнены на русском и английском языке соответственно. Здесь находит-
ся вся документация на микросхемы. Программа ассемблера MPLAB. Заказы
на приобретение микросхем принимаются только оптом.
*http://www.lancos.com — сайт Claudio Lanconelli, разработчика программа-
тора PonyProg2000.
*http://www.picalhv.com — официальный сайт разработчика программаторов
PIC16PR0 и PicAll.
6. Сообщения MPASM
Данная информация любезно предоставлена ООО «Микро-Чип» (www.mic-
rochip.ru).
Ниже приведен список сообщений, которые формирует MPASM. Эти сооб-
щения всегда включаются в файл листинга программы выше строки, к которой
относится сообщение.
Типы сообщения, сохраняемые в файле ошибок (.ERR) можно указать при
начале компиляции исходного файла. Если указать параметр /е-, то генерации
файла ошибок не будет, а сообщения будут отображены на экране. Если вы-
брать параметры в командной строке /q и /е-, то никакие сообщения не будут
появляться на экране, в файле списка ошибок и листинга программы.
Сообщения об ошибках
101 ERROR:
Ошибка пользователя при работе с директивами.
102 Out of memory.
Недостаточно памяти для макроса, #defme или внутренней обработки.
Закройте открыты^ приложения и попробуйте выполнить компиляцию сно-
ва. Если данная ошибка произошла при выполнении компиляции MPASM
DOS версии, попробуйте выполнить компиляцию MPASM Windows версией.
351
Приложения
103 Symbol table full.
Недостаточно памяти для размещения таблицы символов.
Закройте открытые приложения и попробуйте выполнить компиляцию сно-
ва. Если данная ошибка произошла при выполнении компиляции MPASM
DOS версии, попробуйте выполнить компиляцию MPASM Windows версией
или MPASMDP версией.
104 Temp file creation error.
Невозможно создать временный файл. Проверьте объем свободного места
на диске.
105 Cannot open file.
Ошибка при открытии файла. Проверьте существование указанного файла.
Ошибка также возникает при открытии исходного файла старой версии
MPASM или защищенного от изменений файла.
106 String substitution too complex.
Слишком много вложений #define.
107 Illegal digit.
Неправильная цифра в числе.
Допускаются следующие цифры в числах:
Двоичном 0-1;
Восьмеричном 0-7; *
Десятичном 0-9;
Шестнадцатеричном 0-F.
108 Illegal character.
Использование недопустимого символа в имени метки. Допускаются следу-
ющие символы в именах меток: az; AZ; 09; _. Имя метки не должно начинаться
с цифры.
109 Unmatched (
Левая скобка не имеет соответствующую правую скобку. Например, "DATA
(1+2".
110 Unmatched)
Правая скобка не имеет соответствующую левую скобку. Например, "DATA
1+2)".
111 Missing symbol.
Отсутствие символа. Директива EQU или SET не имеет <label> для присво-
ения значения.
112 Missing operator.
Отсутствие арифметического оператора в выражении. Например, "DATA 1 2".
113 Symbol not previously defined.
Использование не определенной переменной. Только метки адреса могут
использоваться перед их определением. Константы и переменные должны быть
сначала объявлены пользователем.
114 Divide by zero.
Обнаружение деления на нуль во время оценки выражения.
352
6. Сообщения MPASM
115 Duplicate label.
Объявление переменной более одного раза (например, в директивах EQU
или CBLOCK).
116 Address label duplicated or different in second pass.
Определение метки адреса в памяти программ более одного раза.
Метка определена один раз, но адрес размещения изменился при втором
проходе компилятора. Это может произойти когда пользователь изменяет биты
указателя страницы памяти программ в макрокомандах, генерирующие различ-
ные значения на основе текущего адреса.
117 Address wrapped around О.
Адрес выполнения программы может достигать значения FFFF, после чего
будет иметь адрес 0.
118 Overwriting previous address contents.
Код был предварительно определен для данного адреса.
119 Code too fragmented.
Код программы имеет слишком много частей. Данная ошибка возникает
очень редко, только при попытке обращения к памяти программ с адресом
выше 32 Кбайт (включая биты конфигурации).
120 Call or jump not allowed at this address.
Переход не может быть выполнен. Например, все команды CALL для мик-
роконтроллеров Р1С16С5х должны обращаться к младшей странице памяти
программ.
121 Illegal label.
Метка не может быть указана на этой строке. Разместите метку выше ди-
рективы. Так же HIGH, LOW, PAGE и BANK не допустимые имена меток.
122 Illegal opcode.
Недопустимый код инструкции.
123 Illegal directive.
Недопустимая директива для данного типа микроконтроллера. Например,
директива ___IDLOCS не может использоваться для микроконтроллеров
PIC17C42.
124 Illegal argument.
Неправильный аргумент. Например, LIST STUPID.
125 Illegal condition.
Неправильный блок условий. Например, отсутствие директивы ENDIF.
126 Argument out of range.
Значение аргумента инструкции или директивы выходят за допустимые
рамки. Например, TRIS 10.
127 Too many arguments.
Слишком много аргументов для вызываемого макроса.
128 Missing argument(s).
Указаны не все аргументы в вызываемом макросе или команде.
129 Expected.
Ожидался иной тип аргумента. Ожидаемый список будет указан.
353
Приложения
130 Processor type previously defined.
Выбраны разные типы микроконтроллеров.
131 Processor type is undefined.
Тип микроконтроллера указан после части текста программы. Обратите
внимание, что пока тип микроконтроллера не определен - набор поддерживае-
мых команд не известен.
132 Unknown processor.
Выбран неподдерживаемый тип микроконтроллера.
133 Hex file format INHX32 required.
Был определен адрес больше 32 Кбайт. Например, указывая биты конфигу-
рации для микроконтроллеров семейства PIC17CXX.
134 Illegal hex file format.
В директиве LIST был определен незнакомый формат HEX файла.
135 Macro name missing.
Попытка определения макроса без названия.
136 Duplicate macro name.
Дублирование имени макроса.
137 Macros nested too deep.
Превышен максимальный уровень вложенности макросов.
138 Include files nested too deep.
Превышен максимальный уровень вложенности файлов.
139 Maximum of 100 lines inside WHILE-ENDW.
Цикл содержит более 100 строк.
140 WHILE must terminate within 256 iterations.
Цикл имеет более 256 повторений. Предотвращение бесконечного цикла.
141 WHILES nested too deep.
Превышен максимальный уровень вложений циклов.
142 IFs nested too deep.
Превышен максимальный уровень вложений блоков условий.
143 Illegal nesting.
Недопустимое использование директив цикла, определения макроса или
блока условия. Например, если вы имеете блок условия IF внутри цикла
WHILE и обнаружена директива ENDW раньше INDIF.
144 Unmatched ENDC.
Найдена директива ENDC без директивы CBLOCK.
145 Unmatched ENDM.
Найдена директива ENDM без директивы MACRO.
146 Unmatched EXITM.
Найдена директива EXITM без директивы MACRO.
147 Directive not allowed when generating an object file.
. Найдена недопустимая директива ORG при генерации объектного файла.
Вместо директивы ORG создайте секцию .code и если необходимо укажите ад-
рес.
354
6. Сообщения MPASM
148 Expanded source line exceeded 200 characters.
Превышена максимальная длина (200 знаков) символьной строки в дирек-
тиве #DEFINE или в параметре макроса. Обратите внимание, что в директиву
#DEFINE комментарии не включаются в отличие от макросов.
149 Directive only allowed when generating an object file section.
Использование директив, предназначенных для формирования объектного
файла (например, GLOBAL и EXTERN), при непосредственной генерации ко-
да программы.
150 Labels must be defined in a code or data section when making an object file.
Все переменные должны быть определены внутри секции объявления дан-
ных. Не допускается использование директив EQU или SET вне секций объяв-
ления данных при генерации объектного файла.
151 Operand contains unresolvable labels or is too complex.
При генерации объектного кода операнды должны иметь следующий син-
таксис: [HIGH|LOW]([<relocatable address label>]+[<offset>]).
152 Executable code and data must be defined in an appropriate section.
При генерации объектного файла блоки исходного текста программы и
определение данных должны быть помещены в соответствующих секциях.
153 Page or Bank bits cannot be evaluated for the operand.
Страница памяти программ или банк памяти не могут быть определены для
операнда <relocatable address label> или <constant> директивами PAGESEL,
BANKSEL или BANKISEL.
154 Each object file section must be contiguous.
Объявленная секция данных, кроме секции UDATA_OVR, имеет уже суще-
ствующее имя в данном исходном файле. Разрешить эту проблему можно, на-
звав каждый раздел собственным именем или определять все данные в одном
разделе. Эта ошибка возникает и при присвоении двум разделам разных типов
одинакового имени.
155 All overlaid sections of the same name must have the same starting address.
Объявлена секция UDATA_OVR с существующим именем, но другим адре-
сом.
156 Operand must be an address label. *
Возникает во время генерации объектного файла при попытке объявить
метки созданные директивой SET или EQU (а не в секции данных) как глоба-
льные.
157 UNKNOWN ERROR.
Произошла ошибка, которую MPASM не может распознать. Это не являет-
ся ошибкой, описанной в этом приложении. Свяжитесь с инженерами компа-
нии Microchip (FAE), если Вы не можете устранить эту ошибку.
Предупреждения
201 Symbol not previously defined.
Последовательность символов указанная в директиве #UNDEFINE не была
предварительно определена.
355
Приложения
202 Argument out of range. Least significant bits used.
Аргумент не соответствует месту размещения. Например, литералы должны
быть 8-разрядные.
203 Found opcode in column 1.
Мнемоника инструкции была обнаружена в первой колонке, предназначен-
ной для меток.
204 Found pseudo-op in column 1.
Псевдооператор был обнаружен в первой колонке, предназначенной для ме-
ток.
205 Found directive in column 1.
Директива была обнаружена в первой колонке, предназначенной для меток.
206 Found call to macro in column 1.
Макрокоманда была обнаружена в первой колонке, предназначенной для
меток.
207 Found label after column 1.
Метка была обнаружена не в первой колонке, что часто принимается за
мнемонику команды с неправильным синтаксисом.
208 Label truncated at 32 characters.
Длина метки более 32 знаков.
209 Missihg quote.
Пропущен апостроф. Например, DATA'A.
210 Extra),
В конце строки была найдена лишняя запятая.
211 Extraneous arguments on the line.
Найдены лишние аргументы в строке. На это предупреждение следует обра-
щать внимание, т.к. оно часто возникает из-за неправильной интерпретации
записи (например, OPTION EQU 0x81 с LIST FREE).
212 Expected.
Тип аргумента не соответствует ожидаемому. Предупреждение использует-
ся, „когда предполагается иной тип аргумента.
213 The EXTERN directive should only be used when making a .O file.
Директива EXTERN должна использоваться только при генерации объект-
ного файла. Предупреждение заменяет ошибку 149.
214 Unmatched (.
Найдена лишняя скобка. Предупреждение используется, если скобка не
влияет на значение выражения.
215 Processor superseded by command line. Verify processor symbol.
Тип микроконтроллера был определен на одной строке с инструкцией. Ин-
струкция имеет больший приоритет.
216 Radix superseded by command line.
Система счисления по умолчанию была определена на одной строке с инст-
рукцией. Инструкция имеет больший приоритет.
356
217 Hex file format specified on command line.
Тип выходного HEX файла был определен на одной строке с инструкцией.
Инструкция имеет больший приоритет.
218 Expected DEC, OCT, HEX, Will use HEX.
Неизвестный тип системы счисления.
219 Invalid RAM location specified.
Неправильное распределение ОЗУ директивами___MAXRAM и______BADRAM
для данного типа микроконтроллера. Обратите внимание, что подключаемые
файлы описания микроконтроллеров содержат директивы _______MAXRAM и
_BADRAM.
220 Address exceeds maximum range for this processor.
Адресована память программ, которая не существует в данном микроконт-
* роллере.
221 Invalid message number.
Недействительный номер сообщения, вызванного для отображения или ма-
скирования.
222 Error messages cannot be disabled.
Сообщения об ошибках не могут быть запрещены директивой
EERORLEVEL.
223 Redefining processor.
Выбранный микроконтроллер повторно выбирается директивой LIST или
PROCESSOR.
224 Use of this instruction is not recommended.
Используется не рекомендуемая инструкция. Например, TRIS или OPTION
для микроконтроллеров PIC16CXX.
225 Invalid label in operand.
Неправильная метка в операнде. Например, когда в операнде инструкции
CALL встречается имя макрокоманды.
226 UNKNOWN WARNING.
Неизвестное предупреждение MPASM. Это не является предупреждением,
описанном в этом приложении. Свяжитесь с инженерами компании Microchip
(FAE) если Вы не можете устранить это предупреждение.
Информационные сообщения
301 MESSAGE:
Сообщение пользователя, вызванное директивой MESSG.
302 Register in operand not in bank 0. Ensure that bank bits are correct.
Адрес регистра был определен значением, в котором содержатся биты выбо-
ра банка памяти. Например, адресация памяти данных в PIC16CXXX опреде-
ляется 7 битами в операнде команды и одним/двумя битами в регистре
STATUS.
357
Приложения
303 Program word too large. Truncated to core size.
Слишком большое слово программы. Для микроконтроллеров PIC12CXX и
PIC16C5X 12-разрядные команды. Для микроконтроллеров PIC16CXX 14-раз-
рядные команды.
304 ID Locations value too large. Last four hex digits used.
Слишком большое значение адреса расположения ID битов. Для определе-
ния адреса используются четыре последние цифры.
305 Using defaultdestination of 1 (file).
Использование^значения по умолчанию.
306 Crossing page boundary - ensure page bits are set.
Полученный код программы пересекает границу страницы памяти про-
грамм.
307 Setting page bits.
Страница памяти программ настраивается псевдокомандами LGOTO и
LCALL.
308 Warning level superseded by command line value.
Уровень вывода предупреждений соответствует установленному в коман-
дной строке. Параметр командной строки имеет преимущество.
309 Macro expansion superseded by command line.
Разрешение включения полного текста макроса в файл листинга соответст-
вует параметру, указанному в командной строке. Параметр командной строки
имеет преимущество.
310 Superseding current maximum RAM and RAM map.
Использование директивы____MAXRAM.
312 Page or Bank selection not needed for this device. No code generated.
Если микроконтроллер содержит одну страницу памяти программ или один
банк памяти данных, то директивы PAGESEL, BANKSEL или BANKISEL не
будут приводить к генерации дополнительного кода программы.
313 CBLOCK constants will start with a value of 0.
Первая директива CBLOCK не указывает адрес размещения данных.
314 UNKNOWN MESSAGE.
Неизвестное сообщение. Это не является сообщением, описанном в этом
приложении. Свяжитесь с инженерами компании Microchip (FAE), если Вы не
можете устранить это сообщение.
358
Литература
1. К. Тавернье. PIC-микроконтроллеры. Практика применения. М.:
ДМК, 2002.
2. С. Бирюков. Цифровые устройства на МОП-интегральных микросхе-
мах. М. Радио и связь, 1990.
3. Н. Заец. Часы на PIC-контроллере. Схемотехника, 2002, № 8, стр. 46.
4. А. Бирюков. Цифровой тахометр. Радио, 1997, № 11, с. 54, 55.
5. М. Предко. Справочник по PIC-микроконтроллерам. М.: ДМК Пресс,
Додэка-ХХ1, 2002.
6. В. А. Шполянский. Хронометрия. М.: Машиностроение, 1974.
7. А. В. Фрунзе. Микроконтроллеры? Это же просто. Том 1, М.: ООО
«ИД С^ИМЕН», 2002.
8. Возов А. На меньшем числе микросхем. — Радио, 1988, № 4, с. 44.
9. Luigi Rizzo. Кабельный пробник. — Радио, 2002, № 2, с. 6.
10. Н. Заец. Многофункциональный таймер на микроконтроллере
PIC16F84A. — Схемотехника, 2003, № 2, с. 41—43.
11. А. Юшин. Оптроны серии АОУ160. — Радио, 1997, № 10, с. 64.
12. Д. Ганженко, И. Коршун. Две конструкции на PIC-контроллере. — Радио,
1996, № 1, с. 50.
13. А. Долгий. Разработка и отладка устройств на МК. Цикл статей в журнале
«Радио» № 5-12, 2001, № 1, 2002.
14. Журналы «Схемотехника», 2002, № 10—12. 2003, № 1—7.
15. С. Бирюков. Автомат управления размораживанием холодильника. Ра-
дио, 1996, № 7, с. 38.
16. О. Николайчук. Управление нагрузкой на переменном токе. Схемотехни-
ка, 2003, №4, с. 25, 26.
359
Содержание
Предисловие. ................................................... 3
Устройства с цифровой индикацией............................... 6
Часы с тремя будильниками.....................................6
Часы с будильником — шахматные часы..........................28
Регистратор событий..........................................52
Автомобильный цифровой тахометр..............................75
Программатор.................................................84
Универсальный таймер........................................114
Автомат включения освещения............................... 130
Счетчик витков. . ..........................................162
Кабельный пробник...........................................177
Радиоохрана.................................................194
Электронный домоуправ...................................... 209
Устройства с индикацией точечными светодиодами . . . 236
Два автомата суточного включения нагрузки...................236
Часы-будильник............................................ 259
Будильник с установкой времени..............................278
Походный будильник..........................................288
«Песочные» часы............................................ 292
Автомат управления размораживанием холодильника.............299
Рекомендации...................................................307
Приложения.....................................................313
1. Справочные данные на микроконтроллер PIC16F84A...........313
2. Команды микроконтроллера.................................321
3. Макрокоманды ассемблера MPASM............................323
4. Коды прошивок микроконтроллеров..........................324
5. PIC-микроконтроллеры в интернете.........................349
6. Сообщения MPASM......................................... 351
Литература.....................................................359
360
Серия «СОЛОН — радиолюбителям», выпуск 22
Николай Иванович Заец
Радиолюбительские конструкции
на Р1С-микроконтроллерах
С алгоритмами работы программ и подробными
комментариями к исходным текстам
Ответственный за выпуск В. Митин
Макет и верстка Н. Бармина
Обложка Е. Холмский
ООО «СОЛОН-Пресс»
123242, г. Москва, а/я 20
Телефоны:
(095) 254-44-10, 252-36-96, 252-25-21
E-mail: Solon-Avtor@coba.ru
Приглашаем к сотрудничеству авторов — •
специалистов по ремонту бытовой и офисной техники
E-mail: Solon-Avtor@coba.ru
ООО «СОЛОН-Пресс»
127051, г. Москва, М. Сухаревская пл., д. 6, стр. 1 (пом. ТАРП ЦАО)
Формат 70 х 100/16. Объем 23 п. л. Тираж 3000
ООО «Арт-диал»
Москва, Б. Переяславская, 46
Заказ №2418.
Отпечатано на ордена Трудового Красного Знамени
ГУП Чеховский полиграфический комбинат
Министерства Российской Федерации по делам печати,
телерадиовещания и средств массовых коммуникаций
142300 г. Чехов Московской области
Тел. (272) 71-336, факс (272) 62-536