Разработка системы управления кондиционером

Структурная схема системы управления кондиционером. Выбор пульта управления, датчика температуры, вентилятора, микроконтроллера и компрессора. Внутренняя структура и система команд транспортного уровня микросхемы DS18B20. Алгоритм работы кондиционера.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 14.11.2010
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Рисунок 26 - Спиральный компрессор (компрессор Scroll).

В технологическом плане компрессор Scroll более сложен, поскольку необходимо обеспечить герметичность по торцам спиралей и очень точное прилегание профилей спиралей. Поэтому компрессоры данного типа пока нашли ограниченное применение.

В поршневом компрессоре (рисунок 27) сжатие газа происходит при возвратно-поступательном движении поршня в цилиндре/

Рисунок 27 - Поршневой компрессор

а -- фаза всасывания хладагента,

б -- фаза сжатия и выпуска хладагента высокого давления.

1 -- выпускной клапан, 2 -- линия нагнетания хладагента,

3 -- поршень, 4 -- цилиндр,

5 -- шатун,

6 -- коленчатый вал,

7 -- головка клапанов,

8 -- линия всасывания хладагента,

9 --впускной клапан

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

В зависимости от типа конструкции различают герметичные, полугерметичные и открытые поршневые компрессоры. В герметичном компрессоре электродвигатель и компрессор находятся в едином герметичном корпусе. Такие компрессоры, мощностью 1,7...35 кВт применяются в холодильных машинах малой и средней мощности. В полугерметичных компрессорах, мощность которых варьируется от 30 до 300 Вт, электродвигатель и компрессор закрыты, соединены напрямую и расположены по горизонтали в едином разборном контейнере. В случае повреждения можно извлекать электродвигатель, получая доступ к клапанам, поршню, шатунам и другим элементам конструкции. В открытых компрессорах электродвигатель расположен снаружи (вал с соответствующими сальниками выведен за пределы корпуса).

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

Количество запусков компрессора является наиболее критичным для его срока службы. Именно на режиме запуска происходит наибольшее количество отказов, поэтому приходится ограничивать время между повторными пусками компрессора (как правило, не менее 6 мин), и время между остановом компрессора и его повторным пуском (2...4 мин). Характеристики выбранного компрессора приведены в таблице 5.

Таблица 5 - характеристики компрессора.

Модель

PH180X1C-4DT2

Номинальная выходная мощность компрессора, Вт

800

Объем смазочного масла (SUNISO 4GSD), см3

400

Ток при заторможенном роторе компрессора, А

-220 В

-240 В

23,6

25,5

Сопротивление обмотки компрессора, Ом (при 20С)

C-R: 3,13

C-S: 4,46

Предохранительное устройство компрессора

Тип

Внутреннее

Модель

UPQE0591-T51

Рабочая температура,С

Открыто

1505

Закрыто

9010

Ток управления, А (внутренняя температура 25С)

25 (переключение через 3-10 с)

Управляющий конденсатор

25

450

2.8 Выбор микроконтроллера

В настоящее время среди всех 8-разрядных микроконтроллеров - семейство MCS-51 является несомненным чемпионом по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии HMOS. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке.

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

В результате на сегодняшний день существует более 200 модификаций микроконтроллеров семейства 8051, выпускаемых почти 20-ю компаниями. Эти модификации включают в себя кристаллы с широчайшим спектром периферии: от простых 20-выводных устройств с одним таймером и 1К программной памяти до сложнейших 100-выводных кристаллов с 10-разрядными АЦП, массивами таймеров-счетчиков, аппаратными 16-разрядными умножителями и 64К программной памяти на кристалле. Каждый год появляются все новые варианты представителей этого семейства. Основными направлениями развития являются: увеличение быстродействия (повышение тактовой частоты и переработка архитектуры), снижение напряжения питания и потребления, увеличение объема ОЗУ и FLASH памяти на кристалле с возможностью внутрисхемного программирования, введение в состав периферии микроконтроллера сложных устройств типа системы управления приводами, CAN и USB интерфейсов и т.п.

Все микроконтроллеры из семейства MCS-51 имеют общую систему команд [4]. Наличие дополнительного оборудования влияет только на количество регистров специального назначения.

Основными производителями клонов 51-го семейства в мире являются фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems и ряд других.

В рамках СССР производство микроконтроллера 8051 осуществлялось в Киеве, Воронеже (1816ВЕ31/51, 1830ВЕ31/51), Минске (1834ВЕ31) .

