Мікропроцесорна система управління мікрокліматом теплиці

Автоматизація процесу створення оптимальних параметрів середовища вирощування у спорудах захищеного грунту. Розробка структурної і принципової схеми управління мікрокліматом теплиці, алгоритму та програми на мові асемблера для мікропроцесора AT89С51.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык украинский
Дата добавления 15.06.2014
Размер файла 1017,3 K

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

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

Размещено на http://www.allbest.ru/

Зміст

Вступ

1. Аналіз технічного завдання курсової

1.1 Призначення системи

1.2 Мета створення системи

1.3 Порядок роботи з пристроєм

1.4 Функціонування системи

2. Розробка і опис структурної схеми

3. Розробка принципової схеми і вибір елементної бази

3.1 Вибір мікропроцесора

3.2 Вибір температурного датчика

3.3 Вибір датчика вологості

3.4 Вибір засобів індикації

3.5 Вибір кнопок управління системою

3.6 Вибір виконавчих пристроїв

4. Розробка алгоритмів роботи програми

5. Написання текстів програми

5.1 Проведення аналізу даних із температурного датчика

5.2 Проведення аналізу даних із датчика вологості

Висновок

Література

Додатки

Вступ

На значній території нашої країни у зв'язку з тривалою, нерідко суворою зимою і коротким, не завжди теплим літом складаються несприятливі умови для вирощування теплолюбних рослин у відкритому ґрунті.

Для розширення можливості вирощування рослин і постачання населення свіжими продуктами харчування, особливо овочами, в несприятливі періоди року застосовують різні споруди захищеного ґрунту, в яких штучно створюються необхідні умови для росту і розвитку рослин. За ступенем задоволення потреб рослин у комплексі чинників життєзабезпечення або по технологічної складності споруди захищеного грунту поділяють на парники, утеплений ґрунт і теплиці .

У спорудах захищеного ґрунту необхідно прагнути до створення оптимальних параметрів середовища вирощування. На жаль, в найпростіших теплицях на присадибних ділянках в основному на сонячному обігріві не завжди цьому приділяється належна увага. У результаті рослини в таких теплицях постійно перебувають у стресових умовах. Вночі, як правило, рослини переохолоджуватися, вдень у сонячну погоду перегріваються. Особливо поглиблюються несприятливі дії в теплицях, розташованих на садово-городніх ділянках, значно віддалених від місць постійного проживання власників. У таких теплицях, відвідуваних, як правило, лише у вихідні дні, немає можливості оперативно втрутитися у формування клімату, в результаті чого він нерідко далекий від оптимального. Правильний тепловий режим в теплицях дозволяє підвищити врожайність в 2-3 рази.

Існують численні системи автоматизованого управління мікрокліматом теплиць. Як правило, такого роду системи, що поставляються численними фірмами (НВО " схемотехніки ", НВФ " Фіто ", система " Агротем ") містять повний комплекс управління мікрокліматом.

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

Особливістю агротехніки нашої країни є те, що 70 % населення самі забезпечують себе овочами в літній та осінній період за рахунок вирощування культур на присадибних ділянках. Природно, що в таких умовах вирощування людина не може постійно контролювати мікроклімат у теплиці, а й купувати дорогу систему теж немає можливості . Багато хто з дачників використовують підручні, не завжди надійні та ефективні властивості - гідроциліндри для автоматичного відкривання кватирок при дуже високій температурі, бочку з невеликим отвором для поливу та інше. Ці пристосування не дороги, але малоефективні і не надійні (гідроциліндри часто виходять ладу, тече масло, ущільнювальне кільця швидко приходять в непридатність, температура, при якій відкривається кватирка, вимірюється емпірично і т.д.). Тому необхідно створити просту систему управління основними параметрами мікроклімату: температура і вологість.

1. Аналіз технічного завдання курсової

Метою даного проекту є створення системи контролю мікрокліматом теплиці на базі мікропроцесора AT89C51.

Рисунок 2.1 - Зовнішній вигляд пристрою і схема зв'язків

1.1 Призначення системи

1. Контроль температури і вологості в теплиці

2. Забезпечення зручного керування мікрокліматом в теплиці.

3. Можливість виставляти різні типи мікроклімату в теплиці для вирощування різних типів культур.

1.2 Мета створення системи

1. Точне дотримання умов вирощування культур для підвищення врожайності.

2. Автоматизація операцій поливу і провітрювання, що не вимагають безпосередньої участі у вирощуванні культур.

3. Стеження за зміною мікроклімату для захисту культур від несприятливих факторів (різка зміна температур, посуха).

1.3 Порядок роботи з пристроєм

1. Для включення пристрою підключаємо його до постійного джерела живлення за допомогою виводів "Живлення". Натискаємо клавішу вкл. і одразу загориться "Індикатор роботи" пристрою і на "Дисплеях температури і вологості" відобразяться відповідно значення температури і вологості, тобто температура і вологість на "датчику температури" і "датчику вологості".

2. Після включення, починають успішно працювати всі, або декілька елементів пристрою. Кількість початково задіяних компонентів визначається відповідно до співвідношення температури чи вологості. Температура і вологість, яку ми хочемо досягнути (відповідно до режимів роботи) і реальної (температура і вологість на відповідних датчиках).

3. По замовчуванню при запуску системи будуть стояти параметри температури і вологості відповідно до 1 режиму роботи(Таблиця 1).

