Свържете бутон към микроконтролера, програмиране MCU снимка
А сега да разгледаме случая, когато микроконтролера непрекъснато изпълнява всяка задача, в този случай се натисне бутона за изчакване неприемливо. Можете да използвате прекъсване за промяна на нивото на входа RB4-RB7 или входът на външно прекъсване INT.
За да прекъснете RB4-RB7 входа на алгоритъма е следната: при промяна на сигнал от 1-0 преход се случва в прекъсване стандартна програма на оператора, когато това е необходимо първо да се определи какво е причинило прекъсване, когато има множество източници на прекъсване. Когато се определя от източника, е необходимо да се разбере какво точно отиде ниво на входния сигнал, определяйки го, извършване на съответните операции в рамките прекъсващият или задайте флаг в регистър, който е специално определени за тази цел. На следващо място, предположи регистрирате PORTB, да се премахнат несъответствията предварително запаметени стойност със сигнала на пристанищните входове, в противен случай на знамето няма да бъде възможно да се изчисти прекъсване. След възстановяване на изхода на флаг от прекъсване манипулатор.
Специален регистър с чек знамена в основната линия на програмата, където набор знаме изпълнява подпрограма, а след това изчисти флаг.
поради Отново да се свържете с отпадане на този алгоритъм може да се генерира чрез многократно прекъсване, добавите пауза за време debounce в рамките на Програма за прекъсване е безсмислена, тъй като загуба на време CPU необходимо за извършване на други задачи.
Също така, алгоритъмът не се счита за рецидив отмените бутон е натиснат, промяна сигнал от 0 до 1, защото в RB4-RB7 входове за прекъсване се случи на възходящи и низходящи фронт на сигнала. Но тук е само един прекъсване може да се пропусне чрез извършване на съответните операции, само ако 0 вход.
Решете проблема с тракащи, можете да използвате таймера. При влизане в Програма за прекъсване манипулатор, при смяна на сигнал от 1 до 0, дай Боже прекъсват входа RB4-RB7, дефинирате входа, където сигналът се променя, флагът намира в специален регистър, таймерът започва да 5-20 милисекунди и да излезете от програмата за прекъсване. След определен период от време, таймер преливник връщането към прекъсващият на, спрете таймера, нулиране флага за препълване се чете PORTB да се премахнат несъответствията, нулиране на знамето и да позволи прекъсване входове RB4-RB7. Когато за прекъсване отново се появява в резултат на притискане на бутоните, целият процес се повтаря, с изключение на това, пропуснете изпълнение на съответните операции, както при входния сигнал е равен на 1. Програмният код е представена по-долу:
; Преди това при първоначалната настройка на регистри със специално предназначение трябва да се нулира
; Overflow флаг TMR1, прекъсват флаг на RB4-RB7 входове
; Оставя преливник прекъсват TMR1, както и прекъсване входове RB4-RB7
; Регистрирайте бутони флаг с флагове са анкетираните в тялото на основната програма, не забравяйте да ги възстановите
btfss PIR1, TMR1IF; анкета прекъсване флаг Overflow TMR1
Отидох metka1; флаг не е зададен: преход към етикет metka1 - анкета
Други източници; прекъсване
BCF T1CON, TMR1ON; флаг е установен: Спри таймера TMR1
BCF PIR1, TMR1IF; нулиране преливник флаг прекъсване TMR1
movf PORTB, W; PORTB чете стойности за отстраняване на несъответствията
BCF INTCON, RBIF; прекъсване флаг изчистване на входа на RB4-RB7
BSF INTCON, RBIE; резолюция прекъсване входове RB4-RB7
retfie; излизане от прекъсване манипулатор
metka1 btfss неокон, RBIF; анкета прекъсване знаме на входа RB4-RB7
Отидох metka2; флаг не е зададен: преход към етикет metka2 - анкета
Други източници; прекъсване
BCF INTCON, RBIE; флаг е установен забрана за прекъсване входове RB4-RB7
btfss PORTB, 4; проучване линия RB4
BSF флаг, 0, 0 на RB4 линия: задаване на флаг за RB4 линия
btfss PORTB, 5; 1 RB4 ред: проучване линия RB5
BSF флаг, 1, 0 до RB5 ред: задаване на флаг за RB5 на линия
btfss PORTB, 6; 1 RB5 линия: изследване линия RB6
BSF флаг, 2, 0 по линия RB6: задаване на флаг за RB6 на линия
btfss PORTB, 7, линии от 1 до RB6: проучване линия RB7
BSF флаг, 3, 0 по линия RB7: задаване на флаг за RB7 линията
movlw 0,224; номер 45536 Влизане TMR1 таймер, пауза 20ms,
movwf TMR1L; тактова честота на 4 MHz,
movlw 0,177; делител TMR1 предварително инсталирана 1: 1
BSF T1CON, TMR1ON; включите таймер TMR1
retfie; излизане от прекъсване манипулатор
metka2. ; Проучване друг прекъсне източници
retfie; излизане от прекъсване манипулатор
Честно казано, такъв проект не съм използвал, не ми харесва всичко. Затворете бутон на прекъсването е най-добре да се събудите на микроконтролера от режим на заспиване.
Тя е много по-лесно и по-безопасно да се сложи бутони анкета код в течение на основната програма, на мястото, където те ще бъдат разпитани най-малко веднъж на всеки 100 милисекунди, както и други задачи. За да се предотврати множество екзекуции на подпрограмата, когато продължително натискане на бутона, който искате да използвате допълнителен регистър със знамената на бутони на контрол на държавата. Ако по време на следващия цикъл избирателната до главния ключ програма няма да издържи, а след това в положение 1 на съответния флаг регистър. При констатиране на натискане на първата проверка на флага, ако тя е 1, и изпълнява своята нулиране рутинна след това отидете на втория бутон анкета или повече от основната програма линия.
Следващата анкета Флагът е равен на 0, не правят нищо, като отидем да отправя запитвания до втория бутон, или да продължи без спиране на цикъла. Този пропуск да се случи, докато натиснете бутона отново и знамето не е настроен да 1. Кодът е, както следва:
вътрешни гостилница резистори са полезни за отстраняване на грешки. Трябва да се направи инсталация по-малко. Но външни резистори ще бъдат по-надеждни в готовия устройството)
Въпреки че такъв добър софтуер debounce филтриране, като се използва източник на трансформатор за захранване (или батерията) и Conder хранене, може да се избегне ненужна намеса и вътрешна употреба podtyag. Какво може да ви помогне в такива компактни устройства.
Бутоните са много различни, с скача от 10 микросекунди за част от секундата.
В допълнение, те възраст и промяна параметри отскачат до най-лошото.
Поради това е много по-добре да се направи забавяне програма и сложи ключа в паралелен кондензатор, промяна на номиналната стойност на които могат да бъдат организирани бързо при никакви бутони.