嵌入式C编程:PIC单片机和C编程技术与应用
作者 : [美]马克?西格斯蒙德(Mark Siegesmund)著
译者 : 王文峰 袁洪艳 译
丛书名 : 计算机科学丛书
出版日期 : 2017-05-15
ISBN : 978-7-111-56444-7
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 291
开本 : 16
原书名 : Embedded C Programming: Techniques and Applications of C and PIC MCUS
原出版社: Elsevier
属性分类: 教材
包含CD :
绝版 :
图书简介

本书由浅入深、循序渐进地讲述了使用PIC单片机与CCS C编译器的C编程概念,并通过实际的项目,提供了一种适用PIC微控制器C语言编程的有效地做法。通过对实验和训练的理解强调C语言的使用,此外本书还涵盖了PIC单片机及其外围设备。本书每章还包括C代码项目的例子、表格、图表、示意图等,知识点覆盖全面、结构安排紧凑、通俗易懂、实例丰富。

图书前言

微控制器是将微型计算机的主要部分集成到一个芯片上的单芯片微型计算机。上电后,它会运行内部程序存储器上的程序。内部程序存储器可以使用只读存储器(ROM)或者Flash。我们在各种地方都会发现微型计算机的踪影,如家用电器、玩具、汽车和计算机外设(如键盘或鼠标)。从电池充电器到雷达系统,几乎所有的电子设备中都有微型计算机的身影。
PIC微控制器的速度很快,在写作本书时已经达到每秒7000万次指令,且价格低廉,某些型号的单价在1美元以内。由于这些优点,它逐渐成为新的设计方案中最流行的选型,并大量地应用于接口中,如USB、以太网和模拟信号接口。
C语言最初是由AT&T实验室的Brian Kernighan和Dennis Ritchie开发的,称为K&R C,随后在1989年被ANSI标准化,也就是C89。从C语言中衍生出的新特性催生了C++语言。1998年,C++的ISO标准被批准通过。C++有些复杂的语言元素,使其无法应用于微控制器而只能用于PC这样相对宏观的设备。C是微控制器编程中最常用的语言。
C语言在计算机语言中属于高级语言。高级语言使用一种名为编译器的工具将C文本文件转换成机器语言文件。
本书的前半部分着重讲述C语言。如果读者在这之前已经有些编程经验,这会对阅读本书有些帮助,但这些经验并不是必需的。我们会使用C语言元素的正式定义,详细列出微控制器所需要的全部语言特性。本书从第15章开始介绍PIC微控制器及其外围组件,以及如何在C语言中使用这些组件。硬件接口部分相关的基础电子知识有助于读者理解本书,但这些知识对于阅读本书也不是必需的。
在不同的编译器厂商之间或不同的微控制器系列之间会有些不同的C语言扩展。本书中出现的不同的处理器或编译器之间可能会产生兼容性问题,这些部分都做了标记。每一章也会分享一些好的编程实践经验以及相应的文档。为了巩固所学的概念,每章都会提供练习和测验。本书中的例子全部可以在CCS C编译器中编译通过,这也是Microchip PIC系列处理器最常用的编译器。

商标说明:PIC MCU、dsPIC DSC和MPLAB 属于Microchip Technology公司在美国及其他国家的注册商标。

Mark Siegesmund

上架指导

计算机\嵌入式编程

作者简介

[美]马克?西格斯蒙德(Mark Siegesmund)著:
马克·西格斯蒙德(Mark Siegesmund)拥有超过30年的嵌入式系统研发经验,涉足的行业涵盖军事、工业和商业等。他是Custom Computer Service(CCS)公司的创始人,CCS致力于嵌入式软件和硬件领域,产品包括MCU和DSC开发工具,以及一系列嵌入式以太网解决方案。

译者简介

王文峰 袁洪艳 译:暂无简介

译者序

无论是嵌入式还是C语言,都有相当数量的巨著。这些书籍会详细介绍每个知识点,非常适合系统学习,但往往篇幅过长。本书结合工程实践,详细介绍了最常用的知识点,简洁却不简单,足以满足工程中的应用。
本书前半部分着重介绍C语言,对没有C语言基础的读者非常实用。每章之后附带的练习和测验能够帮助读者回顾本章内容,并了解这些内容在工程中是如何应用的。
本书后半部分将重点放到CCS C编译器和PIC单片机上。在介绍PIC单片机的外围组件时,作者没有停留在手册层面,而是分不同的领域,详细介绍这些组件的标准和使用方法,并比较了某些组件在不同PIC系列中的特点。最后两章介绍了在实践中非常实用的内联汇编和调试技术,总结了嵌入式系统中常见的几种调试手段,为理论知识到工程实践的进阶做了很好的铺垫。
作者有着非常丰富的工作经验,语言轻松活泼。译者试图在翻译过程中将这种风格传承下来,但限于文字水平,仅能部分体现,抑或有所疏漏。此外,书中出现的术语可能会有多种翻译,如MCU,根据语境会使用“单片机”或者“微控制器”,请读者灵活理解。

