ATmega16中文手册.pdf
- 文档编号:11594940
- 上传时间:2023-06-01
- 格式:PDF
- 页数:330
- 大小:2.76MB
ATmega16中文手册.pdf
《ATmega16中文手册.pdf》由会员分享,可在线阅读,更多相关《ATmega16中文手册.pdf(330页珍藏版)》请在冰点文库上搜索。
2466GAVR10/03产品特性产品特性高性能、低功耗的高性能、低功耗的8位位AVR微处理器微处理器先进的先进的RISC结构结构131条指令条指令大多数指令执行时间为单个时钟周期大多数指令执行时间为单个时钟周期32个个8位通用工作寄存器位通用工作寄存器全静态工作全静态工作工作于工作于16MHz时性能高达时性能高达16MIPS只需两个时钟周期的硬件乘法器只需两个时钟周期的硬件乘法器非易失性程序和数据存储器非易失性程序和数据存储器16K字节的系统内可编程字节的系统内可编程Flash擦写寿命擦写寿命:
10,000次次具有独立锁定位的可选具有独立锁定位的可选Boot代码区通过片上代码区通过片上Boot程序实现系统内编程真正的同时读写操作程序实现系统内编程真正的同时读写操作512字节的字节的EEPROM擦写寿命擦写寿命:
100,000次次1K字节的片内字节的片内SRAM可以对锁定位进行编程以实现用户程序的加密可以对锁定位进行编程以实现用户程序的加密JTAG接口接口(与与IEEE1149.1标准兼容标准兼容)符合符合JTAG标准的边界扫描功能标准的边界扫描功能支持扩展的片内调试功能支持扩展的片内调试功能通过通过JTAG接口实现对接口实现对Flash、EEPROM、熔丝位和锁定位的编程、熔丝位和锁定位的编程外设特点外设特点两个具有独立预分频器和比较器功能的两个具有独立预分频器和比较器功能的8位定时器/计数器位定时器/计数器一个具有预分频器、比较功能和捕捉功能的一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器位定时器/计数器具有独立振荡器的实时计数器具有独立振荡器的实时计数器RTC四通道四通道PWM8路路10位位ADC8个单端通道个单端通道TQFP封装的封装的7个差分通道个差分通道2个具有可编程增益(个具有可编程增益(1x,10x,或或200x)的差分通道)的差分通道面向字节的两线接口面向字节的两线接口两个可编程的串行两个可编程的串行USART可工作于主机/从机模式的可工作于主机/从机模式的SPI串行接口串行接口具有独立片内振荡器的可编程看门狗定时器具有独立片内振荡器的可编程看门狗定时器片内模拟比较器片内模拟比较器特殊的处理器特点特殊的处理器特点上电复位以及可编程的掉电检测上电复位以及可编程的掉电检测片内经过标定的片内经过标定的RC振荡器振荡器片内/片外中断源片内/片外中断源6种睡眠模式种睡眠模式:
空闲模式、空闲模式、ADC噪声抑制模式、省电模式、掉电模式、噪声抑制模式、省电模式、掉电模式、Standby模式以及扩展的模式以及扩展的Standby模式模式I/O和封装和封装32个可编程的个可编程的I/O口口40引脚引脚PDIP封装封装,44引脚引脚TQFP封装封装,与与44引脚引脚MLF封装封装工作电压工作电压:
ATmega16L:
2.7-5.5VATmega16:
4.5-5.5V速度等级速度等级0-8MHzATmega16L0-16MHzATmega16ATmega16L在在1MHz,3V,25C时的功耗时的功耗正常模式正常模式:
1.1mA空闲模式空闲模式:
0.35mA掉电模式掉电模式:
1A具有具有16KB系统内可编程系统内可编程Flash的的8位位微控制器微控制器ATmega16ATmega16L本文是英文数据手册的中文翻译,其目的是方便中国用户的阅读。
它无法自动跟随原稿的更新,同时也可能存在翻译上的错误。
读者应该以英文原稿为参考以获得更准确的信息。
2ATmega16(L)2466GAVR10/03引脚配置引脚配置Figure1.ATmega16的引脚声明声明本数据手册的典型值来源于对器件的仿真,以及其他基于相同产生工艺的AVR微控制器的标定特性。
本器件经过特性化之后将给出实际的最大值和最小值。
(XCK/T0)PB0(T1)PB1(INT2/AIN0)PB2(OC0/AIN1)PB3(SS)PB4(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1(RXD)PD0(TXD)PD1(INT0)PD2(INT1)PD3(OC1B)PD4(OC1A)PD5(ICP1)PD6PA0(ADC0)PA1(ADC1)PA2(ADC2)PA3(ADC3)PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)AREFGNDAVCCPC7(TOSC2)PC6(TOSC1)PC5(TDI)PC4(TDO)PC3(TMS)PC2(TCK)PC1(SDA)PC0(SCL)PD7(OC2)PA4(ADC4)PA5(ADC5)PA6(ADC6)PA7(ADC7)AREFGNDAVCCPC7(TOSC2)PC6(TOSC1)PC5(TDI)PC4(TDO)(MOSI)PB5(MISO)PB6(SCK)PB7RESETVCCGNDXTAL2XTAL1(RXD)PD0(TXD)PD1(INT0)PD2(INT1)PD3(OC1B)PD4(OC1A)PD5(ICP1)PD6(OC2)PD7VCCGND(SCL)PC0(SDA)PC1(TCK)PC2(TMS)PC3PB4(SS)PB3(AIN1/OC0)PB2(AIN0/INT2)PB1(T1)PB0(XCK/T0)GNDVCCPA0(ADC0)PA1(ADC1)PA2(ADC2)PA3(ADC3)PDIPTQFP/MLF3ATmega16(L)2466GAVR10/03综述综述ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。
由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。
方框图方框图Figure2.结构框图INTERNALOSCILLATOROSCILLATORWATCHDOGTIMERMCUCTRL.&TIMINGOSCILLATORTIMERS/COUNTERSINTERRUPTUNITSTACKPOINTEREEPROMSRAMSTATUSREGISTERUSARTPROGRAMCOUNTERPROGRAMFLASHINSTRUCTIONREGISTERINSTRUCTIONDECODERPROGRAMMINGLOGICSPIADCINTERFACECOMP.INTERFACEPORTADRIVERS/BUFFERSPORTADIGITALINTERFACEGENERALPURPOSEREGISTERSXYZALU+-PORTCDRIVERS/BUFFERSPORTCDIGITALINTERFACEPORTBDIGITALINTERFACEPORTBDRIVERS/BUFFERSPORTDDIGITALINTERFACEPORTDDRIVERS/BUFFERSXTAL1XTAL2RESETCONTROLLINESVCCGNDMUX&ADCAREFPA0-PA7PC0-PC7PD0-PD7PB0-PB7AVRCPUTWIAVCCINTERNALCALIBRATEDOSCILLATOR4ATmega16(L)2466GAVR10/03AVR内核具有丰富的指令集和32个通用工作寄存器。
所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。
这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。
ATmega16有如下特点:
16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。
工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式下则允许振荡器和异步定时器继续工作。
本芯片是以Atmel高密度非易失性存储器技术生产的。
片内ISPFlash允许程序存储器通过ISP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。
引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlashMemory)。
在更新应用Flash存储区时引导Flash区(BootFlashMemory)的程序继续运行,实现了RWW操作。
通过将8位RISCCPU与系统内可编程的Flash集成在一个芯片内,ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。
ATmega16具有一整套的编程与系统开发工具,包括:
C语言编译器、宏汇编、程序调试器/软件仿真器、仿真器及评估板。
引脚说明引脚说明VCC数字电路的电源GND地端口端口A(PA7.PA0)端口A做为A/D转换器的模拟输入端。
端口A为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。
端口端口B(PB7.PB0)端口B为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。
端口B也可以用做其他不同的特殊功能,请参见P56。
端口端口C(PC7.PC0)端口C为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。
如果JTAG接口使能,即使复位出现引脚PC5(TDI)、PC3(TMS)与PC2(TCK)的上拉电阻被激活。
端口C也可以用做其他不同的特殊功能,请参见P59。
5ATmega16(L)2466GAVR10/03端口端口D(PD7.PD0)端口D为8位双向I/O口,具有可编程的内部上拉电阻。
其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。
作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。
在复位过程中,即使系统时钟还未起振,端口D处于高阻状态。
端口D也可以用做其他不同的特殊功能,请参见P61。
RESET复位输入引脚。
持续时间超过最小门限时间的低电平将引起系统复位。
门限时间见P36Table15。
持续时间小于门限间的脉冲不能保证可靠复位。
XTAL1反向振荡放大器与片内时钟操作电路的输入端。
XTAL2反向振荡放大器的输出端。
AVCCAVCC是端口A与A/D转换器的电源。
不使用ADC时,该引脚应直接与VCC连接。
使用ADC时应通过一个低通滤波器与VCC连接。
AREFA/D的模拟基准输入引脚。
代码例子代码例子本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。
这些例子都假定在编译之前已经包含了正确的头文件。
有些C编译器在头文件里并没有包含位定义,而且各个C编译器对中断处理有自己不同的处理方式。
请注意查阅相关文档以获取具体的信息。
6ATmega16(L)2466GAVR10/03AVRCPU内核介绍AVRCPU内核介绍本节从总体上讨论AVR内核的结构。
CPU的主要任务是保证程序的正确执行。
因此它必须能够访问存储器、执行运算、控制外设以及处理中断。
结构综述结构综述Figure3.AVR结构的方框图为了获得最高的性能以及并行性,AVR采用了Harvard结构,具有独立的数据和程序总线。
程序存储器里的指令通过一级流水线运行。
CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。
这个概念实现了指令的单时钟周期运行。
程序存储器是可以在线编程的FLASH。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。
从而实现了单时钟周期的ALU操作。
在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件。
整个过程仅需一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间,实现高效的地址运算。
其中一个指针还可以作为程序存储器查询表的地址指针。
这些附加的功能寄存器即为16位的X、Y、Z寄存器。
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。
ALU也可以执行单寄存器操作。
运算完成之后状态寄存器的内容得到更新以反映操作结果。
程序流程通过有/无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。
大多数指令长度为16位,亦即每个程序存储器地址都包含一条16位或32位的指令。
程序存储器空间分为两个区:
引导程序区(Boot区)和应用程序区。
这两个区都有专门的锁定位以实现读和读/写保护。
用于写应用程序区的SPM指令必须位于引导程序区。
在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。
堆栈位于通用数据SRAM,因此其深度仅受限于SRAM的大小。
在复位例程里用户首先要初始化堆栈指针FlashProgramMemoryInstructionRegisterInstructionDecoderProgramCounterControlLines32x8GeneralPurposeRegistrersALUStatusandControlI/OLinesEEPROMDataBus8-bitDataSRAMDirectAddressingIndirectAddressingInterruptUnitSPIUnitWatchdogTimerAnalogComparatorI/OModule2I/OModule1I/OModulen7ATmega16(L)2466GAVR10/03SP。
这个指针位于I/O空间,可以进行读写访问。
数据SRAM可以通过5种不同的寻址模式进行访问。
AVR存储器空间为线性的平面结构。
AVR有一个灵活的中断模块。
控制寄存器位于I/O空间。
状态寄存器里有全局中断使能位。
每个中断在中断向量表里都有独立的中断向量。
各个中断的优先级与其在中断向量表的位置有关,中断向量地址越低,优先级越高。
I/O存储器空间包含64个可以直接寻址的地址,作为CPU外设的控制寄存器、SPI,以及其他I/O功能。
映射到数据空间即为寄存器文件之后的地址0x20-0x5F。
ALU-算术逻辑单元ALU-算术逻辑单元AVRALU与32个通用工作寄存器直接相连。
寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。
ALU操作分为3类:
算术、逻辑和位操作。
此外还提供了支持无/有符号数和分数乘法的乘法器。
具体请参见指令集。
状态寄存器状态寄存器状态寄存器包含了最近执行的算术指令的结果信息。
这些信息可以用来改变程序流程以实现条件操作。
如指令集所述,所有ALU运算都将影响状态寄存器的内容。
这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。
在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。
这些工作需要软件来处理。
AVR中断寄存器SREG定义如下:
Bit7I:
全局中断使能全局中断使能I置位时使能全局中断。
单独的中断使能由其他独立的控制寄存器控制。
如果I清零,则不论单独中断标志置位与否,都不会产生中断。
任意一个中断发生后I清零,而执行RETI指令后I恢复置位以使能中断。
I也可以通过SEI和CLI指令来置位和清零。
Bit6T:
位拷贝存储位拷贝存储位拷贝指令BLD和BST利用T作为目的或源地址。
BST把寄存器的某一位拷贝到T,而BLD把T拷贝到寄存器的某一位。
Bit5H:
半进位标志半进位标志半进位标志H表示算术操作发生了半进位。
此标志对于BCD运算非常有用。
详见指令集的说明。
Bit4S:
符号位符号位,S=NVS为负数标志N与2的补码溢出标志V的异或。
详见指令集的说明。
Bit3V:
2的补码溢出标志的补码溢出标志支持2的补码运算。
详见指令集的说明。
Bit2N:
负数标志负数标志表明算术或逻辑操作结果为负。
详见指令集的说明。
Bit76543210ITHSVNZCSREG读/写R/WR/WR/WR/WR/WR/WR/WR/W初始值000000008ATmega16(L)2466GAVR10/03Bit1Z:
零标志零标志表明算术或逻辑操作结果为零。
详见指令集的说明。
Bit0C:
进位标志进位标志表明算术或逻辑操作发生了进位。
详见指令集的说明。
9ATmega16(L)2466GAVR10/03通用寄存器文件通用寄存器文件寄存器文件针对AVR增强型RISC指令集做了优化。
为了获得需要的性能和灵活性,寄存器文件支持以下的输入/输出方案:
输出一个8位操作数,输入一个8位结果输出两个8位位操作数,输入一个8位结果输出两个8位位操作数,输入一个16位结果输出一个16位位操作数,输入一个16位结果Figure4为CPU32个通用工作寄存器的结构。
Figure4.AVRCPU通用工作寄存器大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间为单个时钟周期。
如Figure4所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的头32个地址。
虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器方面具有极大的灵活性,因为X、Y、Z寄存器可以设置为指向任意寄存器的指针。
70Addr.R0$00R1$01R2$02R13$0D通用R14$0E工作R15$0F寄存器R16$10R17$11R26$1AX寄存器,低字节R27$1BX寄存器,高字节R28$1CY寄存器,低字节R29$1DY寄存器,高字节R30$1EZ寄存器,低字节R31$1FZ寄存器,高字节10ATmega16(L)2466GAVR10/03X、Y、Z寄存器X、Y、Z寄存器寄存器R26.R31除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。
这三个间接寻址寄存器示于Figure5。
Figure5.X、Y、Z寄存器在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。
具体细节请参见指令集。
堆栈指针堆栈指针堆栈指针主要用来保存临时数据、局部变量和中断/子程序的返回地址。
堆栈指针总是指向堆栈的顶部。
要注意AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。
如果在调用或中断后读程序计数器,未用位(15:
13)应屏蔽。
堆栈指针指向数据SRAM堆栈区。
在此聚集了子程序堆栈和中断堆栈。
调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60的地址空间。
使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。
使用POP指令将数据弹出堆栈时,堆栈指针加一;而用RET或RETI指令从子程序或中断返回时堆栈指针加二。
AVR的堆栈指针由I/O空间中的两个8位寄存器实现。
实际使用的位数与具体器件有关。
请注意某些AVR器件的数据区太小,用SPL就足够了。
此时将不给出SPH寄存器。
15XHXL0X寄存器7070R27($1B)R26($1A)15YHYL0Y寄存器7070R29($1D)R28($1C)15ZHZL0Z寄存器7070R31($1F)R30($1E)Bit15141312111098SP15SP14SP13SP12SP11SP10SP9SP8SPHSP7SP6SP5SP4SP3SP2SP1SP0SPL76543210读/写R/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/WR/W初始值000000000000000011ATmega16(L)2466GAVR10/03指令执行时序指令执行时序这一节介绍指令执行过程中的访问时序。
AVRCPU由系统时钟clkCPU驱动。
此时钟直接来自选定的时钟源。
芯片内部不对此时钟进行分频。
Figure6说明了由Harvard结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。
这是一个基本的流水线概念,性能高达1MIPS/MHz,具有优良的性价比、功能/时钟比、功能/功耗比。
Figure6.并行取指和指令执行Figure7演示的是寄存器文件内部访问时序。
在一个时钟周期里,ALU可以同时对两个寄存器操作数进行操作,同时将结果保存到目的寄存器中去。
Figure7.单时钟周期ALU操作复位与中断处理复位与中断处理AVR有不同的中断源。
每个中断和复位在程序空间都有独立的中断向量。
所有的中断事件都有自己的使能位。
当使能位置位,且状态寄存器的全局中断使能位I也置位时,中断可以发生。
根据程序计数器PC的不同,在引导锁定位BLB02或BLB12被编程的情况下,中断可能被自动禁止。
这个特性提高了软件的安全性。
详见P247“存储器编程”的描述。
程序存储区的最低地址缺省为复位向量和中断向量。
完整的向量列表请参见P43“中断”。
列表也决定了不同中断的优先级。
向量所在的地址越低,优先级越高。
RESET具有最高的优先级,第二个为INT0外部中断请求0。
通过置位MCU控制寄存器(MCUCR)的IVSEL,中断向量可以移至引导Flash的起始处。
编程熔丝位BOOTRST也可以将复位向量移至引导Flash的起始处。
具体参见P234“支持引导装入程序在写的同时可以读(RWW,Read-While-Write)的自我编程能力”。
任一中断发生时全局中断使能位I被清零,从而禁止了所有其他的中断。
用户软件可以在中断程序里置位I来实现中断嵌套。
此时所有的中断都可以中断当前的中断服务程序。
执行RETI指令后I自动置位。
clk1stInstructionFetch1stInstructionExecute2ndInstructionFetch2ndInstructionExecute3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ATmega16 中文 手册