《匠人手记:一个单片机工作者的实践与思考》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:张俊编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2008
  • ISBN:9787811242973
  • 页数:367 页
图书介绍:本书是作者在从事单片机开发与应用的过程中,将实际经验教训和心得感悟加以总结,整理而成的工作手记。每篇手记论述一个专题,独立成篇、同时又相互关联。全书内容包含入门基础、经验技巧、设计案例、网络杂文等四个部分。书中将网络中自由的语言艺术与现实中严谨的科学技术相结合。全书的风格以轻松诙谐的笔调为主。作者力图摆脱传统技术类书籍的说教式的表述形式,让读者耳目一新,在轻松的交流过程中获得共鸣。

第一部分 入门基础 3

手记1 单片机入门知识与基本概念 3

手记2 单片机的汇编指令系统 22

手记3 编程思路漫谈 40

手记4 程序设计阶段漫谈 54

手记5 MC68HC908应用札记 58

手记6 天梯——MSP430学习札记 73

手记7 EMC单片机指令应用的误区与技巧 85

手记8 EMC单片机的伪指令与宏的应用 89

第二部分 经验技巧 103

手记9 10种软件滤波方法 103

手记10 一阶滤波算法之深入研究 121

手记11 分段线性插值算法之深入研究 137

手记12 移位法在乘除运算及数制转换中的妙用 142

手记13 按键漫谈 155

手记14 单键多击的检测程序 166

手记15 串口七日之创世纪篇 171

手记16 用普通I/O口实现单线单工通信 185

手记17 用普通I/O口检测模拟值 189

手记18 功率调节与过零检测 203

第三部分 设计案例 211

手记19 梦幻时钟摇摇棒大揭秘 211

手记20 汽车组合仪表开发手记 234

手记21 空调遥控器开发手记 284

手记22 手机锂电池充电器设计白皮书 303

第四部分 网络杂文 313

手记23 《大话篇》系列 313

手记24 《匠人夜话》系列 322

手记25 匠人的论坛文集 333

手记26 匠人的博客文集 343

手记27 21ICBBS人物志 350

手记28 《网络心路》之匠人版(连载) 358

第一部分 入门基础 3

手记1 单片机入门知识与基本概念 3

一、前言 3

二、单片机系统 3

三、存储器 4

四、I/O口 5

五、堆栈 6

六、定时/计数器 8

七、中断 9

八、复位 11

九、看门狗 14

十、时钟电路和振荡源 16

十一、脉宽调制(PWM) 17

十二、模拟/数字转换(ADC) 18

十三、串行通信 20

十四、后记 21

手记2 单片机的汇编指令系统 22

一、前言 22

二、汇编语言的前世今生 22

三、汇编指令的有关概念 23

四、汇编指令的寻址方式 24

五、汇编指令的分类 26

六、指令分解图的介绍与应用 28

七、后记 29

手记3 编程思路漫谈 40

一、前言 40

二、程序的基本结构 40

三、模块化的程序结构 41

四、模块的事件驱动机制 41

五、顺序调度机制与优先调度机制 42

六、中断与前/后台的程序结构 43

七、时间片与分时调度机制 44

八、多进程并行运行机制 46

九、多工序程序结构 46

十、基于状态机思路的程序调度机制 49

十一、更复杂的状态结构 52

十二、后记 53

手记4 程序设计阶段漫谈 54

一、前言 54

二、方案制定阶段 54

三、程序设计阶段 55

四、代码编写阶段 55

五、程序调试阶段 56

六、程序维护阶段 56

手记5 MC68HC908应用札记 58

一、前言 58

二、C语言中嵌入汇编的7种方式 58

三、C语言中数制的表示方式 59

四、循环体的3种写法 59

五、关于复位及中断的入口地址 60

六、对被调函数的说明(声明) 60

七、对中文的支持 60

八、中断定义有两种方法 61

九、数据类型 62

十、定义寄存器方法 62

十一、位的定义与使用 62

十二、数据结构 65

