最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

AVR ATmega16指令大全

来源:动视网 责编:小OO 时间:2025-09-29 06:35:33
文档

AVR ATmega16指令大全

状态寄存器与标志位SREG:8位状态寄存器,其中每一位的定义为:C:进位标志位Z:结果为零标志位N:结果为负数标志位V:2的补码溢出标志位S:N⊕V,用于符号测试的标志位H:操作中产生半进位的标志位T:用于和BLD、BST指令进行位数据交换的位I:全局中断触发/禁止标志位算术和逻辑指令加法指令1.不带进位位加法ADDRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器不带进位C标志相加,结果送目的寄存器Rd。2.带进位位加法ADCRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器和C标志的内
推荐度:
导读状态寄存器与标志位SREG:8位状态寄存器,其中每一位的定义为:C:进位标志位Z:结果为零标志位N:结果为负数标志位V:2的补码溢出标志位S:N⊕V,用于符号测试的标志位H:操作中产生半进位的标志位T:用于和BLD、BST指令进行位数据交换的位I:全局中断触发/禁止标志位算术和逻辑指令加法指令1.不带进位位加法ADDRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器不带进位C标志相加,结果送目的寄存器Rd。2.带进位位加法ADCRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器和C标志的内
状态寄存器与标志位 

SREG: 8 位状态寄存器,其中每一位的定义为: 

C:  进位标志位 

Z:  结果为零标志位 

N:  结果为负数标志位 

V:  2 的补码溢出标志位 

S:  N⊕V,用于符号测试的标志位 

H:  操作中产生半进位的标志位 

T:  用于和 BLD、BST 指令进行位数据交换的位 

I:  全局中断触发/禁止标志位

算术和逻辑指令

加法指令

1.不带进位位加法 

ADD Rd,Rr  0≤d≤31,0≤r≤31 

说明:两个寄存器不带进位 C 标志相加,结果送目的寄存器 Rd。 

2.带进位位加法 

ADC Rd,Rr  0≤d≤31,0≤r≤31 

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

3.字加立即数 

ADIW Rdl,K  dl 为:24、26、28、30,0≤K≤63 

说明:寄存器对(一个字)同立即数(0~63)相加,结果放到寄存器对。

4.增1 指令 

INC Rd  0≤d≤31 

说明:寄存器 Rd 的内容加 1,结果送目的寄存器 Rd 中。

减法指令

1.不带进位位减法 

SUB Rd,Rr  0≤d≤31,0≤r≤31 

说明:两个寄存器相减结果送目的寄存器 Rd 中。

2.减立即数(字节) 

SUBI Rd,K  16≤d≤31,0≤K≤255 

说明:一个寄存器和常数相减,结果送目的寄存器 Rd。

3.带进位位减法 

SBC Rd,Rr  0≤d≤31,0≤r≤31 

说明:两个寄存器带着 C 标志相减,结果放到目的寄存器 Rd 中。

4.带进位位减立即数(字节) 

SBCI Rd,K  16≤d≤31,0≤K≤255  

说明:寄存器和立即数带着 C 标志相减,结果放到目的寄存器 Rd 中。

5.减立即数(字) 

SBIW Rdl,K  dl为24、26、28、30,0≤K≤63 

说明:寄存器对(字)与立即数 0~63 相减,结果放入寄存器对。

6.减1 指令 

DEC Rd   0≤d≤31  

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

取反码指令

COM Rd   0≤d≤31 

说明:该指令完成对寄存器 Rd 的二进制反码操作。 

操作:Rd←$FF-Rd PC←PC+1  机器码:1001 010d dddd 0000

取补码指令

NEG Rd  0≤d≤31 

说明:寄存器 Rd 的内容转换成二进制补码值。 

操作:Rd←$00-Rd PC←PC+1  机器码:1001 010d dddd 0001

比较指令

1.寄存器比较 

CP Rd,Rr  0≤d≤31,0≤r≤31 

说明:该指令完成两个寄存器 Rd 和 Rr 相比较操作,而寄存器的内容不改变,该指令

后能使用所有条件跳转指令。

2.带进位比较 

CPC Rd,Rr 0≤d≤31, 0≤r≤31 

说明:该指令完成寄存器 Rd 的值和寄存器 Rr 加 C 相比较操作,而寄存器的内容不改

变,该指令后能使用所有条件跳转指令。

3.与立即数(字节)比较 

CPI Rd,K  16≤d≤31,0≤K≤255

说明:该指令完成寄存器 Rd 和常数的比较操作,寄存器的内容不改变,该指令后能使

用所有条件跳转指令。

逻辑与指令

1.寄存器逻辑与 

AND Rd,Rr  0≤d≤31,0≤d≤31 

说明:寄存器 Rd 和寄存器 Rr 的内容逻辑与,结果送目的寄存器 Rd。

2.与立即数(字节) 

ANDI Rd,K  16≤d≤31,0≤K≤255  

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

3.寄存器位清零 

CBR Rd,K  16≤d≤31,0≤K≤255 

说明:清除寄存器 Rd 中的指定位,利用寄存器 Rd 的内容与常数表征码 K 的补码相与,

其结果放在寄存器 Rd 中。

4.测试寄存器为零或负 

TST Rd  0≤d≤31 

说明:测试寄存器为零或负,实现寄存器内容自己同自己的逻辑与操作,而寄存器内

容不改变。

逻辑或指令

1.寄存器逻辑或 

OR Rd,Rr  0≤d≤31, 0≤r≤31 

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

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

2.或立即数(字节)

ORI Rd,K  16≤d≤31, 0≤K≤255 

说明:完成寄存器 Rd 的内容与常量 K 逻辑或操作,结果送目的寄存器 Rd中。

3.置寄存器位 

SBR Rd,K  16≤d≤31, 0≤K≤255 

说明:用于对寄存器 Rd 中指定位置位。完成寄存器 Rd 和常数表征码 K 之间的逻辑或

操作,结果送目的寄存器 Rd。

4.置寄存器为$FF 

SER Rd  16≤d≤31 

说明:直接装入$FF 到寄存器 Rd。

逻辑异或指令

1.寄存器异或 

EOR Rd,Rr      0≤d≤31, 0≤r≤31 

说明:完成寄存器 Rd 和寄存器 Rr 的内容逻辑异或操作,结果送目的寄存器 Rd。

2.寄存器清零 

CLR Rd  0≤d≤31 

说明:寄存器清零。该指令采用寄存器 Rd 与自己的内容相异或实现的寄存器的所有位

都被清零。

乘法指令

1.无符号数乘法 

MUL Rd,Rr  0≤d≤31, 0≤r≤31 

说明: 该指令完成将寄存器 Rd 和寄存器 Rr 的内容作为两个无符号 8 位数的乘法操作,

结果为 16 位的无符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。如果操作数为寄存器 R1 或 R0,则结果会将原操作数覆盖。

2.有符号数乘法 

MULS Rd,Rr  16≤d≤31, 16≤r≤31 

说明: 该指令完成将寄存器 Rd 和寄存器 Rr 的内容作为两个 8位有符号数的乘法操作,

结果为 16 位的有符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R31。

3.有符号数与无符号数乘法 

MULSU Rd,Rr  16≤d≤23, 16≤r≤23 

说明:该指令完成将寄存器 Rd(8 位,有符号数)和寄存器 Rr(8 位,无符号数)的

内容相乘操作,结果为 16 位的有符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。

源操作数为寄存器 R16~R23。

4.无符号定点小数乘法 

FMUL Rd,Rr  16≤d≤23, 16≤r≤23 

说明:该指令完成将寄存器 Rd(8 位无符号数)和寄存器 Rr(8 位无符号数)的内容相乘操作,结果为 16 位的无符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。

5.有符号定点小数乘法 

FMULS Rd,Rr  16≤d≤23, 16≤r≤23 

说明:该指令完成寄存器 Rd(8 位带符号数)和寄存器 Rr(8 位带符号数)的内容相乘操作,结果为 16 位的带符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。

6.有符号定点小数和无符号定点小数乘法 

FMULSU Rd,Rr  16≤d≤23, 16≤r≤23 

说明:该指令完成寄存器 Rd(8 位带符号数)和寄存器 Rr(8 位无符号数)的内容相乘操作,结果为 16 位的带符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。

跳 转 指 令

无条件跳转指令

1.相对跳转 

RJMP k  -2048≤k≤2047  

说明:相对跳转到 PC-2048~PC+2047字范围内的地址,在汇编程序中,用目的地址的标号替代相对跳转字 k。

2.间接跳转 

IJMP  

说明:间接跳转到 Z 指针寄存器指向的 16 位地址。Z 指针寄存器是 16 位宽,允许在

当前程序存储器空间 K 字(128K字节)内跳转。

3.直接跳转 

JMP k  0≤k≤4194303  

说明:直接跳转到 k 地址处,在汇编程序中,用目的地址的标号替代跳转字 k。

条件跳转指令

1.测试条件符合跳转指令 

(1)状态寄存器中位为“1”跳转 

BRBS s,k   0≤s≤7,-≤k≤63  

说明:执行该指令时,PC 先加 1,再测试 SREG 的 s 位,如果该位被置位,则跳转 k

个字,k 为 7 位带符号数,最多可向前跳 63 个字,向后跳  个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字 k。

(2)状态寄存器中位为“0”跳转 

BRBC s,k  0≤s≤7,-≤k≤63 

说明:执行该指令时,PC 先加 1,再测试 SREG 的 s 位,如果该位被清零,则跳转 k

个字,k 为 7 位带符号数,最多可向前跳 63 个字,向后跳  个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字 k。

(3)相等跳转 

BREQ k   -≤k≤63   

说明:条件相对跳转,测试零标志位 Z,如果Z位被置位,则相对 PC 值跳转 k 个字。

如果在执行 CP、CPI、SUB 或 SUBI 指令后,立即执行该指令,且当寄存器 Rd 中数与寄存器 Rr 中数相等时,将发生跳转。这条指令相当于指令 BRBS 1,k。

(4)不相等跳转 

BRNE k  -≤k≤63 

说明:条件相对跳转,测试零标志位 Z,如果Z位被清零,则相对 PC 值跳转 k 个字。这条指令相当于指令 BRBC 1,k.

(5)进位标志位 C 为“1”跳转 

BRCS k  -≤k≤63 

说明:条件相对跳转,测试进位标志 C,如果C位被置位,则相对 PC 值跳转 k 个字。

这条指令相当于指令 BRBS 0,k。

(6)进位标志位 C 为“0”跳转 

BRCC k  -≤k≤63  

说明:条件相对跳转,测试进位标志 C,如果C位被清除,则相对 PC 值跳转 k 个字。

这条指令相当于指令 BRBC 0,k。

(7)大于或等于跳转(对无符号数) 

BRSH k  -≤k≤63 

说明:条件相对跳转,测试进位标志 C,如果C位被清零,则相对 PC 值跳转 k 个字。

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

(8)小于跳转(对无符号数) 

BRLO k  -≤k≤63  

说明:条件相对跳转,测试进位标志 C,如果C位被置位,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中无符号二进制数小于在寄存器Rr中无符号二进制数时,将发生跳转。该指令相当于指令BRBS 0,k

(9)结果为负跳转 

BRMI k  -≤k≤63 

说明:条件相对跳转,测试负号标志 N,如果N位被置位,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBS 2,k

(10)结果为正跳转 

BRPL k  -≤k≤63  

说明:条件相对跳转,测试负号标志 N,如果N位被清零,则相对 PC 值跳转 k 个字。

该指令相当于指令 BRBC 2,k 

 

(11)大于或等于跳转(带符号数) 

BRGE k  -≤k≤63 

说明:条件相对跳转,测试符号标志 S,如果S位被清零,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB 或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中带符号二进制数大于或等于寄存器Rr中带符号二进制数时, 将发生跳转。 该指令相当于指令 BRBC  4,k。

(12)小于跳转(带符号数) 

BRLT k  -≤k≤63 

说明:条件相对跳转,测试符号标志 S,如果S位被置位,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中带符号二进制数小于在寄存器 Rr 中带符号二进制数时,将发生跳转。该指令相当于指令 BRBS 4,k

(13)半进位标志为“1”跳转 

BRHS k  -≤k≤63 

说明:条件相对跳转,测试半进位标志 H,如果 H 位被置位,则相对 PC 值跳转k 个字。该指令相当于指令 BRBS 5,k。

(14)半进位标志为“0”跳转 

BRHC k  -≤k≤63 

说明:条件相对跳转,测试半进位标志 H,如果 H 位被清零,则相对 PC 值跳转k 个字。该指令相当于指令 BRBC 5,k。

