Стоп! Кажется, выше - наврал... В голове перепутались МК51 и AVR... Если в очередной раз не путаю - в МК51 есть внутренний, недоступный стек уровня прерывания, который не даёт прервать свою же процедуру обработки прерывания. Тогда - выход один: имитация выхода из прерывания по IRET с целью перехода системы прерывания МК на более низкий уровень. Получится - геморой... Нужно затолкнуть в стек адрес той части обработчика, где будет обрабатываться прерывание уже при разрешенном прерывании; и выполнить IRET. По IRET Вы заставите систему прерывания понизить уровень прерывания и перейти на процедуру обработки, из которой выходить нужно уже не по IRET, а по RET...
Т.е. что-то такое:
Код
;Обработчик прерывания
;Сохранение PSW, ACC, других регистров
push PSW
push A
.....
mov A, #LOW Continue
push A
mov A, #HIGH Continue
push A
iret
;Продолжение обработки прерывания
Continue:
; Что-то там выполняем
.....
;Восстановление регистров, ACC, PSW
.....
pop A
pop PSW
ret