十三、工程文件系统介绍 65

十四、I/O口使用注意事项 65

十五、关于强制类型转换 66

十六、中断的使用方法 66

十七、定时器中断频率的计算 67

十八、如何产生LST文件 68

十九、工程文件的组织方法 69

二十、mon08的仿真模式的断点 70

二十一、关于mon08调试的频率 71

二十二、关于运算中需要注意的问题 71

二十三、PLL功能的启动方式 71

二十四、后记 72

手记6 天梯——MSP430学习札记 73

一、缘起 73

二、关于EZ430-F2013仿真器 74

三、MSP430结构与特点 74

四、快速开始——玩转EZ430-F2013的7个步骤 75

五、EZ430-F2013仿真器的解剖及改装 79

六、EZ430-F2013调试备忘 81

七、后记 84

手记7 EMC单片机指令应用的误区与技巧 85

一、前言 85

二、减法指令的误区 85

三、查表(散转)指令的误区 86

四、关于“MOV R,R”指令 87

手记8 EMC单片机的伪指令与宏的应用 89

一、前言 89

二、伪指令与宏的优点 89

三、位操作类宏 89

四、条件分支结构类宏 91

五、中断压栈与出栈类宏 95

六、散转结构与表格的防溢保护方法 96

七、跨页调用与跳转类宏 96

八、显示段码表的的预定义方法 98

九、后记 100

第二部分 经验技巧 103

手记9 10种软件滤波方法 103

一、前言 103

二、限幅滤波法 103

三、中位值滤波法 105

四、算术平均滤波法 107

五、递推平均滤波法 108

六、中位值平均滤波法 110

七、递推中位值平均滤波法 112

八、限幅平均滤波法 113

九、一阶滞后滤波法 115

十、加权递推平均滤波法 116

十一、消抖滤波法 117

十二、后记 119

手记10 一阶滤波算法之深入研究 121

一、前言 121

二、原理与公式 121

三、源程序 122

四、滤波效果分析 123

五、不足与优化 125

六、实例应用 128

手记11 分段线性插值算法之深入研究 137

一、前言 137

二、分段线性插值法的原理 137

三、分段线性插值法的公式 138

四、分段线性插值法的应用步骤 138

五、分段线性插值法的程序 139

手记12 移位法在乘除运算及数制转换中的妙用 142

一、前言 142

二、巧用移位法进行多字节乘除计算 143

三、巧用移位法进行数制转换 148

四、后记 153

手记13 按键漫谈 155

一、前言 155

二、按键时序分析 155

三、常见按键类型分析 156

四、常见按键类型的判别方法 157

五、多种按键类型的处理流程 160

六、后记 162

手记14 单键多击的检测程序 166

一、前言 166

二、设计思路 166

三、流程图 168

四、源程序 169

手记15 串口七日之创世纪篇 171

一、前言 171

二、第一日 171

三、第二日 174

四、第三日 176

五、第四日 178

六、第五日 180

七、第六日 181

八、第七日 184

手记16 用普通I/O口实现单线单工通信 185

一、前言 185

二、单线单工通信协议 185

三、关于波特率自适应的处理 185

四、从机通信接收程序的流程图及说明 186

五、后记 188

手记17 用普通I/O口检测模拟值 189

一、前言 189

二、电阻类模拟信号的检测(温度的检测) 189

三、电压类模拟信号的检测 196

四、电容类模拟信号的检测(电容式触摸键的检测) 198

五、后记 202

手记18 功率调节与过零检测 203

一、前言 203

二、移相触发 203

三、过零触发 204

四、过零信号检测 205

第三部分 设计案例 211

手记19 梦幻时钟摇摇棒大揭秘 211

一、前言 211

二、硬件电路的制作 211

三、字库的制作 213

四、按键功能说明 215

五、源程序 216

手记20 汽车组合仪表开发手记 234

一、前言 234

二、项目概述 234

三、仪表电机原理与控制 235

四、程序概述 241

五、计程处理 248

六、车速处理 251

七、转速处理 255

八、档位处理 256

九、模拟信号的A/D转化处理 257

十、按键处理 257

十一、LCD显示处理 262

十二、故障报警与指示 274

十三、点火器开关控制与低功耗处理 282

十四、其他程序模块 283

十五、后记 283

手记21 空调遥控器开发手记 284

一、前言 284

二、项目概述 284

三、按键处理 287

四、跳线检测 292

五、红外发码控制 293

六、LCD显示处理 301

七、空调遥控器原理图 301

手记22 手机锂电池充电器设计白皮书 303

一、前言 303

二、锂(Li-Ion)电池特性 303

三、充电器的软件控制流程 305

四、充电器的硬件电路 308

五、后记 310

第四部分 网络杂文 313

手记23 《大话篇》系列 313

一、前言 313

二、大话篇之一 313

三、大话篇之二 314

四、大话篇之三 315

五、大话篇之四 315

六、大话篇之五 316

七、大话篇之六 317

八、大话篇之七 317

九、大话篇之八 318

十、大话篇之九 318

十一、大话篇之十 319

十二、大话篇之十一 319

十三、大话篇之十二——《六一特别节目》 319

手记24 《匠人夜话》系列 322

一、吃软?还是吃硬? 322

二、你为谁打工? 322

三、当机会来临时,你准备好了吗? 323

四、鸡头?还是凤尾? 323

五、领先同伴比超越自己更重要! 324

六、不怕菜鸟,就怕懒虫! 324

七、机会在于把握 325

八、35岁危机,逃无可逃! 326

九、别拿名词来唬人! 326

十、新手三忌! 327

十一、我们是Byte的奴隶? 327

十二、如何提高工程部团队战斗力 328

十三、枪手的新行规! 329

十四、新技术催生的“廉价”时代! 330

十五、有心栽花,无意插柳 331

十六、如何评估开发费 331

十七、被人惦记的感觉真好 332

手记25 匠人的论坛文集 333

一、程序人生 333

二、魔鬼定律 335

三、“高手”的阐释 336

四、四种懒人——关于C与ASM之争 337

五、旧电脑的用途60招 337

六、公道在人心 341

七、七年之痒——写在升任21ICBBS站长之际 342

手记26 匠人的博客文集 343

一、匠人语录 343

二、俺只是一个网络上的放羊娃 344

三、岁月如歌——记《匠人的百宝箱》开通一周年 345

四、网络化生存之匠人版 346

五、《流星花园》之匠人版 348

六、《匠人的百宝箱》博客名趣事 349

七、大话篇新传——匠人是如何变成21ICBLOG系统管理员的 349

手记27 21ICBBS人物志 350

一、前言 350

二、hotpower篇 350

三、雁舞白沙篇 351

四、柔月篇 351

五、highway篇 352

六、CCCP篇 352

七、老王篇 353

八、电子小虫篇 353

九、刀客篇 354

十、万寿路篇 354

十一、碧水长天篇 355

十二、忘情天书篇 355

十三、张明峰篇 356

十四、平凡篇 356

十五、zenyin篇 357

十六、附记:匠人自传篇 357

手记28 《网络心路》之匠人版(连载) 358

一、缘起 358

二、接触 359

三、包装 359

四、练级 360

五、升级 361

六、放火 361

七、交友 362

八、博起 363

九、自娱 363

十、网赚 364

十一、出走 364

十二、未来 365

后记 366

参考文献 367

图1.1 单片机系统方框图 4

图1.2 单片机内部功能扩展示意图 4

图1.3 汉诺塔示意图 7

图1.4 压栈示意图 8

图1.5 出栈示意图 8

图1.6 中断嵌套处理示意图 10

图1.7 MCS-51芯片复位信号 11

图1.8 MCS常见复位电路(高电平有效) 12

图1.9 简易复位电路(低电平有效) 13

图1.10 防电源抖动复位电路(低电平有效) 13

图1.11 残余电压保护复位电路(低电平有效) 13

图1.12 施密特特性复位电路(低电平有效) 14

图1.13 掉电预警复位电路(低电平有效) 14

图1.14 看门狗示意图 14

图1.15 基于CD4060芯片的看门狗电路 15

图1.16 MAX813L方框图 16

图1.17 晶振电路 17

图2.1 MCS-51系统MOV指令图解 26

图2.2 MCS-51系统加减法指令图解 27

图2.3 MCS-51系统双操作数逻辑运算指令图解 27

图2.4 MCS-51系统数值比较转移指令图解 28

图2.5 MCS-51系统位操作指令图解 28

图2.6 PIC低级单片机指令分解图 30

图2.7 PIC中级单片机指令分解图 31

图2.8 PIC高级单片机指令分解图 32

图2.9 EMC 8-bit单片机指令分解图 33

图2.10 HOLTEK 8-bit单片机指令分解图 34

图2.11 SONIX 8-bit单片机指令分解图 35

图2.12 SICMA 8-bit单片机指令分解图 36

图2.13 JAZTEK 8-bit单片机指令分解图 37

图2.14 MCS-51系列单片机指令分解图 38

图2.15 MC68HC08系列单片机指令分解图 39

图3.1 基本程序结构 41

图3.2 模块化程序结构 42

图3.3 功能模块的程序结构 42

图3.4 顺序调度机制 43

图3.5 优先调度机制 43

图3.6 前/后台程序结构 44

图3.7 主程序中采取分时调度结构 45

图3.8 子程序中采取分时调度结构 45

图3.9 进程的分阶段运行结构 47

图3.10 多进程并行运行示意图 47

图3.11 单个工序的状态程序结构图 48

图3.12 工序迁移图 48

图3.13 一键多义按键执行程序结构图 50

图3.14 状态迁移图 51

图3.15 线性状态结构 52

图3.16 树状多级状态结构 52

图3.17 多维状态结构 53

图5.1 字体和制表符设置 61

图5.2 P&E ICD设置菜单 68

图5.3 P&E ICD设置窗口 69

图5.4 Output设置 70

图6.1 EZ430-F2013仿真器示意图 74

图6.2 1AR开发环境截图 75

图6.3 新建项目向导 76

图6.4 选择芯片型号 77

图6.5 选择调试设备 78

图6.6 选择设备连接类型 78

图6.7 编译/除错按钮 79

图6.8 运行/停止按钮 79

图6.9 EZ430-F2013仿真器原理图 80

图6.10 EZ430-F2013仿真器改装示意图 80

图6.11 选项菜单 81

图6.12 编辑选项 82

图6.13 设置自动对齐规则 82

图6.14 如何设置自动生成LST文件 83

图8.1 条件分支结构类宏的速记方法 91

图9.1 限幅滤波效果图 104

图9.2 递推平均滤波效果图 108

图9.3 递推中位值平均滤波效果图 112

图10.1 一阶滤波流程图 122

图10.2 一阶滤波效果图A 124

图10.3 一阶滤波效果图B 124

图10.4 一阶滤波效果图C 125

图10.5 一阶滤波效果图D 127

图10.6 调整一阶滤波系数流程图 128

图10.7 0 kg时的采样数据示意图 129

图10.8 15 kg重量加载瞬间的采样数据示意图 129

图10.9 计价秤的结构图 130

图10.10 弹簧的阻尼振荡效果图 130

图10.11 15 kg加载时采样16次递推中位值平均滤波效果图 130

图10.12 0 kg时采样16次递推中位值平均滤波效果图 131

图10.13 15 kg加载时一阶滤波效果图 131

图10.14 15 kg加载时采样8次递推中位值平均滤波效果图 132

图10.15 15 kg加载时8次递推平均滤波+一阶滤波效果图 132

图10.16 15 kg加载时一阶滤波与16次递推平均滤波效果对比图 133

图10.17 0 kg时一阶滤波与16次递推平均滤波效果对比图 133

图10.18 15 kg加载时限幅滤波效果图 134

