标题：51单片机C语言开发详解
基本信息
作者： 张天凡  51单片机C语言开发详解丛书名： 完全手册
出版社：电子工业出版社
ISBN：9787121064012
上架时间：2008-6-30
出版日期：2008 年6月
开本：16开
页码：508
版次：1-1
内容简介
本书由浅入深、循序渐进地介绍了8051内核单片机的系统知识和开发方法，并以atmel公司生产的at89s51单片机为实例，具体讲解了单片机在各种嵌入式系统中的应用。
全书共分13章，对单片机基本概念、8051单片机内核结构、单片机的汇编与c语言编程、单片机的开发环境及方法进行了详细的介绍；并通过具体的开发实例，讲解了嵌入式系统中的接口技术、串行通信、数模转换、模数转换、现场总线等知识与开发技巧。本书最大的特色在于每一个实例都力求让读者真正了解从原理到实现的具体过程。因此本书介绍的知识虽然基于atmel at89s51型处理器，但讲解的基本设计原理和技术都是通用的，通过对本书的学习，读者可以完全具备将书中的技术应用于其他处理器的能力。
本书内容系统完整，注重综合应用，适合初学单片机、嵌入式系统设计的读者学习，同时也可用做高校相关专业师生和社会培训班的教材。对于从事嵌入式系统开发的工程技术人员也极具参考价值。
目录
第一篇  基 础 知 识
第1章  单片机基础知识
了解单片机的来龙去脉，开始嵌入式学习之旅：本章讲解单片机的基本概念，以及单片机在不同领域的运用，并对单片机的发展趋势进行了介绍。
1.1  单片机简介
1.2  单片机的发展状况
1.3  单片机的应用领域
1.3.1  机电一体化
1.3.2  智能仪表仪器
1.3.3  工业现场控制
1.3.4  军事技术
1.3.5  分布式控制系统
1.3.6  家用电子产品
1.4  单片机的发展趋势：高性能化
1.4.1  采用双cpu结构
1.4.2  增加数据总线宽度
1.4.3  采用流水线结构
1.5  单片机的发展趋势：存储器大容量化
1.5.1  不断增大存储容量
1.5.2  flash技术
1.5.3  程序保密处理
.　　1.6  单片机的发展趋势：接口多样化
1.6.1  引脚数目不断增多
1.6.2  并行口的驱动能力不断提高
1.6.3  i/o口的逻辑控制功能不断增强
1.6.4  特殊的串行接口功能不断增多
1.7  单片机的发展趋势：集成化
1.7.1  外围电路集成
1.7.2  片内rom、ram等集成
1.7.3  其他功能模块集成
1.8  单片机的发展趋势：低功耗化
1.9  mcs-51单片机的选型
第2章  at89s51单片机系统结构和性能
深入51单片机内部，打好嵌入式学习基石：通过本章学习51单片机的内部结构，了解各个模块之间的关系，真正弄清单片机的组成。
2.1  at89s51的性能参数
2.2  at89s51单片机内部结构
2.2.1  8051结构
2.2.2  at89s51内部结构
2.2.3  算术逻辑运算单元（alu）
2.2.4  特殊功能寄存器组（sfr）
2.2.5  sfr——程序计数器（pc）
2.2.6  sfr——累加器（acc）
2.2.7  sfr——b寄存器
2.2.8  sfr——堆栈指针（sp）
2.2.9  sfr——数据指针（dptr）
2.2.10  sfr——程序状态字（psw）
2.2.11  sfr——工作寄存器r0～r7
2.2.12  节电模式（idle mode）
2.2.13  掉电模式（power down mode）
2.3  at89s51单片机的引脚描述
2.3.1  供电引脚
2.3.2  外接晶振引脚
2.3.3  内部时钟方式
2.3.4  有源晶振
2.3.5  外部时钟信号
2.3.6  控制引脚：rst
2.3.7  控制引脚： 
2.3.8  控制引脚： 
2.3.9  控制引脚： 
2.3.10  i/o引脚：p0口
2.3.11  i/o引脚：p1口
2.3.12  i/o引脚：p2口
2.3.13  i/o引脚：p3口
2.4  at89s51单片机存储器的组织形式
2.4.1  程序存储器
2.4.2  数据存储器
2.4.3  工作寄存器区
2.4.4  位寻址区
2.4.5  堆栈和数据缓冲器区
2.4.6  位寻址空间
2.5  at89s51单片机的输入输出接口
2.5.1  i/o口的读/改/写特性
2.5.2  端口负载能力与接口要求
2.5.3  外扩存储器接口
2.6  at89s51单片机的复位与cpu时序
2.6.1  复位电路
2.6.2  cpu时序
2.6.3  cpu时序：单字节单周期指令时序
2.6.4  cpu时序：双字节单周期指令时序
2.6.5  cpu时序：单字节双周期指令时序
2.6.6  cpu时序：movx指令时序
2.7  at89s51单片机的定时器与时钟
2.7.1  at89s51定时器工作原理
2.7.2  定时器t0和t1的内部结构
2.7.3  定时器工作模式：模式0
2.7.4  定时器工作模式：模式1
2.7.5  定时器工作模式：模式2
2.7.6  定时器工作模式：模式3
2.8  at89s51单片机的中断系统
2.8.1  中断基本概念
2.8.2  at89s51中断系统
2.8.3  定时器/计数器控制寄存器（tcon）
2.8.4  串行口控制寄存器（scon）
2.8.5  中断使能控制寄存器（ie）
2.8.6  中断优先级控制寄存器（ip）
2.8.7  at89s51中断初始化与扩展
2.8.8  at89s51中断请求与清除
2.8.9  at89s51中断响应时间
2.9  at89s51单片机的看门狗
2.9.1  看门狗的基本概念
2.9.2  at89s51看门狗的操作方法
2.10  at89s51的编程接口
2.10.1  并行编程接口
2.10.2  串行编程接口
第3章  at89s51单片机的指令系统
学习指令系统，了解51单片机的操作语言：汇编是最接近机器码的语言，通过本章的学习，掌握驾驭51单片机的方法。打好汇编的基础，才能真正理解单片机的工作方法。
3.1  指令系统概述
3.1.1  指令格式
3.1.2  at89s51的伪汇编指令
3.2  at89s51单片机的寻址方式
3.2.1  立即寻址
3.2.2  直接寻址
3.2.3  寄存器寻址
3.2.4  寄存器间接寻址
3.2.5  相对寻址
3.2.6  基址加变址寻址
3.2.7  位寻址
3.2.8  页面寻址
3.2.9  寻址方式与存储器的对应
3.3  at89s51单片机的数据传送指令
3.3.1  以累加器a为目的操作数的指令
3.3.2  以rn为目的操作数的指令
3.3.3  以直接地址为目的操作数的指令
3.3.4  以间接地址为目的操作数的指令
3.3.5  16位数据传送的指令
3.3.6  查表指令
3.3.7  累加器a与片外ram数据传送指令
3.3.8  堆栈操作指令
3.3.9  交换指令
3.4  at89s51单片机的算术操作指令
3.4.1  不带进位的加法指令
3.4.2  带进位的加法指令
3.4.3  带进位的减法指令
3.4.4  增量（加1）指令
3.4.5  减量（减1）指令
3.4.6  十进制调整指令
3.4.7  乘法指令
3.4.8  除法指令
3.5  at89s51单片机的逻辑与移位指令
3.5.1  对累加器a的单操作数的逻辑操作指令
3.5.2  两个操作数的逻辑操作指令
3.6  at89s51单片机的程序控制流指令
3.6.1  无条件转移指令
3.6.2  条件转移指令
3.6.3  调用和返回指令
3.6.4  空操作指令
3.7  at89s51单片机的位操作指令
3.7.1  位数据传送指令
3.7.2  位变量修改指令
3.7.3  位变量逻辑与、或指令
3.7.4  位变量条件转移指令
第4章  keil c51单片机开发环境
学习c语言开发环境，更加高效的设计：通过keil uversion的集成开发环境，让你的开发更加简单、快捷、高效。单片机的c语言开发，基础的c语言的知识不能忘，c语言知识点串讲，教会你c51嵌入式编程。
4.1  c语言编程基础
4.1.1  c51源程序的基本结构
4.1.2  标识符与关键字
4.1.3  数据类型
4.1.4  常量与变量
4.1.5  函数
4.1.6  数组与指针
4.1.7  结构体与联合体
4.1.8  类型定义
4.1.9  宏定义与条件编译
4.2  keil c51开发工具
4.2.1  μ vision 3集成开发环境结构
4.2.2  keil c51的c编译器
4.2.3  keil c51的a51宏汇编器
4.2.4  keil c51的bl51代码连接器/定位器
4.2.5  keil c51的oc51目标文件转换器
4.2.6  keil c51的oh目标hex文件转换器
4.2.7  keil c51的lib51库文件管理器
4.3  μvision 3集成开发环境
4.3.1  μ vision 3 ide
4.3.2  μ vision 3 c51编译器与测试程序
4.3.3  μ vision 3的安装
4.4  集成开发环境的使用
4.4.1  μ vision 3的项目管理窗口
4.4.2  μ vision 3的菜单栏
4.4.3  μ vision 3的工具栏
4.4.4  μ vision 3的快捷键
4.4.5  μ vision 3的功能窗口
4.4.6  源代码编辑窗口
4.4.7  watch &call stack窗口
4.4.8  memory窗口
4.4.9  cpu 寄存器窗口
4.4.10  串行窗口
4.4.11  性能分析窗口
4.4.12  代码覆盖窗口
4.4.13  符号浏览窗口
4.5  项目的开发与管理
4.5.1  创建项目
4.5.2  添加配置启动代码
4.5.3  项目设置
4.5.4  target选项卡
4.5.5  output选项卡
4.5.6  listing选项卡
4.5.7  c51选项卡
4.5.8  a51选项卡
4.5.9  bl51 locate选项卡
4.5.10  bl51 misc选项卡
4.5.11  debug选项卡
4.5.12  项目编译
4.5.13  列表文件（c语言）
4.5.14  列表文件（汇编语言）
第二篇  典型模块设计
第5章  atmel at89s51学习板简介
好的学习环境能够使得学习事半功倍：通过学习板的帮助，你能够快速地进入嵌入式开发，通过实例的学习与调试，顺利掌握51单片机的开发方法。
5.1  开发板硬件构成
5.2  模块介绍
5.2.1  单片机最小系统
5.2.2  跑马灯
5.2.3  键盘阵列
5.2.4  4位8段共阴极数码管
5.2.5  a/d转换模块
5.2.6  d/a输出模块
5.2.7  rs-232通信模块
5.2.8  can通信接口
5.2.9  其他扩展接口
第6章  i/o输出实战——跑马灯驱动电路与软件设计
通过旋转的跑马灯学习单片机程序：单片机i/o操作是单片机模块的最基本功能，本章以跑马灯系统设计为实例，详细讲解at89s51的i/o口输出功能的使用和设计。
6.1  跑马灯电路设计
6.1.1  跑马灯
6.1.2  发光二极管基础知识
6.1.3  发光二极管与单片机接口
6.1.4  发光二极管的限流
6.1.5  跑马灯电路设计
6.2  跑马灯软件设计
6.2.1  第一个单片机程序
6.2.2  跑马灯编程——工作状态指示
6.2.3  跑马灯编程——蛇形花样
6.2.4  跑马灯编程——龙舞花样
6.2.5  定时器中断延时程序设计
6.3  问题与思考
6.3.1  跑马灯电路设计问题
6.3.2  延时程序设计问题
6.3.3  计时器程序设计问题
第7章  输入接口实战——键盘接口电路与软件设计
键盘输入实战，开启人机交互之门：键盘作为人机交互界面中十分重要的工具，在各种嵌入式系统中得到了广泛的应用。本章详细讲解单片机系统的键盘输入接口设计方法与经验技巧，带你完全掌握键盘的设计方法。
7.1  键盘接口电路设计
7.1.1  键盘基本原理
7.1.2  按键确认
7.1.3  按键消抖
7.1.4  键值的读取
7.1.5  对重键的处理
7.1.6  直接式键盘接口电路设计
7.1.7  阵列式键盘接口电路设计
7.1.8  中断键盘接口电路设计
7.2  键盘接口程序设计
7.2.1  直接式键盘接口软件设计
7.2.2  键盘接口软件消抖程序设计
7.2.3  阵列式键盘接口软件设计
7.2.4  中断式阵列键盘接口软件设计
7.2.5  中断式直接键盘接口软件设计
7.3  问题与思考
7.3.1  直接键盘接口电路设计问题
7.3.2  阵列式键盘接口电路设计问题
7.3.3  中断键盘接口电路设计问题
第8章  串口通信实战——rs-232接口电路与软件设计
单片机如何与计算机通信，如何进行蓝牙连接？这就要用到rs232了。鼠标、键盘甚至打印机、扫描仪、调制解调器都可以通过串行通信与计算机相连，通过本章的学习，打开单片机的通信之门。
8.1  串行通信基本原理
8.1.1  同步通信与异步通信
8.1.2  波特率
8.1.3  单工、半双工与全双工通信
8.2  rs-232通信接口设计
8.2.1  rs-232通信协议
8.2.2  rs-232通信接口定义
8.2.3  rs-232接口芯片max232
8.2.4  基于at89s51的rs-232接口电路设计
8.2.5  单片机之间的uart通信
8.2.6  rs-232串口调试软件
8.3  rs-232通信程序设计
8.3.1  单片机向计算机发送数据实例
8.3.2  计算机向单片机发送数据实例
8.3.3  串口通信中断实例
8.3.4  蓝牙通信模块扩展实例
8.4  问题与思考
第9章  a/d转换实战——模拟量输入电路与软件设计
让单片机有感觉，活起来的单片机更能干！真实世界中所有物理量都是模拟量，一个基于单片机的嵌入式系统要想控制一个实际的设备，就必须要感知到真实世界的模拟量变化，通过本章的学习，让你的单片机活起来！
9.1  a/d转换器的基本原理
9.1.1  逐次逼近式a/d转换器原理
9.1.2  双积分式a/d转换器原理
9.1.3  a/d转换器的技术指标
9.2  基于at89s51的a/d转换器电路设计
9.2.1  adc0809扩展电路设计
9.2.2  ad7812扩展电路设计
9.3  基于at89s51的a/d转换实用案例
9.3.1  ad7812扩展软件设计
9.3.2  温度测量
9.3.3  电流测量
9.3.4  光强测量
9.4  问题与思考
9.4.1  磁珠（ferrite bead）
9.4.2  电流测量电路
9.4.3  光敏电阻测量电路
第10章  d/a转换实战——模拟量输出电路与软件设计
模拟量的输出，你知道有几种方法？本章以at89s51单片机为基础，详细讲解at89s51单片机的模拟量输出电路设计方法与经验技巧。通过本章的学习，让51单片机输出一个真实的物理量。
10.1  d/a转换器的基本原理
10.1.1  权电阻式d/a转换器原理
10.1.2  r-2r t型网络d/a转换器原理
10.1.3  r-2r倒t型网络d/a转换器原理
10.1.4  d/a转换器的转换精度
10.1.5  d/a转换器的转换速度
10.1.6  d/a转换器的温度系数
10.2  dac0832数模转换器电路设计
10.2.1  dac0832的内部结构
10.2.2  电流电压转换接口
10.2.3  dac0832的直接工作方式
10.2.4  dac0832的单缓冲工作方式
10.2.5  dac0832的双缓冲工作方式
10.3  串行接口dac7614数模转换器电路设计
10.3.1  dac7614的内部结构
10.3.2  dac7614的单端工作模式
10.3.3  dac7614的双端工作模式
10.3.4  dac7614的数字接口
10.4  基于pwm的低成本数模转换器电路设计
10.4.1  pwm简介
10.4.2  基于单运放的阻容滤波d/a转换器
10.5  dac0832程序设计
10.5.1  at89s51扩展dac0832的双缓冲电路
10.5.2  精密电压参考源ad780
10.5.3  d/a转换程序设计
10.6  三角波发生器设计
10.6.1  三角波发生器电路
10.6.2  定时器中断
10.6.3  三角波发生器程序设计
10.7  dac7614程序设计
10.7.1  dac7614扩展电路
10.7.2  隔离电源dcp010505
10.7.3  光耦6n137
10.7.4  dac7614程序设计
10.8  pwm dac程序设计
10.8.1  电路原理图
10.8.2  程序设计
10.9  问题与思考
第三篇  综 合 实 例
第11章  综合实例——多功能数字温度计设计
用单片机开发你的产品：a/d转换、spi接口、键盘输入、时钟计时、电源系统，本章讲解的多功能数字温度计包含了之前学习的大部分设计内容，可谓麻雀虽小，五脏俱全。
11.1  系统结构与分析
11.1.1  多功能数字温度计功能分析
11.1.2  多功能数字温度计系统分析
11.2  ds1620温度传感器电路
11.2.1  ds1620的性能指标
11.2.2  ds1620的引脚定义
11.2.3  ds1620的温度格式
11.2.4  ds1620的三线数据串行接口
11.2.5  ds1620的控制寄存器
11.2.6  ds1620的操作字
11.2.7  ds1620的单独工作模式
11.2.8  ds1620的单片机接口电路
11.3  max7219数码管驱动电路
11.3.1  max7219的性能指标
11.3.2  max7219的引脚定义
11.3.3  max7219的串行数据通信
11.3.4  max7219的内部寄存器地址
11.3.5  max7219的数字位寄存器
11.3.6  max7219的停机寄存器
11.3.7  max7219的测试寄存器
11.3.8  max7219的亮度寄存器
11.3.9  max7219的扫描界限寄存器
11.3.10  max7219的译码寄存器
11.3.11  max7219驱动电路设计
11.4  其他硬件电路设计
11.4.1  at89s51单片机最小系统电路
11.4.2  键盘输入电路
11.4.3  电源电路
11.4.4  多功能数字温度计的硬件电路
11.5  多功能数字温度计软件设计
11.5.1  软件结构分析
11.5.2  ds1620驱动程序设计
11.5.3  max7219驱动程序设计
11.5.4  键盘接口程序设计
11.5.5  蜂鸣器驱动程序设计
11.5.6  定时器时钟基准设计
11.5.7  时钟显示程序设计
11.5.8  闹铃程序设计
11.5.9  按键操作程序设计
11.5.10  显示温度程序设计
11.5.11  主程序
11.6  多功能数字温度计工程文件
11.6.1  主函数
11.6.2  温度传感器ds1620函数库
11.6.3  ds1620引脚定义
11.6.4  数码管驱动max7219函数库
11.6.5  max7219头文件定义
11.6.6  键盘操作函数
11.6.7  键盘操作定义
11.6.8  时钟函数库
11.6.9  时间函数定义
第12章  综合实例——工业can网络控制系统节点设计
can总线是工业上的网络总线，通过这个实例，你将了解到can总线协议的制定与实现，并通过一个主机对分布在厂房各处的设备进行控制和监控，利用can网络有效地组织各个设备的通信与管理。
12.1  系统结构与分析
12.1.1  工业can网络控制系统节点功能分析
12.1.2  工业can网络控制系统分析
12.2  can总线知识简介
12.2.1  can总线的特点
12.2.2  can总线的物理层
12.2.3  can总线的报文帧
12.2.4  can总线的仲裁
12.3  工业can网络控制系统节点硬件电路设计
12.3.1  at89s51单片机最小系统电路
12.3.2  can总线控制电路
12.3.3  can收发器电路
12.3.4  时钟显示电路
12.3.5  数字量输入输出
12.3.6  跑马灯及其他接口电路
12.3.7  工业can网络控制节点总电路
12.4  工业can网络控制系统通信协议设计
12.4.1  拓扑结构与接口定义
12.4.2  通信约定协议
12.4.3  标识符定义
12.4.4  过程数据对象（pdo）
12.4.5  服务数据对象（sdo）
12.4.6  同步对象（sync）
12.4.7  时间戳对象（time）
12.4.8  紧急对象（emcy）
12.5  工业can网络控制节点程序设计
12.5.1  sja1000芯片寄存器与关键字定义
12.5.2  sja1000.c底层驱动函数库
12.5.3  时钟操作定义
12.5.4  时钟操作函数库
12.5.5  485信息定义
12.5.6  485通信函数库
12.5.7  max7219寄存器与关键字定义
12.5.8  max7219数码管驱动函数库
12.5.9  数码管操作函数库
12.5.10  can总线操作函数库
12.5.11  输入输出管理函数
12.5.12  综合节点功能函数
12.5.13  引脚定义
12.5.14  can操作函数声明
12.5.15  特殊变量定义
第13章  综合实例——gps接收机
卫星导航，你用51就可以做到：深入gps定位原理，通过之前所学，开发一个属于你自己的导航仪。通过该实例，读者能够学习到gps定位、gps协议解码、图形点阵lcd等各方面的知识。
13.1  系统结构与分析
13.1.1  gps接收机功能分析
13.1.2  gps接收机系统分析
13.2  gps定位知识简介
13.2.1  gps定位的特点
13.2.2  gps定位的主要功能
13.2.3  gps定位系统的发展历史
13.2.4  现今的gps系统
13.2.5  gps的定位原理
13.3  gps通信协议——nmea protocol
13.3.1  nmea协议结构
13.3.2  定位信息gpgga帧
13.3.3  卫星信息gpgsa帧
13.3.4  地理定位信息gpgll帧
13.3.5  卫星状态gpgsv帧
13.3.6  最小信息gprmc帧
13.3.7  地表矢量gpvtg帧
13.3.8  信号残差计算gpgrs帧
13.3.9  伪随机误差gpgst帧
13.3.10  时间信息gpzda帧
13.3.11  自修正gpgbs帧
13.4  gps接收机显示终端——点阵型lcd液晶
13.4.1  ks0713简介
13.4.2  ks0713的单片机接口
13.4.3  ks0713的并行通信时序
13.4.4  ks0713的串行通信时序
13.4.5  ks0713的data ram
13.4.6  ks0713的列寻址
13.4.7  ks0713的页寻址
13.4.8  液晶驱动时序
13.4.9  ks0713的控制指令
13.4.10  读显示数据指令read display data
13.4.11  写显示数据指令write display data
13.4.12  读取状态指令read status
13.4.13  显示开/关指令display on/off
13.4.14  初始化行指令initial display line
13.4.15  参考电压选择指令reference voltage select
13.4.16  设置页地址指令set page address
13.4.17  设置列地址指令set column address
13.4.18  选择adc指令adc select
13.4.19  翻转指令reverse display on / off
13.4.20  全满显示指令entire display on / off
13.4.21  选择lcd偏移指令select lcd bias
13.4.22  设置读偏移指令set modify-read
13.4.23  复位读偏移指令reset modify-read
13.4.24  复位治疗reset
13.4.25  shl选择指令shl select
13.4.26  功耗控制指令power control
13.4.27  线性电阻选择指令regulator resistor select
13.4.28  设置静态指示状态指令set static indicator state
13.5  gps接收机硬件电路设计
13.5.1  单片机最小电路
13.5.2  电源电路
13.5.3  gps模块电路
13.5.4  lcd点阵液晶电路
13.5.5  内存扩展电路
13.5.6  gps接收机硬件原理图
13.6  gps接收机程序设计
13.6.1  nmea基本信息定义info.h分析
13.6.2  时间结构定义time.h分析
13.6.3  帧类型定义sentence.h分析
13.6.4  帧初始化操作sentence.c分析
13.6.5  nmea数据流解码parse.c分析
13.6.6  nmea解码封装声明parser.h分析
13.6.7  解码封装parser.c分析
13.6.8  地理函数声明mymath.h分析
13.6.9  地理计算函数mymath.c分析
13.6.10  字符串处理函数myformat.c分析
13.6.11  调试函数声明context.h分析
13.6.12  调试函数context.c分析
13.6.13  液晶显示定义lcd_library.h分析
13.6.14  液晶显示函数库lcd_library.c分析
13.6.15  主程序main.c 分析