(15)T 标志为“1”跳转 

BRTS k  -≤k≤63 

说明:条件相对跳转,测试标志位 T,如果标志位 T 被置位,则相对 PC值跳转 k 个字。该指令相当于指令 BRBS 6,k。

(16)T 标志为“0”跳转 

BRTC k  -≤k≤63 

说明:条件相对跳转,测试 T 标志位,如果标志位 T 被清零,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBC 6,k。

(17)溢出标志为“1”跳转 

BRVS k  -≤k≤63  

说明:条件相对跳转,测试溢出标志 V,如果V位被置位,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBS 3,k。

(18)溢出标志为“0”跳转 

BRVC k  -≤k≤63 

说明:条件相对跳转,测试溢出标志 V,如果V位被清零,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBC 3,k。

(19)中断标志为“1”跳转 

BRIE k  -≤k≤63 

说明:条件相对跳转,测试全局中断允许标志 I,如果I 位被置位,则相对 PC 值跳转k 个字。该指令相当于指令 BRBS 7,k。

(20)中断标志为“0”跳转 

BRID k  -≤k≤63 

说明:条件相对跳转,测试全局中断允许标志 I,如果I 位被清零,则相对 PC 值跳转k 个字。该指令相当于指令 BRBC 7,k。

2.测试条件符合跳行跳转指令 

(1)相等跳行 

CPSE Rd,Rr  0≤d≤31, 0≤r≤31 

说明:该指令完成两个寄存器 Rd 和Rr 的比较,若 Rd=Rr,则跳一行执行指令。

(2)寄存器位为“0”跳行 

SBRC Rr,b  0≤r≤31, 0≤b≤7 

说明:该指令测试寄存器第 b 位,如果该位被清零,则跳一行执行指令。

(3)寄存器位为“1”跳行 

SBRS Rr,b  0≤r≤31, 0≤b≤7  

说明:该指令测试寄存器第 b 位,如果该位被置位,则跳下一行执行指令。

(4)I/O 寄存器位为“0”跳行 

SBIC P,b  0≤P≤31, 0≤b≤7 

说明:该指令测试 I/O 寄存器第 b 位,如果该位被清零,则跳一行执行指令。该指令只在低 32 个I/O 寄存器内操作,地址为 I/O 寄存器空间的 0~31。

(5)I/O 寄存器位为“1”跳行 

SBIS P,b  0≤P≤31,0≤b≤7 

说明:该指令测试 I/O 寄存器第 b 位,如果该位被置位,则跳一行执行指令。该指令只在低 32 个I/O 寄存器内操作,地址为 I/O 寄存器空间的 0~31。

子程序调用和返回指令

1.相对调用 

RCALL k  -2048≤k≤2047 

说明:将 PC+1 后的值(RCALL 指令后的下一条指令地址)压入堆栈,然后调用在当前PC 前或后 k+1 处地址的子程序。

2.间接调用 

ICALL 

说明:间接调用由 Z 寄存器中(16 位指针寄存器)指向的子程序。地址指针寄存器 Z为 16 位,允许调用在当前程序存储空间 K 字(128K 字节)内的子程序。

3.直接调用 

CALL k  0≤k≤65535 

说明:将 PC+2 后的值(CALL 指令后的下一条指令地址)压入堆栈,然后直接调用 k处地址的子程序。

4.从子程序返回 

RET  

说明:从子程序返回,返回地址从堆栈中弹出。

5.从中断程序返回 

RETI  

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

数据传送指令

1.工作寄存器间传送数据

MOV Rd,Rr  0≤d≤31,0≤r≤31  

说明:该指令将一个寄存器内容传送到另一个寄存器中,源寄存器 Rr的内容不改变,而目的寄存器 Rd 复制了Rr 的内容。

2.SRAM 数据直接送寄存器 

LDS Rd,k  0≤d≤31, 0≤k≤65535  

说明:把 SRAM 中一个存储单元的内容(字节)装入到寄存器,其中 k 为该存储单元的16 位地址。

3.寄存器数据直接送 SRAM 

STS k,Rr  0≤r≤31, 0≤k≤65535  

说明:将寄存器的内容直接存储到 SRAM 中,其中 k 为存储单元的 16 位地址。

4.立即数送寄存器 

LDI Rd,K  16≤d≤31, 0≤K≤255  

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

