首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用STS LDS命令输入/输出

使用STS LDS命令输入/输出
EN

Stack Overflow用户
提问于 2020-11-10 18:02:05
回答 1查看 139关注 0票数 0

如何仅使用STS LDS (或等效)指令对低IO块(0x00 - 0x63 )中的IO寄存器进行寻址(读/写)?

谢谢

克里斯

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 19:15:46

主要问题是“STS/LDS在内存中映射的那些寄存器在哪里可见”。答案就在数据表中:

如果要将IN/OUT更改为LDS/STS,则必须向IN/OUT中使用的地址添加0x20偏移量

7.5 I/O内存

第275页的“”一节中显示了ATmega328P的I/O空间定义。所有ATmega328P I/O和外围设备都放置在I/O空间中。所有I/O位置可由LD/LDS/LDD和ST/STS/STD指令访问,在32个通用工作寄存器和I/O空间之间传输数据。地址范围0x00 - 0x1F内的I/O寄存器可直接使用SBI和CBI指令进行位访问。在这些寄存器中,可以使用SBIS和SBIC指令检查单个位的值。有关更多详细信息,请参阅指令集部分。使用I/O特定命令IN和OUT时,必须使用I/O地址0x00 - 0x3F。使用LD和ST指令将I/O寄存器编址为数据空间时,这些地址必须加上0x20。ATmega328P是一个复杂的微控制器,其外围设备数量超过了操作码中为in和OUT指令保留的64个位置所能支持的数量。对于静态随机存储器中0x60 - 0xFF的扩展I/O空间,只有ST/STS/STD和LD/LDS/LDD指令可以与未来器件保持used.For兼容性,如果访问,保留位应写入零。保留的I/O存储器地址永远不应为written.Some状态标志可通过向其写入逻辑1来清除。请注意,与大多数其它AVR®不同,CBI和SBI指令仅在指定的位上操作,因此可以在包含此类状态标志的寄存器上使用。CBI和SBI指令适用于寄存器0x00到0x1F only.The I/O和外设控制寄存器,稍后将对其进行说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64766710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档