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
Согласуйте импеданс!