схема
Верига за откриване на прекъсване на часовника, включваща: входна тактова честота до различна стойност на скалата и изход на множество честотни делителни вериги на часовник; входен часовник и множество честотно разделени часовници "и" "и" работа на веригата; инвертор, имащ инвертиран часовник с разделяне на честотата, разделящ максималната стойност; оставащият входен часовник, разделен на честота, и изходната верига на инвертора "и и" работа; се предоставя на съответните първи и втори превключватели, имащи "контролен терминал" на изходната верига, управлението ВКЛЮЧВАНЕ / изключване на първия и втория път на разреждане на кондензатори; първа и втора вълна от буферната верига се подава към клемното напрежение на първия и втория кондензатор; получен в съответствие с дължината на инверторния манипулационен изход на веригата за забавяне, предварително определен управляващ сигнал за избор на времезакъснение, верига на изходен буфер, образувана от верига за избор на първа и втора вълнови форми. Което причинява входния часовник от един системен часовник, прекъсванията могат да бъдат открити по-лесно интегрирани и времето за прекъсване на часовника може да бъде точно открито.
Пример
и първоначалната стойност на прекъсване на цикъла на таймера прекъсване на часовника без твърде често и обикновено 20mS (50Hz) може да бъде. Сигналът на времевата база се нуждае от стотни от секундата, за предпочитане 10 mS (100 Hz). Тук вземете 20 mS, T0 таймер, работещ в 16-битов режим на таймер (режим 1). T0 работи по следния начин: всеки машинен цикъл автоматично се увеличава, когато броячът е пълен 0FFFFh, за препълване, той ще генерира прекъсване чрез задаване на съответния хардуерен бит на флага за софтуерно запитване. След машинния цикъл N + 1 от началото на прекъсването. И така, ние просто T0 предварително съхраняваме в по-малък брой от пълната стойност 0FFFFh N и след това стартираме таймера, той ще генерира прекъсване след N машинни цикъла. Тази стойност е така наречената "първоначална стойност". Изчисляването на първоначалната стойност, от която се нуждаем: часовникът е 6MHz, 12 тактови периода на машинен цикъл, 20mS има 10 000 машинни цикъла. (10000) = 10 (2710) 16, 0FFFFh-2710h + 1 = 0D8F0h. Тъй като отговорът на прекъсването и презареждането на защитата на полето на първоначалната стойност изисква 7-8 машинни цикъла, тази стойност плюс 7, т.е. T0 е първоначалната стойност, която трябва да бъде заредена 0D8F7h. След всяко влизане на прекъсване и стойността на PSW A първо се избутва в стека, т.е. 0D8F7h, след което се зарежда T0.
единица за настройка, плюс 1 вътрешна RAM за всяко прекъсване, можем да вземем единица, наречена INCPI (Увеличаване на прекъсване), в прекъсването, първоначалната стойност T0 Bahrain, с инструкцията INC INCPI това е плюс. От това устройство, основната програма или прекъсването на програмата, може да се получи сигнал от всяко цяло число, кратно на 20 mS между 256 ~ 1. Например: Имаше значително подаване към цифровата програма, която трябва да се изпълнява веднъж на всеки 0,5 секунди в за да опресните дисплея, може да бъде предоставена единица (наричана чакаща клетка) W_DISP, с / MOV A, INCPI / ADD A, # 25 / MOV W_DISP, a / изрази, разрешени по-големи от текущата стойност на INCPI 25 и след това проверете дали всяко прекъсване на INCPI стойностите са равни. Ако е равно, което показва преминали 25 цикъла на прекъсване, ще изпрати значително изпълнение на програмата и ще остави W_DISP плюс 25, изчакайте следващите 0,5 секунди. Можем да изчакаме множество единици, за да извлечем множество различни времеви бази. Оставете програмата за прекъсване всеки път, когато прекъсвате и след това щракнете върху Запитване дали всяка единица и изчакване INCPI е равно, ако е равно, съответният процес се изпълнява и нулирайте стойността на изчакващата единица, в противен случай пропуснете. Напр.: 0,5 секунди или мигащ сигнал за опресняване на дисплея, часовник за реално време, генериращ квадратна вълна, или изходен сигнал с постоянна честота с една секунда, на интервали, запитващи устройства за въвеждане.
четене в бутона за прекъсване Обикновено четем клавиатурата в главната програма, стъпките на: сканиране на клавиатурата, ако някой клавиш е натиснат, забавянето от десетки милисекунди за разклащане, наистина Натиснете този бутон отново, за да потвърдите и опитайте отново, след като горният процес на стъпка, съответстващ на ключовата операция, е завършен. Но има два недостатъка: 1 не може да заключи ключовете за въвеждане, съответстващи на работата по обработка, която може да изтече ключ. 2. Delay CPU не може да прави други неща, за да се разклати, когато ефективността не е висока. Ако ключът за четене в часовника прекъсне, можете да избегнете тези недостатъци. Метод: Ако двете са в съседство с прекъсването за четене, е натиснат един и същ клавиш, тогава ключът е валиден (до целите за отстраняване на удари) и е заключен в буфера на клавиатурата FIFO (опашка) и друга основна програма за работа . По този начин, докато основните клавиши на програмата, все още в отговор на въвеждане от клавиатурата. Обикновено буферът за дълбочина може да бъде настроен на 8, ако броят на ключовете е по-голям от този на ключалката 8, нов ключ се игнорира и новата аларма потребителският ключ ще бъде невалиден. Ако времето за стагнация на опашката на буфера на клавиатурата е много по-дълго от времето за обработка на главния ключ, необходимо за максимума, което показва, че основната програма не работи или е погрешна, системата може да бъде прекъсната с инструкция за нулиране, цел на функциите на наблюдателя.
в основната рутина, тъй като нормално отвореното прекъсване на часовника за забавяне, основната програма, когато необходимото време е по-кратко, толкова по-висока е точността на забавянето, прекъсването на часовника трябва да бъде временно затворено. Когато програмата е по-дълга, не се изисква забавяне с висока точност, тя може да бъде моделирана при необходимото писане, за да се избегне забавянето на вложен цикъл.
Пример: P1.1 за 1 секунда импулсен изход с високо ниво
MOV A, INCPI
INC A
CJNE A, INCPI $; изчакайте завършването на следващото прекъсване
SETB P1.1; Осигуреният P1.1 е H, импулсът започва
ДОБАВЯНЕ A, # 50; 50-та 20mS 1 сек < / p>
CJNE a, INCPI, $; et interrupt INCPI плюс 50
CLR P1.1; P1.1, зададен като L, края на импулса
по-долу, например с MCS-51:
Процес на отговор на прекъсване на MCS-51:
1, в отговор на условието за прекъсване: за което се говори тук, ние все още усещаме магическото прекъсване за компютъра да реагира, ние, хората, можем да реагираме на външни събития, защото имаме множество „сензори“ – очи, уши могат да приемат различни информация, как компютърът го прави? Казано направо, не е изненадващо, когато работата на MCS51 във всеки машинен цикъл ще отиде да провери какво е всеки флаг за прекъсване, за да види дали е "1", ако е 1, това означава, че има заявка за прекъсване, така нареченото прекъсване, всъщност заявка, но всеки цикъл го проверява. Че възрастните искат да се променят, вие сте в еквивалента на четене, вдигнат поглед, за да видите всяка секунда, за да проверите какво не е някой звънна на вратата, ако има телефон. . . . Глупаво, нали? Компютърът може и да е бил такъв, не умни хора.
разберете гореописания процес на прекъсване, условието за прекъсване не е неясно. Когато един от следните три случая, процесорът блокира реакцията на прекъсвания:
Централният процесор обработва същото или по-високо ниво на заявката за прекъсване. Текущият машинен цикъл не е последният цикъл, изпълняващ в момента инструкция. Знаем, че има инструкции с един цикъл с един чип, с два цикъла, с три цикъла, текущо изпълняваната инструкция е един байт, няма значение, ако е двубайтова или четири байта, ще трябва да изчака цялата инструкцията се изпълнява, за да се отговори на прекъсването (тъй като заявката се прекъсва при всеки машинен цикъл, вероятно ще бъде намерена).
е текущата инструкция, която се изпълнява за връщане на пакетната команда (RETI) или IP достъпа, регистърът на инструкциите IE, тогава CPU, изпълняващ поне една инструкция, трябва само да бъде прекъснат. Те са свързани с това, че ако имате достъп до IP, IE може да отвори и да прекъсне, деактивира прекъсва, прекъсва или променя приоритета на прекъсването Инструкцията за връщане е илюстрирана в това прекъсване не е обработено, така че трябва да изчакате края на обработката на тази директива и след това изпълнете една инструкция, преди да могат да отговорят на прекъсвания.
2, процесът на прекъсване
Когато процесорът прекъсва, първата от следващата инструкция на текущата инструкция (т.е. при връщане от инструкцията за прекъсване, която трябва да бъде изпълнена) в адреса на стека и след това в съответствие с флага за прекъсване, съответния запис за прекъсване адрес в компютъра, програмен указател компютър, процесорът ще извлече компютъра според стойността, стойността на това, което компютърът, където ще вземе инструкцията, така че програмата ще се разклони към прекъсването, входът продължава. Тази работа се извършва от хардуера, не е нужно да вземаме предвид. Има също проблем, ако сте забелязали, че всеки вектор на прекъсване е адресиран само с осем единици, като например 0003-000B, как да завършите процедурата за прекъсване в толкова малко пространство? Много просто, подреждате LJMP инструкция на място, не можете да прекъснете програмата, за да скочите на всяко място още?
пълната основна програма трябва да изглежда така:
ORG 0000H
LJMP СТАРТ
ORG 0003H
LJMP INT0; трансфектирано външно прекъсване 0
ORG 000BH
RETI; 0 няма прекъсване на таймера, RETI тук поставя такова, в случай на прекъсване "не ме интересува" няма да има голям ефект. След
процесът на прекъсване е завършен, не забравяйте да изпълните RETI инструкция, след като тази инструкция бъде изпълнена, процесорът ще задържи адреса навън, обратно към компютъра, след което програмата ще бъде прекъсната от главния програмен отдел, който ще продължи да изпълнява надолу. Забележка: Работата по защитата на процесора е много ограничена, само защитата на адрес и всички други неща не са защитени, така че ако искате да използвате A, PSW в основната програма и т.н., но също и с рутината за прекъсване, но също така и за да се гарантира връщането към основната програма, след като има данни или не е изпълнена преди прекъсването на данните, вие сте се защитили.
оценявам
От видяно като гъвкаво прилагане на прекъсването на часовника, прекъсването и рационалното разпределение на задачите към основната програма, и двете искат да изчистят разделението на труда, прост интерфейс. Това е едно от уменията, които също се нуждаем от много проби и грешки и опит в практиката. Също така имайте предвид: трябва да се опитате да съкратите времето за изпълнение на манипулатора на прекъсване, не по-дълго от 20 mS.