目录 3
第一部分 Cx51基础篇 3
第一章 单片机基础知识 3
1.1 8051单片机的特点 3
1.2 8051的内部结构 4
1.2.1 中央处理器 5
1.2.2 存储器组织 7
1.2.3 片内并行接口 9
1.2.4 8051的内部资源 11
1.2.5 8051的芯片引脚 12
1.2.6 单片机的工作方式 12
1.3 8051的系统扩展 14
1.3.1 外部总线的扩展 15
1.3.2 外部程序存储器的扩展 16
1.3.3 外部数据存储器的扩展 19
1.4 8051指令系统 21
1.4.1 寻址方式 21
1.4.2 指令说明 22
1.4.3 伪指令 28
1.4.4 指令系统表 30
1.5 实用程序设计 34
第二章 C与8051 37
2.1 8051的编程语言 37
2.2 Cx51编译器 38
2.3 KEIL8051开发工具 39
2.4 KEILCx51编程实例 43
2.5 Cx51程序结构 48
3.1 数据与数据类型 50
第三章 Cx51数据与运算 50
3.2 常量与变量 51
3.3 Cx51数据的存储类型与8051存储器结构 53
3.4 8051特殊功能寄存器(SFR)及其Cx51定义 58
3.5 8051并行接口及其Cx51定义 60
3.6 位变量(BIT)及其Cx51定义 61
3.7 Cx51运算符、表达式及其规则 63
3.7.1 Cx51算术运算符及其表达式 63
3.7.2 Cx51关系运算符、表达式及优先级 64
3.7.3 Cx51逻辑运算符、表达式及优先级 65
3.7.4 Cx51位操作及其表达式 66
3.7.5 自增减运算符、复合运算符及其表达式 71
4.1.2 选择结构及其流程图 73
4.1.1 顺序结构及其流程图 73
4.1 C语言程序的基本结构及流程图 73
第四章 Cx51流程控制语句 73
4.1.3 循环结构及其流程图 74
4.2 选择语句 76
4.2.1 选择语句if 76
4.2.2 switch/case语句 78
4.3 循环语句 79
4.3.1 while语句 80
4.3.2 do while语句 81
4.3.3 for循环语句 82
第五章 Cx51构造数据类型 85
5.1 数组 85
5.1.1 一维数组 85
5.1.2 二维数组 88
5.1.3 字符数组 89
5.1.4 查表 90
5.1.5 数组与存储空间 90
5.2 指针 91
5.2.1 指针的基本概念 91
5.2.2 数组指针和指向数组的指针变量 94
5.2.3 指向多维数组的指针和指针变量 98
5.2.4 关于KEILCx51的指针类型 98
5.3 结构 100
5.3.1 结构的定义和引用 100
5.3.2 结构数组 104
5.3.3 指向结构类型数据的指针 105
5.4 共用体 107
5.5 枚举 109
第六章 Cx51函数 111
6.1 函数的分类 112
6.2 函数的定义 112
6.3 函数的参数和函数值 114
6.4 函数的调用 116
6.4.1 函数调用的一般形式 116
6.4.2 函数调用的方式 116
6.4.3 对被调用函数的说明 117
6.4.4 函数的嵌套和递归调用 118
6.4.5 函数的递归调用 118
6.4.6 用函数指针变量调用函数 120
6.5 数组、指针作为函数的参数 122
6.5.1 用数组作为函数的参数 122
6.5.2 用指向函数的指针变量作为函数的参数 123
6.5.3 用指向结构的指针变量作为函数的参数 125
6.5.4 返回指针的函数 127
第二部分 Cx51工具篇 131
第七章 μVision2集成开发环境 131
7.1 菜单栏命令 131
7.2 创建应用 136
7.2.1 创建项目 136
7.2.2 项目目标和文件组 141
7.2.3 配置对话框 142
7.2.4 代码分体 143
7.2.5 μVision2工具 146
7.2.6 编写优化代码 154
7.2.7 技巧和诀窍 157
7.3 调试程序 164
7.3.1 μVision2调试器 164
7.3.2 Debug命令 173
7.3.3 表达式 175
7.3.4 技巧和诀窍 186
7.4 μVision2调试函数 190
7.4.1 创建和调用函数 190
7.4.2 函数分类 192
7.4.3 调试函数和C之间的区别 200
7.4.4 μVision2调试器和dScope之间的差别 200
7.5 样例程序 201
7.5.1 第一个8051C程序HELLO 201
7.5.2 远程测量系统MEASURE 205
7.6 使用Monitor-51 212
第八章 Cx51编译器 219
8.1 Cx51编译器控制命令 221
8.2.2 存储区 254
8.2.1 关键字 254
8.2 Cx51语言扩展 254
8.2.3 外部数据存储器 255
8.2.4 存储模式 256
8.2.5 存储类型 257
8.2.6 数据类型 258
8.2.7 位类型 258
8.2.8 可位寻址对象 259
8.2.9 特殊功能寄存器 260
8.2.10 绝对变量定位 262
8.2.11 指针 263
8.2.12 函数声明 273
8.3 预处理器 281
8.3.1 预处理命令 281
8.3.3 标记合并操作符 282
8.3.2 字符串化操作符 282
8.3.4 预定义宏常量 283
8.4 支持的8051派生产品 283
8.4.1 AD公司ADμC微转换器B2系列产品 284
8.4.2 Atmel公司89x8252及其派生产品 284
8.4.3 Dallas公司80C320,80C420,80C520和80C530 284
8.4.4 Dallas公司80C390,80C400,5240及其派生产品 285
8.4.5 Infineon公司C517,C517A,C509,80C537及其派生产品 285
8.4.6 Philips公司8xC750,8xC751和8xC752 286
8.4.7 Philips公司80C51MX体系结构 287
8.4.8 Philips和Atmel公司WM的双数据指针 287
8.5 高级编程技术 287
8.5.1 配置文件 287
8.5.3 段的命名规约 292
8.5.2 优化器 292
8.5.4 C与汇编程序的接口 295
8.5.5 C与PL/M-51程序的接口 303
8.5.6 数据存储格式 304
8.5.7 访问绝对存储器地址 308
8.5.8 调试 309
8.6 Cx51运行库 310
8.6.1 内部函数 310
8.6.2 库文件 310
8.6.3 标准类型 311
8.6.4 绝对存储器访问宏 311
8.6.5 函数分类 313
8.6.6 头文件 319
第九章 Ax51宏汇编器 322
9.1 汇编伪指令 324
9.1.1 段控制伪指令 326
9.1.2 符号定义 332
9.1.3 存储区初始化 336
9.1.4 保留存储区 337
9.1.5 过程声明 339
9.1.6 程序链接 341
9.1.7 地址控制 343
9.1.8 其他伪指令 344
9.2 宏定义和宏调用 345
9.2.1 标准宏伪指令 346
9.2.2 宏定义 346
9.2.3 运算符 351
9.2.4 宏调用 351
9.2.5 C宏 352
9.3 调用和控制 355
9.3.1 汇编控制命令 357
9.3.2 条件汇编的控制 369
第十章 链接器/定位器和实用工具 374
10.1 链接器/定位器Lx51 374
10.2 链接器/定位器的控制命令 379
10.2.1 列表文件控制 384
10.2.2 输出文件控制 392
10.2.3 段和位置控制 396
10.2.4 高级语言控制 406
10.3 库管理器LIBx51 410
10.4 Object-Hex转换器 415
10.4.1 使用OHx51 415
10.4.2 使用OC51 417
11.1 基本概念 421
第三部分 Cx51应用篇 421
第十一章 模块化程序设计 421
11.2 模块化程序开发过程 423
11.3 汇编和编译 425
11.4 覆盖和共享 429
11.5 库和链接器/定位器 430
11.5.1 库 430
11.5.2 链接器/定位器 431
11.6 混合编程 436
11.7 程序优化 446
第十二章 8051内部资源的C编程 448
12.1 中断 448
12.2 定时器/计数器 456
12.3 串行口 466
12.4 8051派生产品的内部资源 475
12.5 多机通信 478
第十三章 8051扩展资源的C编程 486
13.1 可编程外围定时器8253 486
13.2 可编程外围并行接口8255 491
13.3 实时时钟/日历芯片146818 495
13.4 8位D/A芯片DAC0832 499
13.5 12位D/A芯片AD7521 503
13.6 8位A/D芯片ADC0809 505
13.7 12位A/D芯片AD574 508
13.8 可编程键盘/显示接口芯片8279 511
13.9 字符型LCD显示模块 518
13.10 点阵型LCD显示模块 523
14.1 RTX51概述 534
第十四章 RTX51实时多任务操作系统 534
14.2 要求和定义 541
14.3 创建RTX51 Tiny应用程序 544
14.4 RTX51 Tiny的系统函数 546
14.5 堆栈处理 553
14.6 样例程序和系统调试 553
14.6.1 交通灯控制器 553
14.6.2 系统调试 565
附录A KEIL Cx51与ANSI C的不同 570
附录B KEIL Cx51的版本差异 573
附录C 代码优化 578
附录D 编译器限制 581
附录E 提示和技巧 582
附录F 库函数参考 585
参考文献 651