我有一个代码示例,上面写着:
DDRA = (1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) |
(1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
该代码的含义是什么? DDA
的功能是什么?并且“&lt;&lt;”是一个按位?
答案 0 :(得分:1)
常量DDA0
等是指DDRA寄存器中的位位置。该寄存器确定端口A上的八个引脚中的哪一个输入,哪个是输出。位位置1
表示输出引脚,0
(默认值)表示它是输入引脚。
(1 << DDA0)
将DDA0
定义为零意味着“在向左移位零位置后将1放入该寄存器”。所以是的,按位运算符。换句话说,将最低有效位设为1.其他位置向左移动一个不同的位置,使其成为2,4,8等。
该语句的最终结果是所有位的位置都被“或”在一起,从而产生值11111111或0xFF,这意味着整个PORTA端口被设置为输出。
值得注意的是,只需使用以下内容即可简化整个声明:
DDRA = 0xFF;
即使这个更短,也没有代码大小的损失,因为编译器无论如何都会将右边的长表达式折叠为0xFF。在您探索更多内容时,您将看到两种编程端口样式。
来自ATmega文档:
配置Pin 每个端口引脚由三个寄存器位组成:DDxn,PORTxn和PINxn。如寄存器描述所示,DDxn位在DDRx I / O地址,PORTx I / O地址的PORTxn位和PINx I / O地址的PINxn位进行访问。
DDRx寄存器中的DDxn位选择该引脚的方向。如果DDxn写入'1',则Pxn配置为输出引脚。如果DDxn写入'0',则Pxn配置为输入引脚。
当引脚配置为输入引脚时,如果PORTxn写入'1',则上拉电阻被激活。要关闭上拉电阻,必须将PORTxn写入“0”或将引脚配置为输出引脚。当复位条件变为有效时,即使没有时钟正在运行,端口引脚也处于三态。
当引脚配置为输出引脚时,如果PORTxn写入'1',则端口引脚被驱动为高电平。当引脚配置为输出引脚时,如果PORTxn写入逻辑0,则端口引脚被驱动为低电平。
切换Pin 向PINxn写入'1'可切换PORTxn的值,与DDRxn的值无关。 SBI指令可用于在端口中切换一个位。