Arduino代码机制-IO

本文探讨了AVR单片机中的RAM编址,包括通用寄存器、I/O寄存器和扩展I/O寄存器,并以ATmega2560为例详细说明。内容涉及RAM的最大扩展容量,以及在特定情况下,直接操作I/O寄存器以提高效率。文章还解释了如何通过宏定义简化对寄存器的读写操作,以适应不同的单片机编址方式。
摘要由CSDN通过智能技术生成

AVR单片机中有三种存储器,Flash, RAM, EEPROM。这篇讨论的是RAM。

RAM编址

AVR单片机的RAM编址是这样的,最先的是32个通用寄存器,然后是64个I/O寄存器,然后是扩展I/O寄存器,最后才是Internal SRAM。以ATmega2560为例,内存为8192字节。通用寄存器地址范围是0x00到0x1f,I/O寄存器地址范围是0x20到0x5f,扩展I/O寄存器地址范围是0x60到0x1ff,内存地址范围是0x200到0x2200。如图所示。图为ATmega2560的datasheet中内容。
这里写图片描述

RAM地址是16位的,最多能寻址64k字节的地址空间。要进行RAM扩展的话,最多能扩展多大内存呢?

16位地址寻址能力是64k字节,其中已经编址了0x2200的地址空间,只能扩展剩余的地址空间,因此最多能扩展的内存为0xffff - 0x21ff = 0xde00的内存。如果使用64kB的存储器来扩展的话,那么存储器的高字节部分将会访问不到。

I/O寄存器

尽管Arduino提供了大量的函数和宏,而且大部分效率很高且使用安全,使得开发者不需要关心底层的硬件。但也会有一些特定的情况,Arduino做的不好的。例如要将某个端口全部设置为输出,例如用某个端口并行传输数据。这时候,直接对寄存器操作就比用arduino函数效率高得多。

第一个问题,将端口C全部设置为输出的话,直接对寄存器操作代码将会很简单,而且效率很高:

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值