间接寻址数据传送指令

1.使用X 指针寄存器间接寻址传送数据 

(1)使用地址指针寄存器 X 间接寻址将 SRAM 内容装入到指定寄存器 

①LD Rd,X  0≤d≤31;将指针为 X的 SRAM 中的数送寄存器,指针不变。 

②LD Rd,X+      0≤d≤31;先将指针为 X 的SRAM 中的数送寄存器,X 指针加 1。 

③LD Rd,-X 0≤d≤31;X 指针减1,将指针为 X的 SRAM 中的数送寄存器。 

(2)使用地址指针寄存器 X 间接寻址将寄存器内容存储到 SRAM 

①ST X,Rr  0≤d≤31;将寄存器内容送 X 为指针的 SRAM 中,X 指针不改变。 

②ST X,Rr  0≤d≤31;先将寄存器内容送 X 为指针的 SRAM中,后 X 指针加 1。 

③ST -X,Rr  0≤d≤31;先将 X 指针减 1,然后将寄存器内容送 X 为指针的 SRAM中。 

2.使用Y 指针寄存器间接寻址传送数据 

(1)使用地址指针寄存器 Y 间接寻址将 SRAM 中的内容装入寄存器 

①LD Rd,Y  0≤d≤31;将指针为 Y的 SRAM 中的数送寄存器,Y 指针不变。 

②LD Rd,Y+  0≤d≤31; 先将指针为 Y的 SRAM 中的数送寄存器, 然后 Y 指针加 1。  

③LD Rd,-Y  0≤d≤31;先将 Y 指针减 1,将指针为 Y 的SRAM中的数送寄存器。 

④LDD Rd,Y+q  0≤d≤31,0≤q≤63;将指针为 Y+q的 SRAM 中的数送寄存器,而 Y 指针不改变。 

(2)使用地址指针寄存器 Y 间接寻址将寄存器内容存储到 SRAM 

①ST Y,Rr  0≤d≤31;将寄存器内容送 Y 为指针的 SRAM 中,Y 指针不改变。 

②ST Y+,Rr  0≤d≤31; 先将寄存器内容送 Y 为指针的 SRAM 中, 然后 Y 指针加 1。  

③ST –Y,Rr  0≤d≤31;先将 Y 指针减 1,然后将寄存器内容送 Y 为指针的SRAM 中。 

④STD Y+q,Rr  0≤d≤31,0≤q≤63;将寄存器内容送 Y+q 为指针的 SRAM 中。 

3.使用Z 指针寄存器间接寻址传送数据 

(1)使用地址指针寄存器 Z 间接寻址将 SRAM 中的内容装入到指定寄存器 

①LD Rd,Z  0≤d≤31;将指针为 Z的 SRAM 中的数送寄存器,Z 指针不变。 

②LD Rd,Z+  0≤d≤31;先将指针为Z的SRAM中的数送寄存器,然后Z指针加1。 

③LD Rd,-Z  0≤d≤31;先将Z 指针减1,然后将指针为Z 的SRAM 中的数送寄存器。  

④LDD Rd,Z+q  0≤d≤31,0≤q≤63;将指针为 Z+q的 SRAM 中的数送寄存器,而 Z 指针不改变。 

(2)使用地址指针寄存器 Z 间接寻址将寄存器内容存储到 SRAM 

①ST Z,Rr  0≤d≤31;将寄存器内容送 Z 为指针的 SRAM 中,Z 指针不改变。 

②ST Z+,Rr  0≤d≤31;先将寄存器内容送Z为指针的SRAM中,然后Z指针加1。 

③ST -Z,Rr  0≤d≤31;先将 Z 指针减 1,然后将寄存器内容送 Z 为指针的SRAM 中。 

④STD Z+q,Rr  0≤d≤31,0≤q≤63;将寄存器内容送 Z+q 为指针的 SRAM 中。 

以上 22 条指令操作之后,X、Y、Z 指针寄存器要么不改变,要么是加 1 或减 1。使用

X、Y、Z 指针寄存器的这些特性特别适用于访问矩阵表和堆栈指针等。

从程序存储器中取数装入寄存器指令

1.从程序存储器中取数装入寄存器 R0

LPM 

说明:将 Z指向的程序存储器空间的一个字节装入寄存器 R0。

