Цитата(WreWolf @ Oct 13 2009, 10:57)

Как в AVR Studio 4 написать обработчик прерываний?
AVR Studio - это просто среда. Там можно набирать любую программу. В том числе и на Си. Поэтому вопрос некоректен. Думаю что вы хотели спросить "как написать обработчик прерывания на ассемблере".
Если это так, то ответ следующий:
1) Обработчик прерывания - это обычная подпрограмма, переход на которую осуществляется по фиксированному вектору. Соответственно, вам надо написать подпрограмму, а в векторе-обработчика разместить переход на неё.
2) Надо учесть, что при переходе к обработке прерывания, автоматически сбрасывается бит разрешения прерывания. Соответственно необходимо разрешить его (если это требуется) при выходе. Обычно для этого используется инструкция reti вместо ret.
3) Надо почитать в даташите на данную микросхему необходимые дополнительные действия, если они есть. Так например иногда используется один общий обработчик для группы прерываний (флагов) или требуется ручной сброс флага прерывания и т.п.
4) Необходимо сохранить sreg а также используемые в прерывании регистры и восстановить их при выходе.
Например так:
Вектора:
Код
.cseg
rjmp init
;****************************************************************
;* Прерывания. *
;****************************************************************
.if chip == 88
.org OC2Aaddr
rjmp Tim2Cmp ; Обработка двигателя
.org OVF0addr
.else
.org OC2addr
rjmp Tim2Cmp ; Обработка двигателя
.org OVF0addr
.endif
Обработчик:
Код
;****************************************************************
;* Прерывание от таймера 0. (180мkс) *
;****************************************************************
.equ PerIzm = 180 ; Период измерения 180 мкс
.equ FuelCanal = 4-2 ; Канал измерения по частоте
Tim0Ovf:
in tmpsreg,sreg ; Сохранить SREG
............
Tim0OvfEnd:
out sreg, tmpsreg
reti