图10.19 15 kg加载时限幅滤波+一阶滤波效果图 135

图10.20 15 kg加载时一阶滤波与16次递推平均滤波效果对比图 135

图10.21 0 kg时一阶滤波与16次递推平均滤波效果对比图 136

图11.1 分段线性插值法在温度检测中的应用 138

图11.2 分段线性插值法示意图 138

图11.3 分段线性插值法流程图 139

图12.1 位移指令操作示意图 142

图12.2 十进制的乘法竖式计算方法 144

图12.3 二进制的乘法竖式计算方法 144

图12.4 多字节二进制乘法计算流程图 144

图12.5 十进制的除法竖式计算方法 146

图12.6 二进制的除法竖式计算方法 146

图12.7 多字节二进制除法计算流程图 146

图12.8 十进制整数转二进制方法 149

图12.9 十进制小数转二进制方法 149

图12.10 二进制转十进制压缩BCD码流程图 152

图12.11 十进制压缩BCD码转二进制流程图 153

图13.1 按键时序图 156

图13.2 短击/长击的区别示意图 158

图13.3 单击/连击的识别示意图 158

图13.4 单击/双击的区别示意图 159

图13.5 复合键(同击)的识别示意图 160

图13.6 按键释放(无击)的识别示意图 160

图13.7 简单的按键检测处理流程图 162

图13.8 可识别单击/连击、无击等按键类型的按键检测处理流程图 163

图13.9 可识别单击/连击、短击/长击、无击等按键类型的按键检测处理流程图 164

图13.10 可识别多种按键类型的按键检测处理流程图 165

图14.1 单键多击检测流程图 168

图15.1 MAX232芯片引脚示意图 174

图15.2 RS232—TTL转接电路图 175

图15.3 自制RS232—TTL转接板 175

图15.4 COMDEBUG软件界面 180

图15.5 汽车仪表串行通信平台软件界面 183

图16.1 硬件连接图 185

图16.2 通信波形图 186

图16.3 改进后的通信波形图 186

图16.4 通信流程图 187

图17.1 电容充电曲线 190

图17.2 温度检测电路图 190

图17.3 放电回路 192

图17.4 参考电阻充电回路 192

图17.5 温度电阻充电回路 192

图17.6 电容充/放电波形 193

图17.7 阻值—比率—温度分度图 193

图17.8 温度检测程序 194

图17.9 电容充电计时子程序 195

图17.10 用比较器实现ADC功能的电路 196

图17.11 PWM占空值调节流程图 196

图17.12 软件积分测电压流程图 197

图17.13 利用单片机内置比较器实现ADC功能的电路 197

图17.14 利用单片机内置比较器实现ADC功能的改进电路 198

图17.15 利用单片机I/O口取代比较器实现ADC功能的电路 198

图17.16 电容式触摸键示意图 198

图17.17 电容式触摸键的检测电路 199

图17.18 充/放电方式检测波形 199

图17.19 电容式触摸键的检测流程 200

图17.20 一款4键电容式触摸键DEMO板实际操作效果图 201

图18.1 移相触发控制波形图 204

图18.2 过零触发控制波形图 205

图18.3 过零检测电路A 206

图18.4 过零检测电路B 206

图18.5 过零检测电路C 206

图19.1 摇摇棒原理图 212

图19.2 摇摇棒整体外形 212

图19.3 摇摇棒静止状态 212

图19.4 摇摇棒挥动时的显示效果 212

图19.5 惯性开关示意图 213

图19.6 惯性开关实物解析图 213

图19.7 Excel字码表 213

图19.8 条件格式的设置 214

图19.9 部分字符效果 214

图19.10 摇摇棒按键功能图 215

图20.1 汽车组合仪表系统框图 235

图20.2 电机的结构示意图 236

图20.3 电机的驱动波形图 237

图20.4 分步驱动模式脉冲序列 237

图20.5 脉冲细分 238

图20.6 微步驱动模式脉冲序列 239

图20.7 电机驱动电路 241

