当前位置:首页 >> 信息与通信 >>

ATmega328P中文翻译资料


产品特点 ?高性能,低功耗的 AVR(R)8 位微控制器 ?先进的 RISC 结构 - 131 条指令 - 绝大多数为单时钟周期执行 - 32 个 8 位通用工作寄存器 - 全静态工作 - 高达 20 MIPS 的吞吐量在 20 兆赫 - 片上 2 周期乘法器 ?高耐用性非挥发性记忆体段 - 4/8/16 /的在系统内可编程的 Flash 课程校内存 32K 字节 (ATMEGA

48PA/88PA/168PA/328P) - 256/512/512 /1K 字节的 EEPROM(ATMEGA48PA/88PA/168PA/328P) - 512/1K/1K/2K 字节的片内 SRAM(ATMEGA48PA/88PA/168PA/328P) - 写/擦除周期:10,000 闪存/ EEPROM100000 - 数据保存:20 岁,在 85℃/百年,在 25℃(1) - 可选 Boot 代码区具有独立锁定位 在系统编程通过片上引导程序 真正的同时读 - 写操作 - 锁编程软件安全 ?外设特点 - 2 个 8 位定时器/计数器具有独立预分频器和比较模式 - 1 个 16 位定时器/计数器具有独立预分频器,比较功能和捕捉 模式 - 实时计数器具有独立振荡器 - 六个 PWM 通道 - 8 通道 10 位 ADC 的 TQFP 和 QFN/ MLF 封装 温度测量 - 6 通道 10 位 ADC PDIP 封装 温度测量 - 可编程的串行 USART - 主/从 SPI 串行接口 - 面向字节的两线串行接口(飞利浦 I2C 兼容) - 可编程看门狗定时器具有独立片内振荡器 - 片内模拟比较器 - 中断和唤醒引脚电平变化 ?单片机的特殊功能 - 上电复位和可编程的掉电检测 - 内部校准振荡器 - 外部和内部中断源 - 六休眠模式:空闲模式,ADC 噪声抑制,省电,掉电,待机, 和扩展 Standby ?的 I / O 和封装 - 23 可编程 I / O 线 - 28 引脚 PDIP,32 引脚 TQFP 封装,28 焊盘 QFN/ MLF 以及 32 焊盘的 QFN/ MLF

?工作电压: - 1.8 - 5.5V 的 ATMEGA48PA/88PA/168PA/328P ?温度范围: - -40℃至 85℃ ?速度等级: - 0 - 20 MHz 的@1.8 - 5.5V ?低功耗在 1 MHz,1.8V,25℃ATMEGA48PA/88PA/168PA/328P: - 主动模式:0.2 毫安 - 掉电模式:0.1μ A - 省电模式:0.75μ A(包括 32 千赫,RTC) 8位 微控制器 具有 4/8/16/32K 字节的系统 可编程 闪光 ATMEGA48PA ATMEGA88PA ATMEGA168PA ATMEGA328P 牧师 8161D-AVR-10 月 9 日 2 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 1 引脚配置 图 1-1。引出线 ATMEGA48PA/88PA/168PA/328P 1 2 3 4 5 6 7 8 24 23 22 21 20 19 18 17 (PCINT19/ OC2B/ INT1)PD3 (PCINT20/ XCK/ T0)PD4

GND VCC GND VCC (PCINT6/ XTAL1/ TOSC1)PB6 (PCINT7/ XTAL2/ TOSC2)PB7 PC1(ADC1/ PCINT9) PC0(ADC0/ PCINT8) ADC7 GND AREF ADC6 AVCC PB5(SCK/ PCINT5) 32 31 30 29 28 27 26 25 9 10 11 12 13 14 15 16 (PCINT21/ OC0B/ T 1)PD5 (PCINT22/ OC0A/ AIN0)PD6 (PCINT23/ AIN1)PD7 (PCINT0/ CLKO/ ICP1)PB0 (PCINT1/ OC1A)PB1 (PCINT2/不锈钢/ OC1B)PB2 (PCINT3/ OC 2/ MOSI)PB3 (PCINT4/ MISO)PB4 PD2(INT0/ PCINT18) PD1(TXD/ PCINT17) PD0(RXD/ PCINT16) PC6(RESET/ PCINT14) PC5(ADC5/ SCL/ PCINT13) PC4(ADC4/ SDA/ PCINT12)

PC3(ADC3/ PCINT11) PC2(ADC2/ PCINT10) TQFP 封装顶视图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 (PCINT14/ RESET)PC6 (PCINT16/ RXD)PD0 (PCINT17/ TXD)PD1 (PCINT18/ INT0)PD2 (PCINT19/ OC2B/ INT1)PD3 (PCINT20/ XCK/ T0)PD4 VCC GND (PCINT6/ XTAL1/ TOSC1)PB6 (PCINT7/ XTAL2/ TOSC2)PB7 (PCINT21/ OC0B/ T 1)PD5 (PCINT22/ OC0A/ AIN0)PD6 (PCINT23/ AIN1)PD7

(PCINT0/ CLKO/ ICP1)PB0 PC5(ADC5/ SCL/ PCINT13) PC4(ADC4/ SDA/ PCINT12) PC3(ADC3/ PCINT11) PC2(ADC2/ PCINT10) PC1(ADC1/ PCINT9) PC0(ADC0/ PCINT8) GND AREF AVCC PB5(SCK/ PCINT5) PB4(MISO/ PCINT4) PB3(MOSI/ OC 2/ PCINT3) PB2(SS/ OC1B/ PCINT2) PB1(OC1A/ PCINT1) PDIP 1 2 3 4 5 6 7 8 24 23 22 21 20 19 18 17 32 31 30 29 28 27 26 25 9 10 11 12

13 14 15 16 32 MLF 顶视图 (PCINT19/ OC2B/ INT1)PD3 (PCINT20/ XCK/ T0)PD4 GND VCC GND VCC (PCINT6/ XTAL1/ TOSC1)PB6 (PCINT7/ XTAL2/ TOSC2)PB7 PC1(ADC1/ PCINT9) PC0(ADC0/ PCINT8) ADC7 GND AREF ADC6 AVCC PB5(SCK/ PCINT5) (PCINT21/ OC0B/ T 1)PD5 (PCINT22/ OC0A/ AIN0)PD6 (PCINT23/ AIN1)PD7 (PCINT0/ CLKO/ ICP1)PB0 (PCINT1/ OC1A)PB1 (PCINT2/不锈钢/ OC1B)PB2 (PCINT3/ OC 2/ MOSI)PB3 (PCINT4/ MISO)PB4 PD2(INT0/ PCINT18) PD1(TXD/ PCINT17) PD0(RXD/ PCINT16) PC6(RESET/ PCINT14) PC5(ADC5/ SCL/ PCINT13) PC4(ADC4/ SDA/ PCINT12) PC3(ADC3/ PCINT11) PC2(ADC2/ PCINT10) 注:底部垫应焊接到地面。 1 2 3 4 5 6

7 21 20 19 18 17 16 15 28 27 26 25 24 23 22 8 9 10 11 12 13 14 28 MLF 顶视图 (PCINT19/ OC2B/ INT1)PD3 (PCINT20/ XCK/ T0)PD4 VCC GND (PCINT6/ XTAL1/ TOSC1)PB6 (PCINT7/ XTAL2/ TOSC2)PB7 (PCINT21/ OC0B/ T 1)PD5 (PCINT22/ OC0A/ AIN0)PD6 (PCINT23/ AIN1)PD7 (PCINT0/ CLKO/ ICP1)PB0 (PCINT1/ OC1A)PB1 (PCINT2/不锈钢/ OC1B)PB2 (PCINT3/ OC 2/ MOSI)PB3 (PCINT4/ MISO)PB4 PC2(ADC2/ PCINT10) PC1(ADC1/ PCINT9) PC0(ADC0/ PCINT8) GND AREF AVCC PB5(SCK/ PCINT5)

注:底部垫应焊接到地面。 3 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 1.1 引脚说明 1.1.1 VCC 数字电源电压。 1.1.2 接地 地面上。 1.1.3 端口 B(PB7:0)XTAL1/ XTAL2/ TOSC1/ TOSC2 端口 B 为 8 位双向 I / O 和内部上拉电阻(选择的每一位)端口。该 B 口输出缓冲器具有既吸收大电流源对称的驱动特性 能力。作为输入,端口 B 引脚被外部电路拉低时将输出电流,如果上拉 电阻器被激活。端口的引脚为三态时,复位过程中, 即使系统时钟没有运行。 根据不同的时钟选择熔丝设置,PB6 可以作为输入到反相振荡器 放大器和输入到内部时钟工作电路。 根据不同的时钟选择熔丝设置,PB7 可作为从反相输出 振荡器放大器。 如果内部标定 RC 振荡器作为系统时钟源,PB7..6 作为 TOSC2..1 输入的异步定时器/计数器,如果在 ASSR 寄存器的 AS2 位。 不同的特殊功能的端口 B 的页面上阐述了“端口 B 的第二功能” 第 26 页 82 和“系统时钟及时钟选项” 。 1.1.4 端口 C(PC5:0) 端口 C 为 7 位双向 I/ O 和内部上拉电阻(选择的每一位)端口。该 PC5..0 输出缓冲器具有同时具有高汇和源对称的驱动特性 能力。作为输入,端口 C 引脚被外部电路拉低时将输出电流,如果上拉 电阻器被激活。端口 C 引脚为三态时,复位过程中, 即使系统时钟没有运行。 1.1.5 PC6/复位 如果 RSTDISBL 位被编程,PC6 作为一个 I/ O 引脚。注意,电特性 PC6 的不同与端口 C 的其他引脚 如果 RSTDISBL 位未编程,PC6 作为复位输入。该引脚上的低电平 比最小脉冲长度较长会产生复位,即使系统时钟没有运行。 的最小脉冲长度列于表 28-3 页上的 318 短的脉冲则不能保证 产生复位。 不同的特殊功能端口 C 的页面上阐述了“备用端口 C 的功能” 85。 1.1.6 端口 D(PD7:0) 端口 D 为 8 位双向 I / O 和内部上拉电阻(选择的每一位)端口。该 端口 D 输出缓冲器具有同时具有高汇和源对称的驱动特性 能力。作为输入,端口 D 引脚被外部电路拉低时将输出电流,如果上拉 电阻器被激活。端口 D 引脚为三态时,复位过程中, 即使系统时钟没有运行。

4 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 不同的特殊功能端口 D 都页阐述了“备用端口 D 的功能” 88。 1.1.7 AVCC AVCC 是电源电压引脚为 A/ D 转换器,PC3:0,ADC7:6。它应该是外部 连接到 VCC,即使不使用 ADC。如果 ADC 被使用时,它应连接到 VCC 通过一个低通滤波器。需要注意的是 PC6..4 使用数字供电电压 VCC。 1.1.8 AREF AREF 是模拟基准输入引脚为 A/ D 转换器。 1.1.9 ADC7:6(TQFP 和 QFN/ MLF 封装) 在 TQFP 和 QFN/ MLF 封装,ADC7:6 作为模拟输入到 A / D 转换器。 这些引脚的模拟电源供电,并作为 10 位 ADC 通道。 5 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 二,产品简介 该 ATMEGA48PA/88PA/168PA/328P 是一款基于低功耗 8 位 CMOS 微控制器 增强的 AVR RISC 架构。通过在单个时钟周期内执行强大的指令, ATMEGA48PA/88PA/168PA/328P 的数据吞吐率 1 MIPS 每 MHz,从而可以 系统设计师能够优化功耗和处理速度之间。 2.1 框图 图 2-1。框图 AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有 寄存器都直接连接到所述算术逻辑单元(ALU) ,允许两个独立的 寄存器中在一个时钟周期中执行一个指令来访问。由此产生的 6 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 建筑是提高了代码效率,同时实现最高至 10 倍,比传统快 CISC 微控制器。 该 ATMEGA48PA/88PA/168PA/328P 提供了以下功能:4K/8K 字节的系统内的 可编程闪存与同时读 - 写功能,256/512/512 /1K 字节 EEPROM, 512/1K/1K/2K 字节的 SRAM,23 个通用 I/ O 口线,32 个通用工作寄存器, 三种灵活的定时器/计数器具有比较模式,内部和外部中断,可编程串行 USART,面向字节的两线串行接口,一个 SPI 串行端口,一个 6 通道 10 位 模数转换器(8 路为 TQFP 和 QFN/ MLF 封装) ,一个可编程看门狗定时器 内部振荡器和五个软件选择的省电模式。在空闲模式下停止 CPU 的工作,而 SRAM,定时器/计数器,USART,两线串行接口,SPI 端口以及 中断系统继续工作。在掉电模式保存登记内容,但 冻结振荡器,禁用所有其他芯片功能,直到下一个中断或硬件复位。 在省电模式下,异步定时器继续运行,允许用户保持一个 而该装置的其余部分处于休眠状态计时器基。 ADC 噪声抑制模式时终止

CPU 和除了异步定时器和 ADC 的所有 I / O 模块,以最大限度地减少开关噪声 ADC 转换。在待机模式下,晶体/谐振振荡器运行,其余 该设备是在睡觉。这允许非常快速启动结合低功耗。 该设备是采用 Atmel 的高密度非易失性存储器技术生产的。该 片上 ISP Flash 允许程序存储器通过 SPI 进行在系统编程 串行接口,通过常规的非易失性存储器编程,或者通过一个片上的引导程序 在 AVR 内核上运行。引导程序可以使用任意接口下载 在应用程序的闪存应用程序。在引导 Flash 软件 继续运行,而应用 Flash 区更新,提供真正的同时读 - 写 操作。通过在将 8 位 RISC CPU 与系统内可编程闪存 单片芯片,Atmel 的 ATMEGA48PA/88PA/168PA/328P 是一款功能强大的单片机, 提供了高度灵活和成本效益的解决方案为许多嵌入式控制应用。 该 ATMEGA48PA/88PA/168PA/328P AVR 具有一整套的编程与系统 开发工具,包括:C 语言编译器,宏汇编,程序调试器/模拟器, 在电路仿真器和评估板。 间 ATMEGA48PA,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P2.2 对比 该 ATMEGA48PA,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P 的区别仅在于内存 大小,支持引导装入程序,中断向量的大小。表 2-1 总结了不同的记忆 和中断向量的大小为三个设备。 ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P 支持真正的同时读 - 写自编程 机制。有一个单独的 Boot Loader 区,SPM 指令可以 从那里只执行。在 ATMEGA48PA,没有同时读 - 写支持,没有独立的 Boot Loader 区。 SPM 指令可以访问整个 Flash 中执行。 表 2-1。内存大小总结 设备闪存 EEPROM 内存中断向量大小 ATMEGA48PA4K 字节 256 字节 512 字节 1 指令字/矢量 ATMEGA88PA8K 字节 512 字节 1K 字节 1 指令字/矢量 ATMEGA168PA16K 字节 512 字节 1K 字节 2 个指令字/矢量 ATMEGA328P32K 字节 1K 字节 2K 字节 2 个指令字/矢量 7 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 3 资源 一套全面的开发工具,应用手册和数据表都可以 下载的 http://www.atmel.com/avr。 注意事项:1。 4,数据保存时间 可靠性鉴定结果表明,该投影数据保留故障率要少得多 于 1ppm 超过 20 年,在 85℃或百年在 25℃。 5,关于代码示例 该文档包含了一些简单的代码例子以说明如何使用各种零件 设备。这些代码示例假定的头文件包含前 编译。请注意,并非所有的 C 编译器厂商包括在头文件的位定义 和中断处理中的 C 是编译器的依赖。请确认与 C 编译器文档

了解更多详情。 对于 I / O 寄存器为扩展 I/ O 映射, “IN” , “OUT” , “SBIS” , “SBIC” , “CBI”与“CBR” 指令必须被替换指令,允许访问扩展 I/ O 操作。通常 “IN” ,结合“SBRS” , “STS” , “SBRC” , “SBR”与“CBR” 。 8 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 6,AVR CPU 内核 6.1 概述 本节讨论 AVR 内核的结构一般。 CPU 芯的主要功能 是保证程序的正确执行。因此,CPU 必须能够访问存储器, 执行运算,控制外设以及处理中断。 图 6-1。 AVR 结构的方框图 为了获得最高的性能以及并行性,AVR 采用了 Harvard 结构 - 用 独立的记忆和公共汽车程序和数据。在程序存储器中的指令是 通过一级流水线运行。当一个指令被执行时,下一条指令 从程序存储器预取。这个概念实现了将要执行的指令 在每一个时钟周期。程序存储器在系统内可编程 Flash 存储器。 快速访问寄存器文件包括工作寄存器,一个 32×8 位通用 时钟周期的访问时间。这允许单周期算术逻辑单元(ALU)运算。在的典 闪光 节目 内存 说明 注册 说明 解码器 节目 计数器 控制线 32× 8 一般 用途 Registrers ALU 状态 与控制 I/O线 EEPROM 数据总线的 8 位 数据 SRAM 中断 单位

SPI 单位 看门狗 定时器 模拟 比较 I / O 模块 2 I / O 模块 1 I / O 模块 n 9 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 的 ALU 操作中,两个操作数从寄存器文件输出,执行该操作, 并将结果存回寄存器文件 - 在一个时钟周期。 六的 32 个寄存器可以用作 3 个 16 位的间接寻址寄存器指针数据 空间寻址 - 实现高效的地址运算。其中这些地址指针 也可以用作为地址指针为查找表在闪存程序存储器。这些 附加的功能寄存器是 16 位的 X,Y,Z 寄存器,在本节后面介绍。 ALU 支持寄存器之间或常数之间的算术和逻辑运算 一个寄存器。单寄存器操作也可以在 ALU 中执行的。算术运算后, 状态寄存器的内容得到更新以反映该操作的结果的信息。 程序流程通过无条件的跳转指令和调用指令,能够提供 直接寻址整个地址空间。多数指令有一个 16 位字格式。 每个程序存储器地址包含一个 16 位或 32 位的指令。 程序存储器空间分为两个区:引导程序区和 应用程序区。这两个区都有专门的锁定位以实现读和读/写 保护。 SPM 指令写入到应用程序区必须 位于引导程序区。 在中断和调用子程序时返回地址的程序计数器(PC)保存在 堆叠。堆栈实际上分配在通用数据 SRAM,因此其深度 大小仅受限于 SRAM 的大小和 SRAM 的使用情况。所有的用户程序必须 初始化复位例程的 SP(前子程序或中断执行) 。堆栈 指针(SP)的读/写在 I/ O 空间。数据 SRAM 可以很容易地访问 通过 AVR 架构支持的五种不同的寻址模式。 在 AVR 架构的内存空间都是线性的存储器映射。 一个灵活的中断模块具有一个额外的全局的 I / O 空间的控制寄存器 中断状态寄存器使能位。所有的中断都具有一个独立的中断向量在 中断向量表。该中断的优先级与其在中断向量表的位置。 较低的中断向量地址,优先级越高。 在 I/ O 存储器空间包含 64 个地址,作为 CPU 外设的控制寄存器, SPI,以及其他 I / O 功能。在 I/ O 内存可以直接访问,或作为数据 空间位置下面这些寄存器文件,地址 0x20 - 0x5F 的。此外,该 ATMEGA48PA/88PA/168PA/328P 已经扩展 I / O 空间段 0x60 - 0xFF 的 SRAM 中,其中 只能使用 ST/ STS/ STD 和 LD/ LDS/ LDD 指令都可以使用。

6.2 ALU - 算术逻辑单元 高性能的 AVR ALU 与所有 32 个通用的直接连接 工作寄存器。在一个时钟周期内,通用的算术运算 寄存器或寄存器之间立即执行。 ALU 操作分为 分为三个主要类别 - 算术,逻辑和位操作。的一些实现 架构还提供了强大的乘数同时支持有符号/无符号乘法运算 和小数格式。请参阅“指令集”部分进行了详细的描述。 6.3 状态寄存器 状态寄存器包含了最近执行的算术的结果信息 指令。此信息可以执行用于改变程序流程 条件操作。请注意,状态寄存器的所有 ALU 运算更新, 10 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 在指令集指定。这将在许多情况下就不需要为使用 专门的比较指令,从而更快,更紧凑的代码。 状态进入中断服务程序时,注册是不会自动保存和恢复 从中断返回时。这必须由软件来处理。 6.3.1 SREG - AVR 中断寄存器 AVR 中断寄存器 - SREG - 定义为: ?位 7 - I:全局中断使能 全局中断使能位必须设置为启用中断。各个中断 使能由其他独立的控制寄存器控制。如果全局中断使能 寄存器清零,没有任何中断都将启用独立的个体中断 启用设置。在 I 位由硬件清零发生中断后,由设置 RETI 指令以使能中断。中的 I 位也可以被设置并通过清除 SEI 和 CLI 指令的应用程序,如在指令集的参考说明。 ?位 6 - T:位拷贝存储 位拷贝指令 BLD(位负载)和 BST(位存储)使用 T 字位为源或目标 在操作位。从寄存器文件寄存器的位可以被拷贝到 T BST 指令,并在 T A 位可以通过复制到一个位在寄存器中的寄存器文件 BLD 指令。 ?位 5 - H:半进位标志 半进位标志 H 表示半进一些算术运算。此标志是很有用的 BCD 运算。请参阅“指令集”的说明信息。 ?位 4 - S:符号位,S= N V 在 S 位始终是一个排他性或负数标志 N 与 2 的补间 溢出标志 V“指令集”的说明信息。 ?位 3 - V:2 的补码溢出标志 二进制补码溢出标志 V 支持 2 的补码运算。见 “指令集”的说明信息。 ?位 2 - N:负标志 负标志 N 表示阴性结果算术或逻辑运算。见 “指令集”的说明信息。

?位 1 - Z:零标志 零标志 Z 为结果为零算术或逻辑运算。请参见“指令 设置说明“的详细信息。 ?位 0 - C:进位标志 进位标志 C 表示进位算术或逻辑运算。请参阅“指令集 说明“的详细信息。 位 7 6 54 3 210 的 0x3F(0x5F 的)I T H S 测定为 V N z 对于 C SREG 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 11 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 6.4 通用寄存器文件 寄存器文件进行了优化,对 AVR 增强型 RISC 指令集。为了实现 所需要的性能和灵活性,以下的输入/输出方案的支持 寄存器文件: ?一个 8 位输出操作数和一个 8 位结果输入 ?两个 8 位输出操作数和一个 8 位结果输入 ?两个 8 位输出操作数和一个 16 位结果输入 ?一个 16 位输出操作数和一个 16 位结果输入 图 6-2 显示了 CPU 32 个通用工作寄存器的结构。 图 6-2。 AVR CPU 通用工作寄存器 大部分的操作寄存器文件的指令都可以直接访问所有的寄存器,并 他们大多是单周期指令。 如图 6-2 所示,每个寄存器都有一个数据内存地址,它们映射 直接到用户数据空间的头 32 个地址。虽然没有实际的物理空间 如 SRAM,这种内存组织中的访问提供了极大的灵活性 寄存器,当 X,Y 和 Z 指针寄存器可以设置到索引文件中的任何寄存器。 70 地址。 R0 为 0x00 R 10× 01 R20X02 ...... R130X0D 一般 R140x0E 的 目的 R15 为 0x0F 工作 R16 为 0x10 寄存器 R17 为 0x11 ...... R260X1A X 寄存器低字节 R270X1B X 寄存器高字节 R28 为 0x1C Y 寄存器低字节 R290x1D Y 寄存器,寄存器,高字节

R300X1E Z 寄存器低字节 R31 为 0x1F Z 寄存器高字节 12 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 6.4.1 X 寄存器,Y 寄存器和 Z 寄存器 该寄存器 R26..R31 有一些附加功能,其一般用途的使用。这些寄存器 有 16 位地址指针的间接寻址数据空间。这三个间接 地址寄存器 X,Y 和 Z 被定义为在图 6-3 中描述。 图 6-3。的 X,Y 和 Z 寄存器 在不同的寻址模式中,这些地址寄存器可以实现固定偏移量, 自动加一和自动减一(详见指令集参考) 。 6.5 堆栈指针 协议栈主要用于存储临时数据,用于存储局部变量和存储 中断和子程序调用后返回地址。请注意,该协议栈实现 从高增长到低内存位置。堆栈指针总是指向 堆栈的顶部。堆栈指针指向数据 SRAM 堆栈区所在的子程序 和中断堆栈。在压入堆栈指令将减少堆栈指针。 在数据 SRAM 堆栈必须由程序定义的子程序调用前 执行或中断使能。初始堆栈指针的值等于的最后一个地址 内部 SRAM 和堆栈指针必须设置为指向的 SRAM 上面开始,见表 7 3 第 18 页。 见表 6-1 堆栈指针的详细信息。 AVR 的堆栈指针被实现为两个 8 位寄存器中的 I / O 空间。数 实际使用的位是依赖于实现。注意,在一些实现中,数据空间 AVR 架构是如此之小,只有 SPL 就足够了。在这种情况下,SPH 寄存器 将不存在。 15 XH XL0 X 寄存器 7070 R27(0X1B)R26(0X1A) 15 YH YL0 Y 寄存器 7070 R29(0x1D) ,R28(0x1C 处) 15 ZH:ZL0 Z 寄存器 7 0 70 R31(0x1F 的) ,R30(0X1E) 表 6-1。堆栈指针指示 指令堆栈指针说明 PUSH 由 1 递减的数据压入堆栈 认购证 ICALL RCALL 2 递减 返回地址被压入堆栈子程序调用或