Для зміни режиму роботи використовуються клавіші "+" та "-" на пульті керування. Відповідно до зміни режиму роботи загорається відповідний світлодіод і відповідно змінюються параметри температури і вологості згідно наступного режиму роботи.

1.4 Функціонування системи

Після включення системи проводиться вибір вирощуваної культури. Далі зчитується температура, виводиться на індикатор, аналізується. У разі необхідності - її коригування (включення нагрівача або провітрювання), потім зчитується вологість, аналізується і приймається рішення про необхідність поливу.

Кожен режим характеризується своїми параметрами, представленими в таблиці:

Таблиця 2.1

Режим

Вирощувана культура

Температура повітря

Вологість

1

томат

17

22

30-60

2

огірок

19

23

60-80

3

перець

18

21

35-65

4

троянди

21

24

70-90

5

баклажани

25

30

40-65

2. Розробка і опис структурної схеми

Рисунок 3.2 - Структурна схема мікропроцесорної системи

Структурна схема є першою моделлю електронного пристрою, яка відображає принцип роботи пристрою в загальному вигляді. Перевагою структурної схеми є те, що по ній можна швидко одержати уявлення про склад, структуру і виконувані ним функції, не відвертаючи уваги на схемну реалізацію його функціональних частин.

3. Розробка принципової схеми і вибір елементної бази

3.1 Вибір мікропроцесора

мікроклімат теплиця алгоритм мікропроцесор

В якості мікропроцесора в системі управління використовується однокристальна 8-ми розрядна мікро-ЕОМ АТ 89С 51.

Мікросхема містить: 8-ми розрядний центральний процесор, логічний процесор з порозрядною і побайтовою обробкою даних, вмонтований тактовий генератор, вмонтований ОЗП даних (128 байт), 20 регістрів спеціального призначення, 8 шин входу/виходу, 2 вмонтованих 16-ти розрядних таймери-лічильники, двохсторонній порт послідовного входу/виходу, система переривань двома рівнями пріоритетності від двох зовнішніх і трьох внутрішніх пристроїв, адресний простір (64 к) для зовнішньої ПЗП, адресний простір (64 к) для зовнішньої програмної пам'яті. Дана мікросхема складається з 20000 інтегральних елементів.

Два програмованих 16-бітних таймери/лічильника (Т/Л 0 і Т/Л 1) можуть бути використані як таймери або лічильники зовнішніх подій. При роботі як таймер вміст Т/Л інкрементується в кожному машинному циклі, тобто через кожні 12 періодів кварцового резонатора. При роботі в режимі лічильника вміст Т/Л інкрементується після переходу з 1 в 0 зовнішнього вхідного сигналу, який подається на відповідний (Т 0, Т 1). Вміст лічильника буде збільшене на 1, у тому випадку, якщо в попередньому циклі був визначений вхідний сигнал високого рівня (1), а в наступному - сигнал низького рівня (0). На розпізнавання переходу потрібно два машинних цикли, тобто максимальна частота підрахунку вхідних сигналі дорівнює 1/24 частоти резонатора.

Рисунок 4.3 - Умовне графічне позначення мікросхеми AT89C51

Таблиця 4.2 - Призначення виводів AT89C51

Номер вив.

Найменування

Призначення

1…8

Р 1.0…Р 1.7

Входи/виходи 8-ми розрядного двохнаправленого порта 1

9

RST

Вхід обнуления

10

RXD

Вхід послідовного каналу в асинхронному режимі

11

TXD

Вихід послідовного каналу в асинхронному режимі

12

INTO

Вхід 0 переривання або управління лічильником 0

Електричні параметри:

Напруга живлення……- 4,75…5,25В

Вхідна напруга високого рівня……- 0,5…+5,75В

Вхідна напруга низького рівня……- 0,5…+0,8В

Вихідна напруга високого рівня……>2,4В

Вихідна напруга низького рівня при І0ВИХ=1,6 мА……<0,45В

Струм споживання……<150 мА

Струм втрат на входах, при 0<ивх<5,75В ……< |±10|мкА

Споживана потужність……0,69Вт

Ємність навантаження……100 пФ

Тактова частота 3,5...12 МГц

Мінімальний час виконання короткої команди……Імкс

Швидкість обміну даними в послід, порті вводу/виводу……110…375000біт/с

Кількість базових команд……111

Ємність стеку……0,128 кбайт

Об'єм адресної пам'яті команд, даних……64 кбайт

Напруга живлення……<7В

Вхідна напруга високого рівня……<7В

Вхідна напруга низького рівня……<7В

Ємність навантаження……<500 пФ

Температура навколишнього середовища - 10…+70°С

3.2 Вибір температурного датчика

Як датчик температури був обраний датчик DS1621 фірми Dallas, представлений на Рисунку 4.3.

Рисунок 4.4 - Температурний датчик DS1621.

Основні його властивості:

* Пряме перетворення температури в цифровий код, без додаткових АЦП

* Можливість передачі даних через одне-, двох-провідний інтерфейс

* Можливість адресації декількох датчиків на одній шині

* Заводське калібрування і вбудована корекція нелінійності, не потрібно додаткової підстроювання

* Широкий діапазон виміру температури (-55 ... +125 ° С)

* Висока швидкодія (час перетворення від 0.5 до 2 с)

* захист від агресивного середовища

Технічні характеристики датчика наведені в таблиці 4.3:

Таблиця 4.3

Точність

±0.5 °С

Час перетворення

1 с

Кількість біт

9 бит

Інтерфейс

2W (I2C)

Тип корпусу

DIP8, SO8

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