图20.8 主程序流程图 243

图20.9 1 ms定时处理程序流程图 244

图20.10 10 ms定时处理程序流程图 244

图20.11 100 ms定时处理程序流程图 244

图20.12 500 ms定时处理程序流程图 244

图20.13 车速脉冲信号调制电路 249

图20.14 总计值处理程序流程图 249

图20.15 从E2PROM中读总计值程序流程图 250

图20.16 向E2PROM中写总计值程序流程图 250

图20.17 车速指示线性插值法图 252

图20.18 车速计算程序流程图 253

图20.19 车速电机速度(指针微步移动时间)控制程序流程图 254

图20.20 车速电机移动一微步程序流程图 255

图20.21 转速脉冲信号调制电路 255

图20.22 LCD显示示意图 262

图20.23 不同档位的显示段码示意图 262

图20.24 LCD驱动波形图 263

图20.25 显示初始化流程图 265

图20.26 显示流程图 266

图20.27 待机处理程序流程图 282

图21.1 空调遥控器实物图 285

图21.2 空调遥控器系统框图 285

图21.3 空调遥控器程序框图 285

图21.4 空调遥控器CPU工作模式迁移示意图 286

图21.5 空调遥控器按键检测原理图 287

图21.6 空调遥控器按键处理流程图 288

图21.7 空调遥控器跳线电路 293

图21.8 空调遥控器码制有关参数 294

图21.9 一串完整的码波形 294

图21.10 起始码波形 294

图21.11 逻辑“1”波形 295

图21.12 逻辑“0”波形 295

图21.13 IR功能定时器资源分配示意图 295

图21.14 空调遥控器红外发码电路 297

图21.15 空调遥控器红外发码流程图 297

图21.16 空调遥控器显示处理流程图 301

图21.17 空调遥控器原理图 302

图22.1 锂电池充电曲线图 305

图22.2 锂电池充电工序(状态)迁移图 305

图22.3 锂电池充电器原理图(充电控制部分) 309

图28.1 程序匠人的早期签名 360

图28.2 《匠人的百宝箱》LOGO 360

表3.1 状态迁移表 51

表5.1 CW3.1支持的数据类型 62

表6.1 MSP430的工作模式 84

表12.1 四则运算模块寄存器定义 143

表12.2 数制转换模块寄存器定义 150

表12.3 I/O口状态分析 154

表13.1 按键类型说明 157

表13.2 按键检测程序寄存器定义 161

表13.3 按键检测程序标志位定义 161

表13.4 按键检测程序常量参数定义 161

表14.1 按键次数与最多能识别的按键组合方式对照表 167

表14.2 键值表 167

表15.1 汽车仪表串行通信协议 172

表17.1 充电计时器分配表 195

表19.1 摇摇棒状态迁移表 216

表20.1 电机的电气特性 240

表20.2 项目文件功能介绍 242

表20.3 中断资源分配表 247

表20.4 车速与电机指针目标步数对应表 252

表20.5 电机的单步移动时间与电机转速范围 253

表20.6 档位信号占空表 256

表20.7 ADC通道分配表 257

表20.8 按键功能真值表 258

表20.9 LCD参数表 263

表20.10 显示真值表 264

表20.11 声光报警功能一览表 274

表21.1 空调操作模式表 288

表21.2 时间设置模式表 288

表21.3 定时模式表 289

表21.4 风速模式表 289

表21.5 纵摆模式表 289

表21.6 横摆模式表 289

表21.7 空调遥控器按键真值表 290

表21.8 空调遥控器跳线意义表 293

表21.9 IR功能定时器资源分配表 295

表21.10 遥控码数据真值表 296

表22.1 预充状态下PWM占空调节规则 306

表22.2 快充状态下PWM占空调节规则 306

表22.3 快充状态下充满判断规则 307

表22.4 快充状态下充电结束判断规则 307

表22.5 故障类型及判断规则 307

表22.6 指示灯状态 309

表22.7 温度检测口的电压判定规则 310