R单片机指令系统.docx

上传人:b****7 文档编号:24934568 上传时间:2023-06-03 格式:DOCX 页数:19 大小:36.37KB
下载 相关 举报
R单片机指令系统.docx_第1页
第1页 / 共19页
R单片机指令系统.docx_第2页
第2页 / 共19页
R单片机指令系统.docx_第3页
第3页 / 共19页
R单片机指令系统.docx_第4页
第4页 / 共19页
R单片机指令系统.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

R单片机指令系统.docx

《R单片机指令系统.docx》由会员分享,可在线阅读,更多相关《R单片机指令系统.docx(19页珍藏版)》请在冰豆网上搜索。

R单片机指令系统.docx

R单片机指令系统

第五章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。

操作:

RdRd+Rr

语法:

操作码:

程序计数器:

ADDRd,RrO≤d≤31,0≤r≤31PCPC+1

例子:

(实践操作程序实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性

2.带进位加法

ADC-一带进位加

说明:

两个寄存器和C标志的内容相加,结果送目的寄存器Rd。

操作:

Rd←Rd+Rr+C

语法:

操作码:

程序计数器:

ADCRd,Rr0≤d≤31,0≤r≤31PC←PC+1

例子:

(实践操作程序

3.减1指令

DEC一减1

说明:

寄存器Rd的内容减1,结果送目的寄存器Rd中。

操作:

RdRd-l

语法:

操作码:

程序计数器:

DECRd0≤d≤31PCPC十1

例子:

(实践操作程序

4.立即数比较

CPI——带立即数比较

说明:

该指令完成寄存器Rd和常数的比较操作。

寄存器的内容不改变。

该指令后能

使用所有条件转移指令。

操作:

Rd-K

语法:

操作码:

程序计数器:

CPIRd,K16≤d≤31,0≤K≤255PCPC+1

例子:

(实践操作程序

5.带立即数与

ANDI——立即数逻辑与;全1为1,有0即0

说明:

寄存器Rd的内容与常数逻辑与,结果送目的寄存器Rd。

应用:

清0,使某位为0,用0去与;保留,用1去逻辑与;代硬件与门

操作:

RdRd·K;

语法:

操作码:

程序计数器:

ANDIRdK16≤d≤31,0≤K≤255PCPC+1

例子:

(实践操作程序

6.寄存器逻辑或

OR一逻辑或;有1即1,全0为0,

应用:

置数,使某位为1,用1去或;保留,用0去逻辑或;代硬件或门

说明:

完成寄存器Rd与寄存器Rr的内容逻辑或操作,结果进目的寄存器Rd中。

操作:

RdRd∨Rr

语法:

操作码:

程序计数器:

ORRdRr0≤d≤31,0≤r≤31PCPC+1

例子:

(实践操作程序

7.清除寄存器

CLR-一寄存器清零

说明:

寄存器清零。

该指令采用寄存器Rd与自己的内容相异或实现的。

寄存器

的所有位都被清零。

操作:

RdRd⊕Rd

语法:

操作码:

程序计数器:

CLRRd0≤d≤31PCPC+1

例子:

(实践操作程序

8.相对跳转

RJMP一相对跳转

说明:

相对跳转到PC-2K和PC+2K(字)范围内的地址。

在汇编程序中,标号用于替

代相对操作。

AVR微控制器的程序存储器空间不超过4K字(8K字节),该指令能寻址整个

存储器空间的每个地址位置。

操作:

PC(PC+1)+k

语法:

操作码:

程序计数器:

RJMPk—2K≤k≤2KPC(PC+1)+k

例子:

(实践操作程序

9.相等转移

BREQ相等转移

说明:

条件相对转移,测试零标志(Z),如果Z位被置位,则相对PC值转移。

如果在执行CP、CPI、SUB或SUBI指令后立即执行该指令,且当寄存器Rd中无符号或有符号二进制数与寄存器Rr中无符号或有符号H进制数相等时,转移将发生。

操作:

IfRd=Rr(z=1)thenPC(PC十1)+k,PCPC十1

语法:

操作码:

程序计数器:

BREQk-64≤k≤+63PC(PC+1)+k

PCPC+l

例子:

(实践操作程序

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,elesPCPC+1

语法:

操作码:

程序计数器:

BRNEk-64≤k≤+63PC(PC+1)+k

PCPC+l

例子:

(实践操作程序

11.寄存器位清零跳行

SBRC一寄存器位被清零跳行

说明:

该指令测试寄存器某位,如果该位被清零,则跳下一行执行指令。

操作:

IfRd(b)=0thenPCPC+2(or3)elesPCPC+1

语法:

操作码:

程序计数器:

SBRCRr,b0≤r≤31,0≤b≤7PCPC十1

pCpC+2

PCPC+3

例子:

(实践操作程序

12.寄存器位置位跳行

SBRS一寄存器位置位跳行

说明:

该指令测试寄存器某位,如果该位被置位,则跳下一行执行指令。

操作:

IfRr(b)=lthenPCPC+2(or3)elesPCPC+l

语法:

操作码:

程序计数器:

SBRSRr,b≤r≤31,0≤b≤7PCPC+1

PCPC+2

PCPC+3

例子:

(实践操作程序

13.I/O寄存器位置位跳行

SBIS-I/O寄存器的位置位跳行

说明:

该指令测试1/O寄存器某位,如果该位被置位,则跳一行执行指令。

该指令在低

32个1/O寄存器内操作,地址为0~31。

操作:

IfI/OP,b=lthenPCPC+2(or3)elsePCPC+1

语法:

操作码:

程序计数器:

SBISp,b0≤P≤31,0≤b≤7PCPC+1

PCPC+2

PCPC+3

例子:

(实践操作程序

14.相对调用

RCALL——相对调用于程序

说明:

在PC+1后(2K字(4K字节)范围内调用子程序。

返回地址(RCALL后的指令地址)存储到堆栈(见CALL)。

操作:

PC(PC+1)+k

语法:

操作码:

程序计数器:

RCALLk-2K≤k≤2KPC(PC+1)+k

例子:

(实践操作程序

15.从子程序返回

RET——子程序返回

说明:

从子程序返回。

返回地址从堆栈中弹出。

操作:

PC(15-0)STACK

PC(21-0)STACK

语法:

操作码:

程序计数器:

堆栈:

RETNoneSeeOperationSPSP+2

RETNoneSeeOperationSPSP+3

例子:

(实践操作程序见

16.从中断程序返回

RETI——中断返回

说明:

从中断程序中返回。

返回地址从堆栈中弹出,且全局中断标志被置位。

注意:

1.主程序应跳过中断区,防止修改补充中断程序带来麻烦;

2.不用的中断入口地址写上RETI-中断返回,有抗干扰作用;

操作:

PC(15-0)STACK

PC(21-0)STACK

语法:

操作码:

程序计数器:

堆栈:

RETINoneSeeOperationSPSP十2

RETINoneSeeOperationSPSP+3

例子:

(程序,摘自”乐曲.ASM”部分程序,仅供参考),能执行程序请阅”乐曲.ASM”程序及

AVR单片机在儿童智能玩具中的应用--音乐玩具(电脑放音机)一文

17.寄存器拷贝数据

MOV寄存器拷贝

说明:

该指令将一个寄存器拷贝到另一个寄存器。

源寄存器Rr的内容不改变,而目的

寄存器Rd拷贝了Rr的内容。

操作:

Rd←Rr

语法:

操作码:

程序计数器:

MOVRdRr0≤d≤31,0≤r≤31PCPC+1

例子:

(实践操作程序

18.SRAM数据直接送寄存器

LDS直接从SRAM装入

说明:

把SRAM中1个字节装入到寄存器。

必须提供一个16位地址。

存储器访问被

限制在当前64K字节的SRAM页。

超过64K字节,LDS指令使用RAMPZ寄存器访问。

操作:

Rd(k)

语法:

操作码:

程序计数器:

LDSRdk0≤d≤31,0≤k≤65535PCPC+2

例子:

(实践操作程序

19.寄存器数据直接送SRAM

STS寄存器数据直接送SRAM

说明:

将寄存器的内容直接存储到SRAM。

必须提供一个16位的地址。

存储器访问被限

制在当前64K字节的SRAM页。

STS指令使用RAMPZ寄存器访问存储器可超过64K字节。

操作:

(k)Rr

语法:

操作码:

程序计数器:

STSk,Rr0≤r≤31,0≤k≤65535PCPC+2

例子:

(实践操作程序与相同)

20.立即数送寄存器

LDI——装入立即数

说明:

装入一个8位立即数到寄存器R16~R31中。

操作:

RdK

语法:

操作码:

程序计数器:

LDIRdK16≤d≤31,0≤K≤255PCPC+2

例子:

(实践操作程序

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)

ZZ-1

Rd(Z+q)

语法:

操作码:

操作流程:

程序计数器:

LDRd,Z0≤d≤31送数,Z指针不改变PCPC+1

LDRdZ+0≤d≤31先送数,后Z指针加1PCPC+1

LDRd,-Z0≤d≤31先Z指针减1,后送数PCPC+l

LDDRdZ+q0≤d≤31,先Z指针加q,后送数,PCPC+1

0≤q≤63执行后Z指针(Z不含q)不变

例子:

(实践操作程序

22.LPM——装入程序存储器

说明:

将Z寄存器指向的一个字节传送到寄存器0(RO)。

该指令使100%空间有效,常

量初始化或常数取数特别有用。

程序存储器被编为16位字,Z(16位)指针的最低位(LSB)选

择为0是低字节,选择为1是高字节。

该指令能寻址程序存储器第一个64K字节(32字)。

操作:

R0(Z)

语法:

操作码:

程序计数器:

LPMNonePCPC+1

例子:

(实践操作程序,更详细资料阅”按钮猜数.ASM”)

23.I/O口数据传送到寄存器

IN——I/O口数据传送到寄存器

说明:

将I/O空间(口,定时器,配置寄存器等)的数据传送到寄存器区中的寄存器Rd中。

操作:

RdP

语法:

操作码:

程序计数器:

INRdPO≤d≤31,0≤P≤63PCPC+1

例子:

(实践操作程序

24.寄存器数据送I/O口

OUT寄存器数据送I/O口

说明:

将寄存器区中寄存器Rr的数据传送到I/0空间(口、定时器、配置寄存器等)。

操作:

PRr

语法:

操作码:

程序计数器:

OUTP,Rr0≤r≤31,0≤P≤63PCPC十1

例子:

(实践操作程序

25.进栈指令

PUSH——压寄存器到堆栈

说明:

该指令存储寄存器Rr的内容到堆栈。

操作:

STACKRr

语法:

操作码:

程序计数器:

PUSHRrO≤d≤31PCPC+1SPSP-1

例子:

(实践操作程序

26.出栈指令

POP——堆栈弹出到寄存器

说明:

该指令将堆栈中的字节装入到寄存器Rd中。

操作:

RdSTACK

语法:

操作码:

程序计数器:

POPRd0≤d≤31PCPC+1SPSP+1

例子:

(实践操作程序

27.通过进位左循环

ROL—通过进位左循环

说明:

寄存器Rd的所有位左移1位,C标志被移到Rd的第0位,Rd的第7位移到C标志。

操作:

语法:

操作码:

程序计数器:

ROLRd0≤d≤31PCPC+1

例子:

(实践操作程序

28.ROR——通过进位右循环

说明:

寄存器Rd的所有位右移1位,C标志被移到Rd的第7位,Rd的第0位移到C

标志。

操作:

语法:

操作码:

程序计数器:

RORRd0≤d≤31PCPC+1

例子:

(实践操作程序

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≤7PCPC+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≤7PCPC十1

例子:

cbi$18,7;I/O(PORTB寄存器的7位)0

31.置进位位

SEC一置位进位标志

说明:

置位SREG(状态寄存器)中的进位标志(C)。

操作:

C1

语法:

操作码:

程序计数器:

SECN0nePCPC+1

C:

1

例子:

sec;C1

adcr0,r1;带进位位加

32.触发全局中断位

SEI——置位全局中断标志

说明:

置位SREG(状态寄存器)中的全局中断标志(I)。

操作:

I1

语法:

操作码:

程序计数器:

SEINonePCPC+1

I:

1

例子:

cli;I0

inr13,$16;(r13)←(PINB寄存器数据)

set;I1

33.禁止全局中断位

CLI——清零全局中断标志

说明:

清除SREG(状态寄存器)中的全局中断标志(I)。

操作:

I0

语法:

操作码:

程序计数器:

CLINonePCPC+1

I:

0

例子:

(实践操作程序

34.看门狗复位

WDR——看门狗复位

说明:

该指令复位看门狗定时器,在WD预定比例器给出限定时间内必须执行。

参见看门狗定时器硬件部分。

应用:

抗干扰;延时

操作:

WDtimerrestart.

语法:

操作码:

程序计数器:

WDRN0nePC~PC+1

例子:

(实践操作程序

1.请观看多媒体指令系统讲座

2.实际操作一次:

按对应程序操作实践!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1