Реферат: Автомобильные часы-термометр-вольтметр на базе микроконтроллера

 

КУРСОВОЙПРОЕКТ

Автомобильные часы-термометр-вольтметрна базе микроконтроллера

 


Содержание

Введение

1. Описание объекта ифункциональная спецификация

2. Описаниеструктуры системы

3. Описание ресурсов МК AT89C2051

4. Ассемблирование

5. Разработкаалгоритма работы устройства

6. Описание выбора элементной базы и работы принципиальной схемы

Заключение

Список литературы

Приложение. Листинг программыи объектный файл

 


Введение

Современнуюмикроэлектронику трудно представить без такой важной составляющей, какмикроконтроллеры. Микроконтроллеры незаметно завоевали весь мир. Микроконтроллерныетехнологии очень эффективны. Одно и то же устройство, которое раньше собиралосьна традиционных элементах, будучи собрано с применением микроконтроллеров,становится проще, не требует регулировки и меньше по размерам. С применениеммикроконтроллеров появляются практически безграничные возможности по добавлениюновых потребительских функций и возможностей к уже существующим устройствам.Для этого достаточно просто изменить программу.

Однокристальные(однокорпусные) микроконтроллеры представляют собой приборы, конструктивновыполненные в виде БИС и включающие в себя следующие составные части:микропроцессор, память программ и память данных, а также программируемыеинтерфейсные схемы для связи с внешней средой.

Мировая промышленностьвыпускает огромную номенклатуру микроконтроллеров. По области применения ихможно разделить на два класса: специализированные, предназначенные дляприменения в какой-либо одной конкретной области (контроллер для телевизора, контроллердля модема, контроллер для компьютерной мышки ) и универсальные, которые неимеют конкретной специализации и могут применяться в самых различных областяхмикроэлектроники, с помощью которых можно создать как любое из перечисленныхвыше устройств, так и принципиально новое устройство.

Цель курсового проекта –разработка микропроцессорной системы автомобильные часы-термометр-вольтметр набазе микроконтроллера.

 


1. Описание объекта ифункциональная спецификация

 

Данное устройствопредназначено для использования в автомобиле.

Основой устройстваявляется микроконтроллер AT89C2051 фирмы «Atmel». Для отображения информациииспользуется жидкокристаллический индикатор типа ЖКИ13-8/7-02. Несмотря на то,что в настоящее время доступны ЖКИ с встроенными контроллерами, иногдаоказывается целесообразным применение специального ЖКИ. Причин может бытьнесколько. Распространенные ЖКИ со встроенными контроллерами обладают целымрядом недостатков: отсутствие десятичных точек, плохой угол обзора,недостаточный в некоторых случаях размер символов. В то же время существуетдоступная и довольно удобная в использовании микросхема драйвера ЖКИ КР1820ВГ1.Она выпускается Минским ПО «Интеграл».

Рассмотренное в этой работе устройство устанавливается вавтомобиле для индикации времени, контроля заряда аккумулятора и регистрациитемпературы. Диапазон контролируемого напряжения можно выбрать любой, однако впрограмме он установлен в пределах от 12,0 В до 15,0 В, а при отклонении отэтих значений напряжения включается зуммер.

Функциональнаяспецификация

1.    Входы

a.    4 датчика температуры

b.    Кнопка запуска (включение питания)

c.    Панель управленияс сенсорным переключателем и ИФ приемником

2.    Выходы

a.    Жидкокристаллический индикатор

b.    Звуковой динамик

3.    Функции

a.    индикация текущеговремени

b.    будильник

c.    таймер

d.    индикация температуры вчетырех точках

e.    звуковаясигнализация при повышении температуры

f.    индикациянапряжения в бортовой сети автомобиля

g.    звуковая сигнализация припадении напряжения бортовой сети

h.    управление режимамиработы устройства с помощью ИК-пульта

2.Описаниеструктуры системы

Послеопределения входов и выходов устройства разработана структурная схемаустройства. Структурная схема автомобильных вольтметра-термометра-часовприведена на рис. 1.

/> /> /> /> /> /> /> /> /> />

/>/>/>

Термодатчик №2

   Громкоговоритель

/>

 


Рис. 1. Структурнаясхема автомобильных часов-термометра-вольтметра


3. Описание ресурсовМК AT89C2051

 

AT89C2051разработан по технологии КМОП. Микроконтроллер оснащенный Flash программируемыми стираемым ПЗУ, а также совместим по системе команд и по выводам состандартными приборами семейства MCS-51. Объем Flash ПЗУ — 2 Кбайта, ОЗУ — 128байтов. Имеет 15 линий ввода/вывода, один 16-разрядный таймера/счетчикасобытий, полнодуплексный порт (UART) пять векторных двухуровневых прерываний,встроенный прецизионный аналоговый компаратор, встроенные генератор и схемуформирования тактовой последовательности. Напряжение программирования Flashпамяти — 12 В и ее содержимие может быть защищено от несанкционированныхзаписи/считывания. Имеется возможность очистки Flash памяти за одну операцию ивозможность считывания встроенного кода идентификации. Ток потребления вактивном режиме на частоте 12 МГц не превышает 15 мА при 6 В и 5,5 мА принапряжении питания 3 В. В пассивном режиме (ЦПУ остановленно, но системапрерываний, ОЗУ, таймер/счетчик событий и последовательный порт остаютсяактивными) потребление не превышает 5 мА и 1мА. В стоповом режиме токпотребления не превышает 100 мкА и 20 мкА при напряжении питания 6 В и 3 В,соответственно. Микроконтроллер AT89C2051 ориентирован на использование вкачестве встроенного управляющего контороллера.

Дляпитания устройства используется интегральный стабилизатор U5 типа 7805.Потребляемый устройством ток очень небольшой, поэтому радиатор для этоймикросхемы не нужен.

Посколькумикросхемы контроллера ЖКИ требуют небольшого количества сигналов для связи смикроконтроллером, индикатор можно выполнить конструктивно в отдельном корпусеминимального размера и расположить его в удобном для обозрения месте. Проводадатчиков температуры могут иметь длину несколько метров. При этом обязательнодолжен присутствовать земляной провод. Использовать в качестве земли кузовавтомобиля нежелательно. Удобно для термометров использовать аудио кабель,который имеет два провода в общем экране, изолированном снаружи.

AT89C2051 — 8-разрядный микроконтроллер с Flash ПЗУ/>

Рис.2.Структурная схема AT89C2051

 

МикроконтроллерAT89C51 построен по процессорной архитектуре MCS-51, т.е. он умеет выполнятьассемблерные команды описанные этим стандартом. Стандарт был разработан фирмойINTEL и в дальнейшем стал основой для создания современных INTEL процессоров,но проблема создания маленьких устройств (микроконтроллерных систем) осталасьактуальной и по сей день. В результате первые миниатюрные процессорыэксплуатируется до сих пор (например в телефонах АОН).

Цифры 31 или51 в названии процессора (контроллера) указывают на принадлежность к системекоманд MCS-51 (31 в отличии от 51, не имеет возможности использовать порт P0 иP2 как порты — на 31 кристалле это только адресные линии и линии данных внешнихустройств [ПЗУ, ОЗУ, Регистров...] = 51 же кристалл имеет возможность незадействованныевыводы адресов использовать как выводы портов ввода — вывода). Цифра 80 вначале указывает на то, что исполняемая программа может быть размещена тольково внешней ПЗУ. Цифра 83,87 или 89 указывает, что программа может быть как вовнешней ПЗУ, так и в ПЗУ кристалла (это более поздние модели 1990-е годы, уженаучились ПЗУ делать на одной подложке вместе с самим процессором), 83 — масочная ПЗУ (программируется на заводе изготовителе — например контроллерклавиатуры AT-XT), 87 — однократно программируемая ПЗУ на кристалле процессорав корпусе из пластика или многократно (до 100 раз ) перепрограммируемая ПЗУ накристалле в керамическом корпусе и окошком для УФ стирания. 89 — многократно(до 10000 раз ) перепрограммируемая ПЗУ на кристалле, электрически стираемая. AT-название фирмы изготовителя ATMEL www.atmel.com/ или www.atmel.ru/ (русскоязычный сайт ATMEL). Кроме того это может быть DS — Dallas, N- Intel, P-Philips…Так что данная микросхема — это микропроцессор (правильнее сказать микроконтроллер)со встроенной ПЗУ, которую (ПЗУ внутри процессора) и надо запрограммировать,чтобы микросхема начала выполнять требуемые функции. Данный микроконтроллерпрограммируется стандартным программатором, поддерживающим программированиеэтого типа микроконтроллеров (например программатор UNIPRO).


/>

Рис.3.Общий вид выводов AT89C2051