Для данной задачи был выбран микроконтроллер AT89C51 фирмы Atmel [5]. Несмотря на то, что фирма Atmel уже давно делает упор на новое поколение микроконтроллеров (серии AVR), микроконтроллер AT89C51 тоже довольно широко применяется. И не случайно, так как эта микросхема имеет еще достаточно большой потенциал. Параметры микросхемы позволяют создавать широкий спектр современных электронных устройств, находящих свое применение в самых различных областях микропроцессорной техники. Главным преимуществом выбора именно этой микросхемы является ее широкая доступность и приемлемая цена.

3 Функциональная схема

Функциональная схема кондиционера изображена на рисунке 28.

Рисунок 28 - Функциональная схема кондиционера

4 Алгоритм работы кондиционера

Алгоритм работы кондиционера представлен на рисунке 29.

Рисунок 29 - Алгоритм работы кондиционера

5 Разработка программы

Программная реализация алгоритма работы кондиционера на языке ассемблер для микроконтроллера AT89C51 представлена в приложении 1.

В основной программе сначала определяются константы: коды банков памяти, счетчик задержки, буфер для приема данных из термодатчика, буфер для хранения заданной температуры помещения Туст, счетчик рабочих циклов кондиционера для определения его режима работы. Дальше присваивается начальное значение Туст и вызывается подпрограмма опроса клавиатуры с последующим определением нажатых клавиш. При последующих опросах клавиатуры, если клавиша нажата, то происходит переход к метке in1. Затем следует изменение Туст (увеличение или уменьшение на 1) и вызов ряда процедур для вывода Туст на ЖКИ №1. После вывода Туст запускается преобразование температуры помещения в термодатчике (Тпм) и чтение ее (с сохранением в буфере bufLAN). Далее Тпм выводится на ЖКИ №2, после чего происходит обработка Тпм (а именно запись Тпм в один байт) и сравнение Тпм<=Туст. Обнуляется счетчик циклов кондиционера и происходит переход к нужному режиму работы кондиционера. В конце основной программы происходит переход на один из режимов работы кондиционера или на метку in1 (где происходит анализ нажатых клавиш) по результатам выполнения подпрограмм reoh (режим охлаждения) и reob (режим обогрева).

Подпрограмма inkl ввдда с клавиатуры опрашивает две клавишы S1 и S2 и выводит в аккумулятор результат (0 бит аккумулятора - отвечает за кнопку S2, 1 бит аккумулятора - за кнопку S1).

Далее в приложении 1 представлен ряд подпрограмм для инициализации и вывода символов и строк на оба ЖКИ дисплея. Таблица символов ts необходима для удобства работы с кодами символов ЖКИ дисплеев (в ней все коды представлены по порядку). Подпрограмма вывода сообщения об ошибке будет использоваться при работе с 1-Wire шиной.

Подпрограмма вывода Туст на ЖКИ №1 записывает из bufLAN2 значение Туст в аккумулятор и отделяет единицы температуры от десятков, после чего выводит значение Туст на ЖКИ №1 со знаком «градус Цельсия».

Подпрограмма zader вызывается подпрограммами reoh и reob. Она с интервалом в 100мс опрашивает клавиатуру и выводит Тпм на ЖКИ №2. При нажатии клавиш подпрограмма записывает в аккумулятор значение 1 и завершает свою работу. По состоянию аккумулятора в подпрограмме reoh либо происходит выход из подпрограммы с целью анализа клавиатуры в основной программе (при значении 1 аккумулятора), либо продолжается ее выполнение (при значении 0 аккумулятора). На выполнение подпрограммы тратится примерно 3мин.

Подпрограмма sttmp предназначена для передачи по шине команды «Запуск процесса преобразования». Для этого, в качестве команды сетевого уровня, используется команда «Пропустить ПЗУ». Датчик переходит в режим преобразования. Подпрограмма использует банк номер 2. Сначала происходит сохранение в стеке регистра psw и переключение банков.

Затем вызов процедуры начального сброса. Снова контролируется код ошибки. Затем формируется команда сетевого уровня «Пропустить ПЗУ». Команда транспортного уровня («Запуск процесса преобразования») формируется с помощью кода 044Н. Получив эту команду, термодатчик переходит в режим преобразования температуры, а программа переходит в режим ожидания. Управление передается по метке stm4.