3.3 Вибір датчика вологості

Як датчик вологості був обраний HIH 4000-003. Він забезпечує широкий діапазон вимірювань, високу надійність і низьку вартість при використанні мікроелектронної технології. Це дозволяє проводити ємності планарного типу тонкоплівкових методом. Завдяки цьому ми маємо мініатюрні габарити чутливого елемента, можливість імплементації на кристалі спеціалізованої інтегральної схеми обробки сигналу. Технологічність і високий вихід придатних кристалів забезпечують малу вартість продукції даного типу. Параметри датчика вологості наведені в таблиці 5. Можливо пряме підключення до АЦП мікроконтролера завдяки стандартному розмаху вихідного сигналу (від 1.0 до 4.0 В). Встановити датчик необхідно таким чином, щоб краплі води при поливі не потрапляли не його, а також захистити від дії прямих сонячних променів, щоб уникнути зниження точності вимірювання.

Таблиця 4.4

Параметр

Значення

Діапазон вимірювань, % RH

0...100

Повторюваність, ±% RH

0,5

Напруга живлення, В

4,0...5,8

Струм споживання, мА

0,2

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

-40...85

Температура зберігання, °С

-50...125

3.4 Вибір засобів індикації

В системі нам необхідно візуально відображати поточну температуру в теплиці і обраний режим роботи. Для цього будемо використовувати семисегментні індикатори і світлодіодну лінійку.

Рисунок 4.5 - Блок індикації(світлодіодна лінійка)

HL1-HL5 - індикатори режимів роботи системи.

HL6 - індикатор включення/виключення системи.

HG1,HG2 - індикатор температури.

HG3,HG4 - індикатор вологості.

Рисунок 4.6 - Блок індикації(семи сегментні індикатори)

3.5 Вибір кнопок управління системою

Рисунок 4.5 - Дискретні кнопки

S1 - кнопка включення/виключення системи.

S2 - кнопка для вибору режиму роботи (При натисканні цієї клавіші режим роботи переключається на наступний по-порядку)

S3 - кнопка для вибору режиму робот (При натисканні цієї клавіші режим роботи переключається на попередній по-порядку)

3.6 Вибір виконавчих пристроїв

В системі мікропроцесор повинен управляти охолодженням, поливом та обігріванням теплиці. Для охолодження та поливу будем використовувати

Мотори(ENG1,ENG2), а для обігріву нагрівальну лампу(L1).

В якості ключових елементів вибираємо транзистори(VT1,VT2,VT3), які комутують напругу на відповідне електромагнітне реле. Для запобігання самоіндукції електромагнітного реле використовуєм діоди(VD1,VD2,VD3).

Для замикання або розмикання електричного кола використовуєм електромагнітне реле(RL1,RL2,RL3).

Рисунок 4.6 - Схема підключення виконавчих пристроїв.

4. Розробка алгоритмів роботи програми

1. Пристрій вмикається після натиснення клавіші S1. Загорається HL6.

2. Проводиться опитування датчиків температури і вологості.

3. Виводяться дані про навколишню температуру і вологість на індикатори температури(HL1,HL2) і вологості(HL3,HL4).

4. Якщо натиснута клавіша S2 - проводиться вибір наступного режиму роботи (1 режим по замовчуванню).

5. Якщо натиснута клавіша S3 - проводиться вибір попереднього режиму роботи.

6. В залежності від вибраного режиму, в якого є свої конкретні параметри температури чи вологості, починають працювати обігрів, полив чи охолодження, які коректують ці параметри в разі необхідності (якщо завелика температура то вмикається охолодження, якщо навпаки - обігрів, якщо недостатня вологість повітря то включається автоматично полив).

7. В процесі коректування цих параметрів постійно зчитується температура і вологість з датчиків і посилає сигнали(якщо температура чи вологість достатня тоді виключити обігрів, охолодження чи полив)

8. Якщо натиснута клавіша S1 - система виключається.

Рисунок 5.1 - Алгоритм роботи програми

5. Написання текстів програми

$include(mod51)

org 0

wait:

mov p1,#0; очистка p1

mov p3,#0 ; очистка p3

setb p0.2 ; перевірка світлодіодів

setb p0.3

setb p0.4

setb p0.5

setb p0.6

setb p0.7

clr p2.0 ;очистити p2.0

clr p2.1 ;очистити p p2.1

clr p2.2 ;очистити p2.2

;початок роботи

start:

jb p2.3,wait ; включення схеми

clr p0.7 ; подача сигналу на світлодіод

jb p2.4,nok1 ; якщо натиснута s2 то перейти по мітці

jb bitkl1,nok11

setb bitkl1

cjne r1,#5,no01 ;перевірка значення в акумуляторі і перехід по мітці

jmp nok11

no01:

inc r1 ; інкримент регістра r1

jmp nok11

nok1:

clr bitkl1

nok11:

jb p2.5,nok2

jb bitkl2,nok22

setb bitkl2

cjne r1,#1,no02 ;перевірка значення в акумуляторі і перехід по мітці

jmp nok22

no02:

dec r1 ; декримент регістра r1

jmp nok22

nok2:

clr bitkl2

nok22:

cjne r1,#1,ex11 ; включення 1-го режиму і відповідного світлодіода

clr p0.2

setb p0.3

jmp st

ex11:

cjne r1,#2,ex2 ; включення 2-го режиму і відповідного світлодіода

clr p0.3

setb p0.2

setb p0.4

jmp st

ex2:

cjne r1,#3,ex3 ; включення 3-го режиму і відповідного світлодіода

clr p0.4

setb p0.3

setb p0.5

jmp st

ex3:

cjne r1,#4,ex4 ; включення 4-го режиму і відповідного світлодіода

clr p0.5

setb p0.4

setb p0.6

jmp st

ex4:

clr p0.6 ; включення 5-го режиму і відповідного світлодіода

setb p0.5

st:

setb T_1WIRE_1 ; переіхід до 1 - го датчика

setb T_1WIRE_2 ; переіхід до 2 - го датчика

setb type_dat ;вибір 1 - го датчика

call GetTemp ; отримати температуру

clr type_dat ;вибір 2 - го датчика

call GetTemp ; отримати температуру

jmp start

Зчитування і передача значення з датчика температури на індикатор виконується

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

GetTemp:

jnb type_dat, next1_1

call Reset_1Wire_1

jmp next1_2

next1_1: call Reset_1Wire_2

next1_2:

mov a, #0CCh; Посилаємо команду Skip ROM [CCh].

call RW_Byte

mov a, #044h; Посилаемо команду Convert T [44h].

call RW_Byte

; затримка, не менше 750 мс

mov A,#0

call Big_delay

call Big_delay

call Big_delay

call Big_delay

jnb type_dat, next6_1

call Reset_1Wire_1

jmp next6_2

next6_1: call Reset_1Wire_2

next6_2:

mov A,#165 ; (500 - 4) / 3 = 165

call delay

mov a, #0CCh; Посилаємо команду Skip ROM [CCh].

call RW_Byte

mov a, #0BEh; Посилаємо команду Read Scratchpad [BEh].

call RW_Byte

mov a, #1h

call delay

mov CRC,#0

mov A,#0FFh

call RW_Byte ;byte 0.

mov fTEMPER_L,A ; Молодший байт температури.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 1.

mov fTEMPER_H, A ; Старший байт температури.

call DO_CRC

; Дальше 8 непотрібних байти (зчитуємо тільки для формування CRC).

mov A,#0FFh

call RW_Byte ; byte 2.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 3.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 4.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 5.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 6.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 7.

call DO_CRC

; Зчитуємо CRC.

mov A,#0FFh

call RW_Byte ; byte 8 (CRC).

clr C

subb A,CRC ; A = A - CRC

jz GT_CRC_OK

mov A,#10

call Big_Delay

clr CRC_OK

jmp GT_exit

GT_CRC_OK: ; Якщо CRC - ok.

setb CRC_OK

;перетворення і вивід температури. 0-99градусів

; якщо температура буде від'ємна - в регістрі fTEMPER_h буде значення FF

; значення після коми зберігаються в молодшій тетраді регістра fTEMPER_l

mov a, fTEMPER_l

anl a, #0f0h ;множимо на маску, позбавлючись значень після коми

swap a ;значення молодшого байту - в молодших розрядах акумцлятора

mov fTEMPER_l, a ;нове значення температури

mov a, fTEMPER_h

mov b, #16 ;значення старшого байту

mul AB ;перемножуємо на множник - 16, - результат в акумуляторі

add a, fTEMPER_l ;додаю значення молодшого байту

5.1 Проведення аналізу даних із температурного датчика

jb type_dat, nnext7_1

jmp next7_1

nnext7_1:

mov r0,a

cjne r1,#1,no11

subb a,#17

jnc e1no1

setb p2.0

clr p2.2

jmp GT_ex

e1no1:

subb a,#6

jnc e1no2

clr p2.2

clr p2.0

jmp GT_ex

e1no2:

setb p2.2

clr p2.0

jmp GT_ex

no11:

cjne r1,#2,no21

subb a,#19

jnc e2no1

setb p2.0

clr p2.2

jmp GT_ex

e2no1:

subb a,#5

jnc e2no2

clr p2.0

clr p2.2

jmp GT_ex

e2no2:

setb p2.2

clr p2.0

jmp GT_ex

no21:

cjne r1,#3,no31

subb a,#18

jnc e3no1

setb p2.0

clr p2.2

jmp GT_ex

e3no1:

subb a,#4

jnc e3no2

clr p2.2

clr p2.0

jmp Gt_ex

e3no2:

setb p2.2

clr p2.0

jmp GT_ex

no31:

cjne r1,#4,no41

subb a,#21

jnc e4no1

setb p2.0

clr p2.2

jmp GT_ex

e4no1:

subb a,#4

jnc e4no2

clr p2.0

clr p2.2

jmp Gt_ex

e4no2:

setb p2.2

clr p2.0

jmp GT_ex

no41:

subb a,#25

jnc e5no1

clr p2.2

setb p2.0

jmp GT_ex

e5no1:

subb a,#6

jnc e5no2

clr p2.0

clr p2.2

jmp GT_ex

e5no2:

clr p2.0

setb p2.2

GT_ex:

mov a,r0

mov b, #10 ;розбиваю значення

div ab ;на два числа

swap a ;збираю значення

add a, b ;докупи в акумуляторі

mov p1, a

;виводжу в порт на індикатор 1

jmp GT_exit

5.2 Проведення аналізу даних із датчика вологості

next7_1:

mov r0,a

cjne r1,#1,no1

subb a,#30

jnc e1no

setb p2.1

jmp GT_exit1

e1no:

clr p2.1

jmp GT_exit1

no1:

cjne r1,#2,no2

subb a,#60

jnc e2no

setb p2.1

jmp GT_exit1

