Atmel ATmega8535, ATmega8535L User Manual

产品特性

高性能、低功耗的 8 AVR
先进的 RISC 结构
– 130 条指令大多数指令执行时间为单个时钟周期 –32个 8 位通用工作寄存器全静态工作工作于 16 MHz 时性能高达 16 MIPS – 只需两个时钟周期的硬件乘法器
非易失性程序和数据存储器
–8K 字节的系统内可编程 Flash
擦写寿命 : 10,000
– 具有独立锁定位的可选 Boot 代码区
通过片上 Boot 程序实现系统内编程 真正的同时读写操作
– 512 字节的 EEPROM
擦写寿命 : 100,000
– 512 字节的片内 SRAM – 可以对锁定位进行编程以实现用户程序的加密
外设特点
两个具有独立预分频器和比较器功能的 8 位定时器 / 计数器一个具有预分频器、比较功能和捕捉功能的 16 位定时器 / 计数器具有独立振荡器的实时计数器 RTC – 四通道 PWM –8路 10 位 ADC
8 个单端通道 TQFP 封装的 7 个差分通道
2 TQFP 封装的具有可编程增益 (1x, 10x, 200x)的差分通道面向字节的两线接口两个可编程的串行 USART – 可工作于主机 / 从机模式的 SPI 串行接口具有独立片内振荡器的可编程看门狗定时器片内模拟比较器
特殊的处理器特点
上电复位以及可编程的掉电检测片内经过标定的 RC 振荡器片内 / 片外中断源 –6种睡眠模式 : 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及
扩展的 Standby 模式
I/O 和封装
– 32 个可编程的 I/O –40引脚 PDIP 封装 , 44 引脚 TQFP 封装 ,44 引脚 PLCC 封装与 44 引脚 MLF 封装
工作电压
– ATmega8535L2.7 - 5.5V – ATmega85354.5 - 5.5V
速度等级
– ATmega8535L0 - 8 MHz – ATmega85350 - 16 MHz
®
微处理器
具有 8KB 系统内 可编程 Flash 8 微 控制器
ATmega8535 ATmega8535L
初稿
本文是英文数据手册的中文 翻译,其目的是方便中国用 户的阅读。它无法自动跟随 原稿的更新,同时也可能存 在翻译上的错误。读者应该 以英文原稿为参考以获得更 准确的信息。
2502E–AVR–12/03
Rev. 2502E–AVR–12/03

引脚配置 Figure 1. ATmega8535 的引脚

