Спасите, мой моск сейчас взорвецца Смотрю ассемблерный код программы сгенерированной компилятором C18, расширенный режим включен. Абсолютно примитивные действия в обработчике прерывания:
// проверка INT1IF через маску
if (INTCON3 & 0x01)
LATCbits.LATC1=0;
// INT2IF - через бит
if (INTCON3bits.INT2IF)
LATCbits.LATC2=0;
Компилируется в такое:
244: // проверка INT1IF через маску
245: if (INTCON3 & 0x01)
034A 50F0 MOVF 0xff0, W, ACCESS
034C 6EF3 MOVWF 0xff3, ACCESS
034E 50F3 MOVF 0xff3, W, ACCESS
0350 0B01 ANDLW 0x1
0352 E001 BZ 0x356
246: LATCbits.LATC1=0;
0354 928B BCF 0xf8b, 0x1, ACCESS
247: // INT2IF - через бит
248: if (INTCON3bits.INT2IF)
0356 50F0 MOVF 0xff0, W, ACCESS
0358 0B02 ANDLW 0x2
035A E001 BZ 0x35e
035C 0E01 MOVLW 0x1
035E 0101 MOVLB 0x1
0360 6FC5 MOVWF 0xc5, BANKED
0362 6BC6 CLRF 0xc6, BANKED
0364 51C5 MOVF 0xc5, W, BANKED
0366 11C6 IORWF 0xc6, W, BANKED
0368 E001 BZ 0x36c
249: LATCbits.LATC2=0;
036A 948B BCF 0xf8b, 0x2, ACCESS
036С ...
Проверка по маске у меня вызывает недоумение: зачем компилятор копирует значение в PRODL? Вариант через биты вообще в стране абсурда.
-
- попробуйте хитеховский. - LordN(02.09.2008 16:58)