Разработка микропроцессорной системы цифрового термометра на базе микроконтроллера

РЕФЕРАТ
Пояснительнаязаписка состоит из 59 страниц, 8 рисунков, 7 таблиц, 6 источников.
Микроконтроллер,Жидкокристаллический индикатор, Датчик, кварцевый резонатор, кнопка
Цель работы:разработка микропроцессорной системы на базе микроконтороллера, электронного термометрадля использования на метеостанциях и в быту. Задание режима измерений осуществляетсяпри помощи специальных кнопок. Отображение информации осуществляется надвухрядном жидкокристаллическом индикаторе.
Содержаниеработы: в работе выполнено построение структурной схемы, построениефункциональной схемы, сформирован алгоритм работы системы, выбор элементнойбазы, оптимальной для реализации поставленных задач по диапазону характеристик,разработана программа, разработана принципиальная схема устройства.

СОДЕРЖАНИЕ
Введение
1. Описание объекта и функциональная спецификация
2. Описание структуры системы
3. Описание ресурсов МК PIC16F628
3.1 Характеристика RISC ядра
3.2 Особенности микроконтроллеров
3.3 Характеристики пониженного энергопотребления
3.4 Периферия
3.5 Расположение выводов
3.6 Особенности структурной организации PIC 16С84
3.7 Обозначение выводов и их функциональноеназначение
3.8 Организация памяти данных (ОЗУ)
4. Разработка алгоритма работы устройства
5. Ассемблирование
6. Описание функциональныхузлов МПС и алгоритма их взаимодействия
7. Описаниевыбора элементной базы и работы принципиальной схемы
8. Работа с устройством
Заключение
Список литературы
Приложение А. Листинг программыи объектный файл

ВВЕДЕНИЕ
Современнуюмикроэлектронику трудно представить без такой важной составляющей, какмикроконтроллеры. Микроконтроллеры незаметно завоевали весь мир. Микроконтроллерныетехнологии очень эффективны. Одно и то же устройство, которое раньше собиралосьна традиционных элементах, будучи собрано с применением микроконтроллеров,становится проще, не требует регулировки и меньше по размерам. С применениеммикроконтроллеров появляются практически безграничные возможности по добавлениюновых потребительских функций и возможностей к уже существующим устройствам.Для этого достаточно просто изменить программу.
Однокристальные(однокорпусные) микроконтроллеры представляют собой приборы, конструктивновыполненные в виде БИС и включающие в себя следующие составные части:микропроцессор, память программ и память данных, а также программируемые интерфейсныесхемы для связи с внешней средой.
Мироваяпромышленность выпускает огромную номенклатуру микроконтроллеров. По областиприменения их можно разделить на два класса: специализированные,предназначенные для применения в какой-либо одной конкретной области(контроллер для телевизора, контроллер для модема, контроллер для компьютерноймышки ) и универсальные, которые не имеют конкретной специализации и могутприменяться в самых различных областях микроэлектроники, с помощью которыхможно создать как любое из перечисленных выше устройств, так и принципиально новоеустройство.
Цель курсовойработы – основываясь на знаниях, полученных при изучении темы «Микроконтроллерыи микропроцессорные системы» разработать микропроцессорную систему цифровоготермометра на базе микроконтроллера.

1.Описание объекта и функциональная спецификация
Разработаем устройство предназначено для фиксации минимальной имаксимальной суточных температур по двум термодатчикам с записью в памятьмикроконтроллера данных за восемь дней. Его можно использовать для наблюденияза изменением температуры наружного воздуха на метеостанциях, при различныхтехнологических процессах и в домашних условиях.
Устройство состоит из двух термодатчиков типа DS18B20, микроконтроллера PIC16F628, двухрядногожидкокристаллического индикатора GDM1602 и кнопок управления «Режим»,«Разряд», «Установка», «Просмотр 1-2/Сброс» и«Просмотр».
Устройство поддерживает три режима индикации:
• текущий — вывод текущих значений числа, месяца, времени итемпературы по двум термодатчикам с точностью 0,1 градуса;
• установка даты и времени;
• просмотр — вывод на индикатор зафиксированных значениймаксимальной и минимальной температур текущего дня, а при нажатии кнопки«Просмотр» — и значения экстремальных температур предыдущих восьмидней. При нажатии кнопки «Просмотр 1-2» можно просмотретьэкстремальные значения температур по первому и второму термодатчикам и время,когда эти значения были зафиксированы.
Функциональнаяспецификация
1.  Входы
a. Дватермодатчика типа DS18B20
b. 5кнопок управления
2.  Выходы
a. двухрядныйжидкокристаллический индикатор GDM1602
3.  Функции
a. Выводтекущего значения числа, месяца, времени и температуры по двум термодатчикам сточностью 0,1 градуса
b. Возможностьустановки даты и времени
c. Возможностьпросмотра на индикаторе зафиксированных значений максимальной и минимальнойтемператур текущего дня, а при нажатии кнопки «Просмотр» — и значенияэкстремальных температур предыдущих восьми дней.
d. Принажатии кнопки «Просмотр 1-2» можно просмотреть экстремальныезначения температур по первому и второму термодатчикам и время, когда этизначения были зафиксированы

2. Описание структуры системы
После определения входов и выходов устройства разработана структурнаясхема устройства. Структурная схема электронного термометра приведена на рис.1.
/>

Кнопкиуправления SB1- SB5/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
 

Рис. 1. Структурная схема электронного термометра

3. Описаниересурсов МК PIC16F628
МикроконтроллерыPIC 16С84 (16F84) также относятся к расширенному семейству, имеют целый рядтаких же существенных отличий от МК базового семейства PIC 16С5Х как и PIC16С71, абсолютно не отличаются от последних системой команд и особенностямипрограммирования, но обладают несколько другими функциональными возможностями.
Рассмотримосновные характеристики микроконтроллера PIC16F628А.
3.1Характеристика RISC ядра
Тактоваячастота от DC до 20МГц
Поддержкапрерываний
8-уровневыйаппаратный стек
Прямая,косвенная и относительная адресация
35однословных команд
— все командывыполняются за один машинный цикл, кроме команд ветвления и условия с истиннымрезультатом
3.2Особенности микроконтроллеров
Внешний ивнутренний режимы тактового генератора
— Прецизионный внутренний генератор 4МГц,
нестабильность+/- 1%
— Энергосберегающий внутренний генератор 37кГц
— Режимвнешнего генератора для подключения кварцевого или керамического резонатора
Режимэнергосбережения SLEEP
Программируемыеподтягивающие резисторы на входах PORTB
Сторожевойтаймер WDT с отдельным генератором
Режимнизковольтного программирования
Программированиена плате через последовательный порт (ICSP) (с использованием двух выводов)
Защита кодапрограммы
Сброс поснижению напряжения питания BOR
Сброс повключению питания POR
Таймервключения питания PWRT и таймер запуска генератора OST
Широкийдиапазон напряжения питания от 2.0В до 5.5В
Промышленныйи расширенный температурный диапазон
Высокаявыносливость ячеек FLASH/EEPROM
— 100 000циклов стирания /записи FLASH памяти программ
— 1 000 000циклов стирания /записи EEPROM памяти данных
— Периодхранения данных FLASH/EEPROM памяти > 100 лет
3.3 Характеристикипониженного энергопотребления
Работа PIC16С84 в режиме SLEEP в основном полностью аналогична PIC 16С71 за исключениемвыхода из этого режима по прерыванию. В данном МК предусмотрен выход из режимаSLEEP по окончанию записи данных-констант в EEPROM, так как прерывание от АЦПотсутствует.
Режимэнергосбережения:
— 100нА @2.0В (тип.)
Режимыработы:
— 12мкА @32кГц, 2.0В (тип.)
— 120мкА @1МГц, 2.0В (тип.)
Генератортаймера TMR1:
— 1.2мкА,32кГц, 2.0В (тип.)
Сторожевойтаймер:
— 1мкА @ 2.0В(тип.)
Двухскоростнойвнутренний генератор:
— Выборскорости старта 4МГц или 37кГц
— Времявыхода из SLEEP режима 3мкс @ 3.0В (тип.)
3.4Периферия
16 каналовввода/вывода с индивидуальными битами направления
Сильноточныесхемы портов сток/исток, допускающих непосредственное подключение светодиодов
Модульаналоговых компараторов:
— Двааналоговых компаратора
— Внутреннийпрограммируемый источник опорного напряжения
— Внутреннийили внешний источник опорного напряжения
— Выходыкомпараторов могут быть подключены на выводы микроконтроллера
TMR0:8-разрядный таймер/счетчик с программируемым предделителем
TMR1:16-разрядный таймер/счетчик с внешним генератором
TMR2:8-разрядный таймер/счетчик с программируемым предделителем и постделителем
CCP модуль:
— разрешениезахвата 16 бит
— разрешениесравнения 16 бит
— 10-разрядный ШИМ
АдресуемыйUSART модульPICmicro
Память программ
(слов) Память данных
Портов
I/O
CCP
(ШИМ) USART Компар.
Таймеры
8/16 бит
ОЗУ
(байт)
EEPROM
(байт) PIC16F628A 2048 224 128 16 1 + 2 2/1

3.5Расположение выводов
/>
Рис. 2.Расположение выводов в различном исполнении микроконтроллеров PIC16F628А
3.6Особенности структурной организации PIC 16С84
Главнымотличием данного МК от PIC 16С71 является наличие электрически перепрограммируемойпамяти данных-констант EEPROM и отсутствие модуля АЦП. Эти и другие связанные сними отличия приведены в следующем списке:
1. Памятьпрограмм электрически перепрограммируема (EEPROM). Это позволяет пользователюдостаточно просто многократно перепрограммировать микроконтроллер, что оченьсущественно на этапе отладки рабочих программ и при изменении функциональныхвозможностей МКУ в процессе создания и эксплуатации.
2. Наличиедополнительной электрически перепрограммируемой EEPROM памяти для данных-константразмером 64х8 байт.
3. Четыреисточника прерывания. Три из которых точно такие же как и в PIC 16С71:
— внешнеепрерывание с вывода RBO/INT,
— прерываниеот счетчика/таймера TMRO(RTCC),
— прерываниеот изменения сигналов на входах порта RB,
а четвертыйисточник новый:
— позавершению записи данных в памяти EEPROM.
4. Рабочаячастота – 0 Гц…..10 МГц (минимальный цикл выполнения команды – 400 нс).
5. Модуль АЦПотсутствует.
6. Управляющийрегистр прерываний INTCON модифицирован.
Вместо битаразрешения/запрещения прерывания от аналого-цифрового преобразователя ADIE в6-м разряде регистра INTCON находится бит разрешения/запрещения прерывания позавершению записи данных в памяти EEPROM (EEIE), причем:
EEIE=0запрещает прерывание (флаг EEIF в регистре EECON1), EEIE = 1 запрещаетпрерывание.
Назначениевсех остальных бит регистра INTCON точно такое же как и в PIC 16С71
7. В составе15-ти специальных регистров вместо ненужных в данном микроконтроллере ADCON,ADCON1, ADRES и ADRES2 (в связи с отсутствием АЦП) появились новые регистрыEEDATA, EECON1, EEADR и EECON, которые управляют EEPROM данных-констант ирасположены в ОЗУ(RAM) соответственно по тем же адресам. Более подробно онибудут рассмотрены далее.
/>
Рис. 3.Структурная схема ОМК PIC16F84 (16C84)
3.7Обозначение выводов и их функциональное назначение
Расположениеи обозначение выводов ОМК PIC 16С84 полностью совпадает с PIC 16С71 заисключением того, что ножки RA0, RA1, RA2, RA3 в связи отсутствием АЦПпредставляют собой лишь двунаправленные линии ввода/вывода сигналов с ТТЛуровнями.
3.8 Организацияпамяти данных (ОЗУ)
Область ОЗУорганизована как 128х8, имеет также 2-е страницы с одинаковыми объемом (128байт) и практически не отличается от памяти данных PIC 16С71 за исключениемтого, что на местах регистров ADCON, ADCON1, ADRES и ADRES2 в связи сотсутствием АЦП находятся соответственно регистры управления EEPROMданных-констант EEDATA (08h), EECON1 (88h), EEADR (09h), EECON2 (89h).
Все регистрыPIC 16C84 (16F84), также как и во всех других ОМК семейства PIC, разделяются надве функциональные группы: специальные регистры и регистры общего назначения(РОН).
Регистрыспециального назначения используются для управления функциями микроконтроллераи могут быть разделены на два набора: регистры базовых функций и регистрыпериферийных устройств. Регистры базовых функций включают в себярегистр-переключатель косвенной адресации (INDF), программный счетчик (РС),представленный двумя регистрами PCL и PCLATH, регистр слова состояния (STATUS),регистр-указатель косвенной адресации (FSR), рабочий регистр (W), регистрпрерываний (INTCON), а также регистр режимов работы или конфигурациипредварительного делителя и таймера (OPTION). Регистры периферийных устройстввключают в себя регистры ввода/вывода (RA-порт А и RB-порт В), регистры данных(EEDATA) и адреса (EEADR) памяти данных-констант, регистр таймера-счетчика(TMPO) и регистры управления конфигурацией портов ввода/вывода (TRISA и TRISB).
К ячейкам ОЗУможно точно также как и в PIC 16С71 адресоваться прямо или косвенно, черезрегистр указатель FSR (04h). Это, кстати, относится и к EEPROM памятиданных-констант.
Долговременнаяпамять данных-констант EEPROM
Памятьданных-констант EEPROM позволяет прочитать и записать байт информации. Призаписи байта автоматически стирается предыдущее значение и записывается новое(стирание перед записью). Все эти операции производит встроенный автомат записиEEPROM. Содержимое ячеек этой памяти сохраняется при выключенном питании.
Присчитывании данных из памяти EEPROM необходимо записать требуемый адрес в EEADRрегистр и затем установить бит RD EECON1 в единицу. Данные появятся вследующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные врегистре EEDATA защелкиваются. Пример фрагмента программы считывания данных изпамяти данных-констант EEPROM приведена ниже:
Считывание изпамяти данных-констант
Bcf STATUS,RP0; Установка банка 0.
MovlwCONFIG_ADDR ;
Movwf EEADR;Адрес чтения.
Bsf STATUS,RP0; Установка банка 1.
BsfEECON1, RD; Чтение EEPROM.
Bcf STATUS,RP0; Установка банка 0.
Movf EEDATA,W; Считанные данные W.
При записи впамять EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр иданные в EEDATA регистр. Затем выполнить специальную обязательнуюпоследовательность команд, производящую непосредственную запись:
Movlw 55h ;
Movwf EECON2; Запись 55 h.
Movlw AAh ;
Movwf EECON2; Запись AA h.
Bsf EECON1,WR; Установка бита WR,
; началоцикла записи.
Во времявыполнения этого участка программы, все прерывания должны быть запрещены дляточного выполнения временной диаграммы. Время записи — примерно 10мс.Фактическое время записи будет изменяться в зависимости от напряжения,температуры и индивидуальных свойств кристалла. В конце записи бит WRавтоматически обнуляется, а флаг завершения записи EEIF, он же запрос напрерывание, устанавливается. Пример фрагмента программы записи в памятьданных-констант EEPROM приведена ниже:
; Запись впамять данных-констант.
Bsf Status,RP0; Установка банка 1.
Bcf Intcon,GIE; Запрет прерываний.
; Обязательаяпоследовательность команд.
Movlw 55h ;
Movwf EECON2; Запись 55 h.
Movlw Aah ;
Movwf EECON2; Запись AA h.
Bsf EECON1,WR; Установка бита WR,
; началоцикла записи.
;Bsf Intcon,GIE; Разрешение прерываний.
Дляпредотвращения случайных записей в память данных предусмотрен специальный битWREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме техслучаев, когда нужно обновить память данных. Более того, кодовые сегменты,которые устанавливают бит WREN и те, которые выполняют запись должны хранитьсяна различных адресах, чтобы избежать случайного выполнения их обоих при сбоепрограммы.

