PIC嵌入式系统开发

PIC嵌入式系统开发
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [英] ,
2008-09
版次: 1
ISBN: 9787115182654
定价: 69.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 532页
字数: 716千字
正文语种: 简体中文
10人买过
  •   本书系统而全面地介绍了嵌入式系统设计的原理及其应用,包括嵌入式系统的指令集系统结构、流水线、存储设备、定时器、中断、时钟、并行串行通信、互连网络、开发环境和开发语言等重要内容。书中对嵌入式系统设计的讲解主要以Microchip公司的3款PIC微控制器(16F84A、16F873A和18F242)为基础,并辅以大量的设计实例。全书编排合理,叙述由浅入深,生动活泼。
      本书适合嵌入式系统开发工程师阅读,也可作为高等院校电子、机电和计算机工程相关专业嵌入式系统课程的教材或参考书。   TimWilmshurst,英国德比大学教授,并长期任教于剑桥大学。lET(英国工程技术学会,前身为IEE)会士。著名的嵌入式系统专家。主要研究方向为电子技术和嵌入式系统,在PIC微控制器的应用开发上有很深的造诣。他在本书中作为实例设计的自动导向车——DerbotAGV已经广泛应用于嵌入式系统教学,获得了巨大成功。 第一部分 嵌入式系统入门
    第1章 微小的计算机,隐藏的控制 2
    1.1 当今嵌入式系统概述 2
    1.2 一些嵌入式系统例子 3
    1.2.1 家用电冰箱 3
    1.2.2 汽车车门机械装置 4
    1.2.3 电子乒乓球 5
    1.2.4 Derbot自主导向车 5
    1.3 一些必备的计算机知识 7
    1.3.1 计算机的组成元素 7
    1.3.2 指令集——CISC和RISC 8
    1.3.3 存储器类型 8
    1.3.4 存储器组织结构 9
    1.4 微处理器和微控制器 10
    1.4.1 微处理器 10
    1.4.2 微控制器 10
    1.4.3 微控制器系列产品 11
    1.4.4 微控制器的封装和外观 12
    1.5 Microchip公司和PIC微控制器 13
    1.5.1 背景 13
    1.5.2 今天的PIC微控制器 14
    1.6 以12系列为例介绍PIC微控制器 16
    1.7 其他微控制器——Freescale微控制器 18
    小结 20
    参考文献 20

    第二部分 最小的系统和PIC16F84A
    第2章 PIC16系列和16F84A 22
    2.1 PIC16系列 22
    2.1.1 PIC16系列概述 22
    2.1.2 16F84A 24
    2.1.3 谨慎升级 24
    2.2 16F84A体系结构概述 24
    2.3 存储器技术回顾 27
    2.3.1 静态RAM 27
    2.3.2 EPROM 28
    2.3.3 EEPROM 28
    2.3.4 Flash 29
    2.4 16F84A的存储器 29
    2.4.1 16F84A程序存储器 29
    2.4.2 16F84A数据和特殊功能寄存器存储器(RAM) 30
    2.4.3 配置字 32
    2.4.4 EEPROM 33
    2.5 一些有关时序的问题 34
    2.5.1 时钟振荡器和指令周期 34
    2.5.2 流水线操作 35
    2.6 上电和复位 36
    2.7 其他微控制器——AtmelAT89C2051微控制器 37
    2.8 更多细节——16F84A片上复位电路 38
    小结 40
    参考文献 41

    第3章 并行端口、电源和时钟振荡器 42
    3.1 并行输入/输出概述 42
    3.2 并行输入/输出的技术挑战 43
    3.2.1 设计并行端口 43
    3.2.2 端口的电学特性 46
    3.2.3 一些特殊的端口特性 47
    3.3 与并行端口连接的设备 48
    3.3.1 开关 48
    3.3.2 发光二极管 49
    3.4 PIC16F84A并行端口 51
    3.4.1 16F84A端口B 52
    3.4.2 16F84A端口A 53
    3.4.3 端口的输出特性 53
    3.5 时钟振荡器 55
    3.5.1 时钟振荡器类型 55
    3.5.2 实际使用振荡器时要考虑的问题 56
    3.5.3 16F84A的时钟振荡器 56
    3.6 电源 58
    3.6.1 对电源的要求 58
    3.6.2 16F84A的工作条件 58
    3.7 电子乒乓球游戏的硬件设计 60
    小结 60
    参考文献 61

    第4章 编程伊始——汇编介绍 62
    4.1 程序功能与开发流程 63
    4.1.1 编程问题和汇编折中方案 63
    4.1.2 采用汇编语言编写程序的流程 64
    4.1.3 程序开发流程 65
    4.2 PIC16系列指令集和ALU 66
    4.2.1 PIC16系列ALU 66
    4.2.2 PIC16系列指令集 67
    4.3 汇编器和汇编格式 68
    4.3.1 汇编器及MicrochipMPASMTM汇编器简介 68
    4.3.2 汇编格式 68
    4.3.3 汇编伪指令 69
    4.3.4 数的表示 69
    4.4 编写简单的程序 70
    4.5 使用开发环境编程 72
    4.5.1 MPLAB介绍 72
    4.5.2 MPLAB的组成部分 73
    4.5.3 MPLAB文件结构 74
    4.6 MPLAB指南 74
    4.6.1 创建项目 75
    4.6.2 编写源代码 75
    4.6.3 对项目进行汇编 76
    4.7 程序仿真简介 77
    4.7.1 开始仿真 77
    4.7.2 产生端口输入 78
    4.7.3 观察微控制器各部分状态 78
    4.7.4 程序复位和运行 79
    4.8 下载程序到微控制器 80
    4.9 CISC指令集和RISC指令集比较 82
    4.10 更多的了解——16系列指令集格式 83
    小结 84
    参考文献 84

    第5章 创建汇编程序 85
    5.1 创建结构化程序概述 85
    5.1.1 流程图 85
    5.1.2 状态图 86
    5.2 流程控制——分支和子例程 88
    5.2.1 条件分支和位操作 88
    5.2.2 子例程和栈 89
    5.3 产生延时和时间间隔 91
    5.4 数据处理 92
    5.4.1 直接寻址和文件选择寄存器 93
    5.4.2 查找表 93
    5.4.3 包含延时循环和查找表的程序例子 95
    5.5 逻辑指令 97
    5.6 算术指令和进位标志 97
    5.6.1 加法指令 98
    5.6.2 减法指令 98
    5.6.3 一个算术程序例子 98
    5.6.4 通过间接寻址来保存斐波那契数列 100
    5.7 更复杂的汇编程序 102
    5.7.1 包含文件 102
    5.7.2 宏指令(Macro) 103
    5.7.3 MPLAB特殊指令 104
    5.8 MPLAB仿真器的更多用处 105
    5.8.1 断点 105
    5.8.2 跑表 106
    5.8.3 跟踪 107
    5.9 电子乒乓球游戏程序 108
    5.9.1 程序结构 108
    5.9.2 程序代码分析 110
    5.10 电子乒乓球游戏程序仿真 111
    5.10.1 设置输入激励 111
    5.10.2 设置Watch窗口 111
    5.10.3 单步运行 111
    5.10.4 连续单步运行 112
    5.10.5 运行 112
    5.10.6 断点 112
    5.10.7 跑表 112
    5.10.8 跟踪 113
    5.10.9 调试整个程序 113
    5.11 其他仿真器介绍——图形化的传真器 114
    小结 114
    参考文献 114

    第6章 与计时相关的设备:中断、计数器和定时器 115
    6.1 中断 115
    6.1.1 中断结构 116
    6.1.2 16F84A中断结构 117
    6.1.3 CPU对中断的响应 118
    6.2 编写含有中断的程序 119
    6.2.1 编写仅含一个中断的程序 119
    6.2.2 编写含有多个中断的程序——识别中断源 121
    6.2.3 阻止中断对程序的破坏——保存上下文 122
    6.2.4 阻止中断对程序的破坏——临界区域和中断屏蔽 124
    6.3 计数器和定时器概述 126
    6.3.1 数字计数器回顾 126
    6.3.2 将计数器用作定时器 127
    6.3.3 16F84ATimer0模块 128
    6.4 16F84ATimer0的使用——以电子乒乓球游戏为例 130
    6.4.1 对目标或事件计数 130
    6.4.2 硬件产生的延时 131
    6.5 看门狗定时器 133
    6.6 休眠模式 133
    6.7 其他中断 134
    6.8 更多的了解——中断响应延时 135
    小结 136

    第三部分 较大的系统和PIC16F873A
    第7章 较大的系统和PIC16F873A 138
    7.1 PIC16F87XA概述 139
    7.2 16F873A的结构图和CPU 140
    7.2.1 CPU和核 141
    7.2.2 存储器 141
    7.2.3 外围设备 142
    7.3 16F873A的存储器和存储器映射 142
    7.3.1 16F873A的程序存储器 142
    7.3.2 16F873A的数据存储器和特殊功能寄存器 144
    7.3.3 配置字 146
    7.4 “特殊”的存储器操作 146
    7.4.1 存取EEPROM和程序存储器 147
    7.4.2 电路内串行编程(ICSPTM) 149
    7.5 16F873A的中断 149
    7.5.1 中断结构 149
    7.5.2 中断寄存器 150
    7.5.3 中断识别和上下文保存 152
    7.6 16F873A的振荡器、复位和电源 152
    7.6.1 时钟振荡器 152
    7.6.2 复位和电源 152
    7.7 16F873A的并行端口 153
    7.7.1 16F873A的端口A 153
    7.7.2 16F873A的端口B 155
    7.7.3 16F873A的端口C 155
    7.8 测试、调试、诊断工具 156
    7.8.1 测试嵌入式系统的挑战 156
    7.8.2 示波器和逻辑分析仪 158
    7.8.3 电路内仿真器 160
    7.8.4 片上调试器 161
    7.9 Microchip公司的电路内调试器(ICD2) 162
    7.10 应用16F873A:DerbotAGV 163
    7.10.1 电源、振荡器和复位 163
    7.10.2 并行端口的使用 164
    7.10.3 硬件集成 165
    7.11 使用ICD2下载、测试和运行一个简单的程序 166
    7.11.1 第一个AGV程序 166
    7.11.2 应用电路内调试器ICD2 168
    7.11.3 在程序中设置配置字 169
    7.12 深入了解16F874A/16F877A的端口D和端口E 171
    小结 173
    参考文献 173

    第8章 人机接口和物理接口 174
    8.1 人机接口概述 174
    8.2 从开关到键盘 176
    8.2.1 键盘 177
    8.2.2 设计实例:Derbot手动控制器中键盘的使用 178
    8.3 LED显示 182
    8.3.1 LED阵列:七段LED显示 182
    8.3.2 设计实例:在Derbot手动控制器中使用七段LED显示 184
    8.4 LCD 188
    8.4.1 HD44780驱动和它的衍生电路 188
    8.4.2 设计实例:在Derbot手动控制器中使用LCD显示器 190
    8.5 与物理世界交互 192
    8.6 一些简单的传感器 193
    8.6.1 微开关 193
    8.6.2 光敏电阻 194
    8.6.3 光学方式的物体感知 194
    8.6.4 光学传感器用于轴角编码器 195
    8.6.5 超声波方式的物体感知 196
    8.7 深入学习数字信号输入 196
    8.7.1 16F873A的输入特性 197
    8.7.2 确保正常的电压幅度和输入保护 198
    8.7.3 消除开关反弹 201
    8.8 执行器:电机和伺服 202
    8.8.1 直流电机和步进电机 202
    8.8.2 角度定位:伺服传动装置 203
    8.9 与执行器进行交互 204
    8.9.1 简单的直流转换 204
    8.9.2 AGV中简单的开关电路 206
    8.9.3 双向开关:H-桥 207
    8.9.4 AGV中的电机开关 209
    8.10 AGV硬件集成 209
    8.11 应用传感器和执行器——AGV“盲目”导航程序 210
    小结 212
    参考文献 212

    第9章 深入学习计时 213
    9.1 深入学习计数和计时 213
    9.2 16F87XATimer0和Timer1 214
    9.2.1 Timer0 214
    9.2.2 Timer1 214
    9.2.3 使用Timer0和Timer1作为AGV里程表的计数器 216
    9.2.4 使用Timer0和Timer1产生重复性中断 219
    9.3 16F87XA的Timer2、比较器和PR2寄存器 220
    9.3.1 Timer2 220
    9.3.2 PR2寄存器、比较器和后分频比器 221
    9.4 捕捉/比较/PWM(CCP)模块 222
    9.4.1 捕捉/比较/PWM概论 222
    9.4.2 捕捉模式 223
    9.4.3 比较模式 224
    9.5 脉宽调制 225
    9.5.1 PWM的原理 225
    9.5.2 在硬件中产生PWM信号——16F87XA的PWM模块 226
    9.5.3 将PWM应用于AGV中电机的控制 228
    9.6 软件产生PWM 231
    9.6.1 一个软件产生PWM的例子 231
    9.6.2 与存储器定义和跳转相关的汇编伪指令 235
    9.7 使用PWM进行数模转换 236
    9.8 频率测量 239
    9.8.1 频率测量的原理 239
    9.8.2 AGV中的频率(速度)测量 239
    9.9 在AGV中应用速度控制 242
    9.10 当没有可用定时器时 245
    9.11 休眠模式 247
    9.12 后面我们将学习什么 248
    9.13 AGV硬件集成 248
    小结 248
    参考文献 249

    第10章 串行端口通信 250
    10.1 串行端口简介 250
    10.2 简单串行连接——同步数据通信 252
    10.2.1 同步通信基础 252
    10.2.2 在微控制器中实现同步串行I/O 253
    10.2.3 Microwire和SPI 254
    10.2.4 引入多个节点 254
    10.3 16F87XA主同步串行端口(MSSP)模块的SPI模式 255
    10.3.1 端口概述 255
    10.3.2 端口配置 256
    10.3.3 时钟设置 257
    10.3.4 管理数据传输 258
    10.4 SPI的简单例子 259
    10.5 Microwire和SPI以及简单同步串行传输的局限性 261
    10.6 增强的同步串行通信及芯片间总线 261
    10.6.1 I2C的主要特性与物理连接 261
    10.6.2 上拉电阻 262
    10.6.3 I2C信号特性 262
    10.7 配置为I2C的MSSP 263
    10.7.1 MSSP中的I2C寄存器及其基本应用 263
    10.7.2 I2C从动模式下的MSSP 267
    10.7.3 I2C主控模式下的MSSP 269
    10.8 在DerbotAGV中应用I2C 270
    10.8.1 将Derbot手动控制器用作串行节点 270
    10.8.2 将AGV用作I2C主控器 271
    10.8.3 将手动控制器用作I2C从动器 275
    10.8.4 DerbotI2C程序验证 277
    10.9 对同步串行数据通信的评价及对异步通信方式的介绍 278
    10.9.1 异步原理 278
    10.9.2 在不接收时钟信号时如何对串行数据进行同步 279
    10.10 16F87XA可寻址通用同步异步收发器(USART) 280
    10.10.1 端口概述 280
    10.10.2 USART异步发送器 280
    10.10.3 USART波特率发生器 282
    10.10.4 USART异步接收器 283
    10.10.5 异步通信示例 284
    10.10.6 在USART接收模式下使用地址检测 286
    10.10.7 USART的同步模式 287
    10.11 不借助串行端口实现串行通信——“bitbanging” 287
    10.12 构建Derbot手动控制器 287
    小结 287
    参考文献 288

    第11章 数据采集与处理 289
    11.1 模拟量和数字量的采集与使用概述 289
    11.2 数据采集系统 290
    11.2.1 模数转换器 290
    11.2.2 信号调理——放大与滤波 293
    11.2.3 模拟多路选择器 293
    11.2.4 采样与保持以及采集时间 293
    11.2.5 时序及微处理器控制 295
    11.2.6 微控制器环境下的数据采集 296
    11.3 PIC16F87XA中的ADC模块 296
    11.3.1 概述与框图 296
    11.3.2 控制ADC 297
    11.3.3 模拟输入模型 300
    11.3.4 计算采集时间 301
    11.3.5 重复转换 302
    11.3.6 综合权衡转换速率与转换精度 302
    11.4 在Derbot测光程序中应用ADC 303
    11.4.1 ADC的配置 304
    11.4.2 采集时间 304
    11.4.3 数据转换 304
    11.5 一些简单的数据处理技术 305
    11.5.1 定点与浮点算术 305
    11.5.2 二进制数向BCD码的转换 306
    11.5.3 乘法 307
    11.5.4 比例缩放与Derbot测光示例 307
    11.5.5 使用参考电压实现比例缩放 308
    11.6 Derbot寻光程序 309
    11.7 比较器模块 311
    11.7.1 比较器动作概述 311
    11.7.2 16F87XA的比较器与参考电压 311
    11.8 将Derbot电路用于其他测量 312
    11.8.1 电子测距仪 312
    11.8.2 测光仪 313
    11.8.3 电压计 314
    11.8.4 其他测量系统 314
    11.9 将Derbot配置为寻光机器人 314
    小结 314
    参考文献 315

    第四部分 更灵巧的系统与PIC18FXX2
    第12章 更灵巧的系统与PIC18FXX2 318
    12.1 PIC18系列及18FXX2概述 319
    12.2 18F2X2结构图与状态寄存器 320
    12.3 18系列指令集 324
    12.3.1 未变化的指令 327
    12.3.2 经过升级的指令 328
    12.3.3 变化而来的新指令 328
    12.3.4 全新指令 328
    12.4 数据存储器与特殊功能寄存器 329
    12.4.1 数据存储器映射 329
    12.4.2 存取RAM 329
    12.4.3 间接寻址以及在数据存储器中访问表格 329
    12.5 程序存储器 332
    12.5.1 程序存储器映射 332
    12.5.2 程序计数器 332
    12.5.3 在16系列基础上增强的计算goto指令 333
    12.5.4 配置寄存器 334
    12.6 栈 335
    12.6.1 自动栈操作 335
    12.6.2 程序员对栈的访问 336
    12.6.3 快速寄存器栈 336
    12.7 中断 336
    12.7.1 中断结构概览 337
    12.7.2 中断源的启用与优先级划分 337
    12.7.3 总体中断优先级启用 338
    12.7.4 全局启用 338
    12.7.5 中断逻辑的其他方面 338
    12.7.6 中断寄存器 339
    12.7.7 中断的上下文保护 343
    12.8 电源与复位 343
    12.8.1 电源 343
    12.8.2 上电与复位 343
    12.9 振荡源 345
    12.9.1 LP、XT、HS和RC振荡器模式 345
    12.9.2 EC、ECIO和RCIO振荡器模式 345
    12.9.3 HS+PLL振荡器模式 346
    12.9.4 时钟源切换 346
    12.10 18F242编程入门 346
    12.10.1 使用18系列MPLABIDE 347
    12.10.2 斐波那契程序 347
    小结 349
    参考文献 349

    第13章 PIC18FXX2外围设备 350
    13.1 18FXX2外围设备概述 350
    13.2 并行端口 351
    13.2.1 18FXX2的端口A 351
    13.2.2 18FXX2的端口B 352
    13.2.3 18FXX2的端口C 353
    13.2.4 并行从动端口 353
    13.3 定时器 353
    13.3.1 Timer0 353
    13.3.2 Timer1 355
    13.3.3 Timer2 356
    13.3.4 Timer3 356
    13.3.5 看门狗定时器 357
    13.4 比较/捕捉/PWM(CCP)模块 358
    13.4.1 控制寄存器 358
    13.4.2 捕捉模式 359
    13.4.3 比较模式 359
    13.4.4 脉宽调制 360
    13.5 串行端口 360
    13.5.1 SPI模式下的MSSP 360
    13.5.2 I2C模式下的MSSP 361
    13.5.3 USART 361
    13.6 模数转换器(ADC) 361
    13.7 低压检测 361
    13.8 在Derbot-18中应用18系列 363
    13.9 18F2420与扩展指令集 363
    13.9.1 纳瓦技术 364
    13.9.2 扩展指令集 364
    13.9.3 增强型外围设备 365
    小结 365
    参考文献 365

    第14章 C语言入门 366
    14.1 为何选择C语言 366
    14.2 C语言简介 367
    14.2.1 简史 367
    14.2.2
    第一个C程序 367
    14.2.3 程序结构——声明、语句、注释和空格 368
    14.2.4 C语言关键字 370
    14.2.5 C语言函数 370
    14.2.6 数据类型与存储 371
    14.2.7 C运算符 372
    14.2.8 程序流的控制以及while关键字 372
    14.2.9 C预处理器及其伪指令 373
    14.2.10 使用库和标准库 373
    14.3 编译C程序 373
    14.4 MPLABC18编译器 374
    14.4.1 数制规范 375
    14.4.2 算术运算 375
    14.5 C18指南 375
    14.5.1 连接器和连接器脚本 375
    14.5.2 连接头文件和库文件 376
    14.5.3 构建项目 377
    14.5.4 项目文件 378
    14.6 仿真C程序 378
    14.7 第2个C例程——斐波那契程序 380
    14.7.1 程序初步——进一步认识变量声明 381
    14.7.2 do-while结构 381
    14.7.3 标号和goto关键字 381
    14.7.4 仿真斐波那契程序 381
    14.8 MPLABC18库 382
    14.8.1 硬件外围设备函数 382
    14.8.2 软件外围设备库 382
    14.8.3 通用软件库 383
    14.8.4 数学库 384
    14.9 深度阅读 385
    小结 385
    参考文献 385

    第15章 C语言与嵌入式环境 387
    15.1 使C语言适用于嵌入式环境 387
    15.2 位值的控制与分支 387
    15.2.1 控制各个位 389
    15.2.2 if与if-else条件分支结构 389
    15.2.3 设置配置位 390
    15.2.4 仿真并运行例程 390
    15.3 进一步认识函数 391
    15.3.1 函数原型 391
    15.3.2 函数定义 392
    15.3.3 函数调用与数据传递 392
    15.3.4 延时库函数和Delay10KTCYx() 393
    15.4 更多的分支与循环指令 393
    15.4.1 使用break关键字 393
    15.4.2 使用for关键字 394
    15.5 使用定时器与PWM外围设备 395
    15.5.1 使用定时器外围设备 397
    15.5.2 使用PWM 398
    15.5.3 主程序循环 399
    小结 399

    第16章 使用C语言实现数据的采集与使用 400
    16.1 用C语言实现数据处理 400
    16.2 使用18FXX2ADC 400
    16.2.1 寻光程序的结构 404
    16.2.2 使用ADC 405
    16.2.3 if-else的更多应用 406
    16.2.4 寻光程序的仿真 406
    16.3 指针、数组与字符串 408
    16.3.1 指针 408
    16.3.2 数组 408
    16.3.3 对数组使用指针 409
    16.3.4 字符串 409
    16.3.5 指针、数组和字符串的应用例程 409
    16.3.6 对while条件的补充说明 411
    16.3.7 仿真例程 411
    16.4 使用I2C外围设备 413
    16.4.1 I2C例程 413
    16.4.2 使用++和——运算符 415
    16.5 格式化显示数据 416
    16.5.1 例程概览 419
    16.5.2 使用库函数实现数据的格式化 418
    16.5.3 程序分析 418
    小结419

    第17章 深入学习C语言编程和更丰富的C语言编程环境 420
    17.1 深入学习C语言编程和更丰富的C语言编程环境 420
    17.2 插入汇编 421
    17.3 控制存储器分配 422
    17.3.1 存储器分配伪指令pragma 422
    17.3.2 设置配置字 423
    17.4 中断 424
    17.4.1 中断服务程序 424
    17.4.2 定位和识别中断服务程序 424
    17.5 使用溢出中断的例子——闪烁AGV上的LED 425
    17.5.1 使用Timer0 426
    17.5.2 中断的使用和中断服务程序的动作 427
    17.5.3 仿真闪烁LED程序 427
    17.6 变量的存储类型及其应用 429
    17.6.1 存储类型 429
    17.6.2 可见性 430
    17.6.3 生存期 430
    17.6.4 连接 430
    17.6.5 18系列中指定变量的存储器类型 431
    17.6.6 存储类型举例 431
    17.7 启动文件:c018i.c 432
    17.7.1 C18启动文件 432
    17.7.2 c018i.c文件的结构 433
    17.7.3 仿真c018i.c文件 433
    17.8 结构体、联合体和位域 435
    17.9 处理器相关的头文件 436
    17.9.1 SFR定义 436
    17.9.2 头文件中汇编相关的定义 437
    17.10 深入学习——MPLAB连接器和.map文件 437
    17.10.1 连接器的功能 737
    17.10.2 连接器脚本 738
    17.10.3 .map文件 439
    小结 440
    参考文献 441

    第18章 多任务实时操作系统 442
    18.1 由多任务和实时引发的挑战 442
    18.1.1 多任务——任务、优先权、截止时间 443
    18.1.2 “实时”的含义 444
    18.2 通过顺序编程来实现多任务 444
    18.2.1 分析超循环 445
    18.2.2 时间触发和事件触发的任务 445
    18.2.3 使用中断来区分优先级——前台/后台结构 445
    18.2.4 引入“时钟滴答”来同步程序活动 446
    18.2.5 一个通用的“操作系统” 446
    18.2.6 顺序编程实现多任务的限制 448
    18.3 实时操作系统 448
    18.4 调度策略和调度器 448
    18.4.1 循环调度 449
    18.4.2 时间片轮转调度和上下文切换 449
    18.4.3 任务状态 450
    18.4.4 抢占式优先级调度 451
    18.4.5 协作式调度 452
    18.4.6 中断在任务调度中的作用 452
    18.5 任务开发 453
    18.5.1 任务定义 453
    18.5.2 编写任务以及设置任务优先级 453
    18.6 数据和资源保护——信号量 454
    18.7 后面我们将学习什么 454
    小结 455
    参考文献 455

    第19章 SalvoTM实时操作系统 456
    19.1 Salvo实时操作系统概述 456
    19.1.1 Salvo的基本特性 456
    19.1.2 Salvo版本和相关的参考文献 457
    19.2 配置Salvo应用程序 458
    19.2.1 构建Salvo应用程序——构建库 458
    19.2.2 Salvo库 458
    19.2.3 C18和Salvo版本 459
    19.3 编写Salvo程序 460
    19.3.1 初始化和调度 460
    19.3.2 编写Salvo任务 461
    19.4 第一个Salvo例程 461
    19.4.1 程序的总体结构和main函数 463
    19.4.2 任务和调度 464
    19.4.3 创建一个Salvo/C18项目 464
    19.4.4 配置文件的设置 465
    19.4.5 构建Salvo例子 465
    19.4.6 仿真Salvo程序 466
    19.5 在Salvo程序中使用中断、延迟和信号量 467
    19.5.1 一个使用中断驱动的时钟滴答的例程 468
    19.5.2 选择库和配置 470
    19.5.3 使用中断和产生时钟滴答 470
    19.5.4 使用延迟 472
    19.5.5 使用一个二元信号量 472
    19.5.6 程序仿真 474
    19.5.7 运行程序 475
    19.6 使用Salvo消息和增加RTOS复杂度 475
    19.7 一个使用消息的例程 476
    19.7.1 选择库和配置 481
    19.7.2 任务:USnd_Task 481
    19.7.3 任务:Motor_Task 481
    19.7.4 消息的用法 482
    19.7.5 中断的使用和ISR 483
    19.7.6 仿真或者运行程序 485
    19.8 RTOS开销 485
    小结 485
    参考文献 486

    第五部分 网络互连技术
    第20章 互连与网络 488
    20.1 网络互连概述 488
    20.2 红外线连接 490
    20.3 无线电连接 491
    20.3.1 蓝牙 491
    20.3.2 紫蜂 492
    20.3.3 紫峰和PIC微控制器 492
    20.4 控制器局域网和局域互联网 493
    20.4.1 控制器局域网 493
    20.4.2 CAN和PIC微控制器 494
    20.4.3 局域互联网 495
    20.4.4 LIN和PIC微控制器 496
    20.5 嵌入式系统和互联网 497
    20.6 总结 498
    小结 498
    参考文献 499

    附录1 PIC16系列指令集 500
    附录2 电子乒乓球游戏 502
    附录3 DerbotAGV硬件设计细节 507
    附录4 自主导向车的一些基本知识 511
    附录5 PIC18系列指令集(非扩展) 515
    附录6 C语言要点 519
    索引 523
  • 内容简介:
      本书系统而全面地介绍了嵌入式系统设计的原理及其应用,包括嵌入式系统的指令集系统结构、流水线、存储设备、定时器、中断、时钟、并行串行通信、互连网络、开发环境和开发语言等重要内容。书中对嵌入式系统设计的讲解主要以Microchip公司的3款PIC微控制器(16F84A、16F873A和18F242)为基础,并辅以大量的设计实例。全书编排合理,叙述由浅入深,生动活泼。
      本书适合嵌入式系统开发工程师阅读,也可作为高等院校电子、机电和计算机工程相关专业嵌入式系统课程的教材或参考书。
  • 作者简介:
      TimWilmshurst,英国德比大学教授,并长期任教于剑桥大学。lET(英国工程技术学会,前身为IEE)会士。著名的嵌入式系统专家。主要研究方向为电子技术和嵌入式系统,在PIC微控制器的应用开发上有很深的造诣。他在本书中作为实例设计的自动导向车——DerbotAGV已经广泛应用于嵌入式系统教学,获得了巨大成功。
  • 目录:
    第一部分 嵌入式系统入门
    第1章 微小的计算机,隐藏的控制 2
    1.1 当今嵌入式系统概述 2
    1.2 一些嵌入式系统例子 3
    1.2.1 家用电冰箱 3
    1.2.2 汽车车门机械装置 4
    1.2.3 电子乒乓球 5
    1.2.4 Derbot自主导向车 5
    1.3 一些必备的计算机知识 7
    1.3.1 计算机的组成元素 7
    1.3.2 指令集——CISC和RISC 8
    1.3.3 存储器类型 8
    1.3.4 存储器组织结构 9
    1.4 微处理器和微控制器 10
    1.4.1 微处理器 10
    1.4.2 微控制器 10
    1.4.3 微控制器系列产品 11
    1.4.4 微控制器的封装和外观 12
    1.5 Microchip公司和PIC微控制器 13
    1.5.1 背景 13
    1.5.2 今天的PIC微控制器 14
    1.6 以12系列为例介绍PIC微控制器 16
    1.7 其他微控制器——Freescale微控制器 18
    小结 20
    参考文献 20

    第二部分 最小的系统和PIC16F84A
    第2章 PIC16系列和16F84A 22
    2.1 PIC16系列 22
    2.1.1 PIC16系列概述 22
    2.1.2 16F84A 24
    2.1.3 谨慎升级 24
    2.2 16F84A体系结构概述 24
    2.3 存储器技术回顾 27
    2.3.1 静态RAM 27
    2.3.2 EPROM 28
    2.3.3 EEPROM 28
    2.3.4 Flash 29
    2.4 16F84A的存储器 29
    2.4.1 16F84A程序存储器 29
    2.4.2 16F84A数据和特殊功能寄存器存储器(RAM) 30
    2.4.3 配置字 32
    2.4.4 EEPROM 33
    2.5 一些有关时序的问题 34
    2.5.1 时钟振荡器和指令周期 34
    2.5.2 流水线操作 35
    2.6 上电和复位 36
    2.7 其他微控制器——AtmelAT89C2051微控制器 37
    2.8 更多细节——16F84A片上复位电路 38
    小结 40
    参考文献 41

    第3章 并行端口、电源和时钟振荡器 42
    3.1 并行输入/输出概述 42
    3.2 并行输入/输出的技术挑战 43
    3.2.1 设计并行端口 43
    3.2.2 端口的电学特性 46
    3.2.3 一些特殊的端口特性 47
    3.3 与并行端口连接的设备 48
    3.3.1 开关 48
    3.3.2 发光二极管 49
    3.4 PIC16F84A并行端口 51
    3.4.1 16F84A端口B 52
    3.4.2 16F84A端口A 53
    3.4.3 端口的输出特性 53
    3.5 时钟振荡器 55
    3.5.1 时钟振荡器类型 55
    3.5.2 实际使用振荡器时要考虑的问题 56
    3.5.3 16F84A的时钟振荡器 56
    3.6 电源 58
    3.6.1 对电源的要求 58
    3.6.2 16F84A的工作条件 58
    3.7 电子乒乓球游戏的硬件设计 60
    小结 60
    参考文献 61

    第4章 编程伊始——汇编介绍 62
    4.1 程序功能与开发流程 63
    4.1.1 编程问题和汇编折中方案 63
    4.1.2 采用汇编语言编写程序的流程 64
    4.1.3 程序开发流程 65
    4.2 PIC16系列指令集和ALU 66
    4.2.1 PIC16系列ALU 66
    4.2.2 PIC16系列指令集 67
    4.3 汇编器和汇编格式 68
    4.3.1 汇编器及MicrochipMPASMTM汇编器简介 68
    4.3.2 汇编格式 68
    4.3.3 汇编伪指令 69
    4.3.4 数的表示 69
    4.4 编写简单的程序 70
    4.5 使用开发环境编程 72
    4.5.1 MPLAB介绍 72
    4.5.2 MPLAB的组成部分 73
    4.5.3 MPLAB文件结构 74
    4.6 MPLAB指南 74
    4.6.1 创建项目 75
    4.6.2 编写源代码 75
    4.6.3 对项目进行汇编 76
    4.7 程序仿真简介 77
    4.7.1 开始仿真 77
    4.7.2 产生端口输入 78
    4.7.3 观察微控制器各部分状态 78
    4.7.4 程序复位和运行 79
    4.8 下载程序到微控制器 80
    4.9 CISC指令集和RISC指令集比较 82
    4.10 更多的了解——16系列指令集格式 83
    小结 84
    参考文献 84

    第5章 创建汇编程序 85
    5.1 创建结构化程序概述 85
    5.1.1 流程图 85
    5.1.2 状态图 86
    5.2 流程控制——分支和子例程 88
    5.2.1 条件分支和位操作 88
    5.2.2 子例程和栈 89
    5.3 产生延时和时间间隔 91
    5.4 数据处理 92
    5.4.1 直接寻址和文件选择寄存器 93
    5.4.2 查找表 93
    5.4.3 包含延时循环和查找表的程序例子 95
    5.5 逻辑指令 97
    5.6 算术指令和进位标志 97
    5.6.1 加法指令 98
    5.6.2 减法指令 98
    5.6.3 一个算术程序例子 98
    5.6.4 通过间接寻址来保存斐波那契数列 100
    5.7 更复杂的汇编程序 102
    5.7.1 包含文件 102
    5.7.2 宏指令(Macro) 103
    5.7.3 MPLAB特殊指令 104
    5.8 MPLAB仿真器的更多用处 105
    5.8.1 断点 105
    5.8.2 跑表 106
    5.8.3 跟踪 107
    5.9 电子乒乓球游戏程序 108
    5.9.1 程序结构 108
    5.9.2 程序代码分析 110
    5.10 电子乒乓球游戏程序仿真 111
    5.10.1 设置输入激励 111
    5.10.2 设置Watch窗口 111
    5.10.3 单步运行 111
    5.10.4 连续单步运行 112
    5.10.5 运行 112
    5.10.6 断点 112
    5.10.7 跑表 112
    5.10.8 跟踪 113
    5.10.9 调试整个程序 113
    5.11 其他仿真器介绍——图形化的传真器 114
    小结 114
    参考文献 114

    第6章 与计时相关的设备:中断、计数器和定时器 115
    6.1 中断 115
    6.1.1 中断结构 116
    6.1.2 16F84A中断结构 117
    6.1.3 CPU对中断的响应 118
    6.2 编写含有中断的程序 119
    6.2.1 编写仅含一个中断的程序 119
    6.2.2 编写含有多个中断的程序——识别中断源 121
    6.2.3 阻止中断对程序的破坏——保存上下文 122
    6.2.4 阻止中断对程序的破坏——临界区域和中断屏蔽 124
    6.3 计数器和定时器概述 126
    6.3.1 数字计数器回顾 126
    6.3.2 将计数器用作定时器 127
    6.3.3 16F84ATimer0模块 128
    6.4 16F84ATimer0的使用——以电子乒乓球游戏为例 130
    6.4.1 对目标或事件计数 130
    6.4.2 硬件产生的延时 131
    6.5 看门狗定时器 133
    6.6 休眠模式 133
    6.7 其他中断 134
    6.8 更多的了解——中断响应延时 135
    小结 136

    第三部分 较大的系统和PIC16F873A
    第7章 较大的系统和PIC16F873A 138
    7.1 PIC16F87XA概述 139
    7.2 16F873A的结构图和CPU 140
    7.2.1 CPU和核 141
    7.2.2 存储器 141
    7.2.3 外围设备 142
    7.3 16F873A的存储器和存储器映射 142
    7.3.1 16F873A的程序存储器 142
    7.3.2 16F873A的数据存储器和特殊功能寄存器 144
    7.3.3 配置字 146
    7.4 “特殊”的存储器操作 146
    7.4.1 存取EEPROM和程序存储器 147
    7.4.2 电路内串行编程(ICSPTM) 149
    7.5 16F873A的中断 149
    7.5.1 中断结构 149
    7.5.2 中断寄存器 150
    7.5.3 中断识别和上下文保存 152
    7.6 16F873A的振荡器、复位和电源 152
    7.6.1 时钟振荡器 152
    7.6.2 复位和电源 152
    7.7 16F873A的并行端口 153
    7.7.1 16F873A的端口A 153
    7.7.2 16F873A的端口B 155
    7.7.3 16F873A的端口C 155
    7.8 测试、调试、诊断工具 156
    7.8.1 测试嵌入式系统的挑战 156
    7.8.2 示波器和逻辑分析仪 158
    7.8.3 电路内仿真器 160
    7.8.4 片上调试器 161
    7.9 Microchip公司的电路内调试器(ICD2) 162
    7.10 应用16F873A:DerbotAGV 163
    7.10.1 电源、振荡器和复位 163
    7.10.2 并行端口的使用 164
    7.10.3 硬件集成 165
    7.11 使用ICD2下载、测试和运行一个简单的程序 166
    7.11.1 第一个AGV程序 166
    7.11.2 应用电路内调试器ICD2 168
    7.11.3 在程序中设置配置字 169
    7.12 深入了解16F874A/16F877A的端口D和端口E 171
    小结 173
    参考文献 173

    第8章 人机接口和物理接口 174
    8.1 人机接口概述 174
    8.2 从开关到键盘 176
    8.2.1 键盘 177
    8.2.2 设计实例:Derbot手动控制器中键盘的使用 178
    8.3 LED显示 182
    8.3.1 LED阵列:七段LED显示 182
    8.3.2 设计实例:在Derbot手动控制器中使用七段LED显示 184
    8.4 LCD 188
    8.4.1 HD44780驱动和它的衍生电路 188
    8.4.2 设计实例:在Derbot手动控制器中使用LCD显示器 190
    8.5 与物理世界交互 192
    8.6 一些简单的传感器 193
    8.6.1 微开关 193
    8.6.2 光敏电阻 194
    8.6.3 光学方式的物体感知 194
    8.6.4 光学传感器用于轴角编码器 195
    8.6.5 超声波方式的物体感知 196
    8.7 深入学习数字信号输入 196
    8.7.1 16F873A的输入特性 197
    8.7.2 确保正常的电压幅度和输入保护 198
    8.7.3 消除开关反弹 201
    8.8 执行器:电机和伺服 202
    8.8.1 直流电机和步进电机 202
    8.8.2 角度定位:伺服传动装置 203
    8.9 与执行器进行交互 204
    8.9.1 简单的直流转换 204
    8.9.2 AGV中简单的开关电路 206
    8.9.3 双向开关:H-桥 207
    8.9.4 AGV中的电机开关 209
    8.10 AGV硬件集成 209
    8.11 应用传感器和执行器——AGV“盲目”导航程序 210
    小结 212
    参考文献 212

    第9章 深入学习计时 213
    9.1 深入学习计数和计时 213
    9.2 16F87XATimer0和Timer1 214
    9.2.1 Timer0 214
    9.2.2 Timer1 214
    9.2.3 使用Timer0和Timer1作为AGV里程表的计数器 216
    9.2.4 使用Timer0和Timer1产生重复性中断 219
    9.3 16F87XA的Timer2、比较器和PR2寄存器 220
    9.3.1 Timer2 220
    9.3.2 PR2寄存器、比较器和后分频比器 221
    9.4 捕捉/比较/PWM(CCP)模块 222
    9.4.1 捕捉/比较/PWM概论 222
    9.4.2 捕捉模式 223
    9.4.3 比较模式 224
    9.5 脉宽调制 225
    9.5.1 PWM的原理 225
    9.5.2 在硬件中产生PWM信号——16F87XA的PWM模块 226
    9.5.3 将PWM应用于AGV中电机的控制 228
    9.6 软件产生PWM 231
    9.6.1 一个软件产生PWM的例子 231
    9.6.2 与存储器定义和跳转相关的汇编伪指令 235
    9.7 使用PWM进行数模转换 236
    9.8 频率测量 239
    9.8.1 频率测量的原理 239
    9.8.2 AGV中的频率(速度)测量 239
    9.9 在AGV中应用速度控制 242
    9.10 当没有可用定时器时 245
    9.11 休眠模式 247
    9.12 后面我们将学习什么 248
    9.13 AGV硬件集成 248
    小结 248
    参考文献 249

    第10章 串行端口通信 250
    10.1 串行端口简介 250
    10.2 简单串行连接——同步数据通信 252
    10.2.1 同步通信基础 252
    10.2.2 在微控制器中实现同步串行I/O 253
    10.2.3 Microwire和SPI 254
    10.2.4 引入多个节点 254
    10.3 16F87XA主同步串行端口(MSSP)模块的SPI模式 255
    10.3.1 端口概述 255
    10.3.2 端口配置 256
    10.3.3 时钟设置 257
    10.3.4 管理数据传输 258
    10.4 SPI的简单例子 259
    10.5 Microwire和SPI以及简单同步串行传输的局限性 261
    10.6 增强的同步串行通信及芯片间总线 261
    10.6.1 I2C的主要特性与物理连接 261
    10.6.2 上拉电阻 262
    10.6.3 I2C信号特性 262
    10.7 配置为I2C的MSSP 263
    10.7.1 MSSP中的I2C寄存器及其基本应用 263
    10.7.2 I2C从动模式下的MSSP 267
    10.7.3 I2C主控模式下的MSSP 269
    10.8 在DerbotAGV中应用I2C 270
    10.8.1 将Derbot手动控制器用作串行节点 270
    10.8.2 将AGV用作I2C主控器 271
    10.8.3 将手动控制器用作I2C从动器 275
    10.8.4 DerbotI2C程序验证 277
    10.9 对同步串行数据通信的评价及对异步通信方式的介绍 278
    10.9.1 异步原理 278
    10.9.2 在不接收时钟信号时如何对串行数据进行同步 279
    10.10 16F87XA可寻址通用同步异步收发器(USART) 280
    10.10.1 端口概述 280
    10.10.2 USART异步发送器 280
    10.10.3 USART波特率发生器 282
    10.10.4 USART异步接收器 283
    10.10.5 异步通信示例 284
    10.10.6 在USART接收模式下使用地址检测 286
    10.10.7 USART的同步模式 287
    10.11 不借助串行端口实现串行通信——“bitbanging” 287
    10.12 构建Derbot手动控制器 287
    小结 287
    参考文献 288

    第11章 数据采集与处理 289
    11.1 模拟量和数字量的采集与使用概述 289
    11.2 数据采集系统 290
    11.2.1 模数转换器 290
    11.2.2 信号调理——放大与滤波 293
    11.2.3 模拟多路选择器 293
    11.2.4 采样与保持以及采集时间 293
    11.2.5 时序及微处理器控制 295
    11.2.6 微控制器环境下的数据采集 296
    11.3 PIC16F87XA中的ADC模块 296
    11.3.1 概述与框图 296
    11.3.2 控制ADC 297
    11.3.3 模拟输入模型 300
    11.3.4 计算采集时间 301
    11.3.5 重复转换 302
    11.3.6 综合权衡转换速率与转换精度 302
    11.4 在Derbot测光程序中应用ADC 303
    11.4.1 ADC的配置 304
    11.4.2 采集时间 304
    11.4.3 数据转换 304
    11.5 一些简单的数据处理技术 305
    11.5.1 定点与浮点算术 305
    11.5.2 二进制数向BCD码的转换 306
    11.5.3 乘法 307
    11.5.4 比例缩放与Derbot测光示例 307
    11.5.5 使用参考电压实现比例缩放 308
    11.6 Derbot寻光程序 309
    11.7 比较器模块 311
    11.7.1 比较器动作概述 311
    11.7.2 16F87XA的比较器与参考电压 311
    11.8 将Derbot电路用于其他测量 312
    11.8.1 电子测距仪 312
    11.8.2 测光仪 313
    11.8.3 电压计 314
    11.8.4 其他测量系统 314
    11.9 将Derbot配置为寻光机器人 314
    小结 314
    参考文献 315

    第四部分 更灵巧的系统与PIC18FXX2
    第12章 更灵巧的系统与PIC18FXX2 318
    12.1 PIC18系列及18FXX2概述 319
    12.2 18F2X2结构图与状态寄存器 320
    12.3 18系列指令集 324
    12.3.1 未变化的指令 327
    12.3.2 经过升级的指令 328
    12.3.3 变化而来的新指令 328
    12.3.4 全新指令 328
    12.4 数据存储器与特殊功能寄存器 329
    12.4.1 数据存储器映射 329
    12.4.2 存取RAM 329
    12.4.3 间接寻址以及在数据存储器中访问表格 329
    12.5 程序存储器 332
    12.5.1 程序存储器映射 332
    12.5.2 程序计数器 332
    12.5.3 在16系列基础上增强的计算goto指令 333
    12.5.4 配置寄存器 334
    12.6 栈 335
    12.6.1 自动栈操作 335
    12.6.2 程序员对栈的访问 336
    12.6.3 快速寄存器栈 336
    12.7 中断 336
    12.7.1 中断结构概览 337
    12.7.2 中断源的启用与优先级划分 337
    12.7.3 总体中断优先级启用 338
    12.7.4 全局启用 338
    12.7.5 中断逻辑的其他方面 338
    12.7.6 中断寄存器 339
    12.7.7 中断的上下文保护 343
    12.8 电源与复位 343
    12.8.1 电源 343
    12.8.2 上电与复位 343
    12.9 振荡源 345
    12.9.1 LP、XT、HS和RC振荡器模式 345
    12.9.2 EC、ECIO和RCIO振荡器模式 345
    12.9.3 HS+PLL振荡器模式 346
    12.9.4 时钟源切换 346
    12.10 18F242编程入门 346
    12.10.1 使用18系列MPLABIDE 347
    12.10.2 斐波那契程序 347
    小结 349
    参考文献 349

    第13章 PIC18FXX2外围设备 350
    13.1 18FXX2外围设备概述 350
    13.2 并行端口 351
    13.2.1 18FXX2的端口A 351
    13.2.2 18FXX2的端口B 352
    13.2.3 18FXX2的端口C 353
    13.2.4 并行从动端口 353
    13.3 定时器 353
    13.3.1 Timer0 353
    13.3.2 Timer1 355
    13.3.3 Timer2 356
    13.3.4 Timer3 356
    13.3.5 看门狗定时器 357
    13.4 比较/捕捉/PWM(CCP)模块 358
    13.4.1 控制寄存器 358
    13.4.2 捕捉模式 359
    13.4.3 比较模式 359
    13.4.4 脉宽调制 360
    13.5 串行端口 360
    13.5.1 SPI模式下的MSSP 360
    13.5.2 I2C模式下的MSSP 361
    13.5.3 USART 361
    13.6 模数转换器(ADC) 361
    13.7 低压检测 361
    13.8 在Derbot-18中应用18系列 363
    13.9 18F2420与扩展指令集 363
    13.9.1 纳瓦技术 364
    13.9.2 扩展指令集 364
    13.9.3 增强型外围设备 365
    小结 365
    参考文献 365

    第14章 C语言入门 366
    14.1 为何选择C语言 366
    14.2 C语言简介 367
    14.2.1 简史 367
    14.2.2
    第一个C程序 367
    14.2.3 程序结构——声明、语句、注释和空格 368
    14.2.4 C语言关键字 370
    14.2.5 C语言函数 370
    14.2.6 数据类型与存储 371
    14.2.7 C运算符 372
    14.2.8 程序流的控制以及while关键字 372
    14.2.9 C预处理器及其伪指令 373
    14.2.10 使用库和标准库 373
    14.3 编译C程序 373
    14.4 MPLABC18编译器 374
    14.4.1 数制规范 375
    14.4.2 算术运算 375
    14.5 C18指南 375
    14.5.1 连接器和连接器脚本 375
    14.5.2 连接头文件和库文件 376
    14.5.3 构建项目 377
    14.5.4 项目文件 378
    14.6 仿真C程序 378
    14.7 第2个C例程——斐波那契程序 380
    14.7.1 程序初步——进一步认识变量声明 381
    14.7.2 do-while结构 381
    14.7.3 标号和goto关键字 381
    14.7.4 仿真斐波那契程序 381
    14.8 MPLABC18库 382
    14.8.1 硬件外围设备函数 382
    14.8.2 软件外围设备库 382
    14.8.3 通用软件库 383
    14.8.4 数学库 384
    14.9 深度阅读 385
    小结 385
    参考文献 385

    第15章 C语言与嵌入式环境 387
    15.1 使C语言适用于嵌入式环境 387
    15.2 位值的控制与分支 387
    15.2.1 控制各个位 389
    15.2.2 if与if-else条件分支结构 389
    15.2.3 设置配置位 390
    15.2.4 仿真并运行例程 390
    15.3 进一步认识函数 391
    15.3.1 函数原型 391
    15.3.2 函数定义 392
    15.3.3 函数调用与数据传递 392
    15.3.4 延时库函数和Delay10KTCYx() 393
    15.4 更多的分支与循环指令 393
    15.4.1 使用break关键字 393
    15.4.2 使用for关键字 394
    15.5 使用定时器与PWM外围设备 395
    15.5.1 使用定时器外围设备 397
    15.5.2 使用PWM 398
    15.5.3 主程序循环 399
    小结 399

    第16章 使用C语言实现数据的采集与使用 400
    16.1 用C语言实现数据处理 400
    16.2 使用18FXX2ADC 400
    16.2.1 寻光程序的结构 404
    16.2.2 使用ADC 405
    16.2.3 if-else的更多应用 406
    16.2.4 寻光程序的仿真 406
    16.3 指针、数组与字符串 408
    16.3.1 指针 408
    16.3.2 数组 408
    16.3.3 对数组使用指针 409
    16.3.4 字符串 409
    16.3.5 指针、数组和字符串的应用例程 409
    16.3.6 对while条件的补充说明 411
    16.3.7 仿真例程 411
    16.4 使用I2C外围设备 413
    16.4.1 I2C例程 413
    16.4.2 使用++和——运算符 415
    16.5 格式化显示数据 416
    16.5.1 例程概览 419
    16.5.2 使用库函数实现数据的格式化 418
    16.5.3 程序分析 418
    小结419

    第17章 深入学习C语言编程和更丰富的C语言编程环境 420
    17.1 深入学习C语言编程和更丰富的C语言编程环境 420
    17.2 插入汇编 421
    17.3 控制存储器分配 422
    17.3.1 存储器分配伪指令pragma 422
    17.3.2 设置配置字 423
    17.4 中断 424
    17.4.1 中断服务程序 424
    17.4.2 定位和识别中断服务程序 424
    17.5 使用溢出中断的例子——闪烁AGV上的LED 425
    17.5.1 使用Timer0 426
    17.5.2 中断的使用和中断服务程序的动作 427
    17.5.3 仿真闪烁LED程序 427
    17.6 变量的存储类型及其应用 429
    17.6.1 存储类型 429
    17.6.2 可见性 430
    17.6.3 生存期 430
    17.6.4 连接 430
    17.6.5 18系列中指定变量的存储器类型 431
    17.6.6 存储类型举例 431
    17.7 启动文件:c018i.c 432
    17.7.1 C18启动文件 432
    17.7.2 c018i.c文件的结构 433
    17.7.3 仿真c018i.c文件 433
    17.8 结构体、联合体和位域 435
    17.9 处理器相关的头文件 436
    17.9.1 SFR定义 436
    17.9.2 头文件中汇编相关的定义 437
    17.10 深入学习——MPLAB连接器和.map文件 437
    17.10.1 连接器的功能 737
    17.10.2 连接器脚本 738
    17.10.3 .map文件 439
    小结 440
    参考文献 441

    第18章 多任务实时操作系统 442
    18.1 由多任务和实时引发的挑战 442
    18.1.1 多任务——任务、优先权、截止时间 443
    18.1.2 “实时”的含义 444
    18.2 通过顺序编程来实现多任务 444
    18.2.1 分析超循环 445
    18.2.2 时间触发和事件触发的任务 445
    18.2.3 使用中断来区分优先级——前台/后台结构 445
    18.2.4 引入“时钟滴答”来同步程序活动 446
    18.2.5 一个通用的“操作系统” 446
    18.2.6 顺序编程实现多任务的限制 448
    18.3 实时操作系统 448
    18.4 调度策略和调度器 448
    18.4.1 循环调度 449
    18.4.2 时间片轮转调度和上下文切换 449
    18.4.3 任务状态 450
    18.4.4 抢占式优先级调度 451
    18.4.5 协作式调度 452
    18.4.6 中断在任务调度中的作用 452
    18.5 任务开发 453
    18.5.1 任务定义 453
    18.5.2 编写任务以及设置任务优先级 453
    18.6 数据和资源保护——信号量 454
    18.7 后面我们将学习什么 454
    小结 455
    参考文献 455

    第19章 SalvoTM实时操作系统 456
    19.1 Salvo实时操作系统概述 456
    19.1.1 Salvo的基本特性 456
    19.1.2 Salvo版本和相关的参考文献 457
    19.2 配置Salvo应用程序 458
    19.2.1 构建Salvo应用程序——构建库 458
    19.2.2 Salvo库 458
    19.2.3 C18和Salvo版本 459
    19.3 编写Salvo程序 460
    19.3.1 初始化和调度 460
    19.3.2 编写Salvo任务 461
    19.4 第一个Salvo例程 461
    19.4.1 程序的总体结构和main函数 463
    19.4.2 任务和调度 464
    19.4.3 创建一个Salvo/C18项目 464
    19.4.4 配置文件的设置 465
    19.4.5 构建Salvo例子 465
    19.4.6 仿真Salvo程序 466
    19.5 在Salvo程序中使用中断、延迟和信号量 467
    19.5.1 一个使用中断驱动的时钟滴答的例程 468
    19.5.2 选择库和配置 470
    19.5.3 使用中断和产生时钟滴答 470
    19.5.4 使用延迟 472
    19.5.5 使用一个二元信号量 472
    19.5.6 程序仿真 474
    19.5.7 运行程序 475
    19.6 使用Salvo消息和增加RTOS复杂度 475
    19.7 一个使用消息的例程 476
    19.7.1 选择库和配置 481
    19.7.2 任务:USnd_Task 481
    19.7.3 任务:Motor_Task 481
    19.7.4 消息的用法 482
    19.7.5 中断的使用和ISR 483
    19.7.6 仿真或者运行程序 485
    19.8 RTOS开销 485
    小结 485
    参考文献 486

    第五部分 网络互连技术
    第20章 互连与网络 488
    20.1 网络互连概述 488
    20.2 红外线连接 490
    20.3 无线电连接 491
    20.3.1 蓝牙 491
    20.3.2 紫蜂 492
    20.3.3 紫峰和PIC微控制器 492
    20.4 控制器局域网和局域互联网 493
    20.4.1 控制器局域网 493
    20.4.2 CAN和PIC微控制器 494
    20.4.3 局域互联网 495
    20.4.4 LIN和PIC微控制器 496
    20.5 嵌入式系统和互联网 497
    20.6 总结 498
    小结 498
    参考文献 499

    附录1 PIC16系列指令集 500
    附录2 电子乒乓球游戏 502
    附录3 DerbotAGV硬件设计细节 507
    附录4 自主导向车的一些基本知识 511
    附录5 PIC18系列指令集(非扩展) 515
    附录6 C语言要点 519
    索引 523