4.Ассемблирование

Дляассемблирования используетсямакpоассемблеp MPASM, он содеpжит все необходимые нам возможности. MPASM входит в пакет программMicrochip MPLAB фирмы Microchip Technology.

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

Листинг программыи объектный файл приведен в Приложении.

/>


5.Разработка алгоритма работы устройства

Алгоритм работы программы показан на рис. 4. После запуска иинициализации микроконтроллера программа переходит к распределителю, в которомкаждую секунду последовательно измеряется напряжение, проверяются кнопки, ивыполняется вывод на индикацию. Прерывание от этой последовательности происходиткаждую секунду для подсчета времени в часах и таймере, если он включен.

После установки флага «Одна секунда» проверяетсябортовое напряжение. Если присутствует его отклонение от установленного, товключается звуковой сигнал. Если отклонения нет, то измеренные значенияперекодируются для индикации в двоично-десятичный код.

Далее программа переходит к проверке кнопок. Поскольку кнопки —многофункциональные, то и их проверка несколько усложнена. Вначале проверяетсяфлаг индикации часов. Если индикация часов отсутствует, то кнопка установкикурсора «Разряд» не проверяется, а сразу проверяется кнопка«Режим». Если индикация часов включена и нажата кнопка«Разряд», то к регистру курсора прибавляется единица.

Если кнопка «Режим» нажата, то на единицу увеличиваетсярегистр режима. По значению регистра режима из таблицы выбирается режим индикации(рис. 5).

При индикации напряжения ранее перекодируемые значения напряженияпереписываются в регистры индикации.

При индикациичасов проверяется, был ли ранее введен курсор в поле индикатора. Если значениерегистра курсора — ненулевое, то выполняется установка часов. Если при этомнажата кнопка «Установка», то к выбранному разряду прибавляетсяединица, а регистры индикации заполняются новыми значениями. Если установкаотсутствует, то регистры индикации заполняются значениями текущего времени.


/>

Рис. 4.Алгоритм работы автомобильных часов (начало)


/>

Рис. 5. Алгоритм работы автомобильных часов (продолжение)

Однако заполненные регистры индикации еще не готовы к выводу на индикацию— в них необходимо записать значение курсора. Если значение курсора — ненулевое(т.е. он находится в поле индикатора), то он вводится в младший разряд регистраиндикации соответствующего знакоместа.

Если курсор в поле индикатора отсутствует, то обнуляется счетчикцикла записи, и первым импульсом выводится значение запятой для N-го разряда. В принципе,запятая в данном устройстве необходима только одна: для выделения десятых долейнапряжения, — однако подпрограмма вывода на индикацию универсальна, и потомунет смысла ее изменять. Значения запятых заранее записываются в позиционномкоде в регистр запятой (т.е. если необходимо высветить запятую в пятом разрядеиндикатора, то записывают единицу в пятый разряд регистра). При этом необходимопомнить, что первыми в импульсной последовательности идут значения крайнегосправа разряда.

После вывода запятой последовательно выводится значение N-ro регистра, начиная смладшего разряда. Затем прибавляется единица к счетчику циклов и, если егозначение не равно девяти, цикл вывода данных на индикатор повторяется соследующим регистром. После вывода значения последнего регистра программавозвращается к ожиданию установки флага «Одна секунда» во время прерывания.

Прерывание организовано обычным образом: по переполнению таймера TMR0. При частоте кварцевогорезонатора 32 768 Гц коэффициент деления предделителя составляет 32, что вместес коэффициентом деления таймера, равным 256, и циклом, равным 4, дает однусекунду (4x32x256 = 32 768).

6. Описание выбора элементной базы и работы принципиальнойсхемы

МикросхемаКР1820ВГ1 [1] используется для управления 36-сегментным ЖКИ в режиме3-уровневого мультиплексирования. Микросхема изготавливается по КМОП-технологиии выпускается в 20-выводном пластмассовом DIP-корпусе. Микросхема содержитвстроенный тактовый генератор, резистивный делитель напряжения и делителичастоты, с помощью которых формируются сигналы управления строками (общимиэлектродами) и столбцами (сегментными электродами) ЖКИ в режиме 3-уровневогомультиплексирования. Одна микросхема имеет три выхода управления строками и 12выходов управления столбцами. Предусмотрена возможность каскадирования схем,что позволяет использавать их для управления мультиплексным ЖКИ с числомсегментов более 36. Микросхема не требует никаких навесных компонентов иработает в диапазоне напряжения питания от 3 до 6 вольт. Назначение выводовмикросхемы КР1820ВГ1 показано в таблице 1.

Таблица 1. Назначение выводов микросхемыКР1820ВГ1.

Вывод Обозначение Тип Назначение 1...3 COB1, COC3, COB3 Выход Управление столбцами В1, С3, В3 4 CS Вход Выбор кристалла 5 Ucc - Напряжение источника питания 6 GND - Общий 7 D Вход Данные 8...13 COA2, COB4, COB2, COA1, COC2, COC4 Выход Управление столбцами A2, B4, B2, A1, C2, C4 14 C Вход Тактовый сигнал С 15 COA/G Выход Управление сторокой А (вход генератора G) 16 COC/G Выход Управление сторокой С (выход генератора G) 17 COB Выход Управление строкой В 18...20 COC1, COA3, COA4 Выход Управление столбцами B1, A3, A4

МикросхемаКР1820ВГ1 имеет четыре режима работы: одиночный, старший, младший и тестовый. Водиночном режиме одна микросхема управляет 36-сегментным ЖКИ, обеспечиваяполную синхронизацию его работы. Старший и младний режимы предназначены дляорганизации управления ЖКИ с числом сегментов более 36, тестовый режим – дляконтроля качества микросхем в процессе изготовления. Данные вводятся вмикросхему в последовательном коде по входу D с синхронизацией записи фронтомтактовых импульсов по входу C (рис. 6).

/>

Рис. 6.Загрузка микросхемы КР1820ВГ1 по последовательной шине

Кодзаписываемых данных определяется конкретной схемой подключения шин управлениястроками и столбцами к сегментам ЖКИ, а также конфигурацией ЖКИ.

/>

Рис.7.Конфигурация сегментов ЖКИ.

На рис. 7показан пример конфигурации ЖКИ, а в таблице 2 показан порядок следования битовв кодовой посылке для этого варианта подключения такого ЖКИ.


Таблица 2. Порядок следования битов в кодовойпосылке

Бит Вывод Сегмент ЖКИ /> Бит Вывод Сегмент ЖКИ D0 COA1, COC/G H1 /> D20 COB3, COC/G D3 D1 COB1, COB G1 /> D21 COA3,COB C3 D2 COC1,COA/G F1 /> D22 COA3, COA/G B3 D3 COC1, COB E1 /> D23 COB3, COA/G A3 D4 COB1, COC/G D1 /> D24 COA4, COC/G H4 D5 COA1,COB C1 /> D25 COB4, COB G4 D6 COA1, COA/G B1 /> D26 COC4,COA/G F4 D7 COB1, COA/G A1 /> D27 COC4, COB E4 D8 COA2, COC/G H2 /> D28 COB4, COC/G D4 D9 COB2, COB G2 /> D29 COA4,COB C4 D10 COC2,COA/G F2 /> D30 COA4, COA/G B4 D11 COC2, COB E2 /> D31 COB4, COA/G A4 D12 COB2, COC/G D2 /> D32 COC1, COC/G P1 D13 COA2,COB C2 /> D33 COC2, COC/G P2 D14 COA2, COA/G B2 /> D34 COC3, COC/G P3 D15 COB2, COA/G A2 /> D35 COC4, COC/G P4 D16 COA3, COC/G H3 /> D36 Не используется - D17 COB3, COB G3 /> D37 Q6 - D18 COC3,COA/G F3 /> D38 Q7 - D19 COC3, COB E3 /> D39 Q8 -

Биты D0..D7соответствуют сегментам первого разряда, биты D8..D15 – второго и т. д. БитыD32..D35 соответствуют специальным сегментам P1...P4. Бит D36 может приниматьлюбое значение. Биты D37 и D38 (Q6 и Q7) управляют режимом работы схемы согласнотаблице 3. Бит D39 (Q8) предназначен для синхронизации работы двух и болеемикросхем при каскадировании.

Для загрузкимикросхемы в одиночном режиме необходимо выполнить следующую последовательностьдействий:

·     установитьна сходе CS уровень логического 0

·     записатьвосемь битов данных для каждой цифры первого-четвертого разрядов

·     записатьчетыре бита для специальных сегментов и четыре бита управления:0|0|1|1|P4|P3|P2|P1

·     установитьна входе CS уровень логической 1