中断 的 POP 由 1 递增的数据是从堆栈中弹出 RET RETI 2 返回地址递增从堆栈中弹出与回报 子程序或中断返回 13 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 6.5.1 SPH 和 SPL - 堆栈指针高,堆栈指针寄存器低 6.6 指令执行时序 本节描述的访问时序概念指令执行。 AVR 的 CPU 通过 CPU 时钟 clkCPU 驱动直接从所选择的时钟源所生成的 芯片。没有内部时钟进行分频。 图 6-4 显示并行指令取指和哈佛启用的指令执行 建筑和快速访问寄存器文件的概念。这是一个基本的流水线概念 获得高达 1 MHz 的 MIPS 与每个成本函数相应的独特的结果, 每时钟功能,并且每个电源单元的功能。 图 6-4。并行取指和指令执行 图 6-5 显示的是寄存器文件内部访问时序。在一个时钟周期的 ALU 执行使用两个寄存器中的操作数的操作,并把结果存回至目的地 注册。 图 6-5。单时钟周期 ALU 操作 位 15 1413 12 1110 9 8 0x3E 的(0x5e 者)SP15,SP14,SP13,SP12,SP11,SP10 SP9 SP8 SPH 0x3D 之间(0x5D)SP7 SP5 SP6 SP4 SP3 SP2 SP1 SP0 声压级 7 6 54 3 210 读/写读/写读/写读/写读/写读/写读/写读/写读/写 读/写读/写读/写读/写读/写读/写读/写读/写 初始值 RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND CLK 第一次取指令 第一指令执行 第二个指令获取 第二个指令执行 3 取指令 3 指令执行 4 取指令 T1 T2 T3 T4 中央处理器 总执行时间 寄存器操作数取 ALU 操作执行

结果回写 T1 T2 T3 T4 了 clkCPU 14 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 6.7 复位和中断处理 AVR 有不同的中断源。每个中断和复位分开 矢量各有程序存储空间一个单独的程序载体。所有中断 自己的使能必须写入逻辑 1 连同全局中断位 使在该状态寄存器位,以使该中断。根据该计划 计数器值,中断可能被自动引导锁定位 BLB02 或 BLB12 被禁用 被编程。这个特性提高了软件的安全性。请参见“存储器编程” 有关详细信息,294 页。 在程序存储区的最低地址缺省为复位和 中断向量。完整的向量列表第 57 页的名单也列于“中断” 决定了不同中断的优先级。下的地址中较高的 优先级。 RESET 具有最高的优先级,第二个为 INT0 - 外部中断请求 0,中断向量可以通过设置 IVSEL 转移到 Boot 区的起始 在 MCU 控制寄存器(MCUCR)位。请参阅“中断”在 49 页以了解更多信息。 复位向量也可以通过编程转移到 Boot 区的起始 熔丝位 BOOTRST,请参阅“支持引导装入程序 - 同时读 - 写自编程, ATMEGA88PA,277 页 ATMEGA168PA 和 ATMEGA328P“。 当中断发生时全局中断使能位 I 被清零,所有中断被禁止。 用户软件可以编写逻辑一到 I 位使能中断嵌套。全部启用 然后中断都可以中断当前的中断服务程序。在 I 位被自动设定时, 执行 - 从中断返回指令 - RETI 指令。 基本上有两种类型的中断。第一类型是由用于设置事件触发 中断标志。对于这些中断,程序计数器跳转到实际的中断向量 为了执行中断处理程序,同时硬件将清除相应的 中断标志。中断标志也可以通过写 1 到标志位的位置被清除(S) 被清除。如果在相应的中断使能位是发生中断条件 清除中断标志位被置一直保持到中断执行,或者该标志 通过软件清零。同样,如果出现一个或多个中断条件,而全局中断 使能位被清零,相应的中断标志位被置一直保持到 全局中断使能位被置位,然后会根据优先顺序来执行。 第二种类型的中断将触发只要中断条件是否存在。这些 中断不需要中断标志。如果中断状态前消失 中断使能,中断不会被触发。 当 AVR 退出中断,它总是返回到主程序和执行一个 之前的任何挂起的中断更多的指令提供服务。 请注意,状态进入中断服务程序时,寄存器不会自动存储,也不 从中断程序返回时恢复。这必须由软件来处理。 当使用 CLI 指令来禁止中断时,中断将立即停用。

没有中断将 CLI 指令后执行,即使它同时出现的 CLI 指令。下面的示例演示如何可以用来避免在中断 定时 EEPROM 写序。 15 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 使用 SEI 指令使能中断时,紧跟其后的指令被执行 任何中断之前,如本例中所示。 6.7.1 中断响应时间 所有已启用 AVR 中断响应中断为 4 个时钟周期最小。 经过四个时钟周期,程序跳转到实际的中断处理程序 被执行。在这 4 个时钟周期,程序计数器被压入堆栈。 载体通常是跳转到中断服务程序,此跳需要 3 个时钟周期。如果 执行的多周期指令执行期间发生中断时,该指令完成 中断服务之前。若中断发生时 MCU 处于休眠模式,中断 执行响应时间增加 4 个时钟周期。该增长来自除 启动从所选择的睡眠模式时间。 从中断处理程序返回需要 4 个时钟周期。在这四个时钟 周期,程序计数器(2 字节)从堆栈中弹出返回,堆栈指针 加二,和 SREG 的 I 位被置位。 汇编代码例程 C 代码示例 汇编代码例程 C 代码示例 16 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 7,AVR 回忆 7.1 概述 本节介绍了 ATMEGA48PA/88PA/168PA/328P 不同的回忆。 AVR 的 结构具有两个主要的存储器空间,数据存储器和程序存储器空间。 此外,ATMEGA48PA/88PA/168PA/328P 还有 EEPROM 存储器以保存数据。 这三个存储器空间都为线性的。 7.2 在系统内可编程闪存程序存储器 该 ATMEGA48PA/88PA/168PA/328P 具有 4/8/16 /32K 字节的片上系统内编程 闪存用于程序存储。因为所有的 AVR 指令为 16 位或 32 位 宽,Flash 组织成 2/4/8 /16K×16。对于软件的安全性,闪存程序存储器 空间被分成两部分,在 Boot Loader 区和应用程序区 ATMEGA88PA 和 ATMEGA168PA。请参见章节“SPMCSR SELFPRGEN 描述 - 商店 有关详细信息,292 页的程序存储器控制和状态寄存器“。 Flash 存储器至少 10,000 写/擦除周期耐力。该 ATMEGA48PA/88PA/168PA/328P 程序计数器(PC)为 11/12/13/14 位,因此可以寻址 在 2/4/8 /16K 的程序存储器空间。引导程序区的运作和 有关 Boot 锁定位的软件保护进行了详细的“自编程描述

在 Flash 中,ATMEGA48PA“269 页和”支持引导装入程序 - 同时读 - 写自编程, ATMEGA88PA, “277 页上的”ATMEGA168PA 和 ATMEGA328P 记忆 编程“294 页包含闪存编程的详细说明在支持 SPI 或 并行编程模式。 常数可以保存于整个程序存储器地址空间(参考 LPM 内分配 - 加载程序存储器指令的说明) 。 时序图的取指令和执行“指令执行时序”呈现 在第 13 页。 17 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 图 7-1。程序存储器映射 ATMEGA48PA 图 7-2。程序存储器映射 ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P 为 0x0000 0x7FF 的 程序存储器 应用 Flash 存储区 为 0x0000 0x0FFF/0x1FFF 的/0x3FFF 程序存储器 应用 Flash 存储区 Boot 区 18 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 7.3 SRAM 数据存储器 图 7-3 显示了 ATMEGA48PA/88PA/168PA/328P SRAM 空间的组织。 该 ATMEGA48PA/88PA/168PA/328P 是一个复杂的微控制器,更多的外围设备 比所用的操作码留给 IN 和 OUT 的 64 个单元中被支持 说明。对于扩展的 I/ O 空间 0x60 - 0xFF 的 SRAM 中,只能使用 ST/ STS/ STD 和 LD/ LDS/ LDD 指令都可以使用。 下 768/1280/1280/2303 数据存储器包括了寄存器文件,I / O 内存,扩展的 I/ O 存储器及内部数据 SRAM。第 32 个地址为 寄存器文件,然后是 64 个标准 I / O 内存,160 个扩展 I / O 存储器,以及下一个 512/1024/1024/2048 字节的内部数据 SRAM。 对于数据存储器的五个不同的寻址方式:直接,间接与位移, 间接寻址,带预减和间接带后增量。在注册 文件中的寄存器 R26 到 R31 为间接寻址的指针寄存器。 直接寻址范围可达整个数据空间。 间接与位移方式达到从给定的基址 63 个地址 由 y 或 z 注册。 当使用带预减和后增量的间接寻址模式, 地址寄存器 X,Y,和 Z 的增加或减少。 32 个通用工作寄存器,64 个 I/ O 寄存器,160 个扩展 I/ O 寄存器及

在 512/1024/1024/2048 字节的 ATMEGA48PA/88PA/168PA/328P 的内部数据 SRAM 可通过所有上述的寻址模式进行访问。寄存器文件中的“常规说明 第 11 页上的通用寄存器文件“。 图 7-3。数据存储器映射 32 个寄存器 64 个 I/ O 寄存器 内部 SRAM (512/1024/1024/204 X) 为 0x0000 - 0x001F 为 0x0020 - 0x005F 0x04FF/0x04FF/0x0FF/0X0 FF 0x0060 上 - 为 0x00FF 数据存储器 160 外部的 I / O 寄存器。 0100 19 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 7.3.1 数据存储器访问时间 本节描述的访问时序内部存储器的访问。该 在图 7-4 中所述两个 clkCPU 时钟内部数据 SRAM 访问执行。 图 7-4。片上数据 SRAM 存取周期 7.4 EEPROM 数据存储器 该 ATMEGA48PA/88PA/168PA/328P 有 256/512/512 /1K 字节的 EEPROM 数据存储器。 它是作为一个独立的数据空间,其中可以按字节读写。该 EEPROM 至少有 100,000 次写/擦除周期耐力。之间的访问 EEPROM 和 CPU 在下面被描述,指定 EEPROM 地址寄存器, EEPROM 数据寄存器和 EEPROM 控制寄存器。 “存储器编程”页 294 包含了详细的描述上 EEPROM 编程 在 SPI 或并行编程模式。 7.4.1 EEPROM 读/写访问 EEPROM 的访问寄存器位于 I/ O 空间。 EEPROM 的写访问时间如表 7-2 所示。自定时功能,但是, 可以让用户软件监测何时开始下一个字节可以被写入。如果用户代码包含指令 写入 EEPROM 中,有些必须采取预防措施。在重滤波电源 耗材,VCC 很可能会上升或下降缓慢上电/下。这使得该设备的一些 的时间周期,以在电压低于规定的最小为所用的时钟频率运行。 请参阅第 20 页上的“防止 EEPROM 的腐败”的详细信息,如何避免这些问题 的情况。 为了防止无意识的 EEPROM 写操作,一个特定的写程序必须遵守。 指的是 EEPROM 控制寄存器有关此详细说明。 当执行 EEPROM 读操作时,CPU 停止工作 4 个周期前的下一条指令 执行。当 EEPROM 的写入,CPU 会先下一停止两个时钟周期 指令被执行。

CLK WR RD 数据 数据 地址地址有效 T1 T2 T3 计算地址 读写 中央处理器 存储器访问指令下一条指令 20 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 7.4.2 预防腐败的 EEPROM 在低 VCC 期间,EEPROM 中的数据可以被损坏,因为电源电压 过低,CPU 和正确操作的 EEPROM 中。这些问题都是一样的 用板级系统的 EEPROM,和相同的设计解决方案应该应用。 一个 EEPROM 数据损坏有两种情况引起的,当电压过低。首先, 经常写序列 EEPROM 中,需要一个最低电压正常运行。其次, CPU 本身可以执行指令不正确,如果电源电压过低。 EEPROM 数据损坏的问题可以通过以下方法解决: 请在电源电压不足的时期 AVR RESET 信号(低电平) 。这可以 通过使内部欠压检测器(BOD)来完成。如果内部的检测电平 董事会没有必要的检测水平相匹配,外部复位保护电路可 可以使用。如果发生复位而写操作正在进行中,写操作将完成 提供的电源电压是足够的。 7.5 I / O 存储器 在 ATMEGA48PA/88PA/168PA/328P 的 I / O 空间定义显示在“注册摘要” 在 423 页。 所有 ATMEGA48PA/88PA/168PA/328P I / O 和外设都被放置在 I / O 空间。所有 I / O 位置都可以通过 LD/ LDS/ LDD 和 ST/ STS/ STD 指令来访问,传输数据 32 个通用工作寄存器和 I/ O 之间。 I / O 寄存器内 地址范围为 0x00 - 0x1F 直接位访问使用 SBI 和 CBI 指令。在 这些寄存器中,单个的比特的值可以通过使用 SBIS 和 SBIC 指令进行检查。 请参考更多详细信息,指令集。在当使用的 I / O 特定的命令 和 OUT 的 I / O 地址在 0x00 - 0x3F 必须使用。当寻址的 I / O 寄存器的数据 使用 LD 和 ST 指令空间,0x20 的必须添加到这些地址。该 ATMEGA48PA/88PA/168PA/328P 是一个复杂的微控制器,更多的外围设备比 可以在 64 个位置中的指令代码保留给 IN 和 OUT 指令来支持。对于 扩展的 I / O 空间 0x60 - 0xFF 的 SRAM 中,只能使用 ST/ STS/ STD 和 LD/ LDS/ LDD 指令可以使用。 For compatibility with future devices, reserved bits should be written to zero if accessed. Reserved I/O memory addresses should never be written.

Some of the Status Flags are cleared by writing a logical one to them. Note that, unlike most other AVRs, the CBI and SBI instructions will only operate on the specified bit, and can therefore be used on registers containing such Status Flags. The CBI and SBI instructions work with registers 0x00 to 0x1F only. The I/O and peripherals control registers are explained in later sections. 7.5.1 General Purpose I/O Registers The ATmega48PA/88PA/168PA/328P contains three General Purpose I/O Registers.这些 registers can be used for storing any information, and they are particularly useful for storing global variables and Status Flags. General Purpose I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI, CBI, SBIS, and SBIC instructions. 21 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 7.6 Register Description 7.6.1 EEARH and EEARL – The EEPROM Address Register ? Bits 15..9 – Res: Reserved Bits These bits are reserved bits in the ATmega48PA/88PA/168PA/328P and will always read as 零。 ? Bits 8..0 – EEAR8..0: EEPROM Address The EEPROM Address Registers – EEARH and EEARL specify the EEPROM address in the 256/512/512/1K bytes EEPROM space. The EEPROM data bytes are addressed linearly between 0 and 255/511/511/1023. The initial value of EEAR is undefined. A proper value must be written before the EEPROM may be accessed. EEAR8 is an unused bit in ATmega48PA and must always be written to zero. 7.6.2 EEDR – The EEPROM Data Register ? Bits 7..0 – EEDR7.0: EEPROM Data For the EEPROM write operation, the EEDR Register contains the data to be written to the EEPROM in the address given by the EEAR Register. For the EEPROM read operation, the EEDR contains the data read out from the EEPROM at the address given by EEAR. 7.6.3 EECR – The EEPROM Control Register ? Bits 7..6 – Res: Reserved Bits These bits are reserved bits in the ATmega48PA/88PA/168PA/328P and will always read as 零。 ? Bits 5, 4 – EEPM1 and EEPM0: EEPROM Programming Mode Bits The EEPROM Programming mode bit setting defines which programming action that will be triggered when writing EEPE. It is possible to program data in one atomic operation (erase the old value and program the new value) or to split the Erase and Write operations in two different 操作。The Programming times for the different modes are shown in Table 7-1.While EEPE Bit 15 14 13 12 11 10 9 8 0x22 (0x42) – – – – – – – EEAR8 EEARH 0x21 (0x41) EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL 76543210

Read/Write R R R R R R R R/W R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 X XXXXXXXX Bit 7 6 5 4 3 2 1 0 0x20 (0x40) MSB LSB EEDR Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 0x1F (0x3F) – – EEPM1 EEPM0 EERIE EEMPE EEPE EERE EECR Read/Write R R R/W R/W R/W R/W R/W R/W Initial Value 0 0 X X 0 0 X 0 22 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P is set, any write to EEPMn will be ignored. During reset, the EEPMn bits will be reset to 0b00 unless the EEPROM is busy programming. ? Bit 3 – EERIE: EEPROM Ready Interrupt Enable Writing EERIE to one enables the EEPROM Ready Interrupt if the I bit in SREG is set.写作 EERIE to zero disables the interrupt. The EEPROM Ready interrupt generates a constant interrupt when EEPE is cleared. The interrupt will not be generated during EEPROM write or SPM. ? Bit 2 – EEMPE: EEPROM Master Write Enable The EEMPE bit determines whether setting EEPE to one causes the EEPROM to be written. When EEMPE is set, setting EEPE within four clock cycles will write data to the EEPROM at the selected address If EEMPE is zero, setting EEPE will have no effect. When EEMPE has been written to one by software, hardware clears the bit to zero after four clock cycles.见 description of the EEPE bit for an EEPROM write procedure. ? Bit 1 – EEPE: EEPROM Write Enable The EEPROM Write Enable Signal EEPE is the write strobe to the EEPROM. When address and data are correctly set up, the EEPE bit must be written to one to write the value into the EEPROM 中。The EEMPE bit must be written to one before a logical one is written to EEPE, otherwise no EEPROM write takes place. The following procedure should be followed when writing the EEPROM (the order of steps 3 and 4 is not essential): 1. Wait until EEPE becomes zero. 2. Wait until SELFPRGEN in SPMCSR becomes zero. 3. Write new EEPROM address to EEAR (optional). 4. Write new EEPROM data to EEDR (optional). 5. Write a logical one to the EEMPE bit while writing a zero to EEPE in EECR. 6. Within four clock cycles after setting EEMPE, write a logical one to EEPE. The EEPROM can not be programmed during a CPU write to the Flash memory.软件 must check that the Flash programming is completed before initiating a new EEPROM write. Step 2 is only relevant if the software contains a Boot Loader allowing the CPU to program the 闪光灯。 If the Flash is never being updated by the CPU, step 2 can be omitted.See ” Boot Loader

Support – Read-While-Write Self-Programming, ATmega88PA, ATmega168PA and ATmega328P” on page 277 for details about Boot programming. Caution: An interrupt between step 5 and step 6 will make the write cycle fail, since the EEPROM Master Write Enable will time-out. If an interrupt routine accessing the EEPROM is interrupting another EEPROM access, the EEAR or EEDR Register will be modified, causing the interrupted EEPROM access to fail. It is recommended to have the Global Interrupt Flag cleared during all the steps to avoid these problems. Table 7-1. EEPROM Mode Bits EEPM1 EEPM0 编程 Time Operation 0 0 3.4 ms Erase and Write in one operation (Atomic Operation) 0 1 1.8 ms Erase Only 1 0 1.8 ms Write Only 1 1 – Reserved for future use 23 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P When the write access time has elapsed, the EEPE bit is cleared by hardware. The user software can poll this bit and wait for a zero before writing the next byte. When EEPE has been set, the CPU is halted for two cycles before the next instruction is executed. ? Bit 0 – EERE: EEPROM Read Enable The EEPROM Read Enable Signal EERE is the read strobe to the EEPROM. When the correct address is set up in the EEAR Register, the EERE bit must be written to a logic one to trigger the EEPROM read. The EEPROM read access takes one instruction, and the requested data is available immediately. When the EEPROM is read, the CPU is halted for four cycles before the next instruction is executed. The user should poll the EEPE bit before starting the read operation. If a write operation is in progress, it is neither possible to read the EEPROM, nor to change the EEAR Register. The calibrated Oscillator is used to time the EEPROM accesses. Table 7-2 lists the typical programming time for EEPROM access from the CPU. The following code examples show one assembly and one C function for writing to the EEPROM 中。The examples assume that interrupts are controlled (e.g. by disabling interrupts globally) so that no interrupts will occur during execution of these functions. The examples also assume that no Flash Boot Loader is present in the software. If such code is present, the EEPROM write function must also wait for any ongoing SPM command to finish. Table 7-2. EEPROM Programming Time Symbol Number of Calibrated RC Oscillator Cycles Typ Programming Time EEPROM write (from CPU) 26,368 3.3 ms 24 8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P 汇编代码例程 C Code Example 25 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P The next code examples show assembly and C functions for reading the EEPROM.示例 assume that interrupts are controlled so that no interrupts will occur during execution of these functions. 7.6.4 GPIOR2 – General Purpose I/O Register 2 7.6.5 GPIOR1 – General Purpose I/O Register 1 7.6.6 GPIOR0 – General Purpose I/O Register 0 汇编代码例程 C Code Example Bit 7 6 5 4 3 2 1 0 0x2B (0x4B) MSB LSB GPIOR2 Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 0x2A (0x4A) MSB LSB GPIOR1 Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 0 Bit 7 6 5 4 3 2 1 0 0x1E (0x3E) MSB LSB GPIOR0 Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 0 26 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 8. System Clock and Clock Options 8.1 Clock Systems and their Distribution Figure 8-1 presents the principal clock systems in the AVR and their distribution.所有的时钟 不必是活跃在给定的时间。为了降低功耗,时钟模块 not being used can be halted by using different sleep modes, as described in ”Power Management and Sleep Modes” on page 39. The clock systems are detailed below. Figure 8-1. Clock Distribution 8.1.1 CPU Clock – clkCPU CPU 时钟被路由到相关的操作 AVR 内核的系统的组成部分。 这些模块的例子是通用寄存器文件,状态寄存器和 data memory holding the Stack Pointer.停止 CPU 时钟禁止从执行核心 general operations and calculations. 8.1.2 I/O Clock – clkI/O 在 I / O 时钟用于主要的 I/ O 模块,如定时器/计数器,SPI 和 USART。 The I/O clock is also used by the External Interrupt module, but note that some external interrupts

由异步逻辑检测,因此即使在 I / O 被检测到这样的中断 时钟停止了。还要注意的是启动条件检测 USI 模块中进行异步 when clkI/O is halted, TWI address recognition in all sleep modes. 8.1.3 Flash Clock – clkFLASH The Flash clock controls operation of the Flash interface.此时钟通常是同时活跃 与 CPU 时钟。 General I/O 模块 异步 Timer/Counter CPU Core RAM clkI/O clkASY AVR Clock 控制单元 clkCPU Flash and EEPROM clkFLASH Source clock 看门狗定时器 看门狗 振荡器 Reset Logic 时钟 多路复用器 Watchdog clock Calibrated RC 振荡器 Timer/Counter 振荡器 水晶 振荡器 低频 External Clock Crystal Oscillator ADC clkADC System Clock 预分频器 27 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 8.1.4 Asynchronous Timer Clock – clkASY The Asynchronous Timer clock allows the Asynchronous Timer/Counter to be clocked directly 从外部时钟或外部 32 kHz 时钟晶体。The dedicated clock domain allows

使用这个定时器/计数器作为实时计数器即使设备处于睡眠模式。 8.1.5 ADC Clock – clkADC 该 ADC 具有专门的时钟域。这使得停止 CPU 和 I / O 时钟 in order to reduce noise generated by digital circuitry.这给了更准确的 ADC 转换 结果。 8.2 Clock Sources 该设备具有以下时钟源选择,由 Flash 熔丝位选择如图所示 下文。从所选择的源的时钟被输入到 AVR 时钟发生器,以及连接至 相应的模块。 Note: 1. For all fuses “1” means unprogrammed while “0” means programmed. 8.2.1 Default Clock Source The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed, resulting in 1.0MHz system clock. The startup time is set to maximum and time-out period enabled. (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). The default setting ensures that 所有用户都可以使用任何可用的编程接口,使他们所需的时钟源。 8.2.2 Clock Startup Sequence 任何时钟源需要一个足够高的 Vcc 开始振荡与振荡的最小数目 之前,周期可以认为是稳定的。 以确保足够的 VCC,该装置发出带有超时延迟(tTOUT)后产生一个内部复位 该装置复位释放所有其他复位源。 ”System Control and Reset” on page 46 描述了启动条件,内部复位。延时(tTOUT)是看门狗定时 振荡器和周期中的延迟的数量由 SUTx 和 CKSELx 来熔丝位置。该 Table 8-1. Device Clocking Options Select(1) Device Clocking Option CKSEL3..0 Low Power Crystal Oscillator 1111 - 1000 Full Swing Crystal Oscillator 0111 - 0110 Low Frequency Crystal Oscillator 0101 - 0100 Internal 128 kHz RC Oscillator 0011 Calibrated Internal RC Oscillator 0010 External Clock 0000 Reserved 0001 28 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P selectable delays are shown in Table 8-2.看门狗振荡器的频率为电压 dependent as shown in ”Typical Characteristics” on page 326. Main purpose of the delay is to keep the AVR in reset until it is supplied with minimum VCC.该 延迟不会监视的实际电压和将被要求选择一个延迟长于 VCC rise time. If this is not possible, an internal or external Brown-Out Detection circuit should be 使用。 A BOD circuit will ensure sufficient VCC before it releases the reset, and the time-out delay 可以被禁止。Disabling the time-out delay without utilizing a Brown-Out Detection circuit is 不推荐使用。

