第1篇 基础与入门 2
第1章 单片机嵌入式系统概述 2
1.1 嵌入式系统简介 2
1.1.1 嵌入式计算机系统 2
1.1.2 单片机嵌入式系统 4
1.1.3 单片机的发展历史 5
1.1.4 单片机的发展趋势 6
1.2 单片机嵌入式系统的结构与应用领域 9
1.2.1 单片机嵌入式系统的结构 9
1.2.2 单片机嵌入式系统的应用领域 10
1.3 AVR单片机简介 11
1.3.1 ATMEL公司的单片机简介 11
1.3.2 AVR单片机的主要特点 13
1.3.3 AVR单片机系列简介 14
1.3.4 AVR与51单片机 18
思考与练习 19
第2章 AVR单片机的基本结构 20
2.1 单片机的基本组成 20
2.1.1 单片机的基本组成结构 20
2.1.2 单片机的基本单元与作用 21
2.2 ATmega16单片机的组成 24
2.2.1 AVR单片机的内核结构 24
2.2.2 ATmega16的特点 26
2.2.3 ATmage16的外部引脚与封装 27
2.3 ATmega16单片机的内部结构 29
2.3.1 中央处理器CPU 29
2.3.2 系统时钟部件 32
2.3.3 CPU的工作时序 33
2.3.4 存储器 35
2.3.5 I/O端口 35
2.4 存储器结构和地址空间 35
2.4.1 支持ISP的Flash程序存储器 35
2.4.2 数据存储器SRAM空间 36
2.4.3 内部EEPROM存储器 36
2.5 通用寄存器组与I/O寄存器 37
2.5.1 通用寄存器组 37
2.5.2 I/O寄存器 38
2.5.3 状态寄存器和堆栈指针寄存器 41
2.6 ATmega16单片机的工作状态 43
2.6.1 AVR单片机最小系统 44
2.6.2 AVR的复位源和复位方式 45
2.6.3 对AVR的编程下载 49
2.6.4 ATmega16的熔丝位 50
2.6.5 AVR单片机的工作状态 52
2.6.6 支持ISP编程的最小系统设计 53
2.7 AVR单片机内部资源的扩展和剪裁 55
思考与练习 55
第3章 AVR的指令与汇编系统 57
3.1 ATmega16指令综述 57
3.1.1 指令格式及3种表示方式 58
3.1.2 AVR指令系统中使用的符号 59
3.1.3 AVR指令的寻址方式和寻址空间 60
3.1.4 AVR指令操作结果对标志位的影响 66
3.2 算术和逻辑指令 66
3.2.1 加法指令 66
3.2.2 减法指令 67
3.2.3 取反码指令 68
3.2.4 取补码指令 68
3.2.5 比较指令 69
3.2.6 逻辑“与”指令 69
3.2.7 逻辑“或”指令 70
3.2.8 逻辑“异或”指令 71
3.2.9 乘法指令 71
3.3 跳转指令 73
3.3.1 无条件跳转指令 73
3.3.2 条件跳转指令 74
3.3.3 子程序调用和返回指令 80
3.4 数据传送指令 81
3.4.1 直接寻址数据传送指令 81
3.4.2 间接寻址数据传送指令 82
3.4.3 从程序存储器中取数装入寄存器指令 84
3.4.4 写程序存储器指令 86
3.4.5 I/O口数据传送指令 86
3.4.6 堆栈操作指令 86
3.5 位操作和位测试指令 87
3.5.1 带进位逻辑操作指令 87
3.5.2 位变量传送指令 88
3.5.3 位变量修改指令 88
3.6 MCU控制指令 91
3.7 AVR汇编语言系统 92
3.7.1 汇编语言语句格式 93
3.7.2 汇编器伪指令 93
3.7.3 表达式 98
3.7.4 器件定义头文件m16def.inc 100
第4章 AVR单片机的系统设计与开发工具 103
4.1 单片机嵌入式应用系统设计 103
4.1.1 单片机嵌入式系统开发所需的基础知识和技能 103
4.1.2 单片机嵌入式系统开发过程 105
4.2 单片机嵌入式系统的开发工具与环境 108
4.2.1 单片机嵌入式系统的程序设计语言 108
4.2.2 单片机嵌入式系统的开发软件平台 109
4.2.3 单片机嵌入式系统的硬件开发工具 110
4.2.4 AVR单片机嵌入式系统的软件开发平台 113
4.2.5 AVR实验开发板 118
4.3 自制ISP下载电缆 124
4.4 AVR开发环境的建立 127
4.4.1 AVR研发型开发环境 127
4.4.2 AVR学习型实验开发环境 127
思考与练习 128
第5章 实战练习(一) 129
5.1 秒节拍显示器系统的设计 129
5.1.1 秒节拍显示器硬件设计 129
5.1.2 秒节拍显示器软件设计思路 131
5.1.3 秒节拍显示器汇编源程序 131
5.1.4 通用延时子程序分析 132
5.2 AVR Studio汇编语言集成开发环境的使用 133
5.2.1 AVR Studio和其他辅助工具的安装 134
5.2.2 系统工程文件与AVR汇编源程序文件的建立、编译 134
5.2.3 使用软件模拟仿真调试程序 138
5.3 CVAVR+AVR Studio——高级语言集成开发环境的使用 142
5.3.1 秒节拍显示器的高级C语言源程序 142
5.3.2 系统工程文件与源程序文件的建立、编译 143
5.3.3 在CVAVR中使用AVR Studio进行软件模拟仿真调试程序 146
5.4 AVR熔丝位的设置和执行代码下载 147
5.4.1 AVR-51多功能板的硬件连接 148
5.4.2 AVR熔丝位的配置 148
5.4.3 执行代码文件的下载 151
5.5 一个比较复杂的AVR汇编语言实例 153
5.5.1 系统功能与硬件设计 153
5.5.2 AVR汇编源代码 154
思考与练习 162
第2篇 基本功能单元的应用 164
第6章 通用I/O接口的基本结构与输出应用 164
6.1 通用I/O接口的基本结构与特性 164
6.1.1 I/O接口的基本结构 164
6.1.2 I/O接口寄存器 167
6.1.3 通用数字I/O接口的设置与编程 168
6.2 通用I/O接口的输出应用 171
6.2.1 通用I/O接口的输出设计要点 171
6.2.2 LED发光二极管的控制 171
6.2.3 继电器控制 174
6.2.4 步进电机控制 175
6.3 LED数码显示器的应用 177
6.3.1 单个LED数码管控制 177
6.3.2 多位LED数码管显示 180
6.3.3 点阵LED显示控制 188
6.4 LCD液晶显示器的应用 190
6.4.1 LCD的特点与分类 191
6.4.2 通用点阵字符LCD显示器的应用 191
思考与练习 197
第7章 中断系统与基本应用 198
7.1 中断的基本概念 198
7.1.1 中断处理过程 198
7.1.2 中断源、中断信号和中断向量 199
7.1.3 中断优先级和中断嵌套 200
7.1.4 中断响应条件与中断控制 201
7.2 ATmega16的中断系统 203
7.2.1 ATmega16的中断源和中断向量 203
7.2.2 ATmega16的中断控制 205
7.2.3 AVR的中断响应过程 207
7.3 中断服务程序的编写 209
7.3.1 汇编语言AVR中断程序的编写 209
7.3.2 CodeVision中断程序的编写 214
7.4 ATmega16的外部中断 217
7.4.1 外部中断的触发方式和特点 217
7.4.2 与外部中断相关的寄存器和标志位 218
7.5 外部中断应用实例 221
思考与练习 232
第8章 定时/计数器的结构与应用 233
8.1 定时/计数器的结构 233
8.1.1 8位定时/计数器T/C0的结构 234
8.1.2 8位T/C0的工作模式 242
8.1.3 8位T/C0的计数工作时序 246
8.2 8位定时/计数器T/C0的应用 248
8.2.1 外部事件计数器 248
8.2.2 定时器应用设计 253
8.3 PWM脉宽调制波的产生和应用 258
8.3.1 PWM脉宽调制波 258
8.3.2 基于比较匹配输出的脉冲宽度调制PWM 260
8.4 16位定时/计数器T/C1的应用 263
8.4.1 16位T/C1增强功能介绍 264
8.4.2 16位T/C1应用示例 267
思考与练习 272
第9章 键盘输入接口与状态机设计 273
9.1 通用I/O数字输入接口设计 273
9.1.1 I/O输入接口硬件设计要点 273
9.1.2 I/O输入接口软件设计要点 275
9.2 基于状态机的按键输入接口设计 276
9.2.1 简单的按键输入硬件接口与分析 276
9.2.2 基于状态机的按键输入软件接口设计 278
9.3 矩阵键盘输入接口设计 291
9.3.1 矩阵键盘的工作原理和扫描确认方式 292
9.3.2 定时扫描方式的键盘接口程序 293
思考与练习 301
第10章 模拟比较器和ADC接口 302
10.1 模拟比较器 302
10.1.1 与模拟比较器相关的寄存器和标志位 302
10.1.2 模拟比较器的应用设计 305
10.2 模/数转换器ADC 306
10.2.1 10位ADC结构 307
10.2.2 与ADC相关的I/O寄存器 309
10.2.3 ADC应用设计要点 313
10.2.4 ADC的应用设计 315
10.2.5 ADC应用设计的深入讨论 318
思考与练习 321
第11章 实践练习(二) 322
11.1 频率测量和简单频率计的设计与实现 322
11.1.1 频率测量原理 322
11.1.2 测频法测量频率 323
11.1.3 测周法测量频率 326
11.1.4 频率测量小结 330
11.2 基于T/C1捕捉功能实现高精度的周期测量 330
11.3 带校时和音乐报时功能时钟的设计与实现 338
思考与练习 344
第3篇 串行接口与通信 348
第12章 串行数据接口概述 348
12.1 串行接口与串行通信基础知识 348
12.1.1 并行传输 348
12.1.2 串行传输 349
12.1.3 常见的串行传输和通信接口 350
12.2 数字I/O口的串行扩展 351
12.2.1 串行扩展并行输出口 352
12.2.2 串行扩展并行输入口 355
12.2.3 数字I/O口串行扩展设计要点 357
思考与练习 357
第13章 异步通信与USART接口基础 359
13.1 异步传输的基本概念 359
13.1.1 异步传输的字符数据帧格式 359
13.1.2 异步通信 361
13.2 AVR的异步传输接口USART 362
13.2.1 概述 363
13.2.2 串行时钟发生器 364
13.2.3 数据帧格式 366
13.2.4 USART寄存器 367
13.2.5 串行通信波特率的设置与偏差 372
13.3 USART的基本操作 375
13.3.1 USART的初始化 375
13.3.2 数据发送 376
13.3.3 数据接收 379
13.4 基于USART接口基本通信的实现与测试 382
13.4.1 USART的数据发送和接收 382
13.4.2 RS-232C总线标准介绍 386
13.4.3 AVR系统的RS-232C传输接口的实现与测试 388
13.4.4 异步通信中易产生的问题与AVR系统时钟的选择 394
13.5 AVR USART接口特性的进一步说明 394
13.5.1 使用独立的高精度波特率发生器 394
13.5.2 数据接收采用3级接收缓冲器结构 395
13.5.3 硬件自动处理校验位及错误检测 395
13.5.4 USART数据接收的硬件扫描检测和接收时序 395
思考与练习 397
第14章 USART实用设计基础 399
14.1 异步通信接口应用设计要点 399
14.1.1 接口的硬件设计 399
14.1.2 上层应用通信协议和规范的制定 401
14.1.3 典型USART底层驱动+中间层软件结构示例 402
14.2 一个USART应用的完整示例 407
14.2.1 硬件系统构成 407
14.2.2 通信协议的制定 408
14.2.3 下位机系统程序 409
14.2.4 测试和上位机程序 413
14.3 基于异步通信接口实现多机通信 414
14.3.1 多机通信实现原理 414
14.3.2 多机通信实现方式一 415
14.3.3 多机通信的通用实现方式 417
思考与练习 422
第15章 串行SPI接口应用 424
15.1 SPI串行总线介绍 424
15.1.1 SPI总线的组成 424
15.1.2 SPI通信的工作模式和时序 425
15.1.3 多机SPI通信 427
15.2 AVR的SPI接口原理与使用 428
15.2.1 SPI接口的结构和功能 428
15.2.2 与SPI相关的寄存器 431
15.2.3 SPI接口的设计应用要点 433
15.3 SPI接口应用实例 435
15.3.1 SPI接口基本方式的应用 435
15.3.2 典型SPI底层驱动+中间层软件结构示例 443
思考与练习 445
第16章 串行TWI(I2C)接口应用 447
16.1 I2C串行总线介绍 447
16.1.1 I2C总线结构和基本特性 447
16.1.2 I2C总线时序与数据传输 448
16.1.3 I2C总线寻址与通信过程 450
16.2 AVR的TWI(I2C)接口与使用 452
16.2.1 TWI模块概述 452
16.2.2 TWI寄存器 454
16.2.3 使用TWI总线 458
16.2.4 TWI(I2C)接口设计应用要点 466
16.3 TWI接口应用实例 467
16.3.1 24C256的结构特点 468
16.3.2 AVR读/写24C256应用设计 471
16.4 专用键盘/LED驱动器ZLG7290的应用 485
16.4.1 ZLG7290简介 485
16.4.2 AVR与ZLG7290的连接 486
思考与练习 488
第4篇 进入实战 491
第17章 AVR片内资源应用补遗 491
17.1 AVR熔丝位的功能与配置 491
17.1.1 AVR熔丝位的正确配置 492
17.1.2 ATmega16中重要熔丝位的配置 493
17.1.3 JTAG口的使用与配置 494
17.1.4 提高系统可靠性的熔丝位配置 496
17.1.5 片内WDT的应用 497
17.2 片内EEPROM的应用 501
17.2.1 EEROM的读/写访问操作 501
17.2.2 寄存器描述 502
17.2.3 简单的读/写EEPROM例程 504
17.2.4 高级语言开发环境中使用EEPROM 506
17.3 外部并行扩展接口 507
17.3.1 关于单片机嵌入式系统的并行接口扩展问题的讨论 507
17.3.2 AVR的并行接口扩展 509
17.4 AVR中断应用设计要点 511
17.4.1 AVR中断设计注意点 511
17.4.2 AVR的中断优先级与中断嵌套处理 512
17.4.3 高级语言开发环境中的中断服务程序的编写 513
17.5 AVR实战应用要点 513
第18章 迎奥运倒计时时钟设计实例 517
18.1 系统功能分析 517
18.2 应用系统设计 518
18.2.1 系统方案设计 518
18.2.2 应用系统结构设计 518
18.2.3 系统面板设计 519
18.2.4 DS1302介绍 520
18.3 控制系统的硬件设计 523
18.4 控制系统软件设计要点 524
附录A ATmega16熔丝位汇总 528
附录B AVR-51多功能实验开发板电原理图 537
附录C 本书所附光盘内容简介 540
附录D 自制USBISP下载线 541
D.1 问题的提出 541
D.2 自制USB下载线 542
参考文献 544