Процедура ожидания занимает всего две строки. Эти две строки реализуют цикл ожидания сигнала готовности. Сигнал готовности формирует микросхема термодатчика в момент, когда он закончит процесс преобразования температуры в код. Далее происходит чтение бита информации и его проверка. Если прочитанный бит равен нулю, то управление передается по метке stm4 и цикл чтения продолжается. Процесс чтения и проверки продолжается до тех пор, пока очередной раз не будет получена единица.

Подпрограмма содержат команды обработки ошибок. В случае возникновения ошибки управление передается к метке stm6. Здесь вызывается подпрограмма prErr, которая выводит сообщение об ошибке на экран. Затем управление передается по метке stmf на начало подпрограммы, и процесс передачи команды запуска на преобразование повторяется.

Подпрограмма чтения температуры называется rdtmp. Подпрограмма производит считывание температуры с датчика. Она возвращает значение измеренной температуры в виде двух байт, записанных в две старшие ячейки буфера bufLAN. Младший байт регистра температуры записывается по адресу bufLAN, а старший -- по адресу bufLAN+1.

Начинается подпрограмма rdtmp с команды сохранения регистра psw. Далее включается банк номер два.

После этого подпрограмма может начинать выполнение своей главной задачи: чтение регистров блокнотной памяти термодатчика. Начинается этот процесс с вызова процедуры начального сброса, проверяется признак ошибки. Далее выдается команда «Пропустить ПЗУ».

При этом датчик перейдет на транспортный уровень. Далее, программа перейдет к формированию команды «Чтение блокнотной памяти». Сначала в линию выдается код операции (0ВЕН). Затем начинается процесс чтения регистров термодатчика. Читаются только два первых регистра. Именно они и содержат значение температуры. Протокол 1-Wire допускает такой режим работы. Первый байт значения температуры помещается в ячейку памяти с адресом bufLAN. Второй байт и помещается в ячейку с адресом bufLAN+1. На этом подпрограмма rdtmp завершает свою работу. Перед выходом из подпрограммы восстанавливается содержимое регистра psw.

Подпрограмма resLAN предназначена для формирования импульса начального сброса. Эта же подпрограмма производит проверку наличия сигнала присутствия на линии. Подпрограмма способна обнаруживать два вида ошибок: обрыв линии и короткое замыкание. В случае возникновения ошибки подпрограмма возвращает код ошибки через аккумулятор.

Начинается подпрограмма resLAN с формирования импульса начального сброса. Процесс формирования начинается с того, что программа «подсаживает» линию. Затем формируется задержка длительностью 700 мкс. После чего линия «отпускается». Для формирования задержки используется метод пустого цикла. Сначала параметру цикла присваивается начальное значение. В данном случае это значение равняется 100. Именно столько раз в цикле вызывается подпрограмма Dely. После формирования импульса начального сброса программа приступает к проверке сигнала присутствия на линии. Для этого она формирует задержку в 65 мкс, а затем проверяет значение сигнала на линии. Если нет обрыва на линии и сигнал присутствия сформирован нормально, то именно в этот момент времени уровень сигнала на линии должен быть равен нулю. Если уровень сигнала на линии р1.1 равен нулю, то это значит, что ошибки не обнаружено. Управление передается по метке rst3. Если уровень сигнала на линии равен единице, то в аккумулятор помещается код ошибки «обрыв на линии», а затем подпрограмма досрочно завершается.

Если все же произошел переход к метке rst3 (ошибка не обнаружена), подпрограмма формирует задержку в 500 мкс и снова проверяет уровень сигнала на линии. Задержка в 500 мкс необходима для правильного завершения процесса начального сброса. По истечении этого промежутка времени сигнал присутствия должен уже закончиться и уровень сигнала на линии должен быть равен единице. Если это не так, то это значит, что линия просто закорочена. В таком случае в аккумулятор записывается код ошибки 2 («короткое замыкание») и программа досрочно завершается. Если короткого замыкания не обнаружено, то управление передается по метке rst3 и подпрограмма завершается нормальным образом. В этом случае, перед завершением подпрограммы в аккумулятор помещается нулевой код. Ноль-- это код отсутствия ошибки.

Подпрограмма mrslot (чтение слота) служит для чтения одного бита информации из ведомого устройства. Подпрограмма возвращает прочитанный бит через CY (признак переноса). Сначала подпрограмма формирует синхроимпульс. Для этого она «подсаживает» линию, формирует задержку в 1 мкс, а затем линию отпускает. После окончания синхроимпульса формируется задержка в 13 мкс и считывается уровень сигнала на линии. Прочитанный бит помещается в CY. Это и есть результат чтения слота. Однако на этом выполнение подпрограммы не завершается.

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