e2no:

clr p2.1

jmp Gt_exit1

no2:

cjne r1,#3,no3

subb a,#35

jnc e3no

setb p2.1

jmp GT_exit

e3no:

clr p2.1

jmp Gt_exit1

no3:

cjne r1,#4,no4

subb a,#70

jnc e4no

setb p2.1

jmp GT_exit

e4no:

clr p2.1

jmp Gt_exit

no4:

subb a,#40

jnc e5no

setb p2.1

jmp GT_exit1

e5no:

clr p2.1

GT_exit1:

mov a,r0

mov b, #10 ;розбиваю значення

div ab ;на два числа

swap a ;збираю значення

add a, b ;докупи в акумуляторі

mov p3, a ;виводжу в порт на індикатор 2

GT_exit:

ret ; вихід з GetTemp:

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

Reset_1Wire_1: ; Скидаємо лінію на час, біля 500 мкс. == 1 datchik

clr T_1WIRE_1

mov A,#165 ; (500 - 4) / 3 = 165

call delay

setb T_1WIRE_1

; Пропускаємо імпульс присутності

mov A,#165 ; (500 - 4) / 3 = 165

call delay

ret

;-----------------------------------------------------------------------------

Reset_1Wire_2: ; Скидаємо лінію на час, біля 500 мкс. == 2 datchik

clr T_1WIRE_2

mov A,#165 ; (500 - 4) / 3 = 165

call delay

setb T_1WIRE_2

; Пропускаємо імпульс присутності

mov A,#165 ; (500 - 4) / 3 = 165

call delay

ret

;------------------------------------------------------------------------------

delay:

mov fCOUNTER,A

D_Loop36:

nop ; 1 us.

DJNZ fCOUNTER,D_Loop36 ; 2 us.

ret

;-----------------------------------------------------------------------------

Big_delay: ;=770*x+1 x=(delay-5)/770 Враховуючи виконання call и return.

mov fCOUNTER2,A

mov fCOUNTER,#0

BD_Loop94:

nop ; 1 us.

djnz fCOUNTER,BD_Loop94 ; 2 us.

djnz fCOUNTER2,BD_Loop94 ; 2 us.

ret

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

; Ф-ція вводу/виводу на лінию 1-Wire. по черзі, зсуваючи вправо значення в А зчитуємо лінію і формуємо байт

; Виводимо з A и зчитуємо в A.

RW_Byte:

mov fTEMP,A

MOV R2,#8

;--------------------------- цикл

RBLoop:

mov A,fTEMP ; повертаємо значення в акумулятор

jnb type_dat, next2_1

clr T_1WIRE_1 ; Обнуляємо вихід. 1 dat

jmp next2_2

next2_1: clr T_1WIRE_2 ; Обнуляємо вихід. 2 dat

next2_2:

nop

jnb ACC.0,RB_Skip01

jnb type_dat, next3_1

setb T_1WIRE_1 ; Встановлюємо вихід. 1 dat

jmp next3_2

next3_1: setb T_1WIRE_2 ; Встановлюємо вихід. 2 dat

next3_2:

RB_Skip01:

rr A

clr ACC.7 ; Приймаємо в той самий TEMP, з якого передаємо

nop

nop

nop

nop

jnb type_dat, next4_1

jnb T_1WIRE_1, RB_Skip02

jmp next4_2

next4_1: jnb T_1WIRE_2, RB_Skip02

next4_2:

setb ACC.7

RB_Skip02:

mov fTEMP,A ; зберігаємо значення

; дальше даємо час на звільнення лінії веденим девайсом(release = до 45 мкс.)

mov A,#14 ; (60 - 4) / 3 = 18

call delay

; Відпускаємо лінію.

jnb type_dat, next5_1

setb T_1WIRE_1

jmp next5_2

next5_1: setb T_1WIRE_2

next5_2:

; трішки відпочиваємо (на всякий пожарний).

mov A,#1

call delay

; Якщо 8 біт, то виходимо з циклу.

DJNZ R2,RBLoop ; послідовно зчитуємо 8 біт (лічильник рег.R2)

;------------------ цикл

; прийнятий байт.

mov A,fTEMP ; записуємо значення сформованого байту в акумулятор

ret ;

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

; Процедура обновлення CRC. Параметр в A.

DO_CRC: PUSH ACC ;save accumulator

PUSH B ;save the B register

PUSH ACC ;save bits to be shifted

MOV B,#8 ;set shift = 8 bits ;

CRC_LOOP: XRL A,CRC ;calculate CRC

RRC A ;move it to the carry

MOV A,CRC ;get the last CRC value

JNC ZERO ;skip if data = 0

XRL A,#18H ;update the CRC value

;

ZERO: RRC A ;position the new CRC

MOV CRC,A ;store the new CRC

POP ACC ;get the remaining bits

RR A ;position the next bit

PUSH ACC ;save the remaining bits

DJNZ B,CRC_LOOP ;repeat for eight bits

POP ACC ;clean up the stack

POP B ;restore the B register

POP ACC ;restore the accumulator

RET

;-------------------------------------------------------------------------------

end

Висновок

В процесі виконання курсового проекту було розроблено систему управління мікрокліматом теплиці. Під час виконання даної роботи, я навчився створювати та описувати структурні і принципові схеми, складати алгоритми та програми на мові асемблера для мікропроцесора AT89С 51. Модель мікропроцесорної системи було спроектовано в програмному комплексі Proteus Professional 7.7.

Література

