第1章 ATmega8单片机简介 1
1.1 AVR单片机 1
1.1.1 AVR单片机简介 1
1.1.2 AVR单片机的主要特点 2
1.1.3 AVR单片机系列产品 4
1.2 ATmega8单片机 7
1.2.1 ATmega8单片机简介 7
1.2.2 ATmega8单片机的结构与主要性能 8
1.2.3 ATmega8单片机封装与引脚 11
第2章 ATmega8硬件结构 14
2.1 ATmega8 MCU内核 14
2.1.1 结构概述 14
2.1.2 微控制器(MCU) 16
2.1.3 MCU工作时序 19
2.1.4 复位和中断处理 20
2.2 ATmega8单片机存储器组织 21
2.2.1 支持可在线编程和可在应用自编程的Flash程序存储器 21
2.2.2 数据存储器(SRAM) 22
2.2.3 E2PROM数据存储器 23
2.2.4 I/O寄存器 24
2.3 系统时钟和时钟选择 26
2.3.1 时钟系统和时钟分配 26
2.3.2 时钟源 27
2.3.3 外部晶振 28
2.3.4 外部低频率晶振 29
2.3.5 外部RC振荡器 30
2.3.6 可校准的内部RC振荡器 31
2.3.7 外部时钟源 32
2.4 电源管理和休眠模式 33
2.3.8 定时器/计数器振荡器 33
2.4.1 MCU控制寄存器MCUCR 34
2.4.2 空闲模式(IDLE MODE) 35
2.4.3 ADC降噪模式(ADC Noise Reduction) 35
2.4.4 掉电模式(Power-down) 35
2.4.5 省电模式(Power-save) 36
2.4.6 等待模式(STANDBY MODE) 36
2.4.7 如何将功耗降到最低 37
2.5 系统复位 38
2.5.1 复位源 40
2.5.2 MCU控制和状态寄存器MCUCSR 42
2.5.3 内部参考电压源 43
2.5.4 看门狗定时器 43
2.6 中断向量 46
2.6.1 复位和中断向量表的移动 47
2.6.2 中断控制寄存器GICR 49
2.7 I/O端口 51
2.7.1 通用数字I/O接口 52
2.7.2 数字输入使能和休眠模式 56
2.7.3 端口的第二功能 57
2.8 外部中断 62
2.9 ATmegas的定时器/计数器 65
2.9.1 定时器/计数器预定比例分频器 65
2.9.2 8位定时器/计数器0--T/C0 66
2.9.3 16位定时器/计数器1--T/C1 69
2.9.4 8位定时器/计数器2--T/C2 87
2.10 同步串行接口SPI 101
2.10.1 SPI接口控制与数据传输过程 101
2.10.2 与SPI接口相关的寄存器 107
2.11 通用同/异步串行接口 USART 109
2.11.1 概述 109
2.11.2 串行时钟发生 111
2.11.3 数据帧格式 113
2.11.4 USART的初始化 114
2.11.5 数据发送 115
2.11.6 数据接收 118
2.11.7 异步串行数据的硬件扫描检测和接收时序 121
2.11.8 多机通信模式 122
2.11.9 USART寄存器 123
2.11.10 串行通信波特率的设置与偏差 129
2.12 两线串行TWI(I2C)总线接口 131
2.12.1 两线串行总线接口定义 132
2.12.2 TWI模块的概述 132
2.12.3 TWI寄存器 134
2.12.4 使用TWI总线 137
2.12.5 多主机系统和仲裁 146
2.13 模拟比较器 147
2.14.1 特点 150
2.14 模数转换功能ADC 150
2.14.2 启动ADC转换 152
2.14.3 预分频与转换定时 152
2.14.4 ADC输入通道和参考电源的选择 154
2.14.5 ADC噪声抑制器(NOISE CANCELER) 156
2.14.6 有关的I/O寄存器 158
2.15 引导加载支持的自编程功能 161
2.15.1 引导加载技术的实现 162
2.15.2 相关I/O寄存器 166
2.15.3 程序存储器 Flash的自编程 169
2.15.4 一个简单的引导加载汇编程序 172
2.16 ATmega8存储器编程 174
2.16.1 ATmega8的锁定位、熔丝位、标识位和校正位 174
2.16.2 并行编程模式 177
2.16.3 串行编程模式 184
2.17 E2PROM数据存储器读/写访问 187
2.17.1 E2PROM读/写访问 187
2.I7.2 寄存器描述 187
2.17.3 简单的读写E2PROM例程 189
3.1.1 ATmega8指令表 192
第3章 ATmega8指令系统 192
3.1 ATmega8指令总述 192
3.1.2 指令系统中使用的符号 200
3.1.3 寻址方式和寻址空间 201
3.2 算术和逻辑指令 204
3.2.1 加法指令 204
3.2.2 减法指令 205
3.2.3 取反码指令 206
3.2.6 逻辑与指令 207
3.2.5 比较指令 207
3.2.4 取补码指令 207
3.2.7 逻辑或指令 208
3.2.8 逻辑异或指令 209
3.2.9 乘法指令 209
3.3 转移指令 211
3.3.1 无条件转移指令 211
3.3.2 条件转移指令 212
3.3.3 子程序调用和返回指令 217
3.4.1 直接寻址数据传送指令 219
3.4 数据传送指令 219
3.4.2 间接寻址数据传送指令 220
3.4.3 从程序存储器中取数装入寄存器指令 221
3.4.4 写程序存储器指令 222
3.4.5 I/O口数据传送 222
3.4.6 堆栈操作指令 223
3.5 位操作和位测试指令 223
3.5.1 带进位逻辑操作指令 223
3.5.2 位变量传送指令 224
3.5.3 位变量修改指令 225
3.6 MCU控制指令 227
3.7 AVR汇编语言系统 228
3.7.1 汇编语言语句格式 228
3.7.2 汇编器伪指令 229
3.7.3 表达式 233
3.7.4 文件“m8def.inc” 235
4.1 AVR STUDIO(AVR集成开发环境) 237
4.1.1 汇编程序汇编器(AVR Assembler) 237
第4章 ATmega8开发工具 237
4.1.2 仿真调试 240
4.2 AVR单片机C编译器--ICCAVR的使用 241
4.2.1 ICCAVR编译器的安装 241
4.2.2 ICCAVR介绍 242
4.2.3 ICCAVR导游 244
4.2.4 ICCAVR的IDE环境 246
4.2.5 C库函数与启动文件 248
4.2.6 访问AVR硬件的编程 257
4.2.7 应用简单举例 268
4.3 SL-MEGA8开发实验器 270
4.3.1 SL-MEGA8开发实验器硬件结构 271
4.4 ATmega8的编程操作 273
第5章 ATmega8应用设计 279
5.1 硬件I2C的应用 279
5.2 A/D转换器的应用 284
5.3 USART接口的应用 287
5.4 ATmega8实时时钟的应用 290
5.5 BOOT引导区的应用 293