第1章 PIC18Fxxx单片机概述1
第2章 振荡器结构12
2.1 振荡器类型12
2.2 晶体/陶瓷振荡器方式12
2.3 RC振荡器14
2.4 外部时钟输入14
2.5 HS4(PLL)方式14
2.6 振荡器转换特性15
2.6.1 系统时钟的转换16
2.6.2 振荡器的转换16
2.7 片内振荡器休眠模式的影响18
2.8 上电延时18
第3章 复位19
3.1 上电复位28
3.2 MCLR28
3.3 上电延时定时器28
3.4 起振定时器29
3.5 PLL锁相延时29
3.6 掉电锁定复位29
3.7 上电复位延时时序图29
第4章 存储器结构32
4.1 程序存储器结构32
4.2 返回地址堆栈33
4.2.1 堆栈顶层的访问33
4.2.2 堆栈指针的返回33
4.2.3 压栈和弹栈指令34
4.2.4 堆栈满/下溢出复位34
4.3 快速寄存器堆栈35
4.4 PCL,PCLATH和PCLATU35
4.5 时钟划分/指令周期35
4.6 指令流程/流水线36
4.7 程序存储器中的指令36
4.8 查询表38
4.8.1 计算后执行GOTO指令38
4.8.2 读表和写表38
4.9 数据存储器结构38
4.9.1 通用寄存器40
4.9.2 特殊功能寄存器40
4.10 全局存储区50
4.11 存储区选择寄存器50
4.12 间接寻址、INDF和FSR寄存器51
4.13 状态寄存器STATUS52
4.14 复位控制寄存器RCON54
第5章 数据存储器EEPROM55
5.1 EEADR寄存器55
5.2 EECON1和EECON2寄存器55
5.3 读数据存储器EEPROM56
5.4 写数据存储器EEPROM57
5.5 写校验58
5.6 误写操作保护58
5.7 代码保护情况下的操作58
5.8 数据存储器EEPROM的使用58
第6章 程序存储器FLASH60
6.1 读表和写表操作60
6.2 控制寄存器61
6.2.1 EECON1和EECON2寄存器61
6.2.2 表锁存寄存器TABLAT61
6.2.3 表指针寄存器TBLPTR62
6.2.4 表指针边界62
6.3 读程序存储器FLASH63
6.4 擦除程序存储器FLASH63
6.5 写程序存储器FLASH65
6.5.1 程序存储器写序列65
6.5.2 写校验68
6.5.3 不可预料的写操作意外中止68
6.5.4 误写操作保护68
6.6 代码保护情况下的程序存储器操作68
第7章 8×8硬件乘法器69
7.1 引言69
7.2 操作69
第8章 中断73
8.1 中断控制寄存器INTCON74
8.2 PIR寄存器组77
8.3 PIE寄存器组80
8.4 IPR寄存器组82
8.5 RCON寄存器84
8.6 INT中断85
8.7 TMR0中断85
8.8 PORTB端口电平变化中断85
8.9 中断现场保护85
8.10 用PORTB端口电平变化中断构成的键盘接口硬件电路86
8.11 用PORTB端口电平变化中断构成键盘的汇编语言编程87
8.12 PORTB端口电平变化中断构成的键盘C语言编程91
第9章 I/O端口94
9.1 PORTA,TRISA和LATA寄存器94
9.2 PORTB,TRISB和LATB寄存器96
9.3 PORTC,TRISC和LATC寄存器100
9.4 PORTD,TRISD和LATD寄存器101
9.5 PORTE,TRISE和LATE寄存器103
9.6 开关量输入/输出汇编语言编程105
9.7 开关量输入/输出C语言编程109
9.8 PORTD端口输出开关量汇编语言编程111
9.9 PORTD端口输出开关量C语言编程112
第10章 并行从动端口113
第11章 定时器/计数器TMR0模块115
11.1 TMR0操作116
11.2 前分频器117
11.3 TMR0中断117
11.4 16位方式的定时器读/写117
11.5 用定时器TMR0构成秒表的汇编语言编程118
11.6 用定时器TMR0构成秒表的C语言编程125
第12章 定时器/计数器TMR1模块130
12.1 TMR1操作131
12.2 TMR1振荡器132
12.3 TMR1中断132
12.4 用CCP触发输出来复位TMR1132
12.5 TMR1 16位读/写方式133
第13章 定时器/计数器TMR2模块134
13.1 TMR2操作135
13.2 TMR2中断135
13.3 TMR2的输出135
第14章 定时器/计数器TMR3模块137
14.1 TMR3操作139
14.2 TMR1振荡器139
14.3 TMR3中断139
14.4 用CCP触发输出来复位TMR1139
第15章 捕捉/比较/PWM(CCP)模块141
15.1 CCP1模块142
15.2 捕捉工作方式142
15.2.1 CCP引脚设定143
15.2.2 TMR1/TMR3工作方式选择143
15.2.3 软件中断143
15.2.4 CCP1前分频器143
15.2.5 CAN通信信息的时间标记144
15.3 比较工作方式144
15.3.1 CCP1引脚设定145
15.3.2 TMR1/TMR3工作方式选择145
15.3.3 软件中断方式145
15.3.4 特殊事件触发方式145
15.4 PWM工作方式146
15.4.1 PWM周期146
15.4.2 PWM工作循环周期147
15.4.3 PWM操作配置147
15.5 PWM(CCP)模块接口硬件电路148
15.6 PWM(CCP)模块汇编语言编程148
15.7 PWM(CCP)模块C语言编程152
第16章 增强型捕捉/比较/PWM(ECCP)模块154
16.1 ECCP1模块155
16.2 捕捉工作方式156
16.3 比较工作方式156
16.4 标准PWM工作方式157
16.5 增强型PWM工作方式158
16.5.1 PWM输出操作配置159
16.5.2 半桥输出方式160
16.5.3 全桥输出方式161
16.5.4 可编程死区延时163
16.5.5 系统执行164
16.5.6 PWM启动条件164
16.5.7 输出极性配置164
16.5.8 PWM操作的配置164
16.6 增强型CCP的自动关闭功能165
第17章 主同步串行端口167
17.1 主同步串行模块概述167
17.2 控制寄存器组167
17.3 SPI方式167
17.3.1 寄存器组168
17.3.2 运行170
17.3.3 使能SPI171
17.3.4 典型连接171
17.3.5 主控方式172
17.3.6 从动方式174
17.3.7 同步从动方式选择175
17.3.8 休眠方式175
17.3.9 复位的影响175
17.3.10 总线工作方式的兼容性175
17.4 I2C模式176
17.4.1 I2C的寄存器组177
17.4.2 操作方式180
17.4.3 从动方式181
17.4.4 时钟延伸187
17.4.5 支持通用地址寻址190
17.4.6 主控方式191
17.4.7 波特率发生器193
17.4.8 I2C主控工作方式时的启动状态时序图194
17.4.9 I2C主控方式时的重启动状态时序图195
17.4.10 I2C主控发送方式196
17.4.11 I2C主控接收方式197
17.4.12 应答信号位时序图198
17.4.13 停止状态位时序图198
17.4.14 休眠工作方式199
17.4.15 复位影响199
17.4.16 多主机方式199
17.4.17 多主机通信、总线冲突和总线仲裁200
17.5 SPI总线应用的开关量输入接口硬件电路204
17.6 SPI总线应用开关量输入汇编语言编程205
17.7 SPI总线应用开关量输入C语言编程206
17.8 SPI总线应用的开关量输出接口硬件电路208
17.9 SPI总线应用开关量输出汇编语言编程208
17.10 SPI总线应用的开关量输出C语言编程210
第18章 可寻址的通用同步/异步收发器212
18.1 USART波特率发生器214
18.2 USART的异步工作方式218
18.2.1 USART异步发送器218
18.2.2 USART异步接收器220
18.2.3 带地址检测的9位异步接收方式221
18.3 USART同步主控方式222
18.3.1 USART同步主控发送222
18.3.2 USART同步主控接收224
18.4 USART同步从动方式225
18.4.1 USART同步从动发送225
18.4.2 USART同步从动接收226
18.5 USART接口硬件电路227
18.6 USART汇编语言编程228
18.7 USART C语言编程229
第19章 CAN控制器模块231
19.1 概述231
19.1.1 CAN模块概述231
19.1.2 发送/接收缓冲器232
19.2 CAN控制寄存器233
19.2.1 CAN控制与状态寄存器233
19.2.2 CAN发送缓冲寄存器237
19.2.3 CAN接收缓冲寄存器240
19.2.4 CAN波特率寄存器245
19.2.5 CAN模块输入/输出控制寄存器247
19.2.6 CAN中断寄存器248
19.3 CAN工作方式251
19.3.1 配置方式251
19.3.2 关闭方式251
19.3.3 正常工作方式252
19.3.4 监听方式252
19.3.5 自检方式252
19.3.6 错误识别方式252
19.4 CAN信息发送252
19.4.1 发送缓冲器252
19.4.2 发送优先级253
19.4.3 启动发送253
19.4.4 中止发送253
19.5 信息接收254
19.5.1 信息接收缓冲器254
19.5.2 接收缓冲器255
19.5.3 接收优先级255
19.5.4 时间标记256
19.6 信息接收过滤器与屏蔽器257
19.7 波特率设定258
19.7.1 时间当量259
19.7.2 同步时间段260
19.7.3 传输时间段260
19.7.4 相位缓冲时间段260
19.7.5 采样点260
19.7.6 信息处理时间260
19.8 同步261
19.8.1 硬同步261
19.8.2 重同步261
19.8.3 同步规则262
19.9 时间段编程262
19.10 振荡器误差262
19.11 位时间配置寄存器262
19.11.1 BRGCON1263
19.11.2 BRGCON2263
19.11.3 BRGCON3263
19.12 错误检测 263
19.12.1 CRC错误263
19.12.2 应答错误263
19.12.3 格式错误263
19.12.4 位错误263
19.12.5 填充位错误264
19.12.6 错误状态264
19.12.7 错误方式和错误计数器264
19.13 CAN中断265
19.13.1 中断编码位265
19.13.2 发送中断266
19.13.3 接收中断266
19.13.4 信息错误中断266
19.13.5 总线活动唤醒中断266
19.13.6 错误中断266
19.13.7 中断应答266
19.14 CAN总线应用接口硬件电路267
19.15 CAN总线应用汇编语言编程267
19.16 CAN总线应用C语言编程271
第20章 10位A/D转换器模块274
20.1 对A/D数据采集的要求278
20.2 A/D转换时钟的选择279
20.3 模拟通道输入引脚的配置280
20.4 A/D转换280
20.5 ECCP触发器的使用281
20.6 A/D转换器应用接口硬件电路282
20.7 A/D转换器应用的汇编语言编程283
20.8 A/D转换器应用的C语言编程288
第21章 比较模块290
21.1 比较器的配置292
21.2 比较器的工作292
21.3 比较器的参考292
21.3.1 外部参考信号292
21.3.2 内部参考信号292
21.4 比较器的响应时间292
21.5 比较器的输出293
21.6 比较器的中断293
21.7 休眠期间比较器的运行294
21.8 复位的影响294
21.9 模拟输入接入的注意事项294
第22章 比较器参考电压源296
22.1 比较器参考电压源的配置296
22.2 参考电压源的准确度和误差297
22.3 休眠期间的运行297
22.4 复位的影响297
22.5 引脚对外连接的注意事项297
第23章 低电压检测299
23.1 控制寄存器300
23.2 工作301
23.2.1 参考电压设置点302
23.2.2 电流消耗302
23.3 休眠期间的工作302
23.4 复位的影响302
第24章 CPU的特殊功能303
24.1 配置位303
24.2 监视定时器(WDT)309
24.2.1 WDTCON控制寄存器309
24.2.2 WDT后分频器310
24.3 休眠方式310
24.3.1 从休眠状态到唤醒状态311
24.3.2 中断唤醒应用311
24.4 程序校验和代码保护312
24.4.1 程序存储器代码保护313
24.4.2 数据存储器EEPROM的代码保护315
24.4.3 系统配置寄存器的保护315
24.5 标识码存储单元315
24.6 在线串行编程315
24.7 在线调试器315
24.8 低电压ICSP编程315
24.9 程序监视定时器汇编语言编程316
24.10 程序监视定时器C语言编程317
24.11 休眠唤醒功能汇编语言编程318
24.12 休眠唤醒功能C语言编程320
第25章 指令系统概述321
25.1 读—修改—写操作327
25.2 指令说明327
第26章 PIC18Fxx8单片机实验板介绍383
26.1 模板功能介绍383
26.1.1 A/D转换功能384
26.1.2 键盘384
26.1.3 LED显示384
26.1.4 液晶显示器(LCD)显示384
26.1.5 8路开关量输入和8路开关量输出385
26.1.6 D/A输出385
26.1.7 串行通信接口SCI385
26.1.8 主/从单片机多机并行通信385
26.1.9 捕捉方式和PWM方式385
26.1.10 多种复位方式386
26.1.11 时钟信号386
26.1.12 其他功能386
26.2 实验板的硬件布局386
26.3 测试点及主要器件介绍387
第27章 液晶显示器应用编程390
27.1 PIC18Fxx8与MCG12864A83的硬件接口电路390
27.1.1 MCG12864A83的结构特点390
27.1.2 MCG12864A83模块的引脚说明390
27.1.3 PIC18F458与MGLS12864模块的接口电路391
27.2 液晶显示程序清单392
27.2.1 液晶显示器汇编语言接口程序392
27.2.2 液晶显示器C语言接口程序407
附录416