第1章 AVR单片机概述 1
1.1 AVR与51单片机 1
1.2 AVR单片机及其发展 3
1.2.1 AVR单片机简介 3
1.2.2 AVR单片机的特点 4
1.2.3 AVR单片机的分类 5
1.2.4 AVR单片机应用领域 6
1.3 AVR单片机开发产品的优势 7
1.4 ATmega128(L)单片机 8
1.4.1 ATmega128(L)的结构和特点 9
1.4.2 ATmega128(L)的主要性能 10
1.4.3 ATmega128(L)的封装与引脚 12
思考与练习 16
第2章 ATmega 128单片机硬件结构 17
2.1 ATmega128的内核 17
2.1.1 ATmega128的中央处理器 18
2.1.2通用工作寄存器组 19
2.1.3 I/O寄存器 20
2.1.4状态寄存器和堆栈指针寄存器 21
2.1.5 CPU的工作时序 23
2.2 ATmega128存储器 24
2.2.1系统内可编程的Flash程序存储器 24
2.2.2数据存储SRAM 25
2.2.3 E2 PROM数据存储器 27
2.3 ATmega128的系统时钟及电源管理 30
2.3.1系统时钟 30
2.3.2晶体振荡器 32
2.3.3低频晶体振荡器 33
2.3.4外部RC振荡器 33
2.3.5标定的片内RC振荡器 34
2.3.6外部时钟 35
2.4电源管理与休眠模式 37
2.4.1空闲模式 38
2.4.2掉电模式 38
2.4.3省电模式 38
2.4.4 Standby模式 39
2.4.5最小化功耗 39
2.5 ATmega128的复位 40
2.6 ATmega128单片机开发起步 44
2.6.1 ATmega128单片机系统设计 45
2.6.2 AVR的程序下载 46
2.6.3 ATmega128的熔丝位配置 47
2.6.4 AVR单片机ISP下载线制作 49
思考与练习 51
第3章 ATmega128的指令系统 52
3.1 ATmega128的指令系统概述 52
3.2 AVR指令格式和约定符号 52
3.3算术和逻辑指令 54
3.3.1算术运算指令 54
3.3.2比较指令 58
3.3.3逻辑运算指令 58
3.4跳转指令 60
3.4.1无条件跳转指令 60
3.4.2条件跳转指令 61
3.4.3子程序调用和返回指令 66
3.5数据传送指令 67
3.5.1直接寻址数据传送指令 68
3.5.2间接寻址数据传送指令 68
3.5.3从程序存储器中取数装入寄存器指令 70
3.5.4写程序存储器指令 71
3.5.5 I/O口数据传送 71
3.5.6堆栈操作指令 72
3.6位操作和位测试指令 72
3.6.1带进位逻辑操作指令 72
3.6.2位变量传送指令 73
3.6.3位变量修改指令 74
3.7 MCU控制指令 77
3.8 AVR汇编语言格式 77
思考与练习 79
第4章 AVR单片机的开发环境 80
4.1 AVR单片机硬件开发环境 80
4.2 AVR单片机软件开发环境 80
4.3 ICCAVR集成开发环境 81
4.3.1 ICCAVR功能介绍 82
4.3.2 ICCAVR的IDE环境 83
4.3.3菜单 86
4.3.4 ICCAVR中常用库函数介绍 92
4.4 AVR访问硬件编程 93
4.4.1 AVR硬件操作 93
4.4.2位操作 93
4.4.3在线汇编 94
4.4.4 I/O寄存器 94
4.4.5中断操作 95
4.4.6访问UART 96
4.4.7访问E2PROM 96
4.5 AVR Studio开发环境的使用 96
4.5.1安装AVR Studio开发环境 96
4.5.2 AVR Studio的应用 97
4.5.3使用软件仿真调试程序 99
思考与练习 102
第5章 AVR单片机C语言编程基础 103
5.1 C语言的组成及特点 103
5.2运算符和表达式 105
5.3 C程序语句及程序结构 107
5.3.1顺序结构程序设计 107
5.3.2选择结构的基本形式 107
5.3.3循环结构的基本形式 111
5.4数组 114
5.4.1一维数组 115
5.4.2数组的初始化 115
5.5指针变量和指针运算符 116
5.5.1指针变量定义及指针运算 116
5.5.2指针变量的引用 118
5.6函数与参数传递 118
5.6.1函数定义的一般形式 118
5.6.2形式参数与实际参数 119
5.6.3函数的返回值 120
5.6.4函数的调用 120
5.6.5函数的声明 121
5.7编译预处理 121
5.7.1宏定义 122
5.7.2文件包含 122
5.7.3条件编译 123
5.8结构体与链表 126
5.8.1结构体的定义和引用 126
5.8.2结构体类型定义 126
5.8.3结构体类型变量的定义 127
5.8.4结构体变量的初始化和成员引用 128
5.9位运算符 129
思考与练习 130
第6章 I/O口的应用 131
6.1通用I/O口的基本结构与特性 131
6.1.1 I/O端口概述 131
6.1.2 I/O端口寄存器 132
6.1.3通用数字I/O口的设置与编程 134
6.2 I/O口控制流水灯实例 136
6.2.1典型器件发光二极管介绍 137
6.2.2硬件设计 137
6.2.3程序设计详解 139
6.3 I/O口控制数码管显示实例 142
6.3.1数码管介绍 142
6.3.2硬件设计 145
6.3.3程序设计详解 147
6.4 I/O口控制诺基亚5510液晶显示屏实例 149
6.4.1诺基亚5510液晶屏控制器PCD8544介绍 149
6.4.2硬件设计 156
6.4.3程序设计详解 157
6.5 I/O口控制1602液晶显示实例 164
6.5.1 1602字符型LCD 164
6.5.2 LCD的基本参数及引脚功能 164
6.5.3 1602LCD的指令说明及时序 165
6.5.4 1602LCD的RAM地址映射及标准字库表 167
6.5.5 1602LCD的一般初始化(复位)过程 167
6.5.6硬件设计 169
6.5.7程序设计详解 169
6.6 I/O口控制12864中文液晶显示实例 173
6.6.1概述 173
6.6.2模块引脚说明 174
6.6.3接口时序 175
6.6.4用户指令集 176
6.6.5显示坐标 181
6.6.6显示RAM 182
6.6.7汉字取模 184
6.6.8硬件设计 185
6.6.9程序设计详解 185
思考与练习 189
第7章 定时/计数器的结构与应用 190
7.1定时/计数器概述 190
7.2 8位定时/计数器的结构与寄存器配置 190
7.2.1 T/C0的组成结构 191
7.2.2与T/C0相关的寄存器 196
7.2.3 8位T/C0的工作模式 201
7.2.4 8位T/C0的计数工作时序 204
7.3 16位定时/计数器T/C 1的应用 206
7.3.1 16位定时/计数器功能介绍 207
7.3.2 T/C1的控制寄存器说明 209
7.4利用定时器实现秒表 215
7.4.1硬件连接 216
7.4.2程序设计详解 217
7.5利用定时器0实现PWM输出 220
7.5.1硬件连接 221
7.5.2程序设计详解 221
思考与练习 223
第8章 中断系统基本应用 224
8.1为什么要用中断 224
8.2 ATmega128的中断系统 225
8.2.1 ATmega128的中断源和中断向量 225
8.2.2 ATmega128的中断控制 227
8.2.3 AVR的中断响应过程 229
8.3中断服务程序的编写 230
8.4 ATmega128的外部中断 235
8.4.1外部中断控制寄存器A——EICRA 236
8.4.2外部中断控制寄存器B——EICRB 237
8.4.3外部中断屏蔽寄存器——EIMSK 237
8.4.4外部中断标志寄存器——EIFR 238
8.5外部中断应用实例 238
8.5.1硬件连接 238
8.5.2程序设计详解 239
思考与练习 241
第9章 模拟比较器和ADC接口 242
9.1模拟比较器 242
9.2模数转换器ADC 245
9.2.1 10位ADC结构 245
9.2.2 ADC相关的I/O寄存器 246
9.2.3 ADC应用设计要点 250
9.3 ADC的应用实例1 252
9.3.1硬件电路 253
9.3.2程序设计详解 253
9.4 ADC的应用实例2 256
9.4.1硬件电路 256
9.4.2程序设计详解 257
思考与练习 265
第10章 串行接口及应用接口 266
10.1同步串行接口SPI 266
10.1.1 SPI简介 266
10.1.2 ATmega128的SPI接口的特点 267
10.1.3 SS引脚的功能 270
10.1.4与SPI相关的寄存器 271
10.1.5数据模式 273
10.1.6 SPI应用实例 274
10.2 USART 275
10.2.1时钟产生 277
10.2.2 USART的初始化 280
10.2.3数据发送——USART发送器 281
10.2.4数据接收——USART接收器 283
10.2.5异步数据接收 286
10.2.6访问UBRRH/UCSRC寄存器 289
10.2.7 USART寄存器描述 290
10.3串口通信应用实例 294
10.3.1器件介绍 294
10.3.2硬件设计 298
10.3.3程序设计详解 298
10.4两线串行接口TWI 301
10.4.1两线串行接口总线定义 301
10.4.2电气连接 302
10.4.3数据传输和帧格式 302
10.4.4 TWI模块综述 305
10.4.5 TWI寄存器说明 307
10.4.6使用TWI 310
10.4.7数据传输模式 313
10.5 TWI应用实例 317
10.5.1器件介绍 318
10.5.2硬件设计 319
10.5.3程序设计详解 319
思考与练习 323
第11章 电机、继电器和键盘输入的控制 324
11.1直流电机简介 324
11.2直流电机常用驱动方案 326
11.3直流电机控制实例 335
11.4步进电机控制实例 336
11.5继电器控制 339
11.6 PS/2键盘控制 340
11.7独立按键和矩阵键盘的识别 347
11.7.1按键的分类 347
11.7.2矩阵式键盘的结构与工作原理 348
11.7.3矩阵式键盘的按键识别方法 348
11.7.4独立式按键的结构和工作原理 348
11.7.5键盘的扫描工作方式 349
11.7.6独立按键和矩阵按键识别应用实例 350
思考与练习 357
第12章 点阵LED屏的控制 358
12.1 LED点阵屏驱动电路 358
12.2字模数据 360
12.3点阵字库 361
12.4几种常用的字符动态编码显示方案 361
12.5点阵屏控制实例 362
12.5.1硬件设计 362
12.5.2程序设计详解 362
思考与练习 373
第13章 红外遥控器的解码 374
13.1红外遥控简介 374
13.1.1红外光的利用 374
13.1.2红外光的调制 375
13.1.3发射器 375
13.1.4接收器 376
13.1.5常用的HT6221遥控器芯片简介 376
13.1.6 HT6221编码特征 378
13.1.7遥控器解码方法及软件说明 379
13.2红外遥控解码实例 379
13.2.1硬件设计 379
13.2.2软件设计及详解 380
思考与练习 384
第14章 DS 18B20温度传感器的应用 385
14.1 DS 18B20温度传感器概述 385
14.2 DS 18B20芯片封装结构及引脚功能 385
14.3 DS 18B20工作原理及应用 386
14.4 DS 18B20芯片与单片机的接口 388
14.5 DS 18B20芯片ROM指令和存储器操作指令 388
14.6 DS 18B20复位及应答关系 390
14.7应用实例——温度检测和显示 391
14.7.1硬件设计 391
14.7.2程序设计详解 391
14.7.3设计过程 392
思考与练习 397
第15章 时钟芯片DS 1302的应用 398
15.1 DS1302使用介绍 398
15.1.1概述 398
15.1.2 DS1302的结构及性能 398
15.1.3 DS1302管脚描述 399
15.1.4 DS1302内部寄存器 400
15.1.5 DS1302与微控制器的接口软件及功能应用 403
15.2时钟芯片DS 1302应用实例 403
15.2.1程序设计详解 404
15.2.2设计过程 405
思考与练习 411
第16章 MP3播放器的设计 412
16.1 MP3播放器设计简介 412
16.2典型器件VS 1003介绍 413
16.2.1 VS1003的特性 413
16.2.2 VS1003的引脚定义 414
16.2.3 VS1003的功能寄存器 416
16.2.4 VS1003的驱动注意事项 419
16.3 FAT格式文件数据的读取 427
16.4主程序的编写 432