该振荡器需要振荡的周期的最小数目的时钟被认为是前 稳定。内部波纹计数器监视振荡器的输出时钟,并保持内部 reset active for a given number of clock cycles.复位然后释放,设备将 开始执行。The recommended oscillator start-up time is dependent on the clock type, and 变化从 6 个周期的外部施加的时钟 32K 周期低频晶振。 用于时钟的启动序列包括超时延迟和启动时间时,既 该设备由复位启动。When starting up from Power-save or Power-down mode, VCC is 假定是在足够的电平,并仅在启动时被包括。 8.3 Low Power Crystal Oscillator 引脚 XTAL1 和 XTAL2 是一个反相放大器,其可以是输入和输出,分别 configured for use as an On-chip Oscillator, as shown in Figure 8-2 on page 29. Either a quartz 晶体或陶瓷谐振器都可以使用。 该振荡器是一个低功耗振荡器,以使 XTAL2 输出电压的摆幅。 它提供最低的功耗,但不能驱动其它的时钟输入,并 可能更容易在嘈杂的环境噪声。In these cases, refer to the ”Full Swing Crystal Oscillator” on page 30. C1 和 C2 的值总是相等的两个晶体和谐振器。的最优值 capacitors depends on the crystal or resonator in use, the amount of stray capacitance, and the 对环境的电磁噪声。为选择电容的一些指导原则 use with crystals are given in Table 8-3 on page 29. For ceramic resonators, the capacitor values 制造商应考虑使用。 Table 8-2.看门狗振荡器周期数 Typ Time-out (VCC = 5.0V) Typ Time-out (VCC = 3.0V) Number of Cycles 0 ms 0 ms 0 4.1 ms 4.3 ms 512 65 ms 69 ms 8K (8,192) 29 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 图 8-2。晶体振荡器连接 The Low Power Oscillator can operate in three different modes, each optimized for a specific frequency 范围。The operating mode is selected by the fuses CKSEL3..1 as shown in Table 8-3 on page 29. Notes: 1. This is the recommanded CKSEL settings for the difference frenquency ranges. 2,不宜与晶体使用此选项,只能用于陶瓷谐振器。 3,如果 8 MHz 频率超出器件的规格(由 VCC)时,CKDIV8 保险丝可以以 8 分的内部频率进行编程,必须确保 该所得时钟符合器件的频率要求。 The CKSEL0 Fuse together with the SUT1..0 Fuses select the start-up times as shown in Table 8-4。 Table 8-3.低功耗晶体振荡器工作模式(3) 频率范围 (MHz)的

Recommended Range for Capacitors C1 and C2 (pF) CKSEL3..1(1) 0.4 - 0.9 – 100(2) 0.9 - 3.0 12 - 22 101 3.0 - 8.0 12 - 22 110 8.0 - 16.0 12 - 22 111 Table 8-4.启动时间的低功耗晶振时钟选择 振荡器源/ 电源条件 启动时间从 掉电和 功率节省 额外延迟时间 从复位 (VCC = 5.0V) CKSEL0 SUT1..0 陶瓷谐振器,速度快 rising power 258 CK 14CK + 4.1 ms(1) 0 00 陶瓷谐振器,慢慢 rising power 258 CK 14CK + 65 ms(1) 0 01 陶瓷谐振器,生化需氧量 enabled 1K CK 14CK(2) 0 10 陶瓷谐振器,速度快 rising power 1K CK 14CK + 4.1 ms(2) 0 11 陶瓷谐振器,慢慢 rising power 1K CK 14CK + 65 ms(2) 1 00 XTAL2 (TOSC2) XTAL1 (TOSC1) GND C2 C1 30 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 注:1,这些选项只有当不操作接近的最大频率可使用 装置,并且仅当在启动时的频率稳定性对于应用而言不重要。这些 选项是不适合的晶体。 2,这些选项是为陶瓷谐振器的使用,并确保频率稳定度 at start-up.它们也可以与当不操作接近最大频率的晶体用 在启动该设备,如果频率稳定性是对于应用很重要。 8.4 Full Swing Crystal Oscillator 引脚 XTAL1 和 XTAL2 是一个反相放大器,其可以是输入和输出,分别 configured for use as an On-chip Oscillator, as shown in Figure 8-2 on page 29. Either a quartz 晶体或陶瓷谐振器都可以使用。 该振荡器是一个热火朝天振荡器,具有轨至轨摆动的 XTAL2 输出。这是

有用的,用于驱动其它的时钟输入端和在嘈杂的环境中。电流消耗 higher than the ”Low Power Crystal Oscillator” on page 28. Note that the Full Swing Crystal Oscillator will only operate for VCC = 2.7 - 5.5 volts. C1 和 C2 的值总是相等的两个晶体和谐振器。的最优值 capacitors depends on the crystal or resonator in use, the amount of stray capacitance, and the 对环境的电磁噪声。为选择电容的一些指导原则 use with crystals are given in Table 8-6 on page 31. For ceramic resonators, the capacitor values 制造商应考虑使用。 The operating mode is selected by the fuses CKSEL3..1 as shown in Table 8-5. Notes: 1. If 8 MHz frequency exceeds the specification of the device (depends on VCC), the CKDIV8 保险丝可以以 8 分的内部频率进行编程,必须确保 该所得时钟符合器件的频率要求。 晶体振荡器,生化需氧量 enabled 16K CK 14CK 1 01 晶体振荡器,快 rising power 16K CK 14CK + 4.1 ms 1 10 晶体振荡器,慢慢 rising power 16K CK 14CK + 65 ms 1 11 Table 8-4. Start-up Times for the Low Power Crystal Oscillator Clock Selection (Continued) 振荡器源/ 电源条件 启动时间从 掉电和 功率节省 额外延迟时间 从复位 (VCC = 5.0V) CKSEL0 SUT1..0 Table 8-5. Full Swing Crystal Oscillator operating modes Frequency Range(1) (MHz)的 Recommended Range for Capacitors C1 and C2 (pF) CKSEL3..1 0.4 - 20 12 - 22 011 Google 翻译(企业版) :译者工具包网站翻译器全球商机洞察 30 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:1,这些选项只有当不操作接近的最大频率可使用 装置,并且仅当在启动时的频率稳定性对于应用而言不重要。这些 选项是不适合的晶体。 2,这些选项是为陶瓷谐振器的使用,并确保频率稳定度 在启动。它们也可以与当不操作接近最大频率的晶体用 在启动该设备,如果频率稳定性是对于应用很重要。

8.4 全面启动晶体振荡器 引脚 XTAL1 和 XTAL2 是一个反相放大器,其可以是输入和输出,分别 配置为作为一个片上振荡器,如图 8-2 第 29 页。无论是在石英 晶体或陶瓷谐振器都可以使用。 该振荡器是一个热火朝天振荡器,具有轨至轨摆动的 XTAL2 输出。这是 有用的,用于驱动其它的时钟输入端和在嘈杂的环境中。电流消耗 比“低功耗晶体振荡器”页上的高 28 注满振幅晶体 振荡器将只为 VCC 运作= 2.7 - 5.5 伏。 C1 和 C2 的值总是相等的两个晶体和谐振器。的最优值 电容器的选择取决于使用的晶体或谐振器中,杂散电容的量,以及 对环境的电磁噪声。为选择电容的一些指导原则 与晶体使用表 8-6 给出了 31 页上的陶瓷谐振器,电容值 制造商应考虑使用。 操作模式通过熔丝位 CKSEL3..1 如表 8-5 所示。 注:1,如果 8 MHz 频率超出器件的规格(由 VCC)时,CKDIV8 保险丝可以以 8 分的内部频率进行编程,必须确保 该所得时钟符合器件的频率要求。 晶体振荡器,生化需氧量 启用 16K CK14CK101 晶体振荡器,快 上涨动力 16K CK14CK+4.1 ms 的 110 晶体振荡器,慢慢 上涨动力 16K CK14CK+65 毫秒 111 表 8-4。对于低功耗晶体振荡器时钟选项启动时间(续) 振荡器源/ 电源条件 启动时间从 掉电和 功率节省 额外延迟时间 从复位 (VCC=5.0V)CKSEL0 SUT1..0 表 8-5。满振幅晶振工作模式 频率范围(1) (MHz)的 推荐范围 电容器 C1 和 C2(pF)的 CKSEL3..1 0.4 - 2012 - 22011 31 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 图 8-3。晶体振荡器连接 注:1,这些选项只有当不操作接近的最大频率可使用 装置,并且仅当在启动时的频率稳定性对于应用而言不重要。这些

选项是不适合的晶体。 2,这些选项是为陶瓷谐振器的使用,并确保频率稳定度 在启动。它们也可以与当不操作接近最大频率的晶体用 在启动该设备,如果频率稳定性是对于应用很重要。 表 8-6。启动时间为满振幅晶体振荡器时钟选项 振荡器源/ 电源条件 启动时间从 掉电和 功率节省 额外延迟时间 从复位 (VCC=5.0V)CKSEL0 SUT1..0 陶瓷谐振器,速度快 升功率 258 CK 14CK+4.1 毫秒(1)000 陶瓷谐振器,慢慢 升功率 258 CK 14CK+65 毫秒(1)001 陶瓷谐振器,生化需氧量 启用 1K CK14CK(2)010 陶瓷谐振器,速度快 崛起的大国 1K CK14CK+4.1 毫秒(2)011 陶瓷谐振器,慢慢 崛起的大国 1K CK14CK+65 毫秒(2)100 晶体振荡器,生化需氧量 启用 16K CK14CK101 晶体振荡器,快 上涨动力 16K CK14CK+4.1 ms 的 110 晶体振荡器,慢慢 上涨动力 16K CK14CK+65 毫秒 111 XTAL2(TOSC2) XTAL1(TOSC1) GND C2 C1 32 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 8.5 低频晶体振荡器 低频晶体振荡器进行了优化,以 32.768 kHz 的钟表晶体。 当选择晶体,负载 capasitance 和晶体的等效串联电阻,ESR 必须加以考虑。这两个值是由晶体供货商指定。 ATMEGA48PA/88PA/168PA/328P 振荡器是非常低的功耗进行了优化,并 因此,在选择结晶时,见表 8-7 第 32 页上的最大 ESR 建议 6.5 pF 的,9.0 pF 和 12.5 pF 的晶体

表 8-7。最大 ESR 推荐为 32.768 kHz 晶体振荡器 注:1,最大 ESR 为典型值基于特性 低频晶体振荡器提供了一个内部负载电容,每个 TOSC 销 如表 8-8 第 32 页上的说明。 需要在每个 TOSC 引脚上的外部电容(C) ,可以计算出使用: 其中 CL 是负载电容由晶体供应商和 CS 指定的 32.768 kHz 晶振 是总的寄生电容为 1 个 TOSC 销。 晶体指定负载电容(CL)比那些页面上的表 8-8 中给出更高 32,需要为 29 页的图 8-2 描述施加的外部电容器。 低频晶体振荡器,必须通过设置 CKSEL 来选择保险丝为“0110”或 “0111” ,示于表 8-10。启动时间由熔丝位 SUT 如图确定 表 8-9。 晶体 CL(pF)的最大 ESR[k]的(1) 6.575 9.065 12.530 表 8-8。电容对于低频晶体振荡器 设备 32 kHz 的振荡器。型帽(XTAL1/ TOSC1)第(XTAL2/ TOSC2) ATMEGA48PA/88PA/168PA/328P 系统振荡器。 18 pF 的 8 pF 的 定时器振荡器。 18 pF 的 8 pF 的 表 8-9。启动时间为低频晶体振荡器时钟选项 SUT1..0 复位时的额外延迟时间(VCC=5.0V)推荐用法 004 CK 电源快速上升,或是 BOD 使能 014 CK+4.1 ms 电源缓慢上升 104 CK+65 毫秒的频率稳定在启动时 11 保留 C =2 CL - 铯 33 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:如果在启动时的频率稳定性对于重要的 1 只应该使用此选项 应用 8.6 标定的内部 RC 振荡器 默认情况下,内部 RC 振荡器提供一个近似的 8.0 MHz 的时钟。虽然电压 与温度相关的,该时钟可以被非常精确地校准,由用户设定。请参阅表 28-1 有关详细信息,317 页。该设备出厂时 CKDIV8 熔丝编程。 请参阅第 35 页上的“系统时钟预分频器”的更多细节。 这个时钟可以通过编程熔丝位 CKSEL 所示被选择作为系统时钟 表 8-11。如果选择,它可以在没有外部元件。复位时硬件负载 预编程的校准值到 OSCCAL 寄存器,自动校准 该 RC 振荡器。这个校准的精度被示为出厂校准中 表 28-1317 页。 通过改变从西南 OSCCAL 寄存器,请参阅“OSCCAL - 振荡器校准寄存器”上 第 37 页,有可能获得更高的校准精度比使用工厂校准。

这个校准的精度被示为用户校准表 28-1317 页上。 当使用这个振荡器作为系统时钟时,看门狗振荡器将仍然使用自己的 看门狗定时器和复位超时。对预编程的校准信息 值,见 298 页的章节“校准字节” 。 注:1,设备出厂时的设置。 2,如果 8 MHz 频率超出器件的规格(由 VCC)时,CKDIV8 熔丝可以在顺序由 8 划分的内部频率进行编程。 当选择了这个振荡器之后,启动时间都如由熔丝位 SUT 确定 表 8-12 第 33 页。 注:1,如果 RSTDISBL 熔丝被编程时,这个启动时间将增加到 14CK+4.1 毫秒,以确保编程模式可以进入。 2,该设备出厂时的设置。 表 8-10。启动时间为低频晶体振荡器时钟选项 CKSEL3..0 启动时间从 掉电和省电推荐用法 0100(1)1K CK 010132K CK 启动时频率已经稳定 表 8-11。内部标定的 RC 振荡器工作模式 频率范围(2) (兆赫)CKSEL3..0 7.3 - 8.10010(1) 表 8-12。启动时间的内部校准 RC 振荡器时钟选择 电源条件 启动时间从掉电 和省电 从额外的延迟 复位(VCC=5.0V)SUT1..0 BOD 使能 6 CK 14CK(1)00 电源快速上升 6 CK 14CK+4.1 毫秒 01 电源缓慢上升 6 CK 14CK+65 毫秒(2)10 保留 11 34 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 8.7128 kHz 内部振荡器 128 kHz 内部振荡器是一个低功耗振荡器提供 128 kHz 的时钟。频率 名义上是在 3V 和 25℃这个时钟可以选择由系统时钟 编程熔丝位 CKSEL 到“11” ,如表 8-13。 注:1,请注意,128 kHz 振荡器是一个非常低功耗时钟源,并且不设计用于高 精度。 当这个时钟源选择,启动时间都如由熔丝位 SUT 确定 表 8-14。 注:1,如果 RSTDISBL 熔丝被编程时,这个启动时间将增加到 14CK+4.1 毫秒,以确保编程模式可以进入。

8.8 外部时钟 为了从外部时钟源驱动芯片,XTAL1 应驱动,如图 8-4 第 34 页。要运行在一个外部时钟设备上,熔丝位 CKSEL 必须编程 为“0000” (见表 8-15) 。 图 8-4。外部时钟驱动配置 当这个时钟源选择,启动时间都如由熔丝位 SUT 确定 表 8-16。 表 8-13。 128 kHz 内部振荡器工作模式 额定频率(1)CKSEL3..0 128 千赫 0011 表 8-14。启动时间为 128 kHz 内部振荡器 电源条件 启动时间从掉电 和省电 从额外的延迟 复位 SUT1..0 BOD 使能 6 CK 14CK(1)00 电源快速上升 6 CK 14CK+4 毫秒 01 电源缓慢上升 6 CK 14CK+64 ms 的 10 保留 11 表 8-15。晶体振荡器的时钟频率 频率 CKSEL3..0 0 - 20 MHz 的 0000 数控 外部 时钟 信号 XTAL2 XTAL1 GND 35 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 当施加外部时钟,它是必需的,以避免在所施加的时钟频率的突然变化 以保证 MCU 能够稳定工作。在超过 2%,从频率的变型 一个时钟周期到下一个可能会导致不可预知的行为。如果超过 2%的变化是 要求,确保 MCU 是在变化保持在复位状态。 注意该系统时钟分频器可用于实现内部的运行时间的变化 时钟频率,同时保证稳定工作。请参阅“系统时钟预分频器” 。 35 的细节。 8.9 时钟输出缓冲器 该装置可以输出系统时钟上的 CLKO 引脚。为了使输出的 CKOUT 保险丝已被编程。此模式适用于当芯片时钟用于驱动其他电路 上的系统。时钟也将被重置时输出,而我的正常运行/ O

当熔丝编程引脚将被覆盖。任何时钟源,包括内部 RC 振荡器,可以在时钟输出上 CLKO 选择。如果系统时钟预分频器是 使用时,它是分割的系统时钟被输出。 8.10 定时器/计数器振荡器 ATMEGA48PA/88PA/168PA/328P 采用了相同的晶体振荡器,低频振荡器 和定时器/计数器振荡器。请参阅“低频晶体振荡器”第 32 页上的细节 振荡器和晶体的需求。 ATMEGA48PA/88PA/168PA/328P 分享定时器/计数器振荡器引脚(TOSC1 和 TOSC2) 与 XTAL1 和 XTAL2。当使用定时器/计数器振荡器,系统时钟必须是 四倍的振荡器频率。由于这一点,该引脚共享,定时器/计数器振荡器 当标定的内部 RC 振荡器作为系统时钟源只能被使用。 使用一个外部时钟源 TOSC1 可以,如果 EXTCLK ASSR 寄存器来实现的 写入逻辑 1。参见“定时器/计数器的异步操作”155 页上的进一步 说明在选择外部时钟输入,而不是一个 32.768 kHz 的钟表晶体。 8.11 系统时钟预分频器 该 ATMEGA48PA/88PA/168PA/328P 有一个系统时钟分频器,系统时钟可以 通过设置“CLKPR - 时钟预分频寄存器”分为 377 页上的这一功能可以 使用时的要求降低了系统的时钟频率和消耗电力 对处理能力低。这可以与所有的时钟源的选择可以使用的,并且会影响到 CPU 和所有同步外设的时钟频率。 clkI / O 驱动,clkADC 都,clkCPU 和 clkFLASH 由系数被划分为示于表 28-3318 页上。 表 8-16。启动时间为外部时钟选择 电源条件 启动时间从掉电 和省电 从额外的延迟 复位(VCC=5.0V)SUT1..0 BOD 使能 6 CK 14CK00 电源快速上升 6 CK 14CK+4.1 毫秒 01 电源缓慢上升 6 CK 14CK+65 毫秒 10 保留 11 36 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 当预分频器设置之间切换时,系统时钟预分频器确保没有 毛刺发生在时钟系统。它还确保没有中间频率高于 既没有相应的时钟频率为以前的设置,也没有时钟频率对应的 到新的设置。纹波计数器实现预分频器运行在 频率的未分割的时钟,这可能比 CPU 的时钟频率快的。因此,它 是不可能的,以确定预分频器的状态 - 即使它是可读的,并且确切的 它需要从一个时钟分频切换到另一个时,不能精确地预测。从 时间 CLKPS 值被写入,它需要 T1 + T2 和 T1+2* T2 之间才新 时钟频率是有效的。在此区间,2 个时钟边沿产生。这里,T1 是以前 时钟周期,T2 是对应于新的预分频比设定的时间段。

为了避免时钟频率的无意改变,一个特殊的写程序必须 befollowed 到 改变 CLKPS 位: 1,写时钟分频器变化使能(CLKPCE)位一和所有其他 bitsin CLKPR 为零。 2,在四个周期,同时将零写入 CLKPCE 写入所需的值 CLKPS。 必须禁止中断,改变预分频器设置时要确保写程序 不中断。 37 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 8.12 寄存器描述 8.12.1 OSCCAL - 振荡器校准寄存器 ?位 7..0 - CAL7..0:振荡器校准值 振荡器校准寄存器用来调整校准的内部 RC 振荡器 从消除振荡器频率的工艺变化。预编程的校准值 在复位时自动写入该寄存器,使工厂校准的频率为 317 页的表 28-1 中指定的应用软件可以写这个寄存器来改变 振荡器的频率。该振荡器可以进行校准,以频率如表中指定的 28 1 页 317 校准的范围之外,不能保证。 请注意,此振荡器用于 EEPROM 和 Flash 的写访问,而这些写 次将相应地受到影响。如果 EEPROM 或 Flash 写,不进行校准,以更 超过 880 兆赫。否则,EEPROM 或 Flash 写可能会失败。 该 CAL7 位确定操作的振荡器的范围内。该位设置为 0 使 最低的频率范围内,该位设置为 1,给出了最高的频率范围。这两个频率 范围是重叠的,换句话说 OSCCAL=0x7F 的设置提供了一个更高的 频率高于 OSCCAL=0x80 的。 该 CAL6..0 位用于调整选定范围内的频率。 0×00 的设置 使在该范围内的最低频率,到 0x7f 的设置使频率最高的 范围。 8.12.2 CLKPR - 时钟预分频寄存器 ?位 7 - CLKPCE:时钟预分频器变化使能 该 CLKPCE 位必须写入逻辑 1,以使能 CLKPS 位。该 CLKPCE 当 CLKPR 其他位被同时写入到零位才会更新。 CLKPCE 在 由硬件清零写入四个周期后或当 CLKPS 位写入。重写 在此超时期限 CLKPCE 丝毫没有延长超时时间,也没有清除 CLKPCE 位。 ?位 3..0 - CLKPS3..0:时钟预分频器选择位 3 - 0 这些位定义所选时钟源和内部系统之间的分频因子 时钟。这些位可以被写入运行时间来改变时钟频率,以适应应用程序 要求。由于分频器分频主时钟输入到 MCU,所有同步速度 当分频系数是用来外设降低。该部门的因素中给出 表 8-17 第 38 页。 位 7 6 54 3 210 (0x66)中 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL

读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值标定值 位 7 6 54 3 210 (0x61)CLKPCE - - - CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR 读/写读/写 R R R 读/写读/写读/写读/写 初始值 0 000 见位说明 38 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P CKDIV8 熔丝位决定 CLKPS 位的初始值。若 CKDIV8 未编程, CLKPS 位将被重置为“0000” 。如果 CKDIV8 已编程,CLKPS 位复位到 “0011” ,给人 8 日开始了分频因子。这个功能应该如果选定的时钟被用于 源具有的频率高于该装置在本操作的最大频率 条件。需要注意的是任何值可被写入 CLKPS 位不管 CKDIV8 的 保险丝设置。该应用软件必须确保有足够的分频系数选择,如果 所选择的时钟源具有更高的频率比该装置的最大频率 本操作条件。该设备出厂时 CKDIV8 熔丝编程。 表 8-17。时钟预分频器选择 CLKPS3 CLKPS2 CLKPS1 CLKPS0 时钟分频因子 0 0 0 01 0 0 0 12 0 0 1 04 0 0 1 18 0 1 0 016 0 1 0 132 0 1 1 064 0 1 1 1128 1 0 0 0256 1001 保留 1 0 10 保留 101 1 保留 1100 保留 1101 保留 1 1 10 保留 1 11 1 保留 39 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9,电源管理及睡眠模式 睡眠模式可以使应用程序关闭没有使用的模块的 MCU,从而节省 电源。 AVR 具有不同的睡眠模式,允许用户定制功耗 应用程序的需求。 当启用时,欠压检测器(BOD)的主动监测过程中,电源电压 睡眠周期。以进一步节省电力,所以能够禁止 BOD 在一些睡眠模式。

请参阅第 40 页上的“董事会禁用”的更多细节。 9.1 睡眠模式 ?F26 页 igure8-1 给出了二 FFE 租金时钟系统 ATMEGA48PA/88PA/168PA/328P,以及它们的分布。此图在选择一个有帮助的 合适的睡眠模式。表 9-1 给出了不同的睡眠模式,他们唤醒源董事会 禁用的能力。 注:1,仅推荐与选定的时钟源为外部晶体或谐振器。 2,如果定时器/计数器运行在异步模式下。 3,对于 INT1 和 INT0,只级中断。 要输入任何睡眠模式的,在 SMCR 的 SE 位必须写入逻辑 1 和 SLEEP 指令必须执行。该 SM2,SM1 和 SM0 位在 SMCR 寄存器选择 睡眠模式(空闲模式,ADC 噪声抑制,省电,省电,待机,或扩展 待机)将由 SLEEP 指令被激活。参见第 44 页的表 9-2 总结。 如果使能的中断而 MCU 处于休眠模式下,MCU 唤醒。该 MCU 然后,停止对除了启动时间的四个周期,执行中断程序,并 返回到 SLEEP 的下一条指令。寄存器文件的内容,并 SRAM 不会改变时,该设备从睡眠中醒来。如果在睡眠过程中发生了复位, 在 MCU 唤醒后从中断向量开始执行。 表 9-1。主动时钟域和唤醒源在不同的睡眠模式。 有源时钟域振荡器唤醒源 软件 生化需氧量禁用 睡眠模式 了 clkCPU clkFLASH CLKIO clkADC 都 clkASY 主时钟 来源启用 定时振荡器 启用 INT1,INT0 和 引脚电平变化 TWI 地址 比赛 定时器 SPM/ EEPROM 准备 ADC WDT 其他 I / O 空闲模式 X X X X X(2)X X X X X X X ADC 噪声

