寄存器文件针对AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/ 输出方案:
• 一个 8 位输出操作数和一个 8 位结果输入。
• 两个 8 位位输出操作数和一个 8 位结果输入。
• 两个 8 位位输出操作数和一个16 位结果输入。
• 一个 16 位位输出操作数和一个 16 位结果输入。
Figure 4 为CPU 32 个通用工作寄存器的结构。
大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数的执行时间为单 时钟周期。
如Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的 头32 个地址。虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器 方面具有极大的灵活性,因为X、Y、Z 寄存器可以设置为指向任意寄存器的指针。
寄存器R26..R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三 个间接寻址寄存器示于Figure 5。
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。
关键字:ATmega128 通用寄存器 指令集
引用地址:
ATmega128 通用寄存器
推荐阅读最新更新时间:2024-11-08 12:03
PC和ATMEGA128串口通信
/*PC和ATMEGA128通信,ATMEGA以轮循方式发送,中断方式接受*/ #include mega128.h #define RXEN0 4 #define TXEN0 3 #define RXCIE0 7 #define UDRE0 5 #define UCSZ00 1 #define UCSZ01 2 #define UCSZ02 2 #define RXC0 7 char str ; unsigned char in; void Uar_init(void); void COM_send(void); interrupt void uart0(void) { bit flag=1; s
[单片机]
ARM汇编指令集5
为什么需要多寄存器访问指令? ldr/str每周期只能访问4字节内存,如果需要批量读取、写入内存时太慢,解决方案是stm/ld 举例(uboot start.S 537行) stmia sp, {r0 - r12} 将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(即指向0x30001004),将r1存入该地址;然后地址再+4(指向 0x30001008),将 r2存入该地址······直到r12内容放入(0x3000130),指令完成。 一个访存周期同时完成13个寄存器的读写 8种后缀
[单片机]
基于ATMEGA128的气密性检测仪设计与实现
随着医疗器械技术的快速发展,医疗器械密封部件气密性的要求不断提高,对气密性的检测也逐渐要求智能化。传统的 湿式法 气密性检测存在缺陷,如精度低、检测时间长、无法实现自动化;直压法则在测量较高压力或被测件体积较大时精度低,同时对外界温度要求苛刻,不适合工厂环境;差压法结构复杂、操作繁琐、价格昂贵;而氮气检测法成本过高。因以上方法均不适合医疗器械部件气密性大批量的出厂检测。流量法由于成本低、精度高、反应速度快等优点适用于该医疗器械部件的检测。 针对被测件的测试压力(通常为12 mmHg,1 mmHg=133.322 Pa)、检测标准(流量阈值 0.2 L/min)和重复性标准( 0.01 L/min),文中设计了基于流量法以ATMEGA
[单片机]
ARM汇编指令集之六——程序状态寄存器访问指令
1、 MRS指令 MRS指令的格式为: MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR) MRS指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情况: Ⅰ.当需要改变程序状态寄存器的内容时,可用MRS将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。 Ⅱ.当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存。 指令示例: MRS R0,CPSR ;传送CPSR的内容到R0 MRS R0,SPSR ;传送SPSR的内容到R0 2、 MSR指令 MSR指令的格式为:
[单片机]
AVR(ATMEGA128\16)AD功能(扫描,中断,差分扫描,差分中断)
下面是AD差分扫描 /********************************AD头文件**********************************/ #ifndef __ad_chafenscan_H__ #define __ad_chafenscan_H__ uint mega128_ad_chafen01(void);//01通道差分,1为参考 uint mega128_ad_chafen32(void);//23通道差分,2为参考 #endif /********************************ADC文件************************************/
[单片机]
ATmega128 复位源
复位AVR 复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的 指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。如果程序永远不会使能 中断,则中断向量可以由一般的程序代码所覆盖。Figure 22 为复位逻辑的电路图。Table 19 则定义了复位电路的电气参数。 复位源生效时I/O 端口立即复位为初始值,不需要任何时钟的辅助。 当所有的复位信号消失之后,延迟计数器被激活,从而延长了内部复位,并使得在MCU 正常工作之前电源达到稳定的电平。延迟计数器的溢出时间通过熔丝位CKSEL 由用户设 定。延迟时间的选择请参见 P 34“ 时钟源” 。 复位源 ATmega128 有5
[单片机]
ATmega128 堆栈指针
堆栈指针主要用来保存临时数据,局部变量和中断/ 自程序的返回地址。堆栈指针总是指 向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。 堆栈指针指向位于SRAM 的函数及中断堆栈。堆栈空间必须在调用函数或中断使能之前 定义。指针必须指向高于$60 的地址。用PUSH 指令推数据入栈时,堆栈指针将减一, 而当调用函数或中断时,指针将减二。使用POP 指令时,堆栈指针将加一,而用RET 或 RETI 返回时,指针将加二。 AVR堆栈指针占用了I/O空间两个8位寄存器。使用的位数由实际情况决定。注意,在AVR 结构中某些操作使用的数据空间很小,只要SPL 即可 ,此时,不会给出SPH 寄存
[单片机]
ATmega128单片机与舵机控制板通信
ATmega128单片机通过舵机控制板,控制多路舵机动作。舵机控制板与单片机之间数据通信的方式,采用了常见的串行通信(USART)。舵机控制板具有自动识别波特率(9600,19200,38400,57600,115200,128000自动识别)的功能。 舵机移动指令: 指令格式:# num P pwm .... T time \r\n num =舵机号,范围1-32(十进制数) pwm =脉冲宽度(舵机位置),范围500–2500。单位us(微秒) time =移动到指定位置使用的时间,对所有舵机有效(范围:100-9999)。 \r\n = 十六进制数0x0d,0x0a(回车符),指令结束符。 例如: #8P600T1
[单片机]