(MOSI) PB5 (MISO) PB6
(SCK) PB7
RESET
VCC
GND XTAL2 XTAL1
(RXD) PD0 (TXD) PD1
(INT0) PD2
PB4 (SS)
PB3 (AIN1/OC0)
PB2 (AIN0/INT2)
PB1 (T1)
PB0 (XCK/T0)
GND
4443424140393837363534
1 2 3 4 5 6 7 8 9 10 11
1213141516171819202122
VCC
(OC2) PD7
(INT1) PD3
(ICP1) PD6
(OC1B) PD4
(OC1A) PD5
VCC
PA0 (ADC0)
GND
(SCL) PC0
(INT2/AIN0) PB2 (OC0/AIN1) PB3
PA1 (ADC1)
PA2 (ADC2)
PA3 (ADC3)
PC2
PC3
(SDA) PC1
(XCK/T0) PB0
(T1) PB1
(SS) PB4 (MOSI) PB5 (MISO) PB6
(SCK) PB7
RESET
XTAL2
XTAL1 (RXD) PD0 (TXD) PD1
(INT0) PD2
(INT1) PD3 (OC1B) PD4 (OC1A) PD5
(ICP1) PD6
33
PA4 (ADC4)
32
PA5 (ADC5)
31
PA6 (ADC6)
30
PA7 (ADC7)
29
AREF
28
GND
27
AVCC
26
PC7 (TOSC2)
25
PC6 (TOSC1)
24
PC5
23
PC4
VCC GND
PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) AREF GND AVCC PC7 (TOSC2) PC6 (TOSC1) PC5 PC4 PC3 PC2 PC1 (SDA) PC0 (SCL) PD7 (OC2)
(MOSI) PB5 (MISO) PB6
(SCK) PB7
RESET
VCC
GND XTAL2 XTAL1
(RXD) PD0 (TXD) PD1
(INT0) PD2
NOTE: MLF Bottom pad should be soldered to ground.
PLCC
PB4 (SS)
PB3 (AIN1/OC0)
PB2 (AIN0/INT2)
PB1 (T1)
PB0 (XCK/T0)
GND
VCC
65432
7 8 9 10 11 12 13 14 15 16 17
1819202122232425262728
(INT1) PD3
(OC1B) PD4
(OC1A) PD5
1
VCC
(OC2) PD7
(ICP1) PD6
PA0 (ADC0)
4443424140
GND
(SCL) PC0
PA1 (ADC1)
PA2 (ADC2)
PA3 (ADC3)
39 38 37 36 35 34 33 32 31 30 29
PC2
PC3
(SDA) PC1
PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) AREF GND AVCC PC7 (TOSC2) PC6 (TOSC1) PC5 PC4
声明 本数据手册的典型值来源于对器件的仿真,以及其他基于相同产生工艺的 AVR 微控制器
的标定特性。本器件经过特性化之后将给出实际的最大值和最小值。
2
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
V
综述 ATmega8535是基于增强的AVR RISC结构的低功耗8 位 CMOS微控制器。由于其先进的
指令集以及单时钟周期指令执行时间,ATmega8535 的数据吞吐率高达 1MIPS/MHz,从 而可以缓减系统在功耗和处理速度之间的矛盾。
方框图 Figure 2. 结构框图
CC
GND
AVCC
AREF
INSTRUCTION
INSTRUCTION
PA0 - PA7 PC0 - PC7
PORTA DRIVERS/BUFFERS
PORTA DIGITAL INTERFACE
MUX &
ADC
PROGRAM COUNTER
PROGRAM
FLASH
REGISTER
DECODER
CONTROL
LINES
ADC
INTERFACE
STACK
POINTER
SRAM
GENERAL
PURPOSE
REGISTERS
X Y Z
ALU
PORTC DRIVERS/BUFFERS
PORTC DIGITAL INTERFACE
TWI
TIMERS/
COUNTERS
INTERNAL
OSCILLATOR
WATCHDOG
TIMER
MCU CTRL.
& TIMING
INTERRUPT
UNIT
OSCILLATOR
OSCILLATOR
INTERNAL CALIBRATED OSCILLATOR
XTAL1
XTAL2
RESET
2502E–AVR–12/03
AVR CPU
PROGRAMMING
LOGIC
+
-
PORTB DIGITAL INTERFACE
PORTB DRIVERS/BUFFERS
STATUS
REGISTER
SPI
COMP.
INTERFACE
EEPROM
USART
PORTD DIGITAL INTERFACE
PORTD DRIVERS/BUFFERS
PD0 - PD7PB0 - PB7
3
AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元 (ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结 构大大提高了代码效率,并且具有比普通的 CISC 微控制器最高至 10 倍的数据吞吐率。
ATmega8535 有如下特点 :8K 字节的系统内可编程 Flash( 具有同时读写的能力,即 RWW),512 字节 EEPROM,512 字节 SRAM,32 个通用 I/O 口线,32 个通用工作寄存
器,三个具有比较模式的灵活的定时器 /计数器 (T/C), 片内/ 外中断,可编程串行 USART, 面向字节的两线串行接口,10 位具有可选差分输入级可编程增益 (TQFP 封装 ) 的 ADC , 具有片内振荡器的可编程看门狗定时器,一个 SPI 串行端口,以及六个可以通过软件进行 选择的省电模式。 工作于空闲模式时 CPU 停止工作,而 SRAM、 T/C、 SPI 端口以及中 断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外 都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余 功能模块处于休眠状态; ADC 噪声抑制模式时终止 CPU 和除了异步定时器与 ADC 以外 所有 I/O 模块的工作,以降低 ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振 振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启 动能力;扩展 Standby 模式下则允许振荡器和异步定时器继续工作。
本芯片是以 Atmel 高密度非易失性存储器技术生产的。片内 ISP Flash 允许程序存储器通 过 ISP 串行接口,或者通用编程器进行编程,也可以通过运行于 AVR 内核之中的引导程 序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash 存储区 (Application Flash Memory)。在更新应用Flash存储区时引导Flash(Boot Flash Memory)的程序继续 运行,实现了 RWW 操作。 通过将 8 位 RISC CPU 与系统内可编程的 Flash 集成在一个 芯片内, ATmega8535 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活 而低成本的解决方案。
ATmega8535 具有一整套的编程与系统开发工具,包括:C 语言编译器、宏汇编、 程序调 试器 / 软件仿真器、仿真器及评估板。

AT90S8535 兼容性 ATmega8535 除有 AT90S8535 的所有特性外,还有一些新的特性。ATmega8535 基本上

AT90S8535 向下兼容。但两者间还会存在不兼容的问题。可通过对 AT90S8535
S8535C 熔丝位编程,选择兼容模式来解决该问题,ATmega8535 引脚与 AT90S8535100%兼容,也可在电路印刷板上替换AT90S8535,但二者的熔丝位位置及电
气特性间存在差异。

AT90S8535 兼容模式 S8535C 熔丝位编程会改变下列功能:

改变看门狗溢出周期的时序禁用,详见 P43“ 改变看门狗定时器配置的时间序列 ” 。
•USART接收寄存器的双缓冲器被禁用,详见 P135“AVR USART 和 AVR UART 兼容
4
ATmega8535(L)
2502E–AVR–12/03

引脚说明

ATmega8535(L)
V
CC
GND

端口 A(PA7..PA0) 端口 A 作为 A/D 转换器的模拟输入端。

端口 B(PB7..PB0) 端口 B 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

端口 C(PC7..PC0) 端口 C 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

端口 D(PD7..PD0) 端口 D 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特

数字电路的电源
端口 A 不作为 A/D 转换器使用时,就作为 8 位双向 I/O 口,具有可编程的内部上拉电阻。 其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上 拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起 振,端口 A 处于高阻状态。
性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 处于高阻状态。
端口 B 的其他功能见 P58
性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 C 处于高阻状态。
性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路 拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 D 处于高阻状态。
端口 D 的其他功能见 P62

RESET

XTAL1 反向振荡放大器与片内时钟操作电路的输入端。

XTAL2 反向振荡放大器的输出端。

AVCC AVCC是端口A与A/D转换器的电源。不使用ADC时,该引脚应直接与V

AREF A/D 的模拟基准输入引脚。

复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P35Table 15 。持续时间小于门限时间的脉冲不能保证可靠复位。
连接。使用ADC
时应通过一个低通滤波器与 V
CC
连接。
CC

代码例子 本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些

例子都假定在编译之前已经包含了正确的头文件。有些 C 编译器在头文件里并没有包含 位定义,而且各个 C 编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以 获取具体的信息。

AVR CPU 内核

介绍 本节从总体上讨论 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必
须能够访问存储器、执行运算、控制外设以及处理中断。
2502E–AVR–12/03
5

结构综述 Figure 3. AVR 结构的方框图

8-bit Data Bus
Flash
Program
Memory
Instruction
Register
Instruction
Decoder
Control Lines
Program
Counter
Direct Addressing
Status
and Control
32 x 8
General
Purpose
Registrers
ALU
Indirect Addressing
Data
SRAM
EEPROM
Interrupt
Unit
SPI
Unit
Watchdog
Timer
Analog
Comparator
I/O Module1
I/O Module 2
I/O Module n
I/O Lines
为了获得最高的性能以及并行性, AVR 采用了 Harvard 结构,具有独立的数据和程序总 线。程序存储器里的指令通过一级流水线运行。 CPU 在执行一条指令的同时读取下一条 指令 ( 在本文称为预取 )。这个概念实现了指令的单时钟周期运行。程序存储器是可以在 线编程的 Flash
快速访问寄存器文件包括 32 8 位通用工作寄存器,访问时间为一个时钟周期。从而实 现了单时钟周期的 ALU 操作。在典型的 ALU 操作中,两个位于寄存器文件中的操作数同 时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。
寄存器文件里有 6 个寄存器可以用作 3 个 16 位的间接寻址寄存器指针以寻址数据空间, 实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加 的功能寄存器即为 16 位的 X、 Y、 Z 寄存器。
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器 操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。
程序流程通过有 / 无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大 多数指令长度为 16 位,亦即每个程序存储器地址都包含一条 16 位或 32 位的指令。
6
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
程序存储器空间分为两个区:引导程序区 (Boot 区 ) 和应用程序区。这两个区都有专门的 锁定位以实现读和读 / 写保护。用于写应用程序区的 SPM 指令必须位于引导程序区。
在中断和调用子程序时返回地址的程序计数器 (PC) 保存于堆栈之中。堆栈位于通用数据
SRAM,因此其深度仅受限于 SRAM 的大小。在复位例程里用户首先要初始化堆栈指针 SP。这个指针位于 I/O 空间,可以进行读写访问。数据 SRAM 可以通过 5 种不同的寻址模
式进行访问。
AVR 存储器空间为线性的平面结构。
AVR有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。
每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表的 位置有关,中断向量地址越低,优先级越高。
I/O 存储器空间包含 64 个可以直接寻址的地址,作为 CPU 外设的控制寄存器、SPI,以 及 其他 I/O 功能。映射到数据空间即为寄存器文件之后的地址 0x20 - 0x5F

ALU -算术逻辑单元 AVR ALU 与 32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间

ALU 运算只需要一个时钟周期。 ALU 操作分为 3 类:算术、逻辑和位操作。此外还提 供了支持无 / 有符号数和分数乘法的乘法器。具体请参见指令集。
2502E–AVR–12/03
7

状态寄存器 状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以

实现条件操作。如指令集所述,所有 ALU 运算都将影响状态寄存器的内容。这样,在许 多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。
在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作 需要软件来处理。
AVR 中断寄存器 SREG 定义如下:
Bit 76543210
I T H S V N Z C SREG
读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 00000000
• Bit 7 – I: 全局中断使能
I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果 I 清零,则不 论单独中断标志置位与否,都不会产生中断。任意一个中断发生后 I 清零,而执行 RETI 指令后 I 恢复置位以使能中断。 I 也可以通过 SEI CLI 指令来置位和清零。
• Bit 6 – T: 位拷贝存储
位拷贝指令 BLD BST 利用 T 作为目的或源地址。BST 把寄存器的某一位拷贝到 T,而 BLD T 拷贝到寄存器的某一位。
• Bit 5 – H: 半进位标志
半进位标志 H 表示算术操作发生了半进位。此标志对于 BCD 运算非常有用。详见指令集 的说明。
• Bit 4 – S: 符号位 , S = N
V
S 为负数标志 N 2 的补码溢出标志 V 的异或。详见指令集的说明。
• Bit 3 – V: 2 的补码溢出标志
支持 2 的补码运算。详见指令集的说明。
• Bit 2 – N: 负数标志
表明算术或逻辑操作结果为负。详见指令集的说明。
• Bit 1 – Z: 零标志
表明算术或逻辑操作结果为零。详见指令集的说明。
• Bit 0 – C: 进位标志
表明算术或逻辑操作发生了进位。详见指令集的说明。

通用寄存器文件 寄存器文件针对 AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和灵活性,寄

存器文件支持以下的输入 / 输出方案:
输出一个 8 位操作数,输入一个 8 位结果
输出两个 8 位位操作数,输入一个 8 位结果
输出两个 8 位位操作数,输入一个 16 位结果
输出一个 16 位位操作数,输入一个 16 位结果
Figure 4 CPU 32 个通用工作寄存器的结构。
Figure 4. AVR CPU 通用工作寄存器
7 0 Addr.
R0 0x00
R1 0x01
8
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
R2 0x02
R13 0x0D
通用 R14 0x0E 工作 R15 0x0F
寄存器 R16 0x10
R17 0x11
R26 0x1A X 寄存器,低字节 R27 0x1B X 寄存器,高字节 R28 0x1C Y 寄存器,低字节 R29 0x1D Y 寄存器,高字节 R30 0x1E Z 寄存器,低字节 R31 0x1F Z 寄存器,高字节
大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执 行时间为单个时钟周期。
Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的 头 32 个地址。虽然寄存器文件的物理实现不是 SRAM,这种内存组织方式在访问寄存器 方面具有极大的灵活性,因为 X、 Y、 Z 寄存器可以设置为指向任意寄存器的指针。
2502E–AVR–12/03
9

X、Y、Z 寄存器 寄存器 R26..R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三

个间接寻址寄存器示于 Figure 5
Figure 5. XYZ 寄存器
15 XH XL 0
X 寄存器 707 0
R27 (0x1B) R26 (0x1A)
15 YH YL 0
Y 寄存器 707 0
R29 (0x1D) R28 (0x1C)
15 ZH ZL 0
Z 寄存器 70 7 0
R31 (0x1F) R30 (0x1E)
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一功能。 具体细节请参见指令集。

堆栈指针 堆栈指针主要用来保存临时数据、局部变量和中断 / 子程序的返回地址。堆栈指针总是指

向堆栈的顶部。要注意 AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。
堆栈指针指向数据 SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子程序和使 能中断之前必须定义堆栈空间,且堆栈指针必须指向高于 0x60 的地址空间。使用 PUSH 指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使 用 POP 指令将数据弹出堆栈时,堆栈指针加一;而用 RET RETI 指令从子程序或中断 返回时堆栈指针加二。
AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请 注意某些 AVR 器件的数据区太小,用 SPL 就足够了。此时将不给出 SPH 寄存器。
Bit 151413121110 9 8
SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
76543210
读/写 R/W R/W R/W R/W R/W R/W R/W R/W
R/W R/W R/W R/W R/W R/W R/W R/W
初始值 00000000
00000000

指令执行时序 这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟 clk

来自选定的时钟源。芯片内部不对此时钟进行分频。
Figure 6 说明了由 Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄 存器文件的概念。这是一个基本的流水线概念,性能高达 1 MIPS/MHz,具有优良的性价 比、功能 / 时钟比、功能 / 功耗比。
驱动。此时钟直接
CPU
10
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
2
R
Figure 6. 并行取指和指令执行
T1 T2 T3 T4
clk
CPU
1st Instruction Fetch
1st Instruction Execute
2nd Instruction Fetch
nd Instruction Execute
3rd Instruction Fetch
3rd Instruction Execute
4th Instruction Fetch
Figure 7 演示的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄 存器操作数进行操作,同时将结果保存到目的寄存器中去。
Figure 7. 单时钟周期 ALU 操作
T1 T2 T3 T4
clk
CPU
Total Execution Time
egister Operands Fetch
ALU Operation Execute
Result Write Back

复位与中断处理 AVR 有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件

都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位 I 也置位时,中断可 以发生。根据程序计数器 PC 的不同,在引导锁定位 BLB02 BLB12 被编程的情况下, 中断可能被自动禁止。这个特性提高了软件的安全性。详见 P225“ 存储器编程 的描述。
程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P44“ 中断 。 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。 RESET 具有最高 的优先级,第二个为 INT0 – 外部中断请求 0。通过置位通用中断控制寄存器 (GICR) IVSEL,中断向量可以移至引导Flash 的起始处,参见 P44“中断。编程熔丝位BOOTRST 也可以将复位向量移至引导 Flash 的起始处。具体参见 P212“ 支持引导装入程序 – 在写 的同时可以读 (RWW, Read-While-Write) 的自我编程能力
任一中断发生时全局中断使能位 I 被清零,从而禁止了所有其他的中断。用户软件可以在 中断程序里置位 I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执 行 RETI 指令后 I 自动置位。
从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序 计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中 断标志也可以通过对其写 ”1” 的方式来清除。当中断发生后,如果相应的中断使能位为 "0",则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局 中断标志被清零,则所有已发生的中断都不会被执行,直到 I 置位。然后挂起的各个中断 按中断优先级依次执行。
第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若 中断条件在中断使能之前就消失了,中断不会被触发。
2502E–AVR–12/03
11
AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。
要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢 复。这些工作必须由用户通过软件来完成。
使用 CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行 CLI 指令后发生, 即使它是在执行 CLI 指令的同时发生的。下面的例子说明了如何在写 EEPROM 时使用这 个指令来防止中断发生以避免对 EEPROM 内容的破坏。
汇编代码例程
in r16, SREG ; 保存SREG cli ; 禁止中断
启动
sbi EECR, EEMWE ; sbi EECR, EEWE out SREG, r16 ;
EEPROM
恢复
SREG (I位)
写操作
C 代码例程
char cSREG;
保存
cSREG = SREG; /* /* 禁止中断 */ _CLI(); EECR |= (1<<EEMWE); /* EECR |= (1<<EEWE); SREG = cSREG; /*
SREG */
启动
恢复
SREG (I位) */
EEPROM
写操作
*/
12
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
使用 SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执 行。
汇编代码例程
sei ; sleep ;
; 注意 : 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式
C 代码例程
_SEI(); /* _SLEEP(); /* /* 注意 : 在执行任何被挂起的中断之前 MCU 将首先进入休眠模式 */

中断响应时间 AVR 中断响应时间最少为 4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例

程。在这 4 个时钟期期间 PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳 转需要 3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令 执行完毕后 MCU 才会执行中断程序。若中断发生时 MCU 处于休眠模式,中断响应时间 还需增加 4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。
中断返回需要 4 个时钟。在此期间 PC( 两个字节 ) 将被弹出栈,堆栈指针加二,状态寄存 器 SREG I 置位。
置位全局中断使能标志 进入休眠模式,等待中断发生
置位全局中断使能标志
进入休眠模式,等待中断发生
*/
*/
2502E–AVR–12/03
13

AVR ATmega8535 存 储器

本节讲述 ATmega8535 的存储器。AVR 结构具有两个主要的存储器空间:数据存储器空 间和程序存储器空间。此外, ATmega8535 还有 EEPROM 存储器以保存数据。这三个 存储器空间都为线性的平面结构。

系统内可编程的 Flash 程序 存储器

ATmega8535具有 8K字节的在线编程Flash,用于存放程序指令代码。因为所有的AVR 令为 16 位或 32 位,故而 Flash 组织成 4K x 16 位的形式。用户程序的安全性要根据 Flash 程序存储器的两个区:引导 (Boot) 程序区和应用程序区,分开来考虑。
Flash存储器至少可以擦写10,000 次。ATmega8535的程序计数器(PC)12位,因此可以 寻址 4K 字的程序存储器空间。引导程序区以及相关的软件安全锁定位请参见 P212“ 支持 引导装入程序 – 在写的同时可以读 (RWW, Read-While-Write) 的自我编程能力 ,而 P225“ 存储器编程 详述了用 SPI 或平行编程模式实现对 Flash 编程。
常数可以保存于整个程序存储器地址空间 ( 参考 LPM 加载程序存储器指令的说明 )。
取指与执行时序图请参见 P10“ 指令执行时序
Figure 8. 程序存储器映像
$000
Application Flash Section
14
Boot Flash Section
$FFF
ATmega8535(L)
2502E–AVR–12/03

SRAM 数据存储器 Figure 9 给出了 ATmega8535 SRAM 空间的组织结构。

Register File
Data Address Space
608 个数据存储器包括了寄存器文件、 I/O 存储器及内部数据 SRAM。起始的 96 个地 址为寄存器文件与 I/O 存储器,接着是 512 字节的内部数据 SRAM
数据存储器的寻址方式分为 5 种:直接寻址、带偏移量的间接寻址、间接寻址、带预减量 的间接寻址和带后增量的间接寻址。寄存器文件中的寄存器 R26 R31 为间接寻址的指 针寄存器。
直接寻址范围可达整个数据区。
带偏移量的间接寻址模式能够寻址到由寄存器 Y 和 Z 给定的基址附近的 63 个地址。
在自动预减和后加的间接寻址模式中,寄存器 X、 Y 和 Z 自动增加或减少。
ATmega8535的全部32个通用寄存器、64个I/O寄存器及512 个字节的内部数据SRAM 以通过所有上述的寻址模式进行访问。寄存器文件的描述见 P8“ 通用寄存器文件
Figure 9. 数据存储器映像
ATmega8535(L)
R0 R1
R2
...
R29 R30
R31
I/O Registers
$00 $01 $02
...
$3D
$3E $3F
$0000 $0001 $0002
...
$001D $001E
$001F
$0020 $0021 $0022
...
$005D $005E $005F
Internal SRAM
$0060 $0061
...
$025E $025F
2502E–AVR–12/03
15

数据存储器访问时间 本节说明访问内部存储器的时序。如 Figure 10 所示,内部数据 SRAM 访问时间为两个

A
clk
时钟。
CPU
Figure 10. 片上 SRAM 存取周期
T1 T2 T3
clk
CPU
ddress
Compute Address
Address valid
Data
WR
Write
Data
RD
Memory Access Instruction
Next Instruction
Read

EEPROM 数据存储器 ATmega8535 包含 512 字节的 EEPROM 数据存储器。它是作为一个独立的数据空间而存

在的,可以按字节读写。 EEPROM 的寿命至少为 100,000 次擦除周期。 EEPROM 的访 问由地址寄存器、数据寄存器和控制寄存器决定。
P225“ 存储器编程 包含使用 SPI 或并行编程模式对 EEPROM 编程。

EEPROM 读 / 写访问 EEPROM 的访问寄存器位于 I/O 空间。

EEPROM的写访问时间由 Table 1给出。自定时功能可以让用户软件监测何时可以开始写 下一字节。用户操作 EEPROM 需要注意如下问题:在电源滤波时间常数比较大的电路 中,上电 / 下电时 V 的电源电压。请参见 P20“ 防止 EEPROM 数据丢失 以避免出现 EEPROM 数据丢失的问 题。
上升 / 下降速度会比较慢。此时 CPU 可能工作于低于晶振所要求
CC
为了防止无意识的 EEPROM 写操作,需要执行一个特定的写时序。具体参看 EEPROM 控制寄存器的内容。
执行 EEPROM 读操作时, CPU 会停止工作 4 个周期,然后再执行后续指令;执行 EEPROM 写操作时, CPU 会停止工作 2 个周期,然后再执行后续指令。
16
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)

