AVR单片机指令系统方案
- 格式:doc
- 大小:146.50 KB
- 文档页数:9
AVR教程(1):AVR单片机介绍作者:微雪电子文章来源: 点击数: 478 更新时间:2008-4-1 23:58:21 AVR,它来源于:1997年,由ATMEL公司挪威设计中心的A先生与V先生利用ATMEL公司的Flash新技术,共同研发出RISC精简指令集的高速8位单片机,简称AVR。
AVR单片机特点每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,AVR 8-bit MCU最大的特点是:●哈佛结构,具备1MIPS / MHz的高速运行处理能力;●超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051 MCU采用单一ACC 进行处理造成的瓶颈现象;●快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发;●作输出时与PIC的HI/LOW相同,可输出40mA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10mA-20mA灌电流的能力;●片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠;●大部分AVR片上资源丰富:带E2PROM,PWM,RTC,SPI,UART,TWI,ISP,AD,Analog Comp arator,WDT等;●大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。
●性价比高。
开发AVR单片机,需要哪些编译器、调试器?软件名称类型简介官方网址AVR Studio IDE、汇编编译器ATMEL AVR Studio集成开发环境(IDE),可使用汇编语言进行开发(使用其它语言需第三方软件协助),集软硬件仿真、调试、下载编程于一体。
ATMEL官方及市面上通用的AVR开发工具都支持AVRStudio。
GCCAVR (WinAVR) C编译器GCC是Linux的唯一开发语言。
GCC的编译器优化程度可以说是目前世界上民用软件中做的最好的,另外,它有一个非常大优点是,免费!在国外,使用它的人几乎是最多的。
avr单片机指令集AVR单片机指令集指令集概述指令,操作数,说明,操作标志# ,时钟数算数和逻辑指令ADD Rd, Rr 无进位加法Rd ← Rd + Rr Z,C,N,V,H 1ADC Rd, Rr 带进位加法Rd ← Rd + Rr + C Z,C,N,V,H 1ADIW Rdl,K 立即数与字相加Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2SUB Rd, Rr 无进位减法Rd ← Rd - Rr Z,C,N,V,H 1SUBI Rd, K 减立即数Rd ← Rd - K Z,C,N,V,H 1SBC Rd, Rr 带进位减法Rd ← Rd - Rr - C Z,C,N,V,H 1SBCI Rd, K 带进位减立即数Rd ← Rd - K - C Z,C,N,V,H 1SBIW Rdl,K 从字中减立即数Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与Rd ← Rd ? Rr Z,N,V 1ANDI Rd, K 与立即数的逻辑与操作Rd ← Rd ? K Z,N,V 1OR Rd, Rr 逻辑或Rd ← Rd v Rr Z,N,V 1ORI Rd, K 与立即数的逻辑或操作Rd ← Rd v K Z,N,V 1EOR Rd, Rr 异或Rd ← Rd ⊕ Rr Z,N,V 1COM Rd 1 的补码Rd ← 0xFF ? Rd Z,C,N,V 1NEG Rd 2 的补码Rd ← 0x00 ? Rd Z,C,N,V,H 1SBR Rd,K 设置寄存器的位Rd ← Rd v K Z,N,V 1CBR Rd,K 寄存器位清零Rd ← Rd ? (0xFF - K) Z,N,V 1INC Rd 加一操作Rd ← Rd + 1 Z,N,V 1DEC Rd 减一操作Rd ← Rd ? 1 Z,N,V 1TST Rd 测试是否为零或负Rd ← Rd ? Rd Z,N,V 1CLR Rd 寄存器清零Rd ← Rd ⊕ Rd Z,N,V 1SER Rd 寄存器置位Rd ← 0xFF None 1MUL Rd, Rr 无符号数乘法R1:R0 ← Rd x Rr Z,C 2MULS Rd, Rr 有符号数乘法R1:R0 ← Rd x Rr Z,C 2MULSU Rd, Rr 有符号数与无符号数乘法R1:R0 ← Rd x Rr Z,C 2 FMUL Rd, Rr 无符号小数乘法R1:R0 ← (Rd x Rr) << 1 Z,C 2FMULS Rd, Rr 有符号小数乘法R1:R0 ← (Rd x Rr) << 1 Z,C 2FMULSU Rd, Rr 有符号小数与无符号小数乘法R1:R0 ← (Rd x Rr) << 1 Z,C 2跳转指令RJMP k 相对跳转PC ← PC + k + 1 无2IJMP 间接跳转到(Z) PC ← Z 无2RCALL k 相对子程序调用PC ← PC + k + 1 无3ICALL 间接调用(Z) PC ← Z 无3RET 子程序返回PC ← STACK 无4RETI 中断返回PC ← STACK I 4CPSE Rd,Rr 比较,相等则跳过下一条指令if (Rd = Rr) PC ← PC + 2 or 3 无1 /2 / 3CP Rd,Rr 比较Rd ? Rr Z, N,V,C,H 1CPC Rd,Rr 带进位比较Rd ? Rr ? C Z, N,V,C,H 1CPI Rd,K 与立即数比较Rd ? K Z, N,V,C,H 1SBRC Rr, b 寄存器位为"0” 则跳过下一条指令if (Rr(b)=0) PC ← PC + 2 or 3 无1 / 2 / 3SBRS Rr, b 寄存器位为"1” 则跳过下一条指令if (Rr(b)=1) PC ← PC + 2 or 3 无1 / 2 / 3SBIC P, b I/O 寄存器位为"0” 则跳过下一条指令if (P(b)=0) PC ← PC + 2 or 3 无1 / 2 / 3SBIS P, b I/O 寄存器位为"1” 则跳过下一条指令if (P(b)=1) PC ← PC + 2 or 3 无1 / 2 / 3BRBS s, k 状态寄存器位为"1” 则跳过下一条指令if (SREG(s) = 1) then PC←PC+k + 1 无1 / 2BRBC s, k 状态寄存器位为"0” 则跳过下一条指令if (SREG(s) =0) then PC←PC+k + 1 无1 / 2BREQ k 相等则跳转if (Z = 1) then PC ← PC + k + 1 无1 / 2BRNE k 不相等则跳转if (Z = 0) then PC ← PC + k + 1 无1 / 2 BRCS k 进位位为"1” 则跳转if (C = 1) then PC ← PC + k + 1 无1 / 2 BRCC k 进位位为"0” 则跳转if (C = 0) then PC ← PC + k + 1 无1 / 2 BRSH k 大于或等于则跳转if (C = 0) then PC ← PC + k + 1 无1 / 2 BRLO k 小于则跳转if (C = 1) then PC ← PC + k + 1 无1 / 2BRMI k 负则跳转if (N = 1) then PC ← PC + k + 1 无1 / 2BRPL k 正则跳转if (N = 0) then PC ← PC + k + 1 无1 / 2BRGE k 有符号数大于或等于则跳转if (N ⊕ V= 0) then PC ← PC + k + 1 无1 / 2BRLT k 有符号数负则跳转if (N ⊕ V= 1) then PC ← PC + k + 1 无1 / 2 BRHS k 半进位位为"1” 则跳转if (H = 1) then PC ← PC + k + 1 无1 / 2 BRHC k 半进位位为"0” 则跳转if (H = 0) then PC ← PC + k + 1 无1 / 2 BRTS k T 为"1” 则跳转if (T = 1) then PC ← PC + k + 1 无1 / 2 BRTC k T 为"0” 则跳转if (T = 0) then PC ← PC + k + 1 无1 / 2 BRVS k 溢出标志为"1” 则跳转if (V = 1) then PC ← PC + k + 1 无1 / 2 BRVC k 溢出标志为"0” 则跳转if (V = 0) then PC ← PC + k + 1 无1 / 2 274 ATmega8(L)2486N–AVR–07/04指令操作数说明操作标志# 时钟数BRIE k 中断使能再跳转if ( I = 1) then PC ← PC + k + 1 无1 / 2 BRID k 中断禁用再跳转if ( I = 0) then PC ← PC + k + 1 无1 / 2数据传送指令MOV Rd, Rr 寄存器间复制Rd ← Rr 无1MOVW Rd, Rr 复制寄存器字Rd+1:Rd ← Rr+1:Rr 无1LDI Rd, K 加载立即数Rd ← K 无1LD Rd, X 加载间接寻址数据Rd ← (X) 无2LD Rd, X+ 加载间接寻址数据,然后地址加一Rd ← (X), X ← X + 1 无2 LD Rd, - X 地址减一后加载间接寻址数据X ← X - 1, Rd ← (X) 无2LD Rd, Y 加载间接寻址数据Rd ← (Y) 无2LD Rd, Y+ 加载间接寻址数据,然后地址加一Rd ← (Y), Y ← Y + 1 无2 LD Rd, - Y 地址减一后加载间接寻址数据Y ← Y - 1, Rd ← (Y) 无2LDD Rd,Y+q 加载带偏移量的间接寻址数据Rd ← (Y + q) 无2LD Rd, Z 加载间接寻址数据Rd ← (Z) 无2LD Rd, Z+ 加载间接寻址数据,然后地址加一Rd ← (Z), Z ← Z+1 无2LD Rd, -Z 地址减一后加载间接寻址数据Z ← Z - 1, Rd ← (Z) 无2LDD Rd, Z+q 加载带偏移量的间接寻址数据Rd ← (Z + q) 无2 LDS Rd, k 从SRAM 加载数据Rd ← (k) 无2ST X, Rr 以间接寻址方式存储数据(X) ← Rr 无2ST X+, Rr 以间接寻址方式存储数据,然后地址加一(X) ← Rr, X ← X + 1 无2ST - X, Rr 地址减一后以间接寻址方式存储数据X ← X - 1, (X) ← Rr 无2 ST Y, Rr 加载间接寻址数据(Y) ← Rr 无2ST Y+, Rr 加载间接寻址数据,然后地址加一(Y) ← Rr, Y ← Y + 1 无2ST - Y, Rr 地址减一后加载间接寻址数据Y ← Y - 1, (Y) ← Rr 无2 STD Y+q,Rr 加载带偏移量的间接寻址数据(Y + q) ← Rr 无2ST Z, Rr 加载间接寻址数据(Z) ← Rr 无2ST Z+, Rr 加载间接寻址数据,然后地址加一(Z) ← Rr, Z ← Z + 1 无2ST -Z, Rr 地址减一后加载间接寻址数据Z ← Z - 1, (Z) ← Rr无2 STD Z+q,Rr 加载带偏移量的间接寻址数据(Z + q) ← Rr 无2STS k, Rr 从SRAM 加载数据(k) ← Rr 无2LPM 加载程序空间的数据R0 ← (Z) 无3LPM Rd, Z 加载程序空间的数据Rd ← (Z) 无3LPM Rd, Z+ 加载程序空间的数据,然后地址加一Rd ← (Z), Z ← Z+1 无3 SPM 保存程序空间的数据(Z) ← R1:R0 无-IN Rd, P 从I/O 端口读数据Rd ← P 无1OUT P, Rr 输出端口P ← R r 无1PUSH Rr 将寄存器推入堆栈STACK ← Rr 无2POP Rd 将寄存器从堆栈中弹出Rd ← STACK 无2位和位测试指令SBI P,b I/O 寄存器位置位I/O(P,b) ← 1 无2CBI P,b I/O 寄存器位清零I/O(P,b) ← 0 无2LSL Rd 逻辑左移Rd(n+1) ← Rd(n), Rd(0) ← 0 Z,C,N,V 1LSR Rd 逻辑右移Rd(n) ← Rd(n+1), Rd(7) ← 0 Z,C,N,V 1ROL Rd 带进位循环左移Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z,C,N,V 1ROR Rd 带进位循环右移Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z,C,N,V 1 ASR Rd 算术右移Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1 SWAP Rd 高低半字节交换Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) 无1 BSET s 标志置位SREG(s) ← 1 SREG(s) 1BCLR s 标志清零SREG(s) ← 0 SREG(s) 1BST Rr, b 从寄存器将位赋给T T ← Rr(b) T 1 BLD Rd, b 将T 赋给寄存器位Rd(b) ← T 无1 SEC 进位位置位C ← 1 C 1CLC 进位位清零C ← 0 C 1SEN 负标志位置位N ← 1 N 1CLN 负标志位清零N ← 0 N 1SEZ 零标志位置位Z ← 1 Z 1CLZ 零标志位清零Z ← 0 Z 1SEI 全局中断使能I ← 1 I 1CLI 全局中断禁用I ← 0 I 1SES 符号测试标志位置位S ← 1 S 1CLS 符号测试标志位清零S ← 0 S 1SEV 2 的补码溢出标志置位V ← 1 V 1CLV 2 的补码溢出标志清零V ← 0 V 1SET SREG 的T 置位T ← 1 T 1指令集概述275ATmega8(L)2486N–AVR–07/04指令操作数说明操作标志# 时钟数CLT SREG 的T 清零T ← 0 T 1SEH SREG 的半进位标志置位H ← 1 H 1CLH SREG 的半进位标志清零H ← 0 H 1MCU 控制指令NOP 空操作无1SLEEP 休眠( 见对睡眠功能的特殊说明) 无1WDR 复位看门狗( 见对WDR/timer 的特殊说明) 无1。
AVR单片机教程7—第七课ICCAVR使用教程——第七课ICCA VR使用教程本教程节选自周兴华老师《手把手教你学AVR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买!接下来我们来做第一个AVR程序,让程序跑起来,控制AVR单片机综合试验板上的8个LED,让它们亮、灭进行闪烁。
3.4.1 ICCAVR使用教程通过ICCAVR对源程序编译连接工程之前,需要对编译器属性进行设置,设置好的某些属性可保留起来作为新建工程的默认属性。
打开ICCAVR软件界面,选择Project→Option进入属性设置对话窗。
共有Paths、Compiler、Target、Config Salvo四个属性标签页。
1). Paths标签页(图3-12)在属性中设置编译器的头文件目录(Include Path(s):)和库文件目录(Library Path:)。
我们使用系统默认的头文件目录和库文件目录。
——图3-12 Paths标签页由于我们不使用汇编语言进行开发,因此汇编语言包含路径(Asm Include Path(s):)空着不填。
输出文件目录(Output Directory:)空着不填,则输出文件自动存放在工程项目目录中,否则存放在用户填写的路径下。
2).Compiler标签页(图3-13)Strict ANSI C Checkings:选中表示进行严格的C语法检查。
——图3-13 Compiler标签页Accept Extensions(C++ comments,binary constants) :选中表示接受C++风格的程序注释。
Int size enum(for backword compatibility) :选中表示可以向下兼容程序。
Optimizations栏可以选择默认设置(Default)或使能代码压缩功能(Enable code compression),对程序的编译进行优化。
第五章AVR单片机指令系统计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。
计算机只能识别和执行机器语言的指令。
为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。
汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。
AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。
SL-DIY02-3开发实验器使用A T90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。
AVR器件(指令速查表) 118条指令器件BRCS k C置位转□LPM 从程序区取数IN Rd,P 从I/O口取数OUT P, Rdr 存数I/O口PUSH Rr 压栈POP Rd, 出栈1.不带进位加法ADD一不带进位加说明:两个寄存器不带进位C标志加,结果送目的寄存器Rd。
操作: Rd Rd+ Rr语法:操作码:程序计数器:ADD Rd,Rr O≤d≤31,0≤r≤31 PC PC+1例子:。
(实践操作程序4411.ASM) 实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性2.带进位加法ADC-一带进位加说明:两个寄存器和C标志的容相加,结果送目的寄存器Rd。
操作: Rd←Rd+Rr+C语法:操作码:程序计数器:ADC Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1例子:(实践操作程序4412.ASM)3.减1指令DEC一减1说明:寄存器Rd的容减1,结果送目的寄存器Rd中。
操作:Rd Rd-l语法:操作码:程序计数器:DEC Rd 0≤d≤31 PC PC十1例子:(实践操作程序4426.ASM)4.立即数比较CPI——带立即数比较说明:该指令完成寄存器Rd和常数的比较操作。
寄存器的容不改变。
该指令后能使用所有条件转移指令。
操作:Rd-K语法:操作码:程序计数器:CPI Rd, K 16≤d≤31, 0≤ K≤255 PC PC+ 1例子:(实践操作程序4463.ASM)5.带立即数与ANDI——立即数逻辑与 ;全1为1,有0即0说明:寄存器Rd的容与常数逻辑与,结果送目的寄存器Rd。
应用: 清0,使某位为0,用0去与;保留,用1去逻辑与;代硬件与门操作:Rd Rd·K ;语法:操作码:程序计数器:ANDI Rd K 16≤d≤31, 0≤K≤255 PC PC+ 1例子:(实践操作程序4472.ASM)6.寄存器逻辑或OR一逻辑或;有1即1,全0为0,应用: 置数,使某位为1,用1去或;保留,用0去逻辑或;代硬件或门说明:完成寄存器Rd与寄存器Rr的容逻辑或操作,结果进目的寄存器Rd中。
操作: Rd Rd ∨ Rr语法:操作码:程序计数器:OR Rd Rr 0≤d≤31, 0≤r≤31 PC PC+ 1 例子:(实践操作程序4481.ASM)7.清除寄存器CLR-一寄存器清零说明:寄存器清零。
该指令采用寄存器Rd与自己的容相异或实现的。
寄存器的所有位都被清零。
操作: Rd Rd ⊕Rd语法:操作码:程序计数器:CLR Rd 0≤d≤31 PC PC+ 1例子:(实践操作程序4492.ASM)8.相对跳转RJMP一相对跳转说明:相对跳转到 PC -2K和 PC+2K(字)围的地址。
在汇编程序中,标号用于替代相对操作。
AVR微控制器的程序存储器空间不超过4K字(8K字节),该指令能寻址整个存储器空间的每个地址位置。
操作: PC(PC+1)+ k语法:操作码:程序计数器:RJMP k — 2K≤k≤2K PC(PC+1)+k例子:(实践操作程序4511.ASM)9.相等转移BREQ相等转移说明:条件相对转移,测试零标志(Z),如果 Z位被置位,则相对PC值转移。
如果在执行CP、CPI、SUB或SUBI指令后立即执行该指令,且当寄存器Rd中无符号或有符号二进制数与寄存器 Rr中无符号或有符号H进制数相等时,转移将发生。
操作:If Rd=Rr(z=1)then PC(PC十1)+k,PC PC十1语法:操作码:程序计数器:BREQ k -64≤k≤+63 PC(PC+ 1)+ kPC PC+ l例子:(实践操作程序4523.ASM)10.不相等转移BRNE——不相等转移说明:条件相对转移,测试零标志(Z),如果Z位被清零,则相对PC值转移。
如果在执行CP。
CPI、SUB或SUBI指令后立即执行该指令,且当在寄存器Rd中的无符号或带符号二进制数不等于寄存器Rr中的无符号或带符号二进制数时,转移将发生。
该指令相对PC转移的方向为:PC- 64≤目的≤PC+ 63。
参数K为PC的偏移,用2的补码表示(相当于指令BRBCIK)。
操作, If Rd≠Rr(Z=0) then PC(PC+1)+k,elesPC PC+1语法:操作码:程序计数器:BRNE k -64≤ k ≤+63 PC(PC+1)+ kPC PC+l例子:(实践操作程序4524.ASM)11.寄存器位清零跳行SBRC一寄存器位被清零跳行说明:该指令测试寄存器某位,如果该位被清零,则跳下一行执行指令。
操作:If Rd(b)= 0 then PC PC+2(or 3)eles PC PC+ 1语法:操作码:程序计数器:SBRC Rr,b 0≤ r≤ 31, 0≤ b≤7 PC PC十1pC pC+ 2PC PC+ 3例子:(实践操作程序45222.ASM)12.寄存器位置位跳行SBRS一寄存器位置位跳行说明:该指令测试寄存器某位,如果该位被置位,则跳下一行执行指令。
操作: If Rr(b)=l then PC PC+ 2(or 3)eles PC PC+ l语法:操作码:程序计数器:SBRS Rr,b ≤r≤31,0≤b≤7 PC PC+1PC PC+2PC PC+3例子:(实践操作程序45223.ASM)13.I/O寄存器位置位跳行SBIS-I/O寄存器的位置位跳行说明:该指令测试1/O寄存器某位,如果该位被置位,则跳一行执行指令。
该指令在低32个1/O寄存器操作,地址为0~31。
操作: If I/OP, b=l then PC PC+2(or 3)else PC PC+1语法:操作码:程序计数器:SBIS p ,b 0≤ P≤ 31, 0≤ b≤ 7 PC PC+ 1PC PC+ 2PC PC+ 3例子:(实践操作程序45225.ASM)14.相对调用RCALL——相对调用于程序说明:在PC+1后(2K字(4K字节)围调用子程序。
返回地址(RCALL后的指令地址)存储到堆栈(见CALL)。
操作:PC(PC+1)+k语法:操作码:程序计数器:RCALL k -2K≤ k ≤2K PC(PC+1)+ k例子: (实践操作程序DIP40LED.ASM)15.从子程序返回RET——子程序返回说明:从子程序返回。
返回地址从堆栈中弹出。
操作: PC(15-0)STACKPC(21-0)STACK语法:操作码:程序计数器:堆栈:RET None See Operation SP SP+ 2RET None See Operation SP SP+ 3例子:(实践操作程序见DIP40LED.ASM)16.从中断程序返回RETI——中断返回说明:从中断程序中返回。
返回地址从堆栈中弹出,且全局中断标志被置位。
注意:1.主程序应跳过中断区,防止修改补充中断程序带来麻烦;2.不用的中断入口地址写上RETI-中断返回,有抗干扰作用;操作: PC(15-0)STACKPC(21-0)STACK语法:操作码:程序计数器:堆栈:RETI None See Operation SP SP十2RETI None See Operation SP SP +3例子:( 程序45230.ASM,摘自”乐曲.ASM”部分程序,仅供参考),能执行程序请阅”乐曲.AS M”程序及A VR单片机在儿童智能玩具中的应用--音乐玩具(电脑放音机)一文17.寄存器拷贝数据MOV寄存器拷贝说明:该指令将一个寄存器拷贝到另一个寄存器。
源寄存器Rr的容不改变,而目的寄存器Rd拷贝了Rr的容。
操作:Rd ← Rr语法:操作码:程序计数器:MOV Rd Rr 0≤ d≤ 31, 0≤ r≤31 PC PC+ 1例子:(实践操作程序4611.ASM)18.SRAM数据直接送寄存器LDS直接从SRAM装入说明:把SRAM中1个字节装入到寄存器。
必须提供一个16位地址。
存储器访问被限制在当前64K字节的SRAM页。
超过64K字节,LDS指令使用RAMPZ寄存器访问。
操作:Rd(k)语法:操作码:程序计数器:LDS Rd k 0≤ d≤ 31,0≤ k≤65535 PC PC+ 2 例子:(实践操作程序4612.ASM)19.寄存器数据直接送SRAMSTS寄存器数据直接送SRAM说明:将寄存器的容直接存储到SRAM。
必须提供一个16位的地址。
存储器访问被限制在当前64K字节的SRAM页。
STS指令使用RAMPZ寄存器访问存储器可超过64K字节。
操作:(k)Rr语法:操作码:程序计数器:STS k,Rr 0≤r≤31,0≤k≤65535 PC PC+2 例子:(实践操作程序4613.ASM与4612.ASM相同)20.立即数送寄存器LDI——装入立即数说明:装入一个8位立即数到寄存器R16~R31中。
操作:Rd K语法:操作码:程序计数器:LDI Rd K 16≤ d≤ 31, 0≤K≤ 255 PC PC+ 2 例子:(实践操作程序4614.ASM)21.使用变址Z间接将SRAM中的容传送到寄存器LD(LDD)——使用变址Z间接将SRAM中的容传送到寄存器说明:带或不带偏移间接从SRAM中传送一个字节到寄存器,SRAM中的位置由寄存器区中的 Z (16位)指针寄存器指出。
存储器访问被限制在当前 64K字节的 SRAM页中。
为访问另外SRAM 页,则 I/O围的寄存器RAMPZ需改变。
在指令执行后,Z指针寄存器值要么不改变,要么就加1或减1操作。
使用Z指针寄存器的这些特性,特别适合于堆栈指针,因为Z指针寄存器能用于直接子程序调用,直接跳转和查表。
Z指针寄存器用作为专用堆栈指针要比X、Y指针方便。
用Z指针在程序存储器中查表,可参见LPM指令。
操作:Rd(Z)Rd(Z)Z Z-1Rd(Z+q)语法:操作码:操作流程: 程序计数器:LD Rd,Z 0≤ d≤31 送数,Z指针不改变 PC PC+1LD Rd Z+ 0≤d≤31 先送数,后Z指针加1 PC PC+1LD Rd,-Z 0≤d≤31 先Z指针减1, 后送数 PC PC+lLDD Rd Z+q 0≤ d≤31,先Z指针加q,后送数, PC PC+10≤q≤63 执行后Z指针(Z不含q)不变例子:(实践操作程序4625.ASM)22. LPM——装入程序存储器说明:将Z寄存器指向的一个字节传送到寄存器0(RO)。