还原 X X X X(2)X(3)X X(2)X X X 掉电 X(3)X X X 节电 X X(2)X(3)X X X X 备(1)X X(3)X X X 扩展 待机 X(2)X X(2)X(3)X X X X 40 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9.2 生化需氧量禁用 当欠压检测器(BOD)由 BODLEVEL 保险丝,表 27-7 启用 296 页, 在睡眠期间的 BOD 是主动监视电源电压。为了节省电量, 可以通过软件禁用生化需氧量一些睡眠模式,参阅第 220 页表 9-1 然后 39。睡眠模式下的功耗将是在同一水平时的 BOD 是全局 通过保险丝禁用。如果董事会在软件中禁用,BOD 的功能立即关闭 进入睡眠模式之后。一旦唤醒,从睡眠,生化需氧量自动重新启用。 这可确保安全操作的情况下的 VCC 电平已在休眠周期期间下降。 当 BOD 已被禁用,从睡眠模式唤醒时间约为 60 μ s 的,以确保董事会正常工作之前,MCU 继续执行代码。 BOD 禁用由位 6 控制,BODS(BOD 休眠)中的控制寄存器 MCUCR,见 “MCUCR - MCU 控制寄存器”第 44 页上写位后关闭相关的董事会 睡眠模式,而在这一点零董事会保持活跃。默认设置保持积极的 BOD, 即 BODS 设置为零。 写入 BODS 位由时序控制和使能位,请参阅“MCUCR 第 44 页上的 MCU 控制寄存器“。 9.3 空闲模式 当 SM2..0 位写入 000,SLEEP 指令将使 MCU 进入空闲 模式下,CPU 停止运行,而 SPI,USART,模拟比较器,ADC,两线串行 接口,定时器/计数器,看门狗和中断系统继续工作。这种睡眠 模式基本停止了 clkCPU 和 clkFLASH,同时允许其他时钟运行。 空闲模式使 MCU 从外部触发中断以及唤醒内部 象定时器溢出与 USART 传输完成中断。如果唤醒从 模拟比较器中断并不是必需的,模拟比较器可以通过断电 设置在模拟比较器控制和状态寄存器 ACD 位 - 钢芯铝绞线。这将 减少在空闲模式下的功耗。如果 ADC 使能,转换会自动启动 当这种模式进入。 9.4 ADC 噪声抑制模式 当 SM2..0 位写入 001,SLEEP 指令使 MCU 进入 ADC 降噪模式下,CPU 停止运行,而 ADC,外部中断,2 线接口地址配置,定时器/计数器(1)和看门狗继续工作 (如果已启用) 。这个睡眠模式只停止了 clkI/ O,clkCPU 和 clkFLASH,同时允许其他 时钟来运行。 这提高了噪声环境下的 ADC,可实现更高分辨率的测量。如果 ADC 使能,进入此模式的转换会自动启动。除了从

ADC 转换结束中断,外部复位,看门狗复位中, 看门狗中断,欠压复位,两线串行接口地址匹配, 定时器/计数器中断,SPM/ EEPROM 准备好中断,INT0 外部电平中断 或 INT1 或引脚电平变化中断可以从 ADC 噪声抑制模式唤醒 MCU。 注:1,定时器/计数器将只保留在异步模式下运行,请参阅“8 位定时器/计数器与 PWM 和异步操作“的详细信息,第 144 页。 41 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9.5 掉电模式 当 SM2..0 位写入 010,SLEEP 指令将使 MCU 进入掉电 模式。在这种模式下,外部晶体停振,而外部中断,2 线接口地址表,并看门狗继续工作(如果启用) 。只有一个 外部复位,看门狗复位,看门狗中断,欠压复位,两线 接口地址匹配,INT0 或 INT1 外部电平中断,或引脚变化 中断可以唤醒 MCU。这个睡眠模式停止了所有的时钟,让 只有异步模块可以继续工作。 请注意,如果电平触发中断用于唤醒从掉电模式下,改变 电平必须保持一段时间,以唤醒 MCU。参见“外部中断”第 70 页 了解详细信息。 当从掉电模式唤醒时,有一个从唤醒条件发生延迟 直到唤醒生效。这使得时钟重新启动,并成为稳定后, 已停止。唤醒周期是由同一熔丝位 CKSEL 定义的定义 复位超时周期,如第 27 页上的“时钟源” 。 9.6 省电模式 当 SM2..0 位写入 011,SLEEP 指令将使 MCU 进入省电 模式。这种模式是相同的掉电,但有一个例外: 如果定时器/计数器被激活,它会在睡眠时继续运行。该设备可以从醒来 无论是定时器溢出或输出比较的定时器/计数器事件,如果相应的 定时器/计数器中断使能位 TIMSK2 设置和全局中断使能位 SREG 设置。 如果定时器/计数器没有运行,掉电模式建议,而不是省电 模式。 该定时器/计数器可以在时钟同步和异步省电 模式。如果定时器/计数器没有使用异步时钟,定时器/计数器振荡器 睡眠时停止。如果定时器/计数器不使用同步时钟,时钟源为 睡眠时停止。请注意,即使在同步时钟在运行省电,这 时钟只适用于定时器/计数器。 9.7 待机模式 当 SM2..0 位是 110 和一个外部晶体/谐振器时钟选项被选中, SLEEP 指令使 MCU 进入待机模式。此模式是相同的掉电 不同之处在于振荡器继续运行。在待机模式下,器件唤醒 在 6 个时钟周期。 9.8 扩展 Standby 模式

当 SM2..0 位是 111 和一个外部晶体/谐振器时钟选项被选中, SLEEP 指令使 MCU 进入扩展的 Standby 模式。此模式是相同的 省电与振荡器继续运行异常。从延长待机 模式,只需要 6 个时钟周期醒来。 42 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9.9 节电注册 功率降低寄存器(PRR) ,请参阅 - 45 页上的“PRR 节电注册” ,提供 的方法,来停止时钟以单个外设,以降低功耗。该 周边目前处于冻结状态和 I / O 寄存器不能被读取或写入。 停止时钟时,所使用的外围设备资源将继续被占用,因此 外围应该在大多数情况下停止的时钟前被禁用。醒来的模块, 这是通过清除 PRR 位完成,使该模块在相同的状态关闭之前。 模块关机可以在空闲模式和活动模式被用来显著降低整体 功耗。在所有其他睡眠模式下,时钟已经停止。 9.10 最小化功耗 有几种可能试图尽量减少在一个功率消耗时,考虑 AVR 控制系统。在一般情况下,睡眠模式应该使用尽可能和 睡眠模式应该被选择,使得尽可能少的设备的功能正在执行。 不需要的功能应该被禁用。特别是,下面的模块可能需要 特殊考虑时,试图达到的尽可能低的功耗。 9.10.1 模拟到数字转换器 如果使能时,ADC 在睡眠模式下继续工作。为了降低功耗,在 ADC 应该被禁用 之前进入睡眠模式。当 ADC 关闭再重新打开,下一个 转换将是一个扩展的转换。请参考“模拟到数字转换器”第 250 页上 关于 ADC 操作细节。 9.10.2 模拟比较器 在空闲模式下,模拟比较器,如果不使用被禁用。当进入 ADC 降噪模式下,模拟比较器应该被禁用。在其他睡眠模式 模拟比较器被自动禁止。但是,如果模拟比较器设置 使用了内部电压基准源,模拟比较器,应在所有被禁用 睡眠模式。否则,内部参考电压将被启用,独立的睡眠 模式。请参阅“模拟比较器”246 页上的如何配置模拟细节 比较器。 9.10.3 欠压检测 如果欠压检测器不需要由应用程序,这个模块也可以关闭。如果 欠压检测器是由 BODLEVEL 保险丝启用,它在睡眠中启用 模式,因此,总是消耗功率。在深层次的睡眠模式,这将有助于显著 到的总电流消耗。请参阅“掉电检测”第 48 页的详细信息, 关于如何配置欠压检测。 9.10.4 内部参考电压 需要的掉电检测时,内部参考电压将被启用, 模拟比较器或 ADC。如果因为在这些模块将被禁用

以上,内部参考电压将被停用,它不会消耗电能。当 再次接通时,用户必须等待基准启动的输出被使用之前。如果 参考保持在睡眠模式下,输出可以立即使用。请参阅“内部电压 参考“第 49 页上的启动时间的细节。 43 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9.10.5 看门狗定时器 如果看门狗定时器是不是需要在应用程序中,这个模块也可以关闭。如果 看门狗定时器使能,它将在各种休眠模式下继续工作,因此经常食用 电源。在深层次的睡眠模式,这将显著总电流消耗贡献。 请参阅“看门狗定时器”50 页上的如何配置看门狗定时器。 9.10.6 端口引脚 当进入睡眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。该 最重要的是避免了驱动电阻性负载。在休眠模式下均 在 I / O 时钟(重新激活/ O)和 ADC 时钟 clkADC 都被停止,该设备的输入缓冲器 被禁用。这将确保没有功率被输入逻辑时不需要消耗。在 某些情况下,输入逻辑是必要的,用于检测唤醒条件,然后将 启用。请参阅第 79 页上的“数字输入使能和睡眠模式”的详细信息 该引脚被使能。如果输入缓冲器使能,并且输入信号被悬空或有 模拟信号电平接近 VCC /2,否则输入缓冲器会消耗过多的功率。 对于模拟输入引脚,数字输入缓冲应始终被禁用。模拟信号 电平接近 VCC/2 的输入引脚可引起显著电流,即使在主动模式。数字 输入缓冲器可以通过写数字输入中断寄存器被禁用(DIDR1 和 DIDR0) 。请参阅“DIDR1 - 数字输入禁止寄存器 1”249 页和“DIDR0 - 数字 输入禁止寄存器 0“的详细信息,266 页。 9.10.7 片上调试系统 如果片上调试系统是由 DWEN 保险丝启用,芯片进入睡眠模式时, 主时钟源被启用,因此总是消耗功率。在深层次的睡眠模式, 这将显著总电流消耗贡献。 44 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 9.11 寄存器描述 9.11.1 SMCR - 睡眠模式控制寄存器 休眠模式控制寄存器包含控制位电源管理。 ?位 7..4 Res:保留位 这些位未使用的 ATMEGA48PA/88PA/168PA/328P,永远读作零。 ?位 3..1 - SM2..0:休眠模式选择位 2,1 和 0 这些位作为列于表 9-2 中的五个可用睡眠模式之间进行选择。 注:1,待机模式下只建议用于与外部晶体或谐振器使用。 ?位 0 - SE:启用睡眠 在 SE 位必须写入逻辑 1,使 MCU 进入睡眠模式时,休眠 指令被执行。为了确保进入睡眠模式的 MCU,除非它是程序员的

目的,建议写的睡眠启用(SE)位于一个刚刚在执行前 SLEEP 指令,并唤醒后立即清除。 9.11.2 MCUCR - MCU 控制寄存器 ?第 6 位 - BODS:生化需氧量睡眠 该 BODS 位必须写入逻辑 1,以睡眠过程中关闭生化需氧量,见表 9-1 第 39 页上写的 BODS 位由时序控制和使能位, BODSE 在 MCUCR。要禁用董事会在有关睡眠模式,无论是 BODS 和 BODSE 必须先 位 7 6 54 3 210 0x33 内容(0x53) - - - - SM2 SM1 SM0 SE SMCR 读/写 R R R R 读/写读/写读/写读/写 初始值 0 0 00 0 0 00 表 9-2。休眠模式选择 SM2 SM1 SM0 休眠模式 0 00 空闲 001 ADC 噪声抑制 010 掉电 011 省电 100 保留 101 保留 110 待机(1) 11 1 外部待机(1) 位 7 6 54 3 210 的 0x35(0x55 写入) - BODS BODSE PUD - - IVSEL IVCE MCUCR 读/写 R R R 读/写 R R 读/写读/写 初始值 0 0 00 0 0 00 45 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 被设置为 1。然后,设置 BODS 位,BODS 必须设置为 1 和 BODSE 必须设定为 零四个时钟周期内。 该 BODS 位是有效时,它被设置三个时钟周期之后。 SLEEP 指令必须执行 而 BODS 是活性以关闭 BOD 为实际睡眠模式。该 BODS 位 后三个时钟周期自动清零。 ?位 5 - BODSE:生化需氧量睡眠启用 BODSE 实现的 BODS 控制位设置,如 BODS 解释位描述。生化需氧量禁用 由时序控制。 9.11.3 PRR - 节电注册 ?第 7 位 - PRTWI:功率降低 TWI 写 1 到该位关闭 TWI 停止的时钟模块。当 再次醒来的 TWI,TWI 接口应该被重新初始化,以确保正常运行。 ?第 6 位 - PRTIM2:降低功耗定时器/计数器 写 1 到该位将关闭在同步模式下,定时/计数器模块(AS2 为 0) 。当定时器/计数器已启用,业务将继续像在关机之前。 ?位 5 - PRTIM0:降低功耗定时器/计数器

写 1 到该位关闭的定时器/计数器模块。当定时器/计数器 启用后,业务将继续像在关机之前。 ?位 4 - Res:保留位 该位保留在 ATMEGA48PA/88PA/168PA/328P,读为零。 ?位 3 - PRTIM1:降低功耗定时器/计数器 写 1 到该位关闭的定时器/计数器模块。当定时器/计数器 启用后,业务将继续像在关机之前。 ?第 2 位 - PRSPI:降低功耗串行外设接口 如果使用 debugWIRE 的片上调试系统,此位不应该被写入到一个。 写 1 到该位关闭串行外设接口通过停止时钟 该模块。当再次醒来的 SPI,SPI 的应重新初始化,以确保适当的 操作。 ?位 1 - PRUSART0:节电 USART0 写 1 到该位通过停止时钟模块关闭了 USART。当 再次醒来的 USART,USART 的,应重新初始化,以确保正常运行。 ?位 0 - PRADC:降低功耗的 ADC 写 1 到该位关闭的 ADC。之前关闭 ADC 必须被禁止。 模拟比较器不能用在 ADC 输入 MUX 当 ADC 被关闭。 位 7 6 54 3 210 (0x64)PRTWI PRTIM2 PRTIM0 - PRTIM1 PRSPI PRUSART0 PRADC PRR 读/写读/写读/写读/写读读/写读/写读/写读/写 初始值 0 0 00 0 0 00 46 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 10,系统控制和复位 10.1 复位 AVR 在复位时,所有的 I / O 寄存器都被设置为初始值,程序开始运行 从复位向量。对于 ATMEGA168PA,指令放在复位向量必须 是 JMP - 绝对跳转 - 指令复位处理例程。对于 ATMEGA48PA 和 ATMEGA88PA,指令放置在复位向量必须是 RJMP - 相对跳转 指令到复位处理例程。如果程序永远不会使能中断时, 中断向量不使用,一般的程序代码可以放置在这些位置。这 同样情况下,如果复位向量是在应用程序区,中断向量位于 引导部分,反之亦然(仅 ATMEGA88PA/168PA) 。该电路框图如图 10-1 第 47 页为复位逻辑。表 28-3318 页上定义的电气参数 复位电路。 对 AVR 的 I/ O 端口立即复位为初始状态,当复位源去 活动。这不需要任何时钟处于正常运行状态。 毕竟复位信号消失活跃,一个延迟计数器被激活,从而延长了内部 复位。这使正常运行开始之前达到一个稳定的水平的能力。超时 延迟计数器的周期是由通过 SUT 和熔丝位 CKSEL 用户自定义。不同 选择的延迟时间是 27 页的呈现在“时钟源” 。 10.2 复位源

该 ATMEGA48PA/88PA/168PA/328P 有 4 个复位源: ?上电复位。该 MCU 复位当电源电压为低于上电复位 门限 VPOT。 ?外部复位。The MCU is reset when a low level is present on the RESET pin for longer than the minimum pulse length. ? Watchdog System Reset. The MCU is reset when the Watchdog Timer period expires and the Watchdog System Reset mode is enabled. ? Brown-out Reset. The MCU is reset when the supply voltage VCC is below the Brown-out Reset threshold (VBOT) and the Brown-out Detector is enabled. 47 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P 图 10-1。Reset Logic 10.3 Power-on Reset A Power-on Reset (POR) pulse is generated by an On-chip detection circuit. The detection level is defined in ”System and Reset Characteristics” on page 318. The POR is activated whenever VCC is below the detection level. The POR circuit can be used to trigger the start-up Reset, as well as to detect a failure in supply voltage. A Power-on Reset (POR) circuit ensures that the device is reset from Power-on.到达 Power-on Reset threshold voltage invokes the delay counter, which determines how long the device is kept in RESET after VCC rise. The RESET signal is activated again, without any delay, when VCC decreases below the detection level. 图 10-2。MCU Start-up, RESET Tied to VCC MCU Status Register (MCUSR) 欠压 BODLEVEL [2..0] Reset Circuit Delay Counters CKSEL[3:0] CK 超时 DATA BUS 时钟 发电机 SPIKE 过滤器 Pull-up Resistor 看门狗 振荡器 SUT[1:0] 上电复位 电路 RSTDISBL

V 复位 TIME-OUT 内部 复位 tTOUT VPOT VRST CC 48 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P Figure 10-3. MCU Start-up, RESET Extended Externally 10.4 External Reset An External Reset is generated by a low level on the RESET pin. Reset pulses longer than the minimum pulse width (see ”System and Reset Characteristics” on page 318) will generate a 复位,即使系统时钟没有运行。Shorter pulses are not guaranteed to generate a reset. When the applied signal reaches the Reset Threshold Voltage – VRST – on its positive edge, the delay counter starts the MCU after the Time-out period – tTOUT – has expired. The External Reset can be disabled by the RSTDISBL fuse, see Table 27-7 on page 296. Figure 10-4. External Reset During Operation 10.5 Brown-out Detection ATmega48PA/88PA/168PA/328P has an On-chip Brown-out Detection (BOD) circuit for monitoring the VCC level during operation by comparing it to a fixed trigger level. The trigger level for the BOD can be selected by the BODLEVEL Fuses. The trigger level has a hysteresis to ensure spike free Brown-out Detection. The hysteresis on the detection level should be interpreted as VBOT+ = VBOT + VHYST/2 and VBOT- = VBOT - VHYST/2.When the BOD is enabled, and VCC decreases to a value below the trigger level (VBOT- in Figure 10-5 on page 49), the Brown-out Reset is immediately activated. When VCC increases above the trigger level (VBOT+ in Figure 105 on page 49), the delay counter starts the MCU after the Time-out period tTOUT has expired. The BOD circuit will only detect a drop in VCC if the voltage stays below the trigger level for longer than tBOD given in ”System and Reset Characteristics” on page 318. 复位 TIME-OUT 内部 复位 tTOUT VPOT VRST

VCC CC 49 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P Figure 10-5. Brown-out Reset During Operation 10.6 Watchdog System Reset When the Watchdog times out, it will generate a short reset pulse of one CK cycle duration.上 the falling edge of this pulse, the delay timer starts counting the Time-out period tTOUT.请参阅 page 50 for details on operation of the Watchdog Timer. Figure 10-6. Watchdog System Reset During Operation 10.7 Internal Voltage Reference ATmega48PA/88PA/168PA/328P features an internal bandgap reference. This reference is used for Brown-out Detection, and it can be used as an input to the Analog Comparator or the ADC。 10.7.1 Voltage Reference Enable Signals and Start-up Time The voltage reference has a start-up time that may influence the way it should be used.该 start-up time is given in ”System and Reset Characteristics” on page 318. To save power, the reference is not always turned on. The reference is on during the following situations: 1. When the BOD is enabled (by programming the BODLEVEL [2:0] Fuses). 2. When the bandgap reference is connected to the Analog Comparator (by setting the ACBG bit in ACSR). 3. When the ADC is enabled. Thus, when the BOD is not enabled, after setting the ACBG bit or enabling the ADC, the user must always allow the reference to start up before the output from the Analog Comparator or VCC 复位 TIME-OUT 内部 复位 VBOTVBOT+ tTOUT CK CC 50 8161D–AVR–10/09 ATmega48PA/88PA/168PA/328P ADC is used. To reduce power consumption in Power-down mode, the user can avoid the three conditions above to ensure that the reference is turned off before entering Power-down mode. 10.8 Watchdog Timer 10.8.1 Features ? Clocked from separate On-chip Oscillator ? 3 Operating modes – Interrupt

– System Reset – Interrupt and System Reset ? Selectable Time-out period from 16ms to 8s ? Possible Hardware fuse Watchdog always on (WDTON) for fail-safe mode 10.8.2 Overview ATmega48PA/88PA/168PA/328P has an Enhanced Watchdog Timer (WDT). The WDT is a timer counting cycles of a separate on-chip 128 kHz oscillator. The WDT gives an interrupt or a system reset when the counter reaches a given time-out value. In normal operation mode, it is required that the system uses the WDR - Watchdog Timer Reset - instruction to restart the counter before the time-out value is reached. If the system doesn't restart the counter, an interrupt or system reset will be issued. Figure 10-7.看门狗定时器 In Interrupt mode, the WDT gives an interrupt when the timer expires. This interrupt can be used to wake the device from sleep-modes, and also as a general system timer. One example is to limit the maximum time allowed for certain operations, giving an interrupt when the operation has run longer than expected. In System Reset mode, the WDT gives a reset when the timer 过期。This is typically used to prevent system hang-up in case of runaway code.第三 mode, Interrupt and System Reset mode, combines the other two modes by first giving an interrupt and then switch to System Reset mode. This mode will for instance allow a safe shutdown by saving critical parameters before a system reset. The Watchdog always on (WDTON) fuse, if programmed, will force the Watchdog Timer to System Reset mode. With the fuse programmed the System Reset mode bit (WDE) and Interrupt 128kHz 振荡器 WDP0 WDP1 WDP2 WDP3 看门狗 复位 WDE WDIF WDIE MCU RESET 中断 50 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P ADC 的使用。以减少在掉电模式中的功耗,用户可避免三 上述条件,以确保基准进入掉电模式之前关闭。 10.8 看门狗定时器 10.8.1 特点

?从独立的片上振荡器提供时钟 ?3 种工作模式 - 中断 - 系统重置 - 中断与系统复位 ?可选的超时周期从 16 毫秒到 8 秒 ?可能的硬件看门狗熔丝始终(WDTON)故障安全模式 10.8.2 概述 ATMEGA48PA/88PA/168PA/328P 有一个增强型看门狗定时器(WDT) 。 WDT 是 定时器计数独立的片上 128 kHz 振荡器周期。该 WDT 发出一个中断或 当计数器达到给定的超时值系统复位。在正常操作模式下,它是 该系统采用了 WDR 要求 - 看门狗定时器复位 - 指令重新启动计数器 以前所用的超时值被达到。如果系统没有重启计数器,中断或 系统复位将发行。 图 10-7。看门狗定时器 在中断模式下,WDT 发出一个中断时,计时器到期。该中断可用于 唤醒设备从睡眠模式中,也可作为一个通用系统定时器。一个例子是 限制允许某些操作的最长时间,给中断操作时, 已经运行速度比预期的要长。在系统复位模式下,WDT 发出复位时,计时器 过期。这通常用于防止系统挂起的情况下失控的代码。第三 模式,中断与系统复位模式,首先给中断结合了另外两种模式 然后切换到系统复位模式。此模式将如允许安全关机 通过保存临界参数的系统复位时使用。 看门狗总是(WDTON)保险丝,如果编程,将迫使看门狗定时器的系统 复位模式。随着编程时,系统复位模式位(WDE)和中断 128kHz 的 振荡器 WDP0 WDP1 WDP2 WDP3 看门狗 复位 WDE WDIF WDIE MCU 复位 中断 51 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 模式位(WDIE)分别锁定到 1 和 0。为了进一步确保程序的安全性,改变 对于看门狗建立必须遵循定时序列。序列清除 WDE 与 改变超时配置如下:

1,在相同的操作,写 1 来改变看门狗使能位(WDCE)和 WDE。逻辑必须写入 WDE 无论 WDE 的前值 位。 2,在接下来的 4 个时钟周期,写 WDE 与预分频位(WDP)作为 期望的,但随着 WDCE 位清零。这必须在一个操作中完成。 下面的代码示例显示了汇编和 C 实现了关闭 WDT 定时器。在此假定中断处于用户控制(例如,通过禁用中断 全局)以便将发生这些功能的执行过程中没有中断。 52 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:1,请参阅“关于代码示例”第 7 页。 注意:如果看门狗被意外激活,例如通过一个失控的指针或欠压 条件下,该装置将复位和看门狗定时器将保持启用。如果代码不 设置处理看门狗,这可能会导致超时复位的死循环。为了避免这种情况 的情况下,应用软件要经常清除看门狗复位标志 (WDRF)和初始化程序中的 WDE 控制位,即使看门狗不使用。 汇编代码例程(1) C 代码示例(1) 53 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 下面的代码示例显示了汇编和 C 函数改变超时 看门狗定时器的值。 注:1,请参阅“关于代码示例”第 7 页。 注:看门狗定时器应的 WDP 位任何改变之前被重置,因为变化 在 WDP 位可以切换到一个较短的超时周期时产生超时。 汇编代码例程(1) C 代码示例(1) 54 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 10.9 寄存器描述 10.9.1 MCUSR - MCU 状态寄存器 MCU 状态寄存器提供信息的复位源引起 MCU 复位。 ?位 7..4:Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?位 3 - WDRF:看门狗复位标志 如果看门狗复位发生时,该位被置位。该位由上电复位复位,或 写入逻辑零的标志。 ?位 2 - BORF:欠压复位标志 如果欠压复位时,该位被置位。该位由上电复位复位,也可以通过写 逻辑零的标志。

