Разработка термометр-часов
Роль микроконтроллерных технологий в развитии микроэлектроники. Алгоритм разработки микропроцессорной системы термометр-часы на базе микроконтроллера PIC16F84A. Разработка схемы электрической принципиальной устройства и программы для микроконтроллера.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.03.2012 |
Размер файла | 584,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
21
Размещено на http://www.allbest.ru/
Министерство образования и науки
ФГОУ СПО «Южно-Сахалинский промышленно-экономический техникум
КУРСОВОЙ ПРОЕКТ
по учебной дисциплине: «микропроцессоры
и микропроцессорные системы»
Тема
Разработка термометр-часов
Южно-Сахалинск, 2011
Содержание
Введение
1 Техническое задание
2 Техническое предложение
2.1 Анализ технического задания
2.1.1 Описание объекта управления
2.1.2 Обзор возможных вариантов разрабатываемой системы
2.2 Выбор комплектующих изделий
2.2.1 Выбор микропроцессора
2.2.2 Выбор датчиков
3 Разработка структурной схемы и алгоритма работы системы
3.1 Структурная схема
3.2 Описание функциональных узлов МПС и алгоритма их взаимодействия
3.3 Описание выбора элементной базы и работы принципиальной схемы
3.4 Описание алгоритма работы
4 Разработка электрической принципиальной схемы системы
5 Работа с устройством
6 Моделирование схемы
Заключение
Список литературы
Приложение А Текст программы
Введение
Современную микроэлектронику трудно представить без такой важной составляющей, как микроконтроллеры. Микроконтроллеры незаметно завоевали весь мир. Микроконтроллерные технологии очень эффективны. Одно и то же устройство, которое раньше собиралось на традиционных элементах, будучи собрано с применением микроконтроллеров, становится проще, не требует регулировки и меньше по размерам. С применением микроконтроллеров появляются практически безграничные возможности по добавлению новых потребительских функций и возможностей к уже существующим устройствам. Для этого достаточно просто изменить программу.
Однокристальные (однокорпусные) микроконтроллеры представляют собой приборы, конструктивно выполненные в виде БИС и включающие в себя следующие составные части: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой.
Мировая промышленность выпускает огромную номенклатуру микроконтроллеров. По области применения их можно разделить на два класса: специализированные, предназначенные для применения в какой-либо одной конкретной области (контроллер для телевизора, контроллер для модема, контроллер для компьютерной мышки ) и универсальные, которые не имеют конкретной специализации и могут применяться в самых различных областях микроэлектроники, с помощью которых можно создать как любое из перечисленных выше устройств, так и принципиально новое устройство.
Цель курсового проекта - разработка микропроцессорной системы термометр-часы на базе микроконтроллера PIC16F84A.
1. Техническое задание
Наименование разработки
Настоящее техническое задание устанавливает технические требования, порядок разработки и приёмки опытных образцов системы термометр-часы.
Основание для разработки
Основанием для разработки является задание по курсовому проекту по учебной дисциплине «Микропроцессоры и микропроцессорные системы» на тему: «Разработка термометра-часов, на базе микроконтроллера».
Назначение разработки
Разрабатываемое устройство, предназначенно для измерения температуры в доме и на улице по двум термодатчикам, имеющее функции часов.
Разработчик -- ФИО
Состав изделия
- микроконтроллер PIC16F84A
- 2 датчика температуры DS1820
- ЖК-дисплей
- стабилизатор напряжения
- 7 резисторов
- 3 ключа
- 4 конденсатора
Определение перечня решаемых задач
Целью данного курсового проекта является разработка термометра-часов на основе микроконтроллера.
Разрабатываемая система должна работать в следующих режимах:
1. Измерение температуры в доме.
2. Измерение температуры на улице.
3. Вывод времени в 24-х часовом формате.
Технические требования
Предлагаемое устройство должно измерять температуру в двух точках и индицировать ее на 16-разрядном ЖК-дисплее вместе с показаниями часов. Датчиком температуры в устройстве служит микросхема DS1820, которая измеряет температуру в диапазоне -55...+125°С.
Датчик температуры DD1 предназначен для измерения температуры на улице, a DD2 -- в доме.
Потребляемый термометром ток при 5 В составляет 3 мА.
В интервале -10...+85°С изготовитель гарантирует погрешность ±0,5°С. Данное устройство обеспечивает указанную точность в диапазоне -10...+85°С.
Порядок испытаний и приёмки, опытных образцов
Для проверки качества изделия опытный образец должен подвергаться приёмо-сдаточным, типовым и заводским (приёмочным) испытаниям.
Приёмочные испытания проводятся по специальной программе и методике испытаний.
Результаты испытаний оформляются актом и утверждаются в установленном порядке.
2 Техническое предложение
2.1 Анализ технического задания
термометр часы микроконтроллер
В результате анализа технического задания будут выявлены функции, которые должен выполнять термометр-часы, и сформулированы требования, предъявляемые к программной и аппаратной его части.
2.1.1 Описание объекта управления
Устройство предназначено для измерения температуры как в домашних условиях, так и на улице. В домашних условиях устройство может быть использовано, например, для измерения температуры в общей камере холодильника и его морозильном отделении или температуры процессора компьютера и в корпусе. Термометр-часы можно использовать для измерения температуры в салоне автомобиля и на улице для предупреждения о возможности возникновения гололеда или измерения температуры двигателя и охлаждающей жидкости. Короче, устройство можно использовать везде, где необходимо измерение температур в двух точках и индикация результата. Далее для краткости вместо выражения “термометр для измерения температуры в доме и на улице”, будем писать просто режим “дом--улица” и т. п.
2.1.2 Обзор возможных вариантов разрабатываемой системы
Существует множество вариантов реализации устройства, рассмотрим два предпочтительных варианта.
Первый вариант: устройство исполняется на основе диодов, транзисторов и резисторов.
Второй вариант: устройство исполняется на основе микропроцессора.
Из двух вариантов выполнения микропроцессорного термометра, я выбрал второй по следующим причинам:
Во-первых, основной целью курсового проекта является разработка системы управления на основе микропроцессора.
Во-вторых, при добавлении новых исполнительных устройств нет необходимости полностью перестраивать всю систему целиком, а надо только перепрограммировать микропроцессор.
В-третьих, проектирование схем на транзисторах, диодах и т.п. намного усложняет работу, увеличивает размеры устройства и его цену, кроме того при сборке схемы есть возможность забыть какую-либо деталь или потерять её.
2.2 Выбор комплектующих изделий
2.2.1 Выбор микропроцессора
Основной частью микропроцессорной системы сбора и обработки информации является однокристальный микроконтроллер, который, собственно и выполняет основные функции сбора и обработки данных.
Для выполнения этих функций возьмём микроконтроллер PIC16F84, т.к. он имеет достаточное быстродействие, небольшую стоимость и подходящее энергопотребление.
PIC16F84 относится к семейству КМОП микроконтроллеров. Отличается тем, что имеет внутреннее 1К х 14 бит EEPROM для программ, 8-битовые данные и 64 байт EEPROM памяти данных. Все команды состоят из одного слова (14 бит шириной) и исполняются за один цикл (1 мкс при 4 МГц), кроме команд перехода, которые исполняются за два цикла (2 мск). PIC16F84 имеет прерывание, срабатывающее от четырёх источников, и восьмиуровневый аппаратный стек. Периферия включает в себя 8-битный таймер/счётчик с 8-битным программируемым предварительным делителем (фактически 16-битный таймер) и 13 линий двунаправленного ввода/вывода. Высокая нагрузочная способность (25 мА макс. входной ток, 20 мА макс. выходной ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы. Разработки на базе контроллеров PIC16F84 поддерживается ассемблером, программным симулятором, внутрисхемным эмулятором (только фирмы Microchip) и программатором.
Серия PIC16F84 подходит для широкого спектра приложений от схем высокоскоростного управления автомобильными и электрическими двигателями до экономичных удалённых приёмопередатчиков, показывающих приборов и связных процессоров. Наличие ПЗУ позволяет подстраивать параметры в прикладных программах (коды передатчика, скорости двигателя, частотоприёмника и т.д.).
Следует добавить, что встроенный автомат программирования EEPROM кристалла PIC16F84 позволяет легко подстраивать программу и данные под конкретные требования даже после завершения ассемблирования и тестирования.
2.2.2 Выбор датчиков
Был выбран датчик температуры DS1820 - Цифровой термометр с однопроводным интерфейсом в стандарте MicroLAN, диапазон измеряемых температур от минус 218 до 318 К. Абсолютная погрешность преобразования меньше 0,5 К в диапазоне контролируемых температур от 0 до 70 К. Результирующее значение температуры считывается из прибора как девятиразрядное слово. Максимальное время полного преобразования приблизительно 500 мс. Узел 1-Wire- интерфейса прибора организован таким образом, что существует теоретическая возможность адресации неограниченного количества подобных устройств на одной однопроводной линии. Термометр имеет индивидуальный 64-разрядный регистрационный номер (групповой код 010H) и обеспечивает возможность работы без внешнего источника питания, только за счёт паразитного питания однопроводной линии. Питание прибора через отдельный внешний вывод производится напряжением от 3,0В до 5,5В. Термометр размещается в транзисторном корпусе ТО-92.
Совпадение рабочего диапазона датчика с рабочим диапазоном микроконтроллера послужило для решения выбора DS1820. Датчики температуры с однопроводным интерфейсом был разработан для использования совместно с микроконтроллерами. Каждый датчик температуры имеет 56-разрядный индивидуальный идентификационный код, поэтому по одному проводу может быть опрошено практически неограниченное число датчиков. Перед установкой таких датчиков в одну линию необходимо считать 64-разрядный код ROM (в него входит 56-битный номер датчика и 8 бит регистра контроля чётности) для каждого датчика и учитывать его при программировании микроконтроллера. Передача 64 разрядов занимает много времени, поэтому в устройствах, использующих небольшое число датчиков, можно обойтись выделением отдельного выхода микроконтроллера для каждого датчика.
3. Разработка структурной схемы и алгоритма работы системы
3.1 Структурная схема
Структурная схема изделия весьма проста, и изображена на рисунке 1. Основное в данной системе - функциональная схема и алгоритмы работы. Установка происходит при помощи кнопок управления. Отображение времени и текущей температуры происходит на ЖК-дисплее.
- 3 кнопки управления
1. Режим - выбор определённого режима
2. Разряд - выбор необходимого разряда установки часов
3. Установка - добавляют единицу в выбранный разряд
3.2 Описание функциональных узлов МПС и алгоритма их взаимодействия
В проектируемом устройстве можно выделить следующие функциональные блоки: панель управления, содержащая три кнопки; жидкокристалический индикатор, на котором воспроизводится информация (дата, время, температура); термодатчики, благодаря которым производится измерение температуры; стабилизатор напряжения, служит для подачи стабильного напряжения на микроконтроллере; источник питания, состоящий из внутреннего источника и внешнего. Функциональная схема электронного термометра-часов приведена на рисунке 2.
Размещено на http://www.allbest.ru/
21
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
21
Размещено на http://www.allbest.ru/
Рис. 2 Функциональная схема термометра-часов
3.3 Описание выбора элементной базы и работы принципиальной схемы
Резистором R7 регулируют контрастность изображения на индикаторе. Элементы резервного питания можно составить из трёх элементов типа ААА. Средний потребляемый ток от элементов питания в текущем режиме не превышает 3 мА.
Выбор элементной базы основан на выборе элементов согласующихся с микроконтроллером. Основными элементами схемы являются ьермодатчики, которые хорошо согласуются с микроконтроллером. Термодатчики 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.
Рис. 3 Схема подключения термодатчика к микроконтроллеру
3.4 Описание алгоритма работы
Алгоритм работы программы микроконтроллера приведен на рисунке 4:
Рис. 4
После подачи напряжения питания инициализируются регистры микроконтроллера и ЖК-дисплей. Далее проверяется флаг режима установки. Если установки нет, то на дисплей выводятся значения регистров индикации данного режима. Если выполняется установка, то проверяется флаг курсора. Вывод на индикацию значений регистров индикации и курсора выполняется поочередно с установкой и сбросом флага курсора. Если флаг курсора установлен, на индикацию выводится изображение курсора. Разряд, под которым появляется курсор, определяет значение регистра курсора. Если курсор уже высвечен, то на дисплей выводятся значения установки.
После индикации инициализируется датчик температуры. Сначала определяется необходимый датчик “дом” или “улица”. Если в текущем режиме необходима температура в доме, то инициализируется и выполняется измерение температуры датчиком для дома, в противном случае измеряется температура на улице.
Принятый от датчиков DS1820 девятиразрядный двоичный код перекодируется в двоично-десятичный. Выделяется девятый разряд, определяется знак температуры. Перекодированные значения переписываются в десятичные регистры. Позже значения этих регистров в зависимости от выбранного режима будут переписаны в регистры индикации.
Далее программа проверяет состояние кнопок и выполняет соответствующие установки. Проверка кнопок завершается перезаписью всех значений в регистры индикации. После выполнения всех операций программа ожидает прерывание.
Во время прерывания выполняется установка и перекодирование регистров секунд, минут и часов. При выбранной частоте кварцевого резонатора 4,096 МГц, коэффициенте деления предделителя 256, делителе на 16 и с учетом машинного цикла, равного четырем тактам, коэффициент деления регистра таймера должен быть равен 250, поскольку 40960007/(256x16x4) = 250 Гц. Поэтому перед выходом из прерывания выполняется предустановка таймера на 6 (256-250 = 6). Прерывания происходят через 1/16 с (62,5 мсх16 = 1 с).
После отработки прерывания программа возвращается к индикации, и цикл измерения температуры повторяется.
Для детального рассмотрения алгоритма работы программы по измерению температуры, приведенному на рис. 5, кратко рассмотрим принцип работы микроконтроллерного датчика температуры DS1820.
Рис.5 Алгоритм работы программы измерения температуры
Алгоритм работы программы измерения температуры в режимах “дом” и “улица” одинаков, поэтому достаточно рассмотреть его один раз (рис. 5). После обнуления линии передаются управляющие команды 0xCCh и 0x44h для начала измерения температуры. Передача команды начинается с записи числа 8 в счетчик принимаемых бит. Сдвигом вправо выталкивается младший бит команды, который переписывается в бит С регистра Status. По значению бита С в линию посылается 0, либо 1. Декрементируется счетчик, его значение проверяется на нуль. Если счетчик пуст, программа возвращается в точку начала ее выполнения, в противном случае в линию выдается значение следующего бита.
После команд 0xCCh и 0x44h посылаются команды 0xCCh и 0xBEh на считывание температуры. Перед приемом числа обнуляется регистр приема LSB и устанавливается счетчик числа принимаемых бит. В линию выдается короткий импульс запроса и выдерживается пауза длительностью 8 мкс. Переписывается состояние порта во временный регистр и опрашивается флаг девятого бита. Если принимается не девятый бит, то проверяется на нуль бит временного регистра, который переписан из порта приема данных. По его значению устанавливается бит переноса С регистра Status. Сдвигом вправо регистра приема LSB бит переноса переписывается в его старший бит. Выдерживается пауза длительностью 60 мкс и проверяется флаг девятого бита. Если принимается не девятый бит, счетчик декрементируется, проверяется на нуль, и прием данных повторяется. Если приняты все восемь бит и счетчик пуст, устанавливается флаг девятого бита. После приема девятого бита его значение не записывается в регистр приема, а по нему устанавливается флаг знака.
Значение положительной температуры передается датчиком в прямом двоичном коде, а отрицательной -- в коде дополнения до нуля (256), поэтому необходима перекодировка полученного сигнала. Если знак температуры отрицательный, то регистр приема LSB переводится в дополнительный код (инвертируется и прибавляется единица). Если знак положительный, программа переходит к перекодировке температуры в двоично-десятичный код. Необходимо заметить, что младший бит регистра приема несет информацию о десятых долях градуса. Если бит равен единице, десятая доля равны 0,5 °С, а если бит нулевой, то 0. После записи десятых долей в регистр индикации регистр приема сдвигается на один разряд вправо. В таком виде значение температуры передается на перекодировку.
Для полноты понимания работы устройства рассмотрим алгоритм работы программы проверки кнопок, показанный на рис. 6.
Рис.6 Алгоритм работы программы проверки кнопок
Последовательно проверяются кнопки “Установка”, “Разряд” и “Режим”. Если кнопка нажата, то устанавливается соответствующий флаг. Пока кнопка нажата, операции по установке не выполняются. Если любая из кнопок нажата, то инкрементируются соответствующие регистры разряда, курсора или режима. После этого программа переходит на выбор режима индикации. По значению регистра режима выбирается подпрограмма заполнения регистров индикации: “улица -- часы”, “дом -- часы”, “дом -- улица” и установка часов. Все готово для индикации нового значения измеренной температуры.
4. Разработка электрической принципиальной схемы системы
Датчик температуры DD1 предназначен для измерения температуры на улице, a DD2 -- в доме. Датчики подключают к плате через стандартные разъемы от звуковой аппаратуры X1 и Х2. Резистором R6 устанавливают необходимую контрастность ЖК-дисплея. Если термометр будет устанавливаться в автомобиле, вывод К светодиодной подсветки индикатора (на рис. 4 не показан) подключают к минусу питания. Вывод А индикатора через резистор сопротивлением 300 Ом мощностью 1 Вт подсоединяют к выключателю подсветки приборов. Максимальный рекомендуемый ток через светодиоды подсветки равен 70 мА. Для использования термометра дома стабилизатор напряжения DA1 можно не устанавливать, а питать устройство от трех элементов питания (или от одной батареи 3R12) общим напряжением 4,5 В. В этом случае необходимо установить выключатель напряжения питания. Потребляемый термометром ток при 5 В составляет 3 мА. Устройство работоспособно при снижении напряжения питания до 3 В, но при 3,7 В цифры на индикаторе становятся трудноразличимыми.
5. Работа с устройством
Назначение кнопок управления:
· кнопкой “Режим” выбирают один из режимов индикации: “улица -- часы”, “дом -- часы”, “дом -- улица”, “часы -- установка”;
· кнопкой “Разряд” выбирают необходимый разряд установки часов. Под выбранным разрядом мигает курсор (черточка);
· кнопкой “Установка” добавляют единицу в выбранный разряд.
Пока кнопка нажата, установки не выполняются. Кнопки “Разряд” и “Установка” работают только при установке часов.
После подачи напряжения на индикаторе слева высвечивается температура на улице, а справа -- показания часов, как показано на рисунке 7:
Индикация буквы “у” рядом со значением температуры говорит о том, что работает термометр “улица”. Нажатием кнопки “Режим” последовательно изменяют режим на “дом -- часы” и “дом -- улица” (рис. 8 и 9).
Рис. 8 Режим «дом-часы»
Рис. 9 Режим «дом-улица»
В режиме установки часов (рис. 10) курсор будет находиться под разрядом десятков часов.
Кнопкой “Установка” набирают необходимое число часов. Кнопкой “Разряд” перемещают курсор в необходимый разряд и устанавливают единицы часов, десятки минут и единицы минут аналогично установке десятков часов. Перемещая курсор на единицы секунд и нажимая кнопку “Установка”, сбрасывают показания минут и секунд в нуль. Этим режимом можно пользоваться при установке часов по сигналам точного времени. Начало отсчета секунд совпадает с моментом отпускания кнопки. При установке часов и минут отсчет секунд не останавливается.
После установки часов выбирают необходимый режим индикации.
6. Моделирование схемы
Программа Proteus - программа симулятор, которая позволяет без сборки реального устройства, отладить работу программы, найти ошибки, полученные на стадии проектирования, снять необходимые характеристики и многое другое. Proteus является, так называемой средой сквозного проектирования. Это означает создание устройства, начиная с его графического изображения (принципиальная схема) и заканчивая изготовлением печатной платы устройства, с возможностью контроля на каждом этапе производства. Поэтому проверка схемы была проведена в среде сквозного проектирования Proteus 7.1 SP4 Professional. В данной среде была эмулирована собранная схема с микроконтроллером, прошитым исходным кодом (рисунок 11).
Для отладки программы использовалась упрощённая схема термометра-часов. Предлагаемое устройство является результатом работы над созданием термометра-часов.
Рис. 11 электрическая принципиальная схема термометра-часов.
Заключение
В данном курсовом проекте разработано устройство - цифровой термометр-часы. Разработана схема электрическая принципиальная этого устройства и программа для микроконтроллера. В результате ассемблирования получена прошивка программы для памяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальную схему и расширить функциональные возможности микроконтроллера, так как для изменения функций устройства достаточно внести изменения в программу микроконтроллера.
Список литературы
1. Заец Н.И. Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 2.
2. Белов А.В. Микроконтроллеры AVR в радиолюбительской практике-СП-б, Наука и техника, 2007.
3. Евтисеев А.В. Микроконтроллеры Microchip: практическое руководство/А.В. Евтисеев.- М.: Горячая линия - Телеком, 2002.
4. Кравченко А.В. 10 практических устройств на AVR-микроконтроллерах. Книга 1 -М., Додэка-XXL, МК-пресс, 2008.
5. Трамперт В. Измерение, управление и регулирование с помощью AVR-микроконтроллеров: Пер. с нем - К., МК-Пресс, 2006.
6. Мортон Дж. Микроконтроллеры AVR. Вводный курс/Пер. с англ.-М., Додэка-XXL, 2006.
7. Проектирование цифровых устройств на однокристальных микроконтроллерах / В.В.Сташин [и др.].- М.: Энергоатомиздат, 1990.
Приложение А
Текст программы на языке ассемблера
; ТЕРМОМЕТР/ЧАСЫ.
; ТОЧНОСТЬ ИЗМЕРЕНИЯ ТЕМПЕРАТУРЫ - 0,5 ГРАДУСА.
; ДАТЧИК ТЕМПЕРАТУРЫ - DS1822,
; ИНДИКАЦИЯ - 16X1 ЖКИ - LSD.
;
INCLUDE P16F84A.INC
CONFIG 3FF1H
;===============================
; ЛИСТИНГ ИСХОДНОЙ ПРОГРАММЫ.
;===============================
LIST P=16F84A, R=HEX ;директива, определяющая тип
;процессора и систему счисления
;по умолчанию
;=======================================================
; ИСПОЛЬЗУЕТСЯ КВАРЦ ЧАСТОТОЙ 4,096 МГц.
; КОЭФФИЦИЕНТ ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ РАВЕН 256, ЧТО ВМЕСТЕ
; С TMR0 (250) И ЦИКЛОМ, РАВНЫМ 4 ТАКТАМ, И ДЕЛИТЕЛЕМ НА 16
; ДАЕТ НА ВЫХОДЕ 1 сек (4X16X256X250=4096000).
;=======================================================
; RB4-RB7 - ДАННЫЕ LCD,
; RB2 - RS, RB3 - E,
; RB1 - РЕЗЕРВ.
; RB0 - РЕЗЕРВ.
; RA0 - ВХОД/ВЫХОД НА DS1822, ДОМ.
; RA1 - КНОПКА "УСТАНОВКА", RA2 - КНОПКА "РАЗРЯД".
; RA3 - КНОПКА "РЕЖИМ" (ЧАСЫ - ТЕРМОМЕТР - УЛИЦА - ДОМ).
; RA4 - ВХОД/ВЫХОД НА DS1822, УЛИЦА.
;=======================================================
; СПЕЦРЕГИСТРЫ.
;=======================================================
INDF EQU 00H ;ДОСТУП К ПАМЯТИ ЧЕРЕЗ FSR.
TIMER0 EQU 01H ;TMR0.
OPTIONR EQU 81H ;OPTION (RP0=1).
PC EQU 02H ;СЧЕТЧИК КОМАНД.
STATUS EQU 03H ;РЕГИСТР СОСТОЯНИЯ АЛУ.
FSR EQU 04H ;РЕГИСТР КОСВЕННОЙ АДРЕСАЦИИ.
PORTA EQU 05H ;ПОРТ A ВВОДА/ВЫВОДА.
PORTB EQU 06H ;ПОРТ B ВВОДА/ВЫВОДА.
TRISA EQU 85H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА A.
TRISB EQU 86H ;НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B.
INTCON EQU 0BH ;РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ.
;=======================================================
; РЕГИСТРЫ ОБЩЕГО НАЗНАЧЕНИЯ.
;=======================================================
EDI EQU 10H ;ЕДИНИЦЫ ТЕМПЕРАТУРЫ.
DES EQU 11H ;ДЕСЯТКИ.
SECL EQU 12H ;ЕДИНИЦЫ СЕКУНД.
SECH EQU 13H ;ДЕСЯТКИ СЕКУНД.
MINL EQU 14H ;ЕДИНИЦЫ МИНУТ.
MINH EQU 15H ;ДЕСЯТКИ МИНУТ.
HOUL EQU 16H ;ЕДИНИЦЫ ЧАСОВ.
HOUH EQU 17H ;ДЕСЯТКИ ЧАСОВ.
TEMP EQU 18H ;ВРЕМЕННЫЙ.
ZAN EQU 19H ;СЧЕТЧИК ПАУЗЫ.
COUN EQU 1AH ;СЧЕТЧИК БИТОВ.
LSB EQU 1BH ;РЕГИСТР ДАННЫХ DS.
DST EQU 1CH ;ДЕСЯТЫЕ ТЕМПЕРАТУРЫ.
COU EQU 1DH ;СЧЕТЧИК ПЕРЕСЧЕТА.
SOT EQU 1EH ;РЕГИСТР ЗНАКА.
MCK EQU 1FH ;МИЛЛИСЕКУНД.
WTEMP EQU 21H ;ВРЕМЕННЫЙ.
STEMP EQU 22H ;ВРЕМЕННЫЙ.
FTEMP EQU 23H ;ВРЕМЕННЫЙ.
SEC EQU 24H ;СЕКУНДЫ ДВОИЧНЫЕ.
MIN EQU 25H ;МИНУТЫ ДВОИЧНЫЕ.
HOU EQU 26H ;ЧАСЫ ДВОИЧНЫЕ.
DSMH EQU 27H ;РЕГИСТР ПЕРЕСЧЕТА.
LSMH EQU 28H ;МЛАДШИЙ РЕГИСТР.
HSMH EQU 29H ;СТАРШИЙ РЕГИСТР ПЕРЕСЧЕТА.
REID EQU 2AH ;РЕЖИМ ИНДИКАЦИИ.
KYPC EQU 2BH ;КУРСОРА.
;
R1 EQU 30H ;РЕГИСТРЫ ИНДИКАЦИИ.
R2 EQU 31H ;
R3 EQU 32H ;
R4 EQU 33H ;
R5 EQU 34H ;
R6 EQU 35H ;
R7 EQU 36H ;
R8 EQU 37H ;
R9 EQU 38H ;
R10 EQU 39H ;
R11 EQU 3AH ;
R12 EQU 3BH ;
R13 EQU 3CH ;
R14 EQU 3DH ;
R15 EQU 3EH ;
R16 EQU 3FH ;
;
SOTD EQU 40H ;ЗНАК ДОМА.
EDID EQU 41H ;ЕДИНИЦЫ ДОМА.
DESD EQU 42H ;ДЕСЯТКИ.
DSTD EQU 43H ;ДЕСЯТЫЕ.
SOTY EQU 44H ;ЗНАК УЛИЦЫ.
EDIY EQU 45H ;ЕДИНИЦЫ.
DESY EQU 46H ;ДЕСЯТКИ.
DSTY EQU 47H ;ДЕСЯТЫЕ УЛИЦЫ.
;==============================================
; ОПРЕДЕЛЕНИЕ БИТОВ СОСТОЯНИЯ РЕГИСТРОВ ФЛАГОВ.
;==============================================
FLAG EQU 20H ;
; 0-> ЗНАКА. 1-МИНУС.
; 1-> СЧИТЫВАНИЯ 9 РАЗРЯДА.
; 2-> ПРЕРЫВАНИЯ.
; 3-> КНОПКИ "УСТАНОВКА".
; 4-> КНОПКИ "РЕЖИМ".
; 5-> КНОПКИ "РАЗРЯД".
; 6-> ЧЕРЕДОВАНИЯ КУРСОРА И ИНДИКАЦИИ.
; 7-> ДЕЛИТЕЛЬ НА 2.
FLAG1 EQU 2CH ;
; 0-> УСТАНОВКА ЧАСОВ.
; 1-> ИЗМЕРЕНИЕ ДОМ-1, УЛИЦА-0.
; 2-> ИНДИКАЦИЯ ДОМ-УЛИЦА - 1.
; 3-> ИЗМЕРЕНИЕ ДОМ-1 ИЛИ УЛИЦА-0.
;===========================================
DSD EQU 0 ;ВЫХОД DS, ДОМ.
DS EQU 4 ;ВЫХОД DS, УЛИЦА.
RS EQU 2 ;КОМАНДА/ДАННЫЕ.
E EQU 3 ;СИНХРОНИЗАЦИЯ.
YCT EQU 1 ;УСТАНОВКА.
PAZ EQU 2 ;РАЗРЯД.
PEJ EQU 3 ;РЕЖИМ.
;===========================================
; 1. ПУСК.
;====================
ORG 0
GOTO INIT
ORG 4
GOTO PRER
;====================
; 2. ИНИЦИАЛИЗАЦИЯ.
;====================
INIT
BSF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 1.
MOVLW B'00000111' ;ПРЕДДЕЛИТЕЛЬ ПЕРЕД ТАЙМЕРОМ,
;K=256...111,
MOVWF OPTION_REG^80H ;ПОДТЯГИВАЮЩИЕ РЕЗИСТОРЫ ВКЛЮЧЕНЫ.
MOVLW B'00100000' ;РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ ПРИ ПЕРЕПОЛНЕНИИ
;ТАЙМЕРА.
MOVWF INTCON ;
MOVLW B'00011111' ;ВСЕ - НА ВХОД.
MOVWF TRISA^80H
MOVLW B'00000000' ;ВСЕ - НА ВЫХОД.
MOVWF TRISB^80H
BCF STATUS,RP0 ;ПЕРЕХОДИМ В БАНК 0.
CLRF TMR0 ;ВСЕ ОБНУЛЯЕМ И УСТАНАВЛИВАЕМ
CLRF FLAG
CLRF FLAG1
CLRF PORTA
CLRF PORTB
CLRF SEC
CLRF MIN
CLRF HOU
CLRF HOUL
CLRF HOUH
CLRF MINL
CLRF MINH
CLRF SECH
CLRF REID
CLRF KYPC
;===================================================
; 3. ИНИЦИАЛИЗАЦИЯ ЖКИ.
;===================================================
JEKINI
MOVLW 3 ;СБРОС.
CALL JEKOMI ;ПЕРЕДАЧА КОМАНДЫ.
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 3 ;СБРОС.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 3 ;
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 10 ;ЗАПРЕТ СДВИГА ИЗОБРАЖЕНИЯ.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 06 ;ИНКРЕМЕНТИРОВАНИЕ ПОЗИЦИИ КУРСОРА.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 01 ;СТИРАНИЕ ДИСПЛЕЯ.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 28 ;ФОРМАТ ОБМЕНА: 4 РАЗР., 5Х7, 2 СТРОКИ.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 28 ;
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
MOVLW 0C ;ВКЛЮЧЕНИЕ ДИСПЛЕЯ, ЗАПРЕТ КУРСОРА.
CALL JEKOMI ;
CALL STROB ;ПРОСТРОБИРУЕМ.
BCF INTCON,2
GOTO JEKI ;НА ИНДИКАЦИЮ.
PAUSA
MOVLW .25
MOVWF ZAN
PAUS
MOVLW .255
ADDLW -1
BTFSS STATUS,2
GOTO $-2
DECFSZ ZAN,1
GOTO PAUS
RETURN
JEKOMI
MOVLW TEMP ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
ANDLW B'11110000' ;ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "B".
CALL STROB ;ПРОСТРОБИРУЕМ.
CALL PAUSA ;ПАУЗА.
MOVFW TEMP
SWAPF TEMP,W ;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.
ANDLW B'11110000' ;ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
MOVWF PORTB ;ПЕРЕПИШЕМ В ПОРТ "B".
CALL STROB ;ПРОСТРОБИРУЕМ.
CALL PAUSA ;ПАУЗА.
RETURN
;=========================================
; 4. ВЫБОР РЕЖИМА ИНДИКАЦИИ.
;=========================================
VUBOR
BTFSS PORTA,PEJ ;ЕСЛИ КНОПКА НАЖАТА,
RETURN ;ТО ВЫБОРА НЕТ.
BCF FLAG,4 ;СБРОС ФЛАГА РЕЖИМА.
MOVFW REID ;ПО НОМЕРУ
ADDWF PC,1 ;ВЫБИРАЕМ ИНДИКАЦИЮ.
GOTO INDY ;ТЕМПЕРАТУРЫ УЛИЦА - ЧАСЫ.
GOTO INDD ;ДОМ - ЧАСЫ.
GOTO INYD ;ДОМ - УЛИЦА.
GOTO INDH ;УСТАНОВКА ЧАСОВ.
;=========================================
; 5. ВЫБОР РАЗРЯДА УСТАНОВКИ.
;=========================================
YCTA
BTFSS PORTA,YCT ;ЕСЛИ КНОПКА НАЖАТА,
RETURN ;ТО ВЫБОРА НЕТ.
BTFSS FLAG1,0 ;ЕСЛИ НЕТ УСТАНОВКИ,
RETURN ;ТО КНОПКА НЕ РАБОТАЕТ.
BCF FLAG,3 ;СБРОС ФЛАГА РЕЖИМА.
MOVFW KYPC ;ПО КУРСОРУ
ADDWF PC,1 ;НАХОДИМ РАЗРЯД.
GOTO YC0 ;
GOTO YC1 ;
GOTO YC3 ;
GOTO YC4 ;
GOTO YC7 ;
;==================================================
; 6. ТАБЛИЦЫ ПЕРЕВОДА ДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.
;==================================================
DEBIN
ADDWF PC,1
RETLW .0
RETLW .10
RETLW .20
RETLW .30
RETLW .40
RETLW .50
;=========================================
; 7. ФОРМИРОВАНИЕ СТРОБИРУЮЩЕГО ИМПУЛЬСА.
;=========================================
STROB
BSF PORTB,E ;ВКЛЮЧАЕМ СТРОБ-ИМПУЛЬС.
NOP
BCF PORTB,E ;ВЫКЛЮЧАЕМ СТРОБ.
RETURN
;=================================
; 8. ПЕРЕДАЧА КОМАНДЫ В ЖКИ.
;=================================
JEKOM
MOVWF TEMP ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
ANDLW B'11110000' ;ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "B".
CALL STROB ;ПРОСТРОБИРУЕМ.
CALL PUS ;ПАУЗА.
MOVFW TEMP
SWAPF TEMP,W ;
ANDLW B'11110000' ;ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
MOVWF PORTB ;ПЕРЕПИШЕМ В ПОРТ "B".
CALL STROB ;ПРОСТРОБИРУЕМ.
PUS
MOVLW .255 ;1 мс.
ADDLW -1
BTFSS STATUS,2
GOTO $-2
RETURN
PUSO
MOVLW .10 ;40 мкс.
ADDLW -1
BTFSS STATUS,2
GOTO $-2
RETURN
;===================================
; 9. ЗАПИСЬ ДАННЫХ В ЖКИ.
;===================================
JEDAT
MOVWF TEMP ;ПЕРЕПИШЕМ ЗНАЧЕНИЕ ВО ВРЕМЕННЫЙ РЕГИСТР.
ANDLW B'11110000' ;ЗАМАСКИРУЕМ МЛАДШИЕ РАЗРЯДЫ ПОД НОЛЬ.
ADDLW 30 ;ПЕРЕВОД В КОД ASCII, ТОЛЬКО ДЛЯ ЦИФР!
MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "B".
BSF PORTB,RS ;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ
;ДАННЫХ.
CALL STROB ;ПРОСТРОБИРУЕМ.
CALL PUSO ;ПАУЗА ДЛЯ ОСВОБОЖДЕНИЯ ЖКИ ОТ ЦИКЛА
;ЗАПИСИ.
MOVFW TEMP ;
SWAPF TEMP,0 ;ПОМЕНЯЕМ МЕСТАМИ ПОЛУБАЙТЫ.
ANDLW B'11110000' ;ЗАМАСКИРУЕМ СТАРШИЕ РАЗРЯДЫ ПОД НОЛЬ.
MOVWF PORTB ;ОСТАЛЬНЫЕ РАЗРЯДЫ ПЕРЕПИШЕМ В ПОРТ "B".
BSF PORTB,RS ;УСТАНОВИМ R/S НА РАЗРЕШЕНИЕ ЗАПИСИ
;ДАННЫХ.
CALL STROB ;ПРОСТРОБИРУЕМ.
GOTO PUSO ;ПАУЗА.
;==============================================================
; 10. ВЫВОД ЗНАЧЕНИЙ РЕГИСТРОВ НА ИНДИКАЦИЮ.
;==============================================================
JEKI
BTFSS FLAG1,0 ;ЕСЛИ НЕТ УСТАНОВКИ,
GOTO $+3 ;ТО ПРОПУСКАЕМ ИНДИКАЦИЮ КУРСОРА.
BTFSS FLAG,6 ;ЕСЛИ НЕ БЫЛО ИНДИКАЦИИ КУРСОРА,
GOTO JEKYC ;ТО ПРОИНДИЦИРУЕМ.
MOVLW 02 ;ВОЗВРАТ КУРСОРА В ИСХОДНОЕ СОСТОЯНИЕ.
CALL JEKOM ;ЗАПИШЕМ КОМАНДУ.
MOVLW B'10000000' ;КУРСОР НА 0 ПОЗИЦИЮ ПЕРВОЙ СТРОКИ.
CALL JEKOM ;ЗАПИШЕМ КОМАНДУ.
MOVLW .8 ;ЗАПИШЕМ ЧИСЛО ЗНАКОМЕСТ.
MOVWF COUN ;
MOVLW R1 ;АДРЕС ПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.
MOVWF FSR ;ПО КОСВЕННОЙ АДРЕСАЦИИ.
MOVFW INDF ;ИНДИЦИРУЕМ ЗНАЧЕНИЕ.
CALL JEDAT ;
DECF COUN,1 ;УМЕНЬШАЕМ СЧЕТЧИК.
BTFSC STATUS,2 ;ЕСЛИ УЖЕ 0,
GOTO $+3 ;ТО ПЕРЕХОДИМ НА ВТОРУЮ СТРОКУ.
INCF FSR,1 ;ИНАЧЕ ПРОИНДИЦИРУЕМ СЛЕДУЮЩИЙ
GOTO $-6 ;РЕГИСТР.
MOVLW B'11000000' ;ВТОРАЯ СТРОКА (УСЛОВНО 2Х8).0х0С0;
CALL JEKOM ;ЗАПИШЕМ КОМАНДУ.
MOVLW .8 ;ИНДИКАЦИЯ АНАЛОГИЧНА.
MOVWF COUN ;ИНДИКАЦИИ ПЕРВОЙ СТРОКИ.
INCF FSR,1 ;
MOVFW INDF ;
CALL JEDAT ;
DECF COUN,1 ;
BTFSS STATUS,2 ;
GOTO $-5 ;
BCF FLAG,6 ;
GOTO INIDS ;
;=======================================
; 11. ИНДИКАЦИЯ КУРСОРА.
;=======================================
JEKYC
MOVLW .14 ;РАЗРЕШАЕМ МИГАНИЕ КУРСОРА.
CALL JEKOM ;ЗАПИШЕМ КОМАНДУ.
CALL JEKYK ;НА ВЫБОР МИГАЮЩЕГО РАЗРЯДА.
CALL JEKOM ;ЗАПИШЕМ КОМАНДУ.
BSF FLAG,6 ;
GOTO INIDS ;
JEKYK
MOVFW KYPC ;РЕГИСТР КУРСОРА В РАБОЧИЙ.
ADDWF PC,1 ;ВТОРАЯ СТРОКА (УСЛОВНО 2х8) 0х0С0;
RETLW 0xC0 ;ДЕСЯТКИ ЧАСОВ.
RETLW 0xC1 ;ЕДИНИЦЫ ЧАСОВ.
RETLW 0xC3 ;ДЕСЯТКИ МИНУТ.
RETLW 0xC4 ;ЕДИНИЦЫ МИНУТ.
RETLW 0xC7 ;СБРОС МИНУТ И СЕКУНД.
;=======================================
; 12. ИНИЦИАЛИЗАЦИЯ DS ДЛЯ УЛИЦЫ.
;=======================================
INIDS
BTFSC FLAG1,1 ;ЕСЛИ УСТАНОВЛЕН ФЛАГ,
GOTO INIDSD ;ТО ИЗМЕРЯЕМ ТЕМПЕРАТУРУ В ДОМЕ.
BCF FLAG1,3 ;ДЛЯ УЛИЦЫ.
CALL HYL ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW 0xCC ;ПРОПУСК ПОСЫЛА НОМЕРА DS.
CALL POSIL ;ПОШЛЕМ.
MOVLW 0x44 ;РАЗРЕШАЕМ ПРЕОБРАЗОВАНИЕ.
CALL POSIL ;ПОШЛЕМ.
GOTO PRIEM ;НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYL
CALL WUX ;ВЫХОД НУЛЯ.
MOVLW .125 ;НУЛЕВОЙ ИМПУЛЬС
ADDLW -1 ;= 500 мкс.
BTFSS STATUS,2 ;
GOTO $-2 ;
CALL WXO ;ВЫХОД ЕДИНИЦЫ.
MOVLW .125 ;ИМПУЛЬС =
ADDLW -1 ;500 мкс.
BTFSS STATUS,2 ;
GOTO $-2 ;
RETURN
;=======================================
; 13. ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=======================================
WUX
BCF PORTA,DS ;
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
BCF TRISA^80H,DS ;НА ВЫХОД.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
RETURN
WXO
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
BSF TRISA^80H,DS ;НА ВХОД.
BCF STATUS,5 ;переходим в банк 0.
RETURN
;=======================================
; 14. ПРИЕМ 9 БИТ ИЗ DS УЛИЦЫ.
;=======================================
PRIEM
CALL HYL ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW 0xCC ;ПРОПУСК НОМЕРА.
CALL POSIL ;ПОСЫЛ.
MOVLW 0xBE ;ЧТЕНИЕ ТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALL POSIL ;ПОСЫЛ.
CALL PRIE ;НА ПРИЕМ.
BSF FLAG,1 ;УСТАНОВИМ 9 БИТ.
CALL PRI ;И ПРИМЕМ ЕГО.
BCF FLAG,1 ;СБРОСИМ ФЛАГ.
BTFSS TEMP,DS ;ЕСЛИ ПРИНЯТЫЙ БИТ = 0,
BCF FLAG,0 ;ТО УСТАНОВИМ ФЛАГ ПЛЮСА.
BTFSC TEMP,DS ;
BSF FLAG,0 ;ИЛИ МИНУСА.
BTFSS FLAG,0 ;ПРОПУСТИМ, ЕСЛИ МИНУС.
GOTO CXET ;ПОСЧИТАЕМ.
COMF LSB,0 ;ИНВЕРТИРУЕМ.
ADDLW .1 ;ПРИБАВИМ 1 И ПОЛУЧИМ
MOVWF LSB ;ОТРИЦАТЕЛЬНЫЕ ДАННЫЕ.
GOTO CXET ;НА ПЕРЕСЧЕТ.
PRIE
MOVLW .8
MOVWF COUN ;ЗАПИШЕМ ЧИСЛО БИТ.
CLRF LSB ;ОБНУЛИМ РЕГИСТР ПРИЕМА.
PRI
CALL WUX ;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALL WXO ;НА ПРИЕМ.
MOVLW .2 ;ЗАДЕРЖКА
CALL X4 ;8 мкс.
MOVFW PORTA ;ПЕРЕПИШЕМ
MOVWF TEMP ;ЗНАЧЕНИЕ ПОРТА.
BTFSC FLAG,1 ;ЕСЛИ ЭТО 9 БИТ,
RETURN ;ВЕРНЕМСЯ.
BTFSS TEMP,DS ;
BCF STATUS,0 ;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.
BTFSC TEMP,DS ;
BSF STATUS,0 ;ИЛИ ЕДИНИЦУ.
RRF LSB,1 ;ЗАПИШЕМ В РЕГИСТР.
MOVLW .15 ;ПАУЗА 60 мкс.
CALL X4 ;
DECFSZ COUN,1 ;УМЕНЬШИМ СЧЕТЧИК.
GOTO PRI ;ПОВТОРИМ ПРИЕМ.
RETURN ;ВЕРНЕМСЯ.
;===================================
; 15. ЗАДЕРЖКА мкс, УМНОЖЕННАЯ НА 4.
;===================================
X4
ADDLW -1 ;
BTFSS STATUS,2 ;
GOTO $-2 ;
RETURN ;
;===================================
; 16. ПОСЫЛ КОМАНДЫ В DS УЛИЦЫ.
;===================================
POSIL
MOVWF TEMP ;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
MOVLW .8 ;ЗАПИШЕМ ЧИСЛО БИТ.
MOVWF COUN ;
POSI
RRF TEMP,1 ;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.
BTFSS STATUS,0 ;ЕСЛИ ОН НУЛЕВОЙ,
GOTO W0 ;ПОШЛЕМ ИМПУЛЬС НУЛЯ.
GOTO W1 ;ИЛИ ЕДИНИЦЫ.
POS
DECFSZ COUN,1 ;УМЕНЬШАЕМ СЧЕТЧИК.
GOTO POSI ;НА СЛЕДУЮЩИЙ БИТ.
RETURN ;ВОЗВРАТ.
W0
CALL WUX ;УСТАНОВИМ ВЫХОД В НОЛЬ.
MOVLW .15 ;УДЕРЖИВАЕМ 60 мкс.
CALL X4 ;
CALL WXO ;НА ВХОД = 1 НА ВЫХОДЕ.
GOTO POS ;ПОВТОРИМ.
W1
CALL WUX ;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.
CALL WXO ;НА ВХОД = 1 НА ВЫХОДЕ.
MOVLW .15 ;УДЕРЖИВАЕМ 60 мкс.
CALL X4 ;
GOTO POS ;ПОВТОРИМ.
;==================================
; 17. СЧЕТ. ОБЩИЙ ДЛЯ ДОМА И УЛИЦЫ.
;==================================
CXET
MOVLW .251 ;ПО УМОЛЧАНИЮ
MOVWF SOT ;ЗНАК ПЛЮС.
BTFSS FLAG,0 ;ЕСЛИ 9 РАЗРЯД = 1,
GOTO $+3 ;
MOVLW .253 ;ТО УСТАНОВИМ ЗНАК МИНУС.
MOVWF SOT ;
BCF STATUS,0 ;
RRF LSB,1 ;ДЕЛИМ ТЕМПЕРАТУРУ НА 2.
BTFSS STATUS,0 ;ЕСЛИ МЛАДШИЙ РАЗРЯД = 1,
GOTO $+4 ;
MOVLW .5 ;ТО ДЕСЯТЫЕ
MOVWF DST ;РАВНЫ 5.
GOTO $+2 ;
CLRF DST ;ИЛИ = 0.
MOVFW LSB ;ПЕРЕКОДИРУЕМ ТЕКУЩЕЕ ЗНАЧЕНИЕ
MOVWF TEMP ;ИЗ 2-ГО В 2_10-Е.
CALL BIDE ;ТОЛЬКО ДО 99!
MOVWF DES ;
MOVFW TEMP ;
MOVWF EDI ;
BTFSS FLAG1,2 ;ЕСЛИ НЕТ ОДНОВРЕМЕННОЙ ИНДИКАЦИИ
GOTO POSLA ;ТЕМПЕРАТУРЫ, ТО ИДЕМ НА КНОПКИ.
;=======================================================
; 18. ПЕРЕЗАПИСЬ В РЕГИСТРЫ ПРИ ОДНОВРЕМЕННОЙ ИНДИКАЦИИ.
;=======================================================
DOM
BTFSS FLAG1,3 ;ЕСЛИ БЫЛО ИЗМЕРЕНИЕ НА УЛИЦЕ,
GOTO ULIZA ;ТО ИДЕМ НА УЛИЦУ.
MOVFW SOT ;ПЕРЕПИШЕМ ВСЕ ЗНАЧЕНИЯ
MOVWF SOTD ;РЕГИСТРОВ ПЕРЕКОДИРОВКИ
MOVFW DES ;В РЕГИСТРЫ ИНДИКАЦИИ.
MOVWF DESD ;ДЛЯ ДОМА.
MOVFW EDI ;
MOVWF EDID ;
MOVFW DST ;
MOVWF DSTD ;
GOTO POSLA ;ПОШЛЕМ НА КНОПКИ.
ULIZA
MOVFW SOT ;ДЛЯ УЛИЦЫ.
MOVWF SOTY ;
MOVFW DES ;
MOVWF DESY ;
MOVFW EDI ;
MOVWF EDIY ;
MOVFW DST ;
MOVWF DSTY ;
GOTO INIDSD ;ИЗМЕРЯЕМ ТЕМПЕРАТУРУ В ДОМЕ.
POSLA
CALL KHOP ;ПРОВЕРИМ КНОПКИ.
;=================================
; 19. ОЖИДАНИЕ ПРЕРЫВАНИЯ.
;=================================
JDEM
BCF INTCON,2 ;СБРОС ФЛАГА ПРЕРЫВАНИЯ.
BSF INTCON,7 ;РАЗРЕШАЕМ ПРЕРЫВАНИЯ.
BTFSS FLAG,2 ;ОЖИДАЕМ ПРЕРЫВАНИЯ.
GOTO $-1 ;0,5 сек.
BCF INTCON,7 ;ЗАПРЕЩАЕМ ПРЕРЫВАНИЯ.
BCF FLAG,2 ;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ.
GOTO JEKI ;НА ИНДИКАЦИЮ.
;=================================
; 20. ПРОВЕРКА КНОПОК.
;=================================
KHOP
BTFSC FLAG,3 ;ЕСЛИ РАНЕЕ БЫЛА НАЖАТА КНОПКА,
CALL YCTA ;ТО ИДЕМ НА УСТАНОВКУ РАЗРЯДА.
BTFSS PORTA,YCT ;ЕСЛИ КНОПКА НАЖАТА,
BSF FLAG,3 ;ПОСТАВИМ ФЛАГ.
BTFSC FLAG,5 ;ЕСЛИ РАНЕЕ БЫЛА НАЖАТА КНОПКА,
CALL KYPCY ;ТО ИДЕМ НА УСТАНОВКУ КУРСОРА.
BTFSS PORTA,PAZ ;ЕСЛИ КНОПКА НАЖАТА,
BSF FLAG,5 ;ПОСТАВИМ ФЛАГ.
BTFSS PORTA,PEJ ;ЕСЛИ КНОПКА НАЖАТА,
BSF FLAG,4 ;ПОСТАВИМ ФЛАГ.
BTFSS FLAG,4 ;ЕСЛИ КНОПКА НЕ БЫЛА НАЖАТА,
GOTO VUBOR ;ТО ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
BTFSS PORTA,PEJ ;ЕСЛИ КНОПКА НАЖАТА,
GOTO VUBOR ;ТО ИДЕМ НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
BCF FLAG,4 ;СБРОСИМ ФЛАГ РЕЖИМА.
INCF REID,1 ;ИЗМЕНЕНИЕ РЕЖИМА ИНДИКАЦИИ.
MOVLW .4 ;4 РЕЖИМА ИНДИКАЦИИ.
SUBWF REID,0 ;ЕСЛИ БОЛЬШЕ,
BTFSS STATUS,2 ;ТО ПОЙДЕМ НА СБРОС.
GOTO VUBOR ;НА ЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
CLRF REID ;СБРОС РЕЖИМА.
BCF FLAG1,0 ;СБРОС УСТАНОВКИ ЧАСОВ.
GOTO VUBOR ;НА ВЫБОР РЕЖИМА ИНДИКАЦИИ.
;=================================================
; 21. УСТАНОВКА КУРСОРА (ВЫБОР РАЗРЯДА УСТАНОВКИ).
;=================================================
KYPCY
BTFSS FLAG1,0 ;УСТАНОВКА ВОЗМОЖНА,
RETURN ;ЕСЛИ ИНДИКАЦИЯ УСТАНОВКИ.
BTFSS PORTA,PAZ ;ПРИ НАЖАТОЙ КНОПКЕ
RETURN ;СТАНОВКА НЕ МЕНЯЕТСЯ.
BTFSS FLAG,5 ;ПРОДУБЛИРУЕМ СОСТОЯНИЕ
RETURN ;ФЛАГА.
BCF FLAG,5 ;СБРОСИМ ЕГО.
INCF KYPC,1 ;ПРИБАВИМ ЕДИНИЦУ В КУРСОР.
MOVLW .5 ;НЕ БОЛЕЕ 5.
SUBWF KYPC,0 ;
SKPC ;
RETURN ;
CLRF KYPC ;ИНАЧЕ ОБНУЛИМ КУРСОР.
RETURN ;
;====================================
; 22. УСТАНОВКА ЧАСОВ.
;====================================
YC0
INCF HOUH,1 ;УВЕЛИЧИМ ДЕСЯТКИ ЧАСОВ.
MOVLW .3 ;НЕ БОЛЕЕ 2.
SUBWF HOUH,0 ;
SKPNC ;
CLRF HOUH ;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.
MOVFW HOUH ;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALL DEBIN ;КОД ДЕСЯТКИ.
ADDWF HOUL,0 ;ПРИБАВИМ ЕДИНИЦЫ
MOVWF HOU ;И ПОЛУЧИМ ДВОИЧНОЕ ЧИСЛО.
RETURN ;ВЕРНЕМСЯ.
YC1
INCF HOUL,1 ;УВЕЛИЧИМ ЕДИНИЦЫ ЧАСОВ.
MOVLW .10 ;НЕ БОЛЕЕ 9.
SUBWF HOUL,0 ;
SKPNC ;
CLRF HOUL ;ЕСЛИ БОЛЬШЕ, ТО ОБНУЛИМ.
MOVFW HOUH ;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALL DEBIN ;КОД ДЕСЯТКИ.
ADDWF HOUL,0 ;ПРИБАВИМ ЕДИНИЦЫ
MOVWF HOU ;ДВОИЧНОЕ ЗНАЧЕНИЕ НЕ ДОЛЖНО
ADDLW -18H ;ПРЕВЫШАТЬ - 24.
SKPC ;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 24,
RETURN
CLRF HOU ;ТО ОБНУЛИМ ЧАСЫ ДВОИЧНЫЕ
CLRF HOUL ;И РАЗРЯДЫ СТАРШИЙ
CLRF HOUH ;И МЛАДШИЙ.
RETURN
YC3
INCF MINH,1 ;УВЕЛИЧИМ ДЕСЯТКИ МИНУТ.
MOVLW .6 ;НЕ БОЛЕЕ 5.
SUBWF MINH,0 ;
SKPNC ;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 6,
CLRF MINH ;ТО ОБНУЛИМ.
MOVFW MINH ;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALL DEBIN ;КОД ДЕСЯТКИ.
ADDWF MINL,0 ;ПРИБАВИМ ЕДИНИЦЫ И
MOVWF MIN ;ЗАПИШЕМ В ДВОИЧНОМ КОДЕ.
RETURN
YC4
INCF MINL,1 ;УВЕЛИЧИМ ЕДИНИЦЫ МИНУТ.
MOVLW .10 ;НЕ БОЛЕЕ 9.
SUBWF MINL,0 ;
SKPNC ;ЕСЛИ БОЛЬШЕ ИЛИ РАВНО 10,
CLRF MINL ;ТО ОБНУЛИМ.
MOVFW MINH ;ПЕРЕКОДИРУЕМ В ДВОИЧНЫЙ
CALL DEBIN ;КОД ДЕСЯТКИ.
ADDWF MINL,0 ;ПРИБАВИМ ЕДИНИЦЫ И
MOVWF MIN ;ЗАПИШЕМ В ДВОИЧНОМ КОДЕ.
RETURN
YC7
CLRF MIN ;ОБНУЛЕНИЕ РЕГИСТРОВ
CLRF MINL ;МИНУТ И СЕКУНД
CLRF MINH ;ПРИ УСТАНОВКЕ ПО СИГНАЛАМ
CLRF SEC ;ТОЧНОГО ВРЕМЕНИ.
RETURN
;=========================================
; 23. ПЕРЕКОДИРОВКА ИЗ 2-ГО В 2_10.
;=========================================
BIDE ;ПЕРЕКОДИРОВКА ДЕСЯТКОВ
CLRF COU ;ОБНУЛЯЕМ СЧЕТЧИК.
ADDLW -.10 ;ВЫЧТЕМ 10.
BTFSS STATUS,0 ;ЕСЛИ ЕСТЬ ПЕРЕХОД ЧЕРЕЗ НОЛЬ,
GOTO $+4 ;ТО ЗАВЕРШАЕМ ПЕРЕКОДИРОВКУ.
MOVWF TEMP ;ИНАЧЕ ПЕРЕПИШЕМ НОВОЕ ЗНАЧЕНИЕ ВО
;ВРЕМЕННЫЙ.
INCF COU,1 ;УВЕЛИЧИМ СЧЕТЧИК.
GOTO $-5 ;ПОВТОРИМ ВЫЧИТАНИЕ.
MOVWF COU ;ЗНАЧЕНИЕ СЧЕТЧИКА (РАВНО ЧИСЛУ ДЕСЯТКОВ)
;ПЕРЕПИШЕМ В РАБОЧИЙ РЕГИСТР.
RETURN ;ВЕРНЕМСЯ.
;==========================================
; 24. ПЕРЕЗАПИСЬ В РЕГИСТРЫ ИНДИКАЦИИ.
;==========================================
INDD
BCF FLAG1,0 ;СБРОС ИНДИКАЦИИ УСТАНОВКИ.
BSF FLAG1,1 ;УСТАНОВКА ФЛАГА ИНДИКАЦИИ ДОМ.
IND
MOVFW SOT ;ЗНАК.
MOVWF R1 ;
MOVFW DES ;ДЕСЯТКИ.
MOVWF R2 ;
MOVFW EDI ;ЕДИНИЦЫ.
MOVWF R3 ;
MOVLW .252 ;ЗАПЯТАЯ.
MOVWF R4 ;
MOVFW DST ;ДЕСЯТЫЕ.
MOVWF R5 ;
BTFSS FLAG1,1 ;ЕСЛИ ДЛЯ ДОМА,
GOTO $+6 ;ТО ПРОПУСКАЕМ БУКВУ У.
MOVLW .240 ;
MOVWF R6 ;
MOVWF R7 ;
MOVWF R8 ;
GOTO IND2 ;
MOVLW .73 ;УСТАНОВИМ БУКВУ У.
MOVWF R6 ;
MOVLW .240 ;
MOVWF R7 ;
MOVWF R8 ;
IND2
MOVFW HOUH ;ДЕСЯТКИ ЧАСОВ.
MOVWF R9 ;
MOVFW HOUL ;ЕДИНИЦЫ ЧАСОВ.
MOVWF R10 ;
MOVLW .253 ;ЧЕРТА-.
MOVWF R11 ;
MOVFW MINH ;ДЕСЯТКИ МИНУТ.
MOVWF R12 ;
MOVFW MINL ;ЕДИНИЦЫ МИНУТ.
MOVWF R13 ;
MOVLW .253 ;ЧЕРТА-.
MOVWF R14 ;
MOVFW SECH ;ДЕСЯТКИ СЕКУНД.
MOVWF R15 ;
MOVFW SECL ;ЕДИНИЦЫ СЕКУНД.
MOVWF R16 ;
RETURN ;НА ИНДИКАЦИЮ.
INDH
BCF FLAG1,2 ;СБРОСИМ ИНДИКАЦИЮ УЛИЦА-ДОМ.
BSF FLAG1,0 ;ИНДИКАЦИЯ УСТАНОВКИ ЧАСОВ.
MOVLW .123 ;БУКВЫ: Ч
MOVWF R1 ;
MOVLW .17 ;А
MOVWF R2 ;
MOVLW .19 ;С
MOVWF R3 ;
MOVLW .126 ;Ы
MOVWF R4 ;
MOVLW .240 ;ПУСТО
MOVWF R5 ;
MOVWF R6 ;
MOVWF R7 ;
MOVWF R8 ;
GOTO IND2 ;НА ЗАПИСЬ ВТОРОЙ СТРОКИ.
INDY
BCF FLAG1,1 ;СБРОСИМ ФЛАГ ДОМ.
GOTO IND ;ПЕРЕПИШЕМ ДЛЯ УЛИЦЫ.
INYD
BCF FLAG1,1 ;СБРОСИМ ФЛАГ ДОМ.
BSF FLAG1,2 ;УСТАНОВИМ ФЛАГ УЛИЦА-ДОМ.
MOVFW SOTY ;ЗНАК ДЛЯ УЛИЦЫ.
MOVWF R1 ;
MOVFW DESY ;ДЕСЯТКИ.
MOVWF R2 ;
MOVFW EDIY ;ЕДИНИЦЫ.
MOVWF R3 ;
MOVLW .252 ;ЗАПЯТАЯ.
MOVWF R4 ;
MOVFW DSTY ;ДЕСЯТЫЕ.
MOVWF R5 ;
MOVLW .73 ;УСТАНОВИМ БУКВУ у.
MOVWF R6 ;
MOVLW .240 ;
MOVWF R7 ;
MOVWF R8 ;
MOVFW SOTD ;ЗНАК ДЛЯ ДОМА.
MOVWF R9 ;
MOVFW DESD ;ДЕСЯТКИ.
MOVWF R10 ;
MOVFW EDID ;ЕДИНИЦЫ.
MOVWF R11 ;
MOVLW .252 ;ЗАПЯТАЯ.
MOVWF R12 ;
MOVFW DSTD ;ДЕСЯТЫЕ.
MOVWF R13 ;
MOVLW .240 ;
MOVWF R14 ;
MOVWF R15 ;
MOVWF R16 ;
RETURN ;НА ИНДИКАЦИЮ.
;===================================================================
; 25. СОХРАНЕНИЕ И ВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.
;===================================================================
PRER
MOVWF WTEMP ;СОХРАНЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ W И
MOVFW STATUS ;STATUS,
MOVWF STEMP ;
MOVFW FSR ;FSR.
MOVWF FTEMP ;
CALL S1 ;
REPER ;ВОССТАНОВЛЕНИЕ СОХРАНЕННЫХ ЗНАЧЕНИЙ.
MOVFW STEMP ;ВОССТАНОВЛЕНИЕ РЕГИСТРОВ:
MOVWF STATUS ;STATUS,
MOVFW FTEMP ;
MOVWF FSR ;FSR,
MOVLW .6 ;
MOVWF TMR0 ;
MOVFW WTEMP ;W.
BCF INTCON,2 ;СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.
RETFIE ;ВОЗВРАТ ИЗ ПРЕРЫВАНИЯ.
;========================================================
; 26. ПП. ПЕРЕКОДИРОВКИ С БИНАРНОГО В 2-10 КОД (2-_2-10).
;========================================================
BINDECH
MOVLW .10 ;10 >W.
BDH
BSF STATUS,0 ;УСТАНОВКА БИТА "С" РЕГИСТРА STATUS.
SUBWF DSMH,1 ;ВЫЧИТАЕМ ИЗ РЕГИСТРА 10 > DSMH.
BNC BINDECL ;ПЕРЕХОД, ЕСЛИ НЕТ ПЕРЕНОСА.
INCF HSMH,1 ;ПРИБАВИМ 1 К СТАРШЕМУ РЕГИСТРУ.
GOTO BDH ;ПОВТОРИТЬ.
BINDECL
MOVF DSMH,0 ;
ADDLW .10 ;10+W >W.
MOVWF LSMH ;ЗАПИСЬ ОСТАТКА В МЛАДШИЙ РЕГИСТР.
RETURN ;
;==========================================
; 27. СЧЕТ И ПЕРЕКОДИРОВКА РЕГИСТРОВ Ч-М-С.
;==========================================
S1
BSF FLAG,2 ;УСТАНОВИМ ФЛАГ ПРЕРЫВАНИЯ.
INCF MCK,1 ;ПРИБАВИМ 1 В РЕГИСТР МИЛЛИСЕКУНД.
MOVFW MCK ;
ADDLW -8 ;СЧИТАЕМ ДО 8.
BTFSS STATUS,2 ;
RETURN ;
CLRF MCK ;ОБНУЛИМ.
BTFSC FLAG,7 ;РАЗДЕЛИМ НА 2.
GOTO $+3 ;
BSF FLAG,7 ;
RETURN ;
BCF FLAG,7 ;ОБНУЛИМ ДЕЛИТЕЛЬ.
;
MOVFW SEC ;ЗАГРУЗКА ЗНАЧЕНИЙ СЕКУНД В РАБ. РЕГИСТР.
ADDLW -3BH ;ВЫЧЕСТЬ ИЗ РЕГИСТРА 59.
BZ M1 ;СРАВНИТЬ НА 0. ЕСЛИ РАВНО, ПЕРЕЙТИ НА M1,
INCF SEC,1 ;ИНАЧЕ ПРИБАВИТЬ 1 В РЕГИСТР СЕКУНД.
S1U
MOVFW SEC ;SEC1 >W.
MOVWF DSMH ;W >DSMH.
CALL BINDECH ;ПЕРЕХОД В ПП. ПЕРЕКОДИРОВКИ.
MOVFW LSMH ;LSMH >W ВРЕМЕННЫЙ.
MOVWF SECL ;W > S_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ
;СЕКУНД.
MOVFW HSMH ;HSMH >W ВРЕМЕННЫЙ.
MOVWF SECH ;W > S_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ
;СЕКУНД.
CLRF HSMH ;ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH ;ОБНУЛЕНИЕ МЛ. РЕГ. ПП.
RETURN ;
M1
CLRF SEC ;ОБНУЛЕНИЕ РЕГИСТРА СЕКУНД.
CLRF SECL ;ОБНУЛЕНИЕ ЕДИНИЦ СЕКУНД.
CLRF SECH ;ОБНУЛЕНИЕ ДЕСЯТКОВ СЕКУНД.
M1M
MOVFW MIN ;ЗАГРУЗКА МИНУТ В РАБ. РЕГИСТР.
ADDLW -3BH ;-59.
BZ H1 ;СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H1.
INCF MIN,1 ;ПРИБАВИТЬ 1 В МИНУТЫ.
MOVFW MIN ;MIN1 >W.
M1U
MOVWF DSMH ;W >DSMH.
CALL BINDECH ;ПЕРЕХОД В ПП. ПЕРЕКОДИРОВКИ.
MOVFW LSMH ;LSMH >W ВРЕМЕННЫЙ.
MOVWF MINL ;W > M_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ
;МИНУТ.
MOVFW HSMH ;HSMH >W ВРЕМЕННЫЙ.
MOVWF MINH ;W > M_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ
;МИНУТ.
CLRF HSMH ;ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH ;ОБНУЛЕНИЕ МЛ. РЕГ. ПП.
RETURN ;
H1
CLRF MIN ;ОБНУЛЯЕМ РЕГИСТР МИНУТ.
CLRF MINL ;ОБНУЛЯЕМ ЕДИНИЦЫ МИНУТ ИНДИКАЦИИ.
CLRF MINH ;ОБНУЛЯЕМ ДЕСЯТКИ МИНУТ ИНДИКАЦИИ.
H1H
MOVFW HOU ;ЗАГРУЗКА ЧАСОВ В РАБ. РЕГИСТР.
ADDLW -17H ;-23.
BZ H10 ;СРАВНИТЬ НА 0, ЕСЛИ РАВНО, ПЕРЕЙТИ НА H10.
INCF HOU,1 ;ПРИБАВИТЬ 1 В ЧАСЫ.
H1H1
MOVFW HOU ;HOU >W.
H1U
MOVWF DSMH ;W >DSMH.
CALL BINDECH ;ПЕРЕХОД В ПП.
MOVFW LSMH ;LSMH >W ВРЕМЕННЫЙ.
MOVWF HOUL ;W > H_LOW В РЕГИСТР ИНДИКАЦИИ ЕДИНИЦ
;ЧАСОВ.
MOVFW HSMH ;HSMH >W ВРЕМЕННЫЙ.
MOVWF HOUH ;W > H_HIGH В РЕГИСТР ИНДИКАЦИИ ДЕСЯТКОВ
;ЧАСОВ.
CLRF HSMH ;ОБНУЛЕНИЕ СТ. РЕГ. ПП.
CLRF LSMH ;ОБНУЛЕНИЕ МЛ. РЕГ. ПП.
RETURN ;
H10
CLRF HOU ;ОБНУЛЕНИЕ РЕГИСТРА ЧАСОВ.
CLRF HOUL ;ОБНУЛЕНИЕ ЕДИНИЦ ЧАСОВ.
CLRF HOUH ;ОБНУЛЕНИЕ ДЕСЯТКОВ ЧАСОВ.
RETURN
;========================================
; 28. ИНИЦИАЛИЗАЦИЯ DS ДЛЯ ДОМА.
;========================================
INIDSD
BSF FLAG1,3 ;ДЛЯ ДОМА.
CALL HYLD ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW 0xCC ;ПРОПУСК ПОСЫЛА НОМЕРА DS.
CALL POSILD ;ПОШЛЕМ.
MOVLW 0x44 ;РАЗРЕШАЕМ ПРЕОБРАЗОВАНИЕ.
CALL POSILD ;ПОШЛЕМ.
GOTO PRIEMD ;НА ПРИЕМ ТЕМПЕРАТУРЫ.
HYLD
CALL WUXD ;ВЫХОД НУЛЯ.
MOVLW .125 ;НУЛЕВОЙ ИМПУЛЬС
ADDLW -1 ;= 500 мкс.
BTFSS STATUS,2 ;
GOTO $-2 ;
CALL WXOD ;ВЫХОД ЕДИНИЦЫ.
MOVLW .125 ;ИМПУЛЬС =
ADDLW -1 ;500 мск.
BTFSS STATUS,2 ;
GOTO $-2 ;
RETURN
;=======================================
; 29. ИЗМЕНЕНИЕ ВХОДА НА ПРИЕМ/ПЕРЕДАЧУ.
;=======================================
WUXD
BCF PORTA,DSD ;
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
BCF TRISA^80H,DSD ;НА ВЫХОД.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
RETURN
WXOD
BSF STATUS,5 ;ПЕРЕХОДИМ В БАНК 1.
BSF TRISA^80H,DSD ;НА ВХОД.
BCF STATUS,5 ;ПЕРЕХОДИМ В БАНК 0.
RETURN
;==================================
; 30. ПРИЕМ 9 БИТ ИЗ DS ДЛЯ ДОМА.
;==================================
PRIEMD
CALL HYLD ;ПОСЫЛ ИМПУЛЬСА ОБНУЛЕНИЯ.
MOVLW 0xCC ;ПРОПУСК НОМЕРА.
CALL POSILD ;ПОСЫЛ.
MOVLW 0xBE ;ЧТЕНИЕ ТЕМПЕРАТУРЫ ИЗ БЛОКНОТА.
CALL POSILD ;ПОСЫЛ.
CALL PRIED ;НА ПРИЕМ.
BSF FLAG,1 ;УСТАНОВИМ 9 БИТ.
CALL PRID ;И ПРИМЕМ ЕГО.
BCF FLAG,1 ;СБРОСИМ ФЛАГ.
BTFSS TEMP,DSD ;ЕСЛИ ПРИНЯТЫЙ БИТ = 0,
BCF FLAG,0 ;ТО УСТАНОВИМ ФЛАГ ПЛЮСА.
BTFSC TEMP,DSD ;
BSF FLAG,0 ;ИЛИ МИНУСА.
BTFSS FLAG,0 ;ПРОПУСТИМ, ЕСЛИ ЗНАК МИНУС.
GOTO CXET ;ПОСЧИТАЕМ.
COMF LSB,0 ;ИНВЕРТИРУЕМ.
ADDLW .1 ;ПРИБАВИМ 1
MOVWF LSB ;ПОЛУЧИМ ОТРИЦАТЕЛЬНЫЕ ДАННЫЕ.
GOTO CXET ;НА ПЕРЕСЧЕТ.
PRIED
MOVLW .8
MOVWF COUN ;ЗАПИШЕМ ЧИСЛО БИТ.
CLRF LSB ;ОБНУЛИМ РЕГИСТР ПРИЕМА.
PRID
CALL WUXD ;ВЫДАЕМ КОРОТКИЙ НОЛЬ И ЖДЕМ ОТКЛИКА.
CALL WXOD ;НА ПРИЕМ.
MOVLW .2 ;ЗАДЕРЖКА
CALL X4 ;8 мкс.
MOVFW PORTA ;ПЕРЕПИШЕМ
MOVWF TEMP ;ЗНАЧЕНИЕ ПОРТА.
BTFSC FLAG,1 ;ЕСЛИ ЭТО 9 БИТ,
RETURN ;ВЕРНЕМСЯ.
BTFSS TEMP,DSD ;
BCF STATUS,0 ;УСТАНОВИМ БИТ ПРИЕМА В НОЛЬ.
BTFSC TEMP,DSD ;
BSF STATUS,0 ;ИЛИ ЕДИНИЦУ.
RRF LSB,1 ;ЗАПИШЕМ В РЕГИСТР.
MOVLW .15 ;ПАУЗА 60 мкс.
CALL X4 ;
DECFSZ COUN,1 ;УМЕНЬШИМ СЧЕТЧИК.
GOTO PRID ;ПОВТОРИМ ПРИЕМ.
RETURN ;ВЕРНЕМСЯ.
;=============================================
; 31. ПОСЫЛ КОМАНДЫ В DS ДЛЯ ДОМА.
;=============================================
POSILD
MOVWF TEMP ;ПЕРЕПИШЕМ ВО ВРЕМЕННЫЙ.
MOVLW .8 ;ЗАПИШЕМ ЧИСЛО БИТ.
MOVWF COUN ;
POSID
RRF TEMP,1 ;ВЫТОЛКНЕМ МЛАДШИЙ БИТ.
BTFSS STATUS,0 ;ЕСЛИ ОН НУЛЕВОЙ,
GOTO W0D ;ПОШЛЕМ ИМПУЛЬС НУЛЯ.
GOTO W1D ;ИЛИ ЕДИНИЦЫ.
POSD
DECFSZ COUN,1 ;УМЕНЬШАЕМ СЧЕТЧИК.
GOTO POSID ;НА СЛЕДУЮЩИЙ БИТ.
RETURN ;ВОЗВРАТ.
W0D
CALL WUXD ;УСТАНОВИМ ВЫХОД В НОЛЬ.
MOVLW .15 ;УДЕРЖИВАЕМ 60 мкс.
CALL X4 ;
CALL WXOD ;НА ВХОД = 1 НА ВЫХОДЕ.
GOTO POSD ;ПОВТОРИМ.
W1D
CALL WUXD ;КОРОТКИЙ НУЛЕВОЙ ИМПУЛЬС.
CALL WXOD ;НА ВХОД = 1 НА ВЫХОДЕ.
MOVLW .15 ;УДЕРЖИВАЕМ 60 мкс.
CALL X4 ;
GOTO POSD ;ПОВТОРИМ.
;=====================================
END
;=====================================
Размещено на Allbest
Подобные документы
Функциональная спецификация и структурная схема электронных автомобильных часов-термометра-вольтметра. Разработка алгоритма работы и принципиальной электрической схемы. Получение прошивки программы для памяти микроконтроллера в результате ассеблирования.
курсовая работа [2,0 M], добавлен 26.12.2009Функциональная спецификация и структурная схема автомобильных вольтметра-термометра-часов. Описание ресурсов микроконтроллера, назначение выводов микросхемы. Ассемблирование и разработка алгоритма работы, коды кнопок и описание команд управления.
курсовая работа [2,0 M], добавлен 27.12.2009Особенности разработки и алгоритм программы для микроконтроллера АVR-Mega 128, выполняющую измерение температуры с помощью датчика ТМР-35 в режиме непрерывного преобразования. Синтез и описание схемы электрической принципиальной цифрового термометра.
курсовая работа [891,0 K], добавлен 11.04.2010Разработка малогабаритного автомобильного термометра на базе микроконтроллера и требования к нему. Проектирование функциональной схемы, работа измерителя. Выбор элементной базы. Схема включения усилителя. Архитектура и элементы микроконтроллера.
контрольная работа [841,4 K], добавлен 22.05.2015Описание схемы электрической принципиальной "USB-термометр". Структура микроконтроллера, программный продукт для него. Обоснование элементной базы. Проектирование резистивной микросборки. Компоновка изделия, расчет на надежность и технологичность.
курсовая работа [2,3 M], добавлен 07.09.2012Этапы разработки микропроцессорной системы на основе микроконтроллера. Общая характеристика солнечных часов. Разработка схемы, программного обеспечения и алгоритма управления солнечных часов. Технико-экономическое обоснование разработки и охрана труда.
дипломная работа [5,9 M], добавлен 16.07.2010Функциональная спецификация, описание объекта, структура системы и ресурсов микроконтроллера. Ассемблирование, программирование микроконтроллера и разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы.
курсовая работа [2,2 M], добавлен 02.01.2010Создание микропроцессорной системы на базе микроконтроллера, предназначенного для функциональной диагностики цифровых и интегральных микросхем. Разработка и расчёт блоков микроконтроллера, сопряжения, управления, питания, цифровой и диодной индикации.
курсовая работа [1,5 M], добавлен 28.01.2016Построение структурной, функциональной и принципиальной схем электронного термометра на основе микроконтороллера, выбор элементной базы, оптимальной для реализации поставленных задач по диапазону характеристик, алгоритм работы системы и программный код.
курсовая работа [2,4 M], добавлен 27.12.2009Порядок описания и разработки структурной и функциональной схемы микропроцессорной системы на основе микроконтроллера К1816ВЕ31. Обоснование выбора элементов, разработка принципиальной схемы данной системы, программы инициализации основных компонентов.
курсовая работа [260,4 K], добавлен 16.12.2010