AVR单片机方向数据寄存器(DDR)与数据寄存器的关系

来源:互联网 发布:淘宝消费报告数据分析 编辑:程序博客网 时间:2024/06/08 11:58

一、什么是端口对应管脚地址:

  在AVR学习中,会遇到类似于LED闪烁灯闪烁灯示例,其中我们可以看到诸如如下示例:

#include<avr/io.h>unsigned char led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}int main(){    DDRC=0xFF;//设置C口为输出    PORTC=led[0];//设置电平}

  这里可以看到,DDR已经将C口设置为输出状态,同时使用PORT寄存器将0xfe管脚设置为高电平。

  其中PORT寄存器即数据寄存器,是通过AVR的IO操作将数据输出至某一管脚,但其寄存器是配合DDR寄存器同时作用的,若DDR设置为输出状态,则PORT是相应的会设置为1,即高电平输出,反之会设置为0,即低电平输出。

二、寄存器怎样对应地址:

  首先这里可以理解一下DDR寄存器如何设置方向的:

  DRC其对应了PC7~PC0 8个引脚,若我们在程序中将DDRC设置为0xFF时,则表示将C端口所对应的8个引脚均被设置为输出,若将DDRC设置为0x00时则将其设置为输入。
  若我们将DDRC设置为0xF0时,则表示将C端口对应的低4位的4个引脚(PC0~PC3)设置为输入,高4位的4个引脚(PC4~PC7)设置为输出,若将DDRC设置为0x0F则反之。

  这里可以得出,例如在PC7~PC0的8个管脚中对应二进制位数如下:
        这里写图片描述
  其中前4位代表了高4位的端口,后四位则代表了低4位的端口。

  同时在AVR中,PORT与DDR是相关联的两个寄存器,每个管脚的高低电平取决于DDR与PORT关联,其关系如下:

DDRxn PORTxn PUD I/O 上拉电阻 说明 0 0 x 输入 否 高阻态(HI-Z) 0 1 0 输入 是 被外部电路拉低时将输出电流 0 1 1 输入 否 高阻态(HI-Z) 1 0 x 输出 否 低电平 1 1 x 输出 否 高电平

x代表端口号(A、B、C、D、E、F、G)
n代表个端口号的位号(0~7)

  所以由此得知,若DDR设置端口为输出状态时,将该低电平地址赋值给PORT,则对应端口号会设置成指定的高低电平。

三、位运算:

  趁计算管脚电平位,顺便复习一下位运算的方式方法:

运算符 含义 功能 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。 ∧ 按位异或 若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真) ~ 取反 ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0。 << 左移 左移运算符是用来将一个数的各二进制位全部左移N位,右补0。 >> 右移 表示将a的各二进制位右移N位,移到右端的低位被舍弃,对无符号数,高位补0。
原创粉丝点击