Не правильно работают внешние прерывания avr

Никогда раньше не работал с внешними прерываниями. столкнулся с такой проблемой:
Хотел при помощи внешнего прерывания отслеживать нажатие/отускание кнопки.

написал простенькую программу, чтобы протестировать. программа на attiny13 в Proteus генерировала прерывания постоянно независимо от установки прерываний по спаду/подъему или низкому уровню и независимо от состояния сигнала на ноге INT0. в эмуляторе avr studio 5 постоянно срабатывали только когда ставил по низкому уровню. по фронтам не работали. на железе нормально работало только прерывание по спаду. по подъему и по любому измененению срабатывали вообще стихийно. по низкому уровню генерировались постоянно. тестил также на atmege 8. в Proteus не правильно срабатывают. на железе вообще не работают. программу сначала писал на С. потом переписал на ассемблере. вот код:

.include "d:\avrasm\appnotes\tn13def.inc"

.def temp = r16
.def temp2 = r17
.def temp3 = r18

;================МАКРОСЫ========================== ====

;================ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ======================================
rjmp reset
rjmp pitanie

;============ПРЕРЫВАНИЯ==============
pitanie:
sbi DDRB,4
sbi PORTB,4
reti

;============ДАННЫЕ==================

;============ПРОГРАММА===============

;============Инициализация===========
reset:

clr temp
out GIMSK,temp ; отключаем прерывания
out TIMSK,temp
; out DDRB,temp

ldi temp,$FF ; сбрасываем флаги прерываний
out GIFR,temp
out TIFR,temp

ldi temp,low(Ramend) ;инициализируем стек
out SPL,temp

; sbi ACSR,ACD ; отключаем компаратор

; in temp,MCUCR ; отключаем подтягивающие резисторы
; sbr temp,(1< ; out MCUCR,temp

;============Тело программы============

in temp,GIMSK ;включаем прерывание INT0
ori temp,(1< out GIMSK,temp
in temp,MCUCR ;по низкому уровню сигнала
andi temp,0b11111100
; ori temp,0b00000011 ; если ставим по фронтам, ативируем данную строчку

out MCUCR,temp
sei ;разрешаем прерывания

main:
rjmp main

немного о железе. для генерации прерывания использовал обычный тумблер, закороченный на питание. то есть, если тумблер выключен - низкий уровень (отсутствие питания), если включен - высокий (U питания). щелкая тумблером имитировал импульсы. Для контроля срабатывания прерывания использовал порт B 4 пин с подключенным к нему светодиодом через резистор

что я делал не так и почему у меня не работали прерывания?. и почему Proteus их не отрабатывал?

А в железе собирал? Попробуй

А в железе собирал? Попробуй собрать в железяке и на реальном микроокнтроллере протестируй. МОжет быть просто твоя квалификация работы с Протеусом не на том уровне что бы отловить его ошибки а не ошибки прошивки.