4.  Разработка алгоритмаработы устройства
Алгоритмработы устройства показан на рис. 4. После инициализации регистровмикроконтроллера устанавливают пределы в текущих регистрах экстремальныхзначений. В регистры текущих максимальных температур записывается минимальнаяизмеряемая термодатчиком температура (-55,0°С), а в регистры минимальныхтемператур — максимальная измеряемая температура (+99,9°С). При такихустановках любое значение температуры, измеренное первым, будет записано врегистр как максимальных, так и минимальных температур, поскольку оно окажетсязаведомо больше -55,0° и заведомо меньше +99,9 °. Дальнейшие измеренныезначения будут сравниваться с первой записанной температурой и, принеобходимости, корректировать значения регистров максимума и минимума. Такие жепредельные установки регистров выполняются каждый день в полночь после записи впамять значении экстремальных температур прошедшего дня.
Вообще, термодатчик может измерять максимальную температуру до+125°, но, во-первых, таких температур наружного воздуха просто не бывает, аво-вторых, автором были использованы все 96 регистров общего назначенияосновного банка. Поэтому оказалось разумным остановиться на максимальнойизмеряемой температуре +99,9°.
По завершении предельных установок выполняется инициализация ЖКИ.При инициализации ЖКИ без опроса освобождения от цикла записи зачастуювозникают затруднения с включением индикатора.
Далее выполняется проверка кнопок. Обычно при проверке кнопок приустановке режима индикации выполняется загрузка регистров индикации, но вданном случае из-за большого числа регистров индикации устанавливаются толькофлаги режимов. Если установлен флаг текущего режима индикации, то далеевыполняется вывод на индикацию.
/>
Рис. 3. Алгоритм работы термометров с памятью
Если выполнять вывод на индикацию обычным способом, т.е.последовательным заполнением всех знакомест, то потребуется 32 регистраиндикации, поэтому вывод на индикацию выполняется построчно. Поскольку приразработке программы был испытан дефицит регистров общего назначения, всетекущие и экстремальные значения температур сохраняются в двоичном коде, аперед выводом на индикацию перекодируются в двоично-десятичный код, которыйсразу записывается в регистры индикации. После вывода на индикацию первой(верхней) строки значения второй строки перекодируются и записываются в те жерегистры индикации, а затем — выводятся на индикацию.
Для определения температуры с точностью 0,1 градуса термодатчиком DS18B20 необходимо время 0,75с, поэтому каждое измерение одним термодатчиком выполняется один раз в двесекунды. Измерение первым термодатчиком происходит каждую четную, а вторым —каждую нечетную секунду. На рис. 3 измерение двух температур показано параллельно,хотя в действительности они выполняются последовательно. После каждогоизмерения температуры происходит проверка кнопок и вывод на индикацию.
После каждого принятого от термодатчика значения температурывыполняется сравнение текущей температуры с температурой, сохраненной врегистрах максимальной и минимальной температуры. Сравнение температурначинается со сравнения знаков измеренного и сохраненного значения. Послесравнения знаков, при необходимости, сравниваются значения измеренных исохраненных величин. Алгоритм сравнения знаков и выполняемые действия взависимости от результата сравнения можно понять, рассмотрев табл. 1.
Например, при сравнении на максимальное значение, если знакисохраненного и измеренного значения — положительны, а измеренное значениебольше сохраненного, то оно переписывается в регистр максимального значения.При сравнении на минимальное значение и аналогичной разности измеренного исохраненного значений запись в регистры минимума выполняется, если оба знака —отрицательные. Если при сравнении на максимум сохраненный знак — положительный,а измеренный — отрицательный, то явно измеренное значение температуры будетменьше сохраненного значения, поэтому нет смысла его сохранять. Ситуация счастой сменой знаков измеренной и сохраненной температурами возможна приизмерении температуры вблизи нуля.

Таблица 1. Сопоставление результатов сравнения и действийСохр. Мах + + – – Измеренное + – + – Действие И>С =3 нет записи запись иС =3
Знаки сохраненных экстремальных температур сохраняются с помощьюфлагов регистра, но использовать их для сравнения неудобно. По этой причине длясравнения используются значения знаков для вывода на индикацию (в кодировке ASCII минус 0x30). Так,например, знак “-” обозначен числом 253, а “+” — 251. Притаком обозначении легко определить равенство или неравенство знаков и,воспользовавшись табл. 1, выполнить соответствующие действия.
Еслитермодатчик отключен от микроконтроллера, то на индикаторе высветитсятемпература -00,0, а поскольку такой температуры не существует, то легкоопределить неисправность термодатчика.
Если при проверке кнопок окажется, что установлен режим просмотра,то вначале анализируется установленная дата. Если установлена текущая(сегодняшняя) дата, то в регистры индикации считываются текущие экстремальныезначения, а если установлено прошедшее число, то данные считываются из памяти EEPROM.
При выборке из памяти значения всех 16 регистров считываются врегистры записи/считывания, а выделенный знак записывается в регистрыиндикации. Регистры записи/считывания являются промежуточными между регистрамитекущих и экстремальных значений при записи в регистры индикации.
Для записи и считывания в энергонезависимую память экстремальныхзначений одного дня требуется 16 регистров. При объеме памяти 128×8 можносохранить данные за 8 дней (128/16 = 8). Запись для одного термодатчикавыполняется в следующей последовательности.
1. Часы максимума.
2. Минуты максимума.
3. Градусы максимума.
4. Десятые доли градусов максимума.
5. Часы минимума.
6. Минуты минимума.
7. Градусы минимума.
8. Десятые доли градусов минимума.
Следующие восемь регистров аналогично заполняются данными длявторого термодатчика. Знаки температур дописываются в седьмой разряд регистровградусов. При этом единица соответствует знаку.
Как видно изформата записи, для уменьшения числа регистров записи число и месяц в память незаписываются. При нажатии кнопки «Просмотр» на единицу уменьшаетсячисло в регистре индикации (а при необходимости — и месяц), и на 16 уменьшаетсяадрес считывания из памяти. Если весь объем памяти просмотрен, то просмотрначинается с адреса вчерашнего дня. Если устройство не выключается, то значениядат просмотра отсчитываются от текущей даты.
При выключении устройства энергонезависимая память сохранитзаписанные значения без привязки к дате. При отключении питания счетчикизаписи/считывания обнуляются, и считывание начнется с предыдущего адреса, т. е.112 (128 -16=112), а дата не будет соответствовать дате записи. Например, если записаныданные одного вчерашнего числа, и выключалось напряжение питания, то эти данныебудут считаны как данные недельной давности. Если память еще не заполнена, тона индикатор выводятся все нули (кроме даты, конечно).
В режиме установки считывание из памяти не выполняется. В режимахустановки и просмотра на индикатор выводится мигающий курсор. Для того чтобымигание курсора было хорошо различимо, оно происходит с периодом в две секунды.В первую секунду на индикатор выводятся значения регистров, а во вторую —курсор в выбранном разряде. Если при инициализации ЖКИ разрешить миганиекурсора, то вместе с курсором включатся все сегменты выбранного разряда, что неочень удобно при установке.
Как и в текущем режиме, в режимах просмотра и установки передвыводом на индикацию необходимые значения построчно перекодируются вдвоично-десятичный код и переписываются в регистры индикации. Запись в регистрыэкстремальных значений происходит, когда измеренное значение превосходитсохраненное или когда они равны, поэтому, анализируя записанные в памятьзначения, необходимо помнить, что в память записано время последнейзафиксированной температуры.

5.  Ассемблирование
Дляассемблирования спользуется макpоассемблеp MPASM, он содеpжит все необходимыенам возможности. MPASM входит в пакет программ Microchip MPLAB фирмы MicrochipTechnology.
В pезультатеpаботы ассемблеpа создаются файлы со следующими pасшиpениями:
* HEX — объектный файл
* LST — файллистинга
* ERR — файлошибок и пpедупpеждений
* COD
Объектныйфайл создается в 16-pичном фоpмате и содеpжит код, котоpый должен быть записанв микpосхему. Файл листинга содеpжит полный листинг пpогpаммы вместе сзагpузочным кодом. В файл ошибок и пpедупpеждений записываются все ошибки ипpедупpеждения, возникающие в пpоцессе ассемблиpования. Они также пpисутствуюти в файле листинга. После обpаботки нашей пpогpаммы ассемблеp должен был выдатьсообщение «Assembly Successful», означающее, что ошибок обнаpужено небыло. Файл ошибок не должен был создаться.
Листинг программыи объектный файл приведены в Приложении А.

6. Описание функциональных узлов МПС и алгоритма их
взаимодействия
Впроектируемом устройстве можно выделить следующие функциональные блоки: панельуправления, содержащая пять кнопок; жидкокристаллический индикатор, на которомвоспроизводится информация (дата, время, температура); термодатчики, благолдарякоторым производится измерение температуры; стабилизатор напряжения, служит дляподачи стабильного напряжения на МК; источник питания, состоящий из внутреннегоисточника и внешнего. Функциональная схема электронного термометра приведена нарис. 4.
/>

/>
Стабилизатор   />/>/>/>/>/>/>
Кварцевый
генератор   />/>/>/>/>/> /> /> /> /> /> /> /> />

Рис. 4. Функциональная схема электронного термометра

7. Описание выбора элементной базы и работыпринципиальной
схемы
Принципиальная схема устройства показана на рис. 5. Резистором R5 регулируютконтрастность изображения на индикаторе. Элементы резервного питания можносоставить из трех элементов типа AAA. Средний потребляемый ток от элементов питания втекущем режиме не превышает 3 мА.
Принципиальнаясхема электронного термометра выполнена в САПР Accel Eda (Рис. 5).
/>
Рис.5.Принципиальная схема электронного термометра в Accel EDA.
Принципиальнаясхема электронного термометра приведена в Приложении Б.
Выбор элементной базы основан на выборе элементов согласующихся смикроконтроллером. Основными элементами схемы являются термодатчики, которыехорошо согласуются с микроконтроллером. Термодатчики DS1820 имеют следующиетехнические характеристики:
• индивидуальный 64-битный идентификационный номер;
• напряжение питания от +3 до +5,5 В;
• измеряемая температура от -55 до +125°С;
• погрешность измерения температуры в диапазоне -Ю…+85°С неболее 0,5°С;
• в остальном диапазоне температур погрешность измерения непревышает 2°С;
• информация о температуре выдается 9-битным кодом;
• установка пороговых значений температуры по максимуму иминимуму;
•максимальное время преобразования температуры в код 750 мс;
• возможность питания от высокого уровня шины данных;
• термодатчики не требуют индивидуальной настройки при замене.Термодатчик типа DS18B20 отличается от DS1820 способностью измерять температуру с четырьмяуровнями погрешности — 0,5; 0,25; 0,0625°С. При этом максимальное времяизмерения для каждого уровня составляет соответственно 93,75; 187,5; 375; 750мс. Необходимая погрешность измерения задается при инициализациимикроконтроллерного термодатчика.
Термодатчикивыпускают в двух типах корпусов: ТО-92 и SOIC.
/>
Рис.6. Схема подключения термодатчика к микроконтроллеру

Что же касается жидкокристаллических индикаторов. Для управленияжидкокристаллическими индикаторами необходимо иметь отрицательный источникпитания и организовывать подачу трехуровневых управляющих импульсов на каждыйсегмент. При малом числе сегментов (например, в часах) эта задача решаема, адля большого числа сегментов была разработана модульная система. Суть модульнойсистемы заключается в том, что ЖКИ комплектуется модулем драйвера —контроллера. Драйверы каждый изготовитель разрабатывает по своей схеме и технологии.Но для взаимозаменяемости ЖК-дисплеев все изготовители негласно выпускаютдрайверы с системой команд, совместимых с драйверами типа HD44780 фирмы Hitachi. Разработчику в принципеневажно, какой драйвер внутри модуля, главное, чтобы работал «правильно».
Алфавитно-цифровые жидкокристаллические модули с драйверами —контроллерами принято называть ЖК-дисплеями или LCD-дисплеями. МодульЖК-дисплея состоит из печатной платы, на которой установлен драйвер —контроллер в корпусе или без корпуса (залитый компаундом), ижидкокристаллического индикатора, который через контактную резину прижатметаллической рамкой к плате.
Остается добавить что мы выбрали двухрядный индикатор, длякоторого таблица кодов приведена в Таблице 7.
Основные характеристики драйвера HD44780:
Диапазон питающих напряжений для логики 2,7…5,5 В.
Диапазон питающих напряжений для выходных формирователей З… П В.
Поддержка форматов знаков 5 х 8 и 5 х 10.
Встроенный генератор.
8- или 4-разрядная шина данных для связи с микроконтроллером. Максимальнаячастота обмена по шине данных — 2 МГц. Объем дисплейного ОЗУ 80 х 8 (80символов). Встроенный фиксированный знакогенератор на 9920 бит.Пользовательский загружаемый знакогенератор 64 х 8. Программируемый мультиплекс 1:8, 1:11, 1:16.
ЖК-дисплеи выпускают с различным числом строк (1—4) и знакомест(8, 10, 16, 20, 24, 30, 32, 40) в строке и различными их размерами. Каждоезнакоместо содержит 5×8 (40) точек, из которых формируются цифры, буквы исимволы (рис. 58). Все символы записаны в ПЗУ знакогенератора по своим адресам.Крайние левые цифры на рис. 58 несут информацию о младшем полубайте адресазнакогенератора, а верхние — о старшем полубайте. Например, для отображения наиндикаторе буквы «3» необходимо послать в ЖК-дисплей адрес 4Ah. По этому адресу взнакогенераторе будет выбрана буква и отображена в необходимом знакоместе.ЖК-дисплеи, в которых последняя буква маркировки «R» (русифицировано), имеютв составе знакогенератора кириллицу. Это не касается ЖК-дисплеев отечественныхпроизводителей.
/>

8. Работа с устройством
После подачинапряжения питания на индикаторе появится изображение, аналогичноепредставленному на рис. 6, но с числом и месяцем, равным 01 и нулевымизначениями времени. Две крайние слева цифры в верхнем ряду показывают текущуюдату, а в нижнем ряду — текущий месяц. Далее в верхнем ряду отображено текущеевремя в часах и минутах с двоеточием, которое мигает с периодом в две секунды.
/>
Рис.6. Индикация после подачи напряжения питания
Крайниесправа значения в верхнем ряду показывают текущую температуру с первоготермодатчика, а в нижнем ряду — со второго термодатчика. После стрелки указанномер термодатчика.
После нажатиякнопки «Режим» и удержания ее не менее трех секунд индикатор перейдетв режим установки времени и даты рис.7.
/>
Рис. 7. Режим установки времени и даты
Под разрядом десятков часов будет мигать курсор с периодом в двесекунды. После нажатия кнопки «Разряд» курсор будет перемещатьсяслева направо. Кнопкой «Установка» устанавливают необходимые текущиезначения времени и даты. Формат записи даты: «число-месяц». Приустановке удерживать нажатыми кнопки «Разряд» и «Установка»следует не менее одной секунды.
При нажатии кнопки «Сброс» значения минут и секундустанавливаются в ноль, что необходимо при установке времени по сигналамточного времени. Все кнопки срабатывают после их отпускания.
При следующемнажатии кнопки «Режим» на индикаторе установится режим просмотра(рис. 8).
/>
Рис. 8. Режим просмотра
Первыми отображены время и температура для текущей даты. Подразрядом единиц числа будет мигать курсор. Стрелка указывает на номертермодатчика, по которому показаны экстремальные значения. В верхнем рядуотображены время и зафиксированная максимальная температура, а в нижнем — времяи минимальная температура. Кнопкой «Просмотр 1-2» выбирают показанияиндикатора для первого или второго термодатчика. Если кнопку «Просмотр1-2» удерживать нажатой, то индикация будет непрерывно изменяться черездве секунды.
После каждого нажатия кнопки «Просмотр» отображаемоечисло уменьшается на единицу, а на индикаторе появятся значения времени итемператур, записанных в памяти EEPROM.
Нажатиемкнопки «Режим» переходят в текущий режим индикации. При переходе изрежима просмотра к текущему режиму кнопку «Режим» необходимоудерживать четыре секунды. Отсчет времени при удержании кнопки удобно вести помиганию курсора.
Важно запомнить, что в режиме просмотра и установки измерениетемпературы не производится, поэтому рабочим режимом нужно считать текущийрежим индикации.

ЗАКЛЮЧЕНИЕ
В данномкурсовом проекте разработано устройство — электронный термометр. Разработанасхема электрическая принципиальная этого устройства и программа длямикроконтроллера. В результате ассемблирования получена прошивка программы дляпамяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальнуюсхему и расширить функциональные возможности микроконтроллера, так как для измененияфункций устройства достаточно внести изменения в программу микроконтроллера.

СПИСОКЛИТЕРАТУРЫ
1. Белов А.В. Микроконтроллеры АVR в радиолюбительскойпрактике – СП-б, Наука и техника, 2007 – 352с.
2. Проектированиецифровых устройств на однокристальных микроконтроллерах / В.В. Сташин [ и др.].– М.: Энергоатомиздат, 1990. – 224 с.
3. Евстифеев А.В.Микроконтроллеры Microchip: практическое руководство/А.В.Евстифеев. – М.:Горячая линия – Телеком, 2002. – 296 с.
4. Кравченко А.В. 10 практических устройств на AVR-микроконтроллерах. Книга1 – М., Додэка –ХХ1, МК-Пресс, 2008 – 224с.
5.Трамперт В. Измерение, управление ирегулирование с помощью АVR-микроконтроллеров: Пер. с нем – К., МК-Пресс,2006 – 208с.
6. Мортон Дж. Микроконтроллеры АVR. Вводный курс /Пер. сангл. – М., Додэка –ХХ1, 2006 – 272с.

ПРИЛОЖЕНИЕА
Листинг программыи объектный файл
;
; 2ТЕРМОМЕТРА С ПАМЯТЬЮ МАКСИМУМА И МИНИМУМА.
; ТОЧНОСТЬИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ — 0,1 ГРАДУС.
; ДАТЧИКИТЕМПЕРАТУРЫ — DS18B20,
; ПАМЯТЬ НА 8ДНЕЙ.
; ИНДИКАЦИЯ — 16х2 ЖКИ.
; РАЗРАБОТАЛСАХНЮК АЛЕКСАНДР ЮРЬЕВИЧ
; ДЛЯСВОБОДНОГО ИСПОЛЬЗОВАНИЯ
;г.СЕВЕРОДОНЕЦК ЛУГАНСКОЙ
; ПРОГРАММА =MAMIN.ASM
; ВЕРСИЯ:24-01-06.
; АССЕМБЛЕР ИОТЛАДЧИК: MPLAB IDE, ВЕРСИЯ: 5.70.40.
;
LISTP=16F628
  #INCLUDEP16F628.INC
  __CONFIG 3F01H
