您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第3章-ATmega-单片机的指令系统
广西大学电气工程学院海涛第3章ATmega单片机的指令系统第3章ATmega单片机的指令系统•内容提要:•本章主要介绍了ATmega单片机的指令系统、寻址方式和寻址空间。•指令系统按功能可分为五大类,即算术和逻辑运算指令、比较和转移指令、数据传送指令、位操作和位测试指令、MCU控制指令广西大学电气工程学院海涛第3章ATmega单片机的指令系统3.1ATmega指令系统概述•C程序由一条条指令组合在一起以完成某种功能,所以编写C语言程序,学习C语言指令系统是关键。编写C程序就好像建房子,一条条指令就是砖瓦,把这些砖瓦有机堆砌起来就能建好房子。•ATmega指令系统是RISC结构的精简指令集,是一种简明的、易掌握的、效率高的指令系统,具有高性能的数据处理能力,能对位、半字节、字节和双字节数据进行各种操作,包括算术和逻辑运算、数据传送、布尔处理、控制转移和硬件乘法等操作。广西大学电气工程学院海涛第3章ATmega单片机的指令系统•ATmega指令系统按功能可分为五大类:•1、算术和逻辑运算指令•2、比较和转移指令•3、数据传送指令•4、位操作和位测试指令•5、MCU控制指令3.1.1ATmega指令系统的分类广西大学电气工程学院海涛第3章ATmega单片机的指令系统3.1.2ATmega寻址方式和寻址空间•指令的一个重要组成部分就是操作数。指令给出参与运算的数据的方式称为寻址方式。ATmega指令操作数的寻址方式有以下几种:单寄存器直接寻址、双寄存器直接寻址、I/O寄存器直接寻址、数据寄存器直接寻址、数据存储器间接寻址、带后增量的数据存储器间接寻址、带预减量的数据存储器间接寻址、带位移的数据存储器间接寻址、程序存储器取常量寻址、程序存储器空间直接寻址、程序存储器空间间接寻址、程序相对寻址等。广西大学电气工程学院海涛第3章ATmega单片机的指令系统1、单寄存器直接寻址•由指令指出一个寄存器的内容作为操作数,在指令中给出寄存器的直接地址,这种寻址方式称为单寄存器直接寻址。单寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31(取决于不同指令)。•例3.1INCRd;操作:Rd←Rd+1。•INCR5;将寄存器R5内容加1回放。广西大学电气工程学院海涛第3章ATmega单片机的指令系统2、双寄存器直接寻址•双寄存器直接寻址方式与单寄存器直接寻址方式相似,它是将指令的两个寄存器Rd和Rr的内容作为操作数,而结果存放在Rd寄存器中。指令中同时给出两个寄存器的直接地址,这种寻址方式称为双寄存器直接寻址。双寄存器寻址的地址范围限制为通用工作寄存器组中的32个寄存器R0~R31,或后16个寄存器R16~R31,或后8个寄存器R16~R23(取决于不同指令)。•例3.2ADDRd,Rr;操作:Rd←Rd+Rr。•ADDR0,R1;将R0和R1寄存器内容相加,结果回放R0。广西大学电气工程学院海涛第3章ATmega单片机的指令系统3、I/O寄存器直接寻址•由指令指出一个I/O寄存器的内容作为操作数。在指令中直接给出I/O寄存器的地址,这种方式称为I/O寄存器直接寻址。I/O寄存器直接寻址的地址使用I/O寄存器空间的地址$00~$3F,共64个,取值为0~63或0~31(取决于指令)。•例3.3INRd,P;操作:Rd←P。•INR5,$3E;读I/O空间地址为$3E寄存器(SPH)的内容,放入寄存器R5。广西大学电气工程学院海涛第3章ATmega单片机的指令系统4、数据存储器空间直接寻址•数据存储器空间直接寻址方式便于直接从SRAM存储器中存取数据。数据存储器空间直接寻址为双字节指令,在指令的低字节中指出一个16位的SRAM地址。•例3.4LDSRd,K;操作:Rd←(K)。•LDSR18,$100;读地址为$100的SRAM中内容,传送到R18中。•指令中16位SRAM的地址字长度限定了SRAM的地址空间为64K字节,该地址空间实际包含了32个通用寄存器和64个I/O寄存器。因此,也可能使用数据存储器空间直接寻址的方式读取通用寄存器或I/O寄存器中的内容。但效率比使用寄存器直接寻址的方式要低。广西大学电气工程学院海涛第3章ATmega单片机的指令系统5、数据存储器空间的寄存器间接寻址•由指令指出某一个16位寄存器的内容作为操作数在SRAM中的地址,该寻址方式称为数据存储器空间的寄存器间接寻址。ATmega系列单片机中使用16位寄存器X、Y或Z作为规定的地址指针寄存器,因此操作数的SRAM地址在间址寄存器X、Y或Z中。•例3.5LDRd,Y;操作:Rd←(Y),把以Y为指针的SRAM的内容送Rd。•LDR16,Y;设Y=$0567,即把SRAM地址为$0567的内容传送到R16。广西大学电气工程学院海涛第3章ATmega单片机的指令系统6、带增量的数据存储器空间的寄存器间接寻址•这种寻址方式类似于数据存储器空间的寄存器间接寻址方式,间址寄存器X、Y、Z中的内容仍为操作数在SRAM空间的地址,但指令在间接寻址操作后,再自动把间址寄存器中的内容加1。这种寻址方式特别适用于访问矩阵、查表等应用。•例3.6LDRd,Y+;操作:Rd←(Y),Y=Y+1,先把以Y为指针的SRAM的内容送Rd,再把Y增1。•LDR16,Y+;设原Y=$0567,即把SRAM地址为$0567的内容传送到R16中,再将Y的值加1,操作完成后Y=$0568。广西大学电气工程学院海涛第3章ATmega单片机的指令系统7、带预减量的数据存储器空间寄存器间接寻址•这种寻址方式类似于数据存储器空间的寄存器间接寻址方式,间址寄存器X、Y、Z中的内容仍为操作数在SRAM空间的地址,但指令在间接寻址操作之前,先自动将间址寄存器中的内容减1,然后把减1后的内容作为操作数在SRAM空间的地址。这种寻址方式也特别适用于访问矩阵、查表等应用。•例3.7LDRd,-Y;操作:Y=Y-1,Rd←(Y),先把Y减1,再把以Y为指针的SRAM的内容送Rd。广西大学电气工程学院海涛第3章ATmega单片机的指令系统8、带位移的数据存储器空间寄存器间接寻址•带位移的数据存储器空间寄存器间接寻址方式是:由间址寄存器(Y或Z)及指令字中给出的地址偏移量共同决定操作数在SRAM空间的地址,偏移量的范围为0~63。•例3.8LDDRd,Y+q;操作:Rd←(Y+q),其中0≤q≤63,即把以Y+q为指针的SRAM的内容送Rd,而Y寄存器的内容不变。•LDDR16,Y+31;设Y=$0567,即把SRAM地址为$0598的内容传送到R16中,Y寄存器中的内容不变。广西大学电气工程学院海涛第3章ATmega单片机的指令系统9、程序存储器空间取常量寻址•程序存储器空间取常量寻址主要从程序存储器Flash中取常量,此种寻址方式只用于指令LPM。程序存储器中常量字节的地址由地址寄存器Z的内容确定。•例3.9LPM;操作:R0←(Z),即把以Z为指针的程序存储器的内容送R0。•若Z=$0100,即把地址为$0080的程序存储器的低字节内容送R0。•若Z=$0101,即把地址为$0080的程序存储器的高字节内容送R0。广西大学电气工程学院海涛第3章ATmega单片机的指令系统10、带后增量的程序存储器空间取常量寻址•带后增量的程序存储器空间取常量寻址主要从程序存储器Flash中取常量,此种寻址方式只用于指令LPMRd,Z+。程序存储器中常量字节的地址由地址寄存器Z的内容确定。Z寄存器的高15位用于选择字地址(程序存储器的存储单元为字),而Z寄存器的最低位Z(d0)用于确定字地址的高/低字节。若d0=0,则选择字的低字节;若d0=1,则选择字的高字节。寻址操作后,Z寄存器的内容加1。广西大学电气工程学院海涛第3章ATmega单片机的指令系统11、程序存储器空间写数据寻址•程序存储器空间写数据寻址主要用于可进行在系统自编程的AVR单片机,此种寻址方式只用于指令SPM。该指令将寄存器R1和R0中的内容组成一个字R1∶R0,然后写入由Z寄存器的内容作为地址的程序存储器单元中。•例3.12SPM;操作:(Z)←R1∶R0,把R1∶R0内容写入以Z为指针的程序存储器单元。广西大学电气工程学院海涛第3章ATmega单片机的指令系统12、程序存储器空间直接寻址•程序存储器空间直接寻址方式用于程序的无条件转移指令JMP、CALL。指令中含有一个16位的操作数,指令将操作数存入程序寄存器PC中,作为下一条要执行的指令在程序存储器空间的地址。JMP类指令和CALL类指令的寻址方式相同,但CALL类的指令还包括了返回地址的压进堆栈和堆栈指针寄存器SP内容减2的操作。•例3.13JMP$0100;操作:PC←$0100。程序计数器PC的值设置为$0100。接下来执行程序存储器$0100单元的指令代码。广西大学电气工程学院海涛第3章ATmega单片机的指令系统13、程序存储器空间Z寄存器间接寻址•程序存储器空间间接寻址方式是使用Z寄存器存放下一步要执行指令代码程序地址,程序转到Z寄存器内容所指定程序存储器的地址处继续执行,即用寄存器Z的内容代替PC的值。此寻址方式用于IJMP、ICALL指令。•例3.15LJMP;操作:PC←Z,即把Z的内容送程序计数器PC。若Z=$0100,即把$0100送程序计数器PC,接下来执行程序存储器$0100单元的指令代码。广西大学电气工程学院海涛第3章ATmega单片机的指令系统14、程序存储器空间相对寻址•在程序存储器空间相对寻址方式中,在指令中包含一个相对偏移量k,指令执行时,首先将当前程序计数器PC值加1后再与偏移量k相加,作为程序下条要执行指令的地址。此寻址方式用于RJMP,RCALL指令。•例3.17RJMP$0100;操作:PC←PC+1+$0100。若当前指令地址为$0200(PC=$0200),即把$0301送程序计数器PC,接下来执行程序存储器$0301单元的指令代码。广西大学电气工程学院海涛第3章ATmega单片机的指令系统15、数据存储器空间堆栈寄存器SP间接寻址•数据存储器空间堆栈寄存器SP间接寻址是将16位的堆栈寄存器SP的内容作为操作数在SRAM空间的地址,此寻址方式用于PUSH,POP指令。•例3.19PUSHR0;操作:STACK←RU;SP←SP-1。若当前SP=$045F,先把寄存器R0的内容送到SRAM的$045F单元,再将SP内容减I,即SP=$045E。•例3.20POPR1;操作:5P←SP+1;R1←STACK。若当前SP=$045E,先将SP内容加1,再把SRAM的$045F单元内容送到寄存器R1,此时SP=$045F。广西大学电气工程学院海涛第3章ATmega单片机的指令系统3.2ATmega指令分类介绍•AVR的算术运算指令有加、减、乘法、取反、取补、比较指令、增量和减量指令。逻辑运算指令有与、或和异或指令等。广西大学电气工程学院海涛第3章ATmega单片机的指令系统1、加法指令•⑴不带进位位加法•ADDRd,Rr0≤d≤31,0≤r≤31•说明:两个寄存器不带进位C标志相加,结果送目的寄存器Rd。•操作:Rd←Rd+RrPC←PC+1•机器码:000011rdddddrrrr•对标志位的影响:HSVNZC•⑵带进位位加法•ADCRd,Rr,0≤r≤31•说明:两个寄存器和C标志的内容相加,结果送目的寄存器Rd。广西大学电气工程学院海涛第3章ATmega单片机的指令系统•⑶字加立即数•ADIWRd1,Kd1为:24、26、28、30,0≤K≤63•说明:寄存器对(字)同立即数(0~63)相加,结果放到寄存器对。•操作:Rdh:Rd1←Rdh:Rd1+KPC←PC+1•机器码:10010110KKddKKKK•对标志位的影响:SVNZC•注意:d1只能取24、26、28、30,即仅用于最后4个寄存器对。K为6位二进制无符号数(0~63)。广西大学电气工程学院海涛第3章ATmega单片机的指令系统•⑷增1指令•INCRd
本文标题:第3章-ATmega-单片机的指令系统
链接地址:https://www.777doc.com/doc-4859317 .html