第一章 ATMEL单片机简介 1
1.1 ATMEL公司产品的特点 1
1.2 AT90系列单片机简介 2
1.3 AT91M系列单片机简介 2
第二章 AVR单片机系统结构 4
2.1 AVR单片机总体结构 4
2.2 AVR单片机中央处理器CPU 6
2.2.1 结构概述 7
2.2.2 通用寄存器堆 8
2.2.3 X、Y、Z寄存器 9
2.2.4 ALU运算逻辑单元 9
2.3 AVR单片机存储器组织 10
2.3.1 可下载的Flash程序存储器 10
2.3.2 内部和外部的SRAM数据存储器 10
2.3.4 存储器访问和指令执行时序 11
2.3.3 EEPROM数据存储器 11
2.3.5 I/O存储器 13
2.4 AVR单片机系统复位 16
2.4.1 复位源 17
2.4.2 加电复位 18
2.4.3 外部复位 19
2.4.4 看门狗复位 19
2.5 AVR单片机中断系统 20
2.5.1 中断处理 20
2.5.2 外部中断 23
2.5.3 中断应答时间 23
2.5.4 MCU控制寄存器MCUCR 23
2.6 AVR单片机的节电方式 24
2.6.1 休眠状态 24
2.6.2 闲置模式 24
2.7.1 定时器/计数器预定比例器 25
2.7.2 8位定时器/计数器0 25
2.6.3 掉电模式 25
2.7 AVR单片机定时器/计数器 25
2.7.3 16位定时器/计数器1 27
2.7.4 看门狗定时器 33
2.8 AVR单片机EEPROM读/写访问 34
2.9 AVR单片机串行接口 35
2.9.1 同步串行接口 SPI 35
2.9.2 通用串行接口 UART 40
2.10.1 模拟比较器 45
2.10 AVR单片机模拟比较器 45
2.10.2 模拟比较器控制和状态寄存器ACSR 46
2.11 AVR单片机I/O端口 47
2.11.1 端口 A 47
2.11.2 端口 B 48
2.11.3 端口 C 54
2.11.4 端口 D 55
2.12.4 编程Flash和EEPROM 61
2.12.3 芯片代码 61
2.12.1 编程存储器锁定位 61
2.12.2 熔断位 61
2.12 AVR单片机存储器编程 61
2.12.5 并行编程 62
2.12.6 串行下载 66
2.12.7 可编程特性 67
第三章 AVR单片机开发工具 69
3.1 AVR单片机的编辑和编译 69
3.1.1 AVR Assembler汇编文件的安装与打开 69
3.1.2 AVR单片机汇编语言源程序举例 70
3.1.3 源文件说明 73
3.1.4 AVR汇编器 74
3.2 模拟调试窗口 78
3.2.1 安装AVR Studio调试工具 78
3.2.2 设置器件配置文件*.aio方法 78
3.2.3 AVR Studio调试窗口下拉菜单 79
3.2.4 AVR Studio窗口 82
3.2.5 AVR Studio命令 87
3.2.6 执行对象 90
3.3 AVR单片机开发下载实验器SL-AVR 92
3.3.1 SL-AVR开发下载实验器硬件结构 92
3.3.2 SL-AVR硬件接口电路 93
3.4 AVR单片机串行下载操作 98
3.5 SLAVR *.ASM综合程序简介 98
第四章 AVR单片机指令系统 102
4.1 指令格式 102
4.1.1 汇编指令 102
4.1.2 汇编器伪指令 102
4.1.3 表达式 105
4.2 寻址方式 107
4.3 数据操作和指令类型 110
4.3.1 数据操作 110
4.3.2 指令类型 110
4.3.3 指令集名词 110
4.4.1 加法指令 111
4.4 算术和逻辑指令 111
4.4.2 减法指令 115
4.4.3 乘法指令 119
4.4.4 取反码指令 119
4.4.5 取补指令 120
4.4.6 比较指令 121
4.4.7 逻辑与指令 123
4.4.8 逻辑或指令 125
4.4.9 逻辑异或指令 128
4.5 转移指令 129
4.5.1 无条件转移指令 129
4.5.2 条件转移指令 132
4.6 数据传送指令 153
4.6.1 直接数据传送指令 153
4.6.2 间接数据传送指令 155
4.6.3 从程序存储器直接取数据指令 162
4.6.4 I/O口数据传送 163
4.6.5 堆栈操作指令 164
4.7 位指令和位测试指令 165
4.7.1 带进位逻辑操作指令 165
4.7.2 位变量传送指令 169
4.7.3 位变量修改指令 170
4.7.4 其它指令 179
4.8 新增指令 180
4.8.1 EICALL——延长间接调用子程序 180
4.8.2 EIJMP——扩展间接跳转 181
4.8.3 ELPM——扩展装载程序存储器 182
4.8.4 ESPM——扩展存储程序存储器 182
4.8.5 FMUL——小数乘法 184
4.8.6 FMULS——有符号数乘法 184
4.8.7 FMULSU——有符号小数和无符号小数乘法 185
4.8.8 MOVW——拷贝寄存器字 186
4.8.9 MULS——有符号数乘法 187
4.8.10 MULSU——有符号数与无符号数乘法 187
4.8.11 SPM——存储程序存储器 188
第五章 AVR单片机AT90系列介绍 190
5.1 AT90S1200 190
5.1.1 特点 190
5.1.2 描述 191
5.1.3 引脚配置 192
5.1.4 结构纵览 193
5.2 AT90S2313 201
5.2.1 特点 201
5.2.2 描述 202
5.2.3 引脚配置 203
5.3 AT90S2323/2343 203
5.3.1 特点 203
5.3.2 描述 204
5.3.3 AT90S/LS2323和AT90S/LS2343的比较 206
5.3.4 引脚配置 206
5.4 AT90S2333/4433 207
5.4.1 特点 207
5.4.3 引脚配置 208
5.4.2 描述 208
5.5 AT90S4414/8515 210
5.5.1 特点 210
5.5.2 AT90S4414和AT90S8515的比较 212
5.5.3 引脚配置 212
5.6 AT90S4434/8535 212
5.6.1 特点 212
5.6.2 描述 213
5.6.3 AT90S4434和AT90S8535的比较 215
5.6.4 引脚配置 215
5.6.5 AVR RISC结构 216
5.6.6 定时器/计数器 227
5.6.9 串行外设接口——SPI 232
5.6.11 模拟比较器 232
5.6.10 通用串行接口 UART 232
5.6.8 EEPROM读/写 232
5.6.7 看门狗定时器 232
5.6.12 模数转换器 233
5.6.13 I/O 238
5.7 ATmega83/163 243
5.7.1 特点 243
5.7.2 描述 244
5.7.3 ATmega83与ATmega163的比较 245
5.7.4 引脚配置 246
5.8 ATtiny10/11/12 247
5.8.1 特点 247
5.8.2 描述 248
5.8.3 引脚配置 250
5.9 ATtiny15/L 252
5.9.1 特点 252
5.9.2 描述 252
5.10 ATmega603/103 254
5.10.1 特点 254
5.9.3 引脚配置 254
5.10.2 描述 255
5.10.3 ATmega603和ATmega103的比较 257
5.10.4 引脚配置 257
5.11 ATmega161 259
5.11.1 特点 259
5.11.2 描述 260
5.11.3 引脚配置 260
5.12 AVR单片机替代MCS-51单片机 262
第六章 实用程序设计 264
6.1 程序设计方法 264
6.1.1 程序设计步骤 264
6.1.2 程序设计技术 264
6.2 应用程序举例 265
6.2.1 内部寄存器和位定义文件 265
6.2.2 访问内部EEPROM 268
6.2.3 数据块传送 268
6.2.9 设置和使用模拟比较器 269
6.2.8 冒泡分类算法 269
6.2.10 半双工中断方式UART应用1 269
6.2.4 乘法和除法运算应用一 269
6.2.7 BCD运算 269
6.2.6 16位运算 269
6.2.5 乘法和除法运算应用二 269
6.2.11 半双工中断方式UART应用2 270
6.2.12 8位精度A/D转换器 270
6.2.13 装载程序存储器 270
6.2.14 安装和使用相同模拟比较器 270
6.2.15 CRC程序存储的检查 270
6.2.16 4×4键区休眠触发方式 271
6.2.17 多工法驱动LED和4×4键区扫描 271
6.2.18 I2C总线 271
6.2.19 I2C工作 272
6.2.20 SPI软件 272
6.2.22 验证SL-AVR实验器及AT90S1200的口功能2 273
6.2.23 验证SL-AVR实验器及具有DIP40封装的口功能 273
6.2.21 验证SL-AVR实验器及AT90S1200的口功能1 273
第七章 AVR单片机的应用 274
7.1 通用延时子程序 274
7.2 简单I/O口输出实验 280
7.2.1 SLAVR721.ASM 280
7.2.2 SLAVR722.ASM 281
7.2.3 SLAVR723.ASM 282
7.2.4 SLAVR724.ASM 284
7.2.5 SLAVR725.ASM 285
7.2.6 SLAVR726.ASM 286
7.2.7 SLAVR727.ASM 287
7.3 综合程序 288
7.3.1 LED/LCD/键盘扫描综合程序 288
7.3.2 LED键盘扫描综合程序 289
7.3.3 在LED上实现字符8的循环移位显示程序 289
7.3.4 电脑放音机 291
7.3.5 键盘扫描程序 299
7.3.6 十进制计数显示 300
7.3.7 廉价的A/D转换器 303
7.3.8 高精度廉价的A/D转换器 308
7.3.9 星星灯 311
7.3.10 按钮猜数程序 312
7.3.11 汉字的输入 318
7.4 复杂实用程序 320
7.4.1 10位A/D转换 320
7.4.2 步进电机控制程序 323
7.4.3 测脉冲宽度 326
7.4.4 LCD显示8字循环 332
7.4.5 LED电脑时钟 338
7.4.6 测频率 344
7.4.7 测转速 346
7.4.8 AT90S8535的A/D转换 348
第八章 BASCOM-AVR的应用 354
8.1 基于高级语言BASCOM-AVR的单片机开发平台 354
8.2 BASCOM-AVR软件平台的安装与使用 355
8.3 AVR输入输出I/O口的应用 359
8.3.1 LED发光二极管的控制 359
8.3.2 简易手控广告灯 360
8.3.3 简易电脑音乐放音机 361
8.4 LCD显示器 363
8.4.1 标准LCD显示器的应用 363
8.4.2 简单游戏机——按钮猜数 365
8.5 串口通信UART 366
8.5.1 AVR系统与PC的简易通信 367
8.5.2 PC控制的简易广告灯 368
8.6 单总线接口和温度计 370
8.7 I2C总线接口和简易IC卡读写器 373
第九章 AVRC语言的应用 379
9.1 AVR支持C和高级语言编程的结构 379
9.2 C编译 383
9.3 测试应用程序 389
9.3.2 延时函数 390
9.3.1 读/写口 390
9.3.3 读/写EEPROM 391
9.3.4 AVR的PB口变速移位 391
9.3.5 4个口LED亮灯变速移位 392
9.3.6 音符声程序 393
9.3.7 8字循环移位显示程序 394
9.3.8 按键加1计数显示程序 395
9.4 用C语言产生各种波形 396
9.4.2 正三角形波 397
9.4.1 锯齿波 397
9.4.3 梯形波 398
9.4.4 正弦波 399
9.4.5 方波 400
附录1 AT89系列单片机简介 402
附录2 AT94K系列现场可编程系统标准集成电路 405
附录3 指令集综合 408
参考文献 412
ATMEL公司的产品目录 413