Таблица 3. Назначение битов управлениямикросхемой

Бит Режим работы Выход D36 (Q7) D37 (Q6) COC/G COA/G 1 1 Младший Выход управления строкой С Вход генератора 1 Одиночный То же Выход управления строкой А 1 Тестовый - - Старший Выход внутреннего генератора Выход управления строкой А

После установкимикросхемы в нужный режим для последующей смены данных необязательно записыватьвсе 40 бит информации. Для загрузки микросхемы в старшем и младшем режимахнеобходимо выполнить следующую последовательность действий:

·     установитьна входе CS обеих схем уровень логического 0

·     записать32 бита данных для «младшей» схемы

·     записатьчетыре бита для специальных сегментов младшей схемы и четыре бита управления:1|1|1|1|P4|P3|P2|P1 (при подаче последней единицы обе микросхемы устанавливаютсяв младший режим, выводы COA/G обеих схем работают как входы генератора. Происходитсинхронизация работы микросхем)

·     установитьна входах CS обеих схем уровень логической 1

·     установитьна входе CS «старшей» схемы уровень логического 0

·     записать32 бита данных для старшей схемы

·     записатьчетыре бита для специальных сегментов старшей схемы и четыре бита управления:0|0|0|0||P4|P3|P2|P1 (после этого вывод COA/G старшей схемы начитает работатькак выход управления строкой А, а вывод COC/G – как выход встроенногогенератора. Импульсы с выхода генератора старшей схемы поступают на вход генератораCOA/G младшей схемы, и оба кристалла начинают работать синхронно от генераторастаршей схемы)

·     установитьна сходе CS установить уровень логической 1

Чтобы записать вовнутренние регистры-защелки новые данные, нет необходимости сбрасывать обесхемы: достаточно записать данные по очереди во внутренние регистры-защелкикаждой схемы. При этом в последний бит D39 должен записываться ноль как длястаршей, так и для младшей схем.

Нужносказать, что некоторые типы ЖК индикаторов неудовлетворительно работают припитании микросхем драйверов напряжением 5В. Однако картина резко улучшается приснижении напряжения питания до 3.3 – 4.0В. Это сделать совсем несложно, так какпотребляемый драйверами ток очень мал. В цепь питания можно включитьпараметрический стабилизатор напряжения на основе TL431 или даже простойрезистивный делитель. На всех цифровых входах драйверов также понадобятсяделители напряжения.

В качестве часовреального времени применена микросхема DS1302 фирмы Dallas. Эта микросхемаимеет раздельные входы для подключения основного и резервного источниковпитания, что избавляет от проектирования довольно хитрых схем перехода нарезервный источник. Кроме того, имеется встроенная схема «капельной» зарядкирезервного источника питания, которая может быть включена программно.Дополнительно микросхема имеет ОЗУ объемом 31 байт, которое может бытьиспользовано для энергонезависимого хранения параметров. Из навесных элементовтребуется только кварцевый резонатор. Здесь хочется предостеречь от применениядешевых некачественных резонаторов. Согласно рекомендациям фирмы Dallas,требуется резонатор, рассчитанный на емкость нагрузки 6 пФ. В противном случаеточность хода часов будет неудовлетворительной или даже появятся проблемы сзапуском кварцевого генератора.

Для обмена смикросхемой DS1302 используются общие с драйверами ЖКИ линии данных итактирования. Разделены только сигналы CS и RST. К сожалению, микросхема DS1302имеет довольно специфический 3-х проводный интерфейс, который в фирменнойдокументации описан весьма неоднозначно. Это довольно редкий пример плохогофирменного описания. Поэтому в новых разработках лучше применять болеесовременные микросхемы, например DS1307 с интерфейсом I2C.

В качестведатчиков температуры применены микросхемы цифровых термометров DS1821 фирмыDallas. В цепях данных термометров включены защитные цепочки R11-R14, VD1-VD8,а в цепи питания включен ограничивающий резистор R10 для защиты от короткогозамыкания. Несмотря на то, что аппаратно имеется возможность подключить четыретермометра, данная версия программы работает только с тремя. Это вызванонедостаточным объемом памяти программ. Термометры устанавливаются в разныхместах автомобиля. В данном случае они были установлены в салоне, на открытомвоздухе и в моторном отсеке. Благодаря наличию заданных программно порогов,кроме индикации температуры осуществляется ещё и контроль ее выхода забезопасные пределы. Ввиду недостаточного объема памяти программ, редактированиепорогов температур не поддерживается. Пороги в виде констант внесены в текстпрограммы. Для первого термометра +55 градусов, а для второго и третьеготермометра +99 градусов.

Для измерениянапряжения бортовой сети построен простейший 8-разрядный АЦП на основевстроенного в микроконтроллер компаратора. Для уменьшения влияния помехиспользуется 16-кратное усреднение результатов. Принцип работы АЦП пояснен нарис. 8.


/>

Рисунок 8.Принцип работы АЦП

На входе AIN1формируется пилообразное напряжение, которое сравнивается с входнымнапряжением, которое через делитель R2, R3 поступает на вход компаратора AIN0.Емкость C8 снижает влияние помех на показания вольтметра. Пилообразноенапряжение формируется на емкости C9 в результате заряда ее стабильным током отгенератора тока, собранного на элементах VT2, VD9, R6. Перед началом измеренияконденсатор C9 разряжен с помощью открытого ключа VT3. Когда начинается циклизмерения, на порту P1.5 устанавливается низкий логический уровень, транзисторVT3 закрывается, и напряжение на конденсаторе C9 начинает линейно нарастать. Вэто время разрешается счет программному счетчику. Счет идет до тех пор, поканапряжение на C9 не станет равным входному (на средней точке делителя R2, R3).При этом переключается встроенный компаратор, и счет запрещается. Значение,накопленное в счетчике, будет пропорционально входному напряжению. Применениегенератора тока (а не резистора) позволило получить линейный закон заряда C9,что исключило необходимость программной линеаризации АЦП, которая потребовалабы дополнительных затрат и так дефицитной памяти программ. Необходимо отметить,что конденсатор C9 должен быть термостабильным, например, с пленочным диэлектрикомтипа К73-17. С помощью резистора R6 подбирают ток генератора таким образом,чтобы показания АЦП совпадали с реальным значением напряжения на входе +B.Кроме индикации напряжения осуществляется контроль его падения ниже порога 10В.В случае такого падения включается звуковая сигнализация.

Дляуправления устройством применяется ИК-пульт дистанционого управления.Конструктивно он выполнен на базе дешевого малогабаритного калькулятора.Использованы только его корпус и клавиатура. В пульту применена микросхемаINA3010D в корпусе SOIC. Для питания используются два элемента СЦ-30.Используемый номер системы кода RC-5 — 1EH. Схема пульта не приводится, так какпрактически повторяет типовую схему включения микросхемы INA3010 (SAA3010) изависит от конфигурации конкретной клавиатуры. Коды, соответствующие кнопкам,также могут отличаться от заданных. Для восстановления соответствия необходимоправильно заполнить перекодировочную таблицу в программе. Сделать это можнодаже не перетранслируя программы с помощью шестнадцатиричного редактора прямо в.bin – файле. Таблица расположена по адресам 7B8H — 7E3H. Соответствие функцийуправления, их внутренних кодов (после перекодировки) и кодов ИК ДУ (доперекодировки) приведено в таблице 4.

Таблица 4. Коды кнопок управления

Номер

команды

Название

команды

Внутренний код команды (после перекодировки) Код ИК ДУ (до перекодировки) 1 TIMER 0CH 00H 2 CLOCK 0DH 01H 3 ALARM 0EH 02H 4 LOCK 0FH 03H 5 7 08H 08H 6 8 09H 09H 7 9 0AH 0AH 8 LIST 10H 0BH 9 4 05H 10H 10 5 06H 11H 11 6 07H 12H 12 ESCAPE 11H 13H 13 ALARM DISABLE 14H 18H 14 TIMER CLEAR 13H 1AH 15 01H 20H 16 BACKSPACE 12H 22H 17 1 02H 28H 18 2 03H 29H 19 3 04H 2AH 20 ENTER 0BH 2BH

Вот краткоеописание команд управления:

·     CLOCK– вход в режим установки текущего времени

·     ALARM– вход в режим установки времени будильника

·     ALARMDISABLE – выключение будильника

·     TIMER– включение индикации значения таймера

·     TIMERCLEAR – очистка таймера

·     LIST– включение циклической смены параметров

·     LOCK– запрещение смены параметров

·     0..9– кнопки для ввода числовых значений параметров

·     ENTER– ввод отредактированного параметра

·     ESCAPE– отказ от редактирования параметра

·     BACKSPACE– возврат на один символ при редактировании

