ATMEGA16 IO端口相关总结

发布者:科技创新实践者最新更新时间:2020-08-02 来源: eefocus关键字:ATMEGA16  IO端口  寄存器 手机看文章 扫描二维码
随时随地手机看文章

ATMEGA16 IO端口相关的寄存器总共有三个DDRX、PORTX和PINX。如果要对IO操作基本上就是对这三个寄存器进行相关的操纵。DDRX也称为数据方向寄存器、PORTX称为数据寄存器、PINX称为端口输入引脚。


DDRX的作用:

当DDRX = 0时,表示的是某端口的引脚为输入;当DDRX = 0xff时表示某端口的引脚为输出。


引脚的状态:输入或者输出是根据什么定义的呢?


是根据高低电平是输入单片机还是从单片机输出。输入是指:不属于单片机的外部的电平输入到单片机;输出是指:单片机的电平输出到单片机的外部。


PORTX的作用:

当DDRX = 0时,若把PORTX置位则表示启动了上拉电阻;若PORTX为0,则不启动上拉电阻。当DDRX = 0xff时,若把PORTX置位则表示输出高电平;若PORTX为0,则输出低电平。


PINX的作用:

PINX寄存器的值与DDRX寄存器的值(输入还是输出)没有任何关系;只与端口引脚上面的值有关系(PORTX)。如果PORTXn = 0xdd,则无论DDTX取什么样的值,其PINX都为0Xdd。

#include #include int main(void)
{
   uint8_t temp;
   DDRC = 0xff;
   PORTC = 0xff;

   DDRA = 0;
   PORTA = 0xdd;

   asm("nop");//汇编指令nop,即空操作,其执行时间为一个时钟周期
   PORTC = PINA;

    return 0;
}

其中无论DDRA的值是0还是0xff,结果都是一样的。

bubuko.com,布布扣

因此也可以得出一个结论:PINX寄存器里的值是可以按照自己的意愿设定的。原因是单片机能捕捉端口的电平,并置位PINX寄存器。


初始值问题:

单片机刚上电后,端口上的寄存器的初始值是什么?

上电后,默认的初始值为0,即DDRX= 0;PORTX = 0;PINX =  0;

#include #include //#includeint main(void)
{
   uint8_t temp;
   DDRC = 0xff;
   PORTC = 0xff;

   //DDRA = 0;
   //PORTA = 0xdd;

   asm("nop");//汇编指令nop,即空操作,其执行时间为一个时钟周期
   //_nop();
   PORTC = PINA;

    return 0;
}

bubuko.com,布布扣

初始化方法1:
      PORTA=0xFF;    //内部上拉,高电平

     DDRA=0xFF;     //输出高电平---------灯一直是灭的

  初始化方法2:

      DDRA=0xFF;     //输出低电平--------灯被错误点亮了

     PORTA=0xFF;    //输出高电平--------马上被熄灭了,时间很短(1个指令不到uS时间),灯闪了一下,眼睛无法察觉


关键字:ATMEGA16  IO端口  寄存器 引用地址:ATMEGA16 IO端口相关总结

上一篇:IAR for AVR 报array is too large错误 【已解决】
下一篇:bascom avr版热电偶TCK+AD8495+ADC测温

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved