第1章 嵌入式C语言导论 1
1.1 本章目标 1
1.2 引言 1
1.3 基本概念 1
1.4 变量和常量 4
1.4.1 变量类型 4
1.4.2 变量的作用域 4
1.4.3 常量 5
1.4.4 枚举和定义 7
1.4.5 存储类型 8
1.4.6 类型转换 8
1.5 输入/输出操作 9
1.6 运算符和表达式 10
1.6.1 赋值运算符和算术运算符 10
1.6.2 逻辑运算符与关系运算符 13
1.6.3 自增运算符、自减运算符和复合赋值运算符 14
1.6.4 条件表达式 15
1.6.5 运算符优先级 16
1.7 控制语句 17
1.7.1 while循环 17
1.7.2 do/while循环 18
1.7.3 for循环 19
1.7.4 if/else语句 20
1.7.5 switch/case语句 23
1.7.6 break、continue和goto语句 25
1.8 函数 29
1.8.1 原型和函数组织 30
1.8.2 函数返回值 32
1.8.3 递归函数 33
1.9 指针和数组 37
1.9.1 指针 37
1.9.2 数组 40
1.9.3 多维数组 42
1.9.4 指向函数的指针 44
1.10.1 结构 48
1.10 结构与共用体 48
1.10.2 结构数组 50
1.10.3 指向结构的指针 51
1.10.4 共用体 52
1.10.5 typedef运算符 54
1.10.6 位和位域 55
1.10.7 sizeof运算符 56
1.11 存储器类型 57
1.11.1 常量和变量 57
1.11.2 指针 59
1.11.3 寄存器变量 59
1.12.1 使用中断 62
1.12 实时方法 62
1.12.2 状态机 65
1.13 本章小结 71
1.14 练习 71
1.15 上机实习 73
第2章 Atmel Risc处理器 75
2.1 本章目标 75
2.2 引言 75
2.3 体系结构概述 75
2.4 存储器 76
2.4.1 FLASH代码存储器 77
2.4.2 数据存储器 77
2.4.3 EEPROM存储器 81
2.5 复位和中断功能 82
2.5.1 中断 83
2.5.2 复位 86
2.6 并行I/O端口 88
2.7 计时器/计数器 93
2.7.1 计时器/计数器预定标器和输入选择器 93
2.7.2 Timer 0 94
2.7.3 Timer 1 97
2.7.4 Timer 2 108
2.8 使用UART进行串行通信 112
2.9.1 模数转换背景知识 118
2.9 模拟接口 118
2.9.2 模数转换器外设 119
2.9.3 模拟比较器 122
2.10 利用SPI进行串行通信 127
2.11 AVR RISC汇编语言指令集 130
2.12 本章小结 132
2.13 练习 136
2.14 上机实习 137
3.2 引言 139
3.3 字符输入/输出函数getchar()和putchar() 139
3.1 本章目标 139
第3章 标准I/O和预处理函数 139
3.4 标准输出函数 145
3.4.1 输出字符串函数puts() 145
3.4.2 从FLASH输出字符串函数PUTSF() 146
3.4.3 格式打印函数printf() 147
3.4.4 字符串格式打印函数sprintf() 149
3.5 标准输入函数 150
3.5.1 获得字符串函数gets() 150
3.5.2 格式扫描函数scanf() 151
3.5.3 字符串格式扫描函数sscanf() 152
3.6 预处理指令 153
3.6.1 #include指令 153
3.6.2 #define指令 154
3.6.3 #ifdef,#ifndef,#else和#endif指令 156
3.6.4 #pragma指令 162
3.6.5 其他宏和指令 165
3.7 本章小结 166
3.8 练习 166
3.9 上机实习 167
第4章 CodeVisionAVR C编译器和集成开发环境 168
4.1 本章目标 168
4.2 引言 168
4.3 集成开发(IDE)环境操作 169
4.3.1 项目 169
4.3.2 源文件 171
4.3.3 编辑文件 175
4.3.4 打印文件 176
4.3.5 文件导航器 176
4.4 C编译器选项 177
4.4.1 UART 178
4.4.2 存储器模式 178
4.4.3 优化 179
4.4.4 程序类型 179
4.4.5 SRAM 179
4.4.6 编译 179
4.5.1 编译项目 180
4.5 编译和生成项目 180
4.5.2 生成项目 182
4.6 对目标设备编程 183
4.6.1 芯片 183
4.6.2 FLASH和EEPROM 183
4.6.3 FLASH锁定位 185
4.6.4 保险位 185
4.6.5 Boot Lock Bit 0和Boot Lock Bit 1 185
4.6.6 签名 185
4.6.10 其他编程器 186
4.6.9 Program|All 186
4.6.8 编程速度 186
4.6.7 芯片擦除 186
4.7 CodeWizardAVR代码生成器 188
4.7.1 Chip选项卡 189
4.7.2 Ports选项卡 190
4.7.3 External IRQ选项卡 191
4.7.4 Timers选项卡 192
4.7.5 UART选项卡 193
4.7.6 ADC选项卡 194
4.7.7 Project Information选项卡 195
4.7.8 生成源代码 196
4.8 终端工具 207
4.9.1 为AVR Studio新建一个COFF文件 208
4.9 Atmel AVR Studio调试器 208
4.9.2 从Code VisionAVR启动AVR Studio 209
4.9.3 打开文件进行调试 209
4.9.4 开始、中断和跟踪 209
4.9.5 设置和清除断点 210
4.9.6 查看和修改寄存器和变量的值 210
4.9.7 查看和修改机器状态 211
4.10 本章小结 211
4.11 练习 212
4.12 上机实习 213
5.3 概念开发阶段 214
5.4.1 定义阶段 214
5.4 项目开发过程的步骤 214
5.1 本章目标 214
5.2 引言 214
第5章 项目开发 214
5.4.2 设计阶段 216
5.4.3 测试定义阶段 217
5.4.4 建立和测试硬件原型阶段 217
5.4.5 系统集成和开发阶段 218
5.4.6 系统测试阶段 218
5.4.7 庆祝阶段 218
5.5 项目开发过程总结 218
5.6.2 定义阶段 219
5.6 示例项目:一个气象监测器 219
5.6.1 构思阶段 219
5.6.3 测量方法在设计方面的考虑 224
5.6.4 室外装置的硬件设计 235
5.6.5 室外装置的软件设计 237
5.6.6 室内装置的硬件设计 239
5.6.7 室内装置的软件设计 241
5.6.8 测试定义阶段 243
5.6.9 建立和测试原型硬件阶段 244
5.6.10 系统集成和软件开发阶段——室外装置 250
5.6.11 系统集成和软件开发阶段——室内装置 258
5.6.12 系统测试阶段 284
5.9 练习 288
5.7 挑战 288
5.8 本章小结 288
5.10 上机实习 289
附录A 库函数参考 290
附录B CodeVisionAVR和STK500入门 369
附录C AVR微控制器编程 381
附录D 安装并使用TheCableAVR 384
附录E MegAVR-DEV开发板 394
附录F ASCII字符表 397
附录G AVR指令集汇总 401
附录H 部分练习答案 409