AVR单片机指令系统.docx
- 文档编号:29894349
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:19
- 大小:39.95KB
AVR单片机指令系统.docx
《AVR单片机指令系统.docx》由会员分享,可在线阅读,更多相关《AVR单片机指令系统.docx(19页珍藏版)》请在冰豆网上搜索。
AVR单片机指令系统
第五章AVR单片机指令系统
计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。
计算机只能识别和执行机器语言的指令。
为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。
汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。
AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。
SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令,而我们所做的11个实验程序仅用了34条指令,我们重点讲这34条指令,其余指令就可自学了。
AVR器件(指令速查表)118条指令器件
AT90S2313/2323/2343/2333,AT90S4414/4433/4434/8515,AT90S8534/8535
算术和逻辑指令
BRCCk
C清零转
位指令和位测试指令
ADDRd,Rr
加法
BRSHk
≥转
SBIP,b
置位I/O位
ADCRd,Rr
带进位加
BRLOk
小于转(无符号)
CBIP,b
清零I/O位
◇ADIWRdl,K
加立即数
BRMIk
负数转移
LSLRd
左移
SUBRd,Rr
减法
BRPLk
正数转移
LSRRd
右移
SUBIRd,Rr
减立即数
BRGEk
≥转(带符号)
ROLRd
带进位左循环
SBCRd,Rr
带进位减
BRLTk
小于转(带符号)
RORRd
带进位右循环
SBCIRd,K
带C减立即数
BRHSk
H置位转移
ASRRd
算术右移
◇SBIWRdl,K
减立即数
BRHCk
H清零转移
SWAPRd
半字节交换
ANDRd,Rr
与
BRTSk
T置位转移
BSETs
置位SREG
ANDIRd,K
与立即数
BRTCk
T清零转移
BCLRs
清零SREG
ORRd,Rr
或
BRVSk
V置位转移
BSTRr,b
Rr的b位送T
ORIRd,K
或立即数
BRVCk
V清零转移
BLDRd
T送Rr的b位
EORRd,Rr
异或
BRIEk
中断位置位转移
SEC
置位C
COMRd
取反
BRIDk
中断位清零转移
CLC
清零C
NEGRd
取补
数据传送指令
SEN
置位N
SBRRd,K
寄存器位置位
MOVRd,Rr
寄存器传送
CLN
清零N
CBRRd,K
寄存器位清零
◇LDIRd,K
装入立即数
SEZ
置位Z
INCRd
加1
◇LDRd,X
X间接取数
CLZ
清零Z
DECRd
减1
◇LDRd,X+
X间接取数后+
SEI
置位I
TSTRd
测试零或负
◇LDRd,-X
X间接取数先-
CLI
清零I
CLRRd
寄存器清零
◇LDRd,Y
Y间接取数
SES
置位S
SERRd
寄存器置FF
◇LDRd,Y+
Y间接取数后+
CLS
清零S
条件转移指令
◇LDRd,–Y
Y间接取数先-
SEV
置位V
RJMPk
相对转移
◇LDDRd,Y+q
Y间接取数+q
CLV
清零V
◇IJMP
间接转移(Z)
◇LDRd,Z
Z间接取数
SET
置位T
RCALLk
相对调用
◇LDRd,Z+
Z间接取数后+
CLT
清零T
◇ICALL
间接调用(Z)
◇LDRd,–Z
Z间接取数先-
SEH
置位H
RET
子程序返回
◇LDDRd,Z+q
Z间接取数+q
CLH
清零H
RETI
中断返回
◇LDSRd,K
从SRAM装入
NOP
空操作
CPSERd,Rr
比较相等跳行
◇STX,Rr
X间接存数
SLEEP
休眠指令
CPRd,Rr
比较
◇STX+,Rr
X间接存数后+
WDR
看门狗复位
CPCRd,Rr
带进位比较
◇ST–X,Rr
X间接存数先-
90条指令为Attiny11/12/15/22=
□+89条基本指令是AT90S1200
CPIRd,K
与立即数比较
◇STY,Rr
Y间接存数
SBRCRr,b
位清零跳行
◇STY+,Rr
Y间接存数后+
SBRSRr,b
位置位跳行
◇ST–Y,Rr
Y间接存数先-
SBICP,b
I/O位清零跳行
◇STDY+q,Rr
Y间接存数+q
SBISP,b
I/O位置位跳行
STZ,Rr
Z间接存数
BRBSs,k
SREG位置位转
◇STZ+,Rr
Z间接存数后+
118条指令器件=
◇+90条指令器件
BRBCs,k
SREG位清零转
◇ST–Z,Rr
Z间接存数先-
BREQk
相等转移
◇STDZ+q,Rr
Z间接存数+q
BRNEk
不相等转移
◇STSk,,Rr
数据送SRAM
BRCSk
C置位转
□LPM
从程序区取数
INRd,P
从I/O口取数
OUTP,Rdr
存数I/O口
PUSHRr
压栈
POPRd,
出栈
说明:
SL-DIY02-3开发实验器的11个实验程序例子,仅用34条指令(以红色表示)
1.不带进位加法
ADD一不带进位加
说明:
两个寄存器不带进位C标志加,结果送目的寄存器Rd。
操作:
Rd?
Rd+Rr
语法:
操作码:
程序计数器:
ADDRd,RrO≤d≤31,0≤r≤31PC?
PC+1
例子:
。
(实践操作程序4411.ASM)实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性
2.带进位加法
ADC-一带进位加
说明:
两个寄存器和C标志的内容相加,结果送目的寄存器Rd。
操作:
Rd←Rd+Rr+C
语法:
操作码:
程序计数器:
ADCRd,Rr0≤d≤31,0≤r≤31PC←PC+1
例子:
(实践操作程序4412.ASM)
3.减1指令
DEC一减1
说明:
寄存器Rd的内容减1,结果送目的寄存器Rd中。
操作:
Rd?
Rd-l
语法:
操作码:
程序计数器:
DECRd0≤d≤31PC?
PC十1
例子:
(实践操作程序4426.ASM)
4.立即数比较
CPI——带立即数比较
说明:
该指令完成寄存器Rd和常数的比较操作。
寄存器的内容不改变。
该指令后能
使用所有条件转移指令。
操作:
Rd-K
语法:
操作码:
程序计数器:
CPIRd,K16≤d≤31,0≤K≤255PC?
PC+1
例子:
(实践操作程序4463.ASM)
5.带立即数与
ANDI——立即数逻辑与;全1为1,有0即0
说明:
寄存器Rd的内容与常数逻辑与,结果送目的寄存器Rd。
应用:
清0,使某位为0,用0去与;保留,用1去逻辑与;代硬件与门
操作:
Rd?
Rd·K;
语法:
操作码:
程序计数器:
ANDIRdK16≤d≤31,0≤K≤255PC?
PC+1
例子:
(实践操作程序4472.ASM)
6.寄存器逻辑或
OR一逻辑或;有1即1,全0为0,
应用:
置数,使某位为1,用1去或;保留,用0去逻辑或;代硬件或门
说明:
完成寄存器Rd与寄存器Rr的内容逻辑或操作,结果进目的寄存器Rd中。
操作:
Rd?
Rd∨Rr
语法:
操作码:
程序计数器:
ORRdRr0≤d≤31,0≤r≤31PC?
PC+1
例子:
(实践操作程序4481.ASM)
7.清除寄存器
CLR-一寄存器清零
说明:
寄存器清零。
该指令采用寄存器Rd与自己的内容相异或实现的。
寄存器
的所有位都被清零。
操作:
Rd?
Rd⊕Rd
语法:
操作码:
程序计数器:
CLRRd0≤d≤31PC?
PC+1
例子:
(实践操作程序4492.ASM)
8.相对跳转
RJMP一相对跳转
说明:
相对跳转到PC-2K和PC+2K(字)范围内的地址。
在汇编程序中,标号用于替
代相对操作。
AVR微控制器的程序存储器空间不超过4K字(8K字节),该指令能寻址整个
存储器空间的每个地址位置。
操作:
PC?
(PC+1)+k
语法:
操作码:
程序计数器:
RJMPk—2K≤k≤2KPC?
(PC+1)+k
例子:
(实践操作程序4511.ASM)
9.相等转移
BREQ相等转移
说明:
条件相对转移,测试零标志(Z),如果Z位被置位,则相对PC值转移。
如果在执行CP、CPI、SUB或SUBI指令后立即执行该指令,且当寄存器Rd中无符号或有符号二进制数与寄存器Rr中无符号或有符号H进制数相等时,转移将发生。
操作:
IfRd=Rr(z=1)thenPC?
(PC十1)+k,PC?
PC十1
语法:
操作码:
程序计数器:
BREQk-64≤k≤+63PC?
(PC+1)+k
PC?
PC+l
例子:
(实践操作程序4523.ASM)
10.不相等转移
BRNE——不相等转移
说明:
条件相对转移,测试零标志(Z),如果Z位被清零,则相对PC值转移。
如果在执行CP。
CPI、SUB或SUBI指令后立即执行该指令,且当在寄存器Rd中的无符号或带符号二进制数不等于寄存器Rr中的无符号或带符号二进制数时,转移将发生。
该指令相对PC转移的方向为:
PC-64≤目的≤PC+63。
参数K为PC的偏移,用2的补码表示(相当于指令BRBCIK)。
操作,IfRd≠Rr(Z=0)thenPC?
(PC+1)+k,elesPC?
PC+1
语法:
操作码:
程序计数器:
BRNEk-64≤k≤+63PC?
(PC+1)+k
PC?
PC+l
例子:
(实践操作程序4524.ASM)
11.寄存器位清零跳行
SBRC一寄存器位被清零跳行
说明:
该指令测试寄存器某位,如果该位被清零,则跳下一行执行指令。
操作:
IfRd(b)=0thenPC?
PC+2(or3)elesPC?
PC+1
语法:
操作码:
程序计数器:
SBRCRr,b0≤r≤31,0≤b≤7PC?
PC十1
pC?
pC+2
PC?
PC+3
例子:
(实践操作程序45222.ASM)
12.寄存器位置位跳行
SBRS一寄存器位置位跳行
说明:
该指令测试寄存器某位,如果该位被置位,则跳下一行执行指令。
操作:
IfRr(b)=lthenPC?
PC+2(or3)elesPC?
PC+l
语法:
操作码:
程序计数器:
SBRSRr,b≤r≤31,0≤b≤7PC?
PC+1
PC?
PC+2
PC?
PC+3
例子:
(实践操作程序45223.ASM)
13.I/O寄存器位置位跳行
SBIS-I/O寄存器的位置位跳行
说明:
该指令测试1/O寄存器某位,如果该位被置位,则跳一行执行指令。
该指令在低
32个1/O寄存器内操作,地址为0~31。
操作:
IfI/OP,b=lthenPC?
PC+2(or3)elsePC?
PC+1
语法:
操作码:
程序计数器:
SBISp,b0≤P≤31,0≤b≤7PC?
PC+1
PC?
PC+2
PC?
PC+3
例子:
(实践操作程序45225.ASM)
14.相对调用
RCALL——相对调用于程序
说明:
在PC+1后(2K字(4K字节)范围内调用子程序。
返回地址(RCALL后的指令地址)存储到堆栈(见CALL)。
操作:
PC?
(PC+1)+k
语法:
操作码:
程序计数器:
RCALLk-2K≤k≤2KPC?
(PC+1)+k
例子:
(实践操作程序DIP40LED.ASM)
15.从子程序返回
RET——子程序返回
说明:
从子程序返回。
返回地址从堆栈中弹出。
操作:
PC(15-0)?
STACK
PC(21-0)?
STACK
语法:
操作码:
程序计数器:
堆栈:
RETNoneSeeOperationSP?
SP+2
RETNoneSeeOperationSP?
SP+3
例子:
(实践操作程序见DIP40LED.ASM)
16.从中断程序返回
RETI——中断返回
说明:
从中断程序中返回。
返回地址从堆栈中弹出,且全局中断标志被置位。
注意:
1.主程序应跳过中断区,防止修改补充中断程序带来麻烦;
2.不用的中断入口地址写上RETI-中断返回,有抗干扰作用;
操作:
PC(15-0)?
STACK
PC(21-0)?
STACK
语法:
操作码:
程序计数器:
堆栈:
RETINoneSeeOperationSP?
SP十2
RETINoneSeeOperationSP?
SP+3
例子:
(程序45230.ASM,摘自”乐曲.ASM”部分程序,仅供参考),能执行程序请阅”乐曲.ASM”程序及
AVR单片机在儿童智能玩具中的应用--音乐玩具(电脑放音机)一文
17.寄存器拷贝数据
MOV寄存器拷贝
说明:
该指令将一个寄存器拷贝到另一个寄存器。
源寄存器Rr的内容不改变,而目的
寄存器Rd拷贝了Rr的内容。
操作:
Rd←Rr
语法:
操作码:
程序计数器:
MOVRdRr0≤d≤31,0≤r≤31PC?
PC+1
例子:
(实践操作程序4611.ASM)
18.SRAM数据直接送寄存器
LDS直接从SRAM装入
说明:
把SRAM中1个字节装入到寄存器。
必须提供一个16位地址。
存储器访问被
限制在当前64K字节的SRAM页。
超过64K字节,LDS指令使用RAMPZ寄存器访问。
操作:
Rd?
(k)
语法:
操作码:
程序计数器:
LDSRdk0≤d≤31,0≤k≤65535PC?
PC+2
例子:
(实践操作程序4612.ASM)
19.寄存器数据直接送SRAM
STS寄存器数据直接送SRAM
说明:
将寄存器的内容直接存储到SRAM。
必须提供一个16位的地址。
存储器访问被限
制在当前64K字节的SRAM页。
STS指令使用RAMPZ寄存器访问存储器可超过64K字节。
操作:
(k)?
Rr
语法:
操作码:
程序计数器:
STSk,Rr0≤r≤31,0≤k≤65535PC?
PC+2
例子:
(实践操作程序4613.ASM与4612.ASM相同)
20.立即数送寄存器
LDI——装入立即数
说明:
装入一个8位立即数到寄存器R16~R31中。
操作:
Rd?
K
语法:
操作码:
程序计数器:
LDIRdK16≤d≤31,0≤K≤255PC?
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-1
Rd?
(Z+q)
语法:
操作码:
操作流程:
程序计数器:
LDRd,Z0≤d≤31送数,Z指针不改变PC?
PC+1
LDRdZ+0≤d≤31先送数,后Z指针加1PC?
PC+1
LDRd,-Z0≤d≤31先Z指针减1,后送数PC?
PC+l
LDDRdZ+q0≤d≤31,先Z指针加q,后送数,PC?
PC+1
0≤q≤63执行后Z指针(Z不含q)不变
例子:
(实践操作程序4625.ASM)
22.LPM——装入程序存储器
说明:
将Z寄存器指向的一个字节传送到寄存器0(RO)。
该指令使100%空间有效,常
量初始化或常数取数特别有用。
程序存储器被编为16位字,Z(16位)指针的最低位(LSB)选
择为0是低字节,选择为1是高字节。
该指令能寻址程序存储器第一个64K字节(32字)。
操作:
R0?
(Z)
语法:
操作码:
程序计数器:
LPMNonePC?
PC+1
例子:
(实践操作程序4631.ASM,更详细资料阅”按钮猜数.ASM”)
23.I/O口数据传送到寄存器
IN——I/O口数据传送到寄存器
说明:
将I/O空间(口,定时器,配置寄存器等)的数据传送到寄存器区中的寄存器Rd中。
操作:
Rd?
P
语法:
操作码:
程序计数器:
INRdPO≤d≤31,0≤P≤63PC?
PC+1
例子:
(实践操作程序4641.ASM)
24.寄存器数据送I/O口
OUT寄存器数据送I/O口
说明:
将寄存器区中寄存器Rr的数据传送到I/0空间(口、定时器、配置寄存器等)。
操作:
P?
Rr
语法:
操作码:
程序计数器:
OUTP,Rr0≤r≤31,0≤P≤63PC?
PC十1
例子:
(实践操作程序4642.ASM)
25.进栈指令
PUSH——压寄存器到堆栈
说明:
该指令存储寄存器Rr的内容到堆栈。
操作:
STACK?
Rr
语法:
操作码:
程序计数器:
PUSHRrO≤d≤31PC?
PC+1SP?
SP-1
例子:
(实践操作程序4651.ASM)
26.出栈指令
POP——堆栈弹出到寄存器
说明:
该指令将堆栈中的字节装入到寄存器Rd中。
操作:
Rd?
STACK
语法:
操作码:
程序计数器:
POPRd0≤d≤31PC?
PC+1SP?
SP+1
例子:
(实践操作程序4652.ASM)
27.通过进位左循环
ROL—通过进位左循环
说明:
寄存器Rd的所有位左移1位,C标志被移到Rd的第0位,Rd的第7位移到C标志。
操作:
语法:
操作码:
程序计数器:
ROLRd0≤d≤31PC?
PC+1
例子:
(实践操作程序4713.ASM)
28.ROR——通过进位右循环
说明:
寄存器Rd的所有位右移1位,C标志被移到Rd的第7位,Rd的第0位移到C
标志。
操作:
语法:
操作码:
程序计数器:
RORRd0≤d≤31PC?
PC+1
例子:
(实践操作程序4714.ASM)
29.置I/O寄存器的位
SBI——置I/O寄存器的位
说明:
对I/O寄存器指定的位置位,该指令在低32个I/O寄存器内操作,I/O寄存器地
址为0~31。
操作:
I/O(Pb)?
1
语法:
操作码:
程序计数器:
SBIP,b0≤P≤31,0≤b≤7PC?
PC+1
例子:
out$1e,r0;(EEARL寄存器)←(R0)
sbi$1c,0;(EECR寄存器0位)?
1
30.清I/O寄存器的位
CBI——清I/O寄存器的位
说明:
清零I/O寄存器中的指定位,该指令用在寄存器最低的32个I/O寄存器上,I/O
寄存器地址为0~31。
操作:
I/O(P,b)?
0
语法:
操作码:
程序计数器:
CBIP,b0≤P≤31,0≤b≤7PC?
PC十1
例子:
cbi$18,7;I/O(PORTB寄存器的7位)?
0
31.置进位位
SEC一置位进位标志
说明:
置位SREG(状态寄存器)中的进位标志(C)。
操作:
C?
1
语法:
操作码:
程序计数器:
SECN0nePC?
PC+1
C:
1
例子:
sec;C?
1
adcr0,r1;带进位位加
32.触发全局中断位
SEI——置位全局中断标志
说明:
置位SREG(状态寄存器)中的全局中断标志(I)。
操作:
I?
1
语法:
操作码:
程序计数器:
SEINonePC?
PC+1
I:
1
例子:
cli;I?
0
inr13,$16;(r13)←(PINB寄存器数据)
set;I?
1
33.禁止全局中断位
CLI——清零全局中断标志
说明:
清除SREG(状态寄存器)中的全局中断标志(I)。
操作:
I?
0
语法:
操作码:
程序计数器:
CLINonePC?
PC+1
I:
0
例子:
(实践操作程序47312.ASM)
34.看门狗复位
WDR——看门狗复位
说明:
该指令复位看门狗定时器,在WD预定比例器给出限定时间内必须执行。
参见看门狗定时器硬件部分。
应用:
抗干扰;延时
操作:
WDtimerrestart.
语法:
操作码:
程序计数器:
WDRN0nePC~PC+1
例子:
(实践操作程序4743.ASM)
1.请观看多媒体指令系统讲座
2.实际操作一次:
按对应程序操作实践!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 指令系统