第1章 8051单片机与Keil C51基础 1
1.1 8051单片机的存储器组织结构 1
1.2 Keil C51开发工具 6
1.3 C51简单编程与调试 6
第2章 C51程序设计基础 16
2.1标识符与关键字 16
2.2 C51程序设计的基本语法 18
2.2.1数据类型 18
2.2.2常量 20
2.2.3变量及其存储模式 22
2.2.4用typedef重新定义数据类型 25
2.2.5运算符与表达式 26
2.3 C51程序的基本语句 39
2.3.1表达式语句 39
2.3.2复合语句 40
2.3.3条件语句 41
2.3.4开关语句 43
2.3.5循环语句 45
2.3.6返回语句 50
2.4函数 51
2.4.1函数的定义 51
2.4.2函数的调用形式 54
2.4.3对被调用函数的说明 54
2.4.4函数的参数与返回值 56
2.4.5实际参数的传递方式 58
2.4.6函数的递归调用与再入函数 59
2.4.7中断函数与寄存器组定义 60
2.5函数变量的存储方式 62
2.5.1局部变量与全局变量 62
2.5.2变量的存储种类 64
2.5.3函数的参数和局部变量的存储器模式 68
2.6数组 69
2.6.1数组的定义与引用 69
2.6.2字符数组 70
2.6.3数组作为函数的参数 73
2.7指针 76
2.7.1指针与地址 76
2.7.2指针变量的定义 77
2.7.3指针变量的引用 79
2.7.4指针变量作为函数的参数 80
2.8数组的指针 81
2.8.1用指针引用数组元素 81
2.8.2字符数组指针 83
2.8.3指针的地址计算 84
2.9函数型指针 86
2.10返回指针型数据的函数 88
2.11指针数组与指针型指针 89
2.11.1指针数组 89
2.11.2指针型指针 92
2.11.3抽象型指针 94
2.12结构体、联合体与枚举 95
2.12.1结构体变量的定义与引用 95
2.12.2结构体变量的初值 98
2.12.3结构体数组 99
2.12.4结构体型指针 100
2.12.5将结构体作为函数的参数 101
2.12.6将结构体型指针作为函数的参数 103
2.13联合体变量的定义与引用 105
2.14枚举变量的定义与引用 109
2.15 预处理器 110
2.15.1不带参数的宏定义 111
2.15.2带参数的宏定义 112
2.15.3文件包含 114
2.15.4条件编译 114
2.15.5其他预处理命令 117
第3章 μVision4集成开发环境 118
3.1 μVision4的下拉菜单 120
3.1.1 File菜单 121
3.1.2 Edit菜单 122
3.1.3 View菜单 126
3.1.4 Project菜单 128
3.1.5 Flash菜单 139
3.1.6 Tools菜单 139
3.1.7 SVCS菜单 141
3.1.8 Window菜单 142
3.1.9 Help菜单 142
3.2 μVision4中的调试器 143
3.2.1 Debug状态下窗口分配与View菜单 145
3.2.2通过Debug菜单进行程序代码调试 150
3.2.3通过Peripherals菜单观察仿真结果 156
3.3 μVision4的调试命令 157
3.3.1显示和更新存储器内容命令 159
3.3.2程序执行控制命令 163
3.3.3断点管理命令 166
3.3.4其他通用命令 169
3.4 μVision4的表达式 178
3.4.1表达式的组成 178
3.4.2 μVision4表达式与C语言表达式之间的差别 183
3.4.3 μVision4表达式应用举例 183
3.5 μVision4的函数 186
3.5.1内部函数 187
3.5.2用户函数 192
3.5.3信号函数 194
3.5.4 μVision4函数与C51函数的差别 196
第4章 C51编译器 197
4.1 C51编译器简介 197
4.2 C51编译器控制命令详解 200
4.2.1源控制命令 200
4.2.2列表控制命令 203
4.2.3目标控制命令 208
4.3 Keil C51编译器对ANSI C的扩展 235
4.3.1存储器类型与编译模式 235
4.3.2关于bit, sbit, sfr, sfr16数据类型 237
4.3.3一般指针与基于存储器的指针及其转换 241
4.3.4 C51编译器对ANSI C函数定义的扩展 242
4.4 C51编译器的数据调用协议 249
4.4.1数据在内存中的存储格式 249
4.4.2目标代码的段管理 250
4.5 C51编译器的特殊支持 252
4.5.1 Analog Device公司的Aduc8xxB2系列 253
4.5.2 Atmel89x8252及衍生产品 253
4.5.3 Dallas 80C320/420/520/530 254
4.5.4 Dallas 80C390/400/5240及衍生产品 254
4.5.5 Infineon 80517/509/537及衍生产品 255
4.5.6 NXP 8xC750/751/752 256
4.5.7 NXP 8xC51Mx 256
4.5.8 NXP和Atmel WM系列的双数据指针 256
4.6用户配置文件 257
4.6.1启动代码文件 257
4.6.2变量初始化文件 259
4.6.3基本I/O函数文件 260
4.6.4分组配置文件 261
4.7与汇编语言程序的接口 262
4.8与PL/M51程序的接口 272
4.9绝对地址访问 273
4.9.1采用扩展关键字“at”或指针定义变量的绝对地址 273
4.9.2采用预定义宏指定变量的绝对地址 274
4.9.3采用链接定位控制命令指定变量的绝对地址 275
4.10 C51的库函数 276
4.10.1字符函数CTYPE.H 277
4.10.2标准I/O函数STDIO.H 283
4.10.3字符串函数STRING.H 291
4.10.4标准函数STDLIB.H 299
4.10.5数学函数MATH.H 305
4.10.6绝对地址访问ABSACC.H 312
4.10.7内部函数INTRINS.H 313
4.10.8变量参数表STDARG.H 317
4.10.9全程跳转SETJMP.H 318
4.10.10计算结构体成员的偏移量STDDEF.H 319
4.10.11创建测试条件ASSERT.H 319
第5章 A51宏汇编器 321
5.1符号与表达式 323
5.2汇编伪指令 327
5.2.1段控制指令 328
5.2.2符号定义指令 331
5.2.3存储器初始化指令 334
5.2.4存储器保留指令 335
5.2.5过程声明指令(仅用于Ax51) 336
5.2.6程序链接指令 338
5.2.7地址控制指令 339
5.2.8其他指令 340
5.3宏处理器 340
5.3.1标准宏处理器 341
5.3.2嵌套宏定义 344
5.3.3宏调用 345
5.3.4 C宏处理器 349
5.3.5 MPL宏处理器 351
5.3.6 MPL函数 353
5.3.7 MPL条件处理函数 357
5.3.8 MPL字符串处理函数 360
5.4汇编控制命令 362
5.4.1汇编控制命令详解 363
5.4.2条件汇编命令 371
第6章 BL51/Lx51链接定位器与实用工具 375
6.1 BL51 /Lx51的链接定位方式 375
6.1.1链接定位中的数据段处理 375
6.1.2链接定位器的引用 378
6.1.3应用程序在存储器空间中的定位 379
6.1.4数据覆盖 381
6.1.5代码分组 383
6.1.6分组配置 385
6.2链接定位控制命令详解 393
6.2.1列表文件控制命令 393
6.2.2输出文件控制命令 397
6.2.3段与存储器定位控制命令 401
6.2.4高级语言控制命令 418
6.3符号转换工具 425
6.3.1 Intel HEX文件格式与符号转换工具 425
6.3.2引用符号转换工具 OH51 /OHX51 426
6.3.3引用分组目标文件转换工具OC51 428
6.4库管理器LIBx51 428
第7章 RTX51实时多任务操作系统 432
7.1 RTX51一般介绍 432
7.2 RTX51技术参数 437
7.3使用RTX51 TINY的要求和限定 439
7.4 RTX51 TINY的任务管理 440
7.5 RTX51 TINY的配置 442
7.6 RTX51 TINY的系统函数 444
7.7 RTX51 TINY应用系统调试 449
第8章 8051单片机片内资源的C51应用编程 464
8.1编写C51应用程序的基本原则 464
8.2 C51应用中的一些常见问题与解决方法 465
8.3 8051单片机中断系统应用编程 468
8.3.1外部中断源扩展 468
8.3.2中断嵌套 470
8.4 8051单片机定时器/计数器应用编程 473
8.4.1定时器方式应用 474
8.4.2计数器方式应用 478
8.5利用定时器产生音乐 479
8.6 8051单片机串行口应用编程 483
8.6.1 8051串行口实现串/并转换应用编程 483
8.6.2 8051串行口的通信方式应用编程 487
8.7 P89C51 RD2单片机片内FLASH在应用中编程的C51驱动程序 504
8.8 80C552单片机内部A/D转换器的C51驱动程序 517
8.8.1 80C552单片机简介 517
8.8.2 80C552内部ADC的应用 519
8.8.3使用80C552内部ADC的C51驱动程序 523
第9章 8051单片机片外扩展的C51应用编程 529
9.1 LED数码管显示接口应用编程 529
9.1.1软件译码和动态扫描的LED数码管显示接口应用编程 530
9.1.2 8位共阴极LED数码管驱动器MAX7219应用编程 532
9.2非编码矩阵键盘接口应用编程 538
9.2.1采用8155实现的矩阵键盘及数码管显示接口应用编程 539
9.2.2采用8279实现的矩阵键盘及数码管显示接口应用编程 544
9.3 LCD液晶模块显示接口应用编程 550
9.3.1点阵字符型LCD显示接口应用编程 551
9.3.2 12864点阵图形LCD显示接口应用编程 562
9.3.3内置T6963C控制器的点阵图形LCD显示接口应用编程 570
9.4 D/A与A/D转换接口应用编程 580
9.4.1 DAC0832转换接口应用编程 581
9.4.2串行接口DAC芯片MAX517应用编程 584
9.4.3 ADC0809转换接口应用编程 588
9.4.4 ICL7135转换接口应用编程 592
9.4.5串行接口ADC芯片TLC549应用编程 596
9.5单片机I2C总线扩展应用编程 600
9.5.1 I2C总线简介 600
9.5.2 I2C总线通用驱动程序 603
9.5.3 I2C接口器件24C04的读/写程序 606
9.6 8051单片机存储器扩展与测试应用编程 610
9.6.1测试8051应用系统总线与扩展存储器的C51驱动程序 610
9.6.2 8051扩展FLASH存储器在系统编程的C51驱动程序 613
第10章 Keil C51综合应用编程实例 626
10.1有关C51编程的若干实际应用技巧 626
10.2 C51与汇编语言混合编程与生成应用库文件 632
10.2.1 C51与汇编语言混合编程 632
10.2.2在μVision4中生成应用库文件 634
10.3在μ Vision4中应用硬件目标板 635
10.3.1带MON51监控程序的硬件目标板 636
10.3.2带FLASH MON51监控程序的硬件目标板 640
10.4红外遥控系统设计 642
10.4.1功能要求 642
10.4.2硬件电路设计 642
10.4.3软件程序设计 643
10.5简易电子琴设计 650
10.5.1功能要求 650
10.5.2硬件电路设计 650
10.5.3软件程序设计 650
10.6带农历的电子万年历设计 655
10.6.1功能要求 655
10.6.2硬件电路设计 655
10.6.3软件程序设计 658
10.7电子密码锁设计 671
10.7.1功能要求 671
10.7.2硬件电路设计 671
10.7.3软件程序设计 671
10.8 DS18B20多点温度监测系统设计 687
10.8.1功能要求 687
10.8.2硬件电路设计 688
10.8.3软件程序设计 692
10.9 STH11数字温-湿度测量系统设计 700
10.9.1功能要求 700
10.9.2硬件电路设计 700
10.9.3软件程序设计 704
10.10单片机SD卡读/写接口设计 710
10.10.1功能要求 710
10.10.2硬件电路设计 710
10.10.3软件程序设计 712
附录A Keil C51与ANSI C的差别 717
附录B Keil C51不同版本的差别 719
附录C 代码优化 723
附录D C51编译器的限制 726
附录E 关于配套光盘及硬件目标板 727
参考文献 728