Программа mwlow записывает в слот нулевое значение. Действие подпрограммы сводится к формированию в пределах слота отрицательного импульса длительностью 80 мкс.

Подпрограмма mwhi чуть сложнее. Она выполняет запись в слот единичного значения. Действие подпрограммы начинается с формирования синхроимпульса длительностью 5 мкс. Для формирования такой длительности производится однократное обращение к подпрограмме Delay. После завершения синхроимпульса формируется задержка 75 мкс. Эта задержка доводит длительность слота до стандартной величины.

Подпрограмма Dely служит для формирования временных интервалов. Как видно из текста подпрограммы, она представляет собой один оператор nор и завершается командой выхода из подпрограммы. Такая подпрограмма обеспечивает задержку, примерно равную 5 мкс. Подпрограмму Delay удобно использовать при формировании относительно больших задержек по времени, включая вызов этой подпрограммы в тело пустого цикла. Команда пор не выполняет абсолютно никаких действий. В то же время, ее выполнение занимает один машинный цикл микроконтроллера. При тактовой частоте, равной 12 МГц, длительность машинного цикла будет одна микросекунда (12/12 = 1 мкс). В микросхеме АТ89С2051 частота тактового генератора делится на 12. Для формирования небольших временных интервалов достаточно нескольких операторов пор, поставленных подряд друг за другом. Для более длительных интервалов применяется пустой цикл. Цикл просто выполняет несколько пустых операторов определенное число раз. В представленных здесь подпрограммах широко используются оба способа формирования временных интервалов. В качестве счетчика цикла используется специальная ячейка памяти, обозначенная в программе, как LoopCnt.

Подпрограмма wr8LAN выводит содержимое байта, полученного через аккумулятор, бит за битом в режиме записи. Именно поэтому описываемая подпрограмма представляет собой, по сути, цикл для передачи битов. Регистр r1 используется в качестве параметра цикла. Начальное значение r1 равно восьми (по числу битов в байте). Выполнение цикла начинается с команды извлечения очередного бита. Для этого содержимое аккумулятора сдвигается вправо при помощи команды rrс. Действие этой команды приводит к тому, что очередной бит оказывается в ячейке признака переноса CY.

Затем программа оценивает значение этого бита. Если он равен единице, вызывается подпрограмма записи единицы в слот mwhi. В противном случае вызывается подпрограмма mwlow для записи в слот нуля. После выполнения одной из этих программ управление передается по метке wb3. В этой строке находится команда организации цикла. Она передает управление на начало цикла, если это не последний бит, и завершает цикл, если бит последний.

Подпрограмма wr1LAN предназначена для передачи по шине одного бита в режиме записи. Эта подпрограмма очень похожа на wr8LAN. Отличие только в отсутствии цикла. Бит информации, предназначенный для передачи по шине 1-Wire, передается в подпрограмму через ячейку CY. В зависимости от значения этого бита выполняется либо подпрограмма mwhi, либо mwlow.

Подпрограмма rd8LAN предназначена для чтения одного байта по шине 1-Wire. Программа возвращает прочитанный байт в аккумулятор. Основная часть подпрограммы -- это цикл ввода битов. В качестве параметра цикла используется регистр r1. Первая команда, выполняемая в теле цикла -- вызов подпрограммы чтения слота. Она помещает прочитанный бит в ячейку CY. Затем бит помещается в аккумулятор методом сдвига. Сдвиг производится при помощи команды rrс. После каждого такого сдвига в аккумулятор «вдвигается» очередной прочитанный бит. После восьми циклов сдвига аккумулятор будет содержать полноценный прочитанный байт. Оператор djnz служит для организации всего этого цикла.

Подпрограмма rdlLAN предназначена для чтения одного бита из линии 1-Wire. Она вызывает подпрограмму чтения слота mrslot.

В ОЗУ микроконтроллера температура записана в двоичном виде. Перед нами стоит задача: перевести это значение из двоичной системы в десятичную. И лишь затем вывести его на экран.

Для двоично-десятичного преобразования удобно использовать команду целочисленного деления div. Для того, чтобы осуществить двоично-десятичное преобразование, нужно выполнить целочисленное деление исходного числа на 10. После такой операции аккумулятор будет содержать частное, а регистр b -- остаток от деления. Частное будет соответствовать количеству десятков, а остаток -- количеству единиц в десятичном представлении числа.

