历史上的今天
今天是:2024年12月13日(星期五)
2021年12月13日 | ATmega168 通用寄存器
2021-12-13 来源:eefocus
寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/ 输出方案:
·输出一个 8 位操作数,输入一个 8 位结果
·输出两个 8 位操作数,输入一个 8 位结果
·输出两个 8 位操作数,输入一个 16 位结果
·输出一个 16 位操作数,输入一个 16 位结果
Figure 4 为CPU 32 个通用工作寄存器的结构。

Figure 4. AVR CPU 通用工作寄存器
大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间为单个时钟周期。
如Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的头32 个地址。虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器方面具有极大的灵活性,因为X、Y、Z 寄存器可以设置为指向任意寄存器的指针。
寄存器R26..R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三个间接寻址寄存器示于Figure 5。

Figure 5. X、Y、Z 寄存器
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。
具体细节请参见ATmega168指令集。
上一篇:ATmega168 堆栈指针
下一篇:ATmega168 状态寄存器
史海拾趣
|
程序是用站上的1602LCD7线接法程序改的,硬件一样。 程序存在小BUG,我也知道,你试试就知道了,很好改,因为程序本来就很简单。 1M的时钟,每秒中断,给秒加1,并判断是不是有进位。 LCD使用中的问题: 原来以25米买了一个,但回来怎么改 ...… 查看全部问答> |
|
我的程序需要实现这样的功能。系统由 arm + 51单片机实现。arm做主处理器 1.arm通过串口发送一串字符比如“123456” 2.51单片机接收到这个字符串“123456”后,发送一个相应字符,比如是“5” 3.arm接受到这个“5”后就确认发送成功。否则继续发 ...… 查看全部问答> |
|
WinCE 5.0触摸屏驱动移植到WinCE 6.0出现的问题 使用的MPU是S3C2440。 触摸屏驱动在CE5.0下可以正常工作,移植到CE6.0只是稍微修改了一下source文件: !if \"$(BSP_NOTOUCH)\" == \"1\" SKIPBUILD=1 !endif SYNCHRONIZE_DRAIN=1 TARGETNAME=s3c2440a_touch RELEASETYPE=PLATFORM TARGETTYPE=D ...… 查看全部问答> |
|
开发板为4510B,想扩展外部IO. 使用外部IO默认基址0x3FD. 当向地址0x3FD0000写数据的时候数据正确.但向地址0x3FD0001写数据的时候就不正常了.发过来的数据不正确,好像死机一样. 请问有谁知道这是怎么回事呀?… 查看全部问答> |
|
为什么装了KEIL后,程序运行在别人的机子上是正确的!但是在我的机子上运行就报错!已经宏定义的函数,说函数没定义!希望那位大师指点下!… 查看全部问答> |
|
使用Console.write 在output windows怎么没有输出?? 用2005的向导生成的smartphone2003的项目,使用Console.write 在output windows 里怎么没有输出?? 我是没用过.net的菜鸟,大家帮忙谢谢… 查看全部问答> |
|
我的一台笔记本电脑的BIOS是PHOENIX牌子的,前些天我制作了一个U盘的DOS启动盘,里面存放了Phlash16.exe程序,刷了一下,前几次刷成功了,后来又被我改了几次,又刷了几次,觉得挺好玩,最后一次突然不让我刷了,当我进入DOS,运行Phlash16.exe程序 ...… 查看全部问答> |




