Цитата(Algol @ Mar 27 2007, 16:55)

Возможно у вас ошибка именно при выходе из прерывания. Например, при выходе из обработчика прерываний маскируются все прерывания. Посмотрите внимательнее асм. файл, или лучше листинг сюда киньте.
Кидаю листинг.
Код
1 processor 16F84
2 opt pw 79
3 psect __Z44553RS_,global,delta=1
4 psect text0,local,class=CODE,delta=2
5 psect config,global,class=CONFIG,delta=2
6 psect rdata_0,global,class=BANK0,space=1,delta
+ =1
7 psect idata_0,global,class=CODE,delta=2
8 psect intcode,global,class=CODE,delta=2
9 psect intsave_0,global,ovrld,class=BANK0,space
+ =1,delta=1
10 psect intret,global,class=CODE,delta=2
11 psect intentry,global,class=CODE,delta=2
12 psect intsave,global,class=BANK0,space=1,delta
+ =1
13 psect text1,local,class=CODE,delta=2
14 psect text2,local,class=CODE,delta=2
15 psect rbit_0,global,bit,class=BANK0,space=1,de
+ lta=1
16 psect rbss_0,global,class=BANK0,space=1,delta=
+ 1
17 0000
18 0000
19 0000
20 0000
21 0000
22 0000
23 0000
24 0000
25 0000
26 0000
27
28 psect __Z44553RS_
29 001E
30 001E ;#
31
32 psect config
33 2007 3FF9 dw 16377;#
34
35 psect rdata_0
36 001B _keysRepeat
37 001B ds 2
38
39 psect idata_0
40 03FE 3401 retlw 1
41 03FF 3400 retlw 0
42
43 psect intcode
44 0008 _isr
45 0008 int_func
46 ;main.c: 69: if(T0IF)
47 0008 1D0B btfss 11,2
48 0009 280E goto l2
49 ;main.c: 70: {
50 000A 110B bcf 11,2
51 ;main.c: 72: TMR0 = -((2*(10000000)/4/(8)/(2000
+ )+1)/2);
52 000B 3064 movlw 100
53 000C 1283 bcf 3,5
54 000D 0081 movwf 1;volatile
55 000E l2
56 ;main.c: 77: {
57 000E 1283 bcf 3,5
58 ;main.c: 73: }
59 000F 1C8B btfss 11,1
60 0010 2818 goto L1
61 0011 140D bsf _extInterruptOccured/(0+8),_extInterruptOc
+ cured& (0+7)
62 ;main.c: 80: KEYPAD_DATA = !KEYPAD_DATA;
63 0012 3001 movlw 1
64 0013 0685 xorwf 5
65 ;main.c: 81: KEYPAD_INT = !KEYPAD_INT;
66 0014 3080 movlw 128
67 0015 0686 xorwf 6
68 ;main.c: 82: INTF = 0;
69 0016 108B bcf 11,1
70 ;main.c: 83: }
71 0017 1283 bcf 3,5
72 0018 L1
73
74 psect intsave_0
75 000C saved_w
76 000C ds 1
77
78 psect intret
79 0018 int_restore
80 0018 0820 movf saved_status,w
81 0019 0083 movwf 3
82 001A 0E8C swapf saved_w
83 001B 0E0C swapf saved_w,w
84 001C 0009 retfie
85
86 psect intentry
87 0004 int_entry
88 0004 008C movwf saved_w
89 0005 0803 movf 3,w
90 0006 0183 clrf 3
91 0007 00A0 movwf saved_status
92
93 psect intsave
94 0020 saved_status
95 0020 ds 1
96
97 psect text1
98 ;main.c: 88: void main(void)
99 ;main.c: 89: {
100 03CF _main
101 ;main.c: 92: INTCON = 0;
102 03CF 018B clrf 11;volatile
103 ;main.c: 94: RBPU = 0;
104 03D0 1683 bsf 3,5
105 03D1 1381 bcf 1,7
106 ;main.c: 95: PORTB = 0xFF;
107 03D2 30FF movlw -1
108 03D3 1283 bcf 3,5
109 03D4 0086 movwf 6;volatile
110 ;main.c: 96: TRISB = 0b00000001;
111 03D5 3001 movlw 1
112 03D6 1683 bsf 3,5
113 03D7 0086 movwf 6;volatile
114 ;main.c: 98: PORTA = 0xFF;
115 03D8 30FF movlw -1
116 03D9 1283 bcf 3,5
117 03DA 0085 movwf 5;volatile
118 ;main.c: 99: TRISA = 0b00011110;
119 03DB 301E movlw 30
120 03DC 1683 bsf 3,5
121 03DD 0085 movwf 5;volatile
122 ;main.c: 101: TMR0 = 0;
123 03DE 1283 bcf 3,5
124 03DF 0181 clrf 1;volatile
125 ;main.c: 102: TMR0 = -((2*(10000000)/4/(8)/(200
+ 0)+1)/2);
126 03E0 3064 movlw 100
127 03E1 0081 movwf 1;volatile
128 ;main.c: 103: T0CS = 0;
129 03E2 1683 bsf 3,5
130 03E3 1281 bcf 1,5
131 ;main.c: 104: PSA = 0;
132 03E4 1181 bcf 1,3
133 ;main.c: 105: { PS2 = 0; PS1 = 1; PS0 = 0; };
134 03E5 1101 bcf 1,2
135 03E6 1481 bsf 1,1
136 03E7 1001 bcf 1,0
137 ;main.c: 106: T0IF = 0;
138 03E8 110B bcf 11,2
139 ;main.c: 107: T0IE = 1;
140 03E9 168B bsf 11,5
141 ;main.c: 109: INTEDG = 0;
142 03EA 1301 bcf 1,6
143 ;main.c: 110: INTF = 0;
144 03EB 108B bcf 11,1
145 ;main.c: 111: INTE = 1;
146 03EC 160B bsf 11,4
147 ;main.c: 113: GIE = 1;
148 03ED 178B bsf 11,7
149 ;main.c: 115: KEYPAD_DATA = KEYPAD_INT = KEYPAD
+ _CLK;
150 03EE 1283 bcf 3,5
151 03EF 1C06 btfss 6,0
152 03F0 2BF3 goto u30
153 03F1 1786 bsf 6,7
154 03F2 2BF4 goto u44
155 03F3 u30
156 03F3 1386 bcf 6,7
157 03F4 u44
158 03F4 1283 bcf 3,5
159 03F5 1F86 btfss 6,7
160 03F6 2BF9 goto u40
161 03F7 1405 bsf 5,0
162 03F8 2BFA goto l6
163 03F9 u40
164 03F9 1005 bcf 5,0
165 03FA l6
166 ;main.c: 117: while(1)
167 ;main.c: 118: {
168 03FA 1283 bcf 3,5
169 03FB 3002 movlw 2
170 03FC 0686 xorwf 6
171 ;main.c: 120: }
172 03FD 2BFA goto l6
173
174 psect text2
175 0000
176 0000
177 0000
178 0000
179 0000
180 0000
181 0000
182 0000
183 0000
184 0000
185 0000
186 0000
187 0000
188 0000
189 0000
190 0000
191 0000
192 0000
193 0000
194 0000
195 0000
196 0000
197 0000
198 0000
199 0000
200 0000
201 0000
202 0000
203 0000
204 0000
205 0000
206 0000
207 0000
208 0000
209 0000
210 0000
211 0000
212 0000
213 0000
214 0000
215 0000
216 0000
217 0000
218 0000
219 0000
220 0000
221 0000
222 0000
223 0000
224 0000
225 0000
226 0000
227 0000
228 0000
229 0000
230 0000
231 0000
232 0000
233
234 psect rbit_0
235 0068 _extInterruptOccured
236 0068 ds 1
237 0069 _transferKeyPressing
238 0069 ds 1
239 0000
240 0000
241 0000
242 0000
243 0000
244 0000
245 0000
246 0000
247 0000
248 0000
249 0000
250 0000
251 0000
252 0000
253 0000
254 0000
255
256 psect rbss_0
257 000E _keys_column
258 000E ds 1
259 000F _RTC
260 000F ds 2
261 0011 _idx
262 0011 ds 2
263 0013 _keys
264 0013 ds 2
265 0015 _keysCount
266 0015 ds 2
267 0017 _keysLastSaved
268 0017 ds 2
269 0019 _keysLastValid
270 0019 ds 2
HI-TECH Software PICC Macro Assembler V8.05PL2
Symbol Table Tue Mar 27 15:31:45 2007
l2 000E l6 03FA
u30 03F3 u40 03F9
u44 03F4 _keysLastSaved 0017
_keysLastValid 0019 _RTC 000F
_idx 0011 _isr 0008
_keysCount 0015 _main 03CF
_keys 0013 start 001D
saved_w 000C _keys_column 000E
clear_bit0 0021 _extInterruptOccured 0068
_transferKeyPressing 0069 int_entry 0004
_keysRepeat 001B saved_status 0020
status 0003 copy_bank0 0025
int_func 0008 clear_bank0 001D
int_restore 0018