第1章 AVR单片嵌入式系统 1
1.1 嵌入式系统概述 1
1.1.1 嵌入式系统简介 1
1.1.2 嵌入式系统的基本架构 3
1.1.3 嵌入式系统的特点 6
1.1.4 嵌入式系统的应用 6
1.1.5 嵌入式系统的展望 8
1.2 单片嵌入系统 9
1.2.1 单片嵌入系统简介 9
1.2.2 单片嵌入系统的结构 9
1.2.3 单片机 10
1.3 AVR单片嵌入系统 14
1.3.1 AVR单片机简介 14
1.3.2 AVR系列单片机特点 14
1.3.3 AVR系列单片机 15
1.3.4 SHX—AVR128开发板简介 18
1.3.5 AVR单片机的开发工具 18
1.3.6 AVR单片机的应用 19
第2章 AVR单片机系统结构 20
2.1 AVR单片机系统简介 20
2.1.1 AVR单片机基本结构 20
2.1.2 ATmega128单片机的内部结构 22
2.1.3 ATmega128的特点 23
2.1.4 ATmega128与ATmega103的兼容性 25
2.1.5 ATmega128引脚说明 26
2.2 ATmega128的微控制器MCU 28
2.2.1 算术逻辑单元ALU 28
2.2.2 状态寄存器 28
2.2.3 通用工作寄存器文件 29
2.2.4 X、Y、Z地址指针寄存器 30
2.2.5 堆栈指针寄存器(SP) 30
2.2.6 RAM页面的Z选择寄存器(RAMPZ) 30
2.3 ATmega128的存储器组织 31
2.3.1 程序存储器Flash 31
2.3.2 数据存储器SRAM 31
2.3.3 EEPROM存储器 32
2.4 系统的时钟部件 39
2.4.1 时钟系统及其分布 39
2.4.2 系统时钟源 40
2.4.3 定时器/计数器振荡器 44
2.4.4 内部看门狗时钟 44
2.4.5 CPU的工作时序 44
2.4.6 ATmega128单片机的系统复位 45
2.5 ATmega128单片机的节电方式和电源管理 49
2.6 ATmega128单片机最小系统 53
第3章 AVR单片机的指令系统 55
3.1 AVR单片机指令系统简介 55
3.1.1 AVR单片机的指令系统的特点 55
3.1.2 AVR单片机的指令系统 55
3.2 AVR单片机的指令格式 56
3.2.1 指令符号 56
3.2.2 函数表达式 57
3.2.3 AVR指令与标志位的关系 58
3.3 AVR单片机的寻址方式 58
3.3.1 程序直接寻址 59
3.3.2 程序间接寻址 59
3.3.3 程序相对寻址 60
3.3.4 程序取常量寻址 60
3.3.5 单寄存器直接寻址 61
3.3.6 双寄存器直接寻址 61
3.3.7 堆栈寄存器间接寻址 62
3.3.8 I/O寄存器直接寻址 62
3.3.9 数据存储器直接寻址 63
3.3.10 数据存储器间接寻址 63
3.3.11 程序存储器数据寻址 64
3.3.12 数据存储器带预减量间接寻址 64
3.3.13 数据存储器带后增量间接寻址 65
3.3.14 数据存储器带位移的间接寻址 65
3.3.15 程序存储器带后增量的空间取常量寻址 66
3.4 算术和逻辑指令 66
3.4.1 加法指令 67
3.4.2 减法指令 68
3.4.3 乘法指令 70
3.4.4 逻辑与指令 74
3.4.5 逻辑或指令 75
3.4.6 逻辑异或指令 76
3.4.7 取反码指令 77
3.4.8 取补码指令 77
3.5 比较和转移指令 77
3.5.1 无条件转移指令 78
3.5.2 调用及返回指令 79
3.5.3 条件转移指令 81
3.6 数据传输指令 89
3.6.1 数据传输到寄存器的指令 90
3.6.2 数据传输到SRAM中的指令 96
3.6.3 写程序存储器指令 99
3.6.4 堆栈操作指令 99
3.7 位和位测试指令 100
3.7.1 位变量修改指令 101
3.7.2 带进位逻辑操作指令 105
3.7.3 位变量传送指令 107
3.8 MCU控制指令 108
第4章 ATmega128可编程I/O端口 109
4.1 ATmega128的I/O端口 109
4.1.1 I/O端口的基本结构 109
4.1.2 数字输入使能和睡眠模式 112
4.1.3 I/O端口的第二功能 112
4.1.4 I/O端口的特点 113
4.1.5 I/O端口使用注意事项 114
4.2 I/O寄存器 114
4.2.1 I/O寄存器操作的特点 114
4.2.2 I/O寄存器的C语言程序 114
4.2.3 特殊功能I/O寄存器(SFIOR) 115
4.3 各个端口说明 115
4.3.1 PA口 115
4.3.2 PB口 116
4.3.3 PC口 118
4.3.4 PD口 119
4.3.5 PE口 120
4.3.6 PF口 122
4.3.7 PG口 123
4.4 I/O口的应用 124
4.4.1 I/O口寄存器的常用操作指令 124
4.4.2 I/O口的编程 125
第5章 定时器/计数器 133
5.1 定时/计数器的预分频器 133
5.1.1 T/C0的预分频器 133
5.1.2 T/C1、T/C2和T/C3的预分频器 134
5.1.3 特殊功能寄存器 134
5.2 8 位定时/计数器0 135
5.2.1 定时/计数器0的组成结构 135
5.2.2 与T/C0相关的寄存器 138
5.2.3 工作模式 142
5.2.4 T/C0时序图 143
5.3 16位定时/计数器1 144
5.3.1 定时/计数器的组成结构 145
5.3.2 与T/C1有关的寄存器 149
5.3.3 工作模式 155
5.3.4 T/C1时序图 156
5.3.5 对16位寄存器的访问以及编程 157
5.4 定时/计数器的应用 160
第6章 AVR单片机的EEPROM 169
6.1 EEPROM简介 169
6.1.1 EEPROM的读/写访问 169
6.1.2 EEPROM相关的I/O寄存器 170
6.2 EEPROM的读/写编程 172
6.2.1 存储器编程 172
6.2.2 EEPROM的C编程 180
6.2.3 EEPROM的汇编程序 183
6.3 EEPROM的C编程实例 183
6.3.1 记录开机次数 183
第7章 AVR单片机中断系统 185
7.1 中断系统简介 185
7.1.1 中断源与中断向量 186
7.1.2 MCU控制寄存器(MCUCR) 190
7.2 中断处理 191
7.2.1 中断的作用 191
7.2.2 中断处理过程 191
7.3 外部中断 193
7.3.1 外部中断简介 193
7.3.2 外部中断寄存器 193
7.4 中断系统的编程 196
7.4.1 ICCAVR语言中断服务程序的编写 196
7.4.2 汇编语言中断服务程序的编写 198
7.5 中断应用实例 201
7.5.1 AVR单片机外部中断INT0 201
7.5.2 数码管对数字的显示 201
第8章 AVR单片机模拟信号输入接口 203
8.1 模/数转换器ADC 203
8.1.1 ADC简介 203
8.1.2 ADC的操作 205
8.1.3 ADC相关的I/O寄存器 214
8.1.4 ADC的编程应用 217
8.2 模拟比较器 230
8.2.1 模拟比较器件简介 230
8.2.2 与模拟比较器有关的寄存器 230
8.2.3 模拟比较器的多路输入 232
8.2.4 模拟比较器的应用举例 232
第9章 AVR单片机的SPI 236
9.1 同步串行通信 236
9.1.1 同步串行通信简介 236
9.1.2 串行通信接口 237
9.1.3 同步串行接口SPI 238
9.2 ATmega128单片机的同步串行接口 239
9.2.1 同步串行接口的特点 239
9.2.2 同步串行接口的操作 239
9.2.3 SPI的工作模式 241
9.3 SPI相关的I/O寄存器 242
9.4 SPI的编程 244
9.4.1 SPI函数 244
9.4.2 SPI初始化与数据传送编程 245
9.4.3 SPI应用实例 246
第10章 串行TWI接口 259
10.1 串行通信的基础概念 259
10.2 I2C总线协议 259
10.2.1 I2C总线的基本结构 260
10.2.2 I2C总线时序 261
10.2.3 I2C总线的数据传送 261
10.2.4 I2C总线的竞争仲裁 262
10.3 ATmega128单片机的两线串行接口TWI 263
10.3.1 两线串行接口的定义 263
10.3.2 TWI模块 264
10.3.3 TWI相关寄存器 266
10.3.4 使用TWI 268
10.3.5 多主机系统和仲裁 275
10.3.6 应用TWI接口的简单例子 276
10.4 TWI接口的应用 278
第11章 USART接口 292
11.1 异步串行通信基础 292
11.2 ATmega128的USART异步串行传输接口 293
11.2.1 基本结构 293
11.2.2 USART与UART的兼容性 294
11.2.3 USART时钟 295
11.2.4 数据帧格式 297
11.3 访问USART 297
11.3.1 USART初始化 298
11.3.2 发送数据 298
11.3.3 接收数据 301
11.3.4 异步数据接收 304
11.3.5 多处理器通信模式 306
11.4 与USART相关的寄存器 307
11.5 USART的应用 311
第12章 集成开发环境ICC AVR 323
12.1 用C语言开发单片机 323
12.1.1 C语言开发入门 323
12.1.2 C程序的剖析 324
12.1.3 C语言的运行结构 325
12.2 ICC AVR简介 327
12.2.1 ICC AVR介绍 327
12.2.2 ICC AVR中文件类型及其扩展名 327
12.2.3 附注和扩充 328
12.3 ICC AVR的安装和注册 329
12.3.1 ICC AVR的安装 329
12.3.2 ICC AVR的运行 330
12.3.3 ICC AVR的注册 330
12.4 ICC AVR的IDE环境 331
12.4.1 工程管理 331
12.4.2 编译一个单独的文件 332
12.4.3 创建一个新的工程 332
12.4.4 应用构筑向导生成工程文件 333
12.5 ICC AVR的设置与使用 335
12.5.1 ICC AVR的Compiler Options设置 335
12.5.2 ICC AVR的Environment Options设置 338
12.5.3 ICC AVR的使用 339
12.5.4 创建初始化程序和源程序框架 341
12.5.5 下载程序文件 343
12.6 ICC AVR的库函数 344
12.6.1 头文件 345
12.6.2 字符类型函数 345
12.6.3 浮点运算函数 346
12.6.4 标准输入/输出函数 346
12.6.5 读/写内置EEPROM函数 347
12.6.6 标准库和内存分配函数 348
12.6.7 字符串函数 348
12.6.8 变量参数函数 349
12.6.9 堆栈检查函数 350
12.7 对AVR的编程 351
12.7.1 访问AVR底层设置 351
12.7.2 位操作 351
12.7.3 程序存储器和常量数据 352
12.7.4 字符串 353
12.7.5 堆栈 353
12.7.6 在线汇编 354
12.7.7 I/O寄存器 354
12.7.8 绝对内存地址 355
12.7.9 C任务 356
12.7.10 中断操作 356
12.7.11 访问UART 357
12.7.12 访问EEPROM 357
第13章 集成开发环境AVR Studio 359
13.1 AVR Studio的简介 359
13.1.1 AVR Studio支持的工具与器件 359
13.1.2 安装AVR Studio 362
13.1.3 运行AVR Studio 365
13.2 AVR Studio的IDE 368
13.2.1 菜单栏(Menu) 368
13.2.2 工具栏(Toolbars) 371
13.2.3 编辑区 372
13.2.4 工程区 373
13.2.5 状态区 373
13.2.6 I/O区 374
13.2.7 存储器区 375
13.2.8 寄存器区 377
13.2.9 反汇编区 377
13.2.10 输出区 378
13.3 设置AVR tudio 378
13.3.1 汇编器的选择 378
13.3.2 调试的设置 380
13.3.3 断点的设置 383
13.4 查看和修改状态 386
13.4.1 查看和修改机器状态 386
13.4.2 查看和修改寄存器与变量的值 387
13.5 AVR的汇编 387
13.5.1 AVR汇编语句格式 387
13.5.2 AVR汇编器 388
13.5.3 AVR下载线 392
第14章 AVR综合应用实例 396
14.1 基于ATmega128的MP3播放机设计 396
14.1.1 系统整体设计 396
14.1.2 硬件设计 397
14.1.3 软件设计 399
14.2 基于ATmega128 CAN-GPRS网关的设计 419
14.2.1 系统整体设计 419
14.2.2 硬件设计 420
14.2.3 软件设计 421
14.3 基于ATmega128的电机调速系统设计 422
14.3.1 系统整体设计 422
14.3.2 硬件设计 423
14.3.3 软件设计 424
14.4 基于ATmega128的智能跑步机控制器设计 426
14.4.1 系统整体设计 426
14.4.2 硬件设计 427
14.4.3 软件设计 428