Затем можно просто вывести на экран два этих числа. Сначала содержимое аккумулятора, а затем содержимое регистра b. В результате, на экране мы получим изображение целой части значения температуры в десятичном виде. Такой простой метод преобразования будет правильно работать только в том случае, если целая часть числа не превышает значения 99. При большем значении температуры в старшем разряде полученного десятичного числа будут появляться буквы: частное от деления будет больше 10. Однако для измерения температуры помещения диапазона (0...60)°С вполне достаточно. Для реализации описанного алгоритма разработана подпрограмма prtmp. Подпрограмма prtmp читает два байта температуры из буфера bufLAN и выводит значение целой части температуры на экран в десятичном виде.

Подпрограмма reoh обеспечивает режим охлаждения работы кондиционера. Она дискретно (с интервалом в 3мин.) вклычает и выключает компрессор и вентилятор и анализирует разницу Туст и Тпм. Если Тпм меньше Туст на 2 градуса в течении двух циклов работы кондиционера в режиме охлаждения, то кондиционер переходит в режим обогрева (подпрограмма reoh с помощью аккумулятора переходит к метке in4 основной программы). Если нет, то кондиционер остается в режиме охлаждения (переходит к метке in5). Подпрограмма reoh так же вызывает подпрограмму zader ( если клавиша нажата, то переход с помощью аккумулятора к метке in1).

Подпрограмма reob обеспечивает режим обогрева работы кондиционера. Она не представлена в приложении 1, но работает аналогично подпрограмме reoh (включает и выключает не компрессор, а нагревательный элемент).

ЗАКЛЮЧЕНИЕ

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

Разработанная система управления позволяет поддерживать заданную температуру в помещении, удовлетворяет основным требованиям: обеспечивает экономичность, низкую стоимость, простоту в использовании и минимальные затраты на эксплуатацию.

В процессе выполнения работы был выбран термодатчик с 1-Wire интерфейсом, который оптимально подходит для решения задач курсового проекта. Была разобрана работа 1-Wire интерфейса на разных уровнях программной реализации. Выбраны типичные исполнительные устройства кондиционера, такие, как компрессор, вентилятор, нагревательный элемент по таким критериям, как низкая стоимость, простоту в использовании и минимальные затраты на эксплуатацию. Был выбран микроконтроллер семейства МК51 по тем же критериям.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. В.В.Коляда. Кондиционеры - М.: СОЛОН-Пресс, 2002 - с. 233.

2. А.В.Белов. Конструирование устройств на микроконтроллерах - СПб.: Наука и техника, 2005 - с. 255.

3. www.inrost.ru - научно-техническая библиотека сайта фирмы ИНРОСТ.

4. А.В.Логинов. Программирование микро-ЭВМ семейства МК51: Учеб. Пособие - СПб.: Балт. гос. тех. ун-т, 1996 - 72с.

5. www.atmel.ru - официальный сайт корпорации Atmel.

ПРИЛОЖЕНИЕ

Приложение 1 ;основная программа

bank0 EQU 00000000B ;коды банков памяти

bank1 EQU 00001000B

bank1 EQU 00010000B

bank2 EQU 00110000B

DSEG

ORG 30H

LoopCnt: DS 1 ;счетчик задержки

bufLAN: DS 8 ;буфер для приема данных из MicroLAN

bufLAN2: DS 8 ;буфер для Туст

bufLAN3: DS 1 ;счетчик рабочих циклов кондиционера

ORG 60H ;начало стека

stack: DS 20H ;глубина стека

main: mov bufLAN2, #18H ;начальное значение Туст=24 градуса Цельсия

call inkl

jz in3 ;если клавиши не нажаты переход

in1: cjne a, #11B, in2 ;если обе клавиши нажаты переход

inc bufLAN ;Туст увеличить на 1

jmp in3

in2: dec bufLAN2

in3: call eclr1 ;вывод Туст

mov a, #2

call ecur1

call prtmu ;Туст на ЖКИ №1

call eclr2

mov a, #2

call ecur2

call sttmp ;запуск преобразования Тпм

call rdtmp ;чтение Тпм

call prtmp ;вывод Тпм на ЖКИ №2

mov a, bufLAN+1 ;записьТпм в аккумулятор

swap a

anl a, #0F0H

