This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| ru:avr:external_interrupts [2013/08/14 19:22] – создано eduardtlmk | ru:avr:external_interrupts [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Внешние прерывания ====== | ||
| - | Внешние прерывания (англ. //external interrupt// | ||
| - | |||
| - | Для использования внешнего прерывания следует настроить вывод на обычный режим входа IO (можно использовать и в режиме выхода, | ||
| - | |||
| - | * Логический нуль(напряжение - 0V) | ||
| - | * Изменение логического значения | ||
| - | * Спадающий фронт - логическое изменение из единицы в нуль | ||
| - | * Нарастающий фронт – логическое изменение из нуля в единицу | ||
| - | |||
| - | При выборе логического нуля, прерывание создаётся до тех пор, пока значение вывода равно нулю. Работа основной программы в тот момент остановлена. | ||
| - | |||
| - | Исходя из принципов работы, | ||
| - | |||
| - | ~~PB~~ | ||
| - | |||
| - | <box 100% round # | ||
| - | |||
| - | Vaja on panna ATmega128 viik number 9 ehk siini E viik 7 tekitama katkestust, kui selle väärtus muutub. Sellele viigule vastab väline katkestus INT7, mis on sünkroonne. | ||
| - | |||
| - | <code c> | ||
| - | #include < | ||
| - | |||
| - | // Välise katkestuse programm | ||
| - | ISR(INT7_vect) | ||
| - | { | ||
| - | // Tee midagi | ||
| - | } | ||
| - | |||
| - | int main() | ||
| - | { | ||
| - | // Siini E viigu 7 muutmine sisendiks biti 7 nullimise teel | ||
| - | DDRE &= ~(1 << PIN7); | ||
| - | |||
| - | // Siini E viigule 7 pull-up takisti määramine sisendi ujumise vastu | ||
| - | PORTE |= (1 << PIN7); | ||
| - | |||
| - | // Väliste katkestuste seaderegistris katkestuse 7 | ||
| - | // tekitajaks loogilise muutuse määramine | ||
| - | EICRB = (1 << ISC70); | ||
| - | |||
| - | // Välise katkestuse 7 lubamine | ||
| - | EIMSK |= (1 << INT7); | ||
| - | |||
| - | // Globaalne katkestuste lubamine | ||
| - | sei(); | ||
| - | |||
| - | // Lõputu programmitsükkel | ||
| - | while (1) continue; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | Lisaks üksikute viikude tekitatavatele katkestustele on suurematel AVR-idel võimalik kasutada ka tervete gruppide viikude loogiliste väärtuste muutuste katkestusi. Neid katkestusi nimetatakse lihtsalt viigu muutuse katkestusteks (inglise keeles //pin change interrupt// | ||