ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
130068
3m (02.09.2008 16:52, просмотров: 1976)
Спасите, мой моск сейчас взорвецца Смотрю ассемблерный код программы сгенерированной компилятором 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? Вариант через биты вообще в стране абсурда.