EEPROM 地址寄存器- EEARH 和 EEARL

EEPROM 数据寄存器- EEDR

Bit 151413121110 9 8
–––––––EEAR8EEARH
EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
76543210
读/写 RRRRRRRR/W
R/W R/W R/W R/W R/W R/W R/W R/W
初始值 0000000X
XXXXXXXX
• Bits 15..9 – Res: 保留
保留位,读操作返回值为零。
• Bits 8..0 – EEAR8..0: EEPROM 地址
EEPROM地址寄存器– EEARHEEARL指定了512 字节的 EEPROM空间。EEPROM地 址是线性的,从 0 到 511。EEAR 的初始值没有定义。在访问 EEPROM 之前必须为其赋 予正确的数据。
Bit 76543210
MSB LSB EEDR
读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 00000000
• Bits 7..0 – EEDR7..0: EEPROM 数据

EEPROM 控制寄存器- EECR

对于 EEPROM 写操作, EEDR 是需要写到 EEAR 单元的数据;对于读操作, EEDR 是 从地址 EEAR 读取的数据。
Bit 76543 2 10
––––EERIEEEMWEEEWEEEREEECR
读/写 R R R R R/W R/W R/W R/W 初始值 000000X0
• Bits 7..4 – Res: 保留
保留位,读操作返回值为零。
• Bit 3 – EERIE: EEPROM 准备好中断使能
SREG I "1",则置位 EERIE 将使能 EEPROM 准备好中断。清零 EERIE 则禁止 此中断。当 EEWE 清零时 EEPROM 准备好中断即可发生。
• Bit 2 – EEMWE: EEPROM 主机写使能
EEMWE决定了EEWE置位是否可以启动EEPROM写操作。当EEMWE"1"时,在4个时 钟周期内置位 EEWE 将把数据写入 EEPROM 的指定地址;若 EEMWE "0“,则操作
EEWE 不起作用。 EEMWE 置位后 4 个周期,硬件对其清零。见 EEPROM 写过程中对 EEWE 位的描述。
• Bit 1 – EEWE: EEPROM 写使能
EEWE EEPROM 写操作的使能信号。当 EEPROM 数据和地址设置好之后,需置位 EEWE 以便将数据写入EEPROM。此 时 EEMWE 必须置位,否则EEPROM 写操作将不会 发生。写时序如下 ( 3 步和第 4 步的次序并不重要 )
1. 等待 EEWE 位变为零
2. 等待 SPMCSR 中的 SPMEN 位变为零
3. 将新的 EEPROM 地址写入 EEAR(可选)
2502E–AVR–12/03
17
4. 将新的 EEPROM 数据写入 EEDR(可选)
5. EECR 寄存器的 EEMWE "1",同时清零 EEWE
6. 在置位 EEMWE 的 4 个周期内,置位 EEWE
CPU Flash 的时候不能对 EEPROM 进行编程。在启动 EEPROM 写操作之前软件 必须检查 Flash写操作是否已经完成。步骤(2)仅在软件包含引导程序并允许CPU Flash 进行编程时才有用。如果 CPU 永远都不会写 Flash,步 骤 ( 2) 可省略。请参见 P212“ 支持 引导装入程序 – 在写的同时可以读 (RWW, Read-While-Write) 的自我编程能力
注意:如果在步骤 5 和 6 之间发生了中断,写操作将失败。因为此时 EEPROM 写使能操 作将超时。如果一个操作 EEPROM的中断打断了另一个 EEPROM 操作,EEAR 或 EEDR 寄存器可能被修改,引起 EEPROM 操作失败。建议此时关闭全局中断标志 I。
经过写访问时间之后,EEWE 硬件清零。用户可以凭借这一位判断写时序是否已经完成。 EEWE 置位后, CPU 要停止两个时钟周期才会运行下一条指令。
• Bit 0 – EERE: EEPROM 读使能
EEREEEPROM读操作的使能信号。当EEPROM地址设置好之后,需置位EERE以便将 数据读入 EEAREEPROM 数据的读取只需要一条指令,且无需等待。读取 EEPROMCPU 要停止 4 个时钟周期才可以执行下一条指令。
用户在读取 EEPROM 时应该检测 EEWE。如果一个写操作正在进行,就无法读取 EEPROM,也无法改变寄存器 EEAR
经过校准的片内振荡器用于 EEPROM 定时。Table 1 为 CPU 访问 EEPROM的典型时间。
Table 1. EEPROM 编程时间
符号 校准的 RC 振荡器周期数
EEPROM 写操作 (CPU) 8448 8.5 ms
(1)
典型的编程时间
Note: 1. 使用时钟频率为 1 MHz,不倚赖 CKSEL 熔丝位的设置。
18
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
下面的代码分别用汇编和 C 函数说明如何实现 EEPROM 的写操作。在此假设中断不会在 执行这些函数的过程当中发生。同时还假设软件没有 Boot Loader。若 Boot Loader 存在,EEPROM 写函数还需要等待正在运行的 SPM 命令的结束。
汇编代码例程
EEPROM_write:
等待上一次写操作结束
;
sbic EECR,EEWE rjmp EEPROM_write
设置地址寄存器
;
out EEARH, r18 out EEARL, r17
将数据写入数据寄存器
;
out EEDR,r16
置位
EEMWE
;
sbi EECR,EEMWE
置位
EEWE
;
sbi EECR,EEWE ret
(r18:r17)
(r16)
以启动写操作
C 代码例程
void EEPROM_write(unsigned int uiAddress, unsigned char ucData) {
等待上一次写操作结束
/* while(EECR & (1<<EEWE))
;
设置地址和数据寄存器
/* EEAR = uiAddress; EEDR = ucData;
置位
置位
EEMWE */
EEWE
以启动写操作
/* EECR |= (1<<EEMWE);
/*
EECR |= (1<<EEWE);
}
*/
*/
*/
2502E–AVR–12/03
19
下面的例子说明如何用汇编和 C 函数来读取 EEPROM,在此假设中断不会在执行这些函 数的过程当中发生。
汇编代码例程
EEPROM_read:
等待上一次写操作结束
;
sbic EECR,EEWE rjmp EEPROM_read
设置地址寄存器
;
out EEARH, r18 out EEARL, r17
设置
EERE
;
sbi EECR,EERE
自数据寄存器读取数据
;
in r16,EEDR ret
(r18:r17)
以启动读操作
C 代码例程
unsigned char EEPROM_read(unsigned int uiAddress) {
等待上一次写操作结束
/*
while(EECR & (1<<EEWE))
;
设置地址寄存器
/* EEAR = uiAddress;
设置
EERE
/* EECR |= (1<<EERE);
自数据寄存器返回数据
/*
return EEDR;
}
以启动读操作
*/
*/
*/
*/

在掉电休眠模式下的 EEPROM 写操作

若程序执行掉电指令时 EEPROM 的写操作正在进行, EEPROM 的写操作将继续,并在 指定的写访问时间之前完成。但写操作结束后,振荡器还将继续运行,芯片并非处于完全 的掉电模式。因此在执行掉电指令之前应结束 EEPROM 的写操作。

防止 EEPROM 数据丢失 若电源电压过低,CPU 和 EEPROM 有可能工作不正常,造成 EEPROM 数据的毁坏 ( 丢

失 )。这种情况在使用独立的 EEPROM 器件时也会遇到。因而需要使用相同的保护方案。
由于电压过低造成 EEPROM 数据损坏有两种可能:一是电压低于 EEPROM 写操作所需 要的最低电压;二是 CPU 本身已经无法正常工作。
EEPROM 数据损坏的问题可以通过以下方法解决: 当电压过低时保持 AVR RESET 信号为低。这可以通过使能芯片的掉电检测电路 BOD
实现。如果 BOD 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了 复位,只要电压足够高,写操作仍将正常结束。

I/O 存储器 ATmega8535 的 I/O 空间定义见 P285。

ATmega8535所有的I/O及外设都被放置于I/O空间。所有的I/O位置都可以通过IN 与OUT 指令来访问,在 32 个通用工作寄存器和 I/O 之间传输数据。 地址为 0x00 - 0x1F 的 I/O 寄 存器还可用 SBI CBI 指令直接进行位寻址,而 SBIS SBIC 则用来检查某一位的值。
20
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
更多内容请参见指令集。使用 IN OUT 指令时地址必须在 0x00 - 0x3F 之间。如果要象 SRAM 一样通过 LD ST 指令访问 I/O 寄存器,相应的地址要加上 0x20
为了与后续产品兼容,保留未用的未应写 "0",而保留的 I/O 寄存器则不应进行写操作。
一些状态标志位的清除是通过写 "1" 来实现的。要注意的是,与其他大多数 AVR 不同, CBI SBI 指令只能对某些特定的位进行操作,因而可以用于包含这些状态标志的寄存 器。 CBI SBI 指令只对 0x00 0x1F 的寄存器有效。
I/O 和外设控制寄存器在后续其他章节进行介绍。
2502E–AVR–12/03
21

系统时钟及时钟选项

时钟系统及其分布 Figure 11AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗,

可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,详见 P30“ 电源管理及睡眠 模式 。时钟系统详见 Figure 11
Figure 11. 时钟分布
Asynchronous Timer/Counter
Timer/Counter
Oscillator
General I/O
Modules
clk
clk
ASY
External RC
Oscillator
ADC CPU Core RAM
clk
ADC
I/O
AVR Clock
Control Unit
Source clock
Clock
Multiplexer
External Clock
clk
CPU
clk
FLASH
Reset Logic
Crystal
Oscillator
Watchdog Timer
Watchdog clock
Watchdog
Oscillator
Low-frequency
Crystal Oscillator
Flash and EEPROM
Calibrated RC
Oscillator
CPU 时钟- clk
I/O 时钟- clk
Flash 时钟- clk
CPU
I/O
FLASH
异步定时器时钟- clk
ADC 时钟- clk
22
ADC
ATmega8535(L)
ASY
CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针 的数据存储器。终止 CPU 时钟将使内核停止工作和计算。
I/O 时钟用于主要的I/O 模块,如定时器 /计数器、SPI和 USARTI/O时钟还用于外部中断 模块。要注意的是有些外部中断由异步逻辑检测,因此即使 I/O 时钟停止了这些中断仍然 可以得到监控。此外, USI 模块的起始条件检测在没有 clk
的情况下也是异步实现的,
I/O
使得这个功能在任何睡眠模式下都可以正常工作。
Flash 时钟控制 Flash 接口的操作。此时钟通常与 CPU 时钟同时挂起或激活。
异步定时器时钟允许异步定时器 / 计数器直接由外部 32 kHz 时钟晶体驱动。使得此定时 器 / 计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟。
ADC具有专门的时钟。这样可以在ADC工作的时候停止CPUI/O时钟以降低数字电路产 生的噪声,从而提高 ADC 转换精度。
2502E–AVR–12/03
ATmega8535(L)
时钟源 ATmega8535芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟
发生器,再分配到相应的模块。
Table 2. 时钟源选择
芯片时钟选项 CKSEL3..0
外部晶体 / 陶瓷振荡器 1111 - 1010
外部低频晶振 1001
外部 RC 振荡器 1000 - 0101
标定的内部 RC 振荡器 0100 - 0001
外部时钟 0000
Note: 1. 对于所有的熔丝位, “1” 表示未编程, “0” 代表已编程。
(1)
不同的时钟选项将在后续部分进行介绍。当 CPU 自掉电模式或省电模式唤醒之后,被选 择的时钟源用来为启动过程定时,保证振荡器在开始执行指令之前进入稳定状态。当 CPU 从复位开始工作时,还有额外的延迟时间以保证在 MCU 开始正常工作之前电源达到稳定 电平。这个启动时间的定时由看门狗振荡器完成。看门狗溢出时间所对应的 WDT 振荡器 周期数列于 Table 3。看门狗振荡器的频率由工作电压决定,详见 P252“ATmega8535 典 型特性
Table 3. 看门狗振荡器周期数
典型的溢出时间 (VCC = 5.0V) 典型的溢出时间 (VCC = 3.0V) 时钟周期数
4.1 ms 4.3 ms 4K (4,096)
65 ms 69 ms 64K (65,536)

缺省时钟源 芯片出厂时 CKSEL = “0001”SUT = “10”。这个缺省设置的时钟源是内部 RC 振荡器,

启动时间为最长。这种设置保证用户可以通过 ISP 或并行编程器得到所需的时钟源。

晶体振荡器 XTAL1 与 XTAL2 分别为用作片内振荡器的反向放大器的输入和输出,如 Figure 12 所示,

这个振荡器可以使用石英晶体,也可以使用陶瓷谐振器。熔丝位 CKOPT 用来选择这两种 放大器模式的其中之一。当 CKOPT 被编程时振荡器在输出引脚产生满幅度的振荡。这种 模式适合于噪声环境,以及需要通过 XTAL2 驱动第二个时钟缓冲器的情况。而且这种模 式的频率范围比较宽。当保持 CKOPT 为未编程状态时,振荡器的输出信号幅度比较小。 其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。
对于谐振器, CKOPT 未编程时的最大频率为 8 MHzCKOPT 编程时为 16 MHzC1C2 的数值要一样,不管使用的是晶体还是谐振器。最佳的数值与使用的晶体或谐振器 有关,还与杂散电容和环境的电磁噪声有关。 Table 4 给出了针对晶体选择电容的一些指 南。对于陶瓷谐振器,应该使用厂商提供的数值。若想得到更多的有关如何选择电容以及 振荡器如何工作的信息,请参考多用途振荡器应用手册。
2502E–AVR–12/03
23
Figure 12. 晶体振荡器连接图
2
1
C2
C1
XTAL
XTAL
GND
振荡器可以工作于三种不同的模式,每一种都有一个优化的频率范围。工作模式通过熔丝 位 CKSEL3..1 来选择,如 Table 4 所示。
Table 4. 晶体振荡器工作模式
CKOPT CKSEL3..1 频率范围
1 101
1 110 0.9 - 3.0 12 - 22
1 111 3.0 - 8.0 12 - 22
0 101, 110, 111 1.0 - 16.0 12 - 22
Notes: 1. 频率范围为大致值。
2. 此选项不适用于晶体,只能用于陶瓷谐振器。
(2)
(1)
(MHz)
0.4 - 0.9
使用晶体时电容 C1 C2 的推荐范围
(pF)
24
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
Table 5 所示,熔丝位 CKSEL0 以及 SUT1..0 用于选择启动时间。
Table 5. 晶体振荡器时钟选项对应的启动时间
掉电与节电模式下的
CKSEL0 SUT1..0
000 258 CK
启动时间
(1)
复位时额外的延迟
时间 (VCC = 5.0V) 推荐用法
4.1 ms 陶瓷谐振器,电源快速上 升
001 258 CK
(1)
65 ms 陶瓷谐振器,电源缓慢上
010 1K CK
011 1K CK
(2)
(2)
陶瓷谐振器, BOD 使能
4.1 ms 陶瓷谐振器,电源快速上
100 1K CK
(2)
65 ms 陶瓷谐振器,电源缓慢上
1 01 16K CK 石英振荡器, BOD 使能
1 10 16K CK 4.1 ms 石英振荡器,电源快速上
1 11 16K CK 65 ms 石英振荡器,电源慢速上
Notes: 1. 这些选项只能用于工作频率不太接近于最大频率,而且启动时的频率稳定性对于应用
而言不重要的情况。不适用于晶体。
2. 这些选项是为陶瓷谐振器设计的,可以保证启动时频率足够稳定。若工作频率不太接 近于最大频率,而且启动时的频率稳定性对于应用而言不重要时也适用于晶体。
2502E–AVR–12/03
25

低频晶体振荡器 为了使用 32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位 CKSEL 设置为 “1001”

2
1
C
R
以选择低频晶体振荡器。晶体的连接方式如 Figure 12 所示。通过对熔丝位 CKOPT 的编 程,用户可以使能 XTAL1 XTAL2 的内部电容,从而去除外部电容。内部电容的标称数 值为 36 pF
选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 6 所示。
Table 6. 低频晶体振荡器的启动时间
掉电模式和省电模式
SUT1..0
00 1K CK
01 1K CK
10 32K CK 65 ms 启动时频率已经稳定
11 保留
Note: 1. 这些选项只能用于启动时的频率稳定性对应用而言不重要的情况。
的启动时间
(1)
(1)
复位时的额外延迟
时间 (VCC = 5.0V) 推荐用法
4.1 ms 电源快速上升,或是 BOD 使能
65 ms 电源缓慢上升

外部 RC 振荡器 对于时间不敏感的应用可以使用 Figure 13 的外部 RC 振荡器。频率可以通过方程 f =

1/(3RC) 进行粗略地鼓估计。电容 C 至少要 22 pF。通过编程熔丝位 CKOPT,用户可以使
XTAL1 GND 之间的片内 36 pF 电容,从而无需外部点燃。若想获取有关振荡器如 何工作以及如何选择 R 和 C 的具体信息,请参考外部 RC 振荡器应用手册。
Figure 13. 外部 RC 配置
VCC
NC
XTAL
XTAL
GND
振荡器可以工作于四个不同的模式,每个模式有自己的优化频率范围。工作模式通过熔丝 位 CKSEL3..0 选取,如 Table 7 所示。
26
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
Table 7. 外部 RC 振荡器工作模式
CKSEL3..0 频率范围 (MHz)
0101 - 0.9
0110 0.9 - 3.0
0111 3.0 - 8.0
1000 8.0 - 12.0
选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 8 所示。
Table 8. 外部 RC 振荡器的启动时间
掉电模式和省电模式
SUT1..0
00 18 CK BOD 使能
01 18 CK 4.1 ms 电源快速上升
10 18 CK 65 ms 电源缓慢上升
11 6 CK
Note: 1. 这些选项只能用于工作频率不太接近于最大频率时的情况。
的启动时间
(1)
复位时的额外延迟
时间 (VCC = 5.0V) 推荐用法
4.1 ms 电源快速上升,或是 BOD 使能

标定的片内 RC 振荡器 标定的片内 RC 振荡器提供了固定的 1.02.04.0 8.0 MHz 的时钟。这些频率都是

5V25°C 下的标称数值。这个时钟也可以作为系统时钟,只要按照 Table 9 对熔丝位 CKSEL进行编程即可。选择这个时钟(此时不能对CKOPT进行编程) 之后就无需外部器件 了。复位时硬件将标定字节加载到 OSCCAL 寄存器,自动完成对 RC 振荡器的标定。在 5V25°C 和频率为 1.0 MHz 时,这种标定可以提供标称频率 ± 3% 的精度;使用 www.atmel.com/avr 中所给出的方法,可在任何电压、任何温度下,使精度达到 ± 1% 。当
使用这个振荡器作为系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的 依据。更多的有关标定数据的信息请参见 P227“ 标定字节
Table 9. 片内标定的 RC 振荡器工作模式
CKSEL3..0 标称频率 (MHz)
(1)
0001
0010 2.0
0011 4.0
0100 8.0
1.0
2502E–AVR–12/03
Note: 1. 出厂时的设置。
选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 10 所示。 XTAL1 XTAL2 要保持为空 (NC)
27
Table 10. 内部标定 RC 振荡器的启动时间

振荡器标定寄存器- OSCCAL

掉电模式与省电模式的启
SUT1..0
00 6 CK BOD 使能
01 6 CK 4.1 ms 电源快速上升
(1)
10
11 保留
Note: 1. 出厂时的设置。
Bit 76543210
读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 标定数据
动时间
6 CK 65 ms 电源缓慢上升
CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
复位时的额外延迟时间
(VCC = 5.0V) 推荐用法
• Bits 7..0 – CAL7..0: 振荡器标定数据
将标定数据写入这个地址可以对内部振荡器进行调节以消除由于生产工艺所带来的振荡 器频率偏差。复位时 1 MHz 的标定数据 ( 标识数据的高字节,地址为 0x00) 自动加载到 OSCCAL 寄存器。如果需要内部 RC 振荡器工作于其他频率,标定数据必须人工加载:首 先通过编程器读取标识数据,然后将标定数据保存到 Flash EEPROM 之中。这些数据 可以通过软件读取,然后加载到 OSCCAL 寄存器。
OSCCAL 为零时振荡器以最低频率工作。当对其写如不为零的数据时内部振荡器的频 率将增长。写入 0xFF 即得到最高频率。标定的振荡器用来为访问 EEPROM Flash 定 时。有写 EEPROM Flash 的操作 时不要将频率标定到超过标称频率的 10%,否则写 操作有可能失败。要注意振荡器只对 1.02.04.0 8.0 MHz 这四种频率进行了标定, 其他频率则无法保证,如 Table 11 所示。
Table 11 . 内部 RC 振荡器频率范围
OSCCAL 数值 最小频率,标称频率的百分比 (%) 最大频率,标称频率的百分比 (%)
0x00 50 100
0x7F 75 150
0xFF 100 200
28
ATmega8535(L)
2502E–AVR–12/03
ATmega8535(L)
E

外部时钟 为了从外部时钟源驱动芯片, XTAL1 必须如 Figure 14 所示的进行连接。同时,熔丝位

CKSEL必须编程为“0000”。若熔丝位CKOPT也被编程,用户就可以使用内部的XTAL1和 GND 之间的 36 pF 电容。
Figure 14. 外部时钟驱动配置图
XTERNAL
CLOCK
SIGNAL
选择了这个振荡器之后,启动时间由熔丝位 SUT 确定,如 Table 12 所示。
Table 12. 外部时钟的启动时间
掉电模式与省电模式的
SUT1..0
00 6 CK BOD 使能
01 6 CK 4.1 ms 电源快速上升
10 6 CK 65 ms 电源缓慢上升
11 保留
启动时间
复位时的额外延迟时间
(VCC = 5.0V) 推荐用法
为了保证 MCU 能够稳定工作,不能突然改变外部时钟源的振荡频率。工作频率突变超过 2% 将会产生异常现象。应该在 MCU 保持复位状态时改变外部时钟的振荡频率。

定时器 / 计时器振荡器 对于拥有定时器 / 振荡器引脚 (TOSC1 TOSC2) AVR 微处理器,晶体可以直接与这

两个引脚连接,无需外部电容。此振荡器针对 32.768 kHz 的钟表晶体作了优化。不建议 在 TOSC1 引脚输入振荡信号。
29
2502E–AVR–12/03

电源管理及睡眠模式 睡眠模式可以使应用程序关闭 MCU 中没有使用的模块,从而降低功耗。 AVR 具有不同

的睡眠模式,允许用户根据自己的应用要求实施剪裁。
进入睡眠模式的条件是置位寄存器 MCUCR SE,然后执行 SLEEP 指令。具体哪一种 模式 ( 空闲模式、ADC 噪声抑制模式、掉电模式、省电模式、Standby 模式和扩展 Standby 模式 ) 由 MCUCR 的 SM2、 SM1 和 SM0 决定,如 Table 13 所示。使能的中断可以将进 入睡眠模式的 MCU 唤醒。经过启动时间,外加 4 个时钟周期后, MCU 就可以运行中断 例程了。然后返回到 SLEEP 的下一条指令。唤醒时不会改变寄存器文件和 SRAM 的内 容。如果在睡眠过程中发生了复位,则 MCU 唤醒后从中断向量开始执行。
P22Figure 11 介绍了 ATmega8535 不同的时钟系统及其分布。此图在选择合适的睡眠模 式时非常有用。

MCU 控制寄存器- MCUCR MCU 控制寄存器包含了电源管理的控制位。

Bit 76543210
SM2 SE SM1 SM0
读/写 R/W R/W R/W R/W R/W R/W R/W R/W 初始值 00000000
• Bits 7, 5, 4 – SM2..0: 休眠模式选择位 21 0
Table 13 所示,这些位用于选择具体的休眠模式。
Table 13. 休眠模式选择
SM2 SM1 SM0 休眠模式
000空闲模式
ISC11 ISC10 ISC01 ISC00 MCUCR
001ADC噪声抑制模式
010掉电模式
011省电模式
100保留
101保留
(1)
110Standby
111扩展 Standby
Note: 1. 仅在使用外部晶体或谐振器时 Standby 模式与扩展 Standby 模式才可用。
模式
(1)
模式
• Bit 6 – SE: 休眠使能
为了使 MCU 在执行 SLEEP 指令后进入休眠模式, SE 必须置位。为了确保进入休眠模 式是程序员的有意行为,建议仅在 SLEEP 指令的前一条指令置位 SEMCU 一旦唤醒立 即清除 SE
30
ATmega8535(L)
2502E–AVR–12/03
Loading...
+ 268 hidden pages