mov R5, a

mov a, bufLAN

swap a

anl a, #0FH

add a, R5 ;в аккумуляторе байт Тпм

mov a, #LE(a, bufLAN2) ;сравнение Тпм<=Туст

mov bufLAN3, #0 ;обнуление счетчика циклов работы кондиционера

cjne a, #0FFFFH, in5 ;обработкаусловия Тпм<=Туст

in4: call reob

jmp in6

in5: call reoh

in6: mov b, a

mov a, EQ(b, #1)

cjne a, #0FFFFH, in7

jmp in1

in7: mov a, EQ(b, #4)

cjne a, #0FFFFH, in5

jmp in4

;Подпрограмма ввода с клавиатуры (0 бит аккумулятора - за S2, 1 бит - за S1)

inkl: setb P0.0 ;установка 1 на линиях клавиатуры

setb P0.1

mov a, P0 ;считывание порта p0

anl a, #00000011B ;обнуление лишних разрядов

xrl a, #00000011B ;инвертирование

ret

;подпрограмма сброса ЖКИ №1

eres1: mov P2, #0FH ;засылаем адрес регистра блокировки

setb P2.4

clr P2.4

mov P2, #01000001B ;записываем код снятия блокировки

setb P2.4

clr P2.4

mov P2, #0 ;устанавливаем адрес на первый разряд

setb P2.4

clr P2.4

ret

; подпрограмма сброса ЖКИ №2

eres2: mov P3, #0FH

setb P3.4

clr P3.4

mov p3, #01000001B

setb P3.4

clr P3.4

mov P3, #0

setb P3.4

clr P3.4

ret

;подпрограмма очистки ЖКИ №1

eclr1: call eres1 ;сброс экрана

mov P2, #01000000B ;установка управляющего кода

mov R0, #20 ;инициализация счетчика разрядов

c11: set P2.4 ;импульс записи

clr P2.4

djnz R0, c11 ;оператор цикла

ret

; подпрограмма очистки ЖКИ №2

eclr2: call eres2

mov P3, #01000000B

mov R0, #20

c21: set P3.4

clr P3.4

djnz R0, c21

ret

;подпрограмма установки курсора для ЖКИ №1 по аккумулятору

ecur1: anl a, #0FH ;отделяем биты адреса

mov P2, a ;устанавливаем адрес на первый разряд

setb P2.4

clr P2.4

ret

; подпрограмма установки курсора для ЖКИ №2 по аккумулятору

ecur2: anl a, #0FH

mov P3,a

setb P3.4

clr P3.4

ret

;таблица символов

ORG 0600H

ts: DB 0EEH ;0

DB 060H ;1

DB 02FH ;2

DB 06DH ;3

DB 0E1H ;4

DB 0CDH ;5

DB 0CFH ;6

DB 068H ;7

DB 0EFH ;8

DB 0EDH ;9

DB 0EBH ;A

DB 0C7H ;b

DB 08EH ;C

DB 067H ;d

DB 08FH ;E

DB 08BH ;F

DB 000H ;

DB 0A9H ;

DB 001H ;-

DB 003H ;r

DB 047H ;o

;подпрограмма вывода символа на ЖКИ №1 через аккумулятор

prch1: push DPL ;сохранение регистров в стеке

push DPH

push b

mov DPTR, #ts ;начало таблицы символов

mov c, acc.7 ;сохраняем значение точки

clr acc.7 ;сбрасываем значение бита

movc a, @a+DPTR ;получаем выводимый код

mov acc.4, c ;восстанавливаем значение точки

mov b, a ;сохраняем его в b

anl a, #0FH ;отделяем младший полубайт

mov P2, a ;выводим его на индикатор

setb P2.6 ;вкл. Режим вывода данных

setb P2.4 ;импульс записи

clr P2.4

mov a, b ;восстанавливаем выводимый код

swap a

anl a, #0FH ;отделяем старший полубайт

mov p2, a ;выводим его на индикатор

setb p2.6 ;вкл. Режим вывода данных

setb P2.4 ;импульс записи

clr P2.4

pop b

pop DPH ;восстановление регистров

pop DPL

ret

;подпрограмма вывода символа на ЖКИ №2 через аккумулятор

prch2: push DPL ;сохранение регистров в стеке

push DPH

push b

mov DPTR, #ts ;начало таблицы символов

mov c, acc.7 ;сохраняем значение точки

clr acc.7 ;сбрасываем значение бита

movc a, @a+DPTR ;получаем выводимый код

mov acc.4, c ;восстанавливаем значение точки

mov b, a ;сохраняем его в b

anl a, #0FH ;отделяем младший полубайт

mov P3, a ;выводим его на индикатор

setb P3.6 ;вкл. Режим вывода данных

setb P3.4 ;импульс записи

clr P3.4

mov a, b ;восстанавливаем выводимый код

swap a

anl a, #0FH ;отделяем старший полубайт

mov P3, a ;выводим его на индикатор

setb P3.6 ;вкл. Режим вывода данных

setb P3.4 ;импульс записи

clr P3.4

pop b

pop DPH ;восстановление регистров

pop DPL

ret

;подпрограмма вывода сообщения на ЖКИ №2

prstr2: push psw ;сохранение регистра psw

mov psw, #bank3 ;включаем банк 3

ps1: mov a, #0

movc a, @a+DPTR ;получение очередного символа

cjne a, #0, ps2 ;если это не последний выводим

pop psw ;завершение подпрограммы

ret

ps2: call prch2 ;вывод символа на экран

inc DPTR ;увеличиваем значение указателя

jmp ps1

;подпрограмма вывода сообщения об ошибке

prErr: push acc

call eclr2 ;очистка экрана

mov a, #2 ;курсор в позицию 2

call ecur2

mov DPTR, #serr ;вывести надпись «Error»

call prst2

pop acc

call prch2 ;вывод номера ошибки

ret

;сообщение «Error»

ORG 0680H

Serr: DB 14, 19, 19, 20, 19, 0 ;сообщение «Error», 0 в конце - признак окончания слова

;подпрограмма вывода Туст на ЖКИ №1

prtmu: mov a, #16

call prch1

mov a, bufLAN2

mov b, #10

div ab

call prch1

mov a, b

call prch1

mov a, #17

call prch

mov a, #0CH

call prch1

ret

;подпрограмма с длительностью выполнения примерно 3 мин. опроса клавиатуры и вывода Тпм

zader: mov R2, #7

za1: mov R1, #255

za2: mov R0, #56;

za3: mov LoopCnt, #255

za4: call Delay

djnz LoopCnt, za4

djnz R0, za3

call inkl ;опрос клавиатуры

jnz za5 ;переход при нажатии

call eclr2 ;вывод Тпм

mov a, #2

call ecur2

call sttmp

call rdtmp

call prtmp

djnz R1, za2

djnz R2, za1

mov a, #0

ret

za5: mov a, #1

ret

;подпрограмма запуска процесса измерения температуры

sttmp: push psw

mov psw, #bank2 ;выбор банка 2 памяти

stm1: call resLAN ;сброс

cjne a, #0, stm6 ;если ошибка переход

mov a, #0CCH ;пропуск ПЗУ

call wr8LAN

mov a, #44H ;запуск преобразования

call wr8LAN

stm4: call rd1LAN ;запрос об окончании преобразования

jne stm4 ;если не готово / повторить

stm5: pop psw ;выход из подпрограммы

ret

stm6: call prErr ;если ошибка, печать

jmp stm1 ;перейти в начало

;подпрограмма чтения температуры

;выходные параметры - температура в bufLAN - младший байт, в bufLAN+1 - старший байт

rdtmp: push psw

mov psw, #bank2 ;выбор банка 2 памяти

call resLAN ;вызов процедуры сброса

cjne a, #0, rtm2 ;если ошибка

mov a, #0CCH ;пропуск ПЗУ

call wr8LAN

mov a, #0BEH ;выдать команду

call wr8LAN

call rd8LAN ;чтение младшего байта

mov bufLAN, a ;запись в буфер

call rd8LAN ;чтение старшего байта

mov bufLAN+1, a ;запись в буфер

pop psw ;завершение программы

ret

rtm2: call prErr ;если ошибка, вывести на экран

jmp rtm1 ;перейти в начало

;подпрограмма формирования сигнала начального сброса

resLAN:clr P1.1 ;закорачиваем линию

mov LoopCnt, #100 ;задержка 700 мкс

rst1: call Delay

djnz LoopCnt, rst1

setb P1.1 ;отпускаем линию

mov LoopCnt, #9 ;задержка 65 мкс

rst2: call Delay

djnz LoopCnt, rst2

jnb P1.1, rst3 ;проверка сигнала присутствия

mov a, #1 ;код ошибки «нет датчика»

ret

rst3: mov LoopCnt, #71 ;задержка 500 мкс

rst4: call Delay

djnz LoopCnt, rst4

jb P1.1, rst5 ;если на линии 1 переход

mov a, #2 ;код ошибки «КЗ в линии»

ret

rst5: mov a, #0 ;код нормального завершения

ret

;подпрограмма чтения слота (через признак переноса)

mrslot: clr P1.1 ;закоротить линию

nop

setb P1.1 ;отпустить линию

call Delay ;задержка 13 мкс

call Delay

nop

nop

nop

mov C, P1.1 ;прочитать и сохранить бит

mov LoopCnt, #8 ;задержка 60 мкс

msl1: call Delay

djnz LoopCnt, msl1

ret

;подпрограмма записи 0 в слот

mwlow: clr P1.1 ;закоротить линию

mov LoopCnt, #11 ;задержка 80 мкс

mwl1: call Delay

djnz LoopCnt, mwl1

setb P1.1 ;отпустить линию

ret

;подпрограмма записи 1 в слот

mwhi: clr P1.1 ;закоротить линию

call Delay ;задержка 5 мкс

setb P1.1 ;отпустить линию

mov LoopCnt, #11 ;задержка 75 мкс

mwh1: call Delay

djnz LoopCnt, mwh1

ret

;процедура задержки 5 мкс (при тактовой частоте 12МГц)

Delay: nop

ret

;программа записи байта через аккумулятор

wr8LAN:

mov R1, #8 ;инициализация счетчика разрядов

wb1: rrc A ;младший бит в C

jc wb2 ;если текущий бит = 0

call mwlow ;запись 0 в слот

jmp wb3

wb2: call mwhi ;запись 1 в слот

wb3: djnz R1, wb1 ;продолжать, если не последний

ret

;подпрограмма записи бита, который передается через С

wr1LAN:

jc wb4 ;если бит = 0

call mwlow ;запись 0 в слот

jmp wb5

wb4: call mwhi ;запись 1 в слот

wb5:

ret

;подпрограмма чтения байта

rd8LAN:

mov R1, #8 ;счетчик количества битов

rb1: call mrslot ;чтение очередного бита

rrc A ;сдвиг битов младшим разрядом вперед

djnz R1, rb1 ;продолжать, если не последний

ret

;подпрограмма чтения бита

rd1LAN:

call mrslot

ret

;вывод Тпм наЖКИ №2

prtmp: mov a, #16 ;вывод пробела

call prch2

mov a, bufLAN+1 ;считываем старший байт

swap a ;обмен тетрад

anl a, #0F0H ;получили старший полубайт

mov R5, a ;временно записываем в R5

mov a, bufLAN ;считываем младший байт

swap a ;обмен тетрад

anl a, #0FH ;получили младший полубайт

add a, R5 ;складываем полубайты

mov b, #10 ;деление на 10

div ab

call prch2 ;вывод десятков

mov a, b ;берем остаток от деления

call prch2 ;вывод единиц

mov a, #17 ;вывод символа «градус»

call prch2

mov a, #0CH ;вывод буквы «С»(Цельсия)

call prch2

ret

;подпрограмма режима охлаждения

reoh: clr P0.2 ;выкл. Нагревательный элемент

setb P0.4 ;вкл. компрессор

setb P0.3 ;вкл. вентелятор

call zader

jz re4 ;переход при нажатой клавише

ret

re4: clr P0.4 ;выкл. компрессор

clr P0.3 ;выкл. вентелятор

call zader

jz re3 ;переход при нажатой клавише

ret

re3: mov a, bufLAN+1

swap a

anl a, #0F0H

mov R5, a

mov a, bufLAN

swap a

anl a, #0FH

add a, R5 ;в аккумуляторе байт Тпм

mov b, bufLAN2

mov b, #b-2

mov a, #LE(a, b) ;сравнение Тпм<=Туст-2

cjne a, #0FFFFH, re1 ;переход, если не истина

inc bufLAN3 ;счетчик циклов режима увеличить на 1

mov a, #GT(bufLAN3, 2)

cjne a, #0FFFFH, re2 ;сравнение «счетчик циклов>=2»

mov bufLAN3, #0 ;обнуление счетчика

mov a, #4 ;в режим обогрева

ret

re1: mov bufLAN3, #0 ;обнуление счетчика

re2: mov a, #5 ;режим охлаждения

ret

;конец программы

end


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.