?位 1 - EXTRF:外部复位标志 如果一个外部复位发生时置位。该位由上电复位复位,也可以通过写 逻辑零的标志。 ?位 0 - PORF:上电复位标志 如果上电复位时,该位被置位。该位只能通过写入逻辑零的标志复位。 为了使用这些复位标志来识别复位条件,用户应该阅读,然后 尽早在程序重置 MCUSR。如果寄存器另一个前清除 复位时,复位源可以通过检查复位标志被发现。 10.9.2 WDTCSR - 看门狗定时器控制寄存器 ?第 7 位 - WDIF:看门狗中断标志 当超时发生在看门狗定时器和看门狗定时器被设置该位被设置 中断。 WDIF 由硬件执行相应的中断时清零 处理向量。另外,WDIF 通过写 1 来清零。当在 I 位 SREG 和 WDIE 设置,看门狗超时中断执行。 ?位 6 - WDIE:看门狗中断使能 当该位被写入到一个和状态寄存器中的 I 位被置位,看门狗中断 启用。如果 WDE 被清除,结合本设定时,看门狗定时器处于中断 如果超时在看门狗定时器模式时,相应的中断执行。如果 WDE 置位时,看门狗定时器处于中断与系统复位模式。在第一超时的 位 7 6 54 3 210 的 0x35(0x55 写入) - - - - WDRF BORF EXTRF PORF MCUSR 读/写 R R R R 读/写读/写读/写读/写 初始值 0 000 见位说明 位 7 6 54 3 210 (0X60)WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCSR 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 000 X 000 55 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 看门狗定时器将设置 WDIF。执行相应的中断向量将清除 WDIE 和 WDIF 自动硬件(看门狗进入系统复位模式) 。这是有用 在使用中断时看门狗定时器的安全性。在中断和系统 复位模式,WDIE 必须设置后,每次中断。然而它不能被内完成 中断服务程序本身,因为这可能会损害看门狗的安全功能 系统复位模式。如果中断之前,下一个超时不执行,系统复位 将被应用。 注:1。WDTON 熔丝设置为“0”表示已编程, “1”表示未编程。 ?位 4 - WDCE:看门狗修改使能 该位用于定时序列改变 WDE 与预分频位。要清除 WDE 位, 和/或改变预分频位,WDCE 必须设置。 一旦写入一个,硬件将在四个时钟周期 WDCE 清零。 ?位 3 - WDE:看门狗系统复位使能 WDE 被 WDRF 在 MCUSR 寄存器。这意味着,WDE 时 WDRF 总是设置

设定。要清除 WDE,WDRF 必须先清除。此功能可以确保在多种条件重置 引起故障和安全启动失败后。 ?第 5 位,2..0 - WDP3..0:看门狗定时器预分频器 3,2,1 和 0 该 WDP3..0 位决定看门狗定时器运行时,看门狗定时器预分频。 不同的预分频值及其对应的超时周期显示在 表 10-2 第 55 页。 表 10-1。看门狗定时器配置 WDTON(1)超时 WDE WDIE 模式操作 100 无停止 101 中断模式中断 110 系统复位模式复位 111 中断和系统复位 模式 中断,然后进入系统 复位模式 0 X X 系统复位模式复位 表 10-2。看门狗定时器预分频选择 WDP3 WDP2 WDP1 WDP0 看门狗振荡器的数 周期 典型的超时时 VCC=5.0V 0 0 0 02K(2048)的周期 16 毫秒 00014K(4096)周期 32 毫秒 00108K(8192)的周期为 64 ms 001116K(16384)周期 0.125? 010032K(32768)周期 0.25 秒 01 0 164K(65536)周期 0.5 秒 0110128K(131072)周期 1.0 秒 56 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 0111256K(262144)周期 2.0 秒 1000512K(524288)周期 4.0 秒 10011024K(1048576)周期 8.0 秒 1010 版权所有 1011 1100 1101 1110 1111 表 10-2。看门狗定时器预分频选择(续) WDP3 WDP2 WDP1 WDP0

看门狗振荡器的数 周期 典型的超时时 VCC=5.0V 57 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 11 中断 本节介绍了特定 ficsof 中断处理中进行 ATMEGA48PA/88PA/168PA/328P。对于 AVR 的中断处理的一般说明,请参阅 第 14 页上的“复位和中断处理” 。 在 ATMEGA48PA,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P 中断向量 大致相同,但有以下不同之处: ?每个中断向量占据 ATMEGA168PA 和 ATMEGA328P 两个指令字, 在 ATMEGA48PA 和 ATMEGA88PA 一个指令字。 ?ATMEGA48PA 不具有独立的 Boot Loader 区。在 ATMEGA88PA, ATMEGA168PA 和 ATMEGA328P,复位向量是受熔丝位 BOOTRST,而 中断向量的起始地址是由在 MCUCR 的 IVSEL 位不受影响。 11.1 中断向量 ATMEGA48PA 表 11-1。复位和中断向量 ATMEGA48PA 向量号程序地址中断源中断定义 1 量 0x000 RESET 外部引脚,上电复位,掉电复位和看门狗复位 2×001 INT0 外部中断请求 0 30x002 INT1 外部中断请求 1 40x003 PCINT0 引脚电平变化中断请求 0 5 为 0x004 PCINT1 引脚电平变化中断请求 1 60x005 结合使用 PCINT2 引脚电平变化中断请求 2 70x006 结合使用 WDT 看门狗超时中断 80x007 TIMER2 COMPA 定时器/计数器比较匹配 A 9 量 0x008 TIMER2 COMPB 定时器/计数器比较匹配 B 100x009 TIMER2 OVF 定时器/计数器溢出 110x00A TIMER1 CAPT 定时器/计数器捕捉事件 120x00B TIMER1 COMPA 定时器/计数器比较匹配 A 13 量 0x00C TIMER1 COMPB 定时器/计数器 1 比较匹配 B 140x00D TIMER1 OVF 定时器/计数器溢出 150x00E TIMER0 COMPA 定时器/计数器 0 比较匹配 A 160x00F TIMER0 COMPB 定时器/计数器 0 比较匹配 B 17 为 0x010 TIMER0 OVF 定时器/计数器溢出 180x011 SPI,STC SPI 串行传输完成 190x012 USART,USART 的 RX 接收完成 200x013 USART,USART UDRE,数据寄存器空 21 量 0x014 USART,USART 的 TX,TX 完成 220x015 ADC ADC 转换完成 230×016 EE 就绪 EEPROM 就绪

58 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 最典型的和一般的程序设置的复位和中断向量地址中 ATMEGA48PA 是: 240x017 模拟比较器模拟比较器 25 量 0x018 TWI 两线串行接口 260x019 SPM 就绪存储程序存储器就绪 表 11-1。复位和中断向量 ATMEGA48PA(续) 向量号程序地址中断源中断定义 59 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 11.2 中断向量 ATMEGA88PA 注:1,当熔丝位 BOOTRST 被编程,该设备将跳转到复位的引导加载程序的地址,请参阅 “支持引导装入程序 - 同时读 - 写自编程,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P“277 页。 2,当 MCUCR 的 IVSEL 置位时,中断向量转移到 Boot 区的起始位置。地址 那么每一个中断向量将在该表中加入 Boot 区的起始地址的地址。 表 11-3 页 60 为复位和中断向量的位置的不同组合上 的 BOOTRST IVSEL 设置。如果程序永远不会使能中断时, 中断向量不使用,一般的程序代码可以放置在这些位置。这 同样情况下,如果复位向量是在应用程序区,中断向量位于 引导部分,反之亦然。 表 11-2。复位和中断向量 ATMEGA88PA 向量号 节目 地址(2)中断源中断定义 1 量 0x000(1)RESET 外部引脚,上电复位,掉电复位和看门狗复位 2×001 INT0 外部中断请求 0 30x002 INT1 外部中断请求 1 40x003 PCINT0 引脚电平变化中断请求 0 5 为 0x004 PCINT1 引脚电平变化中断请求 1 60x005 结合使用 PCINT2 引脚电平变化中断请求 2 70x006 结合使用 WDT 看门狗超时中断 80x007 TIMER2 COMPA 定时器/计数器比较匹配 A 9 量 0x008 TIMER2 COMPB 定时器/计数器比较匹配 B 100x009 TIMER2 OVF 定时器/计数器溢出 110x00A TIMER1 CAPT 定时器/计数器捕捉事件 120x00B TIMER1 COMPA 定时器/计数器比较匹配 A 13 量 0x00C TIMER1 COMPB 定时器/计数器 1 比较匹配 B 140x00D TIMER1 OVF 定时器/计数器溢出 150x00E TIMER0 COMPA 定时器/计数器 0 比较匹配 A 160x00F TIMER0 COMPB 定时器/计数器 0 比较匹配 B

17 为 0x010 TIMER0 OVF 定时器/计数器溢出 180x011 SPI,STC SPI 串行传输完成 190x012 USART,USART 的 RX 接收完成 200x013 USART,USART UDRE,数据寄存器空 21 量 0x014 USART,USART 的 TX,TX 完成 220x015 ADC ADC 转换完成 230×016 EE 就绪 EEPROM 就绪 240x017 模拟比较器模拟比较器 25 量 0x018 TWI 两线串行接口 260x019 SPM 就绪存储程序存储器就绪 60 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:1,开机复位地址列于表 26-7289 页上的熔丝位 BOOTRST“1” 表示未编程, “0”编程方法。 最典型的和一般的程序设置的复位和中断向量地址中 ATMEGA88PA 是: 表 11-3。复位和中断向量的位置在 ATMEGA88PA(1) BOOTRST IVSEL 复位地址中断向量起始地址 10 量 0x000×001 1 量 0x000 Boot 区复位地址+0×001 00 Boot 区复位地址 0×001 01 Boot 区复位地址 Boot 区复位地址+0×001 61 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 当熔丝位 BOOTRST 未编程,Boot 区大小设置为 2K 字节, 在 MCUCR 寄存器 IVSEL 置位时所有中断使能之前,最典型, 一般的程序设置为 ATMEGA88PA 的复位和中断向量地址是: 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节,最 典型的和一般的程序设置为复位和中断向量地址 ATMEGA88PA 是: 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节和 IVSEL 在 MCUCR 寄存器位设置任何中断使能之前,最典型和一般 程序设置为 ATMEGA88PA 的复位和中断向量地址是: 62 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 11.3 中断向量 ATMEGA168PA 注:1,当熔丝位 BOOTRST 被编程,该设备将跳转到复位的引导加载程序的地址,请参阅 “支持引导装入程序 - 同时读 - 写自编程,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P“277 页。 2,当 MCUCR 的 IVSEL 置位时,中断向量转移到 Boot 区的起始位置。地址 那么每一个中断向量将在该表中加入 Boot 区的起始地址的地址。

表 11-4。复位和中断向量 ATMEGA168PA VectorNo。 节目 地址(2)中断源中断定义 1 为 0x0000(1)RESET 外部引脚,上电复位,掉电复位和看门狗复位 20×0002 INT0 外部中断请求 0 30x0004 INT1 外部中断请求 1 40x0006 PCINT0 引脚电平变化中断请求 0 50x0008 时 PCINT1 引脚电平变化中断请求 1 60x000A PCINT2 引脚电平变化中断请求 2 70X000C WDT 看门狗超时中断 80x000E TIMER2 COMPA 定时器/计数器比较匹配 A 9×0010 TIMER2 COMPB 定时器/计数器比较匹配 B 100×0012 TIMER2 OVF 定时器/计数器溢出 110x0014 TIMER1 CAPT 定时器/计数器捕捉事件 120x0016 TIMER1 COMPA 定时器/计数器比较匹配 A 130x0018 处 TIMER1 COMPB 定时器/计数器 1 比较匹配 B 140x001A TIMER1 OVF 定时器/计数器溢出 150x001C TIMER0 COMPA 定时器/计数器 0 比较匹配 A 160x001E TIMER0 COMPB 定时器/计数器 0 比较匹配 B 170×0020 TIMER0 OVF 定时器/计数器溢出 180×0022 的 SPI,STC SPI 串行传输完成 190x0024 USART,USART 的 RX 接收完成 200x0026 USART,USART UDRE,数据寄存器空 210x0028 USART,USART 的 TX,TX 完成 220x002A ADC ADC 转换完成 230x002C EE 就绪 EEPROM 就绪 240x002E 模拟比较器模拟比较器 250030 TWI 两线串行接口 260x0032 个 SPM 就绪存储程序存储器就绪 63 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 表 11-5 页 63 为复位和中断向量的位置的不同组合上 的 BOOTRST IVSEL 设置。如果程序永远不会使能中断时, 中断向量不使用,一般的程序代码可以放置在这些位置。这 同样情况下,如果复位向量是在应用程序区,中断向量位于 引导部分,反之亦然。 注:1,开机复位地址列于表 26-7289 页上的熔丝位 BOOTRST“1” 表示未编程, “0”编程方法。 最典型的和一般的程序设置的复位和中断向量地址中 ATMEGA168PA 是: 表 11-5。复位和中断向量的位置在 ATMEGA168PA(1) BOOTRST IVSEL 复位地址中断向量起始地址

10 量 0x0000x002 1 量 0x000 Boot 区复位地址+$ 0002 00 Boot 区复位地址 0x002 01 Boot 区复位地址 Boot 区复位地址+$ 0002 64 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 当熔丝位 BOOTRST 未编程,Boot 区大小设置为 2K 字节, 在 MCUCR 寄存器 IVSEL 置位时所有中断使能之前,最典型, 一般的程序设置为 ATMEGA168PA 的复位和中断向量地址是: 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节,最 典型的和一般的程序设置为复位和中断向量地址 ATMEGA168PA 是: 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节和 IVSEL 在 MCUCR 寄存器位设置任何中断使能之前,最典型和一般 程序设置为 ATMEGA168PA 的复位和中断向量地址是: 65 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 11.4 中断向量 ATMEGA328P 表 11-6。复位和中断向量 ATMEGA328P VectorNo。 节目 地址(2)中断源中断定义 1 为 0x0000(1)RESET 外部引脚,上电复位,掉电复位和看门狗复位 20×0002 INT0 外部中断请求 0 30x0004 INT1 外部中断请求 1 40x0006 PCINT0 引脚电平变化中断请求 0 50x0008 时 PCINT1 引脚电平变化中断请求 1 60x000A PCINT2 引脚电平变化中断请求 2 70X000C WDT 看门狗超时中断 80x000E TIMER2 COMPA 定时器/计数器比较匹配 A 9×0010 TIMER2 COMPB 定时器/计数器比较匹配 B 100×0012 TIMER2 OVF 定时器/计数器溢出 110x0014 TIMER1 CAPT 定时器/计数器捕捉事件 120x0016 TIMER1 COMPA 定时器/计数器比较匹配 A 130x0018 处 TIMER1 COMPB 定时器/计数器 1 比较匹配 B 140x001A TIMER1 OVF 定时器/计数器溢出 150x001C TIMER0 COMPA 定时器/计数器 0 比较匹配 A 160x001E TIMER0 COMPB 定时器/计数器 0 比较匹配 B 170×0020 TIMER0 OVF 定时器/计数器溢出 180×0022 的 SPI,STC SPI 串行传输完成 190x0024 USART,USART 的 RX 接收完成 200x0026 USART,USART UDRE,数据寄存器空

210x0028 USART,USART 的 TX,TX 完成 220x002A ADC ADC 转换完成 66 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:1,当熔丝位 BOOTRST 被编程,该设备将跳转到复位的引导加载程序的地址,请参阅 “支持引导装入程序 - 同时读 - 写自编程,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P“277 页。 2,当 MCUCR 的 IVSEL 置位时,中断向量转移到 Boot 区的起始位置。地址 那么每一个中断向量将在该表中加入 Boot 区的起始地址的地址。 表 11-7 页 66 为复位和中断向量的位置的不同组合上 的 BOOTRST IVSEL 设置。如果程序永远不会使能中断时, 中断向量不使用,一般的程序代码可以放置在这些位置。这 同样情况下,如果复位向量是在应用程序区,中断向量位于 引导部分,反之亦然。 注:1,开机复位地址列于表 26-7289 页上的熔丝位 BOOTRST“1” 表示未编程, “0”编程方法。 最典型的和一般的程序设置的复位和中断向量地址中 ATMEGA328P 是: 230x002C EE 就绪 EEPROM 就绪 240x002E 模拟比较器模拟比较器 250030 TWI 两线串行接口 260x0032 个 SPM 就绪存储程序存储器就绪 表 11-6。复位和中断向量 ATMEGA328P(续) VectorNo。 节目 地址(2)中断源中断定义 表 11-7。复位和中断向量的位置在 ATMEGA328P(1) BOOTRST IVSEL 复位地址中断向量起始地址 10 量 0x0000x002 1 量 0x000 Boot 区复位地址+$ 0002 00 Boot 区复位地址 0x002 01 Boot 区复位地址 Boot 区复位地址+$ 0002 67 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 当熔丝位 BOOTRST 未编程,Boot 区大小设置为 2K 字节, 在 MCUCR 寄存器 IVSEL 置位时所有中断使能之前,最典型, 一般的程序设置为 ATMEGA328P 的复位和中断向量地址是: 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节,最 典型的和一般的程序设置为复位和中断向量地址 ATMEGA328P 是: 68 8161D-AVR-10 月 9 日

ATMEGA48PA/88PA/168PA/328P 当熔丝位 BOOTRST 被编程,Boot 区为 2K 字节和 IVSEL 在 MCUCR 寄存器位设置任何中断使能之前,最典型和一般 程序设置为 ATMEGA328P 的复位和中断向量地址是: 11.5 寄存器描述 11.5.1 移动之间的应用程序和 Boot 空间, ATMEGA88PA, ATMEGA168PA 和 ATMEGA328P 中断 MCU 控制寄存器控制放置中断向量表的。 11.5.2 MCUCR - MCU 控制寄存器 ?位 1 - IVSEL:中断向量选择 当 IVSEL 为(零) ,中断向量位于 Flash 的开始 内存。当该位被置位(1) ,中断向量转移到 Boot 的开始 的闪存加载程序部分。 Boot 区的起始的实际地址确定 由熔丝位 BOOTSZ。请参见“支持引导装入程序 - 同时读 - 写 自编程,ATMEGA88PA,有关详细信息,277 页 ATMEGA168PA 和 ATMEGA328P“。 为了避免中断向量表无意改变,一个特殊的写程序必须遵循 改变 IVSEL 位: à。写中断向量修改使(IVCE)位之一。 湾在四个周期,写入所需的值,同时将零写入到 IVCE IVSEL。 而执行上述序列时中断自动被禁止。中断被禁止 在循环 IVCE 设置,并一直保持禁用状态,直到下面的写入指令后 位 7 6 54 3 210 的 0x35(0x55 写入) - BODS BODSE PUD - - IVSEL IVCE MCUCR 读/写 R R R 读/写 R R 读/写读/写 初始值 0 0 00 0 0 00 69 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P IVSEL。如果 IVSEL 不写,中断保持 4 个时钟周期禁用。在状态中的 I 位 注册不受自动禁用。 注:若中断向量位于 Boot Loader 区,且 Boot 锁定位 BLB02 被编程, 而从应用区执行中断被禁止。若中断向量位于 在应用区和 Boot 锁定位 BLB12 是程序性,时中断是禁止 从 Boot Loader 区执行。请参见“支持引导装入程序 - 阅读 - 在─ 写自编程,ATMEGA88PA,ATMEGA168PA 和 ATMEGA328P“277 页 Boot 锁定位的细节。 ?位 0 - IVCE:中断向量修改使 该 IVCE 位必须写入逻辑 1,使 IVSEL 位的变化。 IVCE 被清除 硬件之后四个周期被写入或当 IVSEL 写。设置 IVCE 位将禁用 中断时,如上述在 IVSEL 描述中解释。请参阅下面的代码示例。 汇编代码例程 C 代码示例 70 8161D-AVR-10 月 9 日

ATMEGA48PA/88PA/168PA/328P 12,外部中断 外部中断通过 INT0 和 INT1 引脚或任何 PCINT23..0 引脚触发。 注意,如果启用,中断将触发即使 INT0 和 INT1 或 PCINT23..0 销 配置为输出。这个特点可以用来产生软件中断的一种方式。该 如果有启用 PCINT23..16 引脚转换引脚电平变化中断 PCI2 将触发。该引脚电平变化 如果有启用 PCINT14..8 引脚转换中断 PCI1 将触发。该引脚电平变化中断 PCI0 如有 PCINT7..0 启用引脚转换将触发。该 PCMSK2,PCMSK1 与 PCMSK0 寄存器 控制哪些引脚有助于引脚电平变化中断。引脚变化中断 PCINT23..0 检测是异步的。这意味着,这些中断可用于 在除空闲模式外的其它休眠模式唤醒的部分还。 该 INT0 和 INT1 中断可以由下降沿,上升沿,或者是低电平触发。这是 建立在规范的外部中断控制寄存器 A - EICRA。 当被启用 INT0 或 INT1 中断和被配置为触发电平,则中断 将触发只要引脚保持低电平。需要注意的是承认上升沿或下降沿 中断 INT0 或 INT1 需要一个 I / O 时钟的存在, “时钟系统说明 他们对 INT0 和 INT1 第 26 页低电平中断分配“检测是异步。 这意味着,这些中断可用于从睡眠模式唤醒的部分还 除空闲模式等。在 I/ O 时钟是停止在睡眠模式下,除了空闲模式。 请注意,如果电平触发中断用于唤醒掉电,所要求的水平 必须保持足够长的时间以使 MCU 完成唤醒触发电平中断。如果 在启动时间,MCU 仍将唤醒,但没有中断结束前的水平消失 将生成。启动时间由 SUT 和熔丝位 CKSEL 描述定义 在“系统时钟及时钟选项”第 26 页。 12.1 引脚电平变化中断时序 的引脚电平变化中断时间的例子如图 12-1 所示。 图 12-1。的引脚电平变化中断时间 CLK PCINT(0) pin_lat pin_sync pcint_in_(0) pcint_syn pcint_setflag PCIF PCINT(0) pin_sync pcint_syn pin_lat DQ LE pcint_setflag PCIF CLK

CLK PCINT(0)在 PCMSK(X) pcint_in_(0)0 点?x 70 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 12,外部中断 外部中断通过 INT0 和 INT1 引脚或任何 PCINT23..0 引脚触发。 注意,如果启用,中断将触发即使 INT0 和 INT1 或 PCINT23..0 销 配置为输出。这个特点可以用来产生软件中断的一种方式。该 如果有启用 PCINT23..16 引脚转换引脚电平变化中断 PCI2 将触发。该引脚电平变化 如果有启用 PCINT14..8 引脚转换中断 PCI1 将触发。该引脚电平变化中断 PCI0 如有 PCINT7..0 启用引脚转换将触发。该 PCMSK2,PCMSK1 与 PCMSK0 寄存器 控制哪些引脚有助于引脚电平变化中断。引脚变化中断 PCINT23..0 检测是异步的。这意味着,这些中断可用于 在除空闲模式外的其它休眠模式唤醒的部分还。 该 INT0 和 INT1 中断可以由下降沿,上升沿,或者是低电平触发。这是 建立在规范的外部中断控制寄存器 A - EICRA。 当被启用 INT0 或 INT1 中断和被配置为触发电平,则中断 将触发只要引脚保持低电平。需要注意的是承认上升沿或下降沿 中断 INT0 或 INT1 需要一个 I / O 时钟的存在, “时钟系统说明 他们对 INT0 和 INT1 第 26 页低电平中断分配“检测是异步。 这意味着,这些中断可用于从睡眠模式唤醒的部分还 除空闲模式等。在 I/ O 时钟是停止在睡眠模式下,除了空闲模式。 请注意,如果电平触发中断用于唤醒掉电,所要求的水平 必须保持足够长的时间以使 MCU 完成唤醒触发电平中断。如果 在启动时间,MCU 仍将唤醒,但没有中断结束前的水平消失 将生成。启动时间由 SUT 和熔丝位 CKSEL 描述定义 在“系统时钟及时钟选项”第 26 页。 12.1 引脚电平变化中断时序 的引脚电平变化中断时间的例子如图 12-1 所示。 图 12-1。的引脚电平变化中断时间 CLK PCINT(0) pin_lat pin_sync pcint_in_(0) pcint_syn pcint_setflag PCIF PCINT(0) pin_sync pcint_syn

pin_lat DQ LE pcint_setflag PCIF CLK CLK PCINT(0)在 PCMSK(X) pcint_in_(0)0 点?x 71 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 12.2 寄存器描述 12.2.1 EICRA - 外部中断控制寄存器 A 外部中断控制寄存器包含控制位中断控制感。 ?位 7..4 - Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?第 3 位,2 - ISC11,ISC10:中断触发方式控制 1 位 1 和位 0 外部中断 1 由引脚 INT1 激活,如果 SREG 寄存器的 I 标志位和相应 中断屏蔽设置。在激活的水平和边缘外部 INT1 引脚 中断在表 12-1 中定义。在 INT1 引脚的值检测采样前 边缘。如果边或中断切换选择,那么持续时间大于一个时钟周期的脉冲将 产生一个中断。更短的脉冲则不能保证产生一个中断。如果低的水平 中断被选中,低电平必须保持到完成当前执行的 指令以产生一个中断。 ?位 1,0 - ISC01,ISC00:中断触发方式控制 0 位 1 和位 0 外部中断 0 由引脚 INT0 被激活,如果 SREG 寄存器的 I 标志位和相应 中断屏蔽设置。在激活的水平和边缘外部 INT0 引脚 中断在表 12-2 中定义。 INT0 引脚上的值检测采样前 边缘。如果边或中断切换选择,那么持续时间大于一个时钟周期的脉冲将 产生一个中断。更短的脉冲则不能保证产生一个中断。如果低的水平 中断被选中,低电平必须保持到完成当前执行的 指令以产生一个中断。 位 7 6 54 3 210 (0×69) - - - - ISC11 ISC10 ISC01 ISC00 EICRA 读/写 R R R R 读/写读/写读/写读/写 初始值 0 0 00 0 0 00 表 12-1。中断 1 检测控制 ISC11 ISC10 说明 00 INT1 的低电平产生一个中断请求。 01 INT1 上任何逻辑的改变会产生一个中断请求。 10 INT1 的下降沿产生一个中断请求。

