第1章 微控制器的原理 1
1.1 微控制器与计算机的关系 1
1.2 微控制器系统简介 2
1.3 微控制器的发展 3
1.4 8位机发展的3次技术飞跃 4
第2章 C8051F系列单片机结构 7
2.1 C8051F系列单片机总体体系结构 7
2.1.1 C8051F系列单片机的主要模块特性 7
2.1.2 C8051F与MCS-51系列单片机的性能比较 8
2.2 CIP-51微控制器 12
2.3 存储器组织 13
2.3.1 程序存储器 14
2.3.2 数据存储器 15
2.3.3 通用寄存器 15
2.3.4 位寻址空间 15
2.3.5 堆栈 15
2.3.6 片内数据存储器读写实例 17
2.4 特殊功能寄存器 18
2.5 FLASH存储器 26
2.5.1 非易失性数据存储 28
2.5.2 安全选项 28
2.6 外部数据存储器和片内XRAM 31
2.6.1 端口选择和配置 33
2.6.2 复用和非复用选择 34
2.6.3 存储器模式选择 35
2.6.4 时序 36
2.7 时钟系统 39
2.7.1 时序与时钟 39
2.7.2 设计和使用时钟时应考虑的问题 41
2.7.3 时钟控制寄存器 41
2.7.4 外部振荡器举例 44
2.7.5 系统时钟初始化编程实例 46
2.8 复位电路 46
2.8.1 复位原理 46
2.8.2 复位电路设计注意事项 48
2.8.3 C8051F系列的8种复位源 48
2.9 中断系统 51
2.10 电源管理 55
2.10.1 电源管理原理 55
2.10.2 电源管理注意事项 57
2.11 嵌入式系统调试基础:JTAG 57
2.11.1 JTAG原理 57
2.11.2 边界扫描 59
2.11.3 FLASH存储器编程命令 61
第3章 C8051F系列的模拟外设 63
3.1 模拟外设组成部分 63
3.2 A/D转换器简介 63
3.2.1 A/D转换器的工作原理 64
3.2.2 设计A/D转换器的注意事项 65
3.3 ADC0的组成及其控制 66
3.3.1 ADC0的工作方式 67
3.3.2 ADC0的SFR定义 69
3.3.3 ADC0的电气特性 73
3.3.4 ADC0编程实例 74
3.4 ADC2的组成及其控制 76
3.4.1 ADC2的工作方式 77
3.4.2 ADC2的SFR 78
3.4.3 ADC2可编程窗口检测器 81
3.5 12位电压输出DAC 83
3.5.1 DAC工作过程 83
3.5.2 DAC输出更新 84
3.5.3 DAC输出格式化 84
3.5.4 DAC编程实例 86
3.6 高压差分放大器 90
3.7 比较器 93
3.7.1 比较器的工作原理 93
3.7.2 比较器应用编程实例 95
3.8 电压基准 97
第4章 数字I/O端口 100
4.1 端口原理和直流参数 100
4.2 I/O端口设计原理与注意事项 101
4.2.1 I/O端口设计原理 101
4.2.2 I/O端口设置注意事项 103
4.3 C8051F04x系列的I/O功能和优先权交叉开关译码器 104
4.3.1 交叉开关引脚分配 105
4.3.2 配置端口引脚的输出方式 106
4.3.3 配置端口引脚为数字输入 106
4.3.4 弱上拉 106
4.3.5 配置端口1、2和3的引脚为模拟输入 106
4.3.6 交叉开关引脚分配示例 107
4.4 交叉开关网络和I/O端口数据以及方式控制寄存器 108
4.4.1 交叉开关控制寄存器 108
4.4.2 端口P0~P3 110
4.4.3 端口P4~P7 113
4.4.4 交叉开关设置小结 117
4.5 SMBus系统管理总线(I2C总线) 117
4.5.1 使用I2C总线应注意的问题 117
4.5.2 SMBus原理和SMBus协议 118
4.5.3 特殊功能寄存器 122
4.6 串行通信 128
4.6.1 增强型串行外设接口(SPI0)原理和信号说明 129
4.6.2 SPI0工作方式 132
4.6.3 SPI特殊功能寄存器 134
4.6.4 SPI0小结 136
4.7 异步串行通信UART0和UART1 136
4.7.1 UART0工作原理 136
4.7.2 UART0工作方式 137
4.7.3 多机通信 141
4.7.4 帧错误和传输错误检测 142
4.7.5 UART0的控制寄存器 142
4.7.6 UART1 145
4.7.7 UART0与UART1比较 149
4.8 通用计数器/定时器和可编程计数器/定时器 150
4.8.1 MCU输入信号和输出信号类型 150
4.8.2 通用定时器和计数器(定时器0,1) 151
4.8.3 定时器2、定时器3和定时器4 159
4.8.4 可编程计数器阵列 164
4.8.5 通用计数器/定时器、PCA小结 178
第5章 C51的程序结构与数据类型 179
5.1 C语言与C8051F系列单片机 179
5.1.1 C语言的特点与C语言向单片机移植 179
5.1.2 C51编译器 180
5.2 C51的程序结构 181
5.2.1 C51程序的一般格式 182
5.2.2 C51语言程序的基本结构 183
5.3 C51的数据类型 185
5.3.1 数据与数据类型 185
5.3.2 常量 186
5.3.3 变量 189
5.3.4 C51构造数据类型 196
5.3.5 指针 205
第6章 C51的运算符及数据的存储模式 219
6.1 C51的单词及运算符 219
6.1.1 C51的单词 219
6.1.2 C51的运算符 224
6.2 数据的存储类型和存储模式 234
6.2.1 C8051F系列单片机的存储器 234
6.2.2 C51存储类型与C8051F系列单片机存储器 235
6.2.3 存储模式 235
6.3 C51对SFR、可寻址位、存储器和I/O端口的定义 238
6.3.1 C51对SFR的定义 238
6.3.2 C51对可寻址位的定义 238
6.3.3 C51对存储器和I/O端口的绝对地址访问 240
第7章 C51的函数、控制语句及程序设计 241
7.1 C51函数 241
7.1.1 函数的分类 241
7.1.2 函数的说明 242
7.1.3 函数的参数和函数返回值 249
7.1.4 函数的调用 252
7.1.5 数组、指针与函数调用 257
7.1.6 内部函数和外部函数 263
7.1.7 C51库函数介绍 264
7.2 选择结构流程控制语句 266
7.2.1 if语句 267
7.2.2 switch/case语句 269
7.2.3 循环结构流程控制语句 270
7.3 C51的预处理器 278
7.3.1 包含文件伪指令 279
7.3.2 伪指令宏 279
7.3.3 条件编译伪指令 283
7.3.4 编译器伪指令 283
7.3.5 #error伪指令 284
7.4 C51和汇编语言的混合编程 284
7.4.1 C51和汇编语言的性能比较 284
7.4.2 C51和汇编语言的混合编程方法 285
7.4.3 在不同存储模式下的C51和汇编语言的混合编程 286
第8章 C8051F应用开发实例 291
8.1 I/O端口应用——步进电机的驱动 292
8.1.1 步进电机原理 292
8.1.2 步进电机驱动程序 293
8.2 SPI接口应用——ISD4004语音录放芯片 295
8.2.1 SPI总线 295
8.2.2 ISD4004语音芯片 298
8.2.3 ISD4004芯片的程序设计 301
8.3 I2C总线应用——LM92温度传感器 312
8.3.1 I2C总线 312
8.3.2 LM92温度传感器 312
8.3.3 LM92的应用与程序设计 315
8.4 内部Flash在线编程 331
8.4.1 现有的Flash及编程方法 331
8.4.2 在线实时自编程的原理和实现方案 333
第9章 C8051控制器局域网(CAN) 337
9.1 控制系统的发展和技术特点 337
9.1.1 现场总线的定义、特点及其与DCS的区别 337
9.1.2 现场总线产生因素 339
9.2 控制器局域网(CAN) 340
9.2.1 CAN总线的分层结构 341
9.2.2 CAN总线的特点 342
9.2.3 CAN的技术规范 343
9.3 控制器局域网CAN技术概述 346
9.3.1 CAN总线数值 347
9.3.2 非破坏性的总线仲裁 347
9.3.3 多主和多节点接收 348
9.3.4 数据安全性 348
9.4 C8051F系列的CAN总线模块 349
9.4.1 功能概述 349
9.4.2 C8051F的控制器局域网(CAN0) 349
9.4.3 工作模式 350
9.5 CAN寄存器 354
9.5.1 CAN控制器协议寄存器 354
9.5.2 消息对象接口寄存器 355
9.5.3 消息处理器寄存器 355
9.5.4 CIP-51 MCU特殊功能寄存器 355
9.5.5 用CAN0ADR、CAN0DATH和CAN0DATL访问CAN寄存器 355
9.5.6 CAN0ADR自动加1功能 357
9.5.7 消息处理寄存器 357
9.6 寄存器功能详细说明 357
9.6.1 控制寄存器(索引号:0x00) 357
9.6.2 状态寄存器(索引号:0x01) 358
9.6.3 错误计数器寄存器(索引号:0x02) 359
9.6.4 位定时寄存器(索引号:0x03) 359
9.6.5 测试寄存器(索引号:0x05) 360
9.6.6 BRP扩展寄存器(索引号:0x06) 360
9.6.7 消息接口寄存器组 361
9.6.8 消息处理寄存器 365
9.7 CAN的应用 368
9.7.1 消息对象的管理 368
9.7.2 消息处理状态机 368
9.7.3 消息RAM的双向数据传输 368
9.7.4 消息的传输 369
9.7.5 对收到消息的接受过滤 369
9.7.6 接收/传输优先级 370
9.8 传输对象的配置 370
9.9 更新传输对象 371
9.10 接收对象的配置 371
9.11 接收消息的处理 372
9.12 先入先出FIFO缓冲器的设置 372
9.13 利用FIFO缓存的消息的接收 372
9.14 中断的控制 374
9.15 位时序的配置 374
9.15.1 位时和位率 374
9.15.2 位时序参数的计算 376
9.15.3 位时序实例 376
9.15.4 小结 378
9.16 CAN综合实例 378
第10章 C8051F综合实验设计 393
10.1 系统综述 393
10.2 键盘工作原理与程序设计 393
10.2.1 键盘的结构与工作原理 393
10.2.2 键盘输入程序的设计方法与流程 394
10.2.3 综合实验的键盘模块 395
10.2.4 键盘模块程序 396
10.3 LCD液晶显示器程序设计 399
10.3.1 液晶显示器的结构和工作原理 399
10.3.2 FM12864I图形点阵液晶显示器主要硬件构成说明 400
10.3.3 模块的外部接口 402
10.3.4 指令说明 402
10.3.5 读/写操作时序 404
10.3.6 综合实验LCD模块 405
10.3.7 LCD模块源程序 406
10.4 PCF8563 I2C实时时钟/日历芯片的工作原理与程序设计 416
10.4.1 PCF8563的特性 416
10.4.2 PCF8563结构框图 417
10.4.3 PCF8563引脚配置 417
10.4.4 功能描述 418
10.4.6 综合实验的实时时钟模块 426
10.4.7 实时时钟模块程序 427
10.5 RS-232串口通信原理与程序设计 434
10.5.1 MAX3232芯片介绍 434
10.5.2 综合实验UART模块 435
10.5.3 UART模块程序 436
10.6 外部存储器 437
10.7 12位ADC程序设计 438
10.8 主程序 444
附录A CIP-51指令集 449
附录B C51库函数 453
附录C 错误信息 459
附录D L51连接定位器使用错误提示 473
附录E 技术支持 480
附录F C8051F单片机开发工具 481
附录G 新华龙电子C8051F单片机结构教学实验机简介 482