对于AVR,端口的输入输出寄存器是各自独立的,不存在隐患。
而且,AVR除了异或或者 对端口输出寄存器 读-修改-写,还真没别的方法。
至于说16楼的编译代码不对,是因为定义正确并且优化级别正确的话应该会被编译成端口寄存器操作,而不是地址操作,而且是间址操作
早期的MPU都没有位操作指令,执行位取反都使用异或操作!
例如: C程序 PORTB ^= 0x01; // 对PORTB口的0位取反
汇编程序 IN R20,PORTB ; 读入PORTB口数据到R20
LDI R21,0x01 ; R21设置为0x01
EOR R20,R21 ; R20,R21异或(将0位取反),值送R20
OUT PORTB,R20 ; 将R20的值送PORTB口123jj 发表于 2010-8-7 13:47 |