ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 сентября
1541405
Ig_B (11.09.2025 09:32, просмотров: 1089)
XC8 генерит хрень в прерывании для 18F2550 и нормальный код для 18F14K22. 

для 18Ф2550 не проверяет оба бита

195: void __interrupt() interrupts(void){//-------------=======-----------------

081C 0006 POP

196:

197: if(INTCONbits.T0IE && INTCONbits.T0IF){//5M/65536=76.294Hz ->38.15Hz flash

0866 BAF2 BTFSC INTCON, 5, ACCESS

198: INTCONbits.T0IF=0;

086C 94F2 BCF INTCON, 2, ACCESS

для 18ф14к22 все нормально


379: void __interrupt() interrupts(void){

0008 825D BSF btemp, 1, ACCESS

000A CFD9 MOVFF FSR2, __pcstackCOMRAM

000C F001 NOP

000E CFDA MOVFF FSR2H, 0x2

0010 F002 NOP

380: //LED_ON;

381: if(PIE1bits.RCIE && PIR1bits.RCIF){//UART RC interrupt

0012 BA9D BTFSC PIE1, 5, ACCESS

0014 AA9E BTFSS PIR1, 5, ACCESS

0016 D00F BRA 0x36


MPLABX 3.35, XC8 1.45, понятно что все старьё, просто уже есть в виртуалке.

Оптимизацию менял free-standard-pro, не влияет.

В реале светодиод мигает с правильной частотой, до следующих проверок не доходит.

Что не так?