AVR单片机指令系统 1
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
AVR单片机指令系统快速记忆方法及速查
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
计算机的指令系统是一套控制计算机操作的代码 称之为机器语言 计算机只能识别和执行机器语
言的指令 为了便于人们理解 记忆和使用 通常用汇编语言指令来描述计算机的指令系统 汇编语言
指令可通过汇编器翻译成计算机能识别的机器语言
AVR单片机指令系统是RISC结构的精简指令集 是一种简明易掌握﹑效率高的指令系统
AVR单片机指令系统速查表,不同器件使用不同的指令表,见附录3:
(1) 89条指令器件:AT90S1200,最基本指令;
(2) 90条指令器件( ):Attiny11/12/15/22; 90条指令= +89条基本指令
(3) 118条指令器件( ):AT90S2313/2323/2343/2333,/4414/4433/4434/8515/90S8534/8535
;118条指令= + 90条;
118条指令分类:
寄存器传送(4): MOV,LD,SER,LDS,
X寄存器(3): LD Rd,X;LD Rd,X+;LD Rd,-X
Y寄存器(4): LD Rd,Y;LD Rd,Y+;LD Rd,-Y;LDD Rd,Y+q
Z寄存器(4): LD Rd,Z;LD Rd,Z+;LD Rd,-Z;LDD Rd,Z+q
X寄存器(3): ST X,Rr;ST X+,Rr;ST –X,Rr
数据传送指令 Y 寄存器(4): ST Y,Rr;ST Y+,Rr;ST –Y,Rr;STD Y+q,Rr
(31) Z 寄存器(4): ST Z,Rr;ST Z+,Rr;ST –Z,Rr;STD Z+q,Rr
读存储器(1): LPM
I/O指令(2): IN,OUT
栈指令(2): PUSH,POP
算术指令与 加(4): ADD,ADC,ADIW,INC;
(10) 减(6): SUB,SUBI,SBC,SBCI,SBIW,DEC
逻辑运算指令 与(2):AND,ANDI,
(12) 或(3): OR,ORI, EOR
清0置1:(7) COM,NEG, CBR,SBR, CLR ,TST,SER,
转移指令: (2) RJMP,IJMP(JMP转移)
调用指令: (2) RCALL,ICALL(CALL调用)
转移调用指令 返回 : (2) RET,RETI (RET返回)
(34) 比较指令: (3) CP,CPC,CPI (CP比较)
分支指令: (5) CPSE,SBRC,SBRS,SBIC,SBIS, (S为1跳,C为0跳,R寄存器,I为I/O)
基本条件分支指令: (2) BRBS,BRBC (S为1转,C为0转) (状态字为I,T,H,S,V,N,Z,C)
派生指令:(18) BRIE,BRID;BRTS,BRTC;BRHS,BRHC;BRGE,BRLT;BRVS,BRVC;
BRMI,BRPL;BREQ,BRNE;BRCS,BRCC;BRSH,BRLO;
位I/O操作指令: (2)SBI,CBI (S置1,C清0)
状态寄存器指令: (2)BSET,BCLR(状态字为I,T,H,S,V,N,Z,C)
位操作及其他 派生指令:(16) BSET -- SEI,SET,SEH,SES SEV,SEN,SEZ,SEC (SE置1某位)
(31) BCLR -- CLI,CLT,CLH,CLS,CLV,CLN,CLZ,CLC (CL清0某位)
位传送: (2) BST,BLD,
移位指令: (6) LSL,LSR,ASR,ROL,ROR,SWAP(LS右移,RO左移,AS算术右移,R寄存器)
其他指令: (3) NOP,SLEEP,WDR
AVR单片机指令系统 2
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
AVR器件(指令速查表) 118条指令器件
AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/8515,AT90S8534/8535
算术和逻辑指令(22) BRCC k C=0清零转 位指令和位测试指令(31)
ADD Rd,Rr 加法 BRSH k C=1无符号数 转 SBI P,b 置位 I/O位
ADC Rd,Rr 带进位加 BRLO k C=0无符号数小于转 CBI P,b 清零 I/O位
ADIW Rdl,K 加立即数 BRMI k N=1负数转移 LSL Rd 左移
SUB Rd,Rr 减法 BRPL k N=0正数转移 LSR Rd 右移
SUBI Rd,Rr 减立即数 BRGE k S=0(带符号数) 转 ROL Rd 带进位左循环
SBC Rd,Rr 带借位减 BRLT k S=1(带符号)小于转 ROR Rd 带进位右循环
SBCI Rd,K 带 C减立即数 BRHS k H=1置位转移 ASR Rd 算术右移
SBIW Rdl,K 字减立即数 BRHC k H=0清零转移 SWAP Rd 半字节交换
AND Rd,Rr 与 BRTS k T=1置位转移 BSET s 置位 SREG
ANDI Rd,K 与立即数 BRTC k T=0清零转移 BCLR s 清零 SREG
OR Rd,Rr 或 BRVS k V=1置位转移 BST Rr,b Rr的 b位送 T
ORI Rd,K 或立即数 BRVC k V=0清零转移 BLD Rd T送 Rr的 b位
EOR Rd,Rr 异或 BRIE k I=1中断位置位转移 SEC 置位 C
COM Rd 取反 BRID k I=0中断位清零转移 CLC 清零 C
NEG Rd 取补 数据传送指令(31) SEN 置位 N
SBR Rd,K 寄存器位置位 MOV Rd,Rr 寄存器传送 CLN 清零 N
CBR Rd,K 寄存器位清零 LDI Rd,K 装入立即数 SEZ 置位 Z
INC Rd 加 1 LD Rd, X X间接取数 CLZ 清零 Z
DEC Rd 减 1 LD Rd, X+ X间接取数后 SEI 置位 I
TST Rd 测试零或负 LD Rd,-X X间接取数先 CLI 清零 I
CLR Rd 寄存器清零 LD Rd,Y Y间接取数 SES 置位 S
SER Rd 寄存器置 FF LD Rd,Y+ Y间接取数后 CLS 清零 S
条件转移指令(34) LD Rd,–Y Y间接取数先 SEV 置位 V
RJMP k 相对转移 LDD Rd,Y+q Y间接取数 q CLV 清零 V
IJMP 间接转移(Z) LD Rd, Z Z间接取数 SET 置位 T
RCALL k 相对调用 LD Rd, Z+ Z间接取数后 CLT 清零 T
ICALL 间接调用(Z) LD Rd,–Z Z间接取数先 SEH 置位 H
RET 子程序返回 LDD Rd, Z+q Z间接取数 q CLH 清零 H
RETI 中断返回 LDS Rd,K 从 SRAM装入 NOP 空操作
CPSE Rd,Rr 比较相等跳行 ST X ,Rr X间接存数 SLEEP 休眠指令
CP Rd,Rr 比较 ST X+ ,Rr X间接存数后 WDR 看门狗复位
CPC Rd,Rr 带进位比较 ST –X ,Rr X间接存数先
CPI Rd,K 与立即数比较 ST Y ,Rr Y间接存数
SBRC Rr,b 位清零跳行 ST Y+ ,Rr Y间接存数后
SBRS Rr,b 位置位跳行 ST –Y ,Rr Y间接存数先
SBIC P,b I/O位清零跳行 STD Y+q ,Rr Y间接存数 q
SBIS P,b I/O位置位跳行 ST Z ,Rr Z间接存数
90条指令为
Attiny11/12/15/22=
+89条基本指令是
AT90S1200
BRBS s,k SREG位置位转 ST Z+ ,Rr Z间接存数后+
BRBC s,k SREG位清零转 ST –Z ,Rr Z间接存数先-
BREQ k Z=1相等转移 STD Z+q ,Rr Z间接存数+q
118条指令器件=
+ 90条指令器件
BRNE k Z=0不相等转移 STS k,,Rr 数据送 SRAM
BRCS k C=1置位转 LPM 从程序区取数 基本指令
程序状态字 SREG IN Rd,P 从 I/O口取数 派生出来的指令
7 6 5 4 3 2 1 0 OUT P, Rdr 存数 I/O口
I T H S V N Z C PUSH Rr 压栈
POP Rd, 出栈
AVR单片机指令系统 3
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
AVR单片机指令系统简介
4.4 算术和逻辑指令
4.4.1 加法指令
1 ADD不带进位加法
说明 两个寄存器不带进位C标志加 结果送目的寄存器Rd
操作 ADD Rd,Rr RdßRd+ Rr O d 310 r 31
2 ADC带进位加法
说明 两个寄存器和C标志的内容相加 结果送目的寄存器Rd
操作 ADC Rd,Rr RdRdRrC 0 d 310 r 31
3 ADIW立即数据加法 字
说明 寄存器对于立即数值 0 63相加 结果放到寄存器对
操作 ADIW RdlK Rdh:RdlßRdh:Rdl+K d{ 24 26 28 30 } UJ
4 INC加1指令
说明 寄存器Rd的内容加 1结果送目的寄存器Rd中
操作 INC Rd RdßRd1 0d 31
4.4.2 减法指令
1 SUB不带进位减法
说明 两个寄存器相减 结果送目的寄存器Rd中
操作 SUB Rd,Rr RdßRdRr 0 d 310 r 31
2 SUBI立即数减法 字节
说明 一个寄存器和常数相减 结果送目的寄存器Rd
操作 SUBI Rd,K RdßRd—K 16d 310 k255
3 SBC带进位减法
说明 两个寄存器随着C标志相减 结果放到目的寄存器Rd中
4 SBCI带进位立即数减
说明 寄存器和立即数随着C标志相减 结果放到目的寄存器Rd中
操作 SBCI Rd K RdßRd K C 16d 310 K 255
5 SBIW立即数减法 字
说明 双寄存器与立即数 0 63减 结果送双寄存器
操作 SBIW Rdl K Rdh RdlßRdh:Rdl-K dl{24,2628,30} 0K 63
6 DEC减1指令
说明 寄存器Rd的内容减1 结果送目的寄存器Rd中
操作 DEC Rd RdßRdl 0 d 31
4.4.4取反码指令
COM — — 取二进制反码
说明 该指令完成寄存器Rd的二进制反码操作
操作 Rd COM Rdß$FF — Rd 0d 31
4.4.5 取补指令
NEG—— 二进制补码
AVR单片机指令系统 4
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
说明 寄存器 Rd的内容转换成二进制补码 值$80是不改变的
操作 NEG Rd Rß$OORd 0 d 31
4.4.6 比较指令
1 CP寄存器比较
说明 该指令完成两个寄存器Rd和Rr相比较操作 而寄存器的内容不改变
操作 CP Rd Rr RdRr 0 d 310 r 31
2 CPC带进位比较
说明 该指令完成寄存器Rd的值和寄存器Rr加前位进位的值相比较操作
操作 CPC Rd Rr RdRrC 0 d 310 r 31
3CPI立即数比较
说明 该指令完成寄存器Rd和常数的比较操作
操作 CPI Rd, K RdK 16d 31 0 K255
4.4 .7 逻辑与指令
1AND寄存器逻辑与;全1为1,有0即0
说明 寄存器Rd和寄存器Rr的内容为逻辑与 结果送目的寄存器Rd
操作 AND Rd,Rr RdßRd Rr 0 d 31 0d 31;
2 ANDI带立即数与; 全1为1,有0即0
说明 寄存器Rd的内容与常数逻辑与 结果送目的寄存器Rd
操作 ANDI Rd ,K RdßRd·K 16d 31 0K 255;
3 CBR清除寄存器位
说明 清除寄存器Rd中的指定位 利用寄存器Rd的内容与常数表征码K的补码相与
完成的 其结果放在寄存器Rd中
操作 CBR Rd, K RdßRd($FFK) 16d 31, 0K 255
4 TST测试零或负
说明 测试寄存器是否是零或是负 完成同一寄存器之间的逻辑与操作 而寄存器内容不改变
操作 TST Rd RdßRd Rd 0 d 31
4·4·8 逻辑或指令
1 OR寄存器逻辑或;有1即1,全0为0
说明 完成寄存器Rd与寄存器Rr的内容逻辑或操作 结果进目的寄存器Rd中
操作 OR Rd, Rr RdßRd Rr 0 d 31 0r 31
2 ORI带立即数或 功能: 保留(屏蔽)数据,置数(使某位为1)
说明 完成寄存器 Rd的内容与常量逻辑或操作 结果送目的寄存器 Rd中
操作 ORI Rd K RdßRdK 16d 31 0K 255
3 SBR寄存器位置位
说明 对寄存器Rd中指定位置位 完成寄存器Rd和常数表征码K之间的逻辑直接数
或 ORI结果送目的寄存器Rd
操作 SBR Rd K RdßRd K 16d 310 K 255
4 SER置位寄存器的所有位
说明 直接装入$FF到寄存器 Rd.
操作 SER Rd Rdß$FF 16d 31
4·4 9运辑异或指令
1 EOR—寄存器异或 输入相同输出为0,输入不同输出为1;也称同或(清零);也称互斥(置1)
操作 EOR Rd,Rr RdßRd⊕Rr 0d 31 0r 31
2 CLR一寄存器清零
AVR单片机指令系统 5
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
说明 寄存器清零 该指令采用寄存器Rd与自己的内容相异或实现的 寄存器
的所有位都被清零
操作 CLR Rd RdßRd ⊕Rd 0d 31
4 5转移指令
4·5·1无条件转移指令
1 RJMP相对跳转
说明 相对跳转到 PC 2K和 PC2K字 范围内的地址 在汇编程序中 标号用于替
代相对操作
操作 RJMP k PCß(PC1) k — 2Kk 2K
2 IJMP间接跳转
说明 间接跳转到由寄存器区中的Z 16位 指针寄存器指向的地址 Z指针寄存器
是16位宽 允许在当前程序存储器空间64K字 128K字节 内跳转
操作 IJMP PCßZ 150 PC15-0 ßZ 150
3 JMP长跳转
说明 在整个程序存储空间4M字 内跳转 见RJMP
注意:只能到你
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
的硬件电路所具有的空间,你的器件可有这条指令吗!
操作 JMP k PCßk 0k 4M
4.5.2 条件转移指令
一 测试条件符合转移指令
1 BRBS状态寄存器中位置位转移
说明 条件相对转移 测试SREG的某一位 如果该位被置位 则相对PC值转移
操作 BRBS Sk If SREG(S) 1 then PCß(PC1) k,else PCßPC十1
O S 7 64 k 63 PCß(PC 1) k
2 BRBC状态寄存器中位清零转移
说明 条件相对转移,测试 SREG的某一位,如果该位被清零,则相对 PC值转移.
操作 BRBC Sk If SREG(S) 0 then PCß(PC1) k,else PCßPC十1
0S 7 , -64k 63 PCß(PC1) k
3 BREQ相等转移
说明 条件相对转移 测试零标志 Z 如果 Z位被置位 则相对PC值转移 如果在执
行CP CPISUB或SUBI指令后立即执行该指令 且当寄存器Rd中无符号或有符号二进制
数与寄存器 Rr中无符号或有符号H进制数相等时 转移将发生
操作 BREQ k If RdRr(z1)then PCß(PC十1) k PCßPC十1
-64k 63 PCß(PC 1) k
4 BRNE不相等转移
说明 条件相对转移 测试零标志 Z 如果Z位被清零 则相对PC值转移 如果在执行CPCPI
SUB或SUBI指令后立即执行该指令 且当在寄存器Rd中的无符号或带符号二进制数不等于寄存器Rr中
的无符号或带符号二进制数时 转移将发生
操作 BRNE k If RdRr(Z0) then PCß(PC1) k elesPCßPC1 64 k 63
5 BRCS 进位C标志位置位转移
说明 条件相对转移 测试进位标志 C 如果C位被置位 则相对PC值转移
操作 BRCS k If Cl then PCß(PC1) k eles PCßPC 1 64 k 63
6 BRCC 进位位C标志位清除转移
说明 条件相对转移 测试进位标志 C 如果C位被清除 则相对PC值转移
AVR单片机指令系统 6
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
操作 BRCC k If C 0 then PCß(PC1)k eles PCßPC1 64 k 63
7 BRSH无符号 大于或等于转移
说明 条件相对转移 测试进位标志 C 如果C位被清零 则相对PC值转移
操作 BRSH k If RdRr(CO)then PCß(PC1)k eles PCßPC1 -64 k 63
8 BRLO无符号 小于低于转移
说明 条件相对转移 测试进位标志 C 如果C位被置位 则相对PC值转移
操作 BRLO k If Rd Rr(C=1)then PCß(PC1)k eles PCßPC1 -64k 63
9. BRMI负数转移
说明 条件相对转移 测试负号标志 N 如果N被置位 则相对PC值转移
操作 BRMI k If Nl then PCß(PC1) keles PCßPC1 64 k 63
10BRPL正数转移
说明 条件相对转移 测试负号标志 N 如果N被清零,则相对PC值转移
操作 BRPL k If N 0 then PCß(PC十1) k eles PCßPC 1 -64k 63
11BRGE—大于或等于转移 带符号
说明 条件相对转移 测试符号标志 S 如果S位被清零 则相对PC值转移
操作 BRGE k If RdRr (N⊕V 0) then PCß(PC1)k eles PCßPC1
64 k 63
12BRLT—小于转移 有符号
说明 条件相对转移 测试符号标志 S 如果S位被置位 则相对PC值转移
操作 BRLT k If Rd Rf (N⊕V 1)then PCß(PC1)k eles PCßPC1
-64 k 63
13BRHS-半进位标志置位转移
说明 条件相对转移 测试半进位标志 H 如果H被置位 则相对PC值转移
操作 BRHS k If Hlthen PCß(PCl)k eles PCßPC1
64 k 63
14BRHC半进位标志清零转移
说明 条件相对转移 测试半进位标志 H 如果H位被清零 则相对PC值转移
操作 BRHC k If H0 then PCß(PC1)k eles PCßPC 1
-64 k 63
15BRTS T标志置位转移
说明 条件相对转移 测试T标志 如果T被置位 则相对PC值转移
操作: BRTS k If Tl then PCß(PC1)k eles PCßPC1
-64 k 63
16BRTC T标志清零转移
说明 条件相对转移 测试T标志 如果T被清零 则相对PC值转移
操作 BRTC k IfT0thenPCß(PC1)k elesPCßPC1 -64k 63
17BRVS溢出标志置位转移
说明 条件相对转移 测试溢出标志 V 如果V被置位 则相对PC值转移
操作 BRVS k IfVlthenPCß(PCl)k eles PCßPCl -64k 63
18BRVC溢出标志清零转移
操作 BRVC k IfV0thenPCß(PC1) k eles PCßPC1 64k 63
19BRIE—全局中断标志触发转移
说明 条件相对转移 测试全局中断标志 I 如果I被置位1 则相对PC值转移
操作 BRIE k If IlthenPCß(PC1)k elesPCßPC1 64k 63
20BRID全局中断标志禁止转移
说明 条件相对转移 测试全局中断标志 I 如果 I被清零 则相对 PC但转移
操作 BRID k If I=0 then PCß(PC1) kelse PCßPC 1 64 k 63
AVR单片机指令系统 7
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
二 测试条件符合跳行转移指令
21CPSE——比较相等跳行
说明 该指令完成两个寄存器Rd和Rr的比较 若RdRr则跳行执行指令
操作 CPSE Rd, Rr If RdRr then PCßPC2 or 3else PCßPC1
0 d 31 0 r31
22SBRC一寄存器位被清零跳行
说明 该指令测试寄存器某位 如果该位被清零 则跳下一行执行指令
操作 SBRC Rrb If Rdb 0 then PCßPC2 or 3eles PCßPC 1
0 r 31 0 b7
23SBRS一寄存器位置位跳行
说明 该指令测试寄存器某位 如果该位被置位 则跳下一行执行指令
操作: SBRS Rrb If Rr(b) l then PCßPC 2or 3eles PCßPC l
r 310 b 7
24SBICI O寄存器位清零跳行
说明 该指令测试 IO寄存器某位 如果该位被清零 则跳一行执行指令 该指令在低32个 I0
寄存器内操作 地址为 0 31
操作 SBIC P,b If IOPb 0 then PCßPC2 or 3eles PCßC 1
0P 310 b 7
25SBISI O寄存器位置位跳行
说明 该指令测试1 O寄存器某位 如果该位被置位 则跳一行执行指令 该指令在低
32个1O寄存器内操作 地址为0 31
操作 SBIS p ,b If IOP, bl then PCßPC2 or 3else PCßPC1
0 P 31 0 b 7
三 调用和返回指令
26 RCALL——相对调用子程序
说明 在 PC+1后 2K字 4K字节 范围内调用子程序 返回地址 RCALL后的指令地址 存储到
堆栈 见CALL
操作 RCALL k PCß(PC1)k 2K k 2K
27 ICALL——间接调用于程序
说明 间接调用由寄存器区中的Z 16位指针寄存器指向的子程序 Z指针寄存器
是16位宽允许调用当前程序存储空间64K字128字节内的子程序
操作 ICALL PC150 ßZ 150
PC150 ßZ 15O
28 CALL子程序长调用
说明 在整个程序存储器区内调用子程序 返回地址 调用后返回的指令地址 将存储
在堆栈 见RCALL指令 中
操作 CALL k PCßk 0 k 64K
CALL k PCßk 0 k 4M
29RET——从子程序返回
说明 从子程序返回 返回地址从堆栈中弹出
操作 RET PC150 ßSTACK
RET PC210 ßSTACK
30RETI——从中断程序返回
说明 从中断程序中返回 返回地址从堆栈中弹出 且全局中断标志被置位
注意:1.主程序应跳过中断区,防止修改补充中断程序带来麻烦;
2.不用的中断入口地址写上RETI-中断返回,有抗干扰作用;
AVR单片机指令系统 8
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
操作 RETI PC150 ßSTACK
RETI PC210 ßSTACK
4.6 数据传送指令
4.6.1 直接数据传进指令
1 MOV寄存器拷贝数据
说明 该指令将一个寄存器拷贝到另一个寄存器 源寄存器Rr的内容不改变 而目的
寄存器Rd拷贝了Rr的内容
操作 MOV Rd Rr Rd Rr 0 d 31 0 r31
2 LDS SRAM数据直接送寄存器
说明 把SRAM中1个字节装入到寄存器 必须提供一个16位地址
操作 LDS Rd k Rdß(k) 0 d 310 k65535
3 STS寄存器数据直接送SRAM
说明 将寄存器的内容直接存储到SRAM必须提供一个16位的地址
操作 STS kRr k ßRr 0r 310 k 65535
4 LDI——立即数送寄存器
说明 装入一个8位立即数到寄存器R16R31中
操作 LDI Rd K RdßK 16 d 31 0K 255
4.6.2间接数据传送指令
一 使用X寄存器间接传送数据
1 使用变址X间接将SRAM中内容送入到寄存器
LD一使用变址X间接将SRAM中内容送入到寄存器
说明 从SRAM中间接送入一个字节到寄存器 SRAM中的位置由寄存器区中的X
16位 指针寄存器指出 存储器访问被限制在当前64K字节的SRAM页中 为访问另外
SRAM页 则I 0范围内的寄存器RAMPX需改变 在指令执行中 X指针寄存器值要么不
改变 要么就加1或减1操作 使用X指针寄存器的这些特性 特别适合于访问矩阵 表
和堆栈指针等
操作 LD Rd, X Rdß X ; 送数,X指针寄存器值不改变
LD Rd,X+ Rdß X XßX 1 ;先送数,后X指针寄存器值加1
LD Rd,-X XßX 1 Rdß(X) ;先X指针寄存器值减1, 后送数
2 使用变址X间接将寄存器内容传送到SRAM
ST使用变址X间接将寄存器内容传送到SRAM
说明 间接将寄存器的一个字节传送到SRAMSRAM的位置由寄存器区中的X 16位 指针寄存器指
出 存储器访问被限制在当前64K字节的SRAM页中 为访问另外SRAM页 则 I O范围的寄存器RAMPX
将被修改 在操作之后 X指针寄存器要么不改变 要么是加1或减1 使用X指针寄存器的这些特性
特别适合用作堆栈指针
操作 ST X,Rr (X)ß Rr 0 d31 送数,X指针不改变
ST X,Rr X ß Rr 0d 31 先送数,后X指针加1
ST –X,Rr X ß X1 (X)ßRr 0 d 31 先X指针减1, 后送数
二 使用Y寄存器间接传送数据
3 使用变址Y间接将SRAM中的内容传送到寄存器
LDLDD 使用变址Y间接将SRAM中的内容传送到寄存器
说明 带或不带偏移间接从 SRAM中传送一个字节到寄存器 SRAM中的位置由寄存器区中的 Y 16
位 指针寄存器指出 存储器访问被限制在当前64K字节的SRAM页中 为访问另外SRAM页 则I O范
围内的寄存器 RAMPY需改变 在指令执行后 Y指针寄存器值要么不改变 要么就加 1或减 1操作 使
用Y指针寄存器的这些特性 特别适合于访问矩阵 表和堆栈指针等
操作 LD Rd,Y Rdß Y 0 d31 送数,Y指针不改变
LD Rd Y Rdß (Y) 0 d 31 先送数,后Y指针加1
AVR单片机指令系统 9
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
LD Rd,-Y YßY 1 YßY 1 0d 31 先Y指针减1, 后送数
LDD Rd Yq Rdß Y q Rdß Y 0 d31 先Y指针加q,后送数
0 q 63 执行后Y指针(Y不含q)不变
4 使用变址Y间接将寄存器内容传送到SRAM
STSTD——使用变址Y间接将寄存器内容传送到SRAM
说明 间接将带或不带偏移的寄存器的一个字节传送到SRAM SRAM的位置由寄存器区中的Y16 位
指针寄存器指出 存储器访问被限制在当前64K字节的SRAM页 为访问另外SRAM页 则I O范围的寄
存器RAMPY将被修改 在操作之后,Y指针寄存器要么不改变 要么是加1或减1 使用Y指针寄存器的
这些特性 特别适合用作堆栈指针
操作 ST Y,Rr Y ß Rr 0 d31 送数,Y指针不改变
ST Y,Rr Y ß Rr YßY 1 0d 31 先送数,后Y指针加1
ST -Y Rr Y ß Y l Y ßRr 0d 31 先Y指针减1, 后送数
STD Yq,Rr (Y q)ß Rr 0 d31 先Y指针加q,后送数
0 q 63 执行后Y指针(Y不含q)不变
三 使用Z寄存器间接传送数据
5.使用变址Z间接将SRAM中的内容传送到寄存器
LDLDD——使用变址Z间接将SRAM中的内容传送到寄存器
说明 带或不带偏移间接从 SRAM中传送一个字节到寄存器 SRAM中的位置由寄存器区中的 Z16
位 指针寄存器指出 存储器访问被限制在当前 64K字节的 SRAM页中 为访问另外SRAM页 则 IO
范围内的寄存器RAMPZ需改变 在指令执行后 Z指针寄存器值要么不改变 要么就加1或减 1操作
使用 Z指针寄存器的这些特性 特别适合于堆栈指针 因为 Z指针寄存器能用于直接子程序调用 直接
跳转和查表 Z指针寄存器用作为专用堆栈指针要比X Y指针方便
用Z指针在程序存储器中查表 可参见LPM指令
操作 LD Rd,Z Rdß Z 0 d31 送数,Z指针不改变
LD Rd Z Rdß Z 0d 31 先送数,后Z指针加1
LD Rd,-Z Z ß Z 1 0 d 31 先Z指针减1, 后送数
LDD Rd Z q Rdß Z q 0 d31 先Z指针加q,后送数
0 q 63 执行后Z指针(Z不含q)不变
6 使用变址Z间接将寄存器内容传送到SRAM
STSTD——使用变址Z间接将寄存器内容传送到SRAM
说明 间接将带或不带偏移的寄存器的一个字节传送到SRAMSRAM的位置由寄存器区中的Z16位
指针寄存器指出 存储器访问被限制在当前64K字节的SRAM页 为访问另外 SRAM页 则 IO范围的
寄存器 RAMPZ将被修改 在操作之后 Z指针寄存器要么不改变 要么是加1或减1 使用Z指针寄存
器的这些特性 特别适合用作堆栈指针 因为Z指针寄存器能适用于间接子程序调用 间接跳转和查表
所以Z指针寄存器像一个专用堆栈指针 用起来比X和Y指针更方便
操作 ST Z,Rr Z ßRr 0 d31 送数,Z指针不改变
ST Z ,Rr (Z)ßRr ZßZ十1 0d 31 先送数,后Z指针加1
ST -Z Rr Zß Z-1 Z ßRr 0 d 31 先Z指针减1, 后送数
STD Z q,Rr Z q ßRr 0 d31 先Z指针加q,后送数
0 q 63 执行后Z指针(Z不含q)不变
3.6.3从程序存储器直接取数据指令
1. LPM——装入程序存储器
说明 将Z寄存器指向的一个字节传送到寄存器0 RO 该指令使100 空间有效,常
量初始化或常数取数特别有用 程序存储器被编为16位字 Z 16位 指针的最低位 LSB选
择为0是低字节 选择为1是高字节 该指令能寻址程序存储器第一个64K字节 32字
AVR单片机指令系统 10
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
操作 LPM R0ß Z
4·6·4 I0 口数据传送
1 IN——I O口数据传送到寄存器
说明 将I O空间 口 定时器 配置寄存器等 的数据传送到寄存器区中的寄存器Rd中
操作 IN Rd P RdßP O d31 0 P63
2 OUT--寄存器数据送 I O口
说明 将寄存器区中寄存器 Rr的数据传送到 I0空间 口 定时器 配置寄存器等
操作 OUT P Rr Pß Rr 0 r31 0 P63
4·6 5堆栈操作指令
AVR单片机的特殊功能寄存器中有一个堆栈指针 SP它指出栈顶的位置 在指令系统中有两条用于
数据传送的栈操作指令
1 PUSH——压寄存器到堆栈,进栈指令
说明 该指令存储寄存器Rr的内容到堆栈
操作 PUSH Rr STACKßRr O d 31
2 POP——堆栈弹出到寄存器,出栈指令
说明 该指令将堆栈中的字节装入到寄存器Rd中
操作 POP Rd RdßSTACK 0 d 31
4.7 位指令和位测试指令
4.7.1 带进位逻辑操作指令
1 LSL——逻辑左移
逻辑左移
说明 寄存器Rd中所有位左移1位 第0位被清零 第7位移到SREG中的C标志
该指令完成一个无符号数乘2的操作
操作 LSL Rd 0 d 31
2 LSR——逻辑右移
说明 寄存器Rd中所有位右移1位 第7位被清零 第0位移到SREG中的C标志
该指令完成一个无符号数除2的操作 C标志被用于结果舍入
操作 LSR Rd 0 d 31
3 ROL通过进位左循环
说明 寄存器Rd的所有位左移1位 C标志被移到Rd的第0位 Rd的第7位移到C标志
操作 ROL Rd 0 d 31
4 ROR——通过进位右循环
说明 寄存器Rd的所有位右移1位 C标志被移到Rd的第7位 Rd的第0位移到C
标志
操作 ROR Rd 0 d 31
5 ASR——算术右移
说明 寄存器Rd中的所有位右移1位 而位7保持常量 位0被装入SREG的C标志位 这个操作
实现2的补码值除2 而不改变符号 进位标志用于结果的舍入
操作 ASR Rd 0 d 31
6 SWAP——半字节交换
说明 寄存器中的高半字节和低半字节交换
操作 SWAP Rd 0 d 31 R7 4 ßRd3 0 ßR 3 0 ßRd7 4
4.7.2 位变量传送指令
1 BST——寄存器中的位存储到SREG中的T标志
说明 把寄存器中的位b存储到SREG状态寄存器 中的T标志
操作 BST Rd b TßRdb 0 d31,0 b7
AVR单片机指令系统 11
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
2 BLD一SREG中的T标志装入寄存器中的某一位
说明 拷贝SREG状态寄存器 的T标志到寄存器Rd中的位b
操作 BLD Rd,d Rdb ßT 0 d31, 0 b7
4.7.3 位变量修改指令
1 BSET——置状态寄存器的位
说明 置状态寄存器 SREG的某一标志或某一位
操作 BSET s SREGS ß1 0 s 7
2 BCLR清状态寄存器的位
说明 清零SREG状态寄存器中的一个标志位
操作 BCLR s SREGS ß 0 0 s 7
3 SBI置I O寄存器的位
说明 对I O寄存器指定的位置位 该指令在低32个I O寄存器内操作 I O寄存器地
址为0 31
操作 SBIPb IO( P b)ß1 0P 310 b 7
4 CBI——清I O寄存器的位
说明 清零I O寄存器中的指定位 该指令用在寄存器最低的32个I O寄存器上 I O
寄存器地址为 031
操作 CBI P, b IO P b ß0 0 P31 0b 7
5 SEC一置进位位标志
说明 置位SREG状态寄存器 中的进位标志 C
操作 SEC Cß1
6 CLC―清零进位标志
说明 清零SREG状态寄存器 中的进位标志 C
操作 CLC Cß0
7 SEN——置位负数标志
说明 置位SREG状态寄存器 中的负数标志 N
操作 SEN Nß1
8 CLN一清零负数标志
说明 清零SREG状态寄存器 中的负数标志 N
操作 CLN Nß0
9 SEZ——置位零标志
说明 置位SREG状态寄存器 中的零标志 Z
操作 SEZ Zß1
10CLZ——清零零标志
说明 清零SREG状态寄存器 中的零标志 Z
操作 CLZ Zß0
11SEI——置位全局中断标志
说明 置位SREG状态寄存器 中的全局中断标志 I
操作 SEI Iß1
12CLI——清零全局中断标志
说明 清除SREG状态寄存器 中的全局中断标志 I
操作 CLI Iß0
13SES一置位符号S标志
说明 置位SREG状态寄存器 中的符号标志 S
操作 SES sß1
14CLS——清零符号S标志
说明 清零SREG状态寄存器 中的符号标志 S
AVR单片机指令系统 12
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
操作 CLS Sß0
15SEV置溢出标志位
说明 置位SREG状态寄存器 中的溢出标志 V
操作 SEV Vß1
16CLV清溢出标志位
说明 清零SREG状态寄存器 中的溢出标志 V
操作 CLV Vß0
17SET―置T标志位
说明 置位SREG状态寄存器 中的T标志
操作 SET Tß1
18CLT——清T标志位
说明 清零SREG状态寄存器 中的T标志
操作 CLT Tß0
19SEH——置半进位标志
说明 置位SREG状态寄存器 中的半进位标志 H
操作 SEH Hß1
20CLH——清半进位标志
说明 清零SREG状态寄存器 中的半进位标志 H
操作 CLH Hß0
4.7.4 其它指令
1 空指令
NOP——空操作
说明 该指令完成一个单周期空操作
应用:延时等待;产生方波;抗干扰,在无程序单元写上空操作,空操作指令最后转到$000H
操作 NOP No
2 SLEEP——休眠指令
说明 该指令设置电路休眠模式 由 MCU控制寄存器定义 当在休眠状态由一个中断
唤醒时 在中断程序执行后 紧跟在休眠指令后的指令被执行
应用:省电,尤其对便携式仪器特别有用
操作 SLEEP
3 WDR——看门狗复位
说明 该指令复位看门狗定时器 在 WD预定比例器给出限定时间内必须执行 参见看门狗定时器
硬件部分
应用:抗干扰;延时
操作 WDR WD timer restart
广州市天河双龙电子有限公司 http://WWW.SL.COM.CN
广州双龙:广州天河路 561号新赛格电子城 331室(510630)
电话:020-87578852 87505012 传真:分机 620
北京双龙:北京海淀知春路 132号中发大厦 616室(100086)
电话:010-82623551 62653785 传真:010-82623550
上海双龙:上海北京东路 668号科技京城东搂 12H2室(200001)
电话:021-53081501 53081502 传真:分机 213