11 INT1 的上升沿产生一个中断请求。 表 12-2。中断 0 检测控制 ISC01 ISC00 说明 00 INT0 的水平低会产生一个中断请求。 01 INT0 上任何逻辑的改变会产生一个中断请求。 10 INT0 的下降沿产生一个中断请求。 1 INT0 的上升沿产生一个中断请求。 72 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 12.2.2 EIMSK - 外部中断屏蔽寄存器 ?位 7..2 - Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?位 1 - INT1:外部中断请求 1 启用 当 INT1 位设置(1)和状态寄存器(SREG)的 I 位被置位(1) ,外部 引脚中断使能。中断检测控制 1 位 1/0 在(ISC11 和 ISC10) 外部中断控制寄存器 A(EICRA)定义外部中断是否被激活 上升和/或下降的 INT1 引脚或电平触发的边缘。引脚上的活动将导致 中断即使 INT1 配置为输出请求。外部的相应的中断 中断请求 1 从 INT1 中断向量执行。 ?位 0 - INT0:外部中断请求 0 启用 当 INT0 为(1)和状态寄存器(SREG)的 I 位被置位(1) ,外部 引脚中断使能。中断检测控制 0 位 1/0 在(ISC01 与 ISC00) 外部中断控制寄存器 A(EICRA)定义外部中断是否被激活 上升和/或下降的 INT0 引脚或电平触发的边缘。引脚上的活动将导致 中断,即使 INT0 配置为输出请求。外部的相应的中断 中断请求 0 从 INT0 的中断向量执行。 12.2.3 EIFR - 外部中断标志寄存器 ?位 7..2 - Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?位 1 - INTF1:外部中断标志 1 当 INT1 引脚的边缘或逻辑变化触发中断请求,INTF1 成为集 (1) 。如果 SREG 和在 EIMSK 的 INT1 位的 I 位被设置(1) ,MCU 将跳转到相应的 中断向量。执行中断服务程序之后该标志被清除。 另外,该标志可以通过写 1 来清零。该标志总是被清零 当 INT1 配置为电平中断。 ?位 0 - INTF0:外部中断标志 0 当 INT0 引脚上的边缘或逻辑变化触发中断请求,INTF0 成为集 (1) 。如果 SREG 和在 EIMSK 的 INT0 位的 I 位被设置(1) ,MCU 将跳转到相应的 中断向量。执行中断服务程序之后该标志被清除。 另外,该标志可以通过写 1 来清零。该标志总是被清零 当 INT0 配置为电平中断。

位 7 6 54 3 210 0x1D(0x3D 之间) - - - - - - INT1 INT0 EIMSK 读/写 R R R R R R 读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 为 0x1C(为 0x3C) - - - - - - INTF1 INTF0 EIFR 读/写 R R R R R R 读/写读/写 初始值 0 0 00 0 0 00 73 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 12.2.4 PCICR - 引脚电平变化中断控制寄存器 ?位 7..3 - Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?第 2 位 - PCIE2:引脚电平变化中断使能 2 当 PCIE2 位设置(1)和状态寄存器(SREG)的 I 位被置位(1) ,针 变化中断 2 启用。在任何启用 PCINT23..16 引脚的任何变化将导致中断。 的引脚电平变化中断请求相应的中断是由 PCI2 执行 中断向量。 PCINT23..16 引脚由 PCMSK2 寄存器单独使能。 ?位 1 - PCIE1:引脚电平变化中断使能 1 当 PCIE1 位设置(1)和状态寄存器(SREG)的 I 位被置位(1) ,针 变化中断 1 启用。在任何启用 PCINT14..8 引脚的任何变化将导致中断。 的引脚电平变化中断请求相应的中断从 PCI1 执行 中断向量。 PCINT14..8 引脚由 PCMSK1 寄存器单独使能。 ?位 0 - PCIE0:引脚电平变化中断使能 0 当 PCIE0 位设置(1)和状态寄存器(SREG)的 I 位被置位(1) ,针 变化中断 0 被启用。在任何启用 PCINT7..0 引脚的任何变化将导致中断。 的引脚电平变化中断请求相应的中断从 PCI0 中断执行 向量。 PCINT7..0 引脚由 PCMSK0 寄存器单独使能。 12.2.5 PCIFR - 引脚电平变化中断标志寄存器 ?位 7..3 - Res:保留位 这些位未使用的位在 ATMEGA48PA/88PA/168PA/328P,而读操作 零。 ?第 2 位 - PCIF2:引脚电平变化中断标志 2 当任何 PCINT23..16 引脚上的逻辑变化触发中断请求,PCIF2 被置 (1) 。如果 SREG 的位 I 和 PCIE2 位在 PCICR 设置(1) ,MCU 将跳转到 相应的中断向量。执行中断服务程序之后该标志被清除。另外, 该标志可以通过写 1 来清零。 ?位 1 - PCIF1:引脚电平变化中断标志 1 当任何 PCINT14..8 引脚上的逻辑变化触发中断请求,PCIF1 被置 (1) 。如果 SREG 的位 I 以及 PCIE1 位在 PCICR 设置(1) ,MCU 将跳转到 相应的中断向量。执行中断服务程序之后该标志被清除。另外, 该标志可以通过写 1 来清零。

位 7 6 54 3 210 (0x68)中 - - - - - PCIE2 PCIE1 PCIE0 PCICR 读取/写入 R R R R R 读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0X1B(0x3B) - - - - - PCIF2 PCIF1 PCIF0 PCIFR 读取/写入 R R R R R 读/写读/写读/写 初始值 0 0 00 0 0 00 74 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P ?位 0 - PCIF0:引脚电平变化中断标志 0 当任何 PCINT7..0 引脚上的逻辑变化触发中断请求,PCIF0 被置 (1) 。如果 SREG 的位 I 和 PCIE0 位在 PCICR 设置(1) ,MCU 将跳转到 相应的中断向量。执行中断服务程序之后该标志被清除。另外, 该标志可以通过写 1 来清零。 12.2.6 PCMSK2 - 引脚电平变化屏蔽寄存器 2 ?位 7..0 - PCINT23..16:引脚电平变化使能屏蔽 23..16 每个 PCINT23..16 位选择相应的 I/ O 引脚电平变化中断是否使能 引脚。如果 PCINT23..16 设置和 PCICR 的 PCIE2 位被置位,引脚电平变化中断使能上 相应的 I / O 引脚。如果 PCINT23..16 被清除,引脚电平变化对相应的中断 I / O 引脚被禁用。 12.2.7 PCMSK1 - 引脚电平变化屏蔽寄存器 1 ?位 7 - Res:保留位 该位是在 ATMEGA48PA/88PA/168PA/328P 未使用的位,并将值为零。 ?位 6..0 - PCINT14..8:引脚电平变化使能屏蔽 14..8 每个 PCINT14..8 位选择相应的 I/ O 引脚电平变化中断是否使能 引脚。如果 PCINT14..8 设置和 PCICR 的 PCIE1 位被置位,引脚电平变化中断使能上 相应的 I / O 引脚。如果 PCINT14..8 被清除,引脚电平变化对相应的中断 I / O 引脚被禁用。 12.2.8 PCMSK0 - 引脚电平变化屏蔽寄存器 0 ?位 7..0 - PCINT7..0:引脚电平变化使能屏蔽 7..0 每个 PCINT7..0 位选择相应的 I / O 引脚电平变化中断是否使能 引脚。如果 PCINT7..0 与在 PCICR 的 PCIE0 位被置位,引脚电平变化中断在启用 相应的 I/ O 引脚。如果 PCINT7..0 被清除,引脚电平变化相应的 I/ O 引脚中断 被禁用。 位 7 6 54 3 210 ( 0x6D ) PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16 PCMSK2 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 (0x6C) - PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9 PCINT8 PCMSK1 读取/写入 R 读/写读/写读/写读/写读/写读/写读/写

初始值 0 0 00 0 0 00 位 7 6 54 3 210 (0x6B)PCINT7 PCINT6 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK0 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 75 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 13,I / O 端口 13.1 概述 所有的 AVR 端口都具有真正的读 - 修改 - 写功能作为通用数字 I / O 口使用时。 这意味着,一个端口引脚的方向可以不无意改变而改变 任何其他引脚与 SBI 和 CBI 指令的方向。改变时,同样适用 如果配置为驱动的价值(如果配置为输出)或启用/禁用的上拉电阻( 输入) 。每个输出缓冲器具有对高汇和源对称的驱动特性 能力。该引脚驱动器强大到足以直接驱动 LED。所有的端口引脚都 可选的上拉电阻与电源电压不变的阻力。所有 I / O 引脚有 保护二极管与 VCC 和地相连,如图 13-1 所示。参见“电气特性” 对完整的参数列表 313 页。 图 13-1。 I / O 引脚等效原理 所有的寄存器和位在本节以通用的形式。小写的“x”表示 编号信端口,和一个小写的“n”代表位的序号。但是, 使用寄存器或位在写程序的时候,精确的表格必须使用。例如, PORTB3 对位无。 3 端口 B,这里记录一般为 PORTxn。物理 I / O 寄存器 与位 92 页上列出的“注册说明” 。 三个 I / O 存储器地址分配给每个端口,分别用于数据寄存器 - 读 PORTx,数据方向寄存器 - DDRx 和端口输入引脚 - PINx。端口输入引脚 I / O 位置为只读,而数据寄存器和数据方向寄存器读/写。 然而,写 1 在 PINx 寄存器位,将导致相应的切换 在数据寄存器位。此外,拉禁用 - 在 MCUCR PUD 位禁用 拉功能在所有端口引脚的设置时。 使用 I / O 端口作为通用数字 I / O 在“端口作为通用数字 I/ O”的页面描述 76。大多数端口引脚复用的复用功能的外设功能 设备。怎么每个复用功能干扰端口引脚在“端口的描述 第 80 页上的功能“指的是单个模块部分的替代的完整说明 功能。 CPIN 逻辑 RPU 参见图 “通用数字 I/ O”的 详细 PXN 76

8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 需要注意的是,打开一些端口引脚的复用功能,不影响使用 其他引脚用于通用数字 I/ O。 13.2 端口作为通用数字 I/ O 端口是双向 I/ O 端口可选的内部上拉电阻。图 13-2 显示了一个功能 一个 I / O 端口引脚的说明,在这里统称为 PXN。 图 13-2。通用数字 I / O(1) 注:1,WRX,WPX,WDX,RRX,RPx 和 RDX 是常见的同一个端口的所有引脚。 clkI / O 驱动, SLEEP 和 PUD 则对所有的端口。 13.2.1 配置引脚 每个端口引脚都具有三个寄存器位:DDxn,PORTxn 和 PINxn。如图 11 的“寄存器 说明“第 92 页中,不论如何配置 DDxn 位在 DDRX I / O 地址访问时,PORTxn 如何位 在读 PORTx I / O 地址,并于 PINxn 位在品克斯 I / O 地址。 在 DDxn 用来选择引脚的方向。如果不论如何配置 DDxn 写入逻辑 1, PXN 被配置为输出引脚。如果不论如何配置 DDxn 写入逻辑零,Pxn 配置为输入 引脚。 如果 PORTxn 为 1 时,引脚配置为输入引脚,上拉电阻 激活。切换的上拉电阻器关闭,PORTxn 如何已被写入逻辑零或销具有 被配置为输出引脚。该引脚为三态时,复位过程中, 即使没有时钟在运行。 CLK 的 RPx RRX RDX WDX PUD 同步器 WDX:写 DDRX WRX:写的 PORTx RRX:读 PORTx 寄存器 的 RPx:阅读的 PORTx 密码 PUD:拉禁用 clkI / O 驱动:I / O 时钟 RDX:读 DDRX ? ? Q Q 复位 复位 Q DQ

Q QD CLR PORTxn 如何 Q QD CLR 不论如何配置 DDxn PINxn 睡眠 睡眠:睡眠控制 PXN I/O WPX 0 1 WRX WPX:写寄存器品克斯 77 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 如果 PORTxn 为 1 时,引脚配置为输出引脚,端口引脚驱动 高(1) 。如果 PORTxn 为零点时,引脚配置为输出引脚,端口 引脚驱动为低电平(零) 。 13.2.2 切换引脚 写 1 到 PINxn 切换 PORTxn 如何的价值,独立于 DDRxn 的价值。 请注意,SBI 指令可以用来切换在一个港口一个单独的位。 13.2.3 切换输入和输出之间 当三态之间切换({不论如何配置 DDxn,PORTxn 如何}=0b00 的)和输出高电平({不论如 何配置 DDxn,PORTxn 如何} =0b11) ,一种中间状态,要么拉启用{不论如何配置 DDxn,PORTxn 如何}=0B01)或输出 低({不论如何配置 DDxn,PORTxn 如何}=为 0b10)必须发生。通常情况下,上拉使能是 完全可以接受的, 作为一个高阻抗环境不会注意到高的强之间的区别 驱动器和一个上拉。如果不是这种情况下,在 MCUCR 寄存器的 PUD 位可以被设置为禁止 所有上拉中的所有端口。 上拉而输出低电平输入之间切换也有同样的问题。用户 必须使用三态({不论如何配置 DDxn,PORTxn 如何}=0b00 的)或输出高电平({不论如何 配置 DDxn,PORTxn 如何} =0b10)作为中间步骤。 表 13-1 总结了引脚值的控制信号。 13.2.4 读取引脚值 独立的数据不论如何配置 DDxn 的设置,该端口引脚可以通过读取 PINxn 寄存器的位。如图 13-2,PINxn 寄存器的各个位与其前面的锁存器组成

一个同步器。这是为了避免亚稳态如果物理引脚变化值 内部时钟的边缘,但靠近它引入了延迟。图 13-3 所示的时序图 同步时读取引脚电。的最大值和 最小传输延迟分别为 tpd,max 和 tpd,分别分。 表 13-1。端口引脚配置 不论如何配置 DDxn PORTxn 如何 PUD (在 MCUCR)的 I / O 上拉评论 00 X 输入无三态(高阻) 010 输入 Yes PXN 将输出电流,如果转。拉低。 011 输入 No 高阻态(高阻) 10 X 输出 No 输出低电平(灌) 11 X 输出 No 输出高电平(源) 78 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 图 13-3。同步读取引脚电值时, 考虑系统时钟的第一个下降沿之后起始的时钟周期。锁存器 被关闭时时钟为低,并进入透明当时钟为高电平时,由所指示的 在“SYNC LATCH”信号的阴影区。的信号值被锁存时,系统时钟 变低。它移入 PINxn 寄存器的,在随后的时钟上升沿。如图所示 由两个箭头 tpd,max 和 TPD,最小,引脚上的信号转换将被推迟 半之间和 1.5 系统时钟周期取决于断言的时间。 当读取回来指派的软件销值,NOP 指令必须插入所示 如图 13-4 所示。 OUT 指令设置在正面边缘的“同步锁存”信号 时钟。在这种情况下,通过同步器的延迟时间 tpd 为一个系统时钟周期。 图 13-4。同步读取一个软件指定的 PIN 值时, 下面的代码示例演示了如何置位端口 B 的引脚 0 和 1,2 和 3,并定义 端口引脚 4 到 7 为输入分配给端口引脚 6 和 7 所得到的销上拉 值被读回来,但如先前所讨论的,NOP 指令是包含能够 读回最近分配给某些管脚的值。 XXX 在 R17,品克斯 为 0x000xFF 的 说明 SYNC LATCH PINxn R17 XXX 系统 CLK 吨 PD,最大 TPD,分 出的 PORTx,在 R17 R16 NOP,品克斯 为 0xFF 为 0x000xFF 的

系统 CLK R16 说明 SYNC LATCH PINxn R17 吨 PD 79 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 注:1,在汇编程序中,两个临时寄存器使用,以尽量减少从上拉的时候 被设置在针 0,1,6 和 7,直到方向位设置正确,定义位 2 和 3 为低,且重新定义为 0 和 1 为强驱动。 13.2.5 数字输入使能和睡眠模式 如图 13-2,数字输入信号可以被钳位到地的输入 施密特触发器。在图中的 SLEEP 信号由 MCU 休眠控制器在 掉电模式,省电模式,待机模式,以避免高功耗,如果 某些输入信号悬空或模拟信号电平接近 VCC /2。 SLEEP 信号无效外部中断引脚端口引脚。如果外部中断 请求未启用,SLEEP 信号仍然有效,这些引脚。睡眠也受到不同覆盖 80 页的“端口的第二功能”中描述的其他复用功能。 如果一个逻辑高电平( “1” )是存在于构成为一个异步外部中断引脚 “中断上升沿,下降沿,或任何引脚的逻辑变化” ,而外部中断 从恢复时未启用,相应的外部中断标志将被设置 上述休眠模式,因为在这些睡眠模式钳位到 逻辑的变化。 13.2.6 未连接引脚 如果有引脚未被使用,建议,以确保这些引脚有一个定义的水平。即使 虽然大多数数字输入被禁用,在深度睡眠模式,如上文所述,悬空 汇编代码例程(1) C 代码示例 80 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 应避免荷兰国际集团的输入,其中该数字以减少在所有其他模式的电流消耗 输入使能(复位,工作模式和空闲模式) 。 确保已定义的未使用引脚的电平最简单的方法是使能内部上拉电阻。 在这种情况下,上拉将复位过程中被禁用。如果复位时的功耗 重要的是,建议使用外部上拉或下拉。连接未使用的引脚 直接到 VCC 或 GND 不建议,因为这可能会导致过大的电流,如果该引脚为 偶然作为输出。 13.3 备用端口功能 大多数端口引脚都具有第二功能除了一般的数字 I/ O 操作。图 13-5 展示了如何从简化图 13-276 页上的端口引脚控制信号可以覆盖

通过复用功能。被重载的信号不会出现在所有的端口引脚,但 图可以看作是适用于所有端口引脚的一般说明,在 AVR 单片机 家庭。 图 13-5。备用端口功能(1) 注:1,WRX,WPX,WDX,RRX,RPx 和 RDX 是常见的同一个端口的所有引脚。 clkI / O 驱动, SLEEP 和 PUD 则对所有的端口。所有其他信号只对某一个引脚。 CLK 的 RPx RRX WRX RDX WDX PUD 同步器 WDX:写 DDRX WRX:写的 PORTx RRX:读 PORTx 寄存器 的 RPx:阅读的 PORTx 密码 PUD:拉禁用 clkI / O 驱动:I / O 时钟 RDX:读 DDRX ? ? Q Q 套装 CLR 0 1 0 1 0 1 DIxn AIOxn DIEOExn PVOVxn PVOExn DDOVxn DDOExn PUOExn PUOVxn PUOExn:PXN 拉重载使

PUOVxn:PXN 拉倍率值 DDOExn:PXN 数据方向重载使 DDOVxn:PXN 数据方向重载值 PVOExn:PXN 端口值重载使 PVOVxn:PXN 端口值倍率值 DIxn:数字输入引脚氮对的 PORTx AIOxn:模拟输入/输出引脚氮对的 PORTx 复位 复位 Q QD CLR Q QD CLR Q DQ CLR PINxn PORTxn 如何 不论如何配置 DDxn 0 1 DIEOVxn 睡眠 DIEOExn:PXN 数字输入,使能覆盖使 DIEOVxn:PXN 数字输入使能覆盖值 睡眠:睡眠控制 PXN I/O 0 1 PTOExn PTOExn:PXN,端口切换重载使 WPX:写品克斯 WPX 81 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 表 13-2 总结了重载信号的功能。从图中的引脚和端口索引 13-5 第 80 页上没有后续表中所示。压倒一切的信号 在具有第二功能模块内部产生。 下面的几小节将简单地说明复用功能的每个端口,以及相关的 重载信号的复用功能。请参考第二功能说明进一步

详细信息。 表 13-2。重载信号的一般说明复用功能 信号名称全称说明 PUOE 上拉改写 启用 如果该信号被设置时,上拉使能由 PUOV 控制 信号。如果这个信号被清除,上拉时启用 {不论如何配置 DDxn,PORTxn 如何,PUD}=0b010。 PUOV 上拉改写 价值 如果 PUOE 置位,上拉使能/禁用时 PUOV 上是 设置不管 DDxn,PORTxn 如何的设置/清除, 和 PUD 寄存器位。 DDOE 数据方向 覆盖启用 如果这个信号置位,则输出驱动使被控制 DDOV 信号。如果此信号清零,输出驱动器 由 DDxn 寄存器使能。 DDOV 数据方向 倍率值 若 DDOE 设置,输出驱动使能/禁用时 DDOV 置位/清零,而不管 DDxn 的设定 寄存器位。 PVOE 端口数据 覆盖启用 如果这个信号置位,且输出驱动使能,端口 值由 PVOV 控制。若 PVOE 清零, 输出驱动使能,端口值是由控制 端口寄存器位。 PVOV 端口数据 倍率值 若 PVOE 设置,端口值设置为 PVOV,而不管 的端口寄存器设置位。 PTOE 端口信号切换 覆盖启用如果 PTOE 置,端口寄存器位反转。 DIEOE 数字输入 使能覆盖 启用 如果该位被置位,数字输入使能由控制 DIEOV 信号。如果此信号清零,数字输入使能 由 MCU 的状态(正常模式,睡眠模式)来确定。 DIEOV 数字输入

使能覆盖 价值 如果 DIEOE 置位,数字输入使能/禁用时 DIEOV 置位/清零,不管 MCU 的状态如何(正常 模式,睡眠模式) 。 DI 数字量输入 这是数字输入为备用功能。在该图中, 信号被连接到施密特触发器的输出而 前同步。除非数字输入作为 时钟源,否则第二功能使用模块的 自己的同步。 AIO 模拟 输入/输出 这是输入/输出的模拟/从备用功能。该 信号被直接连接到焊盘,并且可以双向使用。 82 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 端口 B13.3.1 备用功能 端口的引脚与复用功能如表 13-3 所示。 第二功能配置如下: ?XTAL2/ TOSC2/ PCINT7 - 端口 B,Bit7 XTAL2:芯片时钟振荡器引脚 2 作为时钟引脚晶振或低频 晶体振荡器。当作为时钟引脚使用,该引脚不能作为 I/ O 引脚。 TOSC2:定时器振荡器引脚 2 仅在使用内部标定 RC 振荡器作为芯片 时钟源,且异步定时器由 ASSR 寄存器的设置是否正确启用。当 ASSR 的 AS2 位设置(1) ,并通过 EXCLK 位清零(零) ,使异步时钟。 使用晶振定时器/计数器的,PB7 不与端口断开,并 成为振荡器放大器的反相输出。在这种模式下,晶体振荡器连接 该引脚,该引脚不能作为 I/ O 引脚。 PCINT7:引脚电平变化中断源 7 PB7 可以作为外部中断源。 如果 PB7 作为时钟引脚,DDB7,PORTB7 和 PINB7 都将读为 0。 ?XTAL1/ TOSC1/ PCINT6 - 端口 B,Bit6 XTAL1:芯片时钟振荡器引脚 1 用于除内部标定 RC 所有的芯片的时钟源 振荡器。当作为时钟引脚使用,该引脚不能作为 I/ O 引脚。 TOSC1:定时器振荡器引脚 1 仅在使用内部标定 RC 振荡器作为芯片 时钟源,且异步定时器由 ASSR 寄存器的设置是否正确启用。当 表 13-3。 B 端口引脚复用功能 端口引脚复用功能 PB7 XTAL2(芯片时钟振荡器引脚 2) TOSC2(定时器振荡器引脚 2) PCINT7(引脚电平变化中断 7) PB6

XTAL1(芯片时钟振荡器引脚 1 或外部时钟输入) TOSC1(定时振荡器引脚 1) PCINT6(引脚电平变化中断 6) PB5 SCK(SPI 总线主时钟输入) PCINT5(引脚电平变化中断 5) PB4 MISO(SPI 总线的主机输入/从机输出) PCINT4(引脚电平变化中断 4) PB3 MOSI(SPI 总线的主机输出/从机输入) OC2A(定时器/计数器输出比较匹配 A 输出) PCINT3(引脚电平变化中断 3) PB2 SS(SPI 总线主从选择) OC1B(定时器/计数器输出比较匹配 B 输出) PCINT2(引脚电平变化中断 2) PB1 OC1A(定时器/计数器输出比较匹配 A 输出) PCINT1(引脚电平变化中断 1) PB0 ICP1(定时器/计数器输入捕捉输入) CLKO(系统时钟分频输出) PCINT0(引脚电平变化中断 0) 83 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P ASSR 的 AS2 位设置(1) ,使定时器/计数器 2 的异步时钟 PB6 断开 从端口,并且变成反向振荡放大器的输入端。在这 模式下,晶体振荡器连接到该引脚,该引脚不能作为 I/ O 引脚。 PCINT6:引脚电平变化中断源 6 PB6 可以作为外部中断源。 如果 PB6 作为时钟引脚,DDB6,PORTB6 和 PINB6 都将读为 0。 ?SCK/ PCINT5 - 端口 B,Bit5 SCK:主时钟输出,从机时钟输入引脚 SPI 通道。当 SPI 使能为 从这个引脚不管 DDB5 的设置配置为输入。当 SPI 启用作为一个法师,这个引脚的数据方向由 DDB5 来控制。当引脚被强制 由 SPI 为输入时,上拉仍然可以由 PORTB5 位控制。 PCINT5:引脚电平变化中断源 5 PB5 可以作为外部中断源。 ?MISO/ PCINT4 - 端口 B,Bit4 MISO:主数据输入,从机数据输出 SPI 通道。当 SPI 使能为 师父,这个引脚被 DDB4 的设置配置为输入。当 SPI 启用为从属,这个引脚的数据方向由 DDB4 控制。当引脚被强制 由 SPI 为输入时,上拉仍然可以由 PORTB4 位控制。 PCINT4:引脚电平变化中断源 4 PB4 可以作为外部中断源。 ?MOSI/ OC2/ PCINT3 - 端口 B,Bit3 MOSI:SPI 主数据输出,从机输入数据 SPI 通道。当 SPI 使能为 从这个引脚不管 DDB3 的设置配置为输入。当 SPI