В качестве ИК приемникаиспользована интегральная микросхема SFH-506 фирмы Siemens. Эта микросхема весьмачувствительна к помехам по цепи питания, поэтому применен RC фильтр R15 C7.

В случаесрабатывания будильника, превышения температурой установленного порога илипонижения напряжения в бортовой сети формируется звуковой сигнал. Для егоформирования использована малогабаритная динамическая головка HA1, котораяподключена через транзисторный ключ VT1. Звуковые сигналы также формируются принажатиях на кнопки управления.

/>

Рис. 9. Принципиальнаясхема в AccelEDA.


Заключение

В данном курсовом проектеразработано устройство — электронные часы-вольтметр-термометр. Разработанасхема электрическая принципиальная этого устройства и программа длямикроконтроллера. В результате ассеблирования получена прошивка программы дляпамяти микроконтроллера. Применение микроконтроллера позволило упростить принципиальнуюсхему и расширить функциональные возможности микроконтроллера, так как дляизменения функций устройства достаточно внести изменения в программу микроконтроллера.

 


Список литературы

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с.

7.Техническая документация намикроконтроллеры AT89C2051 фирмы «Atmel». ООО «Микро -Чип», Москва, 2002.-184с.


Приложение А

 

Листинг программыи объектный файл

;ЧАСЫ-ТЕРМОМЕТР-ВОЛЬТМЕТР ДЛЯ АВТОМОБИЛЯ.

 РАЗРАБОТАЛ ДЕРКАЧ

; ПРОГРАММА = ABTO.ASM

; ВЕРСИЯ: 20-01-07.

; АССЕМБЛЕР И ОТЛАДЧИК:MPLAB IDE, ВЕРСИЯ: 5.70.40.

LISTP=16F676

 #INCLUDEP16F676.INC

 __CONFIG31D0H

;==============================================

; ИСПОЛЬЗУЕТСЯ КВАРЦЧАСТОТОЙ 32768 ГЦ.

; КОЭФФИЦИЕНТ ДЕЛЕНИЯПРЕДДЕЛИТЕЛЯ РАВЕН 32, ЧТО ВМЕСТЕ

; С TMR0 (256) И ЦИКЛОМ,РАВНЫМ 4 ТАКТАМ

; ДАЕТ НА ВЫХОДЕ 1СЕКУНДУ (4х32х256=32768).

;==============================================

; RA1 — РЕЖИМ — УСТАНОВКА, RA2 — РАЗРЯД — ПУСК,

; RA3 — ВЫХОД ИЗЛУЧАТЕЛЯ,

; RC5 — LOAD, RC3 — DIN,

; RC4 — DCLK

;===========================================

CBLOCK H'20'

;===========================================

; ОПРЕДЕЛЕНИЕ РЕГИСТРОВВРЕМЕНИ.

;===========================================

HOU; ЧАСЫ ДВОИЧНЫЕ.

CL; ЕДИНИЦЫ СЕКУНД ЧАСОВ.

CH; ДЕСЯТКИ СЕКУНД.

ML; ЕДИНИЦЫ МИНУТ.

MH; ДЕСЯТКИ МИНУТ.

HL; ЕДИНИЦЫ ЧАСОВ.

HH; ДЕСЯТКИ ЧАСОВ.

TCL; ДЛЯ ТАЙМЕРА.

TCH;

TML;

TMH;

THL;

THH;

;===============================================

; РЕГИСТРЫ ДЛЯОРГАНИЗАЦИИ ИНДИКАЦИИ.

;===============================================

ZPT; РЕГИСТР ЗАПЯТОЙ.

TZPT; ЗАПЯТАЯ ДЛЯ ВЫВОДАНА ИНДИКАЦИЮ.

COUZ; СЧЕТЧИК ВЫВОДАЗАПЯТЫХ.

COU; СЧЕТЧИК ВЫВОДА БИТ.

KYPC; ВЫБОР РАЗРЯДАУСТАНОВКИ.

KYPCI; ИНДИКАЦИИ.

PEID; РЕЖИМА ИНДИКАЦИИ.

TEMP; ВРЕМЕННЫЙ.

EDI; ДЕСЯТЫЕ НАПРЯЖЕНИЯ.

DEI; ЕДИНИЦЫ ВОЛЬТ.

COI; ДЕСЯТКИ ВОЛЬТ.

;================================================

; ВРЕМЕННЫЕ.

;================================================

WTEMP; БАЙТ СОХРАНЕНИЯРЕГИСТРА W ПРИ ПРЕРЫВАНИИ.

STEMP; БАЙТ СОХРАНЕНИЯРЕГИСТРА STATUS ПРИ ПРЕРЫВАНИИ.

FTEMP; ВРЕМЕННЫЙ ДЛЯ FSR.

TEKH;

EDA;

DEA;

YCTL;

YCTLI;

;===========================================

; ОПРЕДЕЛЕНИЕ БИТОВСОСТОЯНИЯ ФЛАГОВ.

;===========================================

FLAG

;

;0-> ВКЛЮЧЕНИЕСИГНАЛА.

;1-> ТЕКУЩЕЕ ВРЕМЯ.

;2-> ВКЛЮЧЕН РЕЖИМТАЙМЕРА.

;3-> ИНДИКАЦИЯНАПРЯЖЕНИЯ.

;4-> НЕТ КУРСОРА.

;5-> ПУСК-СТОП.

;6-> ПРОЧЕРК В ЧАСАХ.

;7-> УСТАНОВКИ.

;=============================================

FLAG1

;

;1-> 1 СЕК ЦИКЛА.

;2-> ПЕРЕДАНА ЗАПЯТАЯ.

;4-> ЗУММЕР ВКЛЮЧЕН.

;5-> СТОРОЖОКНАПОМИНИНИЯ АВАРИИ ЧЕРЕЗ 1 ЧАС.

;===========================================

ENDC

;===========================================

; ОПРЕДЕЛЕНИЕ РЕГИСТРОВИНДИКАЦИИ.

;===========================================

R1EQU50H; МЛАДШИЙ РАЗРЯД.

R2EQU51H;

R3EQU52H;

R4EQU53H;

R5EQU54H;

R6EQU55H;

R7EQU56H;

R8EQU57H; СТАРШИЙ РАЗРЯД.

TEKLEQU58H;

;===========================================

; ОПРЕДЕЛЕНИЕ БИТ ПОРТОВВВОДА/ВЫВОДА.

;===========================================

YCEQU1; РЕЖИМ/УСТАНОВКА.

KYEQU2; ПУСК/КУРСОР.

LOADEQU5; ЗАГРУЗКА.

DINEQU3; ДАННЫЕ.

DCLKEQU4; СИНХРОИМПУЛЬСЫ.

;===========================================

; 1. ПУСК.

;===========================================

ORG0

GOTOINIT

ORG4

GOTOPRER

;===========================================

; 2. ИНИЦИАЛИЗАЦИЯ.

;===========================================

INIT

BSFSTATUS,5; ПЕРЕХОДИМ ВБАНК 1.

MOVLW0FFH;

MOVWFADCON1^80H; ТАКТ АЦПОТ ВНУТРЕННЕГО ГЕНЕРАТОРА 500 кГц.

MOVLWB'00000100'; К=32.

MOVWFOPTION_REG^80H; РЕЗИСТОРЫВКЛЮЧЕНЫ.

MOVLWB'10100000'; РАЗРЕШЕНИЕПРЕРЫВАНИЙ ОТ TMR0.

MOVWFINTCON ;

CLRFPIE1^80H; ЗАПРЕЩЕНЫВСЕ ПЕРИФЕРИЙНЫЕ ПРЕРЫВАНИЯ.

MOVLWB'00001111'; ВСЕВЫХОДЫ. 0 — ВХОД АЦП.

MOVWFTRISA^80H ;

CLRFTRISC^80H; ВСЕВЫХОДЫ.

CLRFVRCON^80H; ИОНОТКЛЮЧЕН.

CLRFPCON^80H; ПРЕРЫВАНИЯПО ПИТАНИЮ ЗАПРЕЩЕНЫ.

MOVLWB'00000110' ;

MOVWFWPUA^80H; ПОДТЯГИВАЮЩИЕРЕЗИСТОРЫ ВКЛЮЧЕНЫ.

 CLRFIOCA^80H; ПРЕРЫВАНИЯЗАПРЕЩЕНЫ.

MOVLW.1

MOVWFANSEL^80H; ВЫБРАНАНАЛОГОВЫЙ ВХОД RA0/AN0.

BCFSTATUS,5; ПЕРЕХОДИМ ВБАНК 0.

CLRFPORTC; ВЫХОД ИСВЕТОДИОД ВЫКЛЮЧЕНЫ.

