2.6 函数 5 1
目 录 1
7.4 CodeVisionAVR应用实例 43 1
7.4.1 延迟函数 43 1
第1章AVR单片机与C语言 1
1.1 用C语言开发单片机的优势 1
1.2 AVR单片机的特点 2
1.3.7 AVR单片机内置看门狗电路(Watchdog)的使用 1 3
1.3.1 AVR和MCS-51存储器配置的对比 4
1.3从Keil C51向ICCAVR快速过渡 4
1.3.2 AVR输入/输出端口的使用 6
1.3.3 AVR和MCS-51定时器的对比 7
1.3.4 AVR和MCS-51中断系统的对比 9
1.3.5 AVR和MCS-51位操作的对比 11
1.3.6 AVR单片机内置EEPROM的使用 12
1.3.8 AVR和MCS-51中串口通信UART功能的对比 14
1.3.9 C51的源代码向ICCAVR的快速转换 16
2.1标识符、关键字和数据类型 17
2.1.1标识符 17
第2章ICCAVR使用的C语言基础知识 17
2.1.2数据类型 20
2.2数据的输入/输出 27
2.2.1数据输入 27
2.2.2数据输出 29
2.3.1 关系表达式和逻辑表达式 30
2.3逻辑运算和判断选取控制 30
2.3.2 if语句 32
2.3.3条件运算符 34
2.3.4 switch语句 35
2.4循环控制 36
2.4.1 goto语句以及用goto语句构成循环 36
2.4.2 while语句 37
2.4.3 do…while语句 38
2.4.4 for语句 39
2.4.5 几种循环的比较 41
2.5 数组 41
2.5.1一维数组的定义和引用 41
2.5.2二维数组的定义和引用 44
2.5.3字符数组 45
2.6.1库函数 51
2.6.2函数的定义和返回值 52
2.6.3 函数的参数 53
2.6.4函数的调用 55
2.6.5中断服务函数 57
2.7指针 58
2.7.1变量的指针和指向变量的指针变量 59
2.7.2指针变量的定义和指针变量的基类型 59
2.7.3对指针变量的操作 60
2.7.4数组的指针和指向数组的指针变量 64
2.7.5字符串指针和指向字符串的指针变量 66
2.7.6函数的指针和指向函数的指针变量 68
2.7.7指针数组和指向指针的指针 69
2.7.8有关指针的数据类型和指针运算的小结 70
2.8.1 定义结构体类型变量的方法 72
2.8结构体与共用体 72
4.2.2位操作的C源程序实例及剖析 1 74
2.8.2结构体变量的初始化 75
2.8.3结构体类型变量的引用 76
2.8.4定义一个结构体数组 77
2.8.5指向结构体类型数据的指针 78
2.8.6用指针处理链表 80
2.8.7共用体 83
2.8.8枚举类型 85
2.8.9用typedef定义类型 86
2.9位运算 88
2.9.1 位运算符 88
2.9.2位域 91
2.1 0.1 局部变量和全局变量 92
2.10标识符的作用域和存储类型 92
2.10.2局部变量及其作用域和生存期 93
2.10.3 全局变量及其作用域和生存期 94
2.11编译预处理 96
2.11.1 宏定义 96
2.11.2 “文件包含”处理 99
2.11.3条件编译 100
2.11.4编译附注和扩充 101
2.12在线汇编 106
2.12.1 汇编界面 107
2.12.2在线汇编中函数调用规则 109
2.12.3汇编语法 110
2.12.4ICCAVR增补的汇编伪指令 112
2.13 C源程序常见错误分析 116
2.14 C源程序调试 131
第3章ICCAVR集成环境 133
3.1ICCAVR编译器的安装与注册 133
3.1.1 ICCAVR编译器的安装 133
3.1.2 ICCAVR编译器的注册 134
3.2.2 ICCAVR中的文件类型及扩展名 137
3.2.1 ICCAVR编译器简介 137
3.2 ICCAVR编译器的特点 137
3.2.3 AVR存储器的使用 138
3.2.4启动文件 140
3.3 ICCAVR菜单解释 141
3.4 ICCAVR编译器的IDE环境 153
3.4.1 工程管理 153
3.4.2创建并编译一个文件 154
3.4.3创建并编译一个工程文件 155
3.5用应用构筑向导生成一个工程文件 157
3.6 ICCAVR6.26C支持的库函数介绍 160
3.6.1头文件 160
3.6.2库源代码 161
3.6.4字符类型函数 162
3.6.5浮点类型函数 162
3.6.3 macros.h 162
3.6.6标准输入/输出函数 164
3.6.7读/写内置EEPROM函数 166
3.6.8标准库和内存分配函数 166
3.6.9字符串函数 168
3.6.11堆栈检查函数 169
3.6.10变量参数函数 169
3.6.12双龙电子增补的库函数 171
第4章用ICCAVRC操作硬件资源 173
4.1 访问AVR的硬件 173
4.2位操作 173
4.2.1位操作的特点 173
4.2.3使用单总线访问DS18B20 179
4.3程序存储器和常量数据 185
4.3.1 程序存储器和常量数据的特点 185
4.3.2程序存储器和常量数据的C语言源程序及剖析 186
4.3.3利用程序空间常量表实现16位快速CRC 189
4.4 C任务(Tasks) 191
4.5 I/O寄存器 192
4.5.1 I/O寄存器操作的特点 192
4.5.2 I/O寄存器的C语言源程序及剖析 192
4.5.3实现1×8键盘和LED显示 193
4.6数据存储器的绝对寻址 197
4.6.1 数据存储器绝对寻址的操作特点 197
4.6.2绝对寻址数据存储器C语言源程序及剖析 198
4.6.3 使用ST16C550扩展串口 201
4.6.4程序存储器的绝对定位 206
4.6.5 EEPROM的绝对定位 207
4.7中断操作 208
4.7.1 中断操作的特点(外部中断和定时/计数器中断) 208
4.7.2中断操作的C语言源程序及剖析 210
4.7.3 4×4按键唤醒电路 211
4.8定时/计数器 216
4.8.1 定时/计数器操作的特点 217
4.8.2定时/计数器操作的C语言源程序及剖析 224
4.8.3 60Hz时钟发生器 225
4.9访问UART 229
4.9.1 访问UART操作的特点 229
4.9.2 访问UART操作的C语言源程序及剖析 234
4.9.3 UART速率自适应检测 236
4.10访问内置的EEPROM 239
4.10.1 访问单片机内置EEPROM操作的特点 239
4.10.2访问内置EEPROM操作的C源程序实例及剖析 241
4.10.3初始化内置的EEPROM数据 244
4.11 访问同步串行接口SPI 245
4.11.1访问SPI操作的特点 245
4.11.2访问SPI操作C源程序实例及剖析 248
4.11.3使用DataFlash存储器 251
4.12复位和Watchdog 259
4.12.1 复位和Watchdog操作的特点 259
4.12.2复位和WDT的C源程序实例及剖析 263
第5章ICCAVR应用实例 265
5.1 C程序优化 265
5.1.1程序结构的优化 265
5.1.2源程序中代码的优化 267
5.2延时函数 270
5.3读/写片内EEPROM 272
5.4信号周期测量程序 273
5.5键盘扫描程序 275
5.6生成模拟音乐 279
5.7利用I2C总线读写AT24C02 282
5.8利用单总线访问DS18B20 286
5.9用LCD显示中文及图形 291
5.10多通道A/D变换 299
5.11 A/D和D/A变换 302
5.12利用PWM方式产生双音频信号 307
5.13 通过UART使用PC机键盘 311
5.14 ATmega8的boot引导IAP应用 317
5.15 ATmega8内置RTC的应用 323
第6章GCCAVR软件使用初步 327
6.1 GCCAVR安装 328
6.1.1下载 328
6.1.2安装 328
6.2使用GCC AVR工具 334
6.2.1建立一个项目 334
6.2.2编译和链接 337
6.2.3使用“MAP”文件 338
6.2.4产生.hex文件 339
6.2.5使用makefile文件 341
6.3.1 应用程序启动过程(Start Up) 348
6.3 应用API 348
6.3.2存储器API 349
6.3.3 中断API 353
6.3.4 I/O端口API 355
6.3.5看门狗WDT API 358
6.4 GCC AVR使用在线汇编 359
6.4.1 GCC AVR的ASM声明 359
6.4.2汇编代码 360
6.4.3输入/输出操作数 360
6.4.4 Clobber寄存器 363
6.4.5在线汇编中使用#define定义的常量 365
6.4.6混合编程的寄存器使用 366
6.5使用定时/计数器 367
6.5.1定时/计数器0 367
6.5.2定时/计数器1 374
6.6.1 发送数据 382
6.6通用异步串行通信UART 382
6.6.2接收数据 385
6.7库函数 388
6.7.1头文件介绍 388
6.7.2库函数功能介绍 389
第7章CodeVisionAVR集成环境 399
7.1 CodeVisionAVR编译器简介 399
7.1.1 标识符 399
7.1.2关键字 399
7.1.3数据类型 399
7.1.4常量 400
7.1.5变量 400
7.1.6运算符 401
7.1.7存储空间 402
7.1.8访问寄存器 404
7.1.9中断服务函数 404
7.1.10 C任务 405
7.2 CodeVisionAVR菜单简介 405
7.3.2标准输入/输出函数 415
7.3.1字符类型函数 415
7.3 CodeVisionAVR编译器常用库函数简介 415
7.3.3标准内存分配函数 417
7.3.4数学函数 417
7.3.5字符串函数 419
7.3.6 BCD转换函数 422
7.3.7存储器访问函数 422
7.3.8延时函数 422
7.3.9 LCD函数 422
7.3.10 I2C总线函数 424
7.3.11单总线函数 429
7.3.13电源管理函数 430
7.3.12 SPI函数 430
7.3.14格雷码转换函数 431
7.4.2字符型LCD 432
7.4.3 访问AT24C02 433
7.4.4使用I2C总线访问LM75 435
7.4.5使用I2C总线访问PCF8563 436
7.4.6使用单总线访问DS1820 437
7.4.7使用SPI访问AD7896 438
7.4.8 8路A/D自动巡测系统 441
第8章IAR软件使用初步 449
8.1 IAR Embedded Workbench简介 449
8.1.1 安装 449
8.1.2配置IAR C编译器 452
8.2.1 使用IAR寄存器 455
8.2使用IAR寄存器和位操作 455
8.2.2 IAR位操作 457
8.3 IAR中断向量和中断使用 458
8.4 IAR数据类型和数据空间 459
8.4.1数据类型及取值范围 459
8.4.2数据空间 460
8.5 IAR操作MCU外设 462
8.5.1使用定时/计数器 462
8.5.2 使用UART 463
8.5.3使用EEPROM 465
8.5.4使用数据空间绝对地址 465
8.6使用IAR模拟I2C主模式程序实例 467
附录A SL-AVR开发实验器简介 472
附录B SL-mega8开发实验器原理图 478
参考文献 479