/*-------------------------------------------------------------------
优化示例:
DDRB &= ~((1 << SCL) | (1 << SDA)); //SCL设置为输入方式,SCL信号由主机提供
上句将比下两句代码多编译2个字节
DDRB &= ~(1 << SCL); //SCL设置为输入方式,SCL信号由主机提供
DDRB &= ~(1 << SDA); //SDA设置为输入方式
--------------------------------------------------------------------*/
在MCU中,对'位'的控制都格外关心,都担心C的效率问题.但gccavr在这方面解决的很出色.
有时可能需要位的同时控制,则必须像:
DDRB |= ((1 << SCL) | (1 << SDA));
DDRB &= ~((1 << SCL) | (1 << SDA));
PORTB |= ((1 << SCL) | (1 << SDA));
PORTB &= ~((1 << SCL) | (1 << SDA));
但在小容量的芯片或和次序无关时,采用 :
DDRB &= ~(1 << SCL);
DDRB &= ~(1 << SDA);
PORTB |= (1 << SCL);
PORTB |= (1 << SDA));
可能效率更高,也符合"位控"的目的.
好些人一直纠缠51的"位控"方式: P1_0 = 1;P0_0 = 0;
认为是真正的"位控"方式.
实际是习惯问题. 因为在更多的环境下,C的通用"位控"方式则更具有普遍性.
即|=;&=~;^=的这几种常用书写方式.
说实话,MCU与PC的最大不同就是对硬件的操作,MCU实际最后和最直接的目的
就是用位控来达到控制的目的.
可以说几乎见不到没有位控的MCU系统.
文章评论(0条评论)
登录后参与讨论