CLRFT1CON; ТАЙМЕР 1 ОТКЛЮЧЕН.

MOVLW.7

MOVWFCMCON; КОМПАРАТОРВЫКЛЮЧЕН.

CLRFFLAG; ВСЕ ОБНУЛЯЕМ ИУСТАНАВЛИВАЕМ.

CLRFFLAG1

CLRFEDI

CLRFDEI

CLRFCOI

CLRFCL

CLRFCH

CLRFML

CLRFMH

CLRFHL

CLRFHH

CLRFTCL

CLRFTCH

CLRFTML

CLRFTMH

CLRFTHL

CLRFTHH

CLRFPEID

CLRFZPT

CLRFCOUZ

CLRFCOU

CLRFHOU

MOVLW96H

MOVWFYCTL; УСТАНОВКАМАКСИМУМА = 15,0 B.

MOVLW78H

MOVWFYCTLI; УСТАНОВКАМИНИМУМА = 12,0 B.

CLRFKYPC

BSFFLAG,4

 GOTOPAC

;==========================================

; 3. ТАБЛИЦА СЕГМЕНТОВ.

;==========================================

SEG

;D E G F A B CK

ADDWFPCL,1;

RETLWB'11011110';0

RETLWB'00000110';1

RETLWB'11101100';2

RETLWB'10101110';3

RETLWB'00110110';4

RETLWB'10111010';5

RETLWB'11111010';6

RETLWB'00001110';7

RETLWB'11111110';8

RETLWB'10111110';9

RETLWB'00000000';10->ПУСТО.

RETLWB'00100000';11->ПРОЧЕРК.

RETLWB'10000000';12-> ПРОЧЕРК.

;=================================================

; 4. ТАБЛИЦАПЕРЕКОДИРОВКИ КУРСОРА.

;=================================================

KYPCY

MOVFWKYPC;

ADDWFPCL,1;

RETURN; НЕТ КУРСОРА.

RETLWB'00000100';3

RETLWB'00001000';4

RETLWB'00010000';5

RETLWB'00100000';6

RETLWB'01000000';7

;===================================================

; 5. ВЫБОР РЕЖИМАИНДИКАЦИИ.

;===================================================

VUBOR

MOVFWPEID; ИЗМЕНЯЕМ РЕЖИМИНДИКАЦИИ.

ADDWFPCL,1;

GOTOINDH; ИНДИКАЦИЯ ЧАСОВ.

GOTOINDT; ТАЙМЕРА.

GOTOINDU; НАПРЯЖЕНИЯ.

;======================================================

; 6. ВЫБОР РАЗРЯДАУСТАНОВКИ.

;======================================================

YCT

BTFSCPORTA,YC; ЕСЛИ КНОПКА«РЕЖИМ» НАЖАТА,

RETURN

MOVFWKYPC; ТО ПО КУРСОРУ

ADDWFPCL,1; ВЫБИРАЕМРАЗРЯД УСТАНОВКИ.

RETURN; НЕТ КУРСОРА.

GOTOYC0; МИНУТЫ.

GOTOYC1; ДЕСЯТКИ МИНУТ.

GOTOYCE; ОБНУЛЕНИЕ.

GOTOYC2; ЧАСЫ.

GOTOYC3; ДЕСЯТКИ ЧАСОВ.

;=====================================================

; 7. ТАБЛИЦЫ ПЕРЕВОДАДЕСЯТКОВ В ДВОИЧНОЕ ЧИСЛО.

;=====================================================

DEBIN

ADDWFPCL,1;

RETLW.0

RETLW.10

RETLW.20

RETLW.30

RETLW.40

RETLW.50

RETLW.60

RETLW.70

RETLW.80

RETLW.90

;======================================================

; 8. ПРОВЕРКА НАЖАТЫХКНОПОК УСТАНОВКИ.

;======================================================

KHOP

BTFSSFLAG,1; ЕСЛИ НЕТРЕЖИМА ЧАСОВ,

GOTO$+5; ТО КУРСОР НЕМЕНЯЕТСЯ.

BTFSSPORTA,KY; ПРИ НАЖАТОЙКНОПКЕ

CALLKYPCOP; ИДЕМ НАУСТАНОВКУ КУРСОРА.

BTFSCFLAG,7; ЕСЛИ ИДЕТ УСТАНОВКА,

GOTOVUBOR; ТО РЕЖИМ НЕМЕНЯЕТСЯ.

BTFSCPORTA,YC; ЕСЛИ КНОПКА«РЕЖИМ» НАЖАТА,

GOTOVUBOR; ИЛИ ИДЕМ НАВЫБОР РЕЖИМА ИНДИКАЦИИ.

INCFPEID,1; ИЗМЕНЕНИЕРЕЖИМА ИНДИКАЦИИ.

MOVLW.3;3 РЕЖИМОВИНДИКАЦИИ.

SUBWFPEID,0; ЕСЛИ БОЛЬШЕ,

BTFSSSTATUS,2; ТО ПОЙДЕМНА СБРОС.

GOTOVUBOR; НА ЗАПИСЬ ВРЕГИСТРЫ ИНДИКАЦИИ.

CLRFPEID; СБРОС РЕЖИМА.

GOTOVUBOR; НА ВЫБОР РЕЖИМАИНДИКАЦИИ.

RETURN

;=================================================

; 9. УСТАНОВКА КУРСОРА(ВЫБОР РАЗРЯДА УСТАНОВКИ).

;=================================================

KYPCOP

BSFFLAG,7; УСТАНОВКА.

BCFFLAG,4; СБРОС ФЛАГА НЕТКУРСОРА.

INCFKYPC,1; ПРИБАВИМЕДИНИЦУ В КУРСОР.

MOVLW.6; НЕ БОЛЕЕ 5.

SUBWFKYPC,0;

SKPC; ЕСЛИ БОЛЬШЕ ИЛИРАВНО 6,

RETURN;

CLRFKYPC; ОБНУЛИМ.

BSFFLAG,4; НЕТ КУРСОРА ВПОЛЕ.

BCFFLAG,7; НЕТ УСТАНОВКИ.

RETURN;

;=========================================

; 10. ВВОД КУРСОРА В МЛ.РАЗРЯД РЕГИСТРОВ.

;=========================================

KYPVO

BTFSCFLAG,4; ЕСЛИ НЕТКУРСОРА,

RETURN; ТО ВЕРНЕМСЯ.

CALLKYPCY; УСТАНОВИМ РЕЖИМЫ.

MOVWFKYPCI; В КУРСОРИНДИКАЦИИ.

RRFKYPCI,1; ЗАПОЛНИМ БИТ«С».

ADDCFR1,1; ПЕРЕНЕСЕМ ВРЕГИСТР ИНДИКАЦИИ.

RRFKYPCI,1; ЗАПОЛНИМ БИТ«С».

ADDCFR2,1; ПЕРЕНЕСЕМ ВРЕГИСТР ИНДИКАЦИИ.

RRFKYPCI,1; ОСТАЛЬНЫЕРЕГИСТРЫ

ADDCFR3,1; ЗАПОЛНЯЕМАНАЛОГИЧНО.

RRFKYPCI,1;

ADDCFR4,1;

RRFKYPCI,1;

ADDCFR5,1;

RRFKYPCI,1;

ADDCFR6,1;

RRFKYPCI,1;

ADDCFR7,1;

RRFKYPCI,1;

ADDCFR8,1;

RETURN;

;=============================================

; 11. ВЫВОД НА ИНДИКАЦИЮ.

;=============================================

IND

CALLKYPVO; ВВЕДЕМ КУРСОРЫВ РЕГИСТРЫ ИНДИКАЦИИ.

MOVFWZPT; ЗНАЧЕНИЯ ЗАПЯТЫХПЕРЕПИШЕМ

MOVWFTZPT; ВО ВРЕМЕННЫЙРЕГИСТР.

BSFFLAG1,2; ЗАПЯТАЯПЕРЕДАНА.

BCFPORTC,DIN; ДАННЫЕ РАВНЫНУЛЮ.

BCFPORTC,LOAD; НАЧАЛОПЕРЕДАЧИ (LOAD=0).

RRFTZPT,1; ВЫТОЛКНЕМОЧЕРЕДНУЮ ЗАПЯТУЮ.

CALLVUV0;

BCFFLAG1,2; ЗАПЯТАЯПЕРЕДАНА.

MOVLWR1; ЗАПИШЕМ АДРЕСПЕРВОГО РЕГИСТРА ИНДИКАЦИИ.

MOVWFFSR;

MOVFWINDF; ЗНАЧЕНИЕПЕРВОГО РЕГИСТРА

