avr-gcc-位取反的问题,大家是怎么解决的?
比如,对Pa.3取反要求不影响别的口,我都是用的判断,就是判断Pa.3是0还是1,然后再去1.0的,麻烦,请教:大家是怎么解决的? PORTA~=&0x40; #define combit(x,y) (x^=(1<<y)) /*位取反*/combit(porta,0); PORTA~=&0x40???不如PORTA=~POTRTA 你呀真牛
PORTA.3^=0x08;不就完了 回楼上的:PORTA.3^=0x08;不就完了,是的别的PA口全完了 倒是二楼的是不错的,呵呵,谢谢大家了 PORTA^=1<<3 呵呵,一样的。 好像AVR汇编指令确实没有象C51中如:CPL之类的指令,一个CPL指令只要一个周期,而combit(porta,0);好像需要4个! 异或 刚试过,在IAR反编译窗口中,一句PORTB^=0x01;变成了下面几句汇编语言:
LDI R16,0x01
INR17,PORTB
EOR R17,R16
OUT PORTB,R17 #define IO_0 IO_AVR_OBJECT_DEF(A,0)
IO_0<<IO_TOGGLE;//取反 xql464839941 发表于 2011-12-18 15:39
刚试过,在IAR反编译窗口中,一句PORTB^=0x01;变成了下面几句汇编语言:
LDI R16,0x01
INR17,PORTB
肯定会这样,因为一定得知道原来的值才能取异或
页:
[1]