Описание функциональных узлов МПС и алгоритма их
Взаимодействия
В проектируемом устройстве можно выделить следующие функциональные блоки: панель управления, содержащая пять кнопок; жидкокристаллический индикатор, на котором воспроизводится информация (дата, время, температура); термодатчики, благолдаря которым производится измерение температуры; стабилизатор напряжения, служит для подачи стабильного напряжения на МК; источник питания, состоящий из внутреннего источника и внешнего. Функциональная схема электронного термометра приведена на рис. 4.
Рис. 4. Функциональная схема электронного термометра Описание выбора элементной базы и работы принципиальной Схемы
Принципиальная схема устройства показана на рис. 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) в строке и различными их размерами. Каждое знакоместо содержит 5x8 (40) точек, из которых формируются цифры, буквы и символы (рис. 58). Все символы записаны в ПЗУ знакогенератора по своим адресам. Крайние левые цифры на рис. 58 несут информацию о младшем полубайте адреса знакогенератора, а верхние — о старшем полубайте. Например, для отображения на индикаторе буквы «3» необходимо послать в ЖК-дисплей адрес 4Ah. По этому адресу в знакогенераторе будет выбрана буква и отображена в необходимом знакоместе. ЖК-дисплеи, в которых последняя буква маркировки «R» (русифицировано), имеют в составе знакогенератора кириллицу. Это не касается ЖК-дисплеев отечественных производителей.
Работа с устройством
После подачи напряжения питания на индикаторе появится изображение, аналогичное представленному на рис. 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. ; LIST P=16F628 #INCLUDE P16F628.INC __CONFIG 3F01H ;====================================================== ; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,096 MГЦ. ; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 16, ЧТО ВМЕСТЕ ; С TMR0 (256) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ, ДЕЛИТЕЛЕМ НА 125, 2 ; ДАЕТ НА ВЫХОДЕ 1 СЕКУНДУ (4х16х256x250=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;ЗНАК 2 MAX. SOT2N;ЗНАК 2 MIN. EDI2;ЕДИНИЦЫ 2. DES2;ДЕСЯТКИ 2. DST2;ДЕСЯТЫЕ 2. SOT1;ЗНАК 1. SOT1X;ЗНАК 1 MAX. SOT1N;ЗНАК 1 MIN. 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 ADDWF PCL,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 BTFSS STATUS,2 GOTO $-2 DECFSZ TEMP,1 GOTO PLUS 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;ЗАПРЕТ ПРЕРЫВАНИЙ. CALL PRIE2;НА ПРИЕМ. 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 BTFSS STATUS,2 GOTO $-2 DECFSZ TEMP,1 GOTO PLUS1 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;ЗАПРЕТ ПРЕРЫВАНИЙ. CALL PRIE1;НА ПРИЕМ. 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 СТРОК
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|