MOVWFTEMP; ПЕРЕПИШЕМ ВОВРЕМЕННЫЙ.

BCFPORTC,LOAD; НАЧАЛОПЕРЕДАЧИ (LOAD=0).

CALLVUVOD; НА ВЫВОД.

POVT

BSFFLAG1,2; ЗАПЯТАЯПЕРЕДАНА.

RRFTZPT,1; ВЫТОЛКНЕМ ОЧЕРЕДНУЮЗАПЯТУЮ.

CALLVUV0;

BCFFLAG1,2; ЗАПЯТАЯПЕРЕДАНА.

INCFFSR,1; УВЕЛИЧИМ АДРЕСРЕГИСТРА ИНДИКАЦИИ.

MOVFWINDF; ПЕРЕПИШЕМ ЕГОЗНАЧЕНИЕ

MOVWFTEMP; ВО ВРЕМЕННЫЙ.

CALLVUVOD; НА ВЫВОД.

INCFCOUZ,1; ПОДСЧИТАЕМЧИСЛО

MOVLW.7; ПЕРЕДАВАЕМЫХ

SUBWFCOUZ,0; ЗАПЯТЫХ.

BTFSCSTATUS,2;

CLRFCOUZ; ОБНУЛИМ СЧЕТЧИК.

BTFSSSTATUS,2;

GOTOPOVT; ПОВТОРИМ ВЫВОД.

BSFPORTC,LOAD; КОНЕЦПЕРЕДАЧИ.

RETURN;

CUNX

BSFPORTC,DCLK; СИНХРОТМПУЛЬС = 1.

CALLPAUS; ПАУЗА.

BCFPORTC,DCLK; СИНХРОИМПУЛЬС = 0.

RETURN; ВОЗВРАТ.

PAUS

 MOVLW .5; МОЖНО ПОДБИРАТЬЗНАЧЕНИЕ ПАУЗЫ.

ADDLW -1; ПАУЗА = ЧИСЛО Х4 МКС.

BTFSS STATUS,2;

GOTO $-2; ПОВТОРИМ.

RETURN; ВЕРНЕМСЯ.

VUVOD

RRFTEMP,1; СДВИНЕМ ВПРАВО.

VUV0

BTFSSSTATUS,0; ПО НУЛЕВОМУ РАЗРЯДУ

BCFPORTC,DIN; УСТАНАВЛИВАЕМДАННЫЕ

BTFSCSTATUS,0; В 0 ИЛИ 1.

BSFPORTC,DIN;

CALLCUNX; СИНХРОНИЗИРУЕМДАННЫЕ.

BTFSCFLAG1,2; ЕСЛИ ЗАПЯТАЯПЕРЕДАНА,

RETURN; ТО ВЕРНЕМСЯ.

INCFCOU,1; ПОДСЧИТАЕМЧИСЛО БИТ.

MOVLW.8;

SUBWFCOU,0;

BTFSSSTATUS,2; ЕСЛИ НЕ ВСЕБИТЫ ПЕРЕДАНЫ,

GOTOVUVOD; ПОВТОРИМ ВЫВОД.

CLRFCOU; ОБНУЛИМ СЧЕТЧИК.

RETURN;

;======================================================

; 12. СОХРАНЕНИЕ ИВОССТАНОВЛЕНИЕ ЗНАЧЕНИЙ РЕГИСТРОВ ПРИ ПРЕРЫВАНИИ.

;======================================================

PRER

MOVWFWTEMP; СОХРАНЕНИЕЗНАЧЕНИЙ РЕГИСТРОВ W,

MOVFWSTATUS;STATUS,

MOVWFSTEMP;

MOVFWFSR;FSR.

MOVWFFTEMP;

BSFFLAG1,1;1 СЕК ЦИКЛА.

CALLS1; ПОДСЧИТАЕМ ВРЕМЯ.

BTFSCFLAG,2;

CALLTAIM;

REPER; ВОССТАНОВЛЕНИЕСОХРАНЕННЫХ ЗНАЧЕНИЙ.

MOVFWSTEMP; ВОССТАНОВЛЕНИЕРЕГИСТРОВ:

MOVWFSTATUS;STATUS,

MOVFWFTEMP;

MOVWFFSR;FSR,

MOVFWWTEMP;W.

BCFINTCON,2; СБРАСЫВАЕМ ФЛАГ ПРЕРЫВАНИЯ ОТ TMR0.

RETFIE; ВОЗВРАТ ИЗПРЕРЫВАНИЯ.

;=============================================

; 13. ПОДСЧЕТ ВРЕМЕНИ.

;=============================================

S1

BTFSCFLAG1,5;

GOTO$+8;

BTFSSFLAG1,4;

GOTO$+6;

BTFSCPORTC,0; СМЕНАВКЛЮЧЕНИЯ ЗУММЕРА.

GOTO$+3;

BSFPORTC,0; ВКЛЮЧИМСИГНАЛ.

GOTO$+2;

BCFPORTC,0;

MOVLW.9; ЕСЛИ УЖЕ 9СЕКУНД,

SUBWFCL,0;

BCSH; ИДЕМ НА СРАВНЕНИЕДЕСЯТКОВ СЕКУНД.

INCFCL,1; ИНАЧЕ ПРИБАВИМЕДИНИЦУ.

RETURN

SH

CLRFCL; ОБНУЛИМ СЕКУНДЫ.

MOVFWCH; ЕСЛИ ДЕСЯТКИСЕКУНД

ADDLW-5H; РАВНЫ 5,

BZMIL; ИДЕМ СРАВНИВАТЬМИНУТЫ.

INCFCH,1; ИНАЧЕ УВЕЛИЧИМДЕСЯТКИ СЕКУНД.

RETURN

MIL

CLRFCH; ОБНУЛИМ ДЕСЯТКИСЕКУНД.

MOVFWML; ЕСЛИ ЕДИНИЦЫМИНУТ

ADDLW-9H; РАВНЫ 9,

BZMIH; ИДЕМ СРАВНИВАТЬДЕСЯТКИ.

INCFML,1; ИНАЧЕ УВЕЛИЧИММИНУТЫ.

RETURN

MIH

BSFFLAG1,4; ПРОШЛО 10МИНУТ КУРСОР ВЫКЛЮЧАЕТСЯ.

BCFFLAG,7; НЕТ УСТАНОВКИ.

CLRFKYPC; НЕТ КУРСОРА.

CLRFML; ОБНУЛИМ ЕДИНИЦЫМИНУТ.

MOVFWMH; ЕСЛИ ДЕСЯТКИМИНУТ

ADDLW-5H; РАВНЫ 5,

BZHOL; ИДЕМ СРАВНИВАТЬЧАСЫ.

INCFMH,1; ИЛИ УВЕЛИЧИМДЕСЯТКИ МИНУТ.

RETURN

HOL

BCFFLAG1,5; НАПОМИНАНИЕ ОБАВАРИИ НАПРЯЖЕНИЯ.

CLRFMH; ОБНУЛИМ ДЕСЯТКИМИНУТ.

MOVFWHH; ЕСЛИ ДЕСЯТКИЧАСОВ

ADDLW-2H; РАВНЫ 2,

BZHL4; ПРОВЕРИМ ЕДИНИЦЫЧАСОВ.

MOVFWHL; ЕСЛИ ЕДИНИЦЫЧАСОВ РАВНЫ 9,

ADDLW-9H;

BZ$+3; УВЕЛИЧИМ ДЕСЯТКИЧАСОВ.

INCFHL,1; ИЛИ УВЕЛИЧИМЕДИНИЦЫ ЧАСОВ.

RETURN

CLRFHL;

INCFHH,1;

RETURN

HL4

MOVFWHL; ЕСЛИ ЕДИНИЦЫЧАСОВ

ADDLW-3H; РАВНЫ 3,

BZHOH; ИДЕМ ОБНУЛЯТЬ.

INCFHL,1; ИЛИ ПРИБАВИМЕДИНИЦУ.

RETURN

HOH

CLRFHL;

CLRF HH; ОБНУЛИМ ДЕСЯТКИЧАСОВ.

RETURN;

;=============================================

; 14. ТАЙМЕР.

;=============================================

TAIM

BSFFLAG,5; СЛЕДУЮЩАЯОСТАНОВКА ТАЙМЕРА.

MOVLW.9; ЕСЛИ УЖЕ 9СЕКУНД,

SUBWFTCL,0;

BC$+3; ИДЕМ НА СРАВНЕНИЕДЕСЯТКОВ СЕКУНД.

INCFTCL,1; ИНАЧЕ ПРИБАВИМЕДИНИЦУ.

RETURN

CLRFTCL; ОБНУЛИМ СЕКУНДЫ.

