PIC技术宝典
第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 数制和编码系统 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
查看完整
Muhammad Ali Mazidi,美国DeVry大学资深教授,著名嵌入式系统专家,具有丰富的教学和实践经验。他编写的80x86和8051方面的教材已被全世界众多高校采用,都是公认的经典。
《PIC技术宝典》是关于PIC微控制器的经典著作,内容紧密围绕PIC18系列微控制器原理及嵌入式系统应用展开,主要介绍了PIC18系列微控制器的硬件和软件面的基本知识和特性,着重描述其硬件结构、软件编程和接口技术及其嵌入式应用等问题。《PIC技术宝典》适合作为高等院校相关专业课程教材,也可供从事微控制器应用设计和嵌入式系统开发的工程技术人员参考。
第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
^ 收 起
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
^ 收 起
Muhammad Ali Mazidi,美国DeVry大学资深教授,著名嵌入式系统专家,具有丰富的教学和实践经验。他编写的80x86和8051方面的教材已被全世界众多高校采用,都是公认的经典。
《PIC技术宝典》是关于PIC微控制器的经典著作,内容紧密围绕PIC18系列微控制器原理及嵌入式系统应用展开,主要介绍了PIC18系列微控制器的硬件和软件面的基本知识和特性,着重描述其硬件结构、软件编程和接口技术及其嵌入式应用等问题。《PIC技术宝典》适合作为高等院校相关专业课程教材,也可供从事微控制器应用设计和嵌入式系统开发的工程技术人员参考。
比价列表
1人想要
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