开发工具:
文件大小: 2mb
下载次数: 0
上传时间: 2019-10-08
详细说明:具有 16KB 系统 内可编程 的 8 位 微控制器;ATmega16 ATmega16LATmega16(L)
综述
ATmega16是基于增强的 AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指
合集以及单时钟周期指合执行时间, ATmega16的数据吞吐率高达1 MIPS/MHz,从而可
以缓减系统在功耗和处理速度之间的矛盾。
方框图
Figure2.结构框图
--------
个m
2466G-AVR-10/03
AVR内核具有丰富的指合集和32个通用工作寄存器。所有的寄存器都直接与算逻单元
(ALU)相连接,使得一条指合可以在一个时钟周期内同时访问两个独立的寄存器。这种结
构大大提高了代码效率,并且具有比普通的cSC微控制器最高至10倍的数据吞吐率。
ATmega16有如下特点:16K字节的系统内可编程Fash(具有同时读写的能力,即RWW)
512字节 EEPROM,1K字节SRAM,32个通用lO口线,32个通用工作寄存器,用于边
界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器
(T/C,片内/外中断,可编程串行 USART,有起始条件检测器的通用串行接口,8路10位具
有可选差分输廴级可编程増益(TQFP封装)的ADC,具有片内振荡器的可编程看门狗定
时器,一个SP串行端口,以及六个可以通过软件进行选择的省电模式。工作于空闲模式
时CPU停止工作,而 USART、两线接口、AD转换器、SRAM、T/C、SP|端口以及
中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之
外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其
余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以
外所有丨o模块的工作,以降低ADC转换时的开关噪声; Standby模式下只有晶体或谐
振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速
启动能力;扩展 Standby模式下则允许振荡器和异步定时器继续工作。
本芯片是以Atme高密度非易失性存储器技术生产的。片内| SP Flash允许程序存储器通
过丨SP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程
序进行编程。引导程序可以使用任意接囗捋应用程序下载到应用Fash存储区( Application
Flash Memory)。在更新应用 Flash存储区时引导Fash区(6 Boot Flash Memory)的程序继续
运行,实现了RWW操作。通过籽8位R| SC CPU与系统内可编程的 Flash集成在一个
芯片内, ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而
低成本的解决方案。
ATmega16具有一整套的编程与系统开发工具,包括:C语言编译器、宏汇编、程序调试
器/软件仿真器、仿真器及评估板
引脚说明
VCC
数字电路的电源
GND
地
端口A(PA7.PA0)
端口A做为A/D转换器的模拟输入端。
端口A为8位双向O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特
性,可以输出和吸收大电流。作为输入使用时,若內部上拉电阻使能,端口被外部电路拉
低时捋输出电流。在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。
端口B(PB7.PB0)
端口B为8位双向O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特
性,可以输岀和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉
低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。
端口B也可以用做其他不同的特殊功能,请参见P56。
端口C(PC7PC0)
端口C为8位双向W/O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特
性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉
低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。如果
JTAG接口使能,即使复位出现引脚PC5(TD)、PC3(TMS)与PC2(TCK)的上拉电阻被激
活。
端口C也可以用做其他不同的特殊功能,请参见P59。
4 ATmega16(L)
2466G-AVR-10/03
ATmega16(L)
端口D(PD7.PD0)
端口D为8位双向O口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特
性,可以输岀和吸收大电流。作为输入使用时,若內部上拉电阻使能,则端口被外部电路
拉低时烀输出电流。在复位过程中,即使系统时钟还未起振,端口D处于高阻状态。
端口口也可以用做其他不同的特殊功能,请参见P61。
RESET
复位输入引脚。持续时间超过最小门限时间的低电邳引起系统复位。门限时间见
P36 Table15。持续时间小于门限间的脉冲不能保证可靠复位。
XTAL1
反向振荡放大器与片内时钟操作电路的输人端。
XTAL2
反向振荡放大器的输出端。
AVCC
AVCC是端口A与A/D转换器的电源。不使用ADC时,该引脚应直接与Vc连接。使用ADC
时应通过一个低通滤波器与Vc连接
AREF
AD的模拟基准输入引脚。
代码例子
本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些
例子都假定在编译之前已经包含了正确的头文件。有些C编译器在头文件里并没有包含
位定义,而且各个C编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以
获取具体的信息。
个m
5
2466G-AVR-10/03
m
AVR CPU内核
介绍
本节从总体上讨论AVR内核的结构。CPU的主要任务是保证程序的正确执行。因此它必
须能够访问存储器、执行运算、控制外设以及处理中断。
结构综述
Figure3.AVR结构的方框图
为了获得最高的性能以及并行性,AVR采用了 Harvard结构,具有独立的数据和程序总
线。程序存储器里的指合通过一级流水线运行。CPU在执行一条指合的同时读取下一条
指爷(在本文称为预取)。这个概念买现了指合的单时钟周期运行。程序存储器是可以在
线编程的 FLASH。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。从而实
现了单时钟周期的ALU操作。在典型的ALU操作中,两个位于寄存器文件中的操作数同
时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间,
实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加
的功能寄存器即为16位的X、Y、乙寄存器。
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器
操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。
程序流程通过有/无条件的跳转指合和调用指合来控制,从而疸接寻址整个地址空间。大
多数指合长度为16位,亦即每个程序存储器地址都包含一条16位或32位的指合。
程序存储器空间分为两个区:引导程序区(Boot区)和应用程序区。这两个区都有专门的
锁定位以实现读和读/写保护。用于写应用程序区的SPM指合必须位于引导程序区。
在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据
SRAM,因此其深度仅受限于SRAM的大小。在复位例程里用户首先要初始化堆栈指针
6 ATmega16(L)
2466G-AVR-10/03
ATmega16(L)
SP。这个指针位于ⅣO空间,可以进行读写访问。数据SRAM可以通过5种不同的寻址模
式进行访问
AVR存储器空间为线性的平面结构。
AVR有一个灵活的中断模块。控制寄存器位于O空间。状态寄存器里有全局中断使能位。
每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表的
位置有关,中断向量地址越低,优先级越高。
JO存储器空间包含64个可以值接寻址的地址,作为CPU外设的控制寄存器、SP,以及
其他∥O功能。映射到数据空间即为寄存器文件之后的地址0x20-0×5F
ALU=算术逻辑单元
AVR ALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间
的ALU运算只需要一个时钟周期。ALU操作分为3类:算术、逻辑和位操作。此外还提
供了支持无/有符号数和分数乘法的乘法器。具体请参见指爷集。
状态寄存器
状态寄存器包含了最近执行的算术指合的结果信息。这些信息可以用来改变程序流程以
实现条件操作。如指合集所述,所有ALU运算都将影响状态寄存器的内容。这样,在许
多情况下就不需要专门的比较指合了,从而使系统运行更快速,代码效率更高。
在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恹复。这些工作
需要软件来处理。
AVR中断寄存器SREG定义如下:
5
4
1
0
SREG
读/写
R/W
R/W
R/W
初始值
·Bit7-l:全局中断使能
l置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果清霁,则不
论单独中断标志置位与否,都不会产生中断。任意一个中断发生后清零,而执行RET
指爷后|恹复置位以使能中断。|也可以通过SE和CL指合来置位和清霁。
·Bit6-T:位拷贝存储
位拷贝指合BLD和BST利用T作为目的或源地址。BST把寄存器的某一位拷贝到T,而
BLD把T拷贝到寄存器的某一位。
Bt5-H:半进位标志
半进位标志H表示算术操作发生了半进位。此标志对于BCD运算非常有用。详见指合集
的说明。
·Bit4-S:符号位,S=NV
s为负数标志N与2的补码溢出标志∨的异或。详见指合集的说明。
·Bit3-V2的补码溢出标志
支持2的补码运算。详见指合集的说明。
·Bit2-N:负数标志
表明算术或逻辑操作结果为负。详见指爷集的说明。
个m
2466G-AVR-10/03
AmeL
·Bⅰt1-z:零标志
表明算术或逻辑操作结果为霁。详见指合集的说明。
·Bit0-C:进位标志
表明算术或逻辑操作发生了进位。详见指合集的说明。
8 ATmega16(L)
2466G-AVR-10/03
ATmega16(L)
通用寄存器文件
寄存器文件针对AVR增强型RSC指合集做了优化。为了获得需要的性能和灵活性,寄
存器文件支持以下的输入/输出方案
输出一个8位操作数,输入一个8位结果
输出两个8位位操作数,输人一个8位结果
输出两个8位位操作数,输入一个16位结果
输出一个16位位操作数,输入一个16位结果
Figure4为cPU32个通用工作寄存器的结构。
Figure4. AVR CPU通用工作寄存器
0
Addr
RO
500
R1
01
02
R13
通用
SOE
工作
R15
SOF
寄存器
R16
10
R17
S11
R26
S1A
Ⅹ寄存器,低字节
R27
S1B
X奇存器,高字节
Y寄存器,低字节
R29
Y寄存器,高字节
R30
S1E
Z奇存器,低字节
R31
$1F
Z寄存器,高字节
大多数操作寄存器文件的指合都可以直接访问所有的寄存器,而且多数这样的指合的执
行时间为单个时钟周期。
如 Figure4所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的
头32个地址。虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器
方面具有极大的灵活性,因为X、Y、Z寄存器可以设置为指向任意寄存器的指针。
个m
2466G-AVR-10/03
X、Y、z寄存器
寄存器R26R31除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三
个间接寻址寄存器示于 Figure5。
Figure5.Ⅹ、Y、z寄存器
15
X寄存器
R27(51B)
R26($1A)
15
Y寄存器
07
R29($1D)
R28($1c
15
ZH
0
Z寄存器
0
0
R31($1F)
R30($1E
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。
具体细节请参见指合集。
堆栈指针
堆栈指针主要用来保存临时数据、局部变量和中断/子程序的返回地址。堆栈指针总是指
向堆栈的顶部。要注意AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数
值烀减小。如果在调用或中断后读程序计数器,未用位(15:13)应屏蔽。
堆栈指针指向数据SRAM堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子程序和使
能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0X60的地址空间。使用PUSH
指合将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针烀减二。使
用POP指合烀数据弹出堆栈时,堆栈指针加一;而用RET或RET指合从子程序或中断
返回时堆栈指针加二。
AVR的堆栈指针由O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请
注意某些AVR器件的数据区太小,用SPL就足够了。此时烀不给出SPH寄存器
Bit
15
14
13
12
10
9
8
SP15
SP14
SP13
SP12
SP11
SP10
SP9
SP8
SP7
SP6
SP5
SP4
SP3
SP2
SP1
SPO
读/写
R/W
R/W
初始值
0
0
0
10 ATmega16(L)
2466G-AVR-10/03
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.