MOVFWTCH; ЕСЛИ ДЕСЯТКИСЕКУНД

ADDLW-5H; РАВНЫ 5,

BZ$+3; ИДЕМ СРАВНИВАТЬМИНУТЫ.

INCFTCH,1; ИНАЧЕ УВЕЛИЧИМДЕСЯТКИ СЕКУНД.

RETURN

CLRFTCH; ОБНУЛИМ ДЕСЯТКИСЕКУНД.

MOVFWTML; ЕСЛИ ЕДИНИЦЫМИНУТ

ADDLW-9H; РАВНЫ 9,

BZ$+3; ИДЕМ СРАВНИВАТЬДЕСЯТКИ.

INCFTML,1; ИНАЧЕ УВЕЛИЧИММИНУТЫ.

RETURN

CLRFTML; ОБНУЛИМ ЕДИНИЦЫМИНУТ.

MOVFWTMH; ЕСЛИ ДЕСЯТКИМИНУТ

ADDLW-5H; РАВНЫ 5,

BZ$+3; УВЕЛИЧИМ ЧАСЫ.

INCFTMH,1; ИЛИ УВЕЛИЧИМДЕСЯТКИ МИНУТ.

RETURN

CLRFTMH; ОБНУЛИМ ДЕСЯТКИМИНУТ.

MOVFWTHL; ЕСЛИ ЕДИНИЦЫЧАСОВ РАВНЫ 9,

ADDLW-9H;

BZ$+3; УВЕЛИЧИМ ДЕСЯТКИЧАСОВ.

INCFTHL,1; ИЛИ УВЕЛИЧИМЕДИНИЦЫ ЧАСОВ.

RETURN

CLRFTHL; ОБНУЛИМ ЧАСЫ.

MOVFWTHH; ЕСЛИ ДЕСЯТКИЧАСОВ РАВНЫ 9,

ADDLW-9H;

BZ$+3; ОБНУЛИМ.

INCFTHH,1; ИЛИ УВЕЛИЧИМДЕСЯТКИ ЧАСОВ.

RETURN

CLRFTHH;

RETURN

T00

BTFSSFLAG,5;

GOTO$+4;

BCFFLAG,2; ТАЙМЕР ВЫКЛЮЧЕН.

BCFFLAG,5; СЛЕДУЮЩЕЕВКЛЮЧЕНИЕ ТАЙМЕРА.

RETURN;

CLRFTCL; ВСЕ ОБНУЛЯЕМ.

CLRFTCH;

CLRFTML;

CLRFTMH;

CLRFTHL;

CLRFTHH;

BSFFLAG,2; ВКЛЮЧИМ ТАЙМЕР.

RETURN

;===================================================

; 15. АЦП — ПРЕОБРАЗОВАНИЯ (ИЗМЕРЕНИЕ ВХОДНЫХ ВЕЛИЧИН).

;===================================================

ADP

MOVLWB'10000001'; СИНХРОНИЗАЦИЯОТ RC

MOVWFADCON0; ГЕНЕРАТОРА,ВХОД 0, ВКЛЮЧЕНИЕ АЦП (YBX).

CALLZAD;

BSFADCON0,1; ВКЛЮЧИМПРЕОБРАЗОВАНИЕ.

BTFSCADCON0,1; ОЖИДАЕМЗАВЕРШЕНИЯ

GOTO$-1; ПРЕОБРАЗОВАНИЯ.

MOVFWADRESH; ПЕРЕПИШЕМРЕЗУЛЬТАТ ПРЕОБРАЗОВАНИЯ

MOVWFTEKH; В СТАРШИЙ ТЕКУЩИЙРЕГИСТР.

BSFSTATUS,5; ПЕРЕХОДИМ ВБАНК 1.

MOVLW58;

MOVWFFSR; ПО КОСВЕННОЙАДРЕСАЦИИ

MOVFWADRESL; ЗАПИСЬ МЛ.РЕГИСТРА АЦП

MOVWFINDF; В РЕГИСТР TEKL.

BCFSTATUS,5; ПЕРЕХОДИМ ВБАНК 0.

CALLCOMPA;

GOTOBINDEC; ПЕРЕКОДИРУЕМ В 2_10 КОД.

ZAD

MOVLW.5; ЗАДЕРЖКА 20 МКС.

ADDLW-1;

BTFSSSTATUS,2;

GOTO$-2;

RETURN

;===========================

; 16. СРАВНЕНИЕ С УСТАНОВКОЙ.

;===========================

COMPA

TSTFTEKL;

BTFSCSTATUS,2;

GOTOVUKL;

MOVFWYCTL; УСТАНОВКА МАКСИМУМА.

SUBWFTEKL,0; ИЗМЕРЕНИЕ,

BTFSCSTATUS,0; ЕСЛИ БОЛЬШЕИЛИ РАВНО,

GOTOVUKL; ТО ВКЛЮЧАЕТСЯЗУММЕР.

MOVFWYCTLI; УСТАНОВКАМИНИМУМА.

SUBWFTEKL,0; ИЗМЕРЕНИЕ,

BTFSSSTATUS,0; ЕСЛИМЕНЬШЕ,

GOTOVUKL; ТО ВКЛЮЧАЕТСЯЗУММЕР.

BTFSCSTATUS,2; ЕСЛИ РАВНО,

GOTOVUKL; ТО ВКЛЮЧАЕТСЯЗУММЕР.

BCFFLAG1,4; ЗУММЕРВЫКЛЮЧЕН.

BCFFLAG1,5; ЗУММЕР ВЫКЛЮЧЕН.

BCFPORTC,0; ВЫКЛЮЧИМСИГНАЛ.

RETURN

VUKL

BTFSCPORTA,KY;

GOTO$+5;

BSFFLAG1,5; ПОСТАВИМСТОРОЖОК НА 1 ЧАС.

BCFPORTC,0; ВЫКЛЮЧИМСИГНАЛ.

BTFSCFLAG1,5; ЕСЛИ 1 ЧАСПРОШЕЛ, ТО ВКЛЮЧИМ СИГНАЛ.

RETURN

BTFSCFLAG1,4; ЕСЛИ ВЫХОДУЖЕ ВЫКЛЮЧЕН,

RETURN; СРАВНЕНИЙ НЕТ.

BSFPORTC,0; ВКЛЮЧИМСИГНАЛ.

BSFFLAG1,4; ЗУММЕРВКЛЮЧЕН.

RETURN

;======================================================

; 17. ПЕРЕКОДИРОВКА ИЗ16-И РАЗРЯДНОГО 2-ГО В 5- РАЗРЯДНОЕ 2-10-Е.

; АЛГОРИТМ ПЕРЕКОДИРОВКИОСНОВЫВАЕТСЯ НА ПРИБАВЛЕНИИ 3 В МЛАДШИЙ

; И СТАРШИЙ ПОЛУБАЙТЫ.ЕСЛИ РЕЗУЛЬТАТ СПЕРЕНОСОМ 1 В 3 РАЗРЯД (10=7+3), ТО ЗАПИСЫВАЕМ

; НОВОЕ ЗНАЧЕНИЕ ВРЕГИСТР. ВЫПОЛНЯЕМ 16 РАЗ СДВИГАЯ БИТЫ РЕГИСТРОВ.

;======================================================

BINDEC

MOVLW .16; ЗАПИШЕМ ЧИСЛОСДВИГОВ

MOVWF COU; В СЧЕТЧИК.

BIDE

BCF STATUS,0; ОБНУЛИМ БИТ«С».

RLF TEKL,1; СДВИНЕМПЕРЕКОДИРУЕМОЕ

RLF TEKH,1; ЧИСЛОПЕРЕМЕЩАЯ ЕГО СТАРШИЙ БИТ

RLF EDA,1; В МЛАДШИЙ БИТРЕГИСТРОВ

RLF DEA,1; РЕЗУЛЬТАТА.

DECFSZ COU,1; ЗАФИКСИРУЕМСДВИГ В СЧЕТЧИКЕ.

GOTO RASDEC; ПРОВЕРИМПОЛУБАЙТЫ НА СЕМЕРКУ.

GOTO MESTO; ЕСЛИ СЧЕТЧИКПУСТ, ЗАПОЛНИМ РЕГИСТРЫ ИНДИКАЦИИ.

RASDEC

 MOVLW EDA; ЗАПИШЕМ АДРЕСРЕГИСТРА

 MOVWF FSR; В РЕГИСТРКОСВЕННОЙ АДРЕСАЦИИ.

 CALL BCD; ПРОВЕРИМЗНАЧЕНИЕ РЕГИСТРА НА 7.

 MOVLW DEA; АНАЛОГИЧНЫЕОПЕРАЦИИ ПРОДЕЛАЕМ

 MOVWF FSR; С ДРУГИМИРЕГИСТРАМИ.

 CALL BCD ;

 GOTO BIDE; ПОЙДЕМПОВТОРЯТЬ СДВИГ.