译 者
2017年3月

图书目录

出版者的话
译者序
前言
第1章 C语言概述和程序结构 1
1.1 C源代码 1
1.2 注释 1
1.3 程序结构 1
1.4 C预编译指令 1
1.5 函数 2
1.6 声明 2
1.7 语句和表达式 2
1.8 时间 3
1.9 输入准确度 3
1.10 文本格式 4
1.11 兼容性 4
1.12 小结 4
1.13 练习 4
1.14 测验 6
第2章 常量 8
2.1 位、字节等 8
2.1.1 位 8
2.1.2 半字节 8
2.1.3 字节 8
2.1.4 内存大小 8
2.2 C常量语法 9
2.2.1 二进制 9
2.2.2 十进制 10
2.2.3 有符号整数 10
2.2.4 十六进制 11
2.2.5 八进制 12
2.2.6 浮点数 13
2.2.7 定点数 13
2.2.8 字符 14
2.2.9 字符串 14
2.2.10 真和假 15
2.2.11 常量 15
2.3 三字母词 15
2.4 兼容性 16
2.5 设计文档 16
2.6 小结 17
2.7 练习 17
2.8 测验 17
第3章 预编译指令 20
3.1 标准预编译指令 20
3.1.1 #def ine id text 20
3.1.2 #include 或#include “f ilename” 21
3.1.3 #ifdef、#ifndef、#else、#endif和#undef 21
3.1.4 #if、#else、#elif和#endif 22
3.1.5 #error 22
3.1.6 #nolist和#list 23
3.2 兼容性 23
3.3 非标准编译指示 23
3.3.1 #warning 23
3.3.2 #use delay 23
3.3.3 关于频率 24
3.3.4 #use rs232(options) 24
3.3.5 #fuses options 24
3.3.6 #locate id = address 25
3.3.7 #byte id=x和#word id=x 25
3.3.8 #bit id=x.y 26
3.3.9 #reserve address 26
3.3.10 引导加载程序 26
3.3.11 #rom address={data} 26
3.3.12 #id data 27
3.3.13 其他编译指示 27
3.4 小结 27
3.5 练习 28
3.6 测验 28
第4章 变量和数据类型 31
4.1 数据类型 31
4.1.1 字符 31
4.1.2 整数 31
4.1.3 兼容性 32
4.1.4 整数格式 32
4.1.5 枚举类型 33
4.1.6 定点数 33
4.1.7 浮点数 33
4.1.8 帮助 34
4.1.9 浮点格式 34
4.1.10 空类型 35
4.1.11 类型定义 35
4.2 变量声明 35
4.2.1 标识符 36
4.2.2 变量作用域 36
4.2.3 变量生命周期 37
4.2.4 附加限定词 38
4.3 设计资料 38
4.4 RAM 39
4.5 小结 39
4.6 练习 40
4.7 测验 40
第5章 表达式和运算符 43
5.1 数学运算符 43
5.2 兼容性 43
5.3 运算符优先级 43
5.4 表达式类型和类型转换 44
5.5 关系运算符 45
5.6 位运算符 46
5.7 兼容性 46
5.8 赋值运算符 47
5.9 自增/自减运算符 47
5.10 其他运算符 48
5.11 序列点 49
5.12 表达式示例 49
5.13 小结 50
5.14 练习 50
5.15 测验 50
第6章 语句 53
6.1 语句定义 54
6.1.1 if语句 54
6.1.2 while循环 56
6.1.3 for循环 58
6.1.4 跳转语句 59
6.1.5 switch/case语句 60
6.2 副作用 61
6.3 嵌套、缩进和括号的使用 62
6.4 设计文档 62
6.5 程序复杂度 63
6.6 小结 64
6.7 练习 64
6.8 测验 65
第7章 函数 68
7.1 main()函数 68
7.2 函数定义 69
7.3 函数参数 70
7.4 高级特性 71
7.4.1 兼容性 71
7.4.2 引用参数 71
7.4.3 默认参数 71
7.4.4 重载函数 71
7.5 返回值 72
7.6 内联函数 72
7.7 嵌套函数 73
7.8 递归函数 73
7.9 序列点进阶 73
7.10 结构良好的程序 73
7.11 设计文档 75
7.12 实现细节 75
7.13 小结 76
7.14 练习 76
7.15 测验 76
第8章 数组 80
8.1 数组初始化 80
8.2 常量数组 80
8.3 字符串变量 81
8.4 无下标数组 81
8.5 多维数组 81
8.6 索引范围 82
8.7 数组使用示例 82
8.8 查找表 83
8.9 数组搜索 84
8.10 数组排序 85
8.11 小结 86
8.12 练习 86
8.13 测验 87
第9章 结构体 90
9.1 结构体嵌套和结构体数组 91
9.2 结构体在内存中的存储 91
9.3 位字段 92
9.4 联合体 92
9.5 程序中的结构体示例 93
9.6 小结 94
9.7 练习 94
9.8 测验 95
第10章 内存和指针 98
10.1 内存 98
10.2 取地址运算符 99
10.3 间接运算符 99
10.4 强制指定变量地址 99
10.5 指针类型 100
10.6 指针运算 100
10.7 下标 100
10.8 函数参数 101
10.9 结构体 101
10.10 函数指针 102
10.11 指针的其他用途 102
10.12 错误行为 103
10.13 常见错误 103
10.14 ROM指针 104
10.15 用户定义内存 104
10.16 兼容性 105
10.17 通关之后 105
10.18 小结 105
10.19 练习 106
10.20 测验 106
第11章 内置函数 109
11.1 数学 109
11.2 内存 110
11.3 动态内存 110
11.4 一些更有趣的函数 111
11.5 可变参数列表 112
11.6 文本输入/输出 112
11.7 实现常量 115
11.8 兼容性 116
11.9 位和字节操作 116
11.10 非易失性内存 117
11.11 看门狗 119
11.12 延时 119
11.13 多个时钟频率 120
11.14 更多标准函数 120
11.15 小结 121
11.16 练习 121
11.17 测验 122
第12章 字符串 125
12.1 字符串复制和字符串长度 125
12.2 字符串查找 126
12.3 字符串比较 127
12.4 字符串操作 127
12.5 字符串输入/输出 128
12.6 字符串和数字相互转换 128
12.7 字符操作 129
12.8 统一字符编码 129
12.9 常量字符串管理 130
12.10 小结 130
12.11 练习 131
12.12 测验 131
第13章 函数式宏定义 135
13.1 参数 135
13.2 宏名字 136
13.3 串联运算符 136
13.4 字符串化运算符 136
13.5 可变参数宏 138
13.6 函数式宏定义与内联函数 138
13.7 可读性 138
13.8 高级示例 139
13.9 宏调试 140
13.10 小结 140
13.11 练习 140
13.12 测验 141
第14章 条件编译 144
14.1 基本指令 145
14.2 关系表达式 146
14.3 特殊宏 146
14.4 特殊定义 146
14.5 全局定义 147
14.6 奇怪的错误 147
14.7 条件编译示例 147
14.8 小结 148
14.9 练习 148
14.10 测验 148
第15章 PIC微控制器 152
15.1 PIC架构 152
15.1.1 CPU 153
15.1.2 栈 153
15.1.3 工作寄存器 153
15.1.4 特殊功能寄存器 153
15.1.5 程序存储器 154
15.1.6 指令 154
15.1.7 时钟 154
15.1.8 复位 155
15.1.9 睡眠 155
15.1.10 中断 155
15.1.11 配置位 156
15.1.12 外围组件 156
15.2 最小系统 157
15.3 设备编程 158
15.4 hex文件 159
15.5 上电过程 159
15.6 时钟配置 160
15.7 调试 160
15.8 引导加载 160
15.9 小结 161
15.10 练习 161
15.11 测验 161
第16章 离散输入和输出 164
16.1 输入电压 164
16.2 驱动电流 165
16.3 驱动更大的电流 166
16.4 集电极开路输出 166
16.5 方向 166
16.6 按钮输入 167
16.7 上拉电阻 167
16.8 消抖 168
16.9 滤波 168
16.10 内存映射端口 169
16.11 小结 170
16.12 练习 170
16.13 测验 171
第17章 中断 174
17.1 简单中断示例 174
17.2 时间都去哪儿了 175
17.3 再议消抖 175
17.4 中断发生的时刻 176
17.5 为什么需要中断 177
17.6 中断详解 178
17.6.1 中断标志位(IF) 178
17.6.2 中断使能标志位(IE) 178
17.6.3 全局中断使能标志位(GIE) 178
17.6.4 中断处理 178
17.7 正确处理中断 179
17.8 多个中断同时发生 179
17.8.1 12位字长 179
17.8.2 14位字长 180
17.8.3 16位字长 180
17.8.4 24位字长 180
17.9 延迟 181
17.10 重入 182
17.11 兼容性 182
17.12 小结 182
17.13 练习 182
17.14 测验 183
第18章 定时器/计数器 186
18.1 定时器组件 186
18.1.1 计数器核心 186
18.1.2 计数器周期 186
18.1.3 后分频器 187
18.1.4 预分频器 187
18.1.5 门 187
18.1.6 多路转换器 187
18.2 PIC特性 187
18.3 C代码 188
18.4 用定时器实现延迟 189
18.5 精度循环 189
18.6 中断 190
18.6.1 以特定频率产生中断 190
18.6.2 在特定时间产生中断 191
18.7 虚拟定时器 192
18.8 小结 193
18.9 练习 193
18.10 测验 194
第19章 高级定时器 197
19.1 PWM 197
19.2 使用PWM库 199
19.3 捕捉 199
19.4 对比 201
19.5 兼容性 201
19.6 小结 202
19.7 练习 202
19.8 测验 203
第20章 模拟技术 205
20.1 数/模转换 205
20.2 模/数转换 206
20.2.1 电压高于5V 208
20.2.2 过滤 208
20.2.3 波形分析 210
20.2.4 混叠现象 211
20.2.5 在睡眠时工作 211
20.2.6 参考电压 212
20.3 比较器 213
20.4 电压检测 214
20.5 兼容性 214
20.6 小结 214
20.7 练习 215
20.8 测验 216
第21章 内部串行总线 218
21.1 串行外围接口 218
21.1.1 SPI模式 220
21.1.2 硬件SPI 220
21.1.3  多点SPI 220
21.1.4 减少连线 220
21.1.5 噪声 221
21.1.6 帧信号 221
21.1.7 PIC从设备 221
21.2 I2C 222
21.2.1 多个主设备 224
21.2.2 特殊地址 225
21.2.3 10位地址 225
21.2.4 I2C从设备 225
21.2.5 SMBus 226
21.3 小结 226
21.4 练习 227
21.5 测验 227
第22章 外部串行总线 230
22.1 RS-232 230
22.2 源代码 231
22.3 UART 232
22.4 输入数据中断 233
22.5 输出数据中断 235
22.6 调制解调器控制信号 236
22.7 硬件流控制 236
22.8 软件流控制 236
22.9 协议 237
22.10 RS-232的未来 238
22.11 RS-422 238
22.12 RS-485 238
22.13 文档 239
22.14 小结 239
20.15 练习 240
22.16 测验 240
第23章 多任务 243
23.1 抢占式调度 243
23.2 调度器调度 243
23.3 确定性调度 244
23.4 信号量 245
23.5 消息传递 246
23.6 await( ) 246
23.7 任务管理 246
23.8 小结 247
23.9 练习 247
23.10 测验 247
第24章 内联汇编 250
24.1 C代码中的汇编代码 250
24.2 内联汇编代码 250
24.3 PIC16/PIC18数据传送指令 251
24.4 在汇编代码中访问C变量 251
24.5 PIC16/PIC18数学指令 252
24.6 PIC16/PIC18位操作类指令 253
24.7 PIC16/PIC18控制操作类指令 253
24.8 PIC16/PIC18立即数操作指令 253
24.9 编译器对汇编代码的修改 253
24.10 访问SFR 254
24.11 关于FSR 254
24.12 哪些不能做 255
24.13 优化汇编代码 255
24.14 PIC24指令 256
24.15 dsPIC指令 257
24.16 小结 257
24.17 练习 257
24.18 测验 258
第25章 调试 260
25.1 概述 260
25.2 ICSP 260
25.3  ICSP插座 261
25.4 断点 262
25.5 查看内存 263
25.6 单步 264
25.7 增强调试 264
25.8 监控 265
25.9 数据流 265
25.10 实时性问题 266
25.11 使用示波器 266
25.12 诊断接口 268
25.13 记录/回放 268
25.14 性能分析工具 268
25.15 代码性能分析 269
25.16 设计验证 269
25.17 小结 271
25.18 练习 271
25.19 测验 273
附录A 275
附录B 276
附录C 277
参考资料 280

教学资源推荐
作者: [美] 查尔斯·K. 亚历山大(Charles K. Alexander) 马修·N. O. 萨迪库(Matthew N. O. Sadiku)著
作者: [美]穆哈辛·本奥斯曼 (Mouhacine Benosman) 著
作者: 黄丽亚 杨恒新
作者: 刘传玺 王以忠 袁照平 主编  王进野 程丽平 胡新颜 朱蕾 副主编           郝振刚 主审
参考读物推荐
作者: [美]斯图尔特·萨瑟兰(Stuart Sutherland) 当·米尔斯(Don Mills) 著
作者: 李潇海 著
作者: 高显生 编著
作者: [马]阿珠纳·马尔祖基(Arjuna Marzuki) 著