1. В.В. Сташин А.В. УРУСОВ О.Ф. Мологонцева Проектирование цифровых устройств на однокристальных микроконтроллерах Москва Энергоатомиздат 1990г.

2. А.С. Басманов "МП и ОЭВМ", Москва, "Мир", 1988.

3. "Микропроцессоры", Учебное пособие в 5-ти книгах, под редакцией В.А. Шахнова, Москва "Высшая школа", 1988.

4. Фрунзе "Микроконтроллеры? Это же просто!"

5. Магда Ю.С. "Микроконтроллеры серии 8051: практический подход"

6. https://sites.google.com/site/laboratoria101/mps

7. http://www.teplitsa-urojay.ru/rasta/ogurtsy/

8. http://www.zooclub.ru/flora/rouse/14.shtml

9. http://www.greeninfo.ru/vegetables/capsicum_annuum.html/Article/_/aID/335

10. http://www.sadovod.spb.ru/TextShablon.php?LinkPage=222

11. http://www.gaw.ru/

Додаток 1. Текст програми

$include(mod51)

org 0

;*************************************************************

; Порт 0.

T_1WIRE_1 bit P0.0

T_1WIRE_2 bit P0.1

type_dat bit 01h

bitkl1 bit 7fh

bitkl2 bit 7eh

;*************************************************************

fCOUNTER EQU 19h

fCOUNTER2 EQU 1Ah

CRC EQU 1Bh

fTEMP EQU 1Ch

; Температура.

fTEMPER_L EQU 36h

fTEMPER_H EQU 37h

CRC_OK BIT 00h.

;-------------------------------------------------------------

mov r1,#1

wait:

mov p1,#0

mov p3,#0

setb p0.2

setb p0.3

setb p0.4

setb p0.5

setb p0.6

setb p0.7

clr p2.0

clr p2.1

clr p2.2

start:

jb p2.3,wait

clr p0.7

jb p2.4,nok1

jb bitkl1,nok11

setb bitkl1

cjne r1,#5,no01

jmp nok11

no01:

inc r1

jmp nok11

nok1:

clr bitkl1

nok11:

jb p2.5,nok2

jb bitkl2,nok22

setb bitkl2

cjne r1,#1,no02

jmp nok22

no02:

dec r1

jmp nok22

nok2:

clr bitkl2

nok22:

cjne r1,#1,ex11

clr p0.2

setb p0.3

jmp st

ex11:

cjne r1,#2,ex2

clr p0.3

setb p0.2

setb p0.4

jmp st

ex2:

cjne r1,#3,ex3

clr p0.4

setb p0.3

setb p0.5

jmp st

ex3:

cjne r1,#4,ex4

clr p0.5

setb p0.4

setb p0.6

jmp st

ex4:

clr p0.6

setb p0.5

st:

setb T_1WIRE_1

setb T_1WIRE_2

setb type_dat

call GetTemp

clr type_dat

call GetTemp

jmp start

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

GetTemp:

jnb type_dat, next1_1

call Reset_1Wire_1

jmp next1_2

next1_1: call Reset_1Wire_2

next1_2:

mov a, #0CCh;

call RW_Byte

mov a, #044h;

call RW_Byte

; затримка, не менше 750 мс

mov A,#0

call Big_delay

call Big_delay

call Big_delay

call Big_delay

jnb type_dat, next6_1

call Reset_1Wire_1

jmp next6_2

next6_1: call Reset_1Wire_2

next6_2:

mov A,#165 ; (500 - 4) / 3 = 165

call delay

mov a, #0CCh;

call RW_Byte

mov a, #0BEh;

call RW_Byte

mov a, #1h

call delay

mov CRC,#0

mov A,#0FFh

call RW_Byte ;byte 0.

mov fTEMPER_L,A

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 1.

mov fTEMPER_H, A

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 2.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 3.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 4.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 5.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 6.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 7.

call DO_CRC

mov A,#0FFh

call RW_Byte ; byte 8 (CRC).

clr C

subb A,CRC ; A = A - CRC

jz GT_CRC_OK

mov A,#10

call Big_Delay

clr CRC_OK

jmp GT_exit

GT_CRC_OK:

mov a, fTEMPER_l

anl a, #0f0h

swap a

mov fTEMPER_l, a

mov a, fTEMPER_h

mov b, #16

mul AB

add a, fTEMPER_l

jb type_dat, nnext7_1

jmp next7_1

nnext7_1:

mov r0,a

cjne r1,#1,no11

subb a,#17

jnc e1no1

setb p2.0

clr p2.2

jmp GT_ex

e1no1:

subb a,#6

jnc e1no2

clr p2.2

clr p2.0

jmp GT_ex

e1no2:

setb p2.2

clr p2.0

jmp GT_ex

no11:

cjne r1,#2,no21

subb a,#19

jnc e2no1

setb p2.0

clr p2.2

jmp GT_ex

e2no1:

subb a,#5

jnc e2no2

clr p2.0

clr p2.2

jmp GT_ex

e2no2:

setb p2.2

clr p2.0

jmp GT_ex

no21:

cjne r1,#3,no31

subb a,#18

jnc e3no1

setb p2.0

clr p2.2

jmp GT_ex

e3no1:

subb a,#4

jnc e3no2

clr p2.2

clr p2.0

jmp Gt_ex

e3no2:

setb p2.2

clr p2.0

jmp GT_ex

no31:

cjne r1,#4,no41

subb a,#21

jnc e4no1

setb p2.0

clr p2.2

