Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описание функциональных узлов МПС и алгоритма их

Взаимодействия

 

В проектируемом устройстве можно выделить следующие функциональные блоки: панель управления, содержащая пять кнопок; жидкокристаллический индикатор, на котором воспроизводится информация (дата, время, температура); термодатчики, благолдаря которым производится измерение температуры; стабилизатор напряжения, служит для подачи стабильного напряжения на МК; источник питания, состоящий из внутреннего источника и внешнего. Функциональная схема электронного термометра приведена на рис. 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...