long98732123 发表于 2005-6-16 07:51:27

avr-gcc-位取反的问题,大家是怎么解决的?

比如,对Pa.3取反要求不影响别的口,我都是用的判断,就是判断Pa.3是0还是1,然后再去1.0的,麻烦,请教:大家是怎么解决的?

neutronlmk 发表于 2005-6-16 08:00:49

PORTA~=&0x40;

9810956 发表于 2005-6-16 08:02:17

#define combit(x,y) (x^=(1<<y))               /*位取反*/





combit(porta,0);

long98732123 发表于 2005-6-16 13:59:55

PORTA~=&0x40???不如PORTA=~POTRTA

x_chc 发表于 2005-6-16 14:23:11

你呀真牛

PORTA.3^=0x08;不就完了

long98732123 发表于 2005-6-16 15:11:26

回楼上的:PORTA.3^=0x08;不就完了,是的别的PA口全完了

long98732123 发表于 2005-6-16 15:20:41

倒是二楼的是不错的,呵呵,谢谢大家了

biansf2001 发表于 2005-6-16 15:30:14

PORTA^=1<<3

long98732123 发表于 2005-6-17 08:46:33

呵呵,一样的。

xql464839941 发表于 2011-12-17 21:22:40

好像AVR汇编指令确实没有象C51中如:CPL之类的指令,一个CPL指令只要一个周期,而combit(porta,0);好像需要4个!

zengwei 发表于 2011-12-18 09:31:10

异或

xql464839941 发表于 2011-12-18 15:39:02

刚试过,在IAR反编译窗口中,一句PORTB^=0x01;变成了下面几句汇编语言:
LDI R16,0x01
INR17,PORTB
EOR R17,R16
OUT PORTB,R17

uc_zigbee 发表于 2011-12-19 08:29:59

#define IO_0   IO_AVR_OBJECT_DEF(A,0)

IO_0<<IO_TOGGLE;//取反

runapp 发表于 2015-10-8 22:38:55

xql464839941 发表于 2011-12-18 15:39
刚试过,在IAR反编译窗口中,一句PORTB^=0x01;变成了下面几句汇编语言:
LDI R16,0x01
INR17,PORTB


肯定会这样,因为一定得知道原来的值才能取异或
页: [1]
查看完整版本: avr-gcc-位取反的问题,大家是怎么解决的?