我得到了一个代码示例,它是这样的:
DDRA = (1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) |
(1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);这段代码是什么意思?DDA的功能是什么?“<<”是位的吗?
发布于 2017-09-08 22:25:53
常量DDA0等是指DDRA寄存器中的位位置。该寄存器确定端口A上的八个引脚中的哪些是输入,哪些是输出。位位置中的1表示输出引脚,0 (默认值)表示它是输入引脚。
(1 << DDA0)将DDA0定义为0意味着“将该寄存器向左移位0个位置后,将1放入该寄存器”。所以,是的,按位运算符。换句话说,将最低有效位设为1,其他位将1向左移动不同的位置,如2、4、8等等。
该语句的最终结果是所有位位置一起输出,结果值为11111111或0xFF,这意味着整个端口端口都被设置为ORed。
值得注意的是,可以通过简单地使用以下语句来简化整个语句:
DDRA = 0xFF;即使这样更短,也不会有代码大小的损失,因为编译器无论如何都会将右侧的长表达式折叠为0xFF。在探索更多内容时,您将看到这两种风格的编程端口。
从ATmega文档中:
配置引脚的
每个端口引脚由三个寄存器位组成: DDxn、PORTxn和PINxn。如寄存器说明所示,DDxn位在DDRx I/O地址访问,PORTxn位在PORTx I/O地址访问,PINxn位在PINx I/O地址访问。
DDRx寄存器中的DDxn位选择该引脚的方向。如果将DDxn写入'1',则将Pxn配置为输出引脚。如果DDxn写入'0',则Pxn被配置为输入引脚。
当引脚配置为输入引脚时,如果PORTxn写入'1‘,则上拉电阻器被激活。要关闭上拉电阻,必须将PORTxn写入'0‘或将引脚配置为输出引脚。当复位条件变为有效时,端口引脚处于三态状态,即使没有时钟在运行。
当引脚配置为输出引脚时,如果PORTxn写入'1‘,则端口引脚被驱动为高电平。当引脚配置为输出引脚时,如果PORTxn写入逻辑0,则端口引脚被驱动为低电平。
将引脚写入'1‘到PINxn将切换PORTxn的值,这与DDRxn的值无关。SBI指令可用于切换端口中的单个位。
https://stackoverflow.com/questions/46118524
复制相似问题