Ответ: при входе-выходе из обработчика контекст можно не сохранять - в main'е ничего не используется.
задержка на вход 3 программных такта, выход (retfie) - два.
psect intcode
_isr
int_func
;tst16.c: 24: TMR0 -= 199;
movlw -199
clrf 3 ;select bank 0
addwf 1 ;volatile
;tst16.c: 25: T0IF = 0;
bcf 11,2
;tst16.c: 26: if(--refr)
decf _refr
btfsc 3,2
goto l4
;tst16.c: 27: {
decf _chan
btfsc 3,2
goto l5
bsf 6,0
l5
;tst16.c: 29: if(--(chan[1])) RB1 = 1;
decfsz _chan+1
bsf 6,1
;tst16.c: 30: if(--(chan[2])) RB2 = 1;
decfsz _chan+2
bsf 6,2
;tst16.c: 31: if(--(chan[3])) RB3 = 1;
decfsz _chan+3
bsf 6,3
;tst16.c: 32: if(--(chan[4])) RB4 = 1;
decfsz _chan+4
bsf 6,4
;tst16.c: 33: if(--(chan[5])) RB5 = 1;
decfsz _chan+5
bsf 6,5
;tst16.c: 34: if(--(chan[6])) RB6 = 1;
decfsz _chan+6
bsf 6,6
;tst16.c: 35: if(--(chan[7])) RB7 = 1;
decfsz _chan+7
bsf 6,7
;tst16.c: 36: if(--(chan[8])) RC0 = 1;
decfsz _chan+8
bsf 7,0
;tst16.c: 37: if(--(chan[9])) RC1 = 1;
decfsz _chan+9
bsf 7,1
;tst16.c: 38: if(--(chan[10])) RC2 = 1;
decfsz _chan+10
bsf 7,2
;tst16.c: 39: if(--(chan[11])) RC3 = 1;
decfsz _chan+11
bsf 7,3
;tst16.c: 40: if(--(chan[12])) RC4 = 1;
decfsz _chan+12
bsf 7,4
;tst16.c: 41: if(--(chan[13])) RC5 = 1;
decfsz _chan+13
bsf 7,5
;tst16.c: 42: if(--(chan[14])) RE0 = 1;
decfsz _chan+14
bsf 9,0
;tst16.c: 43: if(--(chan[15])) RE1 = 1;
decfsz _chan+15
bsf 9,1
;tst16.c: 44: if(--(chan[16])) RD0 = 1;
decfsz _chan+16
bsf 8,0
;tst16.c: 45: if(--(chan[17])) RD1 = 1;
decfsz _chan+17
bsf 8,1
;tst16.c: 46: if(--(chan[18])) RD2 = 1;
decfsz _chan+18
bsf 8,2
;tst16.c: 47: if(--(chan[19])) RD3 = 1;
decfsz _chan+19
bsf 8,3
;tst16.c: 48: if(--(chan[20])) RD4 = 1;
decfsz _chan+20
bsf 8,4
;tst16.c: 49: if(--(chan[21])) RD5 = 1;
decfsz _chan+21
bsf 8,5
;tst16.c: 50: if(--(chan[22])) RD6 = 1;
decfsz _chan+22
bsf 8,6
;tst16.c: 51: if(--(chan[23])) RD7 = 1;
decf _chan+23
btfsc 3,2
goto l3
bsf 8,7
;tst16.c: 52: }
;tst16.c: 53: else
goto l3
l4
;tst16.c: 54: {
movf _val,w
movwf _chan
;tst16.c: 56: chan[1] = val[1];
movf _val+1,w
movwf _chan+1
;tst16.c: 57: chan[2] = val[2];
movf _val+2,w
movwf _chan+2
;tst16.c: 58: chan[3] = val[3];
movf _val+3,w
movwf _chan+3
;tst16.c: 59: chan[4] = val[4];
movf _val+4,w
movwf _chan+4
;tst16.c: 60: chan[5] = val[5];
movf _val+5,w
movwf _chan+5
;tst16.c: 61: chan[6] = val[6];
movf _val+6,w
movwf _chan+6
;tst16.c: 62: chan[7] = val[7];
movf _val+7,w
movwf _chan+7
;tst16.c: 63: chan[8] = val[8];
movf _val+8,w
movwf _chan+8
;tst16.c: 64: chan[9] = val[9];
movf _val+9,w
movwf _chan+9
;tst16.c: 65: chan[10] = val[10];
movf _val+10,w
movwf _chan+10
;tst16.c: 66: chan[11] = val[11];
movf _val+11,w
movwf _chan+11
;tst16.c: 67: chan[12] = val[12];
movf _val+12,w
movwf _chan+12
;tst16.c: 68: chan[13] = val[13];
movf _val+13,w
movwf _chan+13
;tst16.c: 69: chan[14] = val[14];
movf _val+14,w
movwf _chan+14
;tst16.c: 70: chan[15] = val[15];
movf _val+15,w
movwf _chan+15
;tst16.c: 71: chan[16] = val[16];
movf _val+16,w
movwf _chan+16
;tst16.c: 72: chan[17] = val[17];
movf _val+17,w
movwf _chan+17
;tst16.c: 73: chan[18] = val[18];
movf _val+18,w
movwf _chan+18
;tst16.c: 74: chan[19] = val[19];
movf _val+19,w
movwf _chan+19
;tst16.c: 75: chan[20] = val[20];
movf _val+20,w
movwf _chan+20
;tst16.c: 76: chan[21] = val[21];
movf _val+21,w
movwf _chan+21
;tst16.c: 77: chan[22] = val[22];
movf _val+22,w
movwf _chan+22
;tst16.c: 78: chan[23] = val[23];
movf _val+23,w
movwf _chan+23
;tst16.c: 79: refr = 250;
movlw -6
movwf _refr
;tst16.c: 80: PORTB = 0;
clrf 6 ;volatile
;tst16.c: 81: PORTD = 0;
clrf 8 ;volatile
;tst16.c: 82: PORTE = 0;
clrf 9 ;volatile
;tst16.c: 83: PORTC &= 0b11000000;
movlw -64
andwf 7 ;volatile