2.从程序存储器中取数装入寄存器 

LPM Rd,Z 0≤d≤31 

说明:将 Z指向的程序存储器空间的一个字节装入寄存器 Rd。

3.带后增量的从程序存储器中取数装入寄存器 Rd 

LPM Rd,Z+ 

说明:将 Z指向的程序存储器空间的一个字节装入 Rd,然后 Z 指针加1。

4.从程序存储器中取数装入寄存器 R0(扩展) 

ELPM 

说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入寄存器 R0。

5.从程序存储器中取数装入寄存器(扩展) 

ELPM Rd,Z 0≤d≤31 

说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入寄存器 Rd。

6.带后增量的从程序存储器中取数装入寄存器 Rd(扩展) 

LPM Rd,Z+ 

说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入 Rd,然后 RAMPZ:Z 指针加1。

写程序存储器指令

SPM 

说明:将寄存器对 R1:R0 的内容(16 位字)写入 Z 指向的程序存储器空间。

I/O口数据传送

1.I/O 口数据装入寄存器 

IN Rd,P  0≤d≤31, 0≤P≤63  

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

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

OUT P,Rr   0≤r≤31, 0≤P≤63  

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

堆栈操作指令

1.进栈指令 

PUSH Rr  0≤d≤31

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

2.出栈指令 

POP Rd  0≤d≤31

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

位操作和位测试指令

带进位逻辑操作指令

1.寄存器逻辑左移 

LSL Rd  0≤d≤31  

说明:寄存器 Rd 中所有位左移 1 位,第 0 位被清零,第 7 位移到 SREG 中的 C 标志。该指令完成一个无符号数乘 2 的操作。 

操作:C←b b b b b b b b ←0  PC←PC+1  机器码:0000 11dd dddd dddd

2.寄存器逻辑右移 

LSR Rd  0≤d≤31  

说明:寄存器 Rd 中所有位右移 1 位,第 7 位被清零,第 0 位移到 SREG 中的 C 标志。该指令完成一个无符号数除 2 的操作,C 标志被用于结果舍入。 

操作:0→b7b6b5b4b3b2b1b0→C  PC←PC+1  机器码:1001 010d dddd 0110

3.带进位位的寄存器逻辑循环左移 

ROL Rd  0≤d≤31  

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

操作:C←b7b6b5b4b3b2b1b0←C PC←PC+1  (参见 ADC 指令)

4.带进位位的寄存器逻辑循环右移 

ROR Rd  0≤d≤31 

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

操作:C→b7b6b5b4b3b2b1b0→C PC←PC+1  机器码:1001 010d dddd 0111

5.寄存器算术右移   

ASR Rd  0≤d≤31 

说明:寄存器 Rd 中的所有位右移 1 位,而第 7 位保持原逻辑值,第 0 位被装入 SREG

的 C 标志位。这个操作实现 2 的补码值除 2,而不改变符号,进位标志用于结果的舍入。

6.寄存器半字节交换 

SWAP Rd  0≤d≤31  

说明:寄存器中的高半字节和低半字节交换。

位变量传送指令

1.寄存器中的位存储到 SREG 中的T 标志 

BST Rr,b  0≤d≤31,0≤b≤7 

说明:把寄存器 Rr 中的位 b 存储到SREG 状态寄存器中的 T 标志位中。

2.SREG 中的 T 标志位值装入寄存器 Rd 中的某一位 

BLD Rd,d  0≤d≤31,0≤b≤7 

说明:复制 SREG 状态寄存器的 T 标志到寄存器 Rd中的位 b。

位变量修改指令

1.状态寄存器 SREG 的指定位置“1” 

BSET s  0≤s≤7 

说明:置“1”状态寄存器 SREG 的某一标志位。

2.状态寄存器 SREG 的指定位清“0” 

BCLR s  0≤s≤7 

说明:清零 SREG 状态寄存器 SREG 中的一个标志位。

3.I/O 寄存器的指定位置“1” 

SBI P,b  0≤P≤31, 0≤b≤7 

说明: 对 P 指定的 I/O 寄存器的指定位置 “1” 。 该指令只在低 32 个I/O 寄存器内操作,I/O 寄存器地址为 0~31。

4.I/O 寄存器的指定位置“0” 

CBI P,b  0≤P≤31,0≤b≤7  

