标题：PIC技术宝典
PIC技术宝典
作者:(美国)Muhammad Ali Mazidi 、Rolin D.Mckinlay 、Danny Causey 等
译者:李中华 张雨浓 陈卓怡 等
出版社：人民邮电出版社
页码：700 页
出版日期：2008年
ISBN：7115185549/9787115185549
条形码：9787115185549
版本：1版
装帧：平装
开本：16
中文：中文
丛书名：图灵电子电气工程丛书
外文书名：PIC Microcontroller and Embedded systems
编辑推荐
《PIC技术宝典》[1]是关于PIC微控制器的经典著作，
美国Mjcrochip公司推出的PIC系列产品已成为目前应用最广泛的微控制器。
《PIC技术宝典》还可作为高等院校教材，每节的结尾都配有习题，有利于学生巩固本节要点；同时在章末附有本章习题，有利于教师对学生进行考察。
《PIC技术宝典》原版配套网站。供实验手册、勘误和程序源代码等信息Muhammad Ail Mazidi 美国DeVry大学资深教授，著名嵌入式系统专家，具有丰富的教学和实践经验他编写的80x86和8051方面的教材已被全世界众多高校采用．都是公认的经典李中华博士，现任中山大学信息科学与技术学院讲师、硕士生导师主持和参与国家、部省、市级课题若干．发表学术论文40余篇．其中多数为SCI/EI/lSTP/INSPEC所收录．出版著作1部计算机软件著作权2部、申请发明专利2部主要研究兴趣为嵌入式系统及自动化、智能系统与先进控制张溺浓博士现任中山大学信息科学与技术学院“百人计划”教授、博士生导师，2007年入选教育部新世纪优秀人才支持计划 在国际顶级杂志和会议上发表论文40余篇 其中lEEE杂志论文8篇，主持国家自然科学基金2项主要研究领域为冗余机器人 递归神经网络、高斯过程、科学计算和软硬件开发。
目录
第0章　计算入门　1
0.1　数制和编码系统　1
0.1.1　十进制和二进制数制系统　1
0.1.2　十进制数转换成二进制数　2
0.1.3　二进制数转换成十进制数　2
0.1.4　十六进制系统　3
0.1.5　二进制和十六进制之间的转换　3
0.1.6　十进制数转换成十六进制数　4
0.1.7　十六进制数转换成十进制数　4
0.1.8　十进制、二进制和十六进制计数　5
0.1.9　二进制数和十六进制数加法　5
0.1.10 补码　6
0.1.11 十六进制数的加法和减法　6
0.1.12 十六进制数的加法　6
0.1.13 十六进制数的减法　6
0.1.14 ASCII码　7
0.1.15 复习题　7
0.2　数字入门　8
0.2.1　二进制逻辑　8
0.2.2　逻辑门　8
0.2.3　使用逻辑门设计电路　10
0.2.4　译码器　11
0.2.5　触发器　12
0.2.6　复习题　12
0.3　计算机内部　12
0.3.1　一些重要术语　12
0.3.2　计算机的内部组成　13
0.3.3　数据总线概述　13
0.3.4　地址总线概述　14
0.3.5　CPU及其和RAM、ROM的关系　14
0.3.6　CPU内部　15
0.3.7　计算机的内部工作　16
0.3.8　复习题　17
小结　17
习题　18
复习题答案　19
第1章　PIC微控制器的历史和特性　21
1.1　微控制器与嵌入式处理器　21
1.1.1　微控制器和通用微处理器　21
1.1.2　应用于嵌入式系统的微控制器　22
1.1.3　x86PC嵌入式应用　23
1.1.4　微控制器的选择　24
1.1.5　微控制器的选择标准　24
1.1.6　机电学与微控制器　25
1.1.7　复习题　25
1.2　PIC18系列概述　25
1.2.1　PIC微控制器的发展简史　25
1.2.2　PIC18特性　26
1.2.3　其他微控制器　30
1.2.4　复习题　31
小结　31
习题　32
复习题答案　33
第2章　PIC体系结构与汇编语言编程　34
2.1　PIC的WREG寄存器　34
2.1.1　WREG寄存器　35
2.1.2　MOVLW指令　35
2.1.3　ADDLW指令　35
2.1.4　复习题　37
2.2　PIC文件寄存器　37
2.2.1　PIC文件寄存器(数据RAM)空间分配　37
2.2.2　PIC芯片中的GP RAM和EEPROM比较　38
2.2.3　PIC18的文件寄存器与访问存储区　39
2.2.4　复习题　41
2.3　默认访问存储区的指令操作　41
2.3.1　MOVWF指令　41
2.3.2　关于WREG和访问存储区的更多指令　42
2.3.3　COMF指令　46
2.3.4　DECF指令　47
2.3.5　MOVE指令　47
2.3.6　MOVFF指令　48
2.3.7　复习题　49
2.4　PIC 状态寄存器　49
2.4.1　PIC18状态寄存器　49
2.4.2　ADDLW指令和状态寄存器　50
2.4.3　并非所有指令都会影响标志位　50
2.4.4　标志位和判决　52
2.4.5　复习题　52
2.5　PIC数据格式和伪指令　53
2.5.1　PIC数据类型　53
2.5.2　数据格式描述　53
2.5.3　汇编伪指令　54
2.5.4　使用EQU做定值分配　55
2.5.5　使用EQU做SFR地址分配　55
2.5.6　使用EQU做RAM地址分配　56
2.5.7　汇编语言的标签规则　57
2.5.8　复习题　57
2.6　PIC汇编语言编程　58
2.6.1　汇编语言结构　58
2.6.2　复习题　59
2.7　汇编和连接PIC程序　60
2.7.1　关于asm、err和目标文件的更多信息　61
2.7.2　列表文件和映像文件　62
2.7.3　复习题　62
2.8　PIC的程序计数器和程序ROM空间　62
2.8.1　PIC的程序计数器　63
2.8.2　PIC18系列ROM的内存分配　63
2.8.3　通电时PIC的启动　64
2.8.4　在程序ROM里放置代码　65
2.8.5　程序的逐字节执行　66
2.8.6　PIC18 ROM数据宽度　66
2.8.7　PIC的哈佛结构　68
2.8.8　PIC18的指令大小　69
2.8.9　MOVLW指令格式　69
2.8.10　ADDLW指令格式　69
2.8.11　MOVWF指令格式　69
2.8.12　MOVFF指令格式　70
2.8.13　GOTO指令格式　70
2.8.14　从其他微处理器过渡到PIC18　70
2.8.15　复习题　71
2.9　PIC的RISC结构　71
2.9.1　RISC结构　72
2.9.2　RISC的特性　72
2.9.3　复习题　74
2.10 使用MPLAB仿真器查看寄存器和存储器　74
小结　74
习题　76
复习题答案　80
第3章　分支、调用和时延循环　82
3.1　分支指令和循环　82
3.1.1　PIC的循环语句　82
3.1.2　循环嵌套　85
3.1.3　循环100 000次　87
3.1.4　其他的条件转移指令　87
3.1.5　所有的条件分支指令都是短跳转　89
3.1.6　短转移地址的计算　89
3.1.7　无条件分支指令　90
3.1.8　带有$符号的GOTO指令　91
3.1.9　复习题　92
3.2　CALL(调用)指令和栈　92
3.2.1　CALL指令　92
3.2.2　PIC18的栈和栈指针　92
3.2.3　如何访问PIC18的栈　93
3.2.4　压栈　93
3.2.5　出栈　93
3.2.6　CALL指令和栈的作用　94
3.2.7　栈的上限　95
3.2.8　在主程序里调用多个子例程　95
3.2.9　RCALL指令(相对调用指令)　97
3.2.10 复习题　98
3.3　PIC18的时延与指令流水线　98
3.3.1　PIC18的时延计算　98
3.3.2　流水线　98
3.3.3　PIC的指令周期时间　99
3.3.4　分支代价　99
3.3.5　PIC18的时延计算　100
3.3.6　时延的嵌套循环　101
3.3.7　PIC多级执行流水线　103
3.3.8　复习题　104
小结　105
习题　105
复习题答案　107
第4章　PIC I/O端口编程　108
4.1　PIC18的I/O端口编程　108
4.1.1　I/O端口引脚及其功能　108
4.1.2　TRIS寄存器在数据输出中的作用　110
4.1.3　TRIS寄存器在数据输入中的作用　111
4.1.4　端口A　114
4.1.5　端口A用作输入端口　114
4.1.6　端口B　114
4.1.7　端口B用作输入端口　115
4.1.8　端口A和端口B的双重功能　115
4.1.9　端口C　115
4.1.10 端口C用作输入端口　116
4.1.11 端口D　116
4.1.12 端口D作为输入端口　116
4.1.13 端口C和端口D的双重功能　116
4.1.14 端口E　117
4.1.15 访问8位数据的不同方法　117
4.1.16 读取后紧接的写I/O操作　118
4.1.17 复位时的端口状态　119
4.1.18 复习题　119
4.2　I/O位操作编程　120
4.2.1　I/O端口与位寻址　120
4.2.2　BSF(置位fileReg)　121
4.2.3　BCF(清零fileReg)　121
4.2.4　BTG(位翻转fileReg)　123
4.2.5　检测输入引脚　123
4.2.6　BTFSS(位测试fileReg，若为1则跳过)　123
4.2.7　BTFSC(位测试fileReg，若为0则跳过)　123
4.2.8　监测二进制位　124
4.2.9　读取二进制位　127
4.2.10 读输入引脚与读LATx端口　127
4.2.11 读端口的LATx　128
4.2.12 复习题　129
小结　129
习题　129
复习题答案　130
第5章 算术、逻辑指令和程序示例　132
5.1　算术指令　132
5.1.1　无符号数的加法　132
5.1.2　ADDWF和单字节的加法　133
5.1.3　ADDWFC和16位数的加法　134
5.1.4　BCD(二进制编码的十进制数)数字系统　134
5.1.5　非压缩BCD数　134
5.1.6　压缩BCD数　135
5.1.7　DAW指令　135
5.1.8　无符号数的减法　136
5.1.9　PIC减法的C标志位　138
5.1.10 无符号数的乘法　138
5.1.11 无符号数的除法　139
5.1.12 除法的应用　139
5.1.13 复习题　140
5.2　有符号数的概念及其算术运算　141
5.2.1　计算机中有符号数的概念　141
5.2.2　有符号的8位操作数　141
5.2.3　正数　141
5.2.4　负数　141
5.2.5　有符号数运算中的溢出问题　143
5.2.6　何时设置OV标志位　143
5.2.7　二进制补码运算指令　144
5.2.8　复习题　145
5.3　逻辑和比较指令　145
5.3.1　AND指令　145
5.3.2　OR指令　145
5.3.3　EX-OR指令　146
5.3.4　COMF指令(将fileReg取反)　147
5.3.5　NEGF指令(将fileReg取补)　147
5.3.6　比较指令　148
5.3.7　CPFSGT指令　148
5.3.8　CPFSEQ指令　148
5.3.9　CPFSLT指令　149
5.3.10 复习题　151
5.4　移位指令和数据串行化　152
5.4.1　文件寄存器的左移或右移操作　152
5.4.2　带进位的移位　152
5.4.3　串行化数据　153
5.4.4　字节数据的串行化　153
5.4.5　SWAPF fileReg, d　155
5.4.6　复习题　155
5.5　BCD和ASCII码转换　156
5.5.1　ASCII数　156
5.5.2　从压缩BCD码到ASCII码的转换　157
5.5.3　从ASCII码到压缩BCD码的转换　157
5.5.4　复习题　157
小结　158
习题　158
复习题答案　162
第6章　存储区转换、表处理、宏和模块　163
6.1　立即寻址与直接寻址方式　164
6.1.1　立即寻址方式　164
6.1.2　直接寻址方式　164
6.1.3　指令INCF fileReg，W与INCF fileReg，F的区别　165
6.1.4　DECFSZ指令和DECF指令　165
6.1.5　SFR及其地址　166
6.1.6　复习题　167
6.2　寄存器间接寻址方式　168
6.2.1　寄存器间接寻址方式　168
6.2.2　寄存器间接寻址方式的优点　168
6.2.3　FSR的自动增量　170
6.2.4　复习题　173
6.3　查询表与表处理　173
6.3.1　DB伪指令和程序ROM中的定值数据　173
6.3.2　PIC18的读表操作　174
6.3.3　TBLPTR的自动增量　175
6.3.4　查表和RETLW指令　177
6.3.5　访问RAM中的查询表　179
6.3.6　PIC18的写表操作　181
6.3.7　复习题　181
6.4　数据RAM的位寻址　181
6.4.1　可位寻址的文件寄存器数据RAM　182
6.4.2　文件寄存器的位寻址　182
6.4.3　状态寄存器的位寻址　184
6.4.4　复习题　185
6.5　PIC18的存储区转换　185
6.5.1　位A和存储区转换　185
6.5.2　BSR寄存器和存储区转换　186
6.5.3　存储区转换和指令INCF F，D，A　186
6.5.4　MOVFF指令和存储区　189
6.5.5　用MPLAB仿真器检查数据RAM空间　190
6.5.6　复习题　192
6.6　校验和与ASCII码子例程　192
6.6.1　ROM中的校验和　192
6.6.2　校验和程序　192
6.6.3　BCD到ASCII的转换程序　194
6.6.4　二进制(十六进制)到ASCII的转换程序　196
6.6.5　用存储区作为栈　197
6.6.6　复习题　198
6.7　宏和模块　198
6.7.1　什么是宏以及怎样声明宏　198
6.7.2　宏的定义　198
6.7.3　LOCAL伪指令　199
6.7.4　INCLUDE伪指令　201
6.7.5　NOEXPAND/EXPAND伪指令　201
6.7.6　宏与子例程　203
6.7.7　模块　204
6.7.8　编写模块　204
6.7.9　EXTERN伪指令　204
6.7.10 GLOBAL伪指令　204
6.7.11 连接模块　206
6.7.12 复习题　207
小结　207
习题　207
复习题答案　211
第7章　PIC C语言编程　213
7.1　C语言中的数据类型和时延　214
7.1.1　PIC18的C语言数据类型　214
7.1.2　无符号字符　214
7.1.3　有符号字符　216
7.1.4　无符号整型　216
7.1.5　有符号整型　216
7.1.6　其他数据类型　216
7.1.7　时延　217
7.1.8　复习题　219
7.2　C语言I/O编程　219
7.2.1　字节I/O编程　219
7.2.2　位寻址I/O编程　221
7.2.3　端口位的结构　222
7.2.4　复习题　227
7.3　逻辑操作　227
7.3.1　C语言的位操作符　228
7.3.2　C语言的按位移位操作　228
7.3.3　复习题　231
7.4　C语言的数据转换程序　231
7.4.1　ASCII数　231
7.4.2　压缩BCD码到ASCII码的转换　232
7.4.3　ASCII码到压缩BCD码的转换　232
7.4.4　ROM的校验和　234
7.4.5　PIC18二进制(十六进制)到十进制和ASCII的转换　235
7.4.6　复习题　236
7.5　C语言的数据串行化　236
7.6　C18程序存储区配置　239
7.6.1　RAM数据空间与代码数据空间　239
7.6.2　为数据分配程序空间　239
7.6.3　用于程序的NEAR与FAR　240
7.6.4　Pragma和数据与程序的固定地址分配　241
7.6.5　在指定的ROM地址放置代码　242
7.6.6　在指定的ROM地址放置代码　242
7.6.7　复习题　243
7.7　C18的数据RAM分配　243
7.7.1　C18 C编译器中RAM数据空间的用法　244
7.7.2　用于数据的near与far　245
7.7.3　在指定内存地址存放数据　246
7.7.4　覆盖存储类　248
7.7.5　复习题　250
小结　250
习题　251
复习题答案　252
第8章　PIC18F硬件连接与ROM程序载入　254
8.1　PIC18F452/458的引脚连接　254
8.1.1　复位后的程序计数器值　256
8.1.2　端口A、B、C、D和E　257
8.1.3　复习题　258
8.2　PIC18配置寄存器　258
8.2.1　CONFIG1H寄存器和振荡器时钟源　259
8.2.2　CONFIG2L寄存器和复位电压　262
8.2.3　CONFIG2H寄存器和看门狗定时器　264
8.2.4　CONFIG4L寄存器和背景调试程序　265
8.2.5　LIST伪指令　266
8.2.6　设置所有的配置寄存器　267
8.2.7　在MPLAB C18 C编译器中设置CONFIG寄存器　268
8.2.8　复习题　269
8.3　解释PIC18的Intel十六进制文件　269
8.3.1　分析Intel十六进制(INHX8M)文件　270
8.3.2　分析Intel十六进制文件(INHX32)　272
8.3.3　Intel十六进制分段文件(INHX8S)　275
8.3.4　复习题　275
8.4　PIC18 Trainer的设计和装载　276
8.4.1　基于PIC18F452/458的Trainer　277
8.4.2　PIC18 Trainer的连接　278
8.4.3　PIC18 Trainer程序下载　278
8.4.4　汇编语言和C语言编写的PIC18测试程序　278
8.4.5　故障检修的技巧　281
8.4.6　复习题　281
小结　282
习题　282
复习题答案　284
第9章　PIC18定时器的汇编编程和C编程　285
9.1　定时器0和定时器1编程　285
9.1.1　定时器的基本寄存器　285
9.1.2　定时器0寄存器和编程　285
9.1.3　T0CON(定时器0控制)寄存器　286
9.1.4　TMR0IF标志位　287
9.1.5　16位定时器编程　288
9.1.6　在16位模式下定时器0的编程步骤　288
9.1.7　计算定时器的载入值　291
9.1.8　使用Windows计算器寻找TH和TL　293
9.1.9　预分频器和长时延的产生　293
9.1.10 定时器0的8位模式编程　295
9.1.11 定时器0的8位模式编程步骤　296
9.1.12 编译器和负值　297
9.1.13 定时器1编程　298
9.1.14 复习题　301
9.2　计数器编程　301
9.2.1　T0CON寄存器中的T0CS位　301
9.2.2　使用外部晶振作为定时器1的时钟　302
9.2.3　复习题　306
9.3　定时器0和定时器1的C编程　306
9.3.1　用C访问定时器　306
9.3.2　计算使用定时器的时延　306
9.3.3　定时器0和定时器1用作计数器的C编程　311
9.4　定时器2和定时器3的编程　314
9.4.1　定时器2的编程　314
9.4.2　定时器3的编程　317
9.4.3　复习题　322
小结　322
习题　322
复习题答案　324
第10章　PIC18串行端口的汇编编程和C编程　326
10.1　串行通信基础　326
10.1.1　半双工和全双工传输　327
10.1.2　异步串行通信和数据帧　328
10.1.3　起始位和结束位　328
10.1.4　数据传输率　329
10.1.5　RS232标准　329
10.1.6　RS232引脚　329
10.1.7　数据通信的分类　330
10.1.8　检查RS232的握手信号　331
10.1.9　IBM PC/兼容 COM 端口　332
10.1.10 复习题　332
10.2　PIC18连接到RS232　332
10.2.1　PIC18的RX和TX引脚　332
10.2.2　MAX232　333
10.2.3　MAX233　333
10.2.4　复习题　334
10.3　PIC18串行端口的汇编语言编程　334
10.3.1　PIC18的SPBRG寄存器和波特率　334
10.3.2　TXREG寄存器　336
10.3.3　RCREG寄存器　336
10.3.4　TXSTA(发送状态和控制寄存器)　336
10.3.5　RCSTA(接收状态和控制寄存器)　337
10.3.6　PIR1(外部中断请求寄存器1)　338
10.3.7　PIC18串行数据发送编程　338
10.3.8　TXIF标志位的重要性　340
10.3.9　PIC18串行数据接收编程　340
10.3.10 RCIF标志位的重要性　341
10.3.11 PIC18的波特率翻两番　342
10.3.12 波特率的误差计算　344
10.3.13 发送和接收　347
10.3.14 基于中断的数据传输　348
10.3.15 复习题　349
10.4　PIC18串行端口的C编程　349
10.4.1　PIC18 C的数据发送和接收　349
10.4.2　复习题　350
小结　352
习题　352
复习题答案　354
第11章　用汇编和C语言进行中断编程　356
11.1　PIC18中断　356
11.1.1　中断和查询　356
11.1.2　中断服务程序　357
11.1.3　中断执行的步骤　357
11.1.4　PIC18的中断源　357
11.1.5　中断的使能和禁用　358
11.1.6　使能中断的步骤　359
11.1.7　复习题　360
11.2　定时器中断编程　360
11.2.1　定时器复零标志位和中断　360
11.2.2　使用C18编译器的PIC18中断C编程　365
11.2.3　复习题　369
11.3　外部硬件中断编程　369
11.3.1　外部中断INT0、INT1和INT2　369
11.3.2　下降沿触发中断　371
11.3.3　边沿触发中断采样　373
11.3.4　复习题　374
11.4　串行通信中断编程　374
11.4.1　RCIF和TXIF标志位与中断　374
11.4.2　使用PIC18中的串行COM　375
11.4.3　复习题　378
11.5　PORTB变化中断　378
11.6　PIC18的中断优先级　382
11.6.1　设置中断优先级　382
11.6.2　低优先级中断的C编程　390
11.6.3　中断嵌套　393
11.6.4　在任务转换时变量的快速保存　393
11.6.5　中断延迟　394
11.6.6　软件触发中断　394
11.6.7　复习题　394
小结　394
习题　395
复习题答案　397
第12章　LCD和键盘接口　399
12.1　LCD接口　399
12.1.1　LCD操作　399
12.1.2　LCD引脚描述　399
12.1.3　为LCD发送带时间延迟的命令和数据　401
12.1.4　使用busy标志位向LCD发送命令或数据　403
12.1.5　LCD数据表　405
12.1.6　使用TBLRD指令向LCD发送信息　408
12.1.7　复习题　412
12.2　键盘接口　413
12.2.1　键盘和PIC18的接口　413
12.2.2　使用扫描法进行按键检测　418
12.2.3　复习题　420
小结　420
习题　420
复习题答案　421
第13章　ADC、DAC和传感器接口　422
13.1　ADC特性　422
13.1.1　ADC设备　422
13.1.2　复习题　426
13.2　PIC18的ADC编程　426
13.2.1　PIC18F452/458的ADC特性编程　426
13.2.2　ADCON0寄存器　427
13.2.3　ADCON1寄存器　429
13.2.4　计算A/D转换时间　431
13.2.5　使用查询法对A/D转换器编程　432
13.2.6　PIC18F458 ADC的汇编语言编程　432
13.2.7　PIC18F458 A/D的C语言编程　433
13.2.8　使用中断法对A/D转换器编程　434
13.2.9　复习题　436
13.3　DAC接口　436
13.3.1　数模转换器(DAC)　436
13.3.2　MC1408 DAC(或DAC0808)　437
13.3.3　把DAC0808的Iout转换成电压　438
13.3.4　产生正弦波　438
13.3.5　DAC的C语言编程　440
13.3.6　复习题　441
13.4　传感器接口和信号调整　441
13.4.1　温度传感器　441
13.4.2　LM34和LM35温度传感器　441
13.4.3　信号调整和PIC18的LM35接口　442
13.4.4　温度的读取和显示　443
13.4.5　复习题　445
小结　445
习题　445
复习题答案　447
第14章　用闪存与EEPROM存储数据　448
14.1　半导体存储器　448
14.1.1　存储容量　448
14.1.2　存储区组织　448
14.1.3　速度　449
14.1.4　ROM　450
14.1.5　PROM和OTP　450
14.1.6　EPROM与UV-EPROM　450
14.1.7　EEPROM　451
14.1.8　闪存EPROM　452
14.1.9　掩模ROM　452
14.1.10　RAM(随机访问存储器)　453
14.1.11　SRAM　453
14.1.12　NV-RAM　454
14.1.13　DRAM　454
14.1.14　DRAM的封装问题　455
14.1.15　DRAM存储区组织　455
14.1.16　复习题　456
14.2　PIC18F只读闪存的擦写　457
14.2.1　使用TBLWR向闪存写入数据　457
14.2.2　写闪存的步骤　459
14.2.3　擦除闪存的步骤　464
14.2.4　闪存擦写操作的C语言编程　467
14.2.5　复习题　470
14.3　PIC18 EEPROM的数据读取和写入　470
14.3.1　向EEPROM写入数据　470
14.3.2　写EEPROM的步骤　471
14.3.3　读EEPROM的步骤　472
14.3.4　使用C语言访问EEPROM　475
14.3.5　复习题　478
小结　478
习题　478
复习题答案　480
第15章　CCP和ECCP编程　481
15.1　标准型和增强型CCP模块　481
15.1.1　CCP和计时器　481
15.1.2　CCP寄存器　482
15.1.3　CCP引脚　483
15.1.4　复习题　483
15.2　比较模式编程　483
15.2.1　比较模式编程的步骤　485
15.2.2　复习题　488
15.3　捕捉模式编程　489
15.3.1　捕捉模式编程的步骤　489
15.3.2　测量脉冲周期　489
15.3.3　测量脉宽　491
15.3.4　复习题　494
15.4　PWM编程　494
15.4.1　PWM周期　495
15.4.2　PWM的占空比　496
15.4.3　PWM编程的步骤　496
15.4.4　占空比与Fosc　499
15.4.5　复习题　499
15.5　ECCP编程　499
15.5.1　ECCP比较模式的编程步骤　501
15.5.2　ECCP捕捉模式的编程步骤　503
15.5.3　ECCP的PWM特征　504
15.5.4　ECCP的PWM编程步骤　504
15.5.5　复习题　505
小结　505
习题　505
复习题答案　507
第16章　SPI协议和DS1306RTC接口　508
16.1　SPI总线协议　508
16.1.1　SPI总线　508
16.1.2　SPI读写协议　509
16.1.3　将数据写入SPI设备的步骤　509
16.1.4　从SPI设备读数据的步骤　510
16.1.5　复习题　511
16.2　DS1306 RTC接口和编程　511
16.2.1　控制寄存器中WP位的重要性　514
16.2.2　DS1306的地址映射　514
16.2.3　时间和日期地址的位置和模式　515
16.2.4　使用MSSP模块来连接PIC18和DS1306　516
16.2.5　使用汇编设置时间　518
16.2.6　使用汇编设置日期　518
16.2.7　RTC设置、读取和显示时间和日期　519
16.2.8　复习题　522
16.3　DS1306 RTC的C编程　522
16.3.1　使用C语言设置时间和日期　522
16.3.2　使用C语言读取和显示时间和日期　523
16.3.3　复习题　524
16.4　DS1306的警报和中断特征　525
小结　533
习题　533
复习题答案　535
第17章　电机控制：继电器、PWM、DC电机和步进电机　536
17.1　继电器和光隔离器　536
17.1.1　机电继电器　536
17.1.2　继电器驱动　538
17.1.3　固态继电器　539
17.1.4　簧片开关　540
17.1.5　光隔离器　540
17.1.6　光隔离器的连接　540
17.1.7　复习题　541
17.2　步进电机的接口　542
17.2.1　步进电机　542
17.2.2　步进角　543
17.2.3　每秒的步数和rpm的关系　545
17.2.4　四步顺序和电机转子的齿数　545
17.2.5　电机速度　545
17.2.6　保持转矩　546
17.2.7　波驱动四步顺序　546
17.2.8　单极性与双极性步进电机的接口　546
17.2.9　使用晶体管作为驱动器　547
17.2.10 通过光隔离器来控制步进电机　548
17.2.11 用PIC18 C语言来控制步进电机　549
17.2.12 复习题　550
17.3　DC电机的接口和PWM　550
17.3.1　DC电机　550
17.3.2　单方向控制　551
17.3.3　双方向控制　551
17.3.4　脉冲宽度调制(PWM)　555
17.3.5　使用光隔离器控制DC电机　556
17.3.6　DC电机的控制和PWM的C编程　558
17.3.7　复习题　560
17.4　使用CCP来控制PWM电机　561
17.4.1　使用CCP来控制DC电机　561
17.4.2　复习题　561
17.5　使用ECCP来控制DC电机　563
17.5.1　使用ECCP来双向控制DC电机　563
17.5.2　复习题　566
小结　566
习题　567
复习题答案　568
附录A　569
附录B　608
附录C　610
附录D　626
附录E　630
附录F　632
附录G　634
附录H　636
索引　690
……
序言
微控制器是一种无处不在的内嵌型控制芯片，广泛用于工业控制、消费类电子产品、汽车、金融、军事、能源等领域。在强大的市场需求和日新月异的科技进步驱动下，微控制器产品不断推陈出新。PIC系列微控制器是全球领先的微控制器和模拟半导体供应商--美国微芯公司推出的嵌入式微控制器，具有运行速度快、工作电压低、功耗低、驱动能力强、体积小、价格低廉、指令简单易学易用等优点。PICl8系列微控制器就是其中的杰出产品之一。
本书涵盖学习微控制器所需的基础知识、PICl8微控制器的内部结构、汇编指令系统、C语言编程、接口技术及其应用实例，具有以下鲜明特点。
口本书采用计算机基础知识--P1C18微控制器内部结构--汇编指令--C编
，程--外围接口--应用实例的授课思路，知识体系清晰、内容丰富，适应当今信息社
会对宽口径计算机类专业学生的培养需求。
口每章的开篇都简明地给出了本章的学习目标以及主要内容的结构分布，在每章末尾还
给出了小结，有助于读者进一步理解和思考所学知识，形成完整的知识体系。
口本书在介绍PIcl8微控制器原理及应用设计的同时，还配以丰富的设计实例，让读者
能充分体会到每一个设计细节，有利于快速培养读者的细致分析与设计系统的能力。
口对于主要的设计实例，本书分别给出了其汇编语言编程和C语言编程，通过对比学习
两类不同的编程思想和风格，使得学生很容易发现二者的联系、区别和优缺点，克服了
将汇编语言编程和C语言编程单独讲述的弊端。
口章后习题以及每节后的复习题进一步充实了全书的内容，有利于帮助读者更好地理解
相关基本理论。本书配有的附录，内容全面详尽，对读者而言是一本非常难得的技术
手册。
简而言之，本书结构清晰、内容丰富、通俗易懂，是一本不可多得的学习宝典。
本书由李中华、陈卓怡主译，李中华负责统稿，张雨浓负责审校。参加本书翻译和初校T作的还有杨波、孙宇佳、张董华、伍沛然等。在此，谨对所有为本书的出版提供了帮助的人们表示诚挚的谢意。
由于译审者不平所限，加之时间仓促，译文中难免有不妥乃至错误之处，敬请广大读者批评指正。