Мікропроцесорна система управління мікрокліматом теплиці
Як датчик вологості був обраний HIH 4000−003. Він забезпечує широкий діапазон вимірювань, високу надійність і низьку вартість при використанні мікроелектронної технології. Це дозволяє проводити ємності планарного типу тонкоплівкових методом. Завдяки цьому ми маємо мініатюрні габарити чутливого елемента, можливість імплементації на кристалі спеціалізованої інтегральної схеми обробки сигналу… Читати ще >
Мікропроцесорна система управління мікрокліматом теплиці (реферат, курсова, диплом, контрольна)
Зміст
Вступ
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
Режим | Вирощувана культура | Температура повітря | Вологість | ||
томат | 30−60 | ||||
огірок | 60−80 | ||||
перець | 35−65 | ||||
троянди | 70−90 | ||||
баклажани | 40−65 | ||||
2. Розробка і опис структурної схеми
Рисунок 3.2 — Структурна схема мікропроцесорної системи Структурна схема є першою моделлю електронного пристрою, яка відображає принцип роботи пристрою в загальному вигляді. Перевагою структурної схеми є те, що по ній можна швидко одержати уявлення про склад, структуру і виконувані ним функції, не відвертаючи уваги на схемну реалізацію його функціональних частин.
3. Розробка принципової схеми і вибір елементної бази
3.1 Вибір мікропроцесора
мікроклімат теплиця алгоритм мікропроцесор В якості мікропроцесора в системі управління використовується однокристальна 8-ми розрядна мікро-ЕОМ АТ 89С 51.
Мікросхема містить: 8-ми розрядний центральний процесор, логічний процесор з порозрядною і побайтовою обробкою даних, вмонтований тактовий генератор, вмонтований ОЗП даних (128 байт), 20 регістрів спеціального призначення, 8 шин входу/виходу, 2 вмонтованих 16-ти розрядних таймери-лічильники, двохсторонній порт послідовного входу/виходу, система переривань двома рівнями пріоритетності від двох зовнішніх і трьох внутрішніх пристроїв, адресний простір (64 к) для зовнішньої ПЗП, адресний простір (64 к) для зовнішньої програмної пам’яті. Дана мікросхема складається з 20 000 інтегральних елементів.
Два програмованих 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 | |
RST | Вхід обнуления | ||
RXD | Вхід послідовного каналу в асинхронному режимі | ||
TXD | Вихід послідовного каналу в асинхронному режимі | ||
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…375 000біт/с Кількість базових команд…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_1WIRE1 ; переіхід до 1 - го датчика
setb T_1WIRE2 ; переіхід до 2 - го датчика
setb type_dat ;вибір 1 — го датчика
call GetTemp; отримати температуру
clr type_dat ;вибір 2 — го датчика
call GetTemp; отримати температуру
jmp start
Зчитування і передача значення з датчика температури на індикатор виконується
;======================================================
GetTemp:
jnb type_dat, next11
call Reset_1Wire1
jmp next12
next11: call Reset_1Wire2
next12:
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, next61
call Reset_1Wire1
jmp next62
next61: call Reset_1Wire2
next62:
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, nnext71
jmp next71
nnext71:
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 Проведення аналізу даних із датчика вологості
next71:
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_1Wire1:; Скидаємо лінію на час, біля 500 мкс. == 1 datchik
clr T_1WIRE1
mov A,#165; (500 — 4) / 3 = 165
call delay
setb T_1WIRE1
; Пропускаємо імпульс присутності
mov A,#165; (500 — 4) / 3 = 165
call delay
ret
;——————————————————————————————————————;
Reset_1Wire2:; Скидаємо лінію на час, біля 500 мкс. == 2 datchik
clr T_1WIRE2
mov A,#165; (500 — 4) / 3 = 165
call delay
setb T_1WIRE2
; Пропускаємо імпульс присутності
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, next21
clr T_1WIRE1; Обнуляємо вихід. 1 dat
jmp next22
next21: clr T_1WIRE2; Обнуляємо вихід. 2 dat
next22:
nop
jnb ACC.0,RB_Skip01
jnb type_dat, next31
setb T_1WIRE1; Встановлюємо вихід. 1 dat
jmp next32
next31: setb T_1WIRE2; Встановлюємо вихід. 2 dat
next32:
RB_Skip01:
rr A
clr ACC.7; Приймаємо в той самий TEMP, з якого передаємо
nop
nop
nop
nop
jnb type_dat, next41
jnb T_1WIRE1, RB_Skip02
jmp next42
next41: jnb T_1WIRE2, RB_Skip02
next42:
setb ACC.7
RB_Skip02:
mov fTEMP, A; зберігаємо значення
; дальше даємо час на звільнення лінії веденим девайсом (release = до 45 мкс.)
mov A,#14; (60 — 4) / 3 = 18
call delay
; Відпускаємо лінію.
jnb type_dat, next51
setb T_1WIRE1
jmp next52
next51: setb T_1WIRE2
next52:
; трішки відпочиваємо (на всякий пожарний).
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_1WIRE1 bit P0.0
T_1WIRE2 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_1WIRE1
setb T_1WIRE2
setb type_dat
call GetTemp
clr type_dat
call GetTemp
jmp start
;======================================================
GetTemp:
jnb type_dat, next11
call Reset_1Wire1
jmp next12
next11: call Reset_1Wire2
next12:
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, next61
call Reset_1Wire1
jmp next62
next61: call Reset_1Wire2
next62:
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, nnext71
jmp next71
nnext71:
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
next71:
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_1Wire1:
clr T_1WIRE1
mov A,#165; (500 — 4) / 3 = 165
call delay
setb T_1WIRE1
mov A,#165; (500 — 4) / 3 = 165
call delay
ret
;——————————————————————————————————————;
Reset_1Wire2: clr T_1WIRE2
mov A,#165; (500 — 4) / 3 = 165
call delay
setb T_1WIRE2
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, next21
clr T_1WIRE1; Обнуляємо вихід. 1 dat
jmp next22
next21: clr T_1WIRE2; Обнуляємо вихід. 2 dat
next22:
nop
jnb ACC.0,RB_Skip01
jnb type_dat, next31
setb T_1WIRE1; Встановлюємо вихід. 1 dat
jmp next32
next31: setb T_1WIRE2; Встановлюємо вихід. 2 dat
next32:
RB_Skip01:
rr A
clr ACC.7
nop
nop
nop
nop
jnb type_dat, next41
jnb T_1WIRE1, RB_Skip02
jmp next42
next41: jnb T_1WIRE2, RB_Skip02
next42:
setb ACC.7
RB_Skip02:
mov fTEMP, A
)
mov A,#14; (60 — 4) / 3 = 18
call delay
jnb type_dat, next51
setb T_1WIRE1
jmp next52
next51: setb T_1WIRE2
next52:
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-файл програми
:1 000 000 079 017 590 0165B000D282D283D284D285F6
:1 000 1000D286D287C2A0C2A1C2A220A3E5C28720F5
:1 000 2000A40F207F0ED27FB905030200330902001E
:100 030 0033C27F20A50F207E0ED27EB901030200BD
:10 004 000 471 902 0047C27EB90107C282D28302006B
:100 050 0079B90209C283D282D284020079B9030934
:1 000 6000C284D283D285020079B90409C285D284C0
:1 000 7000D286020079C286D285D280D281D2011284
:10 008 000 0089C201120089809130010612024202E9
:1 000 900 000 951 202 5604CC120274744412027474EA
:1000A000001202671202671202671202673001062D
:1000B0001202420200B912025174A512026074CCFD
:1000C00012027474BE1202747401120260751B0075
:1000D00074FF120274F5361202C074FF120274F536
:1000E000371202C074FF1202741202C074FF1202AF
:1000F000741202C074FF1202741202C074FF120262
:1 001 000 074 1202C074FF1202741202C074FF120251
:1 001 100 074 1202C074FF120274C3951B600A740A41
:1 001 200 012 0267C200020241D200E53654F0C4F563
:100 130 0036E53775F010A425362001030201E7F8F3
:1 001 4000B9011D94115007D2A0C2A20201DA94068F
:10 015 000 5007C2A2C2A00201DAD2A2C2A00201DAF2
:1 001 6000B9021D94135007D2A0C2A20201DA94056D
:10 017 000 5007C2A0C2A20201DAD2A2C2A00201DAD2
:1 001 8000B9031D94125007D2A0C2A20201DA94044E
:10 019 000 5007C2A2C2A00201DAD2A2C2A00201DAB2
:1001A000B9041D94155007D2A0C2A20201DA94042A
:1001B0005007C2A0C2A20201DAD2A2C2A00201DA92
:1001C00094195007C2A2D2A00201DA94065007C2C5
:1001D000A0C2A20201DAC2A0D2A2E875F00A84C4C9
:1001E00025F0F590020241F8B9010E941E5005D297
:1001F000A1020237C2A1020237B9020E943C500597
:1 002 0000D2A1020237C2A1020237B9030E942350D1
:100 210 0005D2A1020241C2A1020237B9040E9446DE
:10 022 000 5005D2A1020241C2A10202419428500508
:1 002 3000D2A1020237C2A1E875F00A84C425F0F504
:1 002 4000B022C28074A5120260D28074A51202602E
:100 250 0022C28174A5120260D28174A512026022AA
:1 002 6000F51900D519FC22F51A75190000D519FCED
:1 002 7000D51AF922F51C7A08E51C300105C2800266
:10 028 000 0284C2810030E00A300105D2800202926D
:1 002 9000D28103C2E700000000300106308008026E
:1002A00002A5308102D2E7F51C740E5160300105C1
:1002B000D2800202B7D28174015160DABBE51C2200
:1002C000C0E0C0F0C0E075F008651B13E51B5002EC
:1002D000641813F51BD0E003C0E0D5F0ECD0E0D0FB
:0402E000F0D0E02258
:01FF