启用作为一个法师,这个引脚的数据方向由 DDB3 控制。当引脚被强制 由 SPI 为输入时,上拉仍然可以由 PORTB3 位控制。 OC2,输出比较匹配输出:PB3 引脚可作为对外部输出 定时器/计数器比较匹配。 PB3 引脚必须被配置为输出(DDB3 集 (1) ) ,以这个功能。 OC2 引脚作为输出引脚 PWM 模式 功能。 PCINT3:引脚电平变化中断源 3。PB3 引脚可作为外部中断源。 ?SS/ OC1B/ PCINT2 - 端口 B,Bit2 SS:从机选择输入。当 SPI 使能为奴隶,这个引脚配置为输入 无论 DDB2 的设置。作为一个从机,则当该引脚被拉低激活。 当 SPI 使能作为一个法师,这个引脚的数据方向由 DDB2 控制。当 该引脚被 SPI 强制为输入时,上拉仍然可以由 PORTB2 位来控制。 OC1B,输出比较匹配输出:PB2 引脚可以作为对外部输出 定时器/计数器 1 比较匹配 B 的 PB2 引脚必须被配置为输出(DDB2 集 (1) ) ,以这个功能。 OC1B 引脚作为输出引脚的 PWM 模式 功能。 PCINT2:引脚电平变化中断源 2 PB2 引脚作为外部中断源。 ?OC1A/ PCINT1 - 端口 B,Bit1 OC1A,输出比较匹配输出:PB1 引脚可以作为对外部输出 定时器/计数器 1 比较匹配 A 的 PB1 引脚必须配置为输出(DDB1 集 84 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P (1) ) ,以这个功能。 OC1A 引脚作为输出引脚的 PWM 模式 功能。 PCINT1:引脚电平变化中断源 1 PB1 引脚作为外部中断源。 ?ICP1/ CLKO/ PCINT0 - 端口 B,Bit0 ICP1,输入捕捉引脚:PB0 可以作为输入捕捉引脚作为定时器/计数器。 CLKO,系统时钟分频:将分为系统时钟可以在 PB0 引脚输出。该 分为系统时钟输出,如果 CKOUT 熔丝编程,无论 PORTB0 和 DDB0 设置。这也将是复位时输出。 PCINT0:引脚电平变化中断源 0 PB0 可以作为外部中断源。 表 13-4 和表 13-585 页涉及的端口 B 的第二功能,以压倒一切 在图 13-5 所示的第 80 页的 SPI MSTR INPUT 和 SPI 从机输出信号的构成 MISO 信号,而 MOSI 分为 SPI MSTR 输出和 SPI 从机输入。 注:1。INTRC 意味着内部 RC 振荡器中的一个被选择(通过 CKSEL 熔丝) , EXTCK 意味着选择外部时钟(由熔丝位 CKSEL) 表 13-4。在 PB7..PB4 第二功能重载信号 信号 产品名称 PB7/ XTAL2/ TOSC2/ PCINT7(1) PB6 XTAL1 // TOSC1/ PCINT6(1)

PB5/ SCK/ PCINT5 PB4/ MISO/ PCINT4 PUOE INTRC?EXTCK+ AS2 INTRC+ AS2?SPE 固相萃取 MSTR?MSTR PUOV 上 00 PORTB5?PUD PORTB4?PUD DDOE INTRC?EXTCK+ AS2 INTRC+ AS2?SPE 固相萃取 MSTR?MSTR DDOV0 0 0 0 PVOE00?SPE 固相萃取 MSTR?MSTR PVOV00 SCK 输出 SPI 从 输出 DIEOE INTRC?EXTCK+ AS2+ PCINT7? PCIE0 INTRC+ AS2+ PCINT6?PCIE0 PCINT5?PCIE0 PCINT4?PCIE0 DIEOV(INTRC+ EXTCK) ? AS2 INTRC?AS211 DI PCINT7 输入 PCINT6 输入 PCINT5 输入 SCK 输入 PCINT4 输入 SPI MSTR 输入 AIO 振荡器输出振荡器/时钟 输入 - 85 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 端口 C 的 13.3.2 备用功能 端口 C 引脚复用功能如表 13-6 所示。 表 13-5。在 PB3..PB0 第二功能重载信号 信号 产品名称 PB3/ MOSI/ OC2/ PCINT3 PB2/不锈钢/ OC1B/ PCINT2 PB1/ OC1A/ PCINT1 PB0/ ICP1/ PCINT0

PUOE?SPE 固相萃取 MSTR?MSTR00 PUOV 上 PORTB3?PUD PORTB2?PUD00 DDOE?SPE 固相萃取 MSTR?MSTR00 DDOV0 0 0 0 PVOE SPE?MSTR+ OC2A 启用 OC1B 启用 OC1A ENABLE 0 PVOV SPI MSTR 输出 + OC2A OC1B OC1A0 DIEOE PCINT3?PCIE0 PCINT2?PCIE0 PCINT1?PCIE0 PCINT0?PCIE0 DIEOV1 1 1 1 DI PCINT3 输入 SPI 从机输入 PCINT2 输入 SPI 的 SS PCINT1 输入 PCINT0 输入 ICP1 输入 AIO - - - 表 13-6。 C 口引脚的第二功能 端口引脚复用功能 PC6 复位(RESET 引脚) PCINT14(引脚电平变化中断 14) PC5 ADC5(ADC 输入通道 5) SCL(两线串行总线时钟线) PCINT13(引脚电平变化中断 13) PC4 ADC4(ADC 输入通道 4) SDA(两线串行总线数据输入/输出线) PCINT12(引脚电平变化中断 12) PC3 ADC3(ADC 输入通道 3) PCINT11(引脚电平变化中断 11) PC2 ADC2(ADC 输入通道 2) PCINT10(引脚电平变化中断 10) PC1 ADC1(ADC 输入通道 1) PCINT9(引脚电平变化中断 9) PC0 ADC0(ADC 输入通道 0) PCINT8(引脚电平变化中断 8) 86 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 第二功能配置如下: ?复位/ PCINT14 - 端口 C,位 6

复位,复位引脚:当 RSTDISBL 位被编程时,此引脚用作普通 I / O 销,而部分将不得不依赖上电复位和欠压复位为复位源。 当 RSTDISBL 位未编程,复位电路连接到引脚, 引脚不能作为 I/ O 引脚。 如果 PC6 作为复位引脚,DDC6,PORTC6 和 PINC6 都将读为 0。 PCINT14:引脚电平变化中断源 14 PC6 引脚作为外部中断 源。 ?SCL/ ADC5/ PCINT13 - 端口 C,位 5 SCL,两线串行接口的时钟:当寄存器 TWCR 的 TWEN 置位(1) ,使 2 两线串行接口,引脚 PC5 从端口连接,成为串行时钟 I / O 脚的 2 线串行接口。在这种模式下,有引脚上使用窄带滤波器抑制 尖峰输入信号小于 50 纳秒,而引脚由一个开漏驱动器驱动 摆率限制。 PC5 也可作为 ADC 输入通道 5。注意,ADC 输入通道 5 采用数字 电源。 PCINT13:引脚电平变化中断源 13 PC5 引脚作为外部中断 源。 ?SDA/ ADC4/ PCINT12 - 端口 C,位 4 SDA,两线串行接口数据:当寄存器 TWCR 的 TWEN 置位(1)使 2 线 串行接口,引脚 PC4 与端口连接,成为串行数据 I/ O 引脚。 2 线串行接口。在这种模式下,有脚,以抑制尖峰对尖峰滤波器 小于 50 ns 的输入信号,而引脚由一个开漏驱动器驱动的斜率指 限制。 PC4 也可作为 ADC 输入通道 4。注意,ADC 输入通道 4,采用数字化 电源。 PCINT12:引脚电平变化中断源 12 PC4 引脚作为外部中断 源。 ?ADC3/ PCINT11 - 端口 C,位 3 PC3 也可以用来作为 ADC 输入通道 3。注意,ADC 输入通道 3 由模拟 电源。 PCINT11:引脚电平变化中断源 11。PC3 引脚作为外部中断 源。 ?ADC2/ PCINT10 - 端口 C,位 2 PC2 也可作为 ADC 输入通道 2。注意,ADC 输入通道 2 使用模拟 电源。 PCINT10:引脚电平变化中断源 10。PC2 引脚作为外部中断 源。 87 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P ?ADC1/ PCINT9 - 端口 C,位 1 PC1 也可作为 ADC 输入通道 1。注意,ADC 输入通道 1 使用模拟 电源。 PCINT9:引脚电平变化中断源 9 PC1 引脚作为外部中断源。

?ADC0/ PCINT8 - 端口 C,位 0 PC0 也可作为 ADC 输入通道 0。注意,ADC 输入通道 0 为数字 电源。 PCINT8:引脚电平变化中断源 8 PC0 可作为外部中断源。 表 13-7 和表 13-8 端口 C 的第二功能的重载信号 80 页的图 13-5 所示。 注:1,当启用时,2 线串行接口为输出引脚 PC4 摆率控制 和 PC5。这未在图中显示。此外,尖峰滤波器连接之间的 在港口数字与 TWI 模块的数字逻辑显示的 AIO 输出。 表 13-7。在 PC6..PC4 第二功能重载信号(1) 信号 名称 PC6/ RESET/ PCINT14 PC5/ SCL/ ADC5/ PCINT13 PC4/ SDA/ ADC4/ PCINT12 PUOE RSTDISBL TWEN TWEN PUOV1 PORTC5?PUD PORTC4?PUD DDOE RSTDISBL TWEN TWEN DDOV0 SCL_OUT SDA_OUT PVOE0 TWEN TWEN PVOV0 0 0 DIEOE RSTDISBL+ PCINT14? PCIE1 PCINT13?PCIE1+ ADC5D PCINT12?PCIE1+ ADC4D DIEOV RSTDISBL PCINT13?PCIE1 PCINT12?PCIE1 DI PCINT14 输入 PCINT13 输入 PCINT12 输入 AIO 复位输入 ADC5 输入/ SCL 输入 ADC4 输入/ SDA 输入 88 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 端口 D 的 13.3.3 备用功能 该端口 D 引脚复用功能如表 13-9。 表 13-8。在 PC3..PC0 第二功能重载信号 信号 产品名称 PC3/ ADC3/ PCINT11 PC2/ ADC2/ PCINT10 PC1/ ADC1/ PCINT9 PC0/ ADC0/ PCINT8 PUOE0 0 0 0 PUOV0 0 0 0 DDOE0 0 0 0 DDOV0 0 0 0 PVOE0 0 0 0

PVOV0 0 0 0 DIEOE PCINT11?PCIE1+ ADC3D PCINT10?PCIE1+ ADC2D PCINT9?PCIE1+ ADC1D PCINT8?PCIE1+ ADC0D DIEOV PCINT11?PCIE1 PCINT10?PCIE1 PCINT9?PCIE1 PCINT8?PCIE1 DI PCINT11 输入 PCINT10 输入 PCINT9 输入 PCINT8 输入 AIO ADC3 输入 ADC2 输入 ADC1 输入 ADC0 输入 表 13-9。 D 端口引脚复用功能 端口引脚复用功能 PD7 AIN1(模拟比较器的负输入) PCINT23(引脚电平变化中断 23) PD6 AIN0(模拟比较器正输入) OC0A(定时器/计数器输出比较匹配 A 输出) PCINT22(引脚电平变化中断 22) PD5 T1(定时器/计数器 1 外部计数器输入) OC0B(定时器/计数器输出比较匹配 B 输出) PCINT21(引脚电平变化中断 21) PD4 XCK(USART 外部时钟输入/输出) T0(定时器/计数器 0 外部计数器输入) PCINT20(引脚电平变化中断 20) PD3 INT1(外部中断 1 输入) OC2B(定时器/计数器输出比较匹配 B 输出) PCINT19(引脚电平变化中断 19) PD2 INT0(外部中断 0 输入) PCINT18(引脚电平变化中断 18) PD1 TXD(USART 输出引脚) PCINT17(引脚电平变化中断 17) PD0 RXD(USART 输入引脚) PCINT16(引脚电平变化中断 16) 89 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 第二功能配置如下: ?AIN1/ OC2B/ PCINT23 - 端口 D,位 7 AIN1,模拟比较器的负输入。配置该引脚为输入时,内部上拉电阻

关闭以避免数字端口功能与模拟功能干扰 比较器。 PCINT23:引脚电平变化中断源 23。PD7 引脚作为外部中断 源。 ?AIN0/ OC0A/ PCINT22 - 端口 D,位 6 AIN0,模拟比较器正输入端。配置该引脚为输入时,内部上拉电阻 关闭以避免数字端口功能与模拟功能干扰 比较器。 OC0A, Output Compare Match output: The PD6 pin can serve as an external output for the Timer/Counter0 Compare Match A. The PD6 pin has to be configured as an output (DDD6 set (one)) to serve this function. The OC0A pin is also the output pin for the PWM mode timer 功能。 PCINT22: Pin Change Interrupt source 22. The PD6 pin can serve as an external interrupt 源。 ? T1/OC0B/PCINT21 – Port D, Bit 5 T1, Timer/Counter1 counter source. OC0B, Output Compare Match output: The PD5 pin can serve as an external output for the Timer/Counter0 Compare Match B. The PD5 pin has to be configured as an output (DDD5 set (one)) to serve this function. The OC0B pin is also the output pin for the PWM mode timer 功能。 PCINT21: Pin Change Interrupt source 21. The PD5 pin can serve as an external interrupt 源。 ? XCK/T0/PCINT20 – Port D, Bit 4 XCK, USART external clock. T0, Timer/Counter0 counter source. PCINT20: Pin Change Interrupt source 20. The PD4 pin can serve as an external interrupt 源。 ? INT1/OC2B/PCINT19 – Port D, Bit 3 INT1, External Interrupt source 1: The PD3 pin can serve as an external interrupt source. OC2B, Output Compare Match output: The PD3 pin can serve as an external output for the Timer/Counter0 Compare Match B. The PD3 pin has to be configured as an output (DDD3 set (one)) to serve this function. The OC2B pin is also the output pin for the PWM mode timer 功能。 PCINT19: Pin Change Interrupt source 19. The PD3 pin can serve as an external interrupt 源。 90 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P ? INT0/PCINT18 – Port D, Bit 2 INT0, External Interrupt source 0: The PD2 pin can serve as an external interrupt source. PCINT18: Pin Change Interrupt source 18. The PD2 pin can serve as an external interrupt 源。 ? TXD/PCINT17 – Port D, Bit 1 TXD, Transmit Data (Data output pin for the USART). When the USART Transmitter is enabled,

this pin is configured as an output regardless of the value of DDD1. PCINT17: Pin Change Interrupt source 17. The PD1 pin can serve as an external interrupt 源。 ? RXD/PCINT16 – Port D, Bit 0 RXD, Receive Data (Data input pin for the USART). When the USART Receiver is enabled this pin is configured as an input regardless of the value of DDD0. When the USART forces this pin to be an input, the pull-up can still be controlled by the PORTD0 bit. PCINT16: Pin Change Interrupt source 16. The PD0 pin can serve as an external interrupt 源。 Table 13-10 and Table 13-11 relate the alternate functions of Port D to the overriding signals shown in Figure 13-5 on page 80. Table 13-10. Overriding Signals for Alternate Functions PD7..PD4 信号 产品名称 PD7/AIN1 /PCINT23 PD6/AIN0/ OC0A/PCINT22 PD5/T1/OC0B/ PCINT21 PD4/XCK/ T0/PCINT20 PUOE 0 0 0 0 PUO 0 0 0 0 DDOE 0 0 0 0 DDOV 0 0 0 0 PVOE 0 OC0A ENABLE OC0B ENABLE UMSEL PVOV 0 OC0A OC0B XCK OUTPUT DIEOE PCINT23 ? PCIE2 PCINT22 ? PCIE2 PCINT21 ? PCIE2 PCINT20 ? PCIE2 DIEOV 1 1 1 1 DI PCINT23 INPUT PCINT22 INPUT PCINT21 INPUT T1 INPUT PCINT20 INPUT XCK INPUT T0 INPUT AIO AIN1 INPUT AIN0 INPUT – – 91 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P Table 13-11. Overriding Signals for Alternate Functions in PD3..PD0 信号 产品名称 PD3/OC2B/INT1/ PCINT19

PD2/INT0/ PCINT18 PD1/TXD/ PCINT17 PD0/RXD/ PCINT16 PUOE 0 0 TXEN RXEN PUO 0 0 0 PORTD0 ? PUD DDOE 0 0 TXEN RXEN DDOV 0 0 1 0 PVOE OC2B ENABLE 0 TXEN 0 PVOV OC2B 0 TXD 0 DIEOE INT1 ENABLE + PCINT19 ? PCIE2 INT0 ENABLE + PCINT18 ? PCIE1 PCINT17 ? PCIE2 PCINT16 ? PCIE2 DIEOV 1 1 1 1 DI PCINT19 INPUT INT1 INPUT PCINT18 INPUT INT0 INPUT PCINT17 INPUT PCINT16 INPUT RXD AIO – – – – 92 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 13.4 Register Description 13.4.1 MCUCR – MCU Control Register ?第 4 位 - PUD:上拉禁用 When this bit is written to one, the pull-ups in the I/O ports are disabled even if the DDxn and PORTxn Registers are configured to enable the pull-ups ({DDxn, PORTxn} = 0b01). See ”Configuring the Pin” on page 76 for more details about this feature. 13.4.2 PORTB – The Port B Data Register 13.4.3 DDRB – The Port B Data Direction Register 13.4.4 PINB – The Port B Input Pins Address 13.4.5 PORTC – The Port C Data Register 13.4.6 DDRC – The Port C Data Direction Register 13.4.7 PINC – The Port C Input Pins Address 位 7 6 54 3 210 的 0x35(0x55 写入) - BODS BODSE PUD - - IVSEL IVCE MCUCR 读/写 R R R 读/写 R R 读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210

0x05 (0x25) PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x04 (0x24) DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x03 (0x23) PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB Read/Write R R R R R R R R Initial Value N/A N/A N/A N/A N/A N/A N/A N/A 位 7 6 54 3 210 0x08 (0x28) – PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC Read/Write R R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x07 (0x27) – DDC6 DDC5 DDC4 DDC3 DDC2 DDC1 DDC0 DDRC Read/Write R R/W R/W R/W R/W R/W R/W R/W 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x06 (0x26) – PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 PINC Read/Write R R R R R R R R Initial Value 0 N/A N/A N/A N/A N/A N/A N/A 93 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 13.4.8 PORTD – The Port D Data Register 13.4.9 DDRD – The Port D Data Direction Register 13.4.10 PIND – The Port D Input Pins Address 位 7 6 54 3 210 0x0B (0x2B) PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x0A (0x2A) DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 DDRD 读/写读/写读/写读/写读/写读/写读/写读/写读/写 初始值 0 0 00 0 0 00 位 7 6 54 3 210 0x09 (0x29) PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 PIND Read/Write R R R R R R R R Initial Value N/A N/A N/A N/A N/A N/A N/A N/A 94

8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 14. 8-bit Timer/Counter0 with PWM 14.1 Features ? Two Independent Output Compare Units ? Double Buffered Output Compare Registers ? Clear Timer on Compare Match (Auto Reload) ? Glitch Free, Phase Correct Pulse Width Modulator (PWM) ?可变的 PWM 周期 ?频率发生器 ? Three Independent Interrupt Sources (TOV0, OCF0A, and OCF0B) 14.2 Overview Timer/Counter0 is a general purpose 8-bit Timer/Counter module, with two independent Output Compare Units, and with PWM support. It allows accurate program execution timing (event management) and wave generation. A simplified block diagram of the 8-bit Timer/Counter is shown in Figure 14-1. For the actual placement of I/O pins, refer to ”Pinout ATmega48PA/88PA/168PA/328P” on page 2. CPU accessible I/O Registers, including I/O bits and I/O pins, are shown in bold. The device-specific I/O Register and bit locations are listed in the ”Register Description” on page 106. The PRTIM0 bit in ”Minimizing Power Consumption” on page 42 must be written to zero to enable Timer/Counter0 module. 95 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P Figure 14-1. 8-bit Timer/Counter Block Diagram 14.2.1 Definitions Many register and bit references in this section are written in general form. A lower case “n” replaces the Timer/Counter number, in this case 0. A lower case “x” replaces the Output Compare Unit, in this case Compare Unit A or Compare Unit B. However, when using the register or bit defines in a program, the precise form must be used, i.e., TCNT0 for accessing Timer/Counter0 counter value and so on. The definitions in Table 14-1 are also used extensively throughout the document. 14.2.2 Registers The Timer/Counter (TCNT0) and Output Compare Registers (OCR0A and OCR0B) are 8-bit 寄存器。Interrupt request (abbreviated to Int.Req. in the figure) signals are all visible in the Timer Interrupt Flag Register (TIFR0). All interrupts are individually masked with the Timer Interrupt Mask Register (TIMSK0). TIFR0 and TIMSK0 are not shown in the figure. Clock Select Timer/Counter OCRnA OCRnB =

= TCNTn 波形 代 波形 代 OCnA OCnB = 固定 TOP 价值 控制逻辑 =0 TOP BOTTOM 数 清除 方向 TOVn (Int.Req.) OCnA (Int.Req.) OCnB (Int.Req.) TCCRnA TCCRnB Edge Tn 探测器 ( From Prescaler ) clkTn Table 14-1.定义 BOTTOM The counter reaches the BOTTOM when it becomes 0x00. MAX The counter reaches its MAXimum when it becomes 0xFF (decimal 255). TOP The counter reaches the TOP when it becomes equal to the highest value in the count sequence. The TOP value can be assigned to be the fixed value 0xFF (MAX) or the value stored in the OCR0A Register. The assignment is dependent on the mode of operation. 96 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P 定时器/计数器可以在内部时钟通过预分频器或通过一个外部时钟源 在 T0 引脚。时钟选择逻辑模块控制的时钟源和边缘的定时器/计数器 采用递增(或递减)的价值。定时器/计数器处于非活动状态时,没有时钟源 被选中。The output from the Clock Select logic is referred to as the timer clock (clkT0). 双缓冲的输出比较寄存器(OCR0A 与 OCR0B)与比较

Timer/Counter value at all times. The result of the compare can be used by the Waveform Generator to generate a PWM or variable frequency output on the Output Compare pins (OC0A and OC0B) 。 See Section “15.7.3” on page 123. for details.The compare match event will also set the Compare Flag (OCF0A or OCF0B) which can be used to generate an Output Compare interrupt 请求。 14.3 Timer/Counter Clock Sources The Timer/Counter can be clocked by an internal or an external clock source. The clock source is selected by the Clock Select logic which is controlled by the Clock Select (CS02:0) bits located in the Timer/Counter Control Register (TCCR0B). For details on clock sources and prescaler, see ”Timer/Counter0 and Timer/Counter1 Prescalers” on page 141. 14.4 Counter Unit The main part of the 8-bit Timer/Counter is the programmable bi-directional counter unit.图 14-2 shows a block diagram of the counter and its surroundings. Figure 14-2. Counter Unit Block Diagram Signal description (internal signals): count Increment or decrement TCNT0 by 1. direction Select between increment and decrement. clear Clear TCNT0 (set all bits to zero). clkTn Timer/Counter clock, referred to as clkT0 in the following. top Signalize that TCNT0 has reached maximum value. bottom Signalize that TCNT0 has reached minimum value (zero). Depending of the mode of operation used, the counter is cleared, incremented, or decremented at each timer clock (clkT0). clkT0 can be generated from an external or internal clock source, selected by the Clock Select bits (CS02:0). When no clock source is selected (CS02:0 = 0) the 定时器停止。However, the TCNT0 value can be accessed by the CPU, regardless of whether clkT0 is present or not. A CPU write overrides (has priority over) all counter clear or count operations. DATA BUS TCNTn Control Logic 数 TOVn (Int.Req.) Clock Select 顶部 Edge Tn 探测器 ( From Prescaler ) clkTn 底部 方向 明确 97

