




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 AVR单片机的基本结构单片机是构成单片机嵌入式系统的核心器件。本章首先将介绍一般单片机的基本结构和组成,使大家对单片机芯片的内部硬件有基本了解和认识。掌握了单片机的基本结构和组成,对学习、了解任何一种类型单片机的工作原理,编写单片机的系统软件以及和设计外围电路都是非常重要的。AVR是美国ATMEL公司推出的一款采用RISC指令的8位高速单片机。本章将以ATmega16为主线,介绍和讲述AVR单片机内核的基本结构、引脚功能、工作方式等。深入的理解和掌握AVR的基本结构,对后续章节的学习、以及对实际的应用AVR单片机都是非常重要的。2.1 单片机的基本组成2.1.1 单片机的基本组成结构单
2、片机嵌入式系统的核心部件是单片机,其结构特征是将组成计算机的基本部件集成在一块晶体芯片上,构成一片具有特定功能的单芯片计算机单片机。一片典型单片机芯片内部的基本组成结构如图2-1所示。外部时钟源外部事件计数图2-1 典型单片机的基本组成结构振荡器和时序电路CPU中断控制程序存储器数据存储器定时器计数器总 线 扩展控制器并行I/O接口内部中断串行I/O接口外部中断外部数据/地址总线操作管理寄存器内部总线从单片机的基本组成可以看出,在一片(单片机)芯片中,集成了构成一个计算机系统的最基本的单元:如CPU、程序(指令)存储器、数据存储器、各种类型的输入/输出接口等。CPU同各基本单元通过芯片内的内部
3、总线(包括数据总线、地址总线和控制总线)连接。一般情况下,内部总线中的数据总线宽度(或指CPU的字长)也是标定该单片机等级的一个重要指标。一般讲,低档单片机的内部数据总线宽度为4位(4位机),普通和中档单片机的内部数据总线宽度一般为8位(8位机),高档单片机内部数据总线宽度为16或32位。内部数据总线宽度越宽,单片机的处理速度也相应的提高,功能也越强。2.1.2 单片机基本单元与作用下面分别对单片机芯片中所集成的各个组成部分予以简要介绍。1 MCU单元(Microcontroller Unit)MCU单元部分包括了CPU、时钟系统、复位、总线控制逻辑等电路。CPU是按照面向测控对象、嵌入式应用
4、的要求设计的,其功能有进行算术、逻辑、比较等运算和操作,并将结果和状态信息与存储器以及状态寄存器进行交换(读/写)。时钟和复位电路实现上电复位、信号控制复位,产生片内各种时钟及功耗管理等。总线控制电路则产生各类控制逻辑信号,满足MCU对内部和外部总线的控制。其中,内部总线用以实现片内各单元电路的协调操作和数据传输,而外部总线控制用于单片机外围扩展的操作管理。2. 片内存储器单片机的存储器一般分成程序存储器和数据存储器,它们往往构成相互独立的两个存储空间,分别寻址,互不干扰。在这一点上,与通用计算机系统的结构是不同的。通用计算机系统通常采用“Von-Neumann”结构,在这种结构体系中采用了单
5、一的数据总线用于指令和数据的存取,因此数据和指令是存放在同一个存储空间中的,CPU使用同一条数据总线与数据和程序进行交换,如在计算机原理课程中介绍的8086/8088。而单片机的内部结构通常使用“Harvard”体系结构,在这种体系中采用分开的指令和数据总线,以及分开的指令和数据地址空间。单片机采用Harvard双(多)总线结构的优点是,指令和数据空间完全分开,分别通过专用的总线同CPU交换,可以实现对程序和数据的同时访问,提高了CPU的执行速度和数据的吞吐率。早期的单片机,如典型的8031单片机,在片内只集成少量的数据存储器RAM(128/256字节),没有程序存储器。因此程序存储器和大容量
6、的数据存储器需要进行片外的扩展,增加外围的存储芯片和电路,这给构成嵌入式系统带来了麻烦。后期的单片机则在片内集成了相当数量的程序存储器,如与8031兼容的AT89S51、AT89S52在片内集成了4K/8K的Flash程序存储器。而现在新型的单片机,则在片内集成了更多数量和更多类型的存储器。如AVR系列的ATmega16在片内就集成了16K字节的Flash程序存储器,1K字节的RAM数据存储器,以及512字节的EEPROM数据存储器,这就大大方便了应用。3程序存储器程序存储器用于存放嵌入式系统的应用程序。由于单片机嵌入式系统的应用程序在开发调试完成后不需要经常改变,因此单片机的程序存储器多采用
7、只读型ROM存储器,用于永久性的存储系统的应用程序。为适应不同产品、用户和不同场合的需要,单片机的程序存储器有以下几种不同形式:ROMLess型。该种形式的单片机片内没有集成程序存储器,使用时必须在单片机外部扩展一定容量的EPROM器件。因此,使用这种类型的单片机就必须使用并行扩展总线,增加芯片,增加了硬件设计的工作量。EPROM型。单片机片内集成了一定数量的EPROM存储器用于存放系统的应用程序。这类单片机芯片的上部开有透明窗口,可通过约15分钟的紫外线照射来擦除存储器中的程序,再使用专用的写入装置写入程序代码和数据,写入次数一般为几十次。MaskROM型。使用种类型的单片机时,用户要将调试
8、好的应用程序代码交给单片机的生产厂家,生产商在单片机芯片制造过程的掩膜工艺阶段将程序代码掩膜到程序存储器中。这种单片机便成为永久性专用的芯片,系统程序无法改动,适合于大批量产品的生产。OTPROM型。这种类型的单片机与MaskROM型的单片机有相似的特点。生产商提供新的单片机芯片中的程序存储器可由用户使用专用的写入装置一次性编程写入程序代码,写入后也无法改动了。这种类型的单片机也是适用于大批量产品的生产。FlashROM型。这是一种可供用户多次擦除和写入程序代码的单片机。它的程序存储器采用快闪存储器(FlashMemory),现在可实现大于1万次的写入操作。内部集成FlashROM型单片机的出
9、现,以及随着Flash存储器价格的下降,使得使用FlashROM的单片机正在逐步淘汰使用其它类型程序存储器的单片机。由于FlashROM可多次擦除(电擦除)和写入的特性,加上新型的单片机又采用了在线下载ISP技术(In System Program-既无需将芯片从系统板上取下,直接在线将新的程序代码写入单片机的程序存储器中。),不仅为用户在嵌入式系统的设计、开发和调试带来了极大的方便,而且也适用于大批量产品的生产,并为产品的更新换代提供了更广阔的空间。4. 数据存储器单片机在片内集成的数据存储器一般有两类:随机存储器RAM和电可擦除存储器EEPROM。随机存储器RAM。在单片机中,随机存储器R
10、AM是用来存储系统程序在运行期间的工作变量和临时数据的。一般在单片机内部集成一定容量(32字节至512字节或更多)的RAM。这些小容量的数据存储器以高速RAM的形式集成在单片机芯片内部,作为临时的工作存储器使用,可以提高单片机的运行速度。在单片机中,常把内部寄存器(如工作寄存器、I/O寄存器等)在逻辑上也划分在RAM空间中,这样即可以使用专用的寄存器指令对寄存器进行操作,也可将寄存器当做RAM使用,为程序设计提供了方便和灵活性。对一些需要使用大容量数据存储器的系统,就需要在外部扩展数据存储器。这时,单片机就必须具备并行扩展总线的功能,同时外围也要增加RAM芯片和相应的地址锁存、地址译码等电路。
11、这不仅增加了硬件设计的工作量,产品的成本,同时降低了系统的可靠性。目前许多新型单片机片内集成的RAM容量越来越大。片内集成的RAM容量增加,不仅减少了在片外扩展RAM的必要性,提高了系统的可靠性,而且更重要的是,使得单片嵌入式系统的软件设计思想和方法有了许多的改变和发展,给编写系统程序带来很大的方便,更加有利于结构化、模块化的程序设计。电可擦除存储器EEPROM。一些新型的单片机,在芯片中还集成了电可擦除存储器型EEPROM的数据存储器。这类数据存储器用于存放一些永久或比较固定的系统参数,如放大倍率、电话号码、时间常数等。EEPROM的寿命大于10万次,具有掉电后不丢失数据的特点,并且通过系统
12、程序可以随时修改,这些特性都给用户设计开发产品带来极大的方便和想象空间。5. 输入/输出(I/O)端口为了满足嵌入式系统“面向控制”的实际应用需要,单片机提供了数量众多、功能强、使用灵活的输入/输出端口,简称I/O。端口的类型可分为以下几种类型: 并行总线输入/输出端口(并型I/O口)。用于外部扩展和扩充并行存储器芯片或并行I/O芯片等使用,包括数据总线、地址总线和读写控制信号等。 通用数字I/O端口。用于外部电路逻辑信号的输入和输出控制。 片内功能单元的输入/输出端口。如:定时器/计数器的计数脉冲输入,外部中断源信号的输入等。 串行I/O通信口。用于系统之间或与采用专用串行协议的外围芯片之间
13、的连接和交换数据。如:UART串行接口(RS-232),I2C串行接口,SPI串行接口,USB串行口等。 其它专用接口。一些新型的单片机还在片内集成了某些专用功能的模拟或数字的I/O端口,如A/D输入、D/A输出接口,模拟比较输入端口,脉宽调制(PWD)输出端口等。更有的单片机还将LCD液晶显示器的接口也集成到单片机芯片中了。为了减少芯片引脚的数量,又能提供更多性能的I/O端口给用户使用,大多数的单片机都采用了I/O端口复用技术,既某一端口,它即可作为一般通用的数字I/O端口使用,也可作为某个特殊功能的端口使用,用户可根据系统的实际需要来定义使用。这样就为设计开发提供了方便,大大拓宽了单片机的
14、应用范围。6. 操作管理寄存器。操作管理寄存器也是单片机芯片中的重要组成部分之一。它的功能是管理、协调、控制和操作单片机芯片中的各功能单元的使用和运行。这类寄存器的种类有:状态寄存器、控制寄存器、方式寄存器、数据寄存器等等。各种寄存器的定义、功能、状态、相互之间的关系和应用相对比较复杂,而且往往同相应的功能单元的使用紧密相关,因此,用户应非常熟悉各个寄存器的作用以及如何与不同的功能单元的配合使用,这样才能通过程序指令对其编程操作,以实现对单片机芯片中各种功能的正确使用,充分发挥单片机的所有特点和性能,设计和开发出高性能、低成本的电子产品。可以这样讲,当你对某个单片机芯片中各个操作管理寄存器的作
15、用、功能、定义非常透彻的掌握了,那么你已经完全精通和能够熟练使用该单片机了。2.2 ATmega16单片机的组成ATMEL公司的AVR单片机是一种基于增强RISC结构的、低功耗、CMOS技术、8位微控制器(Enhanced RISC Microcontroller),目前有Tiny、Mega两个系列50多种型号。它们的功能和外部的引脚各有不同,小到812个引脚,多到100个引脚,但它们内核的基本结构是一样的,指令系统相容。本书将以性能适中的ATmega16为主线,介绍和讲述AVR单片机的组成,以及如何应用在嵌入式系统中。在正式的产品开发与设计时,设计者可根据系统的实际需要选择合适型号的AVR单
16、片机。2.2.1 AVR单片机的内核结构图 2-2 AVR单片机的内核结构示意图尽管AVR单片机系列有几十种的型号,但它们有着相同的内核结构,指令兼容。图2-2为典型的AVR单片机的内核结构图。为了提高MCU并行处理的运行效率,AVR单片机采用了程序存储器和数据存储器使用不同的存储空间和存取总线的Harvard结构。算术逻辑单元(ALU)使用单级流水线操作方式对程序存储器进行访问,在执行当前一条指令的同时,也完成了从程序存储器中取出下一条将要执行指令的操作,因此执行一条指令仅需要一个时钟周期。在AVR的内核中,由32个访问操作只需要一个时钟周期的8位通用工作寄存器组成了“快速访问寄存器组”。“
17、快速访问”意味着在一个时钟周期内执行一个完整的ALU操作。这个ALU操作中包含三个过程:从寄存器组中取出两个操作数,操作数被执行,将执行结果写回目的寄存器中。这三个过程是在一个时钟周期内完成的,构成一个完整的ALU操作。在32个通用工作寄存器中,有6个寄存器可以合并成为3个16位的,用于对数据存储器空间进行间接寻址的间接地址寄存器(存放地址指针),以实现高效的地址计算。这3个16位的间接地址寄存器称为:X寄存器,Y寄存器和Z寄存器。其中Z寄存器还能作为间接寻址程序存储器空间的地址寄存器,用于在Flash程序存储器空间进行查表等操作。AVR的算术逻辑单元(ALU)支持寄存器之间,立即数与寄存器之
18、间的算术与逻辑运算功能,以及单一寄存器操作。每一次运算操作的结果将影响和改变状态寄存器(SREG)的值。使用条件转移、无条件转移和调用指令,可以直接访问全部Flash程序存储器空间以及控制程序的执行顺序。大部分AVR指令为单一16位格式,只有少数指令为32位格式。因此,AVR的程序存储器单元为16位,即每个程序地址(两字节地址)单元存放一条单一的16位指令字。而一条32位的指令字,则要占据2个程序存储器单元。ATmega16单片机的Flash程序存储器空间可以分成两段:引导程序段(Boot program section)和应用程序段(Application program section)。
19、两个段的读写保护可以分别通过设置对应的锁定位(Lock bits)来实现。在引导程序段内驻留的引导程序中,可以使用SPM指令,实现对应用程序段的写操作(实现在应用自编程IAP功能,使系统能够自己更新系统程序)。在响应中断服务和子程序调用过程时,程序计数器PC中的返回地址将被存储于堆栈之中。堆栈空间将占用数据存储器(SRAM)中一段连续的地址。因此,堆栈空间的大小仅受到系统总的数据存储器(SRAM)的大小以及系统程序对SRAM的使用量的限制。用户程序应在系统上电复位后,对一个16位的堆栈指针寄存器SP进行初始化设置(或在子程序和中断程序被执行之前)。在AVR中,所有的存储器空间都是线性的。数据存
20、储器(SRAM)可以通过5种不同的寻址方式进行访问。AVR的中断控制由I/O寄存器空间的中断控制寄存器和状态寄存器中的全局中断允许位组成。每个中断都分别对应一个中断向量(中断入口地址)。所有的中断向量构成了中断向量表,该中断向量表位于Flash程序存储器空间的最前面。中断的中断向量地址越小,其中断的优先级越高。I/O空间为连续的64个I/O寄存器空间,它们分别对应MCU各个外围功能的控制和数据寄存器地址,如控制寄存器、定时器/计数器、A/D转换器及其他的I/O功能等。I/O寄存器空间可使用I/O寄存器访问指令直接访问,也可将其映射为通用工作寄存器组后的数据存储器空间,使用数据存储器访问指令进行
21、操作。I/O寄存器空间在数据存储器空间的映射地址为 $020$05F。AVR单片机的性能非常强大,所以它的内部结构相对8031结构的单片机要复杂。对于刚开始接触和学习单片机的人员,以及了解8051结构单片机的人来讲,在这里尽管不会马上理解AVR内核的全部特点,但通过以后的逐步学习,应逐渐深入的体会和掌握它的原理,这对于熟练的应用AVR设计开发产品,以及将来学习使用更新的单片机都会有很大的帮助。技术是在不断的发展的。2.2.2 典型AVR芯片ATmega16特点AVR系列单片机中比较典型的芯片是ATmega16。这款芯片具备了AVR系列单片机的主要的特点和功能,不仅适合应用于产品设计,同时也方便
22、初学入门。其主要特点有:(1)采用先进RISC结构的AVR内核131条机器指令,且大多数指令的执行时间为单个系统时钟周期;32个8位通用工作寄存器;工作在16MHz时具有16MIPS的性能。配备只需要2个时钟周期的硬件乘法器(2)片内含有较大容量的非易失性的程序和数据存储器16K字节在线可编程(ISP)Flash程序存储器(擦除次数1万次),采用Boot Load技术支持IAP功能;1K字节的片内SRAM数据存储器,可实现3级锁定的程序加密;512个字节片内在线可编程EEPROM数据存储器(寿命10万次);(3)片内含JTAG接口支持符合JTAG标准的边界扫描功能用于芯片检测;支持扩展的片内在
23、线调试功能可通过JTAG口对片内的Flash、EEPROM、配置熔丝位和锁定加密位实施下载编程;(4)外围接口2个带有分别独立、可设置预分频器的8位定时器/计数器;1个带有可设置预分频器、具有比较、捕捉功能的16位定时器/计数器;片内含独立振荡器的实时时钟RTC;4路PWM通道;8路10位ADC面向字节的两线接口TWI(兼容I2C硬件接口);1个可编程的增强型全双工的,支持同步/异步通信的串行接口USART;1个可工作于主机/从机模式的SPI串行接口(支持ISP程序下载);片内模拟比较器;内含可编程的,具有独立片内振荡器的看门狗定时器WDT;(5)其它的特点片内含上电复位电路以及可编程的掉电检
24、测复位电路BOD;片内含有1M/2M/4M/8M,经过标定的、可校正的RC振荡器,可作为系统时钟使用;多达21个各种类型的内外部中断源;有6种休眠模式支持省电方式工作; (6)宽电压、高速度、低功耗工作电压范围宽:ATmega16L 2.75.5v,ATmega16 4.55.5v;运行速度:ATmega16L 08M,ATmega16 016M;低功耗:ATmega16L工作在1MHz、3v、25度时的典型功耗为,正常工作模式 1.1mA,空闲工作模式 0.35mA,掉电工作模式 1uA;(7)芯片引脚和封装形式ATmega16共有32个可编程的I/O口(脚),芯片封装形式有40引脚的PDI
25、P、44引脚的TQFP和44引脚的MLF封装。2.2.3 外部引脚与封装ATmega16单片机有三种形式的封装:40脚双列直插PDIP、44脚方形的TQFP和MLF形式(贴片形式)。其外部引脚封装如图2-3所示。图2-3 ATmage16 外部引脚与封装示意图其中,各个引脚的功能如下:(1) 电源、系统晶振、芯片复位引脚Vcc: 芯片供电(片内数字电路电源)输入引脚,使用时连接到电源正极。AVcc:为端口A和片内ADC模拟电路电源输入引脚。不使用ADC时,直接连接到电源正极;使用ADC时,应通过一个低通电源滤波器与Vcc连接。AREF:使用ADC时,可作为外部ADC参考源的输入引脚。GND:
26、芯片接地引脚,使用时接地。XTAL2:片内反相振荡放大器的输出端。XTAL1:片内反相振荡放大器和内部时钟操作电路的输入端。RESET:RESET为芯片复位输入引脚。在该引脚上施加(拉低)一个最小脉冲宽度为1.5us的低电平,将引起芯片的硬件复位(外部复位)。(2) 32根I/O引脚,分成PA、PB、PC和PD四个8位端口,他们全部是可编程控制的双(多)功能复用的I/O引脚(口)。四个端口的第一功能是通用的双向数字输入/输出(I/O)口,其中每一位都可以由指令设置为独立的输入口,或输出口。当I/O设置为输入时,引脚内部还配置有上拉电阻,这个内部的上拉电阻可通过编程设置为上拉有效或上拉无效。如果
27、AVR的I/O口设置为输出方式工作,当其输出高电平时,能够输出20mA的电流,而当其输出低电平时,可以吸收40mA的电流。因此AVR的I/O口驱动能力非常强,能够直接驱动LED发光二极管、数码管等。而早期单片机I/O口的驱动能力只有5mA,驱动LED时,还需要增加外部的驱动电路和器件。芯片Reset复位后,所有I/O口的缺省状态为输入方式,上拉电阻无效,即I/O为输入高阻的三态状态。以上我们简单介绍了ATmega16单片机的主要特性以及引脚封装。可以看出,小小的一块芯片,其内部的组成结构却是相当复杂的。也正式这种复杂,加上多样的程序,才使得单片机在实际应用中变化无穷。下面,我们从ATmega1
28、6的内部结构出发,逐步的介绍它的工作原理和使用方法。2.3 ATmega16内部结构图2-4 ATmage16 的结构框图图2-4是ATmage16 的结构框图。它是在AVR内核(图2-3)的基础上,具体化的一个实例。从图中可以看出,ATmega16内部的主要构成部分有:l AVR CPU部分。包括:ALU运算逻辑单元、32个8位快速访问通用寄存器组(寄存器文件)、程序计数器PC、指令寄存器、指令译码器。l 程序存储器Flash。l 数据存储器RAM和EEPROM。l 各种功能的外围接口、I/O,以及与它们相关的数据、控制、状态寄存器等。2.3.1 AVR中央处理器CPUAVR CPU是单片机
29、的核心部分,它由运算逻辑单元ALU、程序计数器PC、指令寄存器、指令译码器等部件组成。1. 运算逻辑单元ALU运算逻辑单元ALU的功能是进行算术运算和逻辑运算,可对半字节(4位)、单字节等数据进行操作。如能完成加、减、自动加1、自动减1、比较等算术运算和与、或、异或、求补、循环移位等逻辑操作。操作结果的状态,如产生进位、结果为零等状态信息将影响到状态寄存器SREG相应的标志位。运算逻辑单元ALU还包含一个布尔处理器,用来处理位操作。它可执行置位、清零、取反等操作。ATmega16的ALU还能实现无符号数、有符号数以及浮点数的硬件乘法操作。一次硬件乘法操作的时间为2个时钟周期。2. 程序计数器P
30、C、指令寄存器和指令译码器程序计数器PC用来存放下一条需要执行指令在程序存储器空间的地址(指向Flash空间)。取出的指令存放在指令寄存器中,然后送入指令译码器产生各种控制信号,控制CPU的运行(执行指令)。AVR一条指令的长度大多数为16位,还有少部分为32位,因此AVR的程序存储器结构实际上是以字(16位)为一个存储单元的。ATmega16的程序计数器为13位,正好满足了对片内8K字(即手册上的16K字节)的Flash程序存储器空间直接寻址的需要,因此就不能(不支持)在外部扩展更多的程序存储器。AVR CPU在译码执行一条指令的同时,就将PC中指定的Flash单元中的指令取出,放入指令寄存
31、器中(图中的Instruction Register),构成了一级流水线运行方式。AVR采用一级流水线技术,在当前指令执行的时候,就取出下一条将要执行的指令,加上大多数AVR指令的长度是一个字,就使得AVR CPU实现了一个时钟周期执行一条指令。采用这种结构,减少了取指令的次数,大大提高了CPU的运行速度,同时也提高了取指令操作的(系统的)可靠性。而在其它的CISC以及类似的RISC结构的单片机中,外部振荡器的时钟被分频降低到传统的内部指令执行周期,这种分频最大达12倍(例如,标准8031结构的单片机)。三. 通用工作寄存器组在AVR中,由命名为R0R31的32个8位通用工作寄存器构成一个“通
32、用快速工作寄存器组”,图2-5为通用快速工作寄存器组的结构图。AVR CPU中的ALU与这32个通用工作寄存器组直接相连,为了使ALU能够高效和灵活地对寄存器组进行访问操作,通用寄存器组提供和支持ALU使用4种不同的数据输入/输出的操作方式:l 提供一个8位源操作数,并保存的一个8位结果l 提供两个8位源操作数,并保存的一个8位结果l 提供两个8位源操作数,并保存的一个16位结果l 提供一个16位源操作数,并保存的一个16位结果因此,AVR大多数操作工作寄存器组的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间是一个时钟周期。例如,从寄存器组中取出两个操作数,对操作数实施处理,处理
33、结果回写到目的寄存器中。这三个过程是在一个时钟周期内完成的,构成一个完整的ALU指令操作。在传统的基于累加器结构的单片机中(如8051),则需要大量的程序代码来完成和实现在累加器和存储器之间的数据传送。如上面所介绍的操作过程就需要三条指令来实现:第一条完成从寄存器中取出源操作数;第二条完成对操作数实施处理;第三条将处理结果回写。这样就构成了累加器和存储器之间数据传送的瓶颈,影响了指令运行效率。而在AVR单片机中,由于采用了32个通用工作寄存器构成快速存取寄存器组,相当于用32个通用工作寄存器代替了累加器,从而避免了在传统结构中的那种由于累加器和存储器之间频繁的数据传送交换而形成的瓶颈现象,又进
34、一步提高了指令的运行效率和速度。在AVR中,通用寄存器组与片内的数据存储器SRAM处在相同的空间,32个通用寄存器被直接映射到用数据空间的前32个地址,如图2-5所示。虽然寄存器组的物理结构与SRAM不同,但是这种内存空间的组织方式为访问工作寄存器提供了极大的灵活性,如可以利用地址指针寄存器X、Y或Z实现对通用寄存器组的间接寻址操作。寄存器名RAM空间地址R0$0000R1$0001R2$0002R14$000ER15$000FR16$0010R26$001AX寄存器低位字节R27$001BX寄存器高位字节R28$001CY寄存器低位字节R29$001BY寄存器高位字节R30$001DZ寄存器
35、低位字节R31$001FZ寄存器高位字节图2-5 通用工作寄存器组在RAM空间的地址分配图2.3.2 系统时钟部件1. 系统时钟ATmega16的片内含有4种频率(1/2/4/8M)的RC振荡源,可直接作为系统的工作时钟使用。同时片内还设有一个由反向放大器所构成的OSC(Oscillator)振荡电路,外围引脚XTAL1和XTAL2分别为OSC振荡电路的输入端和输出端,用于外接石英晶体等,构成高精度的或其它标称频率的系统时钟系统。系统时钟为控制器提供时钟脉冲,是控制器的心脏。系统时钟的频率是单片机的重要性能指标之一。系统时钟频率越高,单片机的执行节拍就越快,处理速度也越快。ATmega16最高
36、的工作频率为16M(16MIPS),在8位单片机中算是佼佼者。但并不是系统时钟频率越快就越好,因为当时钟频率越高时,其耗电量也越大,也容易受到干扰(或干扰别人)。因此,在具体设计时,应根据实际产品的需要,尽量采用较低的系统时钟频率,这样不仅能降低了功耗,同时也提高了系统的可靠性和稳定性。为ATmega16提供系统时钟源时,有三种主要的选择:(1)直接使用片内的1/2/4/8M的RC振荡源;(2)在引脚XTAL1和XTAL2上外接由石英晶体和电容组成的谐振回路,配合片内的OSC(Oscillator)振荡电路构成的振荡源;(3)直接使用外部的时钟源输出的脉冲信号。方式2和方式3的电路连接见图2-
37、6(a)和2-6(b)。图2-6(a) 外部接晶体的时钟电路 图2-6(b) 直接使用外部时钟源方式2是比较常用的方法,由于采用了外接石英晶体作为振荡的谐振回路,因此可以提供比较灵活的频率(由使用晶体的谐振频率决定)和稳定精确的振荡。在XTAL1和XTAL2引脚上加上由石英晶体和电容组成的谐振回路,与内部振荡电路配合就能产生系统需要时钟信号了。最常采用的晶体元件为一个石英晶体和两个电容组成谐振电路。晶体可在0-16MHz之间选择,电容值在20pF-30pF之间(最好与所选用的晶体相匹配)。当对系统时钟电路的精度要求不高的话,可以使用第1种方式,即使用片内可选择的1/2/4/8M的RC振荡源作为
38、系统时钟源,可以节省外接器件,此时XTAL1和XTAL2引脚悬空。使用AVR时要特别注意:AVR单片机有一组专用的,与芯片功能、特性、参数配置相关的可编程熔丝位。其中有几个专门的熔丝位(CKSEL3.0)用于配置芯片所要使用的系统时钟源的类型。新芯片的缺省配置设定为使用内部1M的RC振荡源作为系统的时钟源。因此当第一次使用前,必须先正确的配置熔丝位,使其与使用的系统时钟源类型相匹配。另外,在配置其它熔丝位时,或进行程序下载时,千万不要对CKSEL3.0这几个熔丝位误操作,否则会组成芯片表面现象上的“坏死”,因为没有系统时钟源,芯片不会工作的。关于ATmega16重要熔丝位的配置、使用方式、以及
39、注意事项请参考附录A。系统时钟电路产生振荡脉冲不经过分频将直接作为系统的主工作时钟,同时它还作为芯片内部的各种计数脉冲,以及各种串口定时时钟等使用(可由程序设定分频比例)。2. 内部看门狗时钟在AVR片内还集成了一个1MHz独立的时钟电路,它仅供片内的看门狗定时器(WDT)使用。因此,AVR片内的WDT是独立硬件形式的看门狗,使用AVR可以省掉外部的WDT芯片。使用WDT可以有效的提高系统的可靠行。2.3.3 CPU的工作时序AVR CPU的工作是由系统时钟()直接驱动的,在片内不再进行分频。图2-7所示为Harvard结构和快速访问寄存器组的并行指令存取和指令执行时序。CPU在启动后第一个时
40、钟周期T1取出第一条指令,在T2周期便执行取出的指令,并同时又取出第二条指令,依次进行。这种基于流水线形式的取指方式,使AVR可以以非常高的速度执行指令,获得高达1MIPSMHz的效率。图2-7 并行指令存取和指令执行图2-8所示为ALU与寄存器堆操作单周期指令的执行时序。在单一时钟周期内,由2个寄存器提供操作数,ALU执行相应的操作,最后将操作结果回送到目的寄存器中。图2-8 单周期ALU操作AVR对片内SRAM存储器的访问需要2个时钟周期。图2-9所示,在2个系统时钟周期内,ALU完成对内部数据存储器SRAM访问的操作时序。图2-9 片内数据SRAM访问时序 2.3.4 存储器AVR单片机
41、在片内集成了Flash程序存储器、SRAM数据存储器和EEPROM数据存储器。三个存储器空间互相独立,物理结构也不同。程序存储器为闪存存储器Flash,以16位(字)为一个存储单元,作为数据读取时,以字节为单位,而擦除、写入则是以页为单位的(不同型号AVR单片机一页的大小也不同)。SRAM数据存储器是以8位(字节)为一个存储单元,编址方式采用与工作寄存器组、I/O寄存器和SRAM统一寻址的方式。EEPROM数据存储器也是以8位(字节)为一个存储单元,对其的读写操作都以字节为单位。有关存储器结构的详细介绍将在下一节叙述。2.3.5 I/O端口ATmega16有四个8位的双向I/O端口PA、PB、
42、PC、PD,它们对外对应32个I/O引脚,每一位都可以独立地用于逻辑信号的输入和输出。在5伏工作电压下,输出时每个引脚可供出达20mA的驱动电流。而输入时,每个引脚可吸纳最大为40mA的电流,可直接驱动发光二极管LED(一般LED的驱动电流为10mA左右)和小型继电器。AVR大部分的I/O端口都具备双重功能,分别同片内的各种不同功能的外围接口电路组合成一些可以完成特殊功能的I/O 口,如定时器、计数器、串行接口、模拟比较器、捕捉器等。实际上,学习单片机的主要任务,就是了解、掌握单片机I/O端口的功能,以及如何正确设计这些端口与外围电路的连接构成一个嵌入式系统,并编程、管理和运用它们完成各种各样
43、的任务。有关这些内容,将在后面的章节中逐步学习。2.4 存储器结构和地址空间2.4.1 支持ISP的Flash程序存储器AVR单片机包括1K128K字节的片内支持ISP的Flash程序存储器。由于AVR所有指令为16位字或32位双字,故Flash程序存储器的结构为(512B64Kb)x 16位。Flash存储器的使用寿命最少为1万次写/擦循环。ATmega16单片机的程序存储器为8K x 16(16K x 8),程序计数器PC宽为13位,以此来对8K字程序存储器地址进行寻址。程序存储器的地址空间与数据存储器的地址空间是分开的,地址空间从$000开始。如要在程序存储器中使用常量表,则常量表可以被
44、设定在整个Flash地址空间中。2.4.2 数据存储器SRAM空间 图2-10给出ATmega16单片机SRAM数据存储器的组织结构。全部共1120个数据存储器地址为线性编址,前96个地址为寄存器组(32个8位通用寄存器),I/O寄存器(64个8位I/O寄存器),分配在SRAM数据地址空间的$0000$001F,$0020$005F。接下来的1024个地址是片内数据SRAM,地址空间占用$0060$045F。CPU对SRAM数据存储器的寻址方式分为5种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量的间接寻址和带后增量的间接寻址。在寄存器堆中,寄存器R26R31具有间接寻址指针寄存器的特性。
45、ALU可使用直接寻址的方式对整个存储器空间寻址操作。带偏移量的间接寻址方式可以寻址由寄存器Y和Z给出的基本地址附近的63个地址。当使用自动预减量和后增量的间接寻址方式时,3个16位的地址寄存器X、Y和Z都可作为间接寻址的地址指针寄存器,寄存器中的地址指针值将根据操作指令的不同,自动被增加或减小。32个通用工作寄存器,64个I/O寄存器,以及ATmega16单片机中1024个字节的数据SRAM,都可通过上述的寻址方式进行访问操作。ATmega16程序存储器空间Flash程序存储器(8Kx16或16Kx8)$0000$1FFF数据存储器空间32个通用寄存器$0000$001F64个I/O寄存器$0
46、020$005F内部SRAM数据存储器(1024x8)$0060$045FEEPROM数据存储器空间EEPROM数据存储器(512x8)$0000$01FF图2-10 ATmeag16存储器结构不支持外部SRAM扩展。2.4.3 内部EEPROM 存储器AVR系列单片机还包括64B4K字节的EEPROM数据存储器。它们被组织在一个独立的数据空间中。这个数据空间采用单字节读写方式。EEPROM 的使用寿命至少为 10万次写/擦循环。ATmega16的EEPROM容量是512字节,地址范围为$0000$01FF。EEPROM数据存储器可用于存放一些需要掉电保护,而且比较固定的系统参数、表格等。2.
47、5 通用寄存器组与I/O寄存器全面熟练地理解、掌握AVR的通用寄存器组与I/O寄存器的性能、特点、功能、设置和使用,是精通和熟练使用AVR单片机的关键。由于AVR有32个通用寄存器和64个I/O寄存器,其功能、特点及使用方法涉及到整个AVR单片机的全部功能和特性,因此相对复杂。学习者不可能一下就能全部掌握它们的应用,只有通过边学习、边实践,逐步深入,加深理解。本节仅给一个总体的介绍,各个不同寄存器具体的使用将在以后相关的章节中加以详细描述。2.5.1 通用寄存器组图2-11为AVR单片机中32个通用寄存器的结构图。在AVR指令集中,所有的通用寄存器操作指令均带有方向的,并能在单一时钟周期中访问
48、所有的寄存器。用户在使用汇编语言编写程序时,应注意如何正确使用AVR中32个通用的寄存器。因为这32个通用寄存器的功能还是有一定的区别。尤其是R16R31后16个寄存器能实现的操作比R0R15要多,如SBCI、SUBI、CPI、ANDI、ORI以及直接装入常数到寄存器LDI,和乘法指令仅适用于寄存器组中后半部分的寄存器(R16R31)。另外,R26R31还构成3个16位的地址指针寄存器X、Y、Z,所以一般情况下不要作为它用。具体指令的介绍见第三章。如图2-11所示,每个通用寄存器还被分配在AVR的数据存储器空间中,他们直接映射到数据空间的前32个地址,因此也可以使用访问SRAM的指令对这些寄存
49、器进行访问,但此寄存器名称对应SRAM地址附加功能R0$0000R1$0001R2$0002R13$000DR14$000ER15$000FR26$001AX-寄存器低字节R27$001BX-寄存器高字节R28$001CY-寄存器低字节R29$001DY-寄存器高字节R30$001EZ-寄存器低字节R31$001FZ-寄存器高字节图2-11 通用寄存器组结构图时在指令中应使用该寄存器在SRAM空间的映射地址。通常情况下,最好是使用专用的寄存器访问指令对通用寄存器组进行操作,因为这类寄存器专用操作指令不仅功能强大,而且执行周期也短。AVR寄存器组最后的6个寄存器R26R31具有特殊的功能,这些寄
50、存器每两个合并成一个16位的寄存器,作为对数据存储器空间(使用X、Y、Z)以及程序存储器空间(仅使用Z寄存器)间接寻址的地址指针寄存器。这三个间接寄存器X、Y、Z由图2-12定义。在不同指令的寻址模式下,利用地址寄存器可实现地址指针的偏移、自动增量和减量(参考不同的指令)等不同形式的间址寻址操作。150X寄存器7 07 027($001B)R26($001A)150Y寄存器7 07 029($001D)R26($001C)150Z寄存器7 07 027($001F)R26($001E)图2-12 X、Y、Z寄存器2.5.2 I/O寄存器表2.1列出了ATmega16单片机的I/O寄存器的地址空
51、间分配、名称和功能。表2.1 ATmega16 I/O寄存器空间分配表十六进制地址名 称功 能$00 ($0020)TWBRTWI波特率寄存器$01 ($0021)TWSRTWI状态寄存器$02 ($0022)TWARTWI从机地址寄存器$03 ($0023)TWDRTWI数据寄存器$04 ($0024)ADCLADC数据寄存器低字节$05 ($0025)ADCHADC数据寄存器高字节$06 ($0026)ADCSRAADC控制和状态寄存器$07 ($0027)ADMUXADC多路选择器$08 ($0028)ACSR模拟比较控制和状态寄存器$09 ($0029)UBRRLUSART波特率寄存器
52、低8位$0A ($002A)UCSRBUSART控制状态寄存器B$0B ($002B)UCSRAUSART控制状态寄存器A$0C ($002C)UDRUSART I/O数据寄存器$0D ($002D)SPCRSPI控制寄存器$0E ($002E)SPSRSPI状态寄存器$0F ($002F)SPDRSPI I/O数据寄存器$10 ($0030)PINDD口外部输入引脚$11 ($0031)DDRDD口数据方向寄存器$12 ($0032)PORTDD口数据寄存器$13 ($0033)PINCC口外部输入引脚$14 ($0034)DDRCC口数据方向寄存器$15 ($0035)PORTCC口数据寄
53、存器$16 ($0036)PINBB口外部输入引脚$17 ($0037)DDRBB口数据方向寄存器$18 ($0038)PORTBB口数据寄存器$19 ($0039)PINAA口外部输入引脚$1A ($003A)DDRAA口数据方向寄存器$1B ($003B)PORTAA口数据寄存器$1C ($003C)EECREEPROM控制寄存器$1D ($003D)EEDREEPROM数据寄存器$1E ($003E)EEARLEEPROM地址寄存器低8位$1F ($003F)EEARHEEPROM地址寄存器高8位$20 ($0040)UBRRHUCSRCUSART波特率寄存器高4位USART状态寄存器C
54、$21 ($0041)WDTCR看门狗定时控制寄存器$22 ($0042)ASSR异步模式状态寄存器$23 ($0043)OCR2定时器/计数器2输出比较寄存器$24 ($0044)TCNT2定时器/计数器2(8位)$25 ($0045)TCCR2定时器/计数器2控制寄存器$26 ($0046)ICR1L定时器/计数器1输入捕捉寄存器低8位$27 ($0047)ICR1H定时器/计数器1输入捕捉寄存器高8位$28 ($0048)OCR1BL定时器/计数器1输出比较寄存器B低8位$29 ($0049)OCR1BH定时器/计数器1输出比较寄存器B高8位$2A ($004A)OCR1AL定时器/计数
55、器1输出比较寄存器A低8位$2B ($004B)OCR1AH定时器/计数器1输出比较寄存器A高8位$2C ($004C)TCNT1L定时器/计数器1寄存器低8位$2D ($004D)TCNT1H定时器/计数器1寄存器高8位$2E ($004E)TCCR1B定时器/计数器1控制寄存器B$2F ($004F)TCCR1A定时器/计数器1控制寄存器A$30 ($0050)SFIOR特殊功能I/O寄存器$31 ($0051)OSCCALOCDR内部RC振荡器校准值寄存器在线调试寄存器$32 ($0052)TCNT0定时器/计数器0(8位)$33 ($0053)TCCR0定时器/计数器0控制寄存器$34 ($0054)MC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025计量基础知识考试题库及答案
- 2025法官遴选考试题及答案
- 2025年急救护理职业资格考试试卷及答案
- 2025院感相关理论知识考试考试练习题及答案
- 绿色会展创新技术应用考核试卷
- 公共设施管理创新与社区文化传承与创新研究考核试卷
- 丝绸产业节能减排措施研究考核试卷
- 2025年《幼儿保教知识与能力》考试幼儿考试试题及答案
- 医疗机器人技术应用考核试卷
- 2024年新疆泽普县普通外科学(副高)考试题含答案
- 广东省省实、二中、执信、广雅、六中2024-2025学年高一下期末联考语文试题及答案
- 生物医药研发股东风险共担协议书
- 出口管制介绍课件
- 兰州噪音污染管理办法
- 学校食堂岗位职责及食品安全管理
- 2025 创伤救护四大技术(止血 包扎 固定 搬运)课件
- 艾梅乙信息安全管理制度
- 党建能力测试题及答案
- 2025年教师招聘教育学心理学试题及答案汇编
- 2025年中国石油套管行业市场全景评估及发展战略规划报告
- 2025年武汉市汉阳区社区干事岗位招聘考试笔试试题(含答案)
评论
0/150
提交评论