第1章 基本概念和背景知识 1
1.1 鸟瞰单片机 1
1.1.1 学用单片机的必要性 1
1.1.2 单片机为什么令人入迷 3
1.1.3 学用单片机的现实意义 5
1.2 审视单片机 8
1.2.1 单片机究竟是什么 8
1.2.2 单片机的用途 10
1.2.3 单片机的特点 11
1.2.4 8位单片机的突出地位 12
1.3 锁定PIC系列8位单片机 13
1.3.1 Microchip公司简介 13
1.3.2 PIC系列单片机的优越之处 14
1.3.3 PIC单片机的庞大阵容 18
1.3.4 PIC16F87X的主要功能特点 22
1.3.5 为什么选PIC16F877作样板 23
1.4 写作思路和目标 25
1.5 常用的专业名词和技术术语 27
1.5.1 硬件方面 27
1.5.2 软件方面 30
思考题与练习题 32
第2章 PIC16F877硬件系统概况 33
2.1 PIC16F877内部结构概览 33
2.1.1 PIC16F877的核心区域 35
2.1.2 PIC16F877的外围模块区域 38
2.1.3 PIC16F87X系列型号性能对比 39
2.2 PIC16F87X封装形式和引脚功能 40
2.3 程序存储器和堆栈 45
2.4 RAM数据存储器(文件寄存器) 47
2.4.1 通用寄存器 52
2.4.2 特殊功能寄存器 53
2.5.2 复位外接电路 55
2.5.1 电源外接电路 55
2.5 电源、复位和时钟电路简介 55
2.5.3 时钟外接电路 56
2.6 输入/输出端口的基本功能 56
2.6.1 输入/输出端口相关的两个寄存器 57
2.6.2 输入/输出端口的基本结构 58
2.6.3 基本输入/输出端口的工作原理 60
思考题与练习题 62
第3章 指令系统分类解析 64
3.1 指令系统概览 64
3.1.1 指令的描述方法 64
3.1.2 指令的时空属性 65
3.1.3 指令的执行时序 66
3.1.4 指令的编码格式 66
3.2 指令的分类方法 67
3.2.1 按实现功能分类 67
3.2.3 按指令周期分类 69
3.2.2 按编码格式分类 69
3.2.4 按寻址方式分类 70
3.2.5 按携带操作数分类 70
3.2.6 按影响标志分类 70
3.2.7 按操作对象分类 70
3.2.8 按使用频度分类 71
3.3 寻址方式 71
3.3.2 直接寻址 72
3.3.1 立即寻址 72
3.3.3 间接寻址 73
3.3.4 位寻址 73
3.3.5 隐含寻址 74
3.4 指令系统分类解析 74
3.4.1 面向字节数据的操作类指令 74
3.4.2 面向位数据的操作类指令 77
3.4.3 面向常数操作和控制操作类指令 78
3.5 数据传递关系 79
3.6 指令系统的内在规律 80
3.7 “内核—寄存器—外围模块”相互关系 81
思考题与练习题 82
第4章 汇编程序设计基础和汇编语言工具链 84
4.1 概述 84
4.1.1 背景知识 84
4.1.2 汇编语言的语句格式 86
4.1.3 程序流程和整体结构 90
4.1.4 源程序文件的书写格式 90
4.2 常用伪指令 93
4.3 四种基本程序结构 95
4.3.1 顺序程序结构 95
【实验范例4.1】字节拆分 95
4.3.2 分支程序结构 96
【实验范例4.2】数值比较 96
4.3.3 循环程序结构 97
【实例范例4.3】空间填充 98
4.3.4 子程序结构 99
【实验范例4.4】极值挑选 100
4.4 两个PIC编程的特殊问题 101
4.4.1 数据存储器的体选寻址问题 101
【实验范例4.5】RAM体选寻址 104
4.4.2 程序跨页跳转和跨页调用问题 104
【实验范例4.6】ROM跨页跳转 106
4.5 四种个性化实用程序的设计方法 107
4.5.1 初始化程序段设计 107
4.5.2 延时程序设计 108
【实验范例4.7】软件延时 109
4.5.3 查表程序设计 110
【实验范例4.8】LED数码管驱动 112
4.5.4 散转程序设计 114
【实验范例4.9】散转程序 114
4.6 汇编器MPASM及其应用 115
4.6.1 汇编器MPASM简介 116
4.6.2 汇编器MPASM应用 118
【实验范例4.10】8位二进制计数器 119
4.6.3 汇编器“界面—命令行—LIST”选项对应关系 123
4.7 汇编语言工具链 124
4.7.1 工具链的构成和启动顺序 124
4.7.2 工具链的处理流程 126
4.8 输入文件的解读 128
4.8.1 解读包含文件(P16f877.inc) 128
4.8.2 解读源程序模板文件(f877temp.asm) 129
4.9.1 解读列表文件(.lst) 131
4.9 输出文件的解读 131
4.9.2 解读最终目标文件(.hex) 133
4.9.3 解读错误报告文件(.err) 134
思考题与练习题 134
第5章 软件集成开发环境MPLAB和软件模拟开发技术 137
5.1 MPLAB的组成 137
5.2 如何获取MPLAB 138
5.3.2 MPLAB的安装方法 140
5.3 如何安装与拆除MPLAB 140
5.3.1 MPLAB的安装要求 140
5.3.3 MPLAB的拆除方法 142
5.4 如何启动和退出MPLAB 142
5.4.1 MPLAB的快速上手 142
5.4.2 MPLAB工作环境简介 143
5.4.3 如何开启工作窗口 145
5.4.4 如何布局工作窗口 146
5.4.5 MPLAB的退出 148
5.5 如何设置开发模式 148
5.6 如何创建、保存和打开源文件 149
【实验范例5.1】循环递减实验程序 150
5.6.1 利用记事本创建源文件 150
5.6.2 利用MPLAB编辑器创建源文件 151
5.6.3 利用MPLAB编辑器查看、打开和关闭源文件 153
5.7 如何在MPLAB环境下创建和编辑第一个项目 154
5.8 如何在MPLAB环境下制作和保存目标文件 156
5.9 如何在MPLAB环境下关闭、打开和查看项目 158
5.9.1 关闭一个项目 158
5.9.2 打开一个项目 158
5.9.3 查看一个项目 159
5.10 如何调试目标程序 160
5.10.1 连续运行方式 160
5.10.2 设置观察窗口 161
5.10.3 单步运行方式 164
5.10.4 自动单步运行方式 164
5.10.5 设置断点运行方式 164
思考题与练习题 165
第6章 硬件综合开发工具MPLAB-ICD和硬件仿真开发技术 166
6.1 硬件工具链及其重要性 166
6.1.1 实时在线仿真器 167
6.1.2 程序烧写器 167
6.1.3 单片机目标板 168
6.1.4 单片机综合学习实验应用开发工具套件 169
6.2 MPLAB-ICD的特点和局限 170
6.2.1 MPLAB-ICD的功能特点 170
6.2.2 MPLAB-ICD的局限性 171
6.3 MPLAB-ICD工具套件的构成 172
6.3.1 MPLAB-ICD模块 173
6.3.2 MPLAB-ICD仿真头 173
6.3.3 MPLAB-ICD演示板 173
6.3.4 六芯电缆 174
6.3.5 连接插针 175
6.3.6 MPLAB集成开发环境软件包 175
6.3.7 直流电源适配器 175
6.4 MPLAB-ICD的安装 175
6.4.1 硬件安装方法之一 176
6.4.2 硬件安装方法之二 177
6.4.3 软件安装 177
6.5.1 建立MPLAB-ICD与微机的通信 178
6.5 MPLAB-ICD的启用 178
6.5.2 MPLAB-1CD的设置 179
6.6 用MPLAB-ICD统调用户程序和用户电路 185
6.6.1 单片机应用项目开发流程 185
6.6.2 项目原型机开发示范 187
【实验范例6.1】8珠式霹雳灯控制器 188
【实验范例6.2】单键触发8位二进制累加计数器 191
6.7 MPLAB-ICD用作下载编程器 197
6.7.2 内容读回(上传) 198
6.7.1 空白检查(查空) 198
6.7.3 导出HEX文件 199
6.7.4 导入HEX文件 199
6.7.5 烧写编程 200
6.7.6 读取核对 200
6.7.7 芯片擦除 201
思考题与练习题 201
7.1 定时器/计数器模块的基本用途 203
第7章 定时器/计数器TMR0 203
7.2 PIC单片机定时器/计数器TMR0的特性 204
7.3 与TMR0模块相关的寄存器 205
7.4 TMR0模块的电路结构和工作原理 207
7.4.1 分频器 209
7.4.2 累加计数寄存器 210
7.5 TMR0模块的应用举例 211
7.5.1 TMR0用作硬件定时器 211
【实验范例7.1】队列灯 211
7.5.2 TMR0多次被引用 215
【实验范例7.2】单键循环切换方波信号发生器 215
7.5.3 TMR0用作硬件计数器 220
【实验范例7.3】简易车辆里程表 220
思考题与练习题 227
第8章 中断概念和中断逻辑 228
8.1 中断的基本概念 228
8.2 PIC16F87X的中断源 230
8.3 PIC16F87X中断的硬件逻辑 231
8.4 与中断相关的寄存器 234
8.5 中断的处理 240
8.5.1 中断的延时响应和延时处理问题 240
8.5.2 中断的现场保护问题 242
8.5.3 需要注意的问题 245
8.6 中断功能的应用举例 247
8.6.1 TMR0溢出中断 247
【实验范例8.1】闪烁式跑马灯 247
【实验范例8.2】带电源故障报警和备用电池的流水式灯箱控制器 255
8.6.2 INT外部中断 255
8.6.3 端口RB电平变化中断 262
【实验范例8.3】简易四路抢答器 268
8.7 外部中断的扩充方法 280
8.7.1 用TMR0外部时钟源扩展法 280
8.7.2 用RB端口扩展法 281
思考题与练习题 283
9.1 系统配置字以及特殊存储器单元 284
第9章 应用系统性能的优化设计 284
9.1.1 系统配置字 286
9.1.2 用户识别码ID 288
9.1.3 器件识别码 290
9.2 时钟系统 290
9.2.1 外接晶体振荡器/陶瓷谐振器(LP/XT/HS) 291
9.2.2 外接阻容器件(RC) 292
9.2.3 引入外来时钟源(LP/XT/HS) 293
9.3 复位系统 293
9.3.1 几种不同的复位方式 294
9.3.2 单片机内部的复位操作处理 294
9.3.3 复位系统硬件逻辑 298
9.3.4 内部上电延时复位(POR)功能 301
9.3.5 外部上电延时复位电路 303
9.3.6 外部人工复位开关电路 305
9.3.7 内部掉电锁定复位(BOR)功能 306
9.4 监视定时器WDT 308
9.4.1 程序失控的回复 309
9.4.2 WDT的电路结构 311
9.4.3 WDT的工作原理 312
9.4.4 WDT相关寄存器 313
9.4.5 使用WDT的注意事项 313
9.4.6 WDT的应用举例 314
【实验范例9.1】带看门狗的霹雳灯 314
9.5 睡眠与唤醒 317
9.5.1 睡眠状态的进入 317
9.5.2 睡眠状态的唤醒 318
9.5.3 睡眠功能应用实例 321
【实验范例9.2】利用按键来唤醒CPU 321
思考题与练习题 324
附录A ASCII码表 326
附录B 特殊功能寄存器及其复位值一览表 328
附录C 英文指令系统概览 332
附录D 特殊指令助记符(宏指令) 336
附录E 宏汇编器MPASM伪指令一览表 338
附录F 包含文件P16F877.INC 341
附录G MPASM出错、警告、提示信息列表 349
G.1 出错性显示信息 349
G.2 警告性显示信息 353
G.3 提示性显示信息 355
附录H Mplink分析、连接信息列表 357
H.1 分析性显示信息 357
H.2 连接性显示信息 358
H.3 连接警告性显示信息 361
H.4 库文件错误信息 362
H.5 COFF文件错误信息 362
H.6 COFF到COD文件转换错误信息 364
H.7 COFF到COD文件转换警告信息 365
附录I MPLAB-ICD演示板电路原理图 366
参考文献 368