BCD

 MOVLW 3 ;0000 0011

 ADDWF 0,0; ПРИБАВИМ 3 КРЕГИСТРУ И РЕЗУЛЬТАТ

 MOVWF TEMP; ЗАПИШЕМ ВОВРЕМЕННЫЙ РЕГИСТР.

 BTFSC TEMP,3; ПРОВЕРИМ 3БИТ И ЕСЛИ ОН РАВЕН НУЛЮ,

 MOVWF 0; ПРОПУСКАЕМ ЗАПИСЬРЕЗУЛЬТАТА В РЕГИСТР.

 MOVLW 30 ;48=0011 0000

 ADDWF 0,0; ПРИБАВИМ 3 КСТАРШЕМУ ПОЛУБАЙТУ РЕГИСТРА И РЕЗУЛЬТАТ

 MOVWF TEMP; ЗАПИШЕМ ВОВРЕМЕННЫЙ РЕГИСТР.

 BTFSC TEMP,7; ЕСЛИ БИТЕДИНИЧНЫЙ,

 MOVWF 0; ТО ЗАПИШЕМНОВОЕ ЗНАЧЕНИЕ В РЕГИСТР.

 RETURN; ВЕРНЕМСЯ ДЛЯЗАГРУЗКИ НОВОГО ЗНАЧЕНИЯ РЕГИСТРА.

;======================================================

; 18. ИЗВЛЕКАЕМ ПОЛУБАЙТЫИЗ РЕГИСТРОВ СЧЕТА В РЕГИСТРЫ ИНДИКАЦИИ.

;======================================================

MESTO

MOVLWB'00001111'; ИЗВЛЕКАЕМПОЛУБАЙТЫ

ANDWFDEA,0; В РЕГИСТРЫИНДИКАЦИИ.

MOVWFCOI;

MOVLWB'11110000';

ANDWFEDA,0 ;

MOVWFDEI ;

SWAPFDEI,1 ;

MOVLWB'00001111';

ANDWFEDA,0;

MOVWFEDI;

CLRFEDA;

CLRFDEA;

RETURN;

;==================================================

; 19. СМЕНА ИНДИКАЦИИ ПРИСМЕНЕ РЕЖИМА.

;==================================================

INDH

BTFSCFLAG,7; ЕСЛИ КУРСОРЕСТЬ,

CALLYCT; ТО ИДЕМ НАУСТАНОВКУ.

MOVLW.10; ПУСТО.

CALLSEG; ЗАПОЛНИМ РЕГИСТРЫИНДИКАЦИИ.

MOVWFR1;

MOVWFR2;

MOVWFR8;

BTFSSFLAG,6;

GOTO$+6;

MOVLW.11; ПРОЧЕРК СРЕДНИЙ.

CALLSEG;

MOVWFR5;

BCFFLAG,6;

GOTO$+5;

MOVLW.12; ПРОЧЕРК НИЖНИЙ.

CALLSEG;

MOVWFR5;

BSFFLAG,6;

MOVFWML;

CALLSEG;

MOVWFR3;

MOVFWMH;

CALLSEG;

MOVWFR4;

MOVFWHL;

CALLSEG;

MOVWFR6;

MOVFWHH;

CALLSEG;

MOVWFR7;

BSFFLAG,1; ВКЛЮЧИМ РЕЖИМЧАСОВ.

CLRFZPT;

RETURN;

INDT

BTFSSPORTA,KY; ЕСЛИ КНОПКА НАЖАТА,

CALLT00; ТО ИДЕМ ОБНУЛЯТЬТАЙМЕР.

MOVFWTCL; ЗАПОЛНИМРЕГИСТРЫ ИНДИКАЦИИ

CALLSEG; МИНУТ И СЕКУНДПРАВЫХ ЧАСОВ.

MOVWFR1;

MOVFWTCH;

CALLSEG;

MOVWFR2;

MOVFWTML;

CALLSEG;

MOVWFR4;

MOVFWTMH;

CALLSEG;

MOVWFR5;

MOVLW.11; ПРОЧЕРК.

CALLSEG;

MOVWFR3;

MOVWFR6;

MOVFWTHL;

CALLSEG;

MOVWFR7;

MOVFWTHH;

CALLSEG;

MOVWFR8;

BCFFLAG,1; РЕЖИМ ЧАСЫ ВЫКЛЮЧЕН.

BCFFLAG,7; НЕТ УСТАНОВКИ.

RETURN;

INDU

MOVLW.10; ПУСТО.

CALLSEG; ЗАПОЛНИМ РЕГИСТРЫИНДИКАЦИИ.

MOVWFR1;

MOVWFR2;

MOVWFR3;

MOVWFR7;

MOVWFR8;

 MOVFW COI;

CALLSEG;

MOVWFR6;

MOVFW DEI;

CALLSEG;

MOVWFR5;

 MOVFW EDI;

CALLSEG;

MOVWFR4;

BSFZPT,4;

RETURN;

;===================================================

; 20. РАСПРЕДЕЛИТЕЛЬ.

;===================================================

PAC

BTFSSFLAG1,1; ЖДЕМ 1 СЕКУНДУ.

GOTO$-1;

CALLADP;

CALLKHOP; НА ПРОВЕРКУКНОПОК.

CALLIND; НА ИНДИКАЦИЮ.

BCFFLAG1,1;

GOTOPAC; ПОВТОРИМ.

;=====================================================

; 21. УСТАНОВКА ВРЕМЕНИ.

;=====================================================

YC0

INCFML,1; УВЕЛИЧИМ ЕДИНИЦЫМИНУТ.

MOVLW.10; НЕ БОЛЕЕ 9.

SUBWFML,0;

SKPNC; ЕСЛИ БОЛЬШЕ ИЛИРАВНО 10,

CLRFML; ТО ОБНУЛИМ.

RETURN

YC1

INCFMH,1; УВЕЛИЧИМ ДЕСЯТКИМИНУТ.

MOVLW.6; НЕ БОЛЕЕ 5.

SUBWFMH,0;

SKPNC; ЕСЛИ БОЛЬШЕ ИЛИРАВНО 6,

CLRFMH; ТО ОБНУЛИМ.

RETURN

YC2

INCFHL,1; УВЕЛИЧИМ ЕДИНИЦЫЧАСОВ.

MOVLW.10; НЕ БОЛЕЕ 9.

SUBWFHL,0;

SKPNC;

CLRFHL; ЕСЛИ БОЛЬШЕ, ТООБНУЛИМ.

MOVFWHH; ПЕРЕКОДИРУЕМ ВДВОИЧНЫЙ

CALLDEBIN; КОД ДЕСЯТКИ.

ADDWFHL,0; ПРИБАВИМЕДИНИЦЫ

MOVWFHOU; ДВОИЧНОЕЗНАЧЕНИЕ НЕ ДОЛЖНО

ADDLW-18H; ПРЕВЫШАТЬ — 24.

SKPC; ЕСЛИ БОЛЬШЕ ИЛИ РАВНО24,

RETURN

CLRFHOU; ТО ОБНУЛИМ ЧАСЫДВОИЧНЫЕ

CLRFHL; И РАЗРЯДЫ СТАРШИЙ

CLRFHH; И МЛАДШИЙ.

RETURN

YC3

INCFHH,1; УВЕЛИЧИМ ДЕСЯТКИЧАСОВ.

MOVLW.3; НЕ БОЛЕЕ 2.

SUBWFHH,0;

SKPNC;

CLRFHH; ЕСЛИ БОЛЬШЕ, ТООБНУЛИМ.

MOVFWHH; ПЕРЕКОДИРУЕМ ВДВОИЧНЫЙ

CALLDEBIN; КОД ДЕСЯТКИ.

ADDWFHL,0; ПРИБАВИМЕДИНИЦЫ

MOVWFHOU; И ПОЛУЧИМДВОИЧНОЕ ЧИСЛО.

 ADDLW-18H;

SKPC; ЕСЛИ БОЛЬШЕ ИЛИРАВНО 24,

RETURN

CLRFHOU; ТО ОБНУЛИМ ЧАСЫДВОИЧНЫЕ

CLRFHL; И РАЗРЯДЫ СТАРШИЙ

CLRFHH; И МЛАДШИЙ.

RETURN; ВЕРНЕМСЯ.

YCE

CLRFCL; ОБНУЛЕНИЕ.

CLRFCH;

CLRFML;

RETURN;

;=====================================================

 END

;=====================================================

еще рефераты
Еще работы по коммуникациям и связям