;======================================================
;ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,096 MГЦ.
; КОЭФФИЦИЕНТДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 16, ЧТО ВМЕСТЕ
; С TMR0(256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ, ДЕЛИТЕЛЕМ НА 125, 2
; ДАЕТ НАВЫХОДЕ 1 СЕКУНДУ (4х16х256×250=4096000).
;======================================================
; RB4-RB7 — ДАННЫЕ LCD,
; RB2 — RS,RB3 — E,
; RB1 — КНОПКА «РАЗРЯД».
; RB0 — КНОПКА «РЕЖИМ».
; RA0 — ВХОД/ВЫХОД НА DS18B20 — 2.
; RA4 — ВХОД/ВЫХОД НА DS18B20 — 1.
; RA5 — ПРОСМОТР1-2. RB5 — ПРОСМОТР -1. RB6 — УСТАНОВКА +.
;==============================================
; РЕГИСТРЫОБЩЕГО НАЗНАЧЕНИЯ.
;==============================================
CBLOCK H’20’
CEK; СЕКУНДЫДВОИЧНЫЕ.
MIN; МИНУТЫДВОИЧНЫЕ.
HOU; ЧАСЫДВОИЧНЫЕ.
MINL; ЕДИНИЦЫМИНУТ.
MINH; ДЕСЯТКИМИНУТ.
HOUL; ЕДИНИЦЫЧАСОВ.
HOUH; ДЕСЯТКИЧАСОВ.
TEMP; ВРЕМЕННЫЙ.
COUN; СЧЕТЧИКБИТОВ, СЧЕТЧИК ПЕРЕСЧЕТА.
LSB; РЕГИСТРДАННЫХ DS.
LSBH; СТАРШИЙРЕГИСТР СЧИТЫВАНИЯ.
MCK; МИЛЛИСЕКУНД.
WTEMP; ВРЕМЕННЫЙ.
STEMP; ВРЕМЕННЫЙ.
FTEMP; ВРЕМЕННЫЙ.
REID; РЕЖИМИНДИКАЦИИ.
KYPC; КУРСОРА.
SOT2; ЗНАК 2.
SOT2X; ЗНАК 2MAX.
SOT2N; ЗНАК 2MIN.
EDI2; ЕДИНИЦЫ2.
DES2; ДЕСЯТКИ2.
DST2; ДЕСЯТЫЕ2.
SOT1; ЗНАК 1.
SOT1X; ЗНАК 1MAX.
SOT1N; ЗНАК 1MIN.
EDI1; ЕДИНИЦЫ1.
DES1; ДЕСЯТКИ1.
DST1; ДЕСЯТЫЕ1.
DHU; ДНИДВОИЧНЫЕ.
DHUE; ЕДИНИЦЫДНЕЙ.
DHUD; ДЕСЯТКИДНЕЙ.
MEC; МЕСЯЦДВОИЧНЫЙ.
MECE; ЕДИНИЦЫМЕСЯЦА.
MECD; ДЕСЯТКИМЕСЯЦА.
FLAG;
FLAG1;
FLAG2;
MECDI; ДЕСЯТКИМЕСЯЦА ИНДИКАЦИИ.
MECEI; ЕДИНИЦЫМЕСЯЦА ИНДИКАЦИИ.
DHUDI; ДЕСЯТКИДНЕЙ ИНДИКАЦИИ.
DHUEI; ЕДИНИЦЫДНЕЙ ИНДИКАЦИИ.
DHUZ; ДВОИЧНЫЕДНИ ЗАПИСИ/СЧИТЫВАНИЯ.
MECZ; ДВОИЧНЫЙМЕСЯЦ ЗАПИСИ/СЧИТЫВАНИЯ.
MIN1X; ЕДИНИЦЫМИНУТ 1.
MIN1N; ДЕСЯТКИМИНУТ 1.
HOU1X; ЕДИНИЦЫЧАСОВ 1.
HOU1N; ДЕСЯТКИЧАСОВ 1.
MIN2X; ЕДИНИЦЫМИНУТ 2.
MIN2N; ДЕСЯТКИМИНУТ 2.
HOU2X; ЕДИНИЦЫЧАСОВ 2.
HOU2N; ДЕСЯТКИЧАСОВ 2.
COUZ; СЧЕТЧИКЗАПИСИ.
COUE; СЧЕТЧИКСЧИТЫВАНИЯ.
COYC; СЧЕТЧИКУСТАНОВКИ ДНЕЙ ПРОСМОТРА.
LSB1X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ 1 ДАТЧИКА.
LSB1N; СОХРАНЕННОЕМИНИМАЛЬНОЕ 1 ДАТЧИКА.
LSB2X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ 2 ДАТЧИКА.
LSB2N; СОХРАНЕННОЕМИНИМАЛЬНОЕ 2 ДАТЧИКА.
DST1X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
DST1N; СОХРАНЕННОЕМИНИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
DST2X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ ДЕСЯТЫХ 2 ДАТЧИКА.
DST2N; СОХРАНЕННОЕМИНИМАЛЬНОЕ ДЕСЯТЫХ 2 ДАТЧИКА.
ENDC
R1EQU60H; РЕГИСТРЫИНДИКАЦИИ.
R2EQU61H;
R3EQU62H;
R4EQU63H;
R5EQU64H;
R6EQU65H;
R7EQU66H;
R8EQU67H;
R9EQU68H;
R10EQU69H;
R11EQU6AH;
R12EQU6BH;
R13EQU6CH;
R14EQU6DH;
R15EQU6EH;
R16EQU6FH;
HOUZ1XEQU70H; РЕГИСТРЫ ДЛЯ ЗАПИСИ/СЧИТЫВАНИЯ, ЧАСЫ ДВОИЧНЫЕ 1 MAX.
MINZ1XEQU71H; МИНУТЫДВОИЧНЫЕ 1 MAX.
LSBZ1XEQU72H; СОХРАНЕННОЕМАКСИМАЛЬНОЕ 1 ДАТЧИКА.
DSTZ1XEQU73H; СОХРАНЕННОЕМАКСИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
HOUZ1NEQU74H; ЧАСЫДВОИЧНЫЕ 1 MIN.
MINZ1NEQU75H; МИНУТЫДВОИЧНЫЕ 1 MIN.
LSBZ1NEQU76H; СОХРАНЕННОЕМИНИМАЛЬНОЕ 1 ДАТЧИКА.
DSTZ1NEQU77H; СОХРАНЕННОЕМИНИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
HOUZ2XEQU78H; РЕГИСТРЫЗАПИСИ/СЧИТЫВАНИЯ, ЧАСЫ ДВОИЧНЫЕ 2 MAX.
MINZ2XEQU79H; МИНУТЫДВОИЧНЫЕ 2 MAX.
LSBZ2XEQU7AH; СОХРАНЕННОЕМАКСИМАЛЬНОЕ 2 ДАТЧИКА.
DSTZ2XEQU7BH; СОХРАНЕННОЕМАКСИМАЛЬНОЕ ДЕСЯТЫХ 2 ДАТЧИКА.
HOUZ2NEQU7CH; ЧАСЫДВОИЧНЫЕ 2 MIN.
MINZ2NEQU7DH; МИНУТЫДВОИЧНЫЕ 2 MIN.
LSBZ2NEQU7EH; СОХРАНЕННОЕМИНИМАЛЬНОЕ 2 ДАТЧИКА.
DSTZ2NEQU7FH; СОХРАНЕННОЕМИНИМАЛЬНОЕ ДЕСЯТЫХ 2 ДАТЧИКА.
;==============================================
; ОПРЕДЕЛЕНИЕБИТОВ СОСТОЯНИЯ РЕГИСТРОВ ФЛАГОВ.
;==============================================
;FLAG
;0-> ЗНАК1 МАКС.
;1-> ЗНАК1 МИН.
;2->КНОПКИ «УСТАНОВКА -».
;3->КНОПКИ «УСТАНОВКА +».
;4->КНОПКИ «РЕЖИМ».
;5->КНОПКИ «РАЗРЯД».
;6->ЧЕРЕДОВАНИЯ КУРСОРА И ИНДИКАЦИИ.
;7->ДЕЛИТЕЛЬ НА 2 (1 CEK).
;FLAG1
;0->УСТАНОВКИ.
;1->ПРОСМОТРА ТЕМПЕРАТУРЫ: 1>2, 0>1.
;2->ЗАПРЕТ ИНДИКАЦИИ.
;3->ЗНАКА. 1-МИНУС.
;4->НАЧАЛЬНАЯ ПАУЗА 1.
;5-> НОЛЬ,КНОПКИ «ПРОСМОТР 1-2».
;6->НАЧАЛЬНАЯ ПАУЗА 2.
;FLAG2; ФЛАГИНДИКАЦИИ.
;0->ТЕКУЩИЕ ДАТА, ВРЕМЯ, ТЕМПЕРАТУРА.
;1->УСТАНОВКА ЧАСОВ, ДАТЫ.
;2-> РЕЖИМПРОСМОТРА ТЕМПЕРАТУРЫ.
;3-> ЗНАК2 МАКС.
;4-> ЗНАК2 МИН.
;5-> ФЛАГВЫПОЛНЕННОЙ УСТАНОВКИ МИНУС.
;6->УСТАНОВКИ СЧЕТЧИКА ДНЕЙ ПРОСМОТРА.
;=======================================
DS2EQU0; ВЫХОДDS2.
DS1EQU4; ВЫХОДDS1.
RSEQU2; КОМАНДА/ДАННЫЕ.
EEQU3; СИНХРОНИЗАЦИЯ.
YCPLEQU6; УСТАНОВКАПЛЮС.
YCMIEQU5; УСТАНОВКАМИНУС.
PAZEQU1; РАЗРЯД.
PEJEQU0; РЕЖИМ.
HOLEQU5; СБРОС.
;=======================================
; 1. ПУСК.
;======================
 ORG 0
GOTOINIT
 ORG 4
GOTOPRER
;=========================================
; 2. ПЕРЕВОДДОЛЕЙ ГРАДУСА С ОКРУГЛЕНИЕМ.
;=========================================
DESATI
ADDWFPCL,1;
RETLW.0;0
RETLW.1;1
RETLW.1;2
RETLW.2;3
RETLW.3;4
RETLW.3;5
RETLW.4;6
RETLW.4;7
RETLW.5;8
RETLW.6;9
RETLW.6;10
RETLW.7;11
RETLW.7;12
RETLW.8;13
RETLW.9;14
RETLW.9;15
;============================
; 3. ЗАГРУЗКАЧИСЕЛ В МЕСЯЦЕ.
;============================
DAYMON
 ADDWFPCL,F ;
 NOP  ;0
 RETLW.32  ;1-ЯНВАРЬ
 RETLW.29  ;2-ФЕВРАЛЬ
 RETLW.32  ;3-МАРТ
 RETLW.31  ;4-АПРЕЛЬ
 RETLW.32  ;5-МАЙ
 RETLW.31  ;6-ИЮНЬ
 RETLW.32  ;7-ИЮЛЬ
 RETLW.32  ;8-АВГУСТ
 RETLW.31  ;9-СЕНТЯБРЬ
 RETLW.32  ;10-ОКТЯБРЬ
 RETLW.31  ;11-НОЯБРЬ
 RETLW.32  ;12-ДЕКАБРЬ
;=======================================
; 4. ВЫБОРРЕЖИМА ИНДИКАЦИИ.
;=======================================
VUBOR
BTFSSPORTB,PEJ; ЕСЛИКНОПКА НАЖАТА,
RETURN; ТОВЫБОРА НЕТ.
BCFFLAG,4; СБРОСФЛАГА РЕЖИМА.
MOVFWREID; ПОНОМЕРУ
ADDWFPCL,1; ВЫБИРАЕМИНДИКАЦИЮ.
GOTOINDT; ТЕКУЩАЯ.
GOTOINDYC; УСТАНОВКАДАТЫ, ЧАСОВ.
GOTOINPRO; ПРОСМОТР.
INDT
CALLREGIN; ВОССТАНОВИМРЕГИСТРЫ.
BTFSCFLAG2,0; ЕСЛИУСТАНОВКИ СДЕЛАНЫ РАНЕЕ,
RETURN; ТОВЕРНЕМСЯ.
BCFFLAG2,1; СБРОСИМ:УСТАНОВКУ ЧАСОВ,
BCFFLAG2,2; ПРОСМОТР,
BCFFLAG1,0; ОБЩУЮУСТАНОВКУ,
BCFFLAG2,6; СЧЕТЧИКАДНЕЙ,
BCFFLAG2,5; ВЫПОЛНЕННОЙУСТАНОВКИ.
CALLZHAKCOX; ВОССТАНОВИМЗНАЧЕНИЯ ИНДИКАЦИИ.
BSFFLAG2,0; УСТАНОВИМТЕКУЩУЮ ИНДИКАЦИЮ.
RETURN
INDYC
CALLREGIN; ВОССТАНОВИМЗНАЧЕНИЯ ДАТЫ.
BTFSCFLAG2,1; ЕСЛИУСТАНОВКИ СДЕЛАНЫ РАНЕЕ,
RETURN; ТОВЕРНЕМСЯ.
BSFFLAG1,0; УСТАНОВКА.
BCFFLAG2,0; СБРОСИМ:ТЕКУЩУЮ ИНДИКАЦИЮ,
BCFFLAG2,2; ПРОСМОТР.
CLRFKYPC; ОБНУЛИМКУРСОР.
BSFFLAG2,1; УСТАНОВКАДАТЫ, ЧАСОВ.
RETURN
INPRO
BTFSCFLAG2,2; ЕСЛИУСТАНОВКИ СДЕЛАНЫ РАНЕЕ,
GOTO$+6; ТОПРОВЕРИМ КНОПКУ.
MOVLW.8; УСТАНОВИМКУРСОР.
MOVWFKYPC;
BCFFLAG2,0; СБРОСИМ:ТЕКУЩУЮ ИНДИКАЦИЮ,
BCFFLAG2,1; УСТАНОВКУДАТЫ, ЧАСОВ.
BSFFLAG2,2; УСТАНОВИМРЕЖИМ ПРОСМОТРА.
BTFSCFLAG1,5; ЕСЛИКНОПКА ПРОСМОТРА 1-2 БЫЛА НАЖАТА РАНЕЕ,
GOTO$+5; ТОИДЕМ НА УСТАНОВКУ ФЛАГА.
BTFSSPORTA,HOL; ЕСЛИКНОПКА НАЖАТА,
BSFFLAG1,5; УСТАНОВИМФЛАГ КНОПКИ.
BTFSSPORTA,HOL; ПОКАКНОПКА НАЖАТА,
RETURN; УСТАНОВКИНЕТ.
BTFSSFLAG1,5; ЕСЛИКНОПКА ПРОСМОТРА 1-2 БЫЛА НАЖАТА РАНЕЕ,
RETURN;
BCFFLAG1,5; СБРОСИМФЛАГ КНОПКИ.
BTFSCFLAG1,1;
GOTO$+3;
BSFFLAG1,1; ИЗМЕНИМСОСТОЯНИЕ ФЛАГА ПРОСМОТРА
RETURN
BCFFLAG1,1; НАПРОТИВОПОЛОЖНОЕ.
RETURN
;=======================================
; 5. ВЫБОРРАЗРЯДА УСТАНОВКИ.
;=======================================
YCTAL
BTFSSPORTB,YCPL; ЕСЛИКНОПКА ПЛЮС НАЖАТА,
RETURN; ТОВЫБОРА НЕТ.
BCFFLAG,3; СБРОСФЛАГА РЕЖИМА.
BTFSCFLAG2,2; ПРИПРОСМОТРЕ
RETURN; КНОПКАПЛЮС НЕ РАБОТАЕТ.
BCFFLAG,2; СБРОСФЛАГА РЕЖИМА.
BCFFLAG1,2; ИНДИКАЦИЯРАЗРЕШЕНА.
MOVFWKYPC; ПОКУРСОРУ
ADDWFPCL,1; НАХОДИМРАЗРЯД УСТАНОВКИ.
GOTOYC0; ДЕСЯТКИЧАСОВ.
GOTOYC1; ЕДИНИЦЫЧАСОВ.
GOTOYC2; ДЕСЯТКИМИНУТ.
GOTOYC3; ЕДИНИЦЫМИНУТ.
GOTOYC4; ДЕСЯТКИДНЕЙ.
GOTOYC5; ЕДИНИЦЫДНЕЙ.
GOTOYC6; ДЕСЯТКИМЕСЯЦА.
GOTOYC7; ЕДИНИЦЫМЕСЯЦА.
YCTAM
BTFSCFLAG2,1; ЕСЛИУСТАНОВКА ДАТЫ, ЧАСОВ,
RETURN; ТОВЫБОРА НЕТ.
BTFSSPORTB,YCMI; ЕСЛИКНОПКА МИНУС НАЖАТА,
RETURN; ТОВЫБОРА НЕТ.
BCFFLAG,2;
BCFFLAG1,2; ИНДИКАЦИЯРАЗРЕШЕНА.
GOTOYC8M; ЕДИНИЦЫДНЕЙ ПРОСМОТРА.
;=========================================
; 6.ИНДИКАЦИЯ КУРСОРА.
;=========================================
JEKYC
MOVLW.14; РАЗРЕШАЕММИГАНИЕ КУРСОРА.
CALL JEKOM; ЗАПИШЕМКОМАНДУ.
CALLJEKYK; НАВЫБОР МИГАЮЩЕГО РАЗРЯДА.
CALL JEKOM; ЗАПИШЕМКОМАНДУ.
BSFFLAG,6; ВЫПОЛНЕНАИНДИКАЦИЯ КУРСОРА.
RETURN
JEKYK
MOVFWKYPC; РЕГИСТРКУРСОРА — В РАБОЧИЙ.
ADDWFPCL,1;
RETLW0x85; ДЕСЯТКИЧАСОВ.
RETLW0x86; ЕДИНИЦЫЧАСОВ.
RETLW0x88; ДЕСЯТКИМИНУТ.
RETLW0x89; ЕДИНИЦЫМИНУТ.
RETLW0xC5; ДЕСЯТКИДНЕЙ.
RETLW0xC6; ЕДИНИЦЫДНЕЙ.
RETLW0xC8; ДЕСЯТКИМЕСЯЦА.
RETLW0xC9; ЕДИНИЦЫМЕСЯЦА.
RETLW0x81; ЕДИНИЦЫДНЕЙ.
;======================================================
; 7. ТАБЛИЦЫПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.
;======================================================
DEBIN
ADDWFPCL,1;
RETLW.0
RETLW.10
RETLW.20
RETLW.30
RETLW.40
RETLW.50
;===============================================
; 8.ВОССТАНОВЛЕНИЕ ЗНАКА ПОСЛЕ ПРОСМОТРА.
;===============================================
ZHAKCOX
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT1X;
BTFSSFLAG,0; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT1X;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT1N;
BTFSSFLAG,1; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT1N;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2X;
BTFSSFLAG2,3; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT2X;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2N;
BTFSSFLAG2,4; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT2N;
RETURN
;=================================================
; 9.УСТАНОВКА КУРСОРА (ВЫБОР РАЗРЯДА УСТАНОВКИ).
;=================================================
KYPCY
BTFSCFLAG2,2; ЕСЛИИДЕТ ПРОСМОТР,
RETURN; УСТАНОВКАНЕ МЕНЯЕТСЯ.
BTFSSFLAG2,1; УСТАНОВКАВОЗМОЖНА,
RETURN; ЕСЛИИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ.
BTFSSPORTB,PAZ; ПРИНАЖАТОЙ КНОПКЕ
RETURN; УСТАНОВКАНЕ МЕНЯЕТСЯ.
BCFFLAG,5; СБРОСИМФЛАГ.
INCFKYPC,1; ПРИБАВИМЕДИНИЦУ В КУРСОР.
MOVLW.8; НЕБОЛЕЕ 7.
SUBWFKYPC,0;
SKPNC;
CLRFKYPC; ИНАЧЕОБНУЛИМ КУРСОР.
RETURN;
;=========================================
; 10.ИНИЦИАЛИЗАЦИЯ DS2.
;=========================================
INIDS2
CALLHYL2; ПОСЫЛИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСКНОМЕРА.
CALLPOSIL2; ПОШЛЕМ.
MOVLW0x4E; РАЗРЕШАЕМЗАПИСЬ УСТАНОВКИ 0,1 ГРАДУСА.
CALLPOSIL2; ПОШЛЕМ.
MOVLW0x7D; ВЕРХНИЙПРЕДЕЛ +125. МОЖНО ПОСТАВИТЬ ЛЮБОЕ ЗНАЧЕНИЕ.
CALLPOSIL2; ПОШЛЕМ.
MOVLW0x77; НИЖНИЙПРЕДЕЛ -55. ЛЮБОЙ.
CALLPOSIL2; ПОШЛЕМ.
MOVLW0x7F; КОНФИГУРАЦИЯ11 = 0,1 ГРАДУС.
CALLPOSIL2; ПОШЛЕМ.
CALLHYL2; ПОСЫЛИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСКПОСЫЛА НОМЕРА DS.
CALLPOSIL2; ПОШЛЕМ.
MOVLW0x44; РАЗРЕШАЕМПРЕОБРАЗОВАНИЕ.
CALLPOSIL2; ПОШЛЕМ.
MOVLW.3; ПАУЗА 0,75 СЕК.
MOVWFCOUN; МАКСИМАЛЬНО 750 МС.
SPLU
 MOVLW .255
 MOVWF TEMP
PLUS
 MOVLW.255
 ADDLW-1
 BTFSSSTATUS,2
 GOTO$-2
 DECFSZTEMP,1
 GOTOPLUS
DECFSZCOUN,1
GOTOSPLU
GOTOPRIEM2; НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYL2
CALLWUX2; ВЫХОД НУЛЯ.
MOVLW.125; НУЛЕВОЙ ИМПУЛЬС
ADDLW-1;=500 МКС.
BTFSSSTATUS,2;
GOTO$-2;
CALLWXO2; ВЫХОД ЕДИНИЦЫ.
MOVLW.125; ИМПУЛЬС =
ADDLW-1;500МКС.
BTFSSSTATUS,2;
GOTO$-2;
RETURN
;=======================================
; 11.ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=======================================
WUX2
BCFPORTA,DS2;
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BCFTRISA^80H,DS2; НАВЫХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
RETURN
WXO2
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BSFTRISA^80H,DS2; НАВХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
RETURN
;====================================
; 12. ПРИЕМ16 БИТ ОТ DS2.
;====================================
PRIEM2
CALLHYL2; ПОСЫЛИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСКНОМЕРА.
CALLPOSIL2; ПОСЫЛ.
MOVLW0xBE; ЧТЕНИЕТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALLPOSIL2; ПОСЫЛ.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
 CALLPRIE2; НА ПРИЕМ.
MOVFWLSBH; ПЕРЕПИШЕМПРИНЯТЫЙ БАЙТ
MOVWFLSB; В МЛАДШИЙРЕГИСТР.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
CALLPRIE2; ИПРИМЕМ СТАРШИЙ БАЙТ.
GOTOCXET2; НАПЕРЕСЧЕТ.
PRIE2
MOVLW.8
MOVWFCOUN; ЗАПИШЕМЧИСЛО БИТ.
 CLRFLSBH; ОБНУЛИМРЕГИСТР ПРИЕМА.
PRI2
CALLWUX2; ВЫДАЕМКОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALLWXO2; НАПРИЕМ.
MOVLW.2; ЗАДЕРЖКА
CALLX4;8 МКС.
 MOVFWPORTA; ПЕРЕПИШЕМ
MOVWFTEMP; ЗНАЧЕНИЕПОРТА.
BTFSSTEMP,DS2;
BCFSTATUS,0; УСТАНОВИМБИТ ПРИЕМА В НОЛЬ.
BTFSCTEMP,DS2;
BSFSTATUS,0; ИЛИ ЕДИНИЦУ.
 RRFLSBH,1; ЗАПИШЕМВ РЕГИСТР.
MOVLW.12; ОБЩАЯПАУЗА 60 МКС.
 CALLX4;
 DECFSZCOUN,1; УМЕНЬШИМСЧЕТЧИК.
 GOTOPRI2; ПОВТОРИМПРИЕМ.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
 RETURN; ВЕРНЕМСЯ.
;==========================================
; 13. ПОСЫЛКОМАНДЫ В DS2.
;==========================================
POSIL2
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
MOVWFTEMP; ПЕРЕПИШЕМВО ВРЕМЕННЫЙ.
MOVLW.8; ЗАПИШЕМЧИСЛО БИТ.
 MOVWFCOUN;
POSI2
RRFTEMP,1; ВЫТОЛКНЕММЛАДШИЙ БИТ.
 BTFSSSTATUS,0; ЕСЛИОН НУЛЕВОЙ,
GOTOW0_2; ПОШЛЕМИМПУЛЬС НУЛЯ.
GOTOW1_2; ИЛИЕДИНИЦЫ.
POS2
DECFSZCOUN,1; УМЕНЬШАЕМСЧЕТЧИК.
 GOTOPOSI2; НАСЛЕДУЮЩИЙ БИТ.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
 RETURN; ВОЗВРАТ.
W0_2
CALLWUX2; УСТАНОВИМВЫХОД В НОЛЬ.
MOVLW.15; УДЕРЖИВАЕМ60 МКС.
CALL X4;
 CALLWXO2; НАВХОД = 1 НА ВЫХОДЕ.
 GOTOPOS2; ПОВТОРИМ.
W1_2
CALLWUX2; КОРОТКИЙНУЛЕВОЙ ИМПУЛЬС.
 CALLWXO2; НАВХОД = 1 НА ВЫХОДЕ.
 MOVLW.15; УДЕРЖИВАЕМ60 МКС.
CALLX4;
 GOTOPOS2; ПОВТОРИМ.
;==================================
; 14.ВЫДЕЛЕНИЕ 2.
;==================================
CXET2
BTFSCFLAG1,6; ЗАДЕРЖКАПРИ ВКЛЮЧЕНИИ ВЫПОЛНЕНА.
GOTO$+3;
BSFFLAG1,6; ЗАДЕРЖКАПРИ ВКЛЮЧЕНИИ.
RETURN;
BCFFLAG1,3; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
BTFSCLSBH,3; ЕСЛИИНАЧЕ,
BSFFLAG1,3; ТОУСТАНОВИМ МИНУС.
BTFSSFLAG1,3; ЕСЛИЗНАК ПЛЮС,
GOTO$+7; ТО НЕИНВЕРТИРУЕМ.
COMFLSB,1; ПРОИНВЕРТИРУЕММЛАДШИЙ
COMFLSBH,1; ИСТАРШИЙ РЕГИСТРЫ ПРИЕМА.
BCFSTATUS,0;
INCFLSB,1; ПРИБАВИМЕДИНИЦУ.
BTFSCSTATUS,0; ЕСЛИЕСТЬ ПЕРЕНОС,
INCFLSBH,1; ТОУВЕЛИЧИМ СТАРШИЙ РЕГИСТР.
MOVFWLSB; ВЫДЕЛИМДЕСЯТЫЕ.
ANDLWB’00001111′; ЗАМАСКИРУЕМ.
CALLDESATI; ПЕРЕКОДИРУЕМС ОКРУГЛЕНИЕМ.
MOVWFDST2; ЗАПИШЕМВ РЕГИСТР ДЕСЯТЫХ.
MOVLW.4; СДВИГОМВПРАВО НА 4 РАЗРЯДА
MOVWFCOUN;
BCFSTATUS,0; ВЫДЕЛИМЦЕЛУЮ ЧАСТЬ.
RRFLSBH,1;
RRFLSB,1;
DECFSZCOUN,1;
GOTO$-4;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2;
BTFSSFLAG1,3; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT2;
;======================================================
; 15. ВЫБОРСРАВНЕНИЯ ПО СОХРАНЕННОМУ И ИЗМЕРЕННОМУ ЗНАКАМ 2.
;======================================================
MAXZ2
MOVFWSOT2; ЕСЛИСОХРАНЕННЫЙ
SUBWFSOT2X,0; ИИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,
SKPZ; ТООПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSSFLAG1,3; ЕСЛИЗНАК ПОЛОЖИТЕЛЬНЫЙ,
GOTOCOPL2X; ТОСРАВНИМ НА ПРЕВЫШЕНИЕ.
BTFSCFLAG1,3; ЕСЛИЗНАК ОТРИЦАТЕЛЬНЫЙ,
GOTOCOMI2X; ТОСРАВНИМ НА УМЕНЬШЕНИЕ.
SKPNC; ЕСЛИИЗМЕРЕННЫЙ ЗНАК МЕНЬШЕ (+) СОХРАНЕННОГО,
GOTOCOXP2X; ТОСОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
MINZ2
MOVFWSOT2; ЕСЛИСОХРАНЕННЫЙ
SUBWFSOT2N,0; ИИЗМЕРЕННЫЙ ЗНАКИ РАВНЫ,
SKPZ; ТООПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSCFLAG1,3; ЕСЛИЗНАК ОТРИЦАТЕЛЬНЫЙ,
GOTOCOPL2N; ТОСРАВНИМ НА ПРЕВЫШЕНИЕ.
BTFSSFLAG1,3; ЕСЛИЗНАК ПОЛОЖИТЕЛЬНЫЙ,
GOTOCOMI2N; ТОСРАВНИМ НА УМЕНЬШЕНИЕ.
SKPC; ЕСЛИИЗМЕРЕННЫЙ ЗНАК БОЛЬШЕ (-) СОХРАНЕННОГО,
GOTOCOXP2N; ТОСОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
GOTOBDIN2; НАЗАПИСЬ ЗНАЧЕНИЙ В РЕГИСТРЫ ИНДИКАЦИИ.
;===================================
; 16.СРАВНЕНИЕ НА MAX 2.
;===================================
COPL2X
MOVFWLSB2X; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; БОЛЬШЕИЗМЕРЕННОГО,
BTFSSSTATUS,0; ТОСОХРАНЕНИЯ НЕТ.
GOTOMINZ2; ПРОВЕРИМНА МИНИМУМ.
BTFSSSTATUS,2; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST2X; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0; ЕСЛИИЗМЕРЕННОЕ БОЛЬШЕ
BTFSSSTATUS,0; ИЛИРАВНО СОХРАНЕННОМУ, ТО СОХРАНИМ.
GOTOMINZ2; ЕСЛИМЕНЬШЕ, ТО ПРОВЕРИМ НА МИНИМУМ.
COXP2X
BTFSSFLAG1,3;-0НЕТ.
GOTO$+4;
TSTFLSB;
BZMINZ2;
MOVFWSOT2; СОХРАНИМ ЗНАК.
MOVWFSOT2X;
MOVFWLSB; СОХРАНИМНОВОЕ ЗНАЧЕНИЕ
MOVWFLSB2X; ЦЕЛЫХ
MOVFWDST2; ИДЕСЯТЫХ.
MOVWFDST2X;
MOVFWMIN; СОХРАНИМ
MOVWFMIN2X; МИНУТЫ
MOVFWHOU;
MOVWFHOU2X; И ЧАСЫ.
BTFSCFLAG1,3; ПЕРЕПИШЕМЗНАК
BSFFLAG2,3; ВОФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG2,3;
GOTOMINZ2; НАПРОВЕРКУ ПО МИНИМУМУ.
COMI2X
MOVFWLSB2X; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; РАВНОИЗМЕРЕННОМУ,
BTFSCSTATUS,2;
GOTO$+3; ТОПРОВЕРИМ ДЕСЯТЫЕ.
BTFSSSTATUS,0; ЕСЛИБОЛЬШЕ,
GOTOCOXP2X; ТОСОХРАНИМ.
MOVFWDST2X; ПРОВЕРИМДЕСЯТЫЕ.
SUBWFDST2,0; ЕСЛИСОХРАНЕННОЕ МЕНЬШЕ
BTFSCSTATUS,0; ИЛИРАВНО ИЗМЕРЕННОМУ,
GOTOMINZ2; ТОПРОВЕРИМ НА МИНИМУМ.
GOTOCOXP2X; ИЛИСОХРАНИМ.
;===================================
; 17.СРАВНЕНИЕ НА MIN 2.
;===================================
COPL2N
MOVFWLSB2N; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; БОЛЬШЕИЗМЕРЕННОГО,
BTFSSSTATUS,0; ТОСОХРАНЕНИЯ НЕТ.
GOTOBDIN2; ПЕРЕПИШЕМ.
BTFSSSTATUS,2; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST2N; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST2,0;
BTFSSSTATUS,0; ЕСЛИБОЛЬШЕ ИЛИ РАВНО, ТО СОХРАНИМ.
GOTOBDIN2; ПЕРЕПИШЕМ.
COXP2N
BTFSSFLAG1,3;-0НЕТ.
GOTO$+4;
TSTFLSB;
BZBDIN2;
MOVFWSOT2; СОХРАНИМ ЗНАК.
MOVWFSOT2N;
MOVFWLSB; СОХРАНИМНОВОЕ ЗНАЧЕНИЕ
MOVWFLSB2N; ЦЕЛЫХ
MOVFWDST2; ИДЕСЯТЫХ.
MOVWFDST2N;
MOVFWMIN; СОХРАНИМ
MOVWFMIN2N; МИНУТЫ
MOVFWHOU;
MOVWFHOU2N; И ЧАСЫ.
BTFSCFLAG1,3; ПЕРЕПИШЕМЗНАК
BSFFLAG2,4; ВОФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG2,4;
GOTOBDIN2; ПЕРЕПИШЕМ.
COMI2N
MOVFWLSB2N; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; МЕНЬШЕИЗМЕРЕННОГО,
BTFSCSTATUS,2;
GOTO$+3;
BTFSSSTATUS,0; ТОСОХРАНЕНИЯ НЕТ.
GOTOCOXP2N; ИНАЧЕСОХРАНИМ.
MOVFWDST2N; ПРОВЕРИМДЕСЯТЫЕ.
SUBWFDST2,0; ЕСЛИМЕНЬШЕ
BTFSCSTATUS,0; ИЛИРАВНО,
GOTOBDIN2;
GOTOCOXP2N; ТОСОХРАНИМ.
;==================================
; 18.ЗАДЕРЖКА МКС, УМНОЖЕННАЯ НА 4.
;==================================
X4
ADDLW-1;
BTFSSSTATUS,2;
GOTO$-2;
RETURN;
;=========================================
;19. ИНИЦИАЛИЗАЦИЯ DS1.
;=========================================
INIDS1
CALLHYL1; ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСК НОМЕРА.
CALLPOSIL1; ПОШЛЕМ.
MOVLW0x4E; РАЗРЕШАЕМЗАПИСЬ УСТАНОВКИ 0,1 ГРАДУСА.
CALLPOSIL1; ПОШЛЕМ.
MOVLW0x7D; ВЕРХНИЙПРЕДЕЛ +125. МОЖНО ПОСТАВИТЬ ЛЮБОЕ ЗНАЧЕНИЕ.
CALLPOSIL1; ПОШЛЕМ.
MOVLW0x77; НИЖНИЙПРЕДЕЛ -55. ЛЮБОЙ.
CALLPOSIL1; ПОШЛЕМ.
MOVLW0x7F; КОНФИГУРАЦИЯ11 = 0,1 ГРАДУС.
CALLPOSIL1; ПОШЛЕМ.
CALLHYL1; ПОСЫЛИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСКПОСЫЛА НОМЕРА DS.
CALLPOSIL1; ПОШЛЕМ.
MOVLW0x44; РАЗРЕШАЕМПРЕОБРАЗОВАНИЕ.
CALLPOSIL1; ПОШЛЕМ.
MOVLW.3; ПАУЗА 0,75 СЕК.
MOVWFCOUN; МАКСИМАЛЬНО 750 МС.
SPLU1
 MOVLW .255
 MOVWF TEMP
PLUS1
 MOVLW.255
 ADDLW-1
 BTFSSSTATUS,2
 GOTO$-2
 DECFSZTEMP,1
 GOTOPLUS1
DECFSZCOUN,1
GOTOSPLU1
GOTOPRIEM1; НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYL1
CALLWUX1; ВЫХОД НУЛЯ.
MOVLW.125; НУЛЕВОЙ ИМПУЛЬС
ADDLW-1;=500 МКС.
BTFSSSTATUS,2;
GOTO$-2;
CALLWXO1; ВЫХОД ЕДИНИЦЫ.
MOVLW.125; ИМПУЛЬС =
ADDLW-1;500МКС.
BTFSSSTATUS,2;
GOTO$-2;
RETURN
;=======================================
; 20.ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=======================================
WUX1
BCFPORTA,DS1;
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BCFTRISA^80H,DS1; НАВЫХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
RETURN
WXO1
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BSFTRISA^80H,DS1; НАВХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
RETURN
;====================================
; 21. ПРИЕМ16 БИТ ОТ DS1.
;====================================
PRIEM1
CALLHYL1; ПОСЫЛИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW0xCC; ПРОПУСКНОМЕРА.
CALLPOSIL1; ПОСЫЛ.
MOVLW0xBE; ЧТЕНИЕТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALLPOSIL1; ПОСЫЛ.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
 CALLPRIE1; НА ПРИЕМ.
MOVFWLSBH; ПЕРЕПИШЕМПРИНЯТЫЙ БАЙТ
MOVWFLSB; ВМЛАДШИЙ РЕГИСТР.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
CALLPRIE1; ИПРИМЕМ СТАРШИЙ БАЙТ.
GOTOCXET1; НАПЕРЕСЧЕТ.
PRIE1
MOVLW.8
MOVWFCOUN; ЗАПИШЕМЧИСЛО БИТ.
 CLRFLSBH; ОБНУЛИМРЕГИСТР ПРИЕМА.
PRI1
CALLWUX1; ВЫДАЕМКОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALLWXO1; НАПРИЕМ.
MOVLW.2; ЗАДЕРЖКА
CALLX4;8 МКС.
 MOVFWPORTA; ПЕРЕПИШЕМ
MOVWFTEMP; ЗНАЧЕНИЕПОРТА.
BTFSSTEMP,DS1;
BCFSTATUS,0; УСТАНОВИМБИТ ПРИЕМА В НОЛЬ.
BTFSCTEMP,DS1;
BSFSTATUS,0; ИЛИ ЕДИНИЦУ.
 RRFLSBH,1; ЗАПИШЕМВ РЕГИСТР.
MOVLW.12; ОБЩАЯПАУЗА 60 МКС.
 CALLX4;
 DECFSZCOUN,1; УМЕНЬШИМСЧЕТЧИК.
 GOTOPRI1; ПОВТОРИМПРИЕМ.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
 RETURN; ВЕРНЕМСЯ.
;==========================================
; 22. ПОСЫЛКОМАНДЫ В DS1.
;==========================================
POSIL1
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
MOVWFTEMP; ПЕРЕПИШЕМВО ВРЕМЕННЫЙ.
MOVLW.8; ЗАПИШЕМЧИСЛО БИТ.
 MOVWFCOUN;
POSI1
RRFTEMP,1; ВЫТОЛКНЕММЛАДШИЙ БИТ.
 BTFSSSTATUS,0; ЕСЛИОН НУЛЕВОЙ,
GOTOW0_1; ПОШЛЕМИМПУЛЬС НУЛЯ.
GOTOW1_1; ИЛИЕДИНИЦЫ.
POS1
DECFSZCOUN,1; УМЕНЬШАЕМСЧЕТЧИК.
 GOTOPOSI1; НАСЛЕДУЮЩИЙ БИТ.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
 RETURN; ВОЗВРАТ.
W0_1
CALLWUX1; УСТАНОВИМВЫХОД В НОЛЬ.
MOVLW.15; УДЕРЖИВАЕМ60 МКС.
CALL X4;
 CALLWXO1; НАВХОД = 1 НА ВЫХОДЕ.
 GOTOPOS1; ПОВТОРИМ.
W1_1
CALLWUX1; КОРОТКИЙНУЛЕВОЙ ИМПУЛЬС.
 CALLWXO1; НАВХОД = 1 НА ВЫХОДЕ.
 MOVLW.15; УДЕРЖИВАЕМ60 МКС.
CALLX4;
 GOTOPOS1; ПОВТОРИМ.
;==================================
; 23.ВЫДЕЛЕНИЕ 1.
;==================================
CXET1
BTFSCFLAG1,4; НАЧАЛЬНАЯПАУЗА.
GOTO$+3;
BSFFLAG1,4;
RETURN;
BCFFLAG1,3; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
BTFSCLSBH,3; ЕСЛИИНАЧЕ,
BSFFLAG1,3; ТОУСТАНОВИМ МИНУС.
BTFSSFLAG1,3; ЕСЛИЗНАК ПЛЮС,
GOTO$+7; ТО НЕИНВЕРТИРУЕМ.
COMFLSB,1; ПРОИНВЕРТИРУЕММЛАДШИЙ
COMFLSBH,1; ИСТАРШИЙ РЕГИСТРЫ ПРИЕМА.
BCFSTATUS,0;
INCFLSB,1; ПРИБАВИМЕДИНИЦУ.
BTFSCSTATUS,0; ЕСЛИЕСТЬ ПЕРЕНОС,
INCFLSBH,1; ТОУВЕЛИЧИМ СТАРШИЙ РЕГИСТР.
MOVFWLSB; ВЫДЕЛИМДЕСЯТЫЕ.
ANDLWB’00001111′; ЗАМАСКИРУЕМ.
CALLDESATI; ПЕРЕКОДИРУЕМС ОКРУГЛЕНИЕМ.
MOVWFDST1; ЗАПИШЕМВ РЕГИСТР ДЕСЯТЫХ.
MOVLW.4; СДВИГОМВПРАВО НА 4 РАЗРЯДА
MOVWFCOUN;
BCFSTATUS,0; ВЫДЕЛИМЦЕЛУЮ ЧАСТЬ.
RRFLSBH,1;
RRFLSB,1;
DECFSZCOUN,1;
GOTO$-4;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT1;
BTFSSFLAG1,3; ЕСЛИИНАЧЕ,
GOTO$+3; ТОУСТАНОВИМ
MOVLW.253; МИНУС.
MOVWFSOT1;
;======================================================
; 24. ВЫБОРСРАВНЕНИЯ ПО СОХРАНЕННОМУ И ИЗМЕРЕННОМУ ЗНАКАМ 1.
;======================================================
MAXZ
MOVFWSOT1; ЕСЛИЗНАКИ РАВНЫ,
SUBWFSOT1X,0;
SKPZ; ТООПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSSFLAG1,3; ЕСЛИЗНАК ПЛЮС,
GOTOCOPL1X; ТОПРОВЕРЯЕМ НА ПРЕВЫШЕНИЕ.
BTFSCFLAG1,3; ЕСЛИЗНАК МИНУС,
GOTOCOMI1X; ТОПРОВЕРЯЕМ НА УМЕНЬШЕНИЕ.
SKPNC; ЕСЛИИЗМЕРЕННЫЙ ЗНАК МЕНЬШЕ (+) СОХРАНЕННОГО,
GOTOCOXPX; ТОСОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
MINZ
MOVFWSOT1; ЕСЛИЗНАКИ РАВНЫ,
SUBWFSOT1N,0;
SKPZ; ТООПРЕДЕЛИМ ЗНАК.
GOTO$+5;
BTFSCFLAG1,3; ЕСЛИЗНАК МИНУС,
GOTOCOPL1N; ТОСРАВНИВАЕМ НА ПРЕВЫШЕНИЕ.
BTFSSFLAG1,3; ЕСЛИЗНАК ПЛЮС,
GOTOCOMI1N; ТОСРАВНИВАЕМ НА УМЕНЬШЕНИЕ.
SKPC; ЕСЛИИЗМЕРЕННЫЙ ЗНАК БОЛЬШЕ (-) СОХРАНЕННОГО,
GOTOCOXPN; ТОСОХРАНИМ ИЗМЕРЕННОЕ ЗНАЧЕНИЕ.
GOTOBDIN1; НАПЕРЕКОДИРОВКУ.
;===================================
; 25.СРАВНЕНИЕ НА MAX 1.
;===================================
COPL1X
MOVFWLSB1X; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; БОЛЬШЕИЗМЕРЕННОГО,
BTFSSSTATUS,0; ТОСОХРАНЕНИЯ НЕТ.
GOTOMINZ;.
BTFSSSTATUS,2; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST1X; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST1,0; ЕСЛИБОЛЬШЕ
BTFSSSTATUS,0; ИЛИРАВНО, ТО СОХРАНИМ.
GOTOMINZ; ИНАЧЕПРОВЕРИМ НА МИНИМУМ.
COXPX
BTFSSFLAG1,3;-0НЕТ.
GOTO$+4;
TSTFLSB;
BZMINZ;
MOVFWSOT1; СОХРАНИММАКСИМАЛЬНОЕ ЗНАЧЕНИЕ.
MOVWFSOT1X; ЗНАК.
MOVFWLSB; СОХРАНИМНОВОЕ ЗНАЧЕНИЕ
MOVWFLSB1X; ЦЕЛЫХ
MOVFWDST1; ИДЕСЯТЫХ.
MOVWFDST1X;
MOVFWMIN;
MOVWFMIN1X; МИНУТЫ.
MOVFWHOU;
MOVWFHOU1X; ЧАСЫ.
BTFSCFLAG1,3; ПЕРЕПИШЕМФЛАГ ЗНАКА
BSFFLAG,0; ВФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG,0;
GOTOMINZ; НАПРОВЕРКУ ПО МИНИМУМУ.
COMI1X
MOVFWLSB1X; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; МЕНЬШЕИЗМЕРЕННОГО,
BTFSCSTATUS,2; ТОСОХРАНЕНИЯ НЕТ.
GOTO$+3;
BTFSSSTATUS,0; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTOCOXPX;
MOVFWDST1X; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST1,0; ЕСЛИМЕНЬШЕ
BTFSCSTATUS,0; ИЛИРАВНО,
GOTOMINZ; СРАВНИМПО МИНИМУМУ.
GOTOCOXPX; ИНАЧЕСОХРАНИМ.
;===================================
; 26.СРАВНЕНИЕ НА MIN 1.
;===================================
COPL1N
MOVFWLSB1N; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; МЕНЬШЕИЗМЕРЕННОГО,
BTFSSSTATUS,0; ТОСОХРАНЕНИЯ НЕТ.
GOTOBDIN1; ПЕРЕПИШЕМ.
BTFSSSTATUS,2; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTO$+5;
MOVFWDST1N; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST1,0; ЕСЛИИЗМЕРЕННОЕ МЕНЬШЕ
BTFSSSTATUS,0; ИЛИРАВНО СОХРАНЕННОМУ, ТО СОХРАНИМ.
GOTOBDIN1; НАПЕРЕКОДИРОВКУ.
COXPN
BTFSSFLAG1,3;-0НЕТ.
GOTO$+4;
TSTFLSB;
BZBDIN1;
MOVFWSOT1; СОХРАНЕНИЕМИНИМАЛЬНОГО.
MOVWFSOT1N; ЗНАК.
MOVFWLSB; СОХРАНИМНОВОЕ ЗНАЧЕНИЕ
MOVWFLSB1N; ЦЕЛЫХ
MOVFWDST1; ИДЕСЯТЫХ.
MOVWFDST1N;
MOVFWMIN;
MOVWFMIN1N; МИНУТЫ.
MOVFWHOU;
MOVWFHOU1N; ЧАСЫ.
BTFSCFLAG1,3; ПЕРЕПИШЕМФЛАГ ЗНАКА
BSFFLAG,1; ВФЛАГ ХРАНЕНИЯ.
BTFSSFLAG1,3;
BCFFLAG,1;
GOTOBDIN1; НАПЕРЕКОДИРОВКУ.
COMI1N
MOVFWLSB1N; ЕСЛИСОХРАНЕННОЕ ЗНАЧЕНИЕ
SUBWFLSB,0; МЕНЬШЕИЗМЕРЕННОГО,
BTFSCSTATUS,2;
GOTO$+3; ТОСОХРАНЕНИЯ НЕТ.
BTFSSSTATUS,0; ЕСЛИРАВЕНСТВО ЦЕЛЫХ,
GOTOCOXPN;
MOVFWDST1N; ТОПРОВЕРИМ ДЕСЯТЫЕ.
SUBWFDST1,0; ЕСЛИМЕНЬШЕ
BTFSCSTATUS,0; ИЛИРАВНО,
GOTOBDIN1;
GOTOCOXPN; ТОСОХРАНИМ.
;=======================================
; 27.ПЕРЕКОДИРОВКА 1 ИЗ 2-ГО В 2_10.
;=======================================
BDIN1
CALLPERZAP; ПЕРЕПИШЕМТЕКУЩИЕ ЗНАЧЕНИЯ.
MOVFWLSB; ПЕРЕКОДИРУЕМ
GOTOBZT1;
BDIN2
CALLPERZAP; ПЕРЕПИШЕМТЕКУЩИЕ ЗНАЧЕНИЯ.
MOVFWLSB; ПЕРЕКОДИРУЕМ
GOTOBZT2;
PERZAP
MOVFWHOU1X; ТЕКУЩИЕЗНАЧЕНИЯ
MOVWFHOUZ1X; ВРЕГИСТРЫ ИНДИКАЦИИ.
MOVFWMIN1X
MOVWFMINZ1X
MOVFWHOU1N
MOVWFHOUZ1N
MOVFWMIN1N
MOVWFMINZ1N
MOVFWHOU2X
MOVWFHOUZ2X
MOVFWMIN2X
MOVWFMINZ2X
MOVFWHOU2N
MOVWFHOUZ2N
MOVFWMIN2N
MOVWFMINZ2N
MOVFWLSB1X
MOVWFLSBZ1X
MOVFWDST1X
MOVWFDSTZ1X
MOVFWLSB1N
MOVWFLSBZ1N
MOVFWDST1N
MOVWFDSTZ1N
MOVFWLSB2X
MOVWFLSBZ2X
MOVFWDST2X
MOVWFDSTZ2X
MOVFWLSB2N
MOVWFLSBZ2N
MOVFWDST2N
MOVWFDSTZ2N
RETURN
BDINZ1
BTFSCFLAG1,1; ЕСЛИ ИНДИКАЦИЯ 2ДАТЧИКА,
GOTOBDINZ2; ТОИДЕМ НА 2 ДАТЧИК.
MOVFWLSBZ1X; ПОМАКСИМУМУ — 1 СТРОКА 1 ДАТЧИКА.
CALLBZT1;
MOVFWDSTZ1X;
MOVWFDST1;
MOVFWLSBZ1N; ПОМИНИМУМУ — 2 СТРОКА 1 ДАТЧИКА.
CALLBZT2;
MOVFWDSTZ1N;
MOVWFDST2;
MOVFWHOUZ1X; ЧАСЫ МАКСИМУМА 1.
CALLHZ67;
MOVFWMINZ1X; МИНУТЫ МАКСИМУМА 1.
CALLMZ910;
MOVFWSOT1X; ЗНАК.
MOVWFR12;
RETURN;
BDIN12
BTFSCFLAG1,1; ЕСЛИИНДИКАЦИЯ 2 СТРОКИ,
GOTOBDIN22; ТОИДЕМ НА 2 СТРОКУ.
MOVFWHOUZ1N; ПЕРЕЗАПИСЬ1 ДАТЧИКА 2 СТРОКИ.
CALLHZ67; ЧАСЫМИНИМУМА 1.
MOVFWMINZ1N; МИНУТЫМИНИМУМА 1.
CALLMZ910;
MOVFWSOT1N; ЗНАК.
MOVWFR12;
RETURN;
BDIN22
MOVFWHOUZ2N; ПЕРЕЗАПИСЬ 2 ДАТЧИКА 2СТРОКИ.
CALLHZ67; ЧАСЫ МИНИМУМА 2.
MOVFWMINZ2N; МИНУТЫ МИНИМУМА 2.
CALLMZ910;
MOVFWSOT2N; ЗНАК.
MOVWFR12;
RETURN;
BDINZ2
MOVFWLSBZ2X; ПОДГОТОВКА К ИНДИКАЦИИ 2ДАТЧИКА.
CALLBZT1; ПОМАКСИМУМУ — 1 СТРОКА.
MOVFWDSTZ2X;
MOVWFDST1;
MOVFWLSBZ2N;
CALLBZT2; ПОМИНИМУМУ — 2 СТРОКА
MOVFWDSTZ2N;
MOVWFDST2;
MOVFWHOUZ2X; ЧАСЫМАКСИМУМА 2.
CALLHZ67;
MOVFWMINZ2X; МИНУТЫМАКСИМУМА 2.
CALLMZ910;
MOVFWSOT2X; ЗНАК.
MOVWFR12;
RETURN; ПРОВЕРИМ КНОПКУ.
BZT1
MOVWFTEMP; ИЗ2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКОДО 99!
MOVWFDES1; ТЕМПЕРАТУРАВ ПЕРВОЙ СТРОКЕ.
MOVFWTEMP;
MOVWFEDI1;
RETURN;
BZT2
MOVWFTEMP; ИЗ2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКОДО 99!
MOVWFDES2; ТЕМПЕРАТУРАВО ВТОРОЙ СТРОКЕ.
MOVFWTEMP;
MOVWFEDI2;
RETURN;
HZ67
MOVWFTEMP; ИЗ2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКОДО 99!
MOVWFR6;6 И 7РАЗРЯДЫ ИНДИКАТОРА.
MOVFWTEMP; ЧАСЫ.
MOVWFR7;
RETURN;
MZ910
MOVWFTEMP; ИЗ 2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКОДО 99!
MOVWFR9;9 И10 РАЗРЯДЫ ИНДИКАТОРА.
MOVFWTEMP; МИНУТЫ.
MOVWFR10;
RETURN;
;======================
; 28.ИНИЦИАЛИЗАЦИЯ МК.
;======================
INIT
BCFSTATUS,6;
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
MOVLWB’00000011′; ПРЕДДЕЛИТЕЛЬПЕРЕД ТАЙМЕРОМ, К=16 …11,
MOVWFOPTION_REG^80H; ПОДТЯГИВАЮЩИЕРЕЗИСТОРЫ ВКЛЮЧЕНЫ.
MOVLWB’10100000′; РАЗРЕШЕНИЕПРЕРЫВАНИЯ ПРИ ПЕРЕПОЛНЕНИИ ТАЙМЕРА.
MOVWFINTCON;
MOVLWB’00100000′;RA5- НА ВХОД.
MOVWFTRISA^80H
MOVLWB’00000011′;RB0,RB1 — НА ВХОД.
MOVWFTRISB^80H
CLRFVRCON^80H; ИОНВЫКЛЮЧЕН.
CLRFPIE1^80H;
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
CLRFPORTA; ВСЕОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRFPORTB
CLRFT1CON;
CLRFT2CON;
MOVLW7
MOVWFCMCON; КОМПАРАТОРЫВЫКЛЮЧЕНЫ.
CLRFTMR0
CLRFFLAG
CLRFFLAG1
CLRFFLAG2
BSFFLAG2,0; ИНДИКАЦИЯ ТЕКУЩАЯ,
CLRFCEK
CLRFMIN
CLRFHOU
CLRFHOUL
CLRFHOUH
CLRFMINL
CLRFMINH
CLRFREID
CLRFKYPC
CLRFCOUN
CLRFCOUZ
CLRFCOUE
CLRFCOYC
CLRFMCK; МИЛЛИСЕКУНД.
CLRFEDI2; ЕДИНИЦЫ2.
CLRFDES2; ДЕСЯТКИ2.
CLRFDST2; ДЕСЯТЫЕ2.
CLRFEDI1; ЕДИНИЦЫ1.
CLRFDES1; ДЕСЯТКИ1.
CLRFDST1; ДЕСЯТЫЕ1.
CLRFMECDI; ДЕСЯТКИМЕСЯЦА ИНДИКАЦИИ.
CLRFDHUDI; ДЕСЯТКИДНЕЙ ИНДИКАЦИИ.
CLRFMECD; ДЕСЯТКИМЕСЯЦА.
CLRFDHUD; ДЕСЯТКИДНЕЙ.
MOVLW.253;-
MOVWFSOT1; ЗНАК1.
MOVWFSOT2; ЗНАК2.
MOVWFSOT2X; ЗНАК2 MAX.
MOVWFSOT1X; ЗНАК1 MAX.
MOVLW.251;+
MOVWFSOT1N; ЗНАК1 MIN.
MOVWFSOT2N; ЗНАК 2 MIN.
MOVLW.1
MOVWFDHU; ДНИДВОИЧНЫЕ.
MOVWFDHUE; ЕДИНИЦЫДНЕЙ.
MOVWFMEC; МЕСЯЦДВОИЧНЫЙ.
MOVWFMECE; ЕДИНИЦЫМЕСЯЦА.
MOVWFMECEI; ЕДИНИЦЫМЕСЯЦА ИНДИКАЦИИ.
MOVWFMECZ; ДВОИЧНЫЙМЕСЯЦ ЗАПИСИ/СЧИТЫВАНИЯ.
MOVWFDHUEI; ЕДИНИЦЫДНЕЙ ИНДИКАЦИИ.
MOVWFDHUZ; ДВОИЧНЫЕДНИ ЗАПИСИ/СЧИТЫВАНИЯ.
CALLPOLNO; УСТАНОВКАМАКСИМАЛЬНЫХ ЗНАЧЕНИЙ.
GOTOJEKINI; НАИНИЦИАЛИЗАЦИЮ ИНДИКАТОРА.
;=======================================
; 29.УСТАНОВКА ЧАСОВ, ДАТЫ.
;=======================================
YC0
 INCFHOUH,1; УВЕЛИЧИМДЕСЯТКИ ЧАСОВ.
 MOVLW.3; НЕБОЛЕЕ 2.
 SUBWFHOUH,0;
 SKPNC;
 CLRFHOUH; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWHOUH; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFHOUL,0; ПРИБАВИМЕДИНИЦЫ
MOVWFHOU; ИПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
 RETURN; ВЕРНЕМСЯ.
YC1
INCFHOUL,1; УВЕЛИЧИМЕДИНИЦЫ ЧАСОВ.
MOVLW.10; НЕБОЛЕЕ 9.
SUBWFHOUL,0;
SKPNC;
CLRFHOUL; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWHOUH; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFHOUL,0; ПРИБАВИМЕДИНИЦЫ
MOVWFHOU; ДВОИЧНОЕЗНАЧЕНИЕ НЕ ДОЛЖНО
 ADDLW-18H; ПРЕВЫШАТЬ- 24.
SKPC; ЕСЛИБОЛЬШЕ ИЛИ РАВНО 24,
RETURN
CLRFHOU; ТООБНУЛИМ ЧАСЫ ДВОИЧНЫЕ
CLRFHOUL; ИРАЗРЯДЫ СТАРШИЙ
CLRFHOUH; ИМЛАДШИЙ.
RETURN
YC2
 INCFMINH,1; УВЕЛИЧИМДЕСЯТКИ МИНУТ.
 MOVLW.6; НЕБОЛЕЕ 5.
 SUBWFMINH,0;
 SKPNC; ЕСЛИБОЛЬШЕ ИЛИ РАВНО 6,
 CLRFMINH; ТООБНУЛИМ.
MOVFWMINH; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFMINL,0; ПРИБАВИМЕДИНИЦЫ И
MOVWFMIN; ЗАПИШЕМВ ДВОИЧНОМ КОДЕ.
 RETURN
YC3
INCFMINL,1; УВЕЛИЧИМЕДИНИЦЫ МИНУТ.
MOVLW.10; НЕБОЛЕЕ 9.
SUBWFMINL,0;
SKPNC; ЕСЛИБОЛЬШЕ ИЛИ РАВНО 10,
CLRFMINL; ТООБНУЛИМ.
MOVFWMINH; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFMINL,0; ПРИБАВИМЕДИНИЦЫ И
MOVWFMIN; ЗАПИШЕМВ ДВОИЧНОМ КОДЕ.
RETURN
YC4
 INCFDHUD,1; УВЕЛИЧИМДЕСЯТКИ ТЕКУЩИХ ДНЕЙ.
 MOVLW.4; НЕБОЛЕЕ 3.
 SUBWFDHUD,0;
 SKPNC;
 CLRFDHUD; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWDHUD; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFDHUE,0; ПРИБАВИМЕДИНИЦЫ
MOVWFDHU; ИПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
 MOVFWMEC; ЕСЛИВ ТЕКУЩЕМ МЕСЯЦЕ
CALLDAYMON; МЕНЬШЕ ДНЕЙ,
 SUBWFDHU,0;
 SKPC;
GOTO$+4;
MOVLW.1;
MOVWFDHUE; ТОУСТАНОВИМ ЕДИНИЦЫ
GOTO$-0x0B; ИЕЩЕ РАЗ ПРОВЕРИМ СУММУ.
TSTFDHU; ЕСЛИСУММА ДНЕЙ НУЛЕВАЯ,
BZ$-5; ТОСНОВА УСТАНОВИМ.
MOVFWDHUD; ПЕРЕПИШЕМВ РЕГИСТРЫ
MOVWFDHUDI; ИНДИКАЦИИ.
MOVFWDHUE;
MOVWFDHUEI;
 RETURN; ВЕРНЕМСЯ.
YC5
 INCFDHUE,1; УВЕЛИЧИМЕДИНИЦЫ ДНЕЙ.
 MOVLW.10; НЕБОЛЕЕ 9.
 SUBWFDHUE,0;
 SKPNC;
 CLRFDHUE; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWDHUD; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFDHUE,0; ПРИБАВИМЕДИНИЦЫ
MOVWFDHU; ИПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
 MOVFWMEC; ЕСЛИВ ТЕКУЩЕМ МЕСЯЦЕ
CALLDAYMON; МЕНЬШЕ ДНЕЙ,
 SUBWFDHU,0;
 SKPC;
GOTO$+5;
CLRFDHUD; ТООБНУЛИМ ДЕСЯТКИ ДНЕЙ,
MOVLW.1; УСТАНОВИМЕДИНИЦЫ
MOVWFDHUE; ДНЕЙ
GOTO$-0x0C; ИЕЩЕ РАЗ ПРОВЕРИМ СУММУ.
TSTFDHU; ЕСЛИСУММА ДНЕЙ НУЛЕВАЯ,
BZ$-5; АНУЛЕВОГО ДНЯ НЕТ, ТО СНОВА УСТАНОВИМ.
MOVFWDHUD; ПЕРЕПИШЕМВ РЕГИСТРЫ
MOVWFDHUDI; ИНДИКАЦИИ.
MOVFWDHUE;
MOVWFDHUEI;
 RETURN; ВЕРНЕМСЯ.
YC6
 INCFMECD,1; УВЕЛИЧИМДЕСЯТКИ МЕСЯЦА.
 MOVLW.2; НЕБОЛЕЕ 1.
 SUBWFMECD,0;
 SKPNC;
 CLRFMECD; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWMECD; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFMECE,0; ПРИБАВИМЕДИНИЦЫ
MOVWFMEC; ИПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
MOVLW.13; НЕБОЛЕЕ 12.
 SUBWFMEC,0;
 SKPC;
GOTO$+5;
CLRFMECD; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVLW.1; УСТАНОВИМПЕРВЫЙ МЕСЯЦ.
MOVWFMECE;
GOTO$-0x0C;
TSTFMEC; ЕСЛИМЕСЯЦ НУЛЕВОЙ,
BZ$-5; ТОУСТАНОВИМ.
MOVFWMECD; ПЕРЕПИШЕМВ РЕГИСТРЫ
MOVWFMECDI; ИНДИКАЦИИ.
MOVFWMECE;
MOVWFMECEI;
 RETURN; ВЕРНЕМСЯ.
YC7
 INCFMECE,1; УВЕЛИЧИМЕДИНИЦЫ МЕСЯЦА.
 MOVLW.10; НЕБОЛЕЕ 9.
 SUBWFMECE,0;
 SKPNC;
 CLRFMECE; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVFWMECD; ПЕРЕКОДИРУЕМВ ДВОИЧНЫЙ
CALLDEBIN; КОДДЕСЯТКИ.
ADDWFMECE,0; ПРИБАВИМЕДИНИЦЫ
MOVWFMEC; ИПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
MOVLW.13; НЕБОЛЕЕ 12.
 SUBWFMEC,0;
 SKPC;
GOTO$+5;
CLRFMECD; ЕСЛИБОЛЬШЕ, ТО ОБНУЛИМ.
MOVLW.1; УСТАНОВИМПЕРВЫЙ МЕСЯЦ.
MOVWFMECE;
GOTO$-0x0C;
TSTFMEC; ЕСЛИМЕСЯЦ НУЛЕВОЙ,
BZ$-5; ТОУСТАНОВИМ.
MOVFWMECD; ПЕРЕПИШЕМВ РЕГИСТРЫ
MOVWFMECDI; ИНДИКАЦИИ.
MOVFWMECE;
MOVWFMECEI;
 RETURN; ВЕРНЕМСЯ.
YC8M
 DECFDHUEI,1; УМЕНЬШИМЕДИНИЦЫ ДНЕЙ ПРОСМОТРА.
 MOVLW.255; ЕСЛИПЕРЕХОД ЧЕРЕЗ 0,
 SUBWFDHUEI,0;
BNC$+8;
MOVLW.9; ТОУСТАНОВИМ 9.
MOVWFDHUEI;
DECFDHUDI,1; УМЕНЬШИМДЕСЯТКИ ДНЕЙ
 MOVLW.255; ЕСЛИНЕТ ПЕРЕХОДА ЧЕРЕЗ 0,
 SUBWFDHUDI,0;
SKPC;
GOTOYC8COY; ТОУСТАНОВИМ СЧЕТЧИК ДНЕЙ.
MOVFWDHUEI; ЕСЛИСУММА ДНЕЙ
ADDWFDHUDI,0; НЕРАВНА НУЛЮ,
SKPZ
GOTOYC8COY; ТОУСТАНОВИМ СЧЕТЧИК ДНЕЙ.
DECFMECZ,1; ИНАЧЕУМЕНЬШИМ МЕСЯЦ.
SKPZ; ЕСЛИМЕСЯЦ НУЛЕВОЙ,
GOTO$+3;
MOVLW.12; ТОУСТАНОВИМ ДЕКАБРЬ.
MOVWFMECZ;
MOVFWMECZ; ПРОВЕРИМЧИСЛО ДНЕЙ В МЕСЯЦЕ.
CALLDAYMON;
MOVWFDHUDI; ПЕРЕКОДИРУЕМ ДНИ.
MOVWFTEMP; ИЗ2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКО ДО 99!
MOVWFDHUDI;
MOVFWTEMP;
MOVWFDHUEI;
MOVFWMECZ; ПЕРЕКОДИРУЕМ МЕСЯЦ.
MOVWFTEMP; ИЗ2-ГО В 2_10-Е.
CALLBIDE; ТОЛЬКО ДО 99!
MOVWFMECDI;
MOVFWTEMP;
MOVWFMECEI; ДНЕЙВ ТАБЛИЦЕ МЕСЯЦА НА 1 БОЛЬШЕ,
GOTOYC8M; ПОЭТОМУПОВТОРИМ.
YC8COY
INCFCOYC,1; УМЕНЬШИМСЧЕТЧИК ДНЕЙ.
MOVLW.8; НЕБОЛЕЕ 7.
SUBWFCOYC,0;
SKPC;
GOTOYC8COU; НАУСТАНОВКУ СЧЕТЧИКА СЧИТЫВАНИЯ.
CLRFCOYC; ОБНУЛИМСЧЕТЧИК.
CALLREGIN; ЗАГРУЗИМТЕКУЩИЙ ДЕНЬ.
BCFFLAG2,6; СБРОСИМФЛАГ СЧЕТЧИКА ДНЕЙ.
GOTOYC8M; УСТАНОВИМВЧЕРАШНИЙ ДЕНЬ.
YC8COU
BSFFLAG2,5; УСТАНОВИМФЛАГ ВЫПОЛНЕННОЙ УСТАНОВКИ МИНУС.
BTFSCFLAG2,6; ЕСЛИФЛАГ НУЛЕВОЙ,
GOTO$+0x09;
CLRFCOYC;
MOVLW.16; ТОУСТАНОВИМ СЧЕТЧИК СЧИТЫВАНИЯ.
SUBWFCOUZ,0; АДРЕСЧТЕНИЯ РАВЕН АДРЕСУ ЗАПИСИ
MOVWFCOUE; МИНУС16.
BNC$+7; ЕСЛИПЕРЕХОД ЧЕРЕЗ 0, ТО УСТАНОВИМ .112.
BSFFLAG2,6; УСТАНОВКАВЫПОЛНЕНА.
RETURN; ВЕРНЕМСЯ.
MOVLW.16; СЛЕДУЮЩИЙАДРЕС ЧТЕНИЯ
SUBWFCOUE,1; РАВЕНТЕКУЩЕМУ МИНУС 16.
SKPNC; ЕСЛИПЕРЕХОД ЧЕРЕЗ 0,
RETURN
MOVLW.112; ТОУСТАНОВИМ .112.
MOVWFCOUE;
BSFFLAG2,6; УСТАНОВКАВЫПОЛНЕНА.
RETURN
YC00
CLRFMIN; ОБНУЛЕНИЕРЕГИСТРОВ
CLRFMINL; МИНУТИ СЕКУНД
CLRFMINH; ПРИУСТАНОВКЕ ПО СИГНАЛАМ
CLRFCEK; ТОЧНОГОВРЕМЕНИ.
RETURN
;======================================================
; 30.ВОССТАНОВЛЕНИЕ ТЕКУЩИХ РЕГИСТРОВ ИНДИКАЦИИ ПОСЛЕ ПРОСМОТРА.
;======================================================
REGIN
MOVFWMECD;
MOVWFMECDI;
MOVFWMECE;
MOVWFMECEI;
MOVFWDHUD;
MOVWFDHUDI;
MOVFWDHUE;
MOVWFDHUEI;
MOVFWMEC;
MOVWFMECZ;
RETURN
;=============================================
; 31.ПРЕДЕЛЬНЫЕ УСТАНОВКИ MAX, MIN В ПОЛНОЧЬ.
;=============================================
POLNO
MOVLW.253;-
MOVWFSOT1X; ЗНАК 1 MAX.
MOVWFSOT2X; ЗНАК 2 MAX.
MOVLW.55;-55.
MOVWFLSB1X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ 1 ДАТЧИКА.
MOVWFLSB2X;-“-2 ДАТЧИКА.
CLRFDST1X; СОХРАНЕННОЕМАКСИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
CLRFDST2X;-“-2 ДАТЧИКА.
MOVLW.251;+
MOVWFSOT1N; ЗНАК1 MIN.
MOVWFSOT2N; ЗНАК 2 MIN.
MOVLW.99;+99.
MOVWFLSB1N; СОХРАНЕННОЕМИНИМАЛЬНОЕ 1 ДАТЧИКА.40
MOVWFLSB2N;-“-2 ДАТЧИКА.
MOVLW.9;0,9
MOVWFDST1N; СОХРАНЕННОЕМИНИМАЛЬНОЕ ДЕСЯТЫХ 1 ДАТЧИКА.
MOVWFDST2N;-“-2 ДАТЧИКА.
RETURN
;=========================================
; 32.ИНИЦИАЛИЗАЦИЯ ЖКИ.
;=========================================
JEKINI
MOVLW03;
CALLJEKOM;
CALLSTROB;
MOVLW03;
CALLJEKOM;
CALLSTROB;
MOVLW03;
CALLJEKOM;
CALLSTROB;
MOVLW03;
CALLJEKOM;
CALLSTROB;
MOVLW10; ВЫКЛЮЧЕНИЕ ДИСПЛЕЯ.
CALLJEKOM;
CALLSTROB;
MOVLW06; СМЕЩЕНИЕ КУРСОРА.
CALLJEKOM;
CALLSTROB;
MOVLW01; СТИРАНИЕ ПАМЯТИ ДИСПЛЕЯ.
CALLJEKOM;
CALLSTROB;
MOVLW28; ФОРМАТ ОБМЕНА: 4 РАЗР., 5х7, 2 СТРОКИ.
CALLJEKOM;
CALLSTROB;
MOVLW0C; ВКЛЮЧЕНИЕ ДИСПЛЕЯ, ЗАПРЕТ КУРСОРА.
CALLJEKOM;
CALLSTROB;
GOTOMYLTIK; НА РАСПРЕДЕЛИТЕЛЬ.
;=========================================
; 33.ФОРМИРОВАНИЕ СТРОБИРУЮЩЕГО ИМПУЛЬСА.
;=========================================
STROB
 BSF PORTB,E; ВКЛЮЧАЕМСТРОБ-ИМПУЛЬС.
NOP
 BCF PORTB,E; ВЫКЛЮЧАЕМСТРОБ.
 RETURN ; ВЕРНЕМСЯ.
;===============================================
; 34.ПЕРЕДАЧА КОМАНДЫ В ЖКИ.
;===============================================
JEKOM
 MOVWF TEMP; ПЕРЕПИШЕМЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
 ANDLW B’11110000′; ЗАМАСКИРУЕММЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
 MOVWF PORTB; ОСТАЛЬНЫЕРАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ «В».
 CALL STROB; ПРОСТРОБИРУЕМ.
 CALLPAUSA; ПАУЗА.
 MOVFW TEMP
 SWAPF TEMP,W; ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.
 ANDLW B’11110000′; ЗАМАСКИРУЕМСТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
 MOVWF PORTB; ПЕРЕПИШЕМВ ПОРТ «В».
 CALL STROB; ПРОСТРОБИРУЕМ.
PAUSA
 MOVLW.255;1 МС. ПАУЗА ДЛЯ ЗАПИСИ КОМАНДЫ.
 ADDLW -1
 BTFSS STATUS,2
 GOTO$-2
 RETURN
;=====================================
;35. ЗАПИСЬ ДАННЫХ В ЖКИ.
;=====================================
JEDAT
 MOVWF TEMP; ПЕРЕПИШЕМЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
 ANDLW B’11110000′; ЗАМАСКИРУЕММЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
 ADDLW 30; ПЕРЕВОДВ КОД ASCII, ТОЛЬКО ДЛЯ ЦИФР!
 MOVWF PORTB; ОСТАЛЬНЫЕРАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ «В».
 BSF PORTB,RS; УСТАНОВИМR/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.
 CALL STROB; ПРОСТРОБИРУЕМ.
 CALL PAUS; ПАУЗАДЛЯ ОСВОБОЖДЕНИЯ ЖКИ ОТ ЦИКЛА ЗАПИСИ.
 MOVFW TEMP;
 SWAPF TEMP,0; ПОМЕНЯЕММЕСТАМИ ПОЛУБАЙТЫ.
 ANDLW B’11110000′; ЗАМАСКИРУЕМСТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
 MOVWF PORTB; ОСТАЛЬНЫЕРАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ «В».
 BSF PORTB,RS; УСТАНОВИМR/S НА РАЗРЕШЕНИЕ ЗАПИСИ ДАННЫХ.
 CALL STROB; ПРОСТРОБИРУЕМ.
PAUS
 MOVLW.10;40 МКС. ПАУЗА ДЛЯ ЗАПИСИ ДАННЫХ.
 ADDLW -1
 BTFSS STATUS,2
 GOTO $-2
 RETURN
;========================================
; 36.ПЕРЕЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
;========================================
CTP1
BTFSCFLAG2,0;
GOTOTEK1; ТЕКУЩАЯИНДИКАЦИЯ.
BTFSCFLAG2,1;
GOTOINDYC1; УСТАНОВКАЧАСОВ И ДНЕЙ.
GOTOCMOTP1; ПРОСМОТР.
CTP2
BTFSCFLAG2,0;
GOTOTEK2; ТЕКУЩАЯИНДИКАЦИЯ.
BTFSCFLAG2,1;
GOTOINDYC2; УСТАНОВКАЧАСОВ И ДНЕЙ.
GOTOCMOTP2; ПРОСМОТР.
TEK1
MOVFWDHUDI; ТЕКУЩАЯИНДИКАЦИЯ 1 СТРОКИ, ДЕСЯТКИ ДНЕЙ.
MOVWFR1;
MOVFWDHUEI; ЕДИНИЦЫДНЕЙ.
MOVWFR2;
MOVLW.240; ПУСТО.
MOVWFR3;
MOVWFR9;
MOVFWHOUH; ДЕСЯТКИЧАСОВ.
MOVWFR4;
MOVFWHOUL; ЕДИНИЦЫЧАСОВ.
MOVWFR5;
MOVLW.240; ПУСТО.
BTFSCCEK,0; ДВОЕТОЧИЕВКЛЮЧАЕТСЯ ЧЕРЕЗ 1 СЕКУНДУ.
MOVLW.10; ДВОЕТОЧИЕ.
MOVWFR6;
MOVFWMINH; ДЕСЯТКИМИНУТ.
MOVWFR7;
MOVFWMINL; ЕДИНИЦЫМИНУТ.
MOVWFR8;
MOVFWSOT1; ЗНАК.
MOVWFR10;
MOVFWDES1; ДЕСЯТКИТЕМПЕРАТУРЫ 1.
MOVWFR11;
MOVFWEDI1; ЕДИНИЦЫТЕМПЕРАТУРЫ 1.
MOVWFR12;
MOVLW.252; ЗАПЯТАЯ1.
MOVWFR13;
MOVFWDST1; ДЕСЯТЫЕТЕМПЕРАТУРЫ 1.
MOVWFR14;
MOVLW.14;>.
MOVWFR15;
MOVLW.1;1.
MOVWFR16;
RETURN
TEK2
MOVFWMECDI; ТЕКУЩАЯИНДИКАЦИЯ 2 СТРОКИ, ДЕСЯТКИ МЕСЯЦА.
MOVWFR1;
MOVFWMECEI; ЕДИНИЦЫМЕСЯЦА.
MOVWFR2;
MOVLW.240; ПУСТО.
MOVWFR3;
MOVWFR4;
MOVWFR5;
MOVWFR6;
MOVWFR7;
MOVWFR8;
MOVWFR9;
MOVFWSOT2; ЗНАК 2.
MOVWFR10;
MOVFWDES2; ДЕСЯТКИТЕМПЕРАТУРЫ 2.
MOVWFR11;
MOVFWEDI2; ЕДИНИЦЫТЕМПЕРАТУРЫ 2.
MOVWFR12;
MOVLW.252; ЗАПЯТАЯ2.
MOVWFR13;
MOVFWDST2; ДЕСЯТЫЕТЕМПЕРАТУРЫ 2.
MOVWFR14;
MOVLW.14;>.
MOVWFR15;
MOVLW.2;2.
MOVWFR16;
RETURN
INDYC1
BTFSSPORTA,HOL; ЕСЛИ НАЖАТА КНОПКА«СБРОС»,
CALLYC00; ТООБНУЛИМ СЕКУНДЫ И МИНУТЫ.
MOVLW.123; УСТАНОВКАЧАСОВ И ДАТЫ 1 СТРОКА.
MOVWFR1; Ч.
MOVLW.17; А.
MOVWFR2;
MOVLW.19; С.
MOVWFR3;
MOVLW.126; Ы.
MOVWFR4;
MOVLW.240; ПУСТО.
MOVWFR5;
MOVWFR11;
MOVWFR12;
MOVWFR13;
MOVWFR14;
MOVWFR15;
MOVWFR16;
MOVFWHOUH; ТЕКУЩИЕЗНАЧЕНИЯ: ДЕСЯТКИ ЧАСОВ,
MOVWFR6;
MOVFWHOUL; ЕДИНИЦЫЧАСОВ.
MOVWFR7;
MOVLW.10; ДВОЕТОЧИЕ.
MOVWFR8;
MOVFWMINH; ДЕСЯТКИМИНУТ.
MOVWFR9;
MOVFWMINL; ЕДИНИЦЫМИНУТ.
MOVWFR10;
RETURN
INDYC2
MOVLW.176; Д.
MOVWFR1;
MOVLW.17; А.
MOVWFR2;
MOVLW.36; Т.
MOVWFR3;
MOVLW.17; А.
MOVWFR4;
MOVLW.240; ПУСТО.
MOVWFR5;
MOVWFR11;
MOVWFR12;
MOVWFR13;
MOVWFR14;
MOVWFR15;
MOVWFR16;
MOVFWDHUDI; ДЕСЯТКИ ДНЕЙ.
MOVWFR6;
MOVFWDHUEI; ЕДИНИЦЫ ДНЕЙ.
MOVWFR7;
MOVLW.253; ПРОЧЕРК.
MOVWFR8;
MOVFWMECDI; ДЕСЯТКИМЕСЯЦА.
MOVWFR9;
MOVFWMECEI; ЕДИНИЦЫМЕСЯЦА.
MOVWFR10;
RETURN
CMOTP1
MOVFWDHUDI; ЕСЛИПРОСМОТР
ADDWFDHUEI,0; СЕГОДНЯШНЕЙДАТЫ,
SUBWFDHU,0; ТОРЕГИСТРЫ ИНДИКАЦИИ НЕ МЕНЯЕМ.
 SKPC;
GOTO$+5;
MOVFWMECDI;
ADDWFMECEI,0;
SUBWFMEC,0;
SKPNC;
CALLBDINZ1; ИНАЧЕУСТАНОВИМ СЧИТАННЫЕ ЗНАЧЕНИЯ 1 СТРОКИ.
MOVFWDHUDI; ДЕСЯТКИДНЕЙ.
MOVWFR1;
MOVFWDHUEI; ЕДИНИЦЫДНЕЙ.
MOVWFR2;
MOVLW.14;>.
MOVWFR3; ПОУМОЛЧАНИЮ
MOVLW.1;1.
BTFSCFLAG1,1; ЕСЛИФЛАГ УСТАНОВЛЕН,
MOVLW.2; ТО — 2.
MOVWFR4;
MOVLW.240; ПУСТО.
MOVWFR5;
MOVWFR11;
MOVLW.253; ПРОЧЕРК.
MOVWFR8;
MOVFWDES1; ДЕСЯТКИТЕМПЕРАТУРЫ.
MOVWFR13;
MOVFWEDI1; ЕДИНИЦЫТЕМПЕРАТУРЫ.
MOVWFR14;
MOVLW.252; ЗАПЯТАЯ1.
MOVWFR15;
MOVFWDST1; ДЕСЯТЫЕТЕМПЕРАТУРЫ.
MOVWFR16;
RETURN
CMOTP2
MOVFWDHUDI; ЕСЛИПРОСМОТР
ADDWFDHUEI,0; СЕГОДНЯШНЕЙДАТЫ,
SUBWFDHU,0; ТОРЕГИСТРЫ ИНДИКАЦИИ НЕ МЕНЯЕМ.
 SKPC;
GOTO$+5;
MOVFWMECDI;
ADDWFMECEI,0;
SUBWFMEC,0;
SKPNC;
CALLBDIN12; ИНАЧЕУСТАНОВИМ СЧИТАННЫЕ ЗНАЧЕНИЯ 2 СТРОКИ.
MOVFWMECDI; ДЕСЯТКИМЕСЯЦА.
MOVWFR1;
MOVFWMECEI; ЕДИНИЦЫМЕСЯЦА.
MOVWFR2;
MOVLW.240; ПУСТО.
MOVWFR3;
MOVWFR4;
MOVWFR5;
MOVWFR11;
MOVLW.253; ПРОЧЕРК.
MOVWFR8;
MOVFWDES2; ДЕСЯТКИТЕМПЕРАТУРЫ 2.
MOVWFR13;
MOVFWEDI2; ЕДИНИЦЫТЕМПЕРАТУРЫ 2.
MOVWFR14;
MOVLW.252; ЗАПЯТАЯ2.
MOVWFR15;
MOVFWDST2; ДЕСЯТЫЕТЕМПЕРАТУРЫ 2.
MOVWFR16;
RETURN
;======================================================
; 37. ВЫВОДЗНАЧЕНИЙ РЕГИСТРОВ НА ИНДИКАЦИЮ.
;======================================================
JEKIND
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BCFTRISB^80H,YCMI; НАВЫХОД.
BCFTRISB^80H,YCPL; НАВЫХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
BTFSSFLAG1,0; ЕСЛИТЕКУЩАЯ ИНДИКАЦИЯ,
GOTO$+3; ТОПРОПУСКАЕМ ИНДИКАЦИЮ КУРСОРА.
BTFSSFLAG,6; ЕСЛИИНДИКАЦИЯ КУРСОРА ВЫПОЛНЕНА, ТО ПРОПУСКАЕМ ЕЕ.
GOTOJEKYC; ПРОИНДИЦИРУЕМ КУРСОР.
 MOVLW 02; ВОЗВРАТКУРСОРА В ИСХОДНОЕ СОСТОЯНИЕ.
 CALL JEKOM; ЗАПИШЕМКОМАНДУ.
 MOVLW B’10000000′; КУРСОРНА 0 ПОЗИЦИЮ ПЕРВОЙ СТРОКИ.
 CALL JEKOM; ЗАПИШЕМКОМАНДУ.
CALLCTP1; ПЕРЕПИШЕМВ РЕГИСТРЫ ИНДИКАЦИИ 1 СТРОКУ.
CALLJEKCTP; ЗАПИШЕМВ ИНДИКАТОР 1 СТРОКУ.
 MOVLW B’11000000′; ВТОРАЯСТРОКА. 0x0C0
 CALL JEKOM; ЗАПИШЕМКОМАНДУ.
CALLCTP2; ПЕРЕПИШЕМВ РЕГИСТРЫ ИНДИКАЦИИ 2 СТРОКУ.
CALLJEKCTP; ЗАПИШЕМВ ИНДИКАТОР 2 СТРОКУ.
BCFFLAG,6;
RETURN
JEKCTP
MOVLW.16;
MOVWFCOUN; УСТАНОВИМСЧЕТЧИК ИНДИКАЦИИ ЗНАКОМЕСТ.
 MOVLW R1; АДРЕСПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.
MOVWFFSR; ПОКОСВЕННОЙ АДРЕСАЦИИ
MOVFWINDF; УСТАНОВИМЗНАЧЕНИЕ РЕГИСТРА.
 CALL JEDAT; ЗАПИШЕМВ ИНДИКАТОР.
DECFCOUN,1; УМЕНЬШИМСЧЕТЧИК.
BTFSCSTATUS,2; ЕСЛИНЕТ НУЛЯ,
RETURN;
INCFFSR,1; ТОВЫБЕРЕМ СЛЕДУЮЩИЙ РЕГИСТР.
GOTO$-6; ПОВТОРИМВЫВОД НА ИНДИКАЦИЮ.
;=======================================
; 38.ПРОВЕРКА КНОПОК.
;=======================================
KHOP
BSFSTATUS,5; ПЕРЕХОДИМВ БАНК 1.
BSFTRISB^80H,YCMI; НАВХОД.
BSFTRISB^80H,YCPL; НАВХОД.
BCFSTATUS,5; ПЕРЕХОДИМВ БАНК 0.
BTFSSFLAG1,0; ЕСЛИНЕТ УСТАНОВКИ,
GOTOKHOP1; КНОПКИНЕ ПРОВЕРЯЮТСЯ.
BTFSCFLAG2,2; ПРИПРОСМОТРЕ
GOTO$+0x0D; НЕПРОВЕРЯЕТСЯ РАЗРЯД И ПЛЮС.
BTFSCFLAG,3; ЕСЛИРАНЕЕ БЫЛА НАЖАТА КНОПКА,
CALLYCTAL; ТОИДЕМ НА УСТАНОВКУ РАЗРЯДА.
BTFSSPORTB,YCPL; ЕСЛИКНОПКА ПЛЮС НАЖАТА,
BSFFLAG,3; ПОСТАВИМФЛАГ.
BTFSSPORTB,YCPL; ЕСЛИКНОПКА ПЛЮС НАЖАТА,
BSFFLAG1,2; ЗАПРЕЩАЕМИНДИКАЦИЮ.
BTFSCFLAG,5; ЕСЛИРАНЕЕ БЫЛА НАЖАТА КНОПКА «РАЗРЯД»,
CALLKYPCY; ТОИДЕМ НА УСТАНОВКУ КУРСОРА.
BTFSSPORTB,PAZ; ЕСЛИКНОПКА «РАЗРЯД» НАЖАТА,
BSFFLAG,5; ПОСТАВИМФЛАГ.
BTFSCFLAG2,1; ПРИУСТАНОВКЕ ДАТЫ
GOTOKHOP1; КНОПКАМИНУС НЕ ПРОВЕРЯЕТСЯ.
BTFSCFLAG,2; ЕСЛИРАНЕЕ БЫЛА НАЖАТА КНОПКА МИНУС,
CALLYCTAM; ТОИДЕМ НА УСТАНОВКУ РАЗРЯДА.
BTFSSPORTB,YCMI; ЕСЛИКНОПКА МИНУС НАЖАТА,
BSFFLAG,2; ПОСТАВИМФЛАГ.
BTFSSPORTB,YCMI; ЕСЛИКНОПКА МИНУС НАЖАТА,
BSFFLAG1,2; ЗАПРЕЩАЕМИНДИКАЦИЮ.
KHOP1
BTFSSPORTB,PEJ; ЕСЛИКНОПКА «РЕЖИМ» НАЖАТА,
BSFFLAG,4; ПОСТАВИМФЛАГ.
BTFSSFLAG,4; ЕСЛИКНОПКА «РЕЖИМ» НЕ БЫЛА НАЖАТА,
GOTOVUBOR; ТОИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
BTFSSPORTB,PEJ; ЕСЛИКНОПКА «РЕЖИМ» НАЖАТА,
GOTOVUBOR; ТОИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
BCFFLAG,4; СБРОСИМФЛАГ КНОПКИ.
INCFREID,1; ИЗМЕНЕНИЕРЕЖИМА ИНДИКАЦИИ.
MOVLW.3;3РЕЖИМА ИНДИКАЦИИ.
SUBWFREID,0; ЕСЛИБОЛЬШЕ,
BTFSSSTATUS,2; ТОПОЙДЕМ НА СБРОС.
GOTOVUBOR; НАЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
CLRFREID; СБРОСРЕЖИМА.
GOTOVUBOR; НАВЫБОР РЕЖИМА ИНДИКАЦИИ.
;======================================================
; 39.СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
;======================================================
PRER
 MOVWFWTEMP; СОХРАНЕНИЕЗНАЧЕНИЙ РЕГИСТРОВ W И
 MOVFWSTATUS;STATUS,
 MOVWFSTEMP;
 MOVFWFSR;FSR.
 MOVWFFTEMP;
CALLS1;
REPER  ; ВОССТАНОВЛЕНИЕСОХРАНЕННЫХ ЗНАЧЕНИЙ.
 MOVFWSTEMP; ВОССТАНОВЛЕНИЕРЕГИСТРОВ:
 MOVWFSTATUS;STATUS,
 MOVFWFTEMP;
 MOVWFFSR;FSR,
 MOVFWWTEMP;W.
 BCFINTCON,2; СБРАСЫВАЕМ ФЛАГПРЕРЫВАНИЯ ОТ TMR0.
 RETFIE ; ВОЗВРАТИЗ ПРЕРЫВАНИЯ.
;=============================================
; 40. СЧЕТ ИПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С.
;=============================================
S1
INCFMCK,1; ПРИБАВИМ1 В РЕГИСТР МИЛЛИСЕКУНД.
MOVFWMCK;
ADDLW-0x7D; СЧИТАЕМДО 125.
BTFSSSTATUS,2;
RETURN;
CLRFMCK; ОБНУЛИМ.
BTFSCFLAG,7; РАЗДЕЛИМНА 2.
GOTO$+3;
BSFFLAG,7;
RETURN;
BCFFLAG,7; ОБНУЛИМДЕЛИТЕЛЬ.
MOVFWCEK; ЗАГРУЗКАЗНАЧЕНИЙ СЕКУНД В РАБ. РЕГИСТР.
ADDLW-3BH; ВЫЧЕСТЬИЗ РЕГИСТРА 59.236:4=59-0x0EC;
BZM1; СРАВНИТЬНА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА M1,
INCFCEK,1; ИНАЧЕПРИБАВИТЬ 1 В РЕГИСТР СЕКУНД.
RETURN;
M1
CLRFCEK; ОБНУЛЕНИЕРЕГИСТРА СЕКУНД.
MOVFWMIN; ЗАГРУЗКАМИНУТ В РАБ. РЕГИСТР.
ADDLW-3BH;-59.
BZH1; СРАВНИТЬНА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H1.
INCFMIN,1; ПРИБАВИТЬ1 В МИНУТЫ.
MOVFWMIN;MIN >W.
MOVWFTEMP;.
CALLBIDE; ПЕРЕКОДИРУЕМ.
MOVWFMINH;W> В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МИНУТ.
MOVFWTEMP; ВРЕМЕННЫЙ
MOVWFMINL; ВРЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МИНУТ.
RETURN;
H1
CLRFMIN; ОБНУЛЯЕМРЕГИСТР МИНУТ.
CLRFMINL; ОБНУЛЯЕМЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
CLRFMINH; ОБНУЛЯЕМДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
MOVFWHOU; ЗАГРУЗКАЧАСОВ В РАБ. РЕГИСТР.
ADDLW-17H;-23.
BZD1; СРАВНИТЬНА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H10.
INCFHOU,1; ПРИБАВИТЬ1 В ЧАСЫ.
MOVFWHOU;HOU>W.
MOVWFTEMP;
CALLBIDE; ПЕРЕКОДИРУЕМ.
MOVWFHOUH;W> В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ЧАСОВ.
MOVFWTEMP; ВРЕМЕННЫЙ
MOVWFHOUL; ВРЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ЧАСОВ.
RETURN;
D1
CLRFHOU; ОБНУЛЕНИЕРЕГИСТРА ЧАСОВ.
CLRFHOUL; ОБНУЛЕНИЕЕДИНИЦ ЧАСОВ.
CLRFHOUH; ОБНУЛЕНИЕДЕСЯТКОВ ЧАСОВ.
CALLSAPIS; НАЗАПИСЬ.
CALLPOLNO; НАУСТАНОВКУ ПРЕДЕЛЬНЫХ ЗНАЧЕНИЙ.
INCFDHU,1; ПРИБАВИТЬ1 В ДНИ.
MOVFWMEC; ЧИСЛОДНЕЙ НЕ ДОЛЖНО ПРЕВЫШАТЬ
CALLDAYMON; ЧИСЛАДАННОГО МЕСЯЦА.
 SUBWFDHU,0;
 SKPNC;
GOTOME1; ИНАЧЕУВЕЛИЧИМ МЕСЯЦ.
MOVFWDHU;
MOVWFTEMP;
CALLBIDE; ПЕРЕКОДИРУЕМ.
MOVWFDHUD;W> В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ ДНЕЙ.
MOVFWTEMP; ВРЕМЕННЫЙ
MOVWFDHUE; ВРЕГИСТР ИНДИКАЦИИ ЕДИНИЦ ДНЕЙ.
RETURN;
ME1
MOVLW.1; УСТАНОВИМПЕРВОЕ ЧИСЛО.
MOVWFDHU;
MOVWFDHUE;
CLRFDHUD;
INCFMEC,1; ПРИБАВИММЕСЯЦ.
MOVLW.13; НЕБОЛЕЕ 12.
SUBWFMEC,0;
SKPNC;
GOTOME1ME; ЕСЛИБОЛЬШЕ, ТО УСТАНОВИМ 1 ЯНВАРЯ.
MOVFWMEC;
MOVWFTEMP;
CALLBIDE; ПЕРЕКОДИРУЕМ.
MOVWFMECD;W> В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ МЕСЯЦА.
MOVFWTEMP; ВРЕМЕННЫЙ
MOVWFMECE; ВРЕГИСТР ИНДИКАЦИИ ЕДИНИЦ МЕСЯЦА.
RETURN;
ME1ME
MOVLW.1;1ЯНВАРЯ.
MOVWFMEC;01-01.
MOVWFMECE;
CLRFMECD;
RETURN;
;=======================================
; 41.ПЕРЕКОДИРОВКА ИЗ 2-ГО В 2_10.
;=======================================
BIDE; ПЕРЕКОДИРОВКАДЕСЯТКОВ
CLRFCOUN; ОБНУЛЯЕМСЧЕТЧИК.
ADDLW-.10; ВЫЧТЕМ10.
BTFSSSTATUS,0; ЕСЛИЕСТЬ ПЕРЕХОД ЧЕРЕЗ НОЛЬ,
GOTO$+4; ТОЗАВЕРШАЕМ ПЕРЕКОДИРОВКУ.
MOVWFTEMP; ИНАЧЕПЕРЕПИШЕМ НОВОЕ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ.
INCFCOUN,1; УВЕЛИЧИМСЧЕТЧИК.
GOTO$-5; ПОВТОРИМВЫЧИТАНИЕ.
MOVFWCOUN; ЗНАЧЕНИЕСЧЕТЧИКА (РАВНО ЧИСЛУ ДЕСЯТКОВ) ПЕРЕПИШЕМ В РАБОЧИЙ РЕГИСТР.
RETURN; ВЕРНЕМСЯ.
;================================
; 42. ЗАПИСЬЗНАЧЕНИЙ В ПАМЯТЬ.
;================================
SAPIS
CALLPERZAP; ПЕРЕПИШЕМТЕКУЩИЕ ЗНАЧЕНИЯ В РЕГИСТРЫ ЗАПИСИ.
BTFSCFLAG,0; ВВОДИМЗНАК В РЕГИСТРЫ.
BSFLSBZ1X,7;-
BTFSCFLAG,1;
BSFLSBZ1N,7;-
BTFSCFLAG2,3;
BSFLSBZ2X,7;-
BTFSCFLAG2,4;
BSFLSBZ2N,7;-
MOVLWHOUZ1X; ПЕРВЫЙАДРЕС ЗАПИСЫВАЕМОГО РЕГИСТРА
MOVWFFSR; ВРЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFWCOUZ; НАЧАЛЬНЫЙАДРЕС ЗАПИСИ В РАБОЧИЙ РЕГИСТР.
BSFSTATUS,5; БАНК1.
MOVWFEEADR; ИЗРАБОЧЕГО В АДРЕС ЗАПИСИ.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
CALLZAPIS; НАЗАПИСЬ.
INCFEEADR,1; УВЕЛИЧИМАДРЕС.
INCFFSR,1; ВЫБЕРЕМСЛЕДУЮЩИЙ РЕГИСТР.
BTFSSFSR,7; ЕСЛИРЕГИСТР НЕ ПОСЛЕДНИЙ,
GOTO$-4; ПОВТОРИМЗАПИСЬ.
BCFSTATUS,5; БАНК0.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
MOVLW.16; УСТАНОВИМНАЧАЛЬНЫЙ АДРЕС
ADDWFCOUZ,1; СЛЕДУЮЩЕЙЗАПИСИ.
MOVLW.128; ЕСЛИЭТО ПОСЛЕДНИЙ АДРЕС,
SUBWFCOUZ,0;
 SKPNC;
CLRFCOUZ; ТОНАЧНЕМ С НУЛЯ.
RETURN; ВОЗВРАТ.
ZAPIS
MOVFWINDF; ПЕРЕПИШЕМЗАПИСЫВАЕМОЕ ЗНАЧЕНИЕ
MOVWFEEDATA; ВРЕГИСТР ДАННЫХ.
 BSF EECON1,WREN; РАЗРЕШЕНИЕЗАПИСИ.
 MOVLW 55H; ОБЯЗАТЕЛЬНАЯПОСЛЕДОВАТЕЛЬНОСТЬ
 MOVWF EECON2;/
 MOVLW 0AAH;/
 MOVWF EECON2;/
 BSF EECON1,WR; ПРИЗАПИСИ ВО ФЛЕШ ПЗУ.
 BTFSC EECON1,WR; ПОКАНЕ БУДЕТ ОКОНЧАНИЯ ЗАПИСИ
 GOTO $-1; ХОДИМПО КРУГУ.
 BCF EECON1,WREN; ЗАПРЕТЗАПИСИ.
RETURN; ВОЗВРАТ.
;=========================
; 43. ВЫБОРКАИЗ ПАМЯТИ.
;=========================
CXUTKA
MOVLWHOUZ1X; ПЕРВЫЙАДРЕС ЗАПИСЫВАЕМОГО РЕГИСТРА
MOVWFFSR; ВРЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
MOVFWCOUE; АДРЕСЗАПИСИ В РАБОЧИЙ РЕГИСТР.
BSFSTATUS,5; БАНК1.
MOVWFEEADR; ИЗРАБОЧЕГО В АДРЕС ЗАПИСИ.
BCFINTCON,7; ЗАПРЕТПРЕРЫВАНИЙ.
CALLAKT; НАСЧИТЫВАНИЕ.
MOVWFINDF; ПЕРЕПИШЕМВ РЕГИСТР.
INCFEEADR,1; УВЕЛИЧИМАДРЕС.
INCFFSR,1; ВЫБЕРЕМСЛЕДУЮЩИЙ РЕГИСТР.
BTFSSFSR,7; ЕСЛИРЕГИСТР НЕ ПОСЛЕДНИЙ,
GOTO$-5; ПОВТОРИМСЧИТЫВАНИЕ.
BCFSTATUS,5; БАНК0.
BSFINTCON,7; РАЗРЕШАЕМПРЕРЫВАНИЯ.
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT1X;
BTFSSLSBZ1X,7; ПО7 РАЗРЯДУ УСТАНОВИМ ЗНАК.
GOTO$+4;
MOVLW.253; МИНУС.
MOVWFSOT1X;
BCFLSBZ1X,7; СОТРЕМЗНАК.
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT1N;
BTFSSLSBZ1N,7;
GOTO$+4;
MOVLW.253; МИНУС.
MOVWFSOT1N;
BCFLSBZ1N,7;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2X;
BTFSSLSBZ2X,7;
GOTO$+4;
MOVLW.253; МИНУС.
MOVWFSOT2X;
BCFLSBZ2X,7;
MOVLW.251; ПОУМОЛЧАНИЮ ЗНАК ПЛЮС.
MOVWFSOT2N;
BTFSSLSBZ2N,7;
GOTO$+4;
MOVLW.253; МИНУС.
MOVWFSOT2N;
BCFLSBZ2N,7;
BCFFLAG2,5; СБРОСФЛАГА УСТАНОВКИ МИНУС.
RETURN
AKT
BSFEECON1,RD; ЧТЕНИЕ.
BTFSCEECON1,RD;
GOTO$-1;
MOVLW.255; ЕСЛИПАМЯТЬ НЕ ЗАПОЛНЕНА,
SUBWFEEDATA,0; ЗАПИШЕМ-0.
BTFSCSTATUS,Z;
CLRFEEDATA; ОБНУЛИМ,Т.К. 255 НЕКОРРЕКТНО.
MOVFWEEDATA; ПЕРЕПИШЕМВ РАБОЧИЙ РЕГИСТР.
RETURN; ВОЗВРАТ.
;========================================
; 44.РАСПРЕДЕЛИТЕЛЬ.
;========================================
MYLTIK
CALLKHOP; ПРОВЕРИМКНОПКИ.
BTFSSFLAG2,0; ЕСЛИИНДИКАЦИЯ ТЕКУЩАЯ,
GOTOCMOTP; ТОПРОПУСКАЕМ УСТАНОВКУ.
CALLJEKIND; ПРОИНДИЦИРУЕМ.
BTFSSCEK,0; ЖДЕМЧЕТНОЙ СЕКУНДЫ.
GOTO$-1;
CALLINIDS1; ПРОВЕРИМДАТЧИК.
CALLKHOP; ПРОВЕРИМКНОПКИ.
BTFSSFLAG2,0; ЕСЛИИНДИКАЦИЯ ТЕКУЩАЯ,
GOTOCMOTP; ТОПРОПУСКАЕМ УСТАНОВКУ.
CALLJEKIND; ПРОИНДИЦИРУЕМ.
BTFSCCEK,0; ЖДЕМНЕЧЕТНОЙ СЕКУНДЫ.
GOTO$-1;
CALLINIDS2; ТОПРОВЕРИМ ВТОРОЙ ДАТЧИК.
GOTOMYLTIK; ВСЕСНАЧАЛА.
CMOTP
BTFSCFLAG2,0; ЕСЛИИНДИКАЦИЯ ТЕКУЩАЯ,
GOTOMYLTIK; ТОИДЕМ ИЗМЕРЯТЬ ТЕМПЕРАТУРУ.
BTFSCFLAG2,5; ПРИУСТАНОВКЕ НЕТ ВЫБОРКИ ИЗ ПЗУ.
CALLCXUTKA; ВЫБОРКАИЗ ПЗУ.
BTFSCFLAG1,2; ЕСЛИЗАПРЕТ ИНДИКАЦИИ, ТО ПРОПУСТИМ.
GOTO$+4;
BTFSSFLAG,7; КАЖДЫЕ0,5 СЕК.
GOTO$-1
CALLJEKIND; ВЫВОДИМНА ИНДИКАЦИЮ.
BTFSCFLAG,7; КАЖДЫЕ0,5 СЕК.
GOTO$-1
CALLKHOP; ПРОВЕРИМКНОПКИ.
GOTOCMOTP;
;========================================
END
;========================================