预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共40页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第3章AVR的指令与汇编系统基于AVR的单片嵌入式系统原理与实践应用华东师范大学电子科学技术系马潮3-第3章AVR的指令与汇编系统传统的8位单片机(如最典型的8051结构的单片机)大都采用复杂指令CISC(ComplexInstructionSetComputer)系统体系。由于CISC结构存在指令系统不等长,指令数多,CPU利用效率低,执行速度慢等缺陷,已不能满足和适应设计高档电子产品和嵌入式系统应用的需要。作为8位的AVR单片机来讲,除了其具备比较完善和功能强大的硬件结构和组成外,其更重要的是它的内核和指令系统为先进的RISC体系结构,采用了大型快速存取寄存器组(32个通用工作寄存器)、快速的单周期指令系统以及单级流水线等先进技术。因此,AVR内核核指令系统的显著特点有:16/32位定长指令AVR的一个指令字为16位或32位,其中大部分的指令为16位。采用定长指令,不仅使取指操作简单,提高了取指令的速度;同时也降低了在取指操作过程中的错误,提高了系统的可靠性。流水线操作AVR采用流水线技术,在前一条指令执行的时候,就取出现行的指令,然后以一个周期执行指令。大大提高了CPU的运行速度。3.大型快速存取寄存器组传统的基于累加器的结构单片机(如8051),需要大量的程序代码来完成和实现在累加器和存储器之间的数据传送。而在AVR单片机中,采用32个通用工作寄存器构成大型快速存取寄存器组,用32个通用工作寄存器代替了累加器(相当有32个累加器),从而避免了传统结构中累加器和存储器之间数据传送造成的瓶颈现象。由于AVR单片机采用RISC结构,使得它具有高达1MIPS/MHz的高速运行处理能力。同时也能更好地适合采用高级语言(例如C语言、BASIC语言)来编写系统程序,高效地开发出目标代码,以加快产品进入市场的时间和简化系统的设计、开发、维护和支持。ATmega16指令综述指令是CPU用于控制各功能部件完成某一指定动作或操作的指示和命令。指令不同,CPU和各个功能部件完成的动作也不一样,指令的功能也不同。程序员根据系统的要求,选用不同功能指令的有序组合就构成的程序。CPU执行不同的程序,就能完成不同的任务。CPU指令的的集合或全体称为指令系统。指令系统是CPU的重要性能指标之一,也是学习以及使用单片机的重要内容。由于CPU结构的不同,每一种CPU的指令和功能也不同,因此学习AVR,就必须要了解它的指令结构、功能和特点。只有在此基础上,才能更清楚的了解AVR的硬件使用,编写出好的系统程序。AVR单片机指令系统是RISC结构的精简指令集,是一种简明、易掌握、效率高的指令系统。ATmega16单片机完全兼容AVR的指令系统,具有高性能的数据处理能力,能对位、半字节、字节和双字节数据进行各种操作,包括算术和逻辑运算、数据传送、布尔处理、控制转移和硬件乘法等操作。ATmega16共有131条指令,按功能可分为五大类,它们是:算术和逻辑运算指令(28条);比较和跳转指令(36条);数据传送指令(35条);位操作和位测试指令(28条);MCU控制指令(4条)。在本章中将对ATmega16全部的131条指令,包括字节数、功能、对标志位的影响以及执行周期数等进行简单的描述。指令格式以及三种表示方式指令格式是指指令码的结构形式。通常,指令可分为操作码和操作数两部分。其中操作码部分比较简单,操作数部分则比较复杂,而且随CPU类型的不同,寻址方式的不同有较大的变化。AVR的指令的一般格式为:操作码第1操作数或操作数地址第2操作数或操作数地址其中,操作码用于指示CPU执行何种操作,是加法操作还是减法操作,是数据传送还是数据移位等。第1操作数或操作数地址用于表示参与操作的第1个操作数,或该操作数在内存的地址,同时该地址也将作为操作结果存放的地址。第2操作数或操作数地址(如果有的话)用于表示参与操作的第2个操作数,或该操作数在内存的地址。需要注意的是,在AVR的指令中,有相当一部分只有操作码,或只有操作码和第1操作数或操作数地址,前者在操作码中隐含了操作数或操作数的地址。指令的表示方式是指采用何种形式描述指令,也是人们用于编写和阅读程序的基础。通常指令采用二进制、十六进制和助记符三种表示方式。指令的二进制表示形式,是一种可以直接为CPU识别和执行的形式,故称为指令的机器码或汇编语言的目标代码,下载到AVR中的代码必须是可执行的目标代码。但二进制形式的代码具有难读、难写、难记忆和难修改等缺点,因此人们通常不用它来编写程序。指令的十六进制形式是二进制形式的变型,只是将二进制代码4位一组用十六进制的形式描述。十六进制的形式虽然比二进制形式读写