说明:清零指定 I/O 寄存器中的指定位。 该指令只用在低 32 个I/O 寄存器上操作, I/O寄存器地址为 0~31。

5.置进位位 

SEC  置位 SREG 状态寄存器中的进位标志 C

6.清进位位 

CLC  清零 SREG 状态寄存器中的进位标志 C

7.置位负标志位 

SEN  置位 SREG 状态寄存器中的负数标志 N  

8.清负标志位 

CLN 清零 SREG 状态寄存器中的负数标志 N

9.置零标志位 

SEZ  置位 SREG 状态寄存器中的零标志 Z

10.清零标志位 

CLZ  清零 SREG 状态寄存器中的零标志 Z

11.触发全局中断位 

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

12.禁止全局中断位 

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

13.置S 标志位 

SES  置位 SREG 状态寄存器中的符号标志 S

14.清S 标志位 

CLS  清零 SREG 状态寄存器中的符号标志 S

15.置溢出标志位 

SEV  置位 SREG 状态寄存器中的溢出标志 V

16.清溢出标志位 

CLV  清零 SREG 状态寄存器中的溢出标志 V

17.置T 标志位 

SET  置位 SREG 状态寄存器中的 T 标志

18.清T 标志位 

CLT  清零 SREG 状态寄存器中的 T 标志

19.置半进位标志 

SHE  置位 SREG 状态寄存器中的半进位标志 H

20.清半进位标志 

CLH 清零 SREG 状态寄存器中的半进位标志 H

MCU控制指令

1.空操作指令 

NOP

2.进入休眠方式指令 

SLEEP 

说明:该指令使 MCU 进入休眠方式运行。休眠模式由 MCU 控制寄存器定义。当 MCU 在休眠状态下由一个中断被唤醒时,在中断程序执行后,紧跟在休眠指令后的指令将被执行。

3.清零看门狗计数器 

WDR 

说明:该指令清零看门狗定时器。在允许使用看门狗定时器情况下,系统程序在正常运行中必须在 WD 预定比例器给出限定时间内执行一次该指令,以防止看门狗定时器溢出,造成系统复位。参见看门狗定时器硬件部分。

表3-6  伪指令表 

序  号  伪 指 令 说    明  序  号 伪 指 令 说    明 

1  BYTE  在RAM中定义预留存储单元 10  EXIT  退出文件 

2  CSEG  声明代码段  11  INCLUDE  包含指定的文件 

3  DB  定义字节常数  12  MACRO  宏定义开始 

4  DEF  定义寄存器符号名  13  ENDMACRO 宏定义结束 

5  DEVICE  指定为何器件生成汇编代码 14  LISTMAC  列表宏表达式 

6  DSEG  声明数据段  15  LIST  列表文件生成允许器 

7  DW  定义字常数  16  NOLIST  关闭列表文件生成 

8  EQU  定义标识符常量  17  ORG  设置程序起始位置 

9  ESEG  声名E2

PROM段  18  SET  赋值给标识符 

伪指令表

序号伪 指 令

说    明

伪 指 令

说    明

1BYTE在RAM中定义预留存储单元

10EXIT退出文件
2CSEG声明代码段11INCLUDE包含指定的文件
3DB定义字节常数12MACRO宏定义开始
4DEF定义寄存器符号名13ENDMACRO宏定义结束
5DEVICE指定为何器件生成汇编代码14LISTMAC列表宏表达式
6DSEG声明数据段15LIST列表文件生成允许器
7DW定义字常数16NOLIST关闭列表文件生成
8EQU定义标识符常量17ORG设置程序起始位置
9ESEG声名E2PROM段

18SET赋值给标识符

文档

AVR ATmega16指令大全

状态寄存器与标志位SREG:8位状态寄存器,其中每一位的定义为:C:进位标志位Z:结果为零标志位N:结果为负数标志位V:2的补码溢出标志位S:N⊕V,用于符号测试的标志位H:操作中产生半进位的标志位T:用于和BLD、BST指令进行位数据交换的位I:全局中断触发/禁止标志位算术和逻辑指令加法指令1.不带进位位加法ADDRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器不带进位C标志相加,结果送目的寄存器Rd。2.带进位位加法ADCRd,Rr0≤d≤31,0≤r≤31说明:两个寄存器和C标志的内
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top