查看详情
系列丛书 / 更多
PIC嵌入式系统开发
精通开关电源设计(第2版)
[美]Sanjaya Maniktala 著;王健强 译
PIC嵌入式系统开发
4G移动通信技术权威指南:LTE与LTE-Advanced
[瑞典]Erik Dahlman 著;堵久辉、缪庆育 译
PIC嵌入式系统开发
电子电气工程师必知必会(第3版)
[美]Darren Ashby 著;尹华杰 译
PIC嵌入式系统开发
运算放大器权威指南(第4版)
[美]Bruce Carter 著;孙宗晓 译
PIC嵌入式系统开发
LTE权威指南
[美]Arunabha Ghosh Jun Zhang 著;李莉 译
PIC嵌入式系统开发
精通开关电源设计
[美]Sanjaya Maniktala 著;王志强 译
PIC嵌入式系统开发
工程电磁兼容:原理、测试、技术工艺及计算机模型(第2版)
陈淑凤 译;柯达里(Kodali)
PIC嵌入式系统开发
WCDMA设计与优化手册
[美]谢瓦利尔 著;杨鸿文 译
PIC嵌入式系统开发
3G演进
[瑞典]达哈曼 著;堵久辉、缪庆育、徐斌 译
PIC嵌入式系统开发
FPGA设计指南:器件、工具和流程
[美]马克斯菲尔德(Maxfiel C.) 著;杜生海、邢闻 译
PIC嵌入式系统开发
开关电源手册(第2版)
比林斯 著;张占松、汪仁皇、谢丽萍 译
PIC嵌入式系统开发
运算放大器权威指南
[美]科特尔、[美]曼西尼 编;姚剑清 译
相关图书 / 更多
PIC嵌入式系统开发
PID参数整定与复杂控制
冯少辉 著
PIC嵌入式系统开发
PID控制器解析设计
[美]vánD.Díaz-Rodríguez 著
PIC嵌入式系统开发
PISA与教育改革
杨文杰
PIC嵌入式系统开发
PIE遥感云服务与实践
朱琳;王宇翔
PIC嵌入式系统开发
PID控制系统设计——使用MATLAB和Simulink仿真与分析
[澳]王六平(Liuping Wang)著 于春梅 王顺利 译
PIC嵌入式系统开发
PIXIV人气画师红木春:梦彩回纪(随书附赠书签1张+贴纸1张)收录了超过30页未公开漫画
[日]红木春 著;陈梦晓 译
PIC嵌入式系统开发
PIC新版8位增强型单片机原理及应用
Microchip大学计划部
PIC嵌入式系统开发
PID智能补偿控制在外骨骼机器人上的应用
[墨西哥]余文 著
PIC嵌入式系统开发
PISA视角下的地理核心素养教学与评测
耿夫相
PIC嵌入式系统开发
PIE遥感图像处理二次开发教程
杨灿坤
PIC嵌入式系统开发
PIE遥感图像处理基础教程
孙永华 著
PIC嵌入式系统开发
PIPE中国实践:定增、可转债、可交债、大宗交易投资
苏文权
您可能感兴趣 / 更多
PIC嵌入式系统开发
心悦读丛书·5分钟疗愈手册
[英]莎拉·克鲁斯比
PIC嵌入式系统开发
人体简史(少儿彩绘版),随书附人体拼贴游戏卡,在趣味中掌握人体构造
[英]比尔·布莱森 著;苗德岁 译
PIC嵌入式系统开发
万事法则:创造一切可能 [英]理查德·泰普勒
[英]理查德·泰普勒
PIC嵌入式系统开发
DK趣味数学百科
[英]卡罗尔·沃德曼
PIC嵌入式系统开发
傲慢与偏见(书虫.牛津英汉双语读物升级版六级)
[英]简·奥斯汀
PIC嵌入式系统开发
甘地
[英]比库·帕雷赫(Bhikhu Parekh)
PIC嵌入式系统开发
牛津妇产科学
[英]萨巴拉特南·阿鲁库马兰 主编
PIC嵌入式系统开发
DK汽车大百科(升级修订版)
[英]DK出版社
PIC嵌入式系统开发
人体维护说明书
[英]格雷厄姆·劳顿 后浪
PIC嵌入式系统开发
全新正版图书 有趣的:货币转转转英国出版社科学普及出版社9787110102237
[英]英国DK出版社
PIC嵌入式系统开发
国富论(精装典藏版上下册套装2册)
[英]亚当·斯密
PIC嵌入式系统开发
肯尼斯·克拉克:生活、艺术和《文明》
[英]詹姆斯·斯托顿 著