ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
155924 Топик полностью
Alex B. (07.05.2009 10:17, просмотров: 157) ответил AVF на компилятор С30 удивил 1-ая конструкция 3 такта, вторая 12 тактов. Почему? Как лучше писать такие конструкции?
Такие конструкции (инверсия битового поля) лучше вообще не писать, имхо. А если для C30, то советую внимательно почитать по ссылке - избежишь многих проблем. У тебя, кстати, серьезная ошибка - писать в порт нужно, используя регистр LAT (защелка порта). http://www.pic24.ru/doku.php/articles/mchp/c30_atomic_access
Читать, естественно, регистр PORT (входной буфер порта). Вот пример: if (BFA(BFA_RD, PORTA, RA0) == 0) BFA(BFA_WR, LATA, LATA0, 1); else BFA(BFA_WR, LATA, LATA0, 0); который компилируется в код: 82: if (BFA(BFA_RD, PORTA, RA0) == 0) 0028C BFC2C2 mov.b 0x02c2,0x0000 0028E A30800 btst.z 0x0000,#0 00290 3A0002 bra nz, 0x000296 83: BFA(BFA_WR, LATA, LATA0, 1); 00292 A802C4 bset.b 0x02c4,#0 00294 370001 bra 0x000298 84: else 85: BFA(BFA_WR, LATA, LATA0, 0); 00296 A902C4 bclr.b 0x02c4,#0 Непрохо, правда? Но если все же хочешь нажить себе неприятностей - можно сделать так (впрочем, если для инверсии бита в любом другом регистре - то нормально): 87: BFA(BFA_INV, PORTA, RA0, 1); 00298 200010 mov.w #0x1,0x0000 0029A B6A2C2 xor.w 0x02c2
Согласуйте импеданс!