8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P The counting sequence is determined by the setting of the WGM01 and WGM00 bits located in the Timer/Counter Control Register (TCCR0A) and the WGM02 bit located in the Timer/Counter Control Register B (TCCR0B). There are close connections between how the counter behaves (counts) and how waveforms are generated on the Output Compare outputs OC0A and OC0B. For more details about advanced counting sequences and waveform generation, see ”Modes of Operation” on page 99. The Timer/Counter Overflow Flag (TOV0) is set according to the mode of operation selected by the WGM02:0 bits. TOV0 can be used for generating a CPU interrupt. 14.5 Output Compare Unit The 8-bit comparator continuously compares TCNT0 with the Output Compare Registers (OCR0A and OCR0B). Whenever TCNT0 equals OCR0A or OCR0B, the comparator signals a 匹配。A match will set the Output Compare Flag (OCF0A or OCF0B) at the next timer clock 循环。If the corresponding interrupt is enabled, the Output Compare Flag generates an Output Compare interrupt. The Output Compare Flag is automatically cleared when the interrupt is executed. Alternatively, the flag can be cleared by software by writing a logical one to its I/O bit 位置。The Waveform Generator uses the match signal to generate an output according to operating mode set by the WGM02:0 bits and Compare Output mode (COM0x1:0) bits.最大 and bottom signals are used by the Waveform Generator for handling the special cases of the extreme values in some modes of operation (”Modes of Operation” on page 99). Figure 14-3 shows a block diagram of the Output Compare unit. 图 14-3。Output Compare Unit, Block Diagram The OCR0x Registers are double buffered when using any of the Pulse Width Modulation (PWM) modes. For the normal and Clear Timer on Compare (CTC) modes of operation, the double buffering is disabled. The double buffering synchronizes the update of the OCR0x Compare Registers to either top or bottom of the counting sequence. The synchronization prevents the occurrence of odd-length, non-symmetrical PWM pulses, thereby making the output glitch-free. OCFnx (Int.Req.) = (8-bit Comparator ) OCRnx OCnx DATA BUS TCNTn WGMn1:0 波形发生器 顶部 FOCn COMnx1:0 底部 98 8161D-AVR-10 月 9 日

ATMEGA48PA/88PA/168PA/328P The OCR0x Register access may seem complex, but this is not case. When the double buffering is enabled, the CPU has access to the OCR0x Buffer Register, and if double buffering is disabled the CPU will access the OCR0x directly. 14.5.1 Force Output Compare In non-PWM waveform generation modes, the match output of the comparator can be forced by writing a one to the Force Output Compare (FOC0x) bit. Forcing compare match will not set the OCF0x Flag or reload/clear the timer, but the OC0x pin will be updated as if a real compare match had occurred (the COM0x1:0 bits settings define whether the OC0x pin is set, cleared or toggled). 14.5.2 Compare Match Blocking by TCNT0 Write All CPU write operations to the TCNT0 Register will block any compare match that occur in the next timer clock cycle, even when the timer is stopped. This feature allows OCR0x to be initialized to the same value as TCNT0 without triggering an interrupt when the Timer/Counter clock is 启用。 14.5.3 Using the Output Compare Unit Since writing TCNT0 in any mode of operation will block all compare matches for one timer clock cycle, there are risks involved when changing TCNT0 when using the Output Compare Unit, independently of whether the Timer/Counter is running or not. If the value written to TCNT0 equals the OCR0x value, the compare match will be missed, resulting in incorrect waveform 一代。Similarly, do not write the TCNT0 value equal to BOTTOM when the counter is downcounting. The setup of the OC0x should be performed before setting the Data Direction Register for the port pin to output. The easiest way of setting the OC0x value is to use the Force Output Compare (FOC0x) strobe bits in Normal mode. The OC0x Registers keep their values even when changing between Waveform Generation modes. Be aware that the COM0x1:0 bits are not double buffered together with the compare value. Changing the COM0x1:0 bits will take effect immediately. 14.6 Compare Match Output Unit The Compare Output mode (COM0x1:0) bits have two functions. The Waveform Generator uses the COM0x1:0 bits for defining the Output Compare (OC0x) state at the next compare match. Also, the COM0x1:0 bits control the OC0x pin output source. Figure 14-4 shows a simplified schematic of the logic affected by the COM0x1:0 bit setting. The I/O Registers, I/O bits, and I/O pins in the figure are shown in bold. Only the parts of the general I/O port control registers (DDR and PORT) that are affected by the COM0x1:0 bits are shown. When referring to the OC0x state, the reference is for the internal OC0x Register, not the OC0x pin. If a system reset occur, the OC0x Register is reset to “0”. 99 8161D-AVR-10 月 9 日 ATMEGA48PA/88PA/168PA/328P Figure 14-4. Compare Match Output Unit, Schematic The general I/O port function is overridden by the Output Compare (OC0x) from the Waveform

Generator if either of the COM0x1:0 bits are set. However, the OC0x pin direction (input or output) is still controlled by the Data Direction Register (DDR) for the port pin. The Data Direction Register bit for the OC0x pin (DDR_OC0x) must be set as output before the OC0x value is visible on the pin. The port override function is independent of the Waveform Generation mode. The design of the Output Compare pin logic allows initialization of the OC0x state before the output 被使能。Note that some COM0x1:0 bit settings are reserved for certain modes of 操作。See Section “14.9” on page 106. 14.6.1 Compare Output Mode and Waveform Generation The Waveform Generator uses the COM0x1:0 bits differently in Normal, CTC, and PWM modes. For all modes, setting the COM0x1:0 = 0 tells the Waveform Generator that no action on the OC0x Register is to be performed on the next compare match. For compare output actions in the non-PWM modes refer to Table 14-2 on page 106. For fast PWM mode, refer to Table 14-3 on page 106, and for phase correct PWM refer to Table 14-4 on page 107. A change of the COM0x1:0 bits state will have effect at the first compare match after the bits are 写的。For non-PWM modes, the action can be forced to have immediate effect by using the FOC0x strobe bits. 14.7 Modes of Operation The mode of operation, i.e., the behavior of the Timer/Counter and the Output Compare pins, is defined by the combination of the Waveform Generation mode (WGM02:0) and Compare Output mode (COM0x1:0) bits. The Compare Output mode bits do not affect the counting sequence, while the Waveform Generation mode bits do. The COM0x1:0 bits control whether the PWM output generated should be inverted or not (inverted or non-inverted PWM). For non-PWM modes the COM0x1:0 bits control whether the output should be set, cleared, or toggled at a compare match (See Section “14.6” on page 98.). For detailed timing information refer to ”Timer/Counter Timing Diagrams” on page 104. 港 DDR DQ DQ OCnx OCnx Pin Waveform D Q 发电机 COMnx1 COMnx0 0 1 FOCn clkI/O 100 8161D-AVR-10 月 9 日

ATMEGA48PA/88PA/168PA/328P 14.7.1 Normal Mode The simplest mode of operation is the Normal mode (WGM02:0 = 0). In this mode the counting direction is always up (incrementing), and no counter clear is performed. The counter simply overruns when it passes its maximum 8-bit value (TOP = 0xFF) and then restarts from the bottom (0x00). In normal operation the Timer/Counter Overflow Flag (TOV0) will be set in the same timer clock cycle as the TCNT0 becomes zero. The TOV0 Flag in this case behaves like a ninth bit, except that it is only set, not cleared. However, combined with the timer overflow interrupt that automatically clears the TOV0 Flag, the timer resolution can be increased by software. There are no special cases to consider in the Normal mode, a new counter value can be written 随时随地。 The Output Compare unit can be used to generate interrupts at some given time. Using the Output Compare to generate waveforms in Normal mode is not recommended, since this will occupy too much of the CPU time. 14.7.2 Clear Timer on Compare Match (CTC) Mode In Clear Timer on Compare or CTC mode (WGM02:0 = 2), the OCR0A Register is used to manipulate the counter resolution. In CTC mode the counter is cleared to zero when the counter value (TCNT0) matches the OCR0A. The OCR0A defines the top value for the counter, hence also its resolution.This mode allows greater control of the compare match output frequency.它 also simplifies the operation of counting external events. The timing diagram for the CTC mode is shown in Figure 14-5. The counter value (TCNT0) increases until a compare match occurs between TCNT0 and OCR0A, and then counter (TCNT0) is cleared. Figure 14-5. CTC Mode, Timing Diagram An interrupt can be generated each time the counter value reaches the TOP value by using the OCF0A Flag. If the interrupt is enabled, the interrupt handler routine can be used for updating the TOP value. However, changing TOP to a value close to BOTTOM when the counter is running with none or a low prescaler value must be done with care since the CTC mode does not have the double buffering feature. If the new value written to OCR0A is lower than the current value of TCNT0, the counter will miss the compare match. The counter will then have to count to its maximum value (0xFF) and wrap around starting at 0x00 before the compare match can 发生。 For generating a waveform output in CTC mode, the OC0A output can be set to toggle its logical level on each compare match by setting the Compare Output mode bits to toggle mode (COM0A1:0 = 1). The OC0A value will not be visible on the port pin unless the data direction for TCNTn OCn (Toggle) OCnx Interrupt Flag Set Period 1 2 3 4 (COMnx1:0 = 1)
100
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P

14.7.1 Normal Mode The simplest mode of operation is the Normal mode (WGM02:0 = 0). In this mode the counting direction is always up (incrementing), and no counter clear is performed. The counter simply overruns when it passes its maximum 8-bit value (TOP = 0xFF) and then restarts from the bottom (0x00). In normal operation the Timer/Counter Overflow Flag (TOV0) will be set in the same timer clock cycle as the TCNT0 becomes zero. The TOV0 Flag in this case behaves like a ninth bit, except that it is only set, not cleared. However, combined with the timer overflow interrupt that automatically clears the TOV0 Flag, the timer resolution can be increased by software. There are no special cases to consider in the Normal mode, a new counter value can be written anytime. The Output Compare unit can be used to generate interrupts at some given time. Using the Output Compare to generate waveforms in Normal mode is not recommended, since this will occupy too much of the CPU time. 14.7.2 Clear Timer on Compare Match (CTC) Mode In Clear Timer on Compare or CTC mode (WGM02:0 = 2), the OCR0A Register is used to manipulate the counter resolution. In CTC mode the counter is cleared to zero when the counter value (TCNT0) matches the OCR0A. The OCR0A defines the top value for the counter, hence also its resolution. This mode allows greater control of the compare match output frequency. It also simplifies the operation of counting external events. The timing diagram for the CTC mode is shown in Figure 14-5. The counter value (TCNT0) increases until a compare match occurs between TCNT0 and OCR0A, and then counter (TCNT0) is cleared. Figure 14-5. CTC Mode, Timing Diagram An interrupt can be generated each time the counter value reaches the TOP value by using the OCF0A Flag. If the interrupt is enabled, the interrupt handler routine can be used for updating the TOP value. However, changing TOP to a value close to BOTTOM when the counter is running with none or a low prescaler value must be done with care since the CTC mode does not have the double buffering feature. If the new value written to OCR0A is lower than the current value of TCNT0, the counter will miss the compare match. The counter will then have to count to its maximum value (0xFF) and wrap around starting at 0x00 before the compare match can occur. For generating a waveform output in CTC mode, the OC0A output can be set to toggle its logical level on each compare match by setting the Compare Output mode bits to toggle mode (COM0A1:0 = 1). The OC0A value will not be visible on the port pin unless the data direction for
TCNTn OCn (Toggle)
OCnx Interrupt Flag Set

Period 1 2 3 4
(COMnx1:0 = 1)

101
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P

the pin is set to output. The waveform generated will have a maximum frequency of f OC0 = fclk_I/O/2 when OCR0A is set to zero (0x00). The waveform frequency is defined by the following equation: The N variable represents the prescale factor (1, 8, 64, 256, or 1024). As for the Normal mode of operation, the TOV0 Flag is set in the same timer clock cycle that the counter counts from MAX to 0x00. 14.7.3 Fast PWM Mode The fast Pulse Width Modulation or fast PWM mode (WGM02:0 = 3 or 7) provides a high frequency PWM waveform generation option. The fast PWM differs from the other PWM option by its single-slope operation. The counter counts from BOTTOM to TOP then restarts from BOTTOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR0A when WGM2:0 = 7. In noninverting Compare Output mode, the Output Compare (OC0x) is cleared on the compare match between TCNT0 and OCR0x, and set at BOTTOM. In inverting Compare Output mode, the output is set on compare match and cleared at BOTTOM. Due to the single-slope operation, the operating frequency of the fast PWM mode can be twice as high as the phase correct PWM mode that use dual-slope operation. This high frequency makes the fast PWM mode well suited for power regulation, rectification, and DAC applications. High frequency allows physically small sized external components (coils, capacitors), and therefore reduces total system cost. In fast PWM mode, the counter is incremented until the counter value matches the TOP value. The counter is then cleared at the following timer clock cycle. The timing diagram for the fast PWM mode is shown in Figure 14-6. The TCNT0 value is in the timing diagram shown as a histogram for illustrating the single-slope operation. The diagram includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT0 slopes represent compare matches between OCR0x and TCNT0. Figure 14-6. Fast PWM Mode, Timing Diagram The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches TOP. If the interrupt is enabled, the interrupt handler routine can be used for updating the compare value. fOCnx fclk_I/O 2 N 1 + OCRnx = ------------------------------------------------TCNTn
OCRnx Update and TOVn Interrupt Flag Set

Period 1 2 3 OCnx OCnx
(COMnx1:0 = 2) (COMnx1:0 = 3) OCRnx Interrupt Flag Set 4567

102
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
In fast PWM mode, the compare unit allows generation of PWM waveforms on the OC0x pins. Setting the COM0x1:0 bits to two will produce a non-inverted PWM and an inverted PWM output can be generated by setting the COM0x1:0 to three: Setting the COM0A1:0 bits to one allows the OC0A pin to toggle on Compare Matches if the WGM02 bit is set. This option is not available for the OC0B pin (see Table 14-6 on page 107). The actual OC0x value will only be visible on the port pin if the data direction for the port pin is set as output. The PWM waveform is generated by setting (or clearing) the OC0x Register at the compare match between OCR0x and TCNT0, and clearing (or setting) the OC0x Register at the timer clock cycle the counter is cleared (changes from TOP to BOTTOM). The PWM frequency for the output can be calculated by the following equation: The N variable represents the prescale factor (1, 8, 64, 256, or 1024). The extreme values for the OCR0A Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0 bits.) A frequency (with 50% duty cycle) waveform output in fast PWM mode can be achieved by setting OC0x to toggle its logical level on each compare match (COM0x1:0 = 1). The waveform generated will have a maximum frequency of fOC0 = fclk_I/O/2 when OCR0A is set to zero. This feature is similar to the OC0A toggle in CTC mode, except the double buffer feature of the Output Compare unit is enabled in the fast PWM mode. 14.7.4 Phase Correct PWM Mode The phase correct PWM mode (WGM02:0 = 1 or 5) provides a high resolution phase correct PWM waveform generation option. The phase correct PWM mode is based on a dual-slope operation. The counter counts repeatedly from BOTTOM to TOP and then from TOP to BOTTOM. TOP is defined as 0xFF when WGM2:0 = 1, and OCR0A when WGM2:0 = 5. In noninverting Compare Output mode, the Output Compare (OC0x) is cleared on the compare match between TCNT0 and OCR0x while upcounting, and set on the compare match while downcounting. In inverting Output Compare mode, the operation is inverted. The dual-slope operation has lower maximum operation frequency than single slope operation. However, due to the symmetric feature of the dual-slope PWM modes, these modes are preferred for motor control applications. In phase correct PWM mode the counter is incremented until the counter value matches TOP. When the counter reaches TOP, it changes the count direction. The TCNT0 value will be equal to TOP for one timer clock cycle. The timing diagram for the phase correct PWM mode is shown on Figure 14-7. The TCNT0 value is in the timing diagram shown as a histogram for illustrating the dual-slope operation. The diagram includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT0 slopes represent compare matches between OCR0x and TCNT0. fOCnxPWM fclk_I/O N 256

= -----------------103
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
Figure 14-7. Phase Correct PWM Mode, Timing Diagram The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches BOTTOM. The Interrupt Flag can be used to generate an interrupt each time the counter reaches the BOTTOM value. In phase correct PWM mode, the compare unit allows generation of PWM waveforms on the OC0x pins. Setting the COM0x1:0 bits to two will produce a non-inverted PWM. An inverted PWM output can be generated by setting the COM0x1:0 to three: Setting the COM0A0 bits to one allows the OC0A pin to toggle on Compare Matches if the WGM02 bit is set. This option is not available for the OC0B pin (see Table 14-7 on page 108). The actual OC0x value will only be visible on the port pin if the data direction for the port pin is set as output. The PWM waveform is generated by clearing (or setting) the OC0x Register at the compare match between OCR0x and TCNT0 when the counter increments, and setting (or clearing) the OC0x Register at compare match between OCR0x and TCNT0 when the counter decrements. The PWM frequency for the output when using phase correct PWM can be calculated by the following equation: The N variable represents the prescale factor (1, 8, 64, 256, or 1024). The extreme values for the OCR0A Register represent special cases when generating a PWM waveform output in the phase correct PWM mode. If the OCR0A is set equal to BOTTOM, the output will be continuously low and if set equal to MAX the output will be continuously high for non-inverted PWM mode. For inverted PWM the output will have the opposite logic values. At the very start of period 2 in Figure 14-7 OCnx has a transition from high to low even though there is no Compare Match. The point of this transition is to guarantee symmetry around BOTTOM. There are two cases that give a transition without Compare Match. ? OCRnx changes its value from MAX, like in Figure 14-7. When the OCR0A value is MAX the OCn pin value is the same as the result of a down-counting Compare Match. To ensure
TOVn Interrupt Flag Set OCnx Interrupt Flag Set 123

TCNTn Period OCnx OCnx
(COMnx1:0 = 2) (COMnx1:0 = 3) OCRnx Update

fOCnxPCPWM fclk_I/O N 510 = -----------------104

8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
symmetry around BOTTOM the OCnx value at MAX must correspond to the result of an upcounting Compare Match. ? The timer starts counting from a value higher than the one in OCRnx, and for that reason misses the Compare Match and hence the OCnx change that would have happened on the way up.

14.8 Timer/Counter Timing Diagrams
The Timer/Counter is a synchronous design and the timer clock (clkT0) is therefore shown as a clock enable signal in the following figures. The figures include information on when interrupt flags are set. Figure 14-8 contains timing data for basic Timer/Counter operation. The figure shows the count sequence close to the MAX value in all modes other than phase correct PWM mode. Figure 14-8. Timer/Counter Timing Diagram, no Prescaling Figure 14-9 shows the same timing data, but with the prescaler enabled. Figure 14-9. Timer/Counter Timing Diagram, with Prescaler (fclk_I/O/8) Figure 14-10 shows the setting of OCF0B in all modes and OCF0A in all modes except CTC mode and PWM mode, where OCR0A is TOP.
clkTn
(clkI/O/1)

TOVn clkI/O TCNTn MAX - 1 MAX BOTTOM BOTTOM + 1 TOVn TCNTn MAX - 1 MAX BOTTOM BOTTOM + 1 clkI/O clkTn
(clkI/O/8)

105
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
Figure 14-10. Timer/Counter Timing Diagram, Setting of OCF0x, with Prescaler (f clk_I/O/8) Figure 14-11 shows the setting of OCF0A and the clearing of TCNT0 in CTC mode and fast PWM mode where OCR0A is TOP. Figure 14-11. Timer/Counter Timing Diagram, Clear Timer on Compare Match mode, with Prescaler (fclk_I/O/8)
OCFnx OCRnx TCNTn OCRnx Value OCRnx - 1 OCRnx OCRnx + 1 OCRnx + 2

clkI/O clkTn
(clkI/O/8)

OCFnx OCRnx TCNTn (CTC) TOP TOP - 1 TOP BOTTOM BOTTOM + 1 clkI/O clkTn
(clkI/O/8)

106
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
14.9 Register Description
14.9.1 TCCR0A – Timer/Counter Control Register A ? Bits 7:6 – COM0A1:0: Compare Match Output A Mode These bits control the Output Compare pin (OC0A) behavior. If one or both of the COM0A1:0 bits are set, the OC0A output overrides the normal port functionality of the I/O pin it is connected to. However, note that the Data Direction Register (DDR) bit corresponding to the OC0A pin must be set in order to enable the output driver. When OC0A is connected to the pin, the function of the COM0A1:0 bits depends on the WGM02:0 bit setting. Table 14-2 shows the COM0A1:0 bit functionality when the WGM02:0 bits are set to a normal or CTC mode (non-PWM). Table 14-3 shows the COM0A1:0 bit functionality when the WGM01:0 bits are set to fast PWM mode.
Note: 1. A special case occurs when OCR0A equals TOP and COM0A1 is set. In this case, the Compare Match is ignored, but the set or clear is done at BOTTOM. See ”Fast PWM Mode” on page 101 for more details.
Bit 7 6 5 4 3 2 1 0 0x24 (0x44) COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00 TCCR0A Read/Write R/W R/W R/W R/W R R R/W R/W Initial Value 0 0 0 0 0 0 0 0

Table 14-2. Compare Output Mode, non-PWM Mode
COM0A1 COM0A0 Description 0 0 Normal port operation, OC0A disconnected. 0 1 Toggle OC0A on Compare Match 1 0 Clear OC0A on Compare Match 1 1 Set OC0A on Compare Match

Table 14-3. Compare Output Mode, Fast PWM Mode(1)
COM0A1 COM0A0 Description 0 0 Normal port operation, OC0A disconnected.

0 1 WGM02 = 0: Normal Port Operation, OC0A Disconnected. WGM02 = 1: Toggle OC0A on Compare Match. 1 0 Clear OC0A on Compare Match, set OC0A at BOTTOM, (non-inverting mode). 1 1 Set OC0A on Compare Match, clear OC0A at BOTTOM, (inverting mode).

107
8161D–AVR–10/09

ATmega48PA/88PA/168PA/328P
Table 14-4 shows the COM0A1:0 bit functionality when the WGM02:0 bits are set to phase correct PWM mode.
Note: 1. A special case occurs when OCR0A equals TOP and COM0A1 is set. In this case, the Compare Match is ignored, but the set or clear is done at TOP. See ”Phase Correct PWM Mode” on page 128 for more details.

? Bits 5:4 – COM0B1:0: Compare Match Output B Mode These bits control the Output Compare pin (OC0B) behavior. If one or both of the COM0B1:0 bits are set, the OC0B output overrides the normal port functionality of the I/O pin it is connected to. However, note that the Data Direction Register (DDR) bit corresponding to the OC0B pin must be set in order to enable the output driver. When OC0B is connected to the pin, the function of the COM0B1:0 bits depends on the WGM02:0 bit setting. Table 14-5 shows the COM0B1:0 bit functionality when the WGM02:0 bits are set to a normal or CTC mode (non-PWM). Table 14-6 shows the COM0B1:0 bit functionality when the WGM02:0 bits are set to fast PWM mode.
Note: 1. A special case occurs when OCR0B equals TOP and COM0B1 is set. In this case, the Compare Match is ignored, but the set or clear is done at TOP. See ”Fast PWM Mode” on page 101 for more details.

Table 14-4. Compare Output Mode, Phase Correct PWM Mode(1)
COM0A1

相关文章:
ATmega328P中文翻译资料
ATmega328P中文翻译资料_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档ATmega328P中文翻译资料_信息与通信_工程科技_专业资料。产品特点 ?高...
Arduino URO端口与AtMega328p引脚对应图
Arduino URO端口与AtMega328p引脚对应图_信息与通信_工程科技_专业资料。Arduino 微控制器的数字端口和模拟端口与 ATMEGA 328 芯片引脚的对应关系图如下。 标有 0...
mega328熔丝位设置说明
百度文库 专业资料 工程科技 电子/电路专题推荐 北师大二附理科学霸高中... ...ATmega328P AVR 448页 免费 mega8的熔丝位设置 4页 1下载券m...
外文翻译中文
外文翻译中文_理学_高等教育_教育专区。单片机,全称单...老产品) o ATmega series – AVR (Atmel 的高...(多核心单片机) o P201CS/CD 8-bits o P211CS...
arduino学习资料
下图就是一个 Atmega328P-PU 单片机, 基于 AVR 指令集的 8 位处理 器,频率...中文手册 ADXL345 中文 PDF.pdf arduino 学习笔记 26 4 位数码管实验 这次...
从ATmega328学习avr gcc库
从ATmega328学习avr gcc库_计算机软件及应用_IT/计算机_专业资料。从ATmega328...#define __AVR_ATmega328P__ #include<stdio.h> #include<avr\io.h> int...
单片机原文及翻译
单片机原文及翻译_数学_自然科学_专业资料。本文是关于...ATmega, ATxmega series(AVR architecture), AT91SAM...EM78PXXX Low pin-Count and GPIO Type, EM78P...
6 外文翻译
6 外文翻译_英语学习_外语学习_教育专区。外文翻译 ...PCB CC2420 MCU Atmega 128L Flash Ethernet LAN ...[9] P.M. Cocoran, F. Papai and A. Zoldi...
任务书
4#705 原始数据与资料: 《ATmega8 原理及应用手册》 、ATmega328P-AU 产品...英文资料翻译及其它要求: 无 9-11 周 11-12 周 研究室主任签名: 年月日 ...
外文翻译 - 副本
外文翻译 - 副本_电子/电路_工程科技_专业资料。华南...中文译名 基于 ZigBee 无线传感节点技术的实时水果物...使其可以执行使用的标准 C 语言开发的程序 ATMEGA...
更多相关标签:
atmega328p中文资料 | atmega328pa中文资料 | atmega328中文资料 | atmega328p中文手册 | atmega1284p中文资料 | atmega328p | atmega328p pu | atmega328p最小系统 |