目录 1
第1章 概述 1
1.1 AVR单片机GCC开发概述 1
1.1.1 AVR单片机介绍 1
1.1.2 GCC编译器 2
1.2 一个简单的例子 3
1.3 用makefile管理项目 5
1.3.1 make的调用 6
1.3.2 makefile项目描述文件 6
1.3.3 使用mfile生成合适的makefile 10
1.4 开发环境的配置 11
1.4.1 软件环境 11
1.4.2 硬件环境 14
1.5 实验板CA-M8 15
1.5.1 特性 15
1.5.2 电路原理图 16
1.5.3 配置操作 17
1.5.4 时钟源选择 18
1.5.5 复位源选择 19
1.5.6 使用板上下载线对器件编程 19
1.5.7 配置时的几点注意事项 20
第2章 存储器操作 21
2.1 AVR单片机存储器组织结构 21
2.2 I/O寄存器操作 21
2.2.1 I/O寄存器的读/写 21
2.2.2 I/O寄存器的位操作 24
2.2.3 I/O端口的应用 24
2.3 SRAM内变量的使用 25
2.4 在程序中访问FLASH程序存储器 26
2.4.2 FLASH区数组应用 27
2.4.1 FLASH区整数变量应用 27
2.4.3 FLASH区字符串变量的应用 28
2.5 EEPROM数据存储器操作 29
2.6 AVR-GCC段与再定位 30
2.6.1 .text段 31
2.6.2 .data段 32
2.6.3 .bss段 33
2.6.4 .eeprom段 34
2.7 外部RAM的使用 34
2.8 堆应用 35
3.2 C语言编译基础 38
3.1 启动模块 38
第3章 单片机C语言程序设计基础 38
3.2.1 C语言两种文件 39
3.2.2 C语言两种声明 39
3.2.3 从源文件到可执行代码 40
3.3 生成静态连接库 43
3.4 模块化程序设计 47
3.4.1 概述 47
3.4.2 模块化程序设计的优点 50
3.5 应用程序结构 50
4.1 中断服务程序 51
第4章 功能模块编程示例 51
4.2 定时器/计数器0的应用 52
4.3 定时器/计数器1的应用 56
4.3.1 一般模式 56
4.3.2 比较匹配清零模式 56
4.3.3 输入捕获功能 56
4.3.4 PWM功能编程 60
4.4 定时器/计数器2的应用 62
4.5 看门狗定时器的应用 62
4.6 模拟比较器 64
4.7 A/D转换模块编程 66
4.8 数码管显示程序设计 71
4.9 键盘程序设计 74
4.10 蜂鸣器控制 78
第5章 串行异步收/发器的应用 79
5.1 串行异步通信简介 79
5.2 UART程序设计 80
5.2.1 模式选择 80
5.2.2 UART通信参数设置 81
5.2.3 UART收/发操作与两种程序设计方式 82
5.3 与计算机间的串行通信 86
5.4 avr-libc标准I/O流描述 88
5.5 利用标准I/O流调试程序 90
5.6 格式化字符串监测工具PrintMonitor 92
5.7 最小化的格式化打印函数 94
第6章 CA-M8上实现AT89S52下载编程器 98
6.1 编程原理 98
6.2 LuckyProg2004概述 99
6.2.1 简介 99
6.2.2 器件配置 99
6.2.3 数据传送协议 101
6.2.4 编程框架 106
6.3.1 串行数据的输入与输出时序 118
6.3.2 串行编程算法 118
6.3.3 编程指令 118
6.3 AT89S52 ISP功能简介 118
6.4 下位机程序设计 119
6.4.1 延时功能函数 119
6.4.2 程序清单 120
第7章 硬件TWI端口编程 134
7.1 TWI模块概述 134
7.2.1 实时时钟芯片DS1307介绍 135
7.2 主控模式操作实时时钟DS1307 135
7.2.2 DS1307实验电路 136
7.2.3 DS1307操作程序 137
7.3 两个mega8间的TWI通信 146
7.3.1 测试电路 146
7.3.2 程序设计 146
第8章 BootLoader功能应用 153
8.1 BootLoader功能介绍 153
8.2 avr-libc对BootLoader的支持 153
8.3.1 测试硬件 154
8.3 BootLoader应用实例 154
8.3.2 引导加载程序 155
8.3.3 上位机程序 159
8.4 基于LuckyProg2004的BootLoader程序 160
8.4.1 程序清单 160
8.4.2 LuckyProg2004配置文件的生成 166
第9章 汇编语言支持 168
9.1 C语言代码中内联汇编语言程序 168
9.1.1 内联汇编声明 168
9.1.2 汇编指令 169
9.1.3 输入/输出操作数 170
9.1.4 Clobber 172
9.1.5 汇编宏应用 173
9.2 独立的汇编语言支持 174
9.2.1 avr-libc汇编语言程序示例 174
9.2.2 编译 176
9.3 C语言与汇编语言混合编程 176
9.3.1 C编译器使用寄存器约定 176
9.3.2 C编译器函数调用规则 177
9.3.3 在C语言程序中调用汇编语言函数 177
9.3.4 在汇编语言程序中调用C语言函数或访问C语言变量 179
10.1 环境配置 181
第10章 C++语言支持 181
10.2 调用C语言函数 182
10.3 摄像云台视角控制器的设计 183
10.3.1 硬件电路 183
10.3.2 程序设计 183
10.3.3 控制端测试程序 190
第11章 应用实例 191
11.1 双基色LED显示屏控制 191
11.1.1 简介 191
11.1.2 显示原理 191
11.1.3 程序设计 193
11.2 工作小时计的制作 206
11.2.1 简介 206
11.2.2 硬件电路 207
11.2.3 液晶显示模块 208
11.2.4 程序设计 210
11.3 电话远程控制系统 220
11.3.1 简介 220
11.3.2 自动摘机与提示音输出电路 220
11.3.3 振铃检测电路 221
11.3.4 DTMF信号解码及主控制电路 222
11.3.5 软件设计 223
第12章 实时操作系统AVRX应用 231
12.1 AVRX概述 231
12.2 应用程序结构 232
12.2.1 任务及堆栈 232
12.2.2 时钟节拍和中断 234
12.2.3 主程序 235
12.3 编译AVRX 236
12.3.1 编译内核 236
12.4 信号量 237
12.3.2 编译应用程序 237
12.5 定时器 240
12.6 消息 243
12.7 定时消息发送器 246
12.8 AVRX对EEPROM的支持 249
12.9 AVRX调试接口 249
附录A AVR-GCC选项 253
A.1 指定目标CPU类 253
A.2 选择通用编译器选项 256
A.3 avr-as汇编器选项 257
A.4 连接器avr-ld选项 258