Компютри, бизнес, наука, технологии и общество
Офис алармена система
Обяснение на работата на устройството с пълна блокова схема.
Съгласно заданието проектираното алармено устройство трябва да се задейства от шест сензора. То трябва да изработва двутонова звукова сигнализация с честоти 950 Hz и 1500 Hz, всяка с продължителност 0,2 s и обща продължителност на сигнала 1 min. Активирането и дезактивирането на алармената система се извършва или с дистанционно устройство, или чрез въвеждане на код с клавиатура.
За да се синтезира звуков сигнал със зададените параметри, са необходими два импулсни генератора – един с превключване на честотите 950 Hz и 1500 Hz, и един с полупериод на импулсите 0,2 s. През единия полупериод на втория генератор на изхода на устройството се извежда честотата 950 Hz, а през другия – 1500 Hz. Така на изхода на устройството се получава двутонов звуков сигнал.
Общата продължителност на звуковия сигнал може да бъде определена чрез двоичен брояч, който да отброи толкова полупериода по 0,2 s, колкото са необходими за формиране на интервал 1 min.
От направеното обяснение на действието на проектираното устройство става ясно, че то трябва да съдържа два импулсни генератора и един двоичен брояч. При използване на микроконтролер функциите на импулсните генератори и двоичния брояч се изпълняват от неговите таймери и регистри за данни.
В изходно състояние алармената система е дезактивирана. След напускане на офиса тя се активира чрез съответно устройство. От този момент нататък микроконтролерът започва да следи състоянието на сензорите в сензорния блок. При задействане на някой от тях той започва да генерира двутонов звуков сигнал с продължителност 1 min или до дезактивиране на системата. Звуковият сигнал се подава на изпълнителния блок чрез буферно стъпало. Изпълнителният блок най-често е високоговорител с определена мощност на възпроизвеждания сигнал, а буферното стъпало – подходящ усилвател на мощност.
Избор на конкретен МК с представена блокова схема и таблица с инструкциите.
Съгласно заданието офис алармената система трябва да бъде проектирана с микроконтролер от фамилия Atmel АТ89Сх5хх. На това означение отговаря само микроконтролерът АТ89С55.
Микроконтролерът АТ89С55 представлява по-нататъшно развитие на основния модел 80С51. Той има пълна програмна съвместимост с него. Микроконтролерът АТ89С55 притежава 20 Кбайта репрограмируема Flash памет, 256 х 8 бита вътрешна RAM памет, 32 програмируеми входно-изходни линии обособени в четири порта (Р0 ÷ Р3), три 16-битови таймер/броячи.
Тъй като микроконтролерът АТ89С55 притежава 8-битов процесор, то и програмно достъпните регистри са 8-битови, с изключение на един 16-битов регистър.
Най-често използваният регистър е акумулаторът (АСС). Обменът на информация с външната памет за данни се осъществява чрез него. Регистърът В има отношение към операциите умножение и деление. Регистърът за състоянието на програмата (PSW) включва флагове като пренос и препълване. Стековите операции са свързани с регистъра указател на стека (SP). Указателят на стека се увеличава с единица преди да се запишат данните в паметта. Стекът е разположен във вътрешната памет за данни.
Регистърът указател на данните (DPTR) е 16-битов регистър, но може да се разглежда и като съставен от два 8-битови регистъра: старши байт DPH и младши байт DPL.
Програмният брояч (РС) адресира инструкциите в паметта.
Интегрираните периферни устройства се състоят от 4 паралелни порта, сериен порт, три таймер/брояча и блок (система) за прекъсване. Паралелните портове са изградени от изходни регистри (Р0 – Р3) и буфери. Важна особеност е, че портове 0 и 2 осъществяват интерфейса към външната памет.
Порт 3 може да бъде програмиран и за други функции, показани в горната таблица. Най-често използваните входове с посочените функции са входове Р3.2 и Р3.3, чрез които може да се генерират заявки за програмни прекъсвания.
Системата инструкции на микроконтролера АТ89С55 включва 111 инструкции. От тях 49 са еднобайтови, 45 са двубайтови и 17 са с дължина 3 байта. В следващите таблици са показани всички инсрукции на микроконтролера с краткото им описание.
Аритметични операции
| Мнемоника | Описание | Код | Байтове | Цикли |
| ADD A,Rn | Събиране | 28-2F | 1 | 1 |
| ADD A,dir | Събиране | 25 | 2 | 1 |
| ADD A,@Ri | Събиране | 26,27 | 1 | 1 |
| ADD A,#data | Събиране | 24 | 2 | 1 |
| ADDC A,Rn | Събиране с пренос | 38-3F | 1 | 1 |
| ADDC A,dir | Събиране с пренос | 35 | 2 | 1 |
| ADDC A,@Ri | Събиране с пренос | 36,37 | 1 | 1 |
| ADDC A,#data | Събиране с пренос | 34 | 2 | 1 |
| SUBB A,Rn | Изваждане със заем | 98-9F | 1 | 1 |
| SUBB A,dir | Изваждане със заем | 95 | 2 | 1 |
| SUBB A,@Ri | Изваждане със заем | 96,97 | 1 | 1 |
| SUBB A,#data | Изваждане със заем | 94 | 2 | 1 |
| INC A | Увеличаване с единица | 04 | 1 | 1 |
| INC Rn | Увеличаване с единица | 08-0F | 1 | 1 |
| INC dir | Увеличаване е единица | 05 | 2 | 1 |
| INC @Ri | Увеличаване с единица | 06-07 | 1 | 1 |
| DEC A | Намаляване с единица | 14 | 1 | 1 |
| DEC Rn | Намаляване с единица | 18-1F | 1 | 1 |
| DEC dir | Намаляване с единица | 15 | 2 | 1 |
| DEC @Ri | Намаляване с единица | 16-17 | 1 | 1 |
| INC DPTR | Увеличаване с единица | A3 | 1 | 2 |
| MUL AB | Умножение | А4 | 1 | 4 |
| DIV AB | Деление | 84 | 1 | 4 |
| DA A | Десетична настройка | D4 | 1 | 1 |
Логически операции
| Мнемоника | Описание | Код | Байтове | Цикли |
| ANL A,Rn | Логическо И | 58-5F | 1 | 1 |
| ANL A,dir | Логическо И | 55 | 2 | 1 |
| ANL A,@Ri | Логическо И | 56,57 | 1 | 1 |
| ANL A,#data | Логическо И | 54 | 2 | 1 |
| ANL dir,A | Логическо И | 52 | 2 | 1 |
| ANL dir,#data | Логическо И | 53 | 3 | 2 |
| ORL A,Rn | Логическо ИЛИ | 48-4F | 1 | 1 |
| ORL A,dir | Логическо ИЛИ | 45 | 2 | 1 |
| ORL A,@Ri | Логическо ИЛИ | 46,47 | 1 | 1 |
| ORL A,#data | Логическо ИЛИ | 44 | 2 | 1 |
| ORL dir,A | Логическо И | 42 | 2 | 1 |
| ORL dir,#data | Логическо И | 43 | 3 | 2 |
| XRL A,Rn | Изключващо ИЛИ | 68-6F | 1 | 1 |
| XRL A,dir | Изключващо ИЛИ | 65 | 2 | 1 |
| XRL A,@Ri | Изключващо ИЛИ | 66,67 | 1 | 1 |
| XRL A,#data | Изключващо ИЛИ | 64 | 2 | 1 |
| XRL dir,A | Изключващо ИЛИ | 62 | 2 | 1 |
| XRL dir,#data | Изключващо ИЛИ | 63 | 3 | 2 |
| CLR A | Нулиране | Е4 | 1 | 1 |
| CPL A | Логическо НЕ | F4 | 1 | 1 |
| RL A | Ротация | 23 | 1 | 1 |
| RLC A | Ротация | 33 | 1 | 1 |
| RR A | Ротация | 03 | 1 | 1 |
| RRC A | Ротация | 13 | 1 | 1 |
| SWAP A | Разменяне на тетрадите | C4 | 1 | 1 |
Обмен на данни
| Мнемоника | Описание | Код | Байтове | Цикли |
| MOV A,Rn | Преместване | E8-EF | 1 | 1 |
| MOV A,dir | Преместване | Е5 | 2 | 1 |
| MOV A,@Ri | Преместване | Е6,Е7 | 1 | 1 |
| MOV A,#data | Преместване | 74 | 2 | 1 |
| MOV Rn,A | Преместване | F8-FF | 1 | 1 |
| MOV Rn,dir | Преместване | A8-AF | 2 | 2 |
| MOV Rn,#data | Преместване | 78-7F | 2 | 1 |
| MOV dir,A | Преместване | F5 | 2 | 1 |
| MOV dir,Rn | Преместване | 88-8F | 2 | 2 |
| MOV dir,dir | Преместване | 85 | 3 | 2 |
| MOV dir,@Ri | Преместване | 86,87 | 2 | 2 |
| MOV dir,#data | Преместване | 75 | 3 | 2 |
| MOV @Ri,A | Преместване | F6,F7 | 1 | 1 |
| MOV @Ri,dir | Преместване | А6,А7 | 2 | 2 |
| MOV @Ri,#data | Преместване | 76,77 | 2 | 1 |
| MOV DPTR,#data16 | Преместване | 90 | 3 | 2 |
| MOVC A,@A+DPTR | Преместване | 93 | 1 | 2 |
| MOVC A,@A+PC | Преместване | 83 | 1 | 2 |
| MOVX A,@Ri | Преместване | Е2,ЕЗ | 1 | 2 |
| MOVX A,@DPTR | Преместване | Е0 | 1 | 2 |
| MOVX @Ri,A | Преместване | F2,F3 | 1 | 2 |
| MOVX @DPTR,A | Преместване | F0 | 1 | 2 |
| PUSH dir | Запис в стека | С0 | 2 | 2 |
| POP dir | Четене от стека | D0 | 2 | 2 |
| XCH A,Rn | Разменяне | C8-CF | 1 | 1 |
| XCH A,dir | Разменяне | С5 | 2 | 1 |
| XCH A,@Ri | Разменяне | С6,С7 | 1 | 1 |
| XCHD A,@Ri | Разменяне на тетради | D6,D7 | 1 | 1 |
Операции с булеви променливи
| Мнемоника | Описание | Код | Байтове | Цикли |
| CLR C | Нулиране | СЗ | 1 | 1 |
| CLR bit | Нулиране | С2 | 2 | 1 |
| SETB C | Установяване в 1 | D3 | 1 | 1 |
| SETB bit | Установяване в 1 | D2 | 2 | 1 |
| CPL C | Инвертиране | ВЗ | 1 | 1 |
| CPL bit | Инвертиране | В2 | 2 | 1 |
| ANL C,bit | Логическо И | 82 | 2 | 2 |
| ANL C,/bit | Логическо И | В0 | 2 | 2 |
| ORL C,bit | Логическо ИЛИ | 72 | 2 | 2 |
| ORL C,/bit | Логическо ИЛИ | А0 | 2 | 2 |
| MOV C,bit | Преместване | А2 | 2 | 1 |
| MOV bit,C | Преместване | 92 | 2 | 2 |
Инструкции за управление на програмата
| Мнемоника | Описание | Код | Байта | Цикли |
| ACALL addr11 | Преход към подпрограма | * | 2 | 2 |
| LCALL addr16 | Преход към подпрограма | 12 | 3 | 2 |
| RET | Връщане от подпрограма | 22 | 1 | 2 |
| RETI | Връщане от прекъсване | 32 | 1 | 2 |
| AJMP addr11 | Преход | ** | 2 | 2 |
| LJMP addr16 | Преход | 02 | 3 | 2 |
| SJMP rel | Преход | 80 | 2 | 2 |
| JMP @A+DPTR | Преход | 73 | 1 | 2 |
| JZ rel | Преход, ако А = 0 | 60 | 2 | 2 |
| JNZ rel | Преход, ако А < > 0 | 70 | 2 | 2 |
| JC rel | Преход, ако С = 1 | 40 | 2 | 2 |
| JNC rel | Преход, ако С = 0 | 50 | 2 | 2 |
| JB bit,rel | Преход, ако bit = 1 | 20 | 3 | 2 |
| JNB bit,rel | Преход, ако bit = 0 | 30 | 3 | 2 |
| JBC bit,rel | Преход, ако bit = 1 | 10 | 3 | 2 |
| CJNE A,dir,rel | Сравнение и преход | В5 | 3 | 2 |
| CJNE A,#data,rel | Сравнение и преход | В4 | 3 | 2 |
| CJNE Rn,#data,rel | Сравнение и преход | B8-BF | 3 | 2 |
| CJNE @Ri,#data,rel | Сравнение и преход | В6,В7 | 3 | 2 |
| DJNZ Rn,rel | Намаляване с 1 и преход | D8-DF | 2 | 2 |
| DJNZ dir,rel | Намаляване с 1 и преход | D5 | 3 | 2 |
| NOP | Празна операция | 00 | 1 | 1 |
* – двоичното представяне на кода е: А10 А9 А8 1 0 0 0 1,
където А10 – А8 са старшите три бита на адреса за преход
** – двоичното представяне на кода е: А10 А9 А8 0 0 0 0 1,
където А10 – А8 са старшите три бита на адреса за преход
Характеристики на сензорите и изходите и връзка с МК.
Както беше обяснено, към входа на аларменото устройство се свързват шест сензора и контактът на устройството за активиране и дезактивиране на системата. Към изхода се включва усилвател на мощност с високоговорител.
Съществуват различни сензори, които реагират на изменението на различни физически величини. Алармените системи за охрана на офиси най-често използват контактни сензори, които се монтират на вратите и прозорците на помещенията.
Контактните сензори поради своята простота и най-ниска цена се използуват много често за охрана на врати, прозорци, капаци на машини, устройства, шахти или други отверстия, както и др. обекти, проникването през които е възможно само чрез нарушаването на съществуващия в нормално състояние контакт между две повърхности. Използуват се два типа контактни сензори – магнитни и електромеханически.
Магнитният сензор се състои от две части: магнит и магнитен превключвател от типа Рид контакт.
Електромеханическите и магнитните контакти са много подходящи за регистриране на отварянето на врати и прозорци, но не осигуряват надеждна охрана срещу проникване през тях, през стени или други повърхности.
Контактните сензори имат релеен изход – нормално отворен контакт. При задействане контактът се затваря. Сигналите на използваните шест сензора се обединяват и се подават на микроконтролера за обработването им. На фиг. 3.1 е показан един начин за обединяване на шестте сигнала.
В нормално състояние контактите на сензорите S1 ÷ S6 са отворени, транзисторът Q1 е запушен и на колектора му има напрежение +5 V, колкото е захранващото напрежение на микроконтролера. При задействане на сензор, неговият контакт се затваря, транзисторът се отпушва и изходният сигнал става приблизително 0 V. Тази промяна на изходния сигнал се регистрира от микроконтролера и той започва изпълнение на програма за генериране на алармен сигнал.
Изходният сигнал на аларменото устройство представлява правоъгълно импулсно напрежение със звукова честота и с амлитудна стойност приблизително равна на захранващото напрежение на микроконтролера. За да бъде възпроизведен от високоговорител с достатъчна сила, този сигнал трябва да бъде усилен по мощност. Поради голямата амлитуда на сигнала, усилването по мощност се свежда до усилване по ток. При използване на транзистор за усилване по ток той се свързва в схема емитерен повторител.
Връзките на сензорите и усилвателя на мощност с микроконтролера са показани на пълната принципна схема на аларменото устройство.
Микроконтролерът следи затварянето на контактите на сензорите S1 ÷ S6 и на контакта K1 на устройството за активиране и дезактивиране на системата чрез непрекъсната проверка на сигналите на входове Р3.0 и Р3.1. При задействане на аларменото устройство звуковият сигнал се извежда на изход Р1.0, усилва се по ток, респективно по мощност, от транзистор Q2 и се възпроизвежда от високоговорител LS1.
Микроконтролерът АТ89С55 работи със захранващо напрежение + 5 V. По задание захранването на аларменото устройство е UDD = + 12 V. Налага се то да бъде преобразувано на + 5 V. За целта може да се използва триизводен интегрален стабилизатор на фиксирано напрежение + 5 V тип μА7805.
Блокова схема на таймера.
Както беше отбелязано, микроконтролерът АТ89С55 има три 16-битови таймер/брояча. Два от тях – таймери 0 и 1, не се различават от тези на микроконтролерите от фамилия MCS-51. Различен е само третият таймер, но тук той няма да бъде използван и затова няма да го разглеждаме.
Структурата на таймер 0 е еднаква със структурата на таймер 1. Двата брояча имат 4 режима на работа. Режим 0 се базира на 13-битов брояч, режим 1 използва 16-битов брояч и режим 2 работи с 8-битов брояч с автоматично презареждане. Режим 3 може да се приложи само за таймер 0, който се разделя на два 8-битови таймера.
Режим 0. Фиг. 4.1 показва структурата на таймер 1 в режим 0. Режим 0 се избира чрез запис на кода 00 в битове М0 и М1 на регистъра TMOD. Функцията таймер се постига с нулиране на бит С/. Поставянето на този бит в 1 разрешава работата на подсистемата като брояч. Тактовата честота се разделя на 12.
При преминаването на брояча от състояние, в което всички битове са 1 към състояние, в което всички разреди са 0, се установява в 1 флагът TF1 от управляващия регистър TCON. По този начин се активира заявка за прекъсване. Флагът TF1 се нулира автоматично чрез хардуер при обработване на прекъсването. Това е илюстрирано на фиг. 4.1 с връзка между векторния адрес 001ВН и входа за нулиране R.
Таймер 1 започва да брои (ключът е затворен), когато флагът TR1 се установи в 1 и същевременно или битът GATE се нулира, или входът се постави в 1. Измерване на продължителност на импулси може да се осъществи с таймерната функция и установен в 1 бит GATE. Импулсите се подават на входа .
Режим 1. В този режим се използва пълната 8-битова дължина на регистъра TL0 (TL1). Не съществуват други разлики спрямо режим 0.
Режим 2. Фиг. 4.2 показва таймер 1 в режим 2. В този случай ядрото на подсистемата е 8-битов таймер/брояч с автоматично презареждане. Режим 2 се избира чрез запис на код 10 в битовете М1 и М0 на регистър TMOD. В този режим броячът е TL1, а регистърът за автоматично презареждане е ТН1. Когато броячът се препълни, флагът за прекъсване TF1 се установява в 1 и кодът от регистъра ТН1 се записва в брояча TL1. Съдържанието на регистъра ТН1 се фиксира предварително чрез софтуер.
Избор и изчисление на режимите на таймера с параметри по време.
За формиране на изходен звуков сигнал със зададените параметри се налага да се използват два таймера на микроконтролера – единият за формиране на сигнали с честоти 950 Hz и 1500 Hz, а другият – за формиране на интервали 0,2 s.
Микроконтролерът АТ89С55 може да работи с тактова честота fosc до 24 МHz. На входовете на таймер/броячите тя се дели на 12, т.е. входната честота е 12 пъти по-малка от тактовата. Ако изберем тактова честота fosc = 12 MHz, входната честота на броячите на таймерите ще бъде fin = 1 MHz (период Tin = 1 μs).
Формиране на симетрични импулси (с коефициент на запълване 0,5) се осъществява, като на всеки полупериод се инвертира изхода на микроконтролера. Следователно таймерът трябва да бъде инициализиран за формиране на временен интервал равен на полупериода на импулсите.
За формиране на временни интервали t1 = 526 μs и t2 = 333 μs е необходим брояч с повече от 8 разреда. Поради това ще използваме таймер 0 в режим 1 – работа с 16-битов брояч.
За формиране на временни интервали t = 0,2 s = 200 ms ще използваме таймер 1 в режим 1. Капацитетът обаче на 16-битовия брояч е 65536 и с него могат да се формират интервали до 65,5 ms. За формиране на интервал 200 ms трябва да се организира цикъл от четири последователни пускания на таймера, програмиран за интервал 50 ms.
От обяснението на действието на устройството става ясно, че микроконтролерът формира няколко вида временни интервали:
- за честота 950 Hz – временни интервали равни на полупериода на звуковия сигнал t1 = 526 μs.
- за честота 1500 Hz – временни интервали равни на полупериода на звуковия сигнал t2 = 333 μs.
- за продължителността на всяка честота – временни интервали t3 = 50 ms = 50000 μs.
- обща продължителност на звуковия сигнал tc = 1 min = 60 s.
Следователно за получаване на честота 950 Hz таймер 0 трябва да генерира заявка за прекъсване след всеки 526 входни импулса (n1 = 526), за честота 1500 Hz – след всеки 333 входни импулса (n2 = 333), а таймер 1 – след всеки 50000 входни импулса (n3 = 50000).
Препълване на 16-битовия брояч TH0, TL0 на таймер 0 настъпва след входни импулса. За да се получи заявка за прекъсване (препълване на брояча) след n1 = 526 и след n2 = 333 входни импулса, в брояча трябва да се записват начални стойности съответно
р1 = N – n1 = 65536 – 526 = 65010 и
p2 = N – n2 = 65536 – 333 = 65203.
Стойностите р1 = 65010 (FDF2 в шестнадесетичен код) и р2 = 65203 (FEB3 H) се записват предварително в брояча TH0, TL0 на таймера и след всяко прекъсване се презареждат отново.
За да се получи заявка за прекъсване от таймер 1 след n3 = 50000 входни импулса, в брояча трябва да се записва начална стойност
p3 = N – n3 = 65536 – 50000 = 15536.
В шестнадесетичен код десетичното число 15536 има стойност 3CB0. Това число се записва преди всяко пускане на таймера в регистрите му TH1, ТL1.
Програма на Асемблер.
Програмата извършва описаните в предните точки действия. Използва се режим 1 на таймер 0 и на таймер 1.
След инициализиране на таймер 0 в неговите регистри ТН0, TL0 се записва шестнадесетичното число FDF2. Така таймер 0 генерира заявка за прекъсване на всеки 526 μs. При обработката на всяко програмно прекъсване се извършва инвертиране на изход Р1.0 на микроконтролера, при което се получават импулси с период 1052 μs, респективно с честота 950 Hz.
По същия начин преди всяко пускане на таймер 1 в неговите регистри TH1, TL1 се записва шестнадесетичното число 3CB0, което осигурява генериране на заявка за прекъсване на всеки 50 ms. След всеки 4 прекъсвания (200 ms) се сменя числото FDF2, което се записва в регистри ТН0, TL0 с числото FEB3 отговарящо на честота 1500 Hz и обратно. Така на изход Р1.0 се получава двутонов звуков сигнал.
За формиране на временен интервал 60 s се организира двоичен брояч от два регистъра за данни на микроконтролера, който брои програмните прекъсвания от таймер 1. Когато броят им стане 1200 (в шестнадесетичен код 04В0) програмата установява изход Р1.0 в логическа 0 и се връща в изходно състояние. Същото тя прави и при отваряне на ключа K1 при сигнал от устройството за дезактивиране на алармената система.
За изпълнение на описаното действие програмният продукт използва няколко регистри за данни на микроконтролера:
- R0 – указател за смяна на честотите на изход P1.0;
- R1, R2 – брояч на прекъсванията на таймер 1 за формиране на временен интервал 60 s;
- R3 – брояч на интервалите по 50 ms за формиране на временен интервал 0,2 s.
Програма на Асемблер
1. ORG 0000H
2. LJMP 0400H ; Преход след RESET
3. ORG 000BH
4. LJMP 0800H ; Преход при прекъсване от таймер 0
5. ORG 001ВH
6. LJMP 0C00H ; Преход при прекъсване от таймер 1
7. ; ************************************************************************
8. ; Програма OFS.ASM
9. ; ************************************************************************
10. ORG 0400H
11. SETB EТ0 ; Разрешение на прекъсване от таймер 0
12. SETB EТ1 ; Разрешение на прекъсване от таймер 1
13. SETB EA ; Разрешение на всички прекъсвания
14. MOV TMOD,#11H ; Режим 1 на таймер 0 и на таймер 1
15. OFS1: CLR P1.0 ; Ниво 0 на изход P1.0 и на високоговорителя
16. MOV R0,#00H ; Указание за генериране на 950 Hz
17. OFS2: JB P3.1,OFS2 ; Изчакване активиране на алармата (затваряне K1)
18. OFS3: JB P3.0,OFS3 ; Изчакване сигнал от синзор (затваряне S1÷S6)
19. MOV R1,#B0H ; Задаване на интервал 60 s (1200 х 50 ms)
20. MOV R2,#04H ;
21. MOV R3,#04H ; Задаване на интервал 0,2 s (4 х 50 ms)
22. MOV TL0,#F2H ; Задаване интервал 526 μs на таймер 0
23. MOV TH0,#FDH ;
24. SETB TR0 ; Старт на таймер 0
25. MOV TL1,#B0H ; Задаване интервал 50 ms на таймер 1
26. MOV TH1,#3CH ;
27. SETB TR1 ; Старт на таймер 1
28. OFS4: MOV A,R1 ; Изчакване формиране на интервал 60 s
29. ORL A,R2 ;
30. JZ OFS5 ;
31. JNB P3.1,OFS4 ; Проверка за дезактивиране на алармата
32. OFS5: CLR TR0 ; Стоп на таймер 0
33. CLR TR1 ; Стоп на таймер 1
34. SJMP OFS1 ; Преход към етикет OFS1
35. ; ************************************************************************
36. ; Използвани подпрограми
37. ; ************************************************************************
38. ; ————— Подпрограма за обслужване на прекъсванията от таймер 0 —————
39. ;
40. ORG 0800H
41. PUSH A ; Съхраняване на акумулатора в стека
42. PUSH PSW ; Запис на регистъра на състоянието PSW в стека
43. CLR TR0 ; Стоп на таймер 0
44. MOV A,R0 ; Преход за честота 1500 Hz при нечетно R0
45. ANL A,#01H ;
46. JNZ INT1 ;
47. MOV TL0,#F2H ; Задаване интервал 526 μs на таймер 0
48. MOV TH0,#FDH ;
49. SJMP INT2 ; Преход към етикет INT2
50. INT1: MOV TL0,#B3H ; Задаване интервал 333 μs на таймер 0
51. MOV TH0,#FEH ;
52. INT2: SETB TR0 ; Старт на таймер 0
53. CPL P1.0 ; Инвертиране на изход Р1.0
54. POP PSW ; Възстановяване на регистър PSW от стека
55. POP A ; Възстановяване на акумулатора от стека
56. RETI ; Връщане от прекъсване
57. ;
58. ; ————— Подпрограма за обслужване на прекъсванията от таймер 1 —————
59. ;
60. ORG 0C00H
61. PUSH A ; Съхраняване на акумулатора в стека
62. PUSH PSW ; Запис на регистъра на състоянието PSW в стека
63. CLR TR1 ; Стоп на таймер 1
64. DJNZ R3,INT3 ; Преход, ако няма още 0,2 s
65. MOV R3,#04H ; Задаване на интервал 0,2 s (4 х 50 ms)
66. INC R0 ; Увеличаване съдържанието на R0 с 1
67. INT3: DEC R1 ; Намаляване съдържанието на брояч R2, R1 с 1
68. CJNE R1,#FFH,INT4 ;
69. DEC R2 ;
70. INT4: MOV TL1,#B0H ; Задаване интервал 50 ms на таймер 1
71. MOV TH1,#3CH ;
72. SETB TR1 ; Старт на таймер 1
73. POP PSW ; Възстановяване на регистър PSW от стека
74. POP A ; Възстановяване на акумулатора от стека
75. RETI ; Връщане от прекъсване
Заключителна част.
Разработеното алармено устройство може да намери приложение в охранителните системи на различни обекти. Независимо от своята простота то притежава всички необходими за целта функционални възможности. В заключение могат да се направят следните изводи:
- Изработеният проект отговаря напълно на поставеното задание и изискванията към него.
- В разработката са използвани микроконтролер и минимален брой дискретни елементи, което увеличава надеждността на устройството и улеснява практическата му изработка.
Използвана литература.
1. А. Атанасов, Микропроцесорите, 2009 г.
2. Здр. Каракехайов и др., Проектиране на вградени микрокомпютърни системи с микроконтролери, 2000 г.
- А. Смрикаров и др., Едночипови микрокомпютри, 1999 г.
www.atmel.com
Подобни статии
| This entry was posted by Информация EU on 26.06.2010 at 19:01, and is filed under Компютри, Технически науки. Follow any responses to this post through RSS 2.0. You can leave a response or trackback from your own site. |