jmp GT_ex

e4no1:

subb a,#4

jnc e4no2

clr p2.0

clr p2.2

jmp Gt_ex

e4no2:

setb p2.2

clr p2.0

jmp GT_ex

no41:

subb a,#25

jnc e5no1

clr p2.2

setb p2.0

jmp GT_ex

e5no1:

subb a,#6

jnc e5no2

clr p2.0

clr p2.2

jmp GT_ex

e5no2:

clr p2.0

setb p2.2

GT_ex:

mov a,r0

mov b, #10

div ab

swap a

mov p1, a

jmp GT_exit

next7_1:

mov r0,a

cjne r1,#1,no1

subb a,#30

jnc e1no

setb p2.1

jmp GT_exit1

e1no:

clr p2.1

jmp GT_exit1

no1:

cjne r1,#2,no2

subb a,#60

jnc e2no

setb p2.1

jmp GT_exit1

e2no:

clr p2.1

jmp Gt_exit1

no2:

cjne r1,#3,no3

subb a,#35

jnc e3no

setb p2.1

jmp GT_exit

e3no:

clr p2.1

jmp Gt_exit1

no3:

cjne r1,#4,no4

subb a,#70

jnc e4no

setb p2.1

jmp GT_exit

e4no:

clr p2.1

jmp Gt_exit

no4:

subb a,#40

jnc e5no

setb p2.1

jmp GT_exit1

e5no:

clr p2.1

GT_exit1:

mov a,r0

mov b, #10

div ab

swap a

add a, b

mov p3, a

GT_exit:

ret

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

Reset_1Wire_1:

clr T_1WIRE_1

mov A,#165 ; (500 - 4) / 3 = 165

call delay

setb T_1WIRE_1

mov A,#165 ; (500 - 4) / 3 = 165

call delay

ret

;-----------------------------------------------------------------------------

Reset_1Wire_2: clr T_1WIRE_2

mov A,#165 ; (500 - 4) / 3 = 165

call delay

setb T_1WIRE_2

mov A,#165 ; (500 - 4) / 3 = 165

call delay

ret

;------------------------------------------------------------------------------

delay:

mov fCOUNTER,A

D_Loop36:

nop ; 1 us.

DJNZ fCOUNTER,D_Loop36 ; 2 us.

ret

;-----------------------------------------------------------------------------

Big_delay: ;=770*x+1 x=(delay-5)/770 Враховуючи виконання call и return.

mov fCOUNTER2,A

mov fCOUNTER,#0

BD_Loop94:

nop ; 1 us.

djnz fCOUNTER,BD_Loop94 ; 2 us.

djnz fCOUNTER2,BD_Loop94 ; 2 us.

ret

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

RW_Byte:

mov fTEMP,A

MOV R2,#8

;--------------------------- цикл

RBLoop:

mov A,fTEMP

jnb type_dat, next2_1

clr T_1WIRE_1 ; Обнуляємо вихід. 1 dat

jmp next2_2

next2_1: clr T_1WIRE_2 ; Обнуляємо вихід. 2 dat

next2_2:

nop

jnb ACC.0,RB_Skip01

jnb type_dat, next3_1

setb T_1WIRE_1 ; Встановлюємо вихід. 1 dat

jmp next3_2

next3_1: setb T_1WIRE_2 ; Встановлюємо вихід. 2 dat

next3_2:

RB_Skip01:

rr A

clr ACC.7

nop

nop

nop

nop

jnb type_dat, next4_1

jnb T_1WIRE_1, RB_Skip02

jmp next4_2

next4_1: jnb T_1WIRE_2, RB_Skip02

next4_2:

setb ACC.7

RB_Skip02:

mov fTEMP,A

)

mov A,#14 ; (60 - 4) / 3 = 18

call delay

jnb type_dat, next5_1

setb T_1WIRE_1

jmp next5_2

next5_1: setb T_1WIRE_2

next5_2:

mov A,#1

call delay

.

DJNZ R2,RBLoop

mov A,fTEMP

ret ;

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

; Процедура обновлення CRC. Параметр в A.

DO_CRC: PUSH ACC ;save accumulator

PUSH B ;save the B register

PUSH ACC ;save bits to be shifted

MOV B,#8 ;set shift = 8 bits ;

CRC_LOOP: XRL A,CRC ;calculate CRC

RRC A ;move it to the carry

MOV A,CRC ;get the last CRC value

JNC ZERO ;skip if data = 0

XRL A,#18H ;update the CRC value

;

ZERO: RRC A ;position the new CRC

MOV CRC,A ;store the new CRC

POP ACC ;get the remaining bits

RR A ;position the next bit

PUSH ACC ;save the remaining bits

DJNZ B,CRC_LOOP ;repeat for eight bits

POP ACC ;clean up the stack

POP B ;restore the B register

POP ACC ;restore the accumulator

RET

;-------------------------------------------------------------------------------

Додаток 2. Hex-файл програми

:10000000790175900075B000D282D283D284D285F6

:10001000D286D287C2A0C2A1C2A220A3E5C28720F5

:10002000A40F207F0ED27FB905030200330902001E

:1000300033C27F20A50F207E0ED27EB901030200BD

:100040004719020047C27EB90107C282D28302006B

:1000500079B90209C283D282D284020079B9030934

:10006000C284D283D285020079B90409C285D284C0

:10007000D286020079C286D285D280D281D2011284

:100080000089C201120089809130010612024202E9

:10009000009512025174CC120274744412027474EA

:1000A000001202671202671202671202673001062D

:1000B0001202420200B912025174A512026074CCFD

:1000C00012027474BE1202747401120260751B0075

:1000D00074FF120274F5361202C074FF120274F536

:1000E000371202C074FF1202741202C074FF1202AF

:1000F000741202C074FF1202741202C074FF120262

:10010000741202C074FF1202741202C074FF120251

:10011000741202C074FF120274C3951B600A740A41

:10012000120267C200020241D200E53654F0C4F563

:1001300036E53775F010A425362001030201E7F8F3

:10014000B9011D94115007D2A0C2A20201DA94068F

:100150005007C2A2C2A00201DAD2A2C2A00201DAF2

:10016000B9021D94135007D2A0C2A20201DA94056D

:100170005007C2A0C2A20201DAD2A2C2A00201DAD2

:10018000B9031D94125007D2A0C2A20201DA94044E

:100190005007C2A2C2A00201DAD2A2C2A00201DAB2

:1001A000B9041D94155007D2A0C2A20201DA94042A

:1001B0005007C2A0C2A20201DAD2A2C2A00201DA92

:1001C00094195007C2A2D2A00201DA94065007C2C5

:1001D000A0C2A20201DAC2A0D2A2E875F00A84C4C9

:1001E00025F0F590020241F8B9010E941E5005D297

:1001F000A1020237C2A1020237B9020E943C500597

:10020000D2A1020237C2A1020237B9030E942350D1

:1002100005D2A1020241C2A1020237B9040E9446DE

:100220005005D2A1020241C2A10202419428500508

:10023000D2A1020237C2A1E875F00A84C425F0F504

:10024000B022C28074A5120260D28074A51202602E

:1002500022C28174A5120260D28174A512026022AA

:10026000F51900D519FC22F51A75190000D519FCED

:10027000D51AF922F51C7A08E51C300105C2800266

:100280000284C2810030E00A300105D2800202926D

:10029000D28103C2E700000000300106308008026E

:1002A00002A5308102D2E7F51C740E5160300105C1

:1002B000D2800202B7D28174015160DABBE51C2200

:1002C000C0E0C0F0C0E075F008651B13E51B5002EC

:1002D000641813F51BD0E003C0E0D5F0ECD0E0D0FB

:0402E000F0D0E02258

:00000001FF

Размещено на Allbest.ru


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

  • Аналіз технологічного процесу і вибір напрямків автоматизації. Розробка структурної схеми системи управління. Основні вимоги до елементів структурної схеми. Додаткові вимоги до мікропроцесора. Технічна характеристика мікроконтролера Atmel AT89C51AC3.

    курсовая работа [316,1 K], добавлен 11.10.2011

  • Характеристика устаткування підприємств м’ясної промисловості. Функціональна схема електроприводу куттера. Розробка структурної, математичної схеми мікропроцесорної САУ, її алгоритму функціонування. Дослідження якості перехідних процесів й точності МПСАУ.

    курсовая работа [1,2 M], добавлен 12.05.2014

  • Складання логічної схеми алгоритмів при проектуванні системи управління агрегатом, формування мікрокоманд, що включають логічні та функціональні оператори. Розробка структурної та принципової схеми системи управління, її конструктивне оформлення.

    курсовая работа [1,0 M], добавлен 28.09.2011

  • Розробка узагальненої структурної схеми мікропроцесора для збору даних і керування зовнішніми пристроями. Визначення кількості мікросхем для побудови послідовних і паралельних портів та таймерів. Створення логічної схеми підсистеми центрального процесора.

    практическая работа [399,7 K], добавлен 17.03.2014

  • Розробка мікропроцесорної системи управління роботом з контролем переміщення на базі мікроконтролера AT89C51. Розробка і опис структурної схеми мікропроцесорної системи. Відстань між світлодіодом і фототранзистором. Розробка алгоритмів програми.

    курсовая работа [2,3 M], добавлен 13.04.2013

  • Мнемосхема процесу завантаження вагонеток. Технічні характеристики та конструктивне оформлення системи управління. Розробка принципової схеми: вибір елементної бази, датчиків та основних елементів силової частини. Розрахунок енергоспоживання пристрою.

    курсовая работа [228,3 K], добавлен 14.11.2011

  • Розробка структурної схеми мікропроцесора. Узгодження максимальної вхідної напруги від датчиків з напругою, що може обробити МПСза допомогою дільника напруги та аналогового буферного повторювача. Система тактування та живлення. Організація виводу даних.

    курсовая работа [354,3 K], добавлен 14.12.2010

  • Розташування виконавчих блоків літака, пульт управління та особливості системи тривоги. Розробка структурної та принципової схеми системи оповіщення пасажирів. Характеристика методики з експлуатації, ремонту та конструкції виконання приладу оповіщення.

    дипломная работа [1,4 M], добавлен 13.06.2017

  • Розробка та формалізація алгоритму управління вузлом виготовлення глиняного брусу на базі RS-тригерної моделі. Структурна та принципова схеми системи управління, її конструктивне оформлення. Реалізація системи на дискретних логічних елементах серії К555.

    курсовая работа [711,2 K], добавлен 30.09.2011

  • Система реєстрації даних як високопродуктивний обчислювач з процесором або контролером, накопичувачем інформації й інтерфейсом зв'язку. Розробка функціональної схеми й вибір елементної бази. Аналіз принципової електричної схеми. Економічні розрахунки.

    дипломная работа [694,4 K], добавлен 20.02.2011

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