图书目录

引言 1

第1章  色彩斑斓的单片机世界 6

1.1  单片机世界 6

1.2  开发单片机应用不再需要仿真器 8

1.3  Motorola(Freescale)单片机 8

1.4  MC68HC08 系列单片机 10

1.4.1  Nitron 系列单片机 10

1.4.2  面向低端产品的8位单片机 10

1.4.3  通用型8位单片机 10

1.4.4  带LCD(LED)驱动接口的8位单片机 11

1.4.5  用于电动机控制的8位单片机 12

1.4.6  带CAN总线接口的8位单片机 12

1.4.7  支持LIN总线的8位单片机 12

1.4.8  带USB接口的8位单片机 13

1.4.9  用于彩色液晶监视器控制的8位单片机 13

1.4.10  带无线通信功能的8位单片机 14

1.5  MCS08系列8位单片机 14

1.6  MC68HC11系列单片机 14

1.7  MC68HC12系列单片机 17

1.8  MC9S12系列单片机 18

1.8.1  MC9S12A系列和B系列16位单片机 18

1.8.2  带CAN总线的MC9S12D系列16位单片机 19

1.8.3  MC9S12DP256单片机 20

1.8.4  带液晶驱动的16位单片机系列 22

1.8.5  低供电电压的16位单片机 23

1.8.6  带USB接口的16位单片机 24

1.8.7  带以太网接口的16位单片机 24

1.9  MC68HC16系列单片机 24

1.10  Motorola (Freescale) 的32位单片机 26

1.10.1  以68K、CPU32为CPU的32位单片机 26

1.10.2  以ColdFire为CPU的32位单片机 27

1.10.3  用于控制的以PowerPC为CPU的32位单片机 28

1.10.4  用于通信的以PowerPC为CPU的32位单片机 29

1.10.5  Motorola (Freescale) 的ARM系列32位单片机 30

1.11  Motorola (Freescale) 的DSP型单片机 31

1.11.1  普通16位DSP型单片机 31

1.11.2  使用增强型内核DSP56800E的16位DSP 型单片机 35

1.11.3  StarCore 系列DSP 型16位单片机 36

1.11.4  24位、32位的DSP型单片机 36

第2章  单片机基本系统的硬件设计 39

2.1  16位单片机 39

2.1.1  MC9S12系列单片机 40

2.1.2  MC9S12DP256单片机 40

2.2  初识单片机最小硬件系统 43

2.2.1  16位单片机MC9S12的最小系统 45

2.2.2  8位单片机MC68HC08GP32的最小系统 45

2.2.3  32位单片机MC68332的最小系统 46

2.2.4  监控程序  47

2.2.5  体验机器码 50

2.3  异步串行通信 52

2.3.1  串行通信协议RS-232标准 52

2.3.2  ASCII 码 53

2.3.3  串行数据格式 54

2.3.4  RS-232-C电缆的连接方法 55

2.3.5  通信速率 55

2.4  MC9S12单片机系统的硬件设计 56

2.4.1  时钟电路 56

2.4.2  串行口的RS-232驱动电路 59

2.4.3  电源电路 59

2.4.4  复位电路 60

2.4.5  BDM 接口 60

2.4.6  单片机并行口及驱动能力 60

2.4.7  调试显示 61

2.5  运行模式 61

2.5.1  单片运行模式 61

2.5.2  扩展运行模式 61

2.6  BDM调试器及硬件设计 62

2.6.1  BDM调试器 62

2.6.2  BDM调试器硬件设计 63

第3章  用汇编语言编程 65

3.1  CPU 的内部寄存器结构 65

3.1.1  16位单片机HC11/12 的CPU 内部结构 65

3.1.2  8位单片机HC08 的CPU 内部结构 66

3.1.3  32位单片机68K/ColdFire的CPU 内部结构 67

3.2  内存空间分配 68

3.2.1  基本内存空间分配 68

3.2.2  内存空间的扩展 69

3.3  汇编指令集 71

3.4  指令按功能分类 71

3.4.1  数据传送指令 72

3.4.2  算术与逻辑运算指令 73

3.4.3  程序控制指令 77

3.5  CPU12的模糊逻辑指令 79

3.5.1  模糊化指令 79

3.5.2  模糊推理指令REV和REVW  80

3.5.3  反模糊化指令WAV  80

3.6  指令按寻址方式分类 81

3.6.1  隐含寻址  81

3.6.2  立即数寻址 81

3.6.3  直接寻址 81

3.6.4  扩展寻址 82

3.6.5  变址寻址 82

3.6.6  带自动加、减5位偏移量的间接寻址 83

3.6.7  相对寻址 83

3.7  汇编指令表 83

3.8  指令的机器码组织 85

3.9  用汇编语言编写程序 86

3.9.1  汇编程序的格式 86

3.9.2  汇编管理指令 86

3.10  汇编语言程序设计举例 88

3.10.1  检查SCI输入端口状态 88

3.10.2  输入一个字符 88

3.10.3  输出一个字符 89

3.10.4  输出空格 89

3.10.5  显示字符串 90

3.10.6  输入并显示字符 90

3.11  码的转换类子程序 90

3.11.1  输入一个十六进制数 90

3.11.2  输入一个字节 91

3.11.3  输入两个字节的十六进制数 91

3.11.4  输出两个字节的十六进制数 92

3.12  汇编语言编程技巧 92

3.13  用汇编语言写BDM调试命令 94

3.13.1  后台调试模式 94

3.13.2  进入BDM模式 95

3.13.3  BDM通信协议 96

3.13.4  BDM命令 98

3.13.5  BDM的ROM  99

第4章  建立单片机运行环境和写监控程序 100

4.1  建立单片机运行环境 100

4.2  堆栈指针初始化 100

4.3  时钟初始化 101

4.3.1  找出与时钟相关的寄存器 101

4.3.2  初始化时钟系统 104

4.4  串行口初始化 105

4.4.1  与串行口有关的寄存器 105

4.4.2  初始化串行口 108

4.5  监控程序  109

4.6  人机对话 111

4.7  命令字与跳转表 114

4.8  建立CPU在内存中的固定映像 115

4.8.1  CPU响应中断后的栈结构 115

4.8.2  CPU寄存器的固定映像 116

4.9  执行程序 117

4.10  显示与修改内存 118

4.10.1  显示内存 118

4.10.2  修改内存 119

4.11  显示和修改CPU寄存器 120

4.12  向RAM下载程序 122

4.12.1  数据文件格式 123

4.12.2  下载程序 124

4.13  Flash的擦除与写入 126

4.13.1  与 Flash有关的寄存器 126

4.13.2  Flash擦除与写入的步骤 127

4.14  设置断点 134

4.14.1  在RAM程序中设置断点 134

4.14.2  在Flash程序中设置断点 138

4.15  中断向量表管理 139

4.16  系统调用表 142

4.17  帮助信息 143

第5章  用C语言开发应用程序 144

5.1  C语言是开发单片机应用软件的有力工具 144

5.2  开发嵌入式应用的C编译器的特点 145

5.3  交叉编译和C语言程序运行环境的建立 147

5.3.1  应用程序的构成与模块化程序结构 150

5.3.2  全局变量与局部变量 151

5.3.3  函数的结构与函数间参数的传递 152

5.3.4  C语言中的I/O语句 154

5.3.5  程序模块的框架与组织 155

5.3.6  程序的链接与定位 156

5.4  交叉C编译器及用C语言扩展监控程序 157

5.4.1  EEPROM 157

5.4.2  EEPROM擦除和编程步骤 158

5.4.3  EEPROM编程命令字及其含义 159

5.4.4  EEPROM的写保护区设定 159

5.5  嵌入式应用中的I/O  164

5.5.1  关于"Hello,World"  164

5.5.2  自己写printf( ) 函数 164

第6章  使用嵌入式实时操作系统 175

6.1  嵌入式实时操作系统 175

6.1.1  嵌入式实时操作系统简介 175

6.1.2  嵌入式实时操作系统mC/OS-Ⅱ 175

6.2  移植mC/OS-Ⅱ 177

6.2.1  重新定义内核的大小和功能 178

6.2.2  OS_CPU.H  181

6.3  编写与硬件相关的代码 183

6.3.1  中断服务子程序OSTickISR() 184

6.3.2  任务堆栈初始化函数OSTaskStkInit() 185

6.3.3  让优先级最高的就绪态任务开始运行OSStartHighRdy() 187

6.3.4  任务级任务切换函数OSCtxSw() 187

6.3.5  中断级任务切换函数OSIntCtxSw() 188

6.3.6  相关接口函数 190

6.4  产生时钟节拍中断 191

6.5  制作用户自己的项目 192

6.5.1  main.h 192

6.5.2  main.c 194

6.5.3  TaskStart.c 195

6.5.4  task1.c和task2.c 196

6.5.5  hardware.c 197

6.5.6  userlib.c 198

6.5.7  链接与程序定位 198

6.6  估算mC/OS-Ⅱ占用的RAM资源 200

6.6.1  mC/OS-Ⅱ中的全局变量 201

6.6.2  任务控制块 202

6.6.3  事件控制块 204

6.6.4  任务堆栈 205

6.6.5  估算内核占用RAM空间举例 207

6.7  多任务下的设备驱动 208

6.7.1  重新认识异步串行口 208

6.7.2  SCI的中断 209

6.7.3  用中断方式接收 209

6.7.4  用中断方式发送 210

第7章  使用GCC交叉编译器开发HC/S12单片机 213

7.1  使用免费的GCC交叉编译器 213

7.2  用GCC开发HC/S12系列单片机 214

7.2.1  安装"GCC for HCS12" 216

7.2.2  使用GNU针对MC68HC11/MC68HC12的开发环境 218

7.2.3  使用范例程序库进行交叉编译 221

7.3  如何编写makefile文件 223

7.3.1  简单makefile的书写规则 224

7.3.2  make命令的使用 225

7.4  GCC for HCS12编译器 226

7.4.1  内嵌汇编语言 229

7.4.2  陷阱、软中断和中断 229

7.4.3  填写中断向量表 230

7.4.4  支持页面 Flash ROM 231

7.4.5  编译参数 232

7.4.6  预处理参数 234

7.4.7  汇编参数 234

7.4.8  链接参数 235

7.4.9  链接器 235

7.5  hello world工程应用范例 239

7.5.1  源文件描述 239

7.5.2  链接地址描述 241

7.5.3  编译并运行 241

第8章  单片机软件开发工具 243

8.1  商用软件开发工具"CodeWarrior for HCS12" 243

8.2  安装CodeWarrior 243

8.3  建立工程 244

8.3.1  使用C编译器 246

8.3.2  使用汇编器 246

8.3.3  增加新程序模块 248

8.4  编写应用程序main.c 248

8.4.1  main.c 248

8.4.2  定义装载地址 250

8.4.3  利用make命令编译 251

8.5  在目标板上运行程序 252

8.5.1  向目标机下载程序 252

8.5.2  运行程序 253

8.6  建立自己的C 程序运行环境 255

8.7  编译基于 mC/OS-Ⅱ的应用程序 255

第9章  实验系统与I/O模块 261

9.1  通用I/O接口 262

9.2  MC9S12DP256的片内总线接口 264

9.2.1  同步串行接口 264

9.2.2  I2C总线接口 272

9.2.3  CAN总线接口 276

9.2.4  Motorola S12系列单片机的MSCAN模块 281

9.2.5  CAN总线实验原理及通信程序设计 283

9.3  增强型定时器 285

9.3.1  输入捕捉/输出比较 286

9.3.2  输入捕捉/输出比较通道 287

9.3.3  8位脉冲累加器 287

9.3.4  模数计数器 288

9.4  PWM模块 288

9.4.1  PWM模块概述 288

9.4.2  PWM波用作D/A转换接口 288

9.5  A/D模块 289

9.6  Motorola 16位单片机MC9S12DP256/DG128教学实验系统 291

9.6.1  概述 291

9.6.2  硬件电路介绍 291

第10章  单片机模糊控制 297

10.1  模糊控制 297

10.2  模糊控制指令 298

10.2.1  模糊控制专用指令 298

10.2.2  模糊控制相关指令 298

10.3  模糊逻辑的基本概念 298

10.3.1  模糊集合及隶属度函数 298

10.3.2  模糊逻辑与模糊变量 300

10.3.3  模糊推理 301

10.4  模糊控制原理与模糊控制器结构 301

10.4.1  模糊化 303

10.4.2  模糊规则推理 304

10.4.3  反模糊化 307

10.4.4  模糊控制的实现 309

10.4.5  模糊控制器的设计与调整 310

10.5  模糊控制开发软件 313

10.5.1  Motorola模糊推理机 313

10.5.2  MC68HC11 模糊推理机 313

10.5.3  S12逻辑推理机程序 320

第11章  单片机应用中的电磁兼容问题 323

11.1  电磁兼容基本概念 323

11.2  电磁兼容组织与标准 324

11.3  单片机系统的电磁兼容问题 326

11.4  噪声的来源与传输 327

11.4.1  信号线间交叉干扰 329

11.4.2  来自电源的噪声 330

11.5  印刷线路板EMC设计 331

11.5.1  元件的布置 331

11.5.2  印刷线路板接地线的处理 332

11.5.3  多层板设计 333

11.6  常用抗干扰器件 334

11.6.1  去耦电容 334

11.6.2  磁性元件 335

11.6.3  低通滤波器 336

11.6.4  瞬变干扰吸收器件 336

11.7  印刷线路板设计中控制噪声的经验 337

11.7.1  控制噪声源 337

11.7.2  减小噪声的耦合 338

11.7.3  减小噪声接收 338

11.8  单片机自身的抗干扰措施 339

11.8.1  降低外时钟的频率 339

11.8.2  时钟监控电路 339

11.8.3  打开"看门狗"电路 340

11.8.4  电源电压监控 340

11.8.5  非法指令中断和剩余程序区处理 340

附录A  MC9S12D系列单片机开发工具包 342

A.1  概述 342

A.1.1  HCS12D系列单片机 342

A.1.2  HCS12开发工具包组件 342

A.2  MC9S12DP256 / DG128开发板及与PC通信 343

A.2.1  MC9S12DP256 / DG128开发板 343

A.2.2  开发板上的跳线 345

A.2.3  开发板的硬件连接 345

A.2.4  PC的设置 346

A.3  监控程序及监控命令详解 349

A.3.1  命令详解 349

A.3.2  改变波特率 353

A.3.3  复位、中断向量表 355

A.3.4  用户可以使用的RAM空间 355

A.3.5  系统调用 355

A.4  编译器CodeWarrior for HCS12 使用方法入门 356

A.4.1  建立工程文件 356

A.4.2  编写main.c 程序 357

A.4.3  定义存储空间分配 359

A.4.4  应用程序的编译 360

A.4.5  向开发板下载程序 361

A.4.6  运行应用程序 362

A.5  BDM调试器及使用方法 363

A.5.1  BDM调试器使用方法 364

A.5.2  设置BDM头的时钟频率 364

A.5.3  和目标板连接 365

A.5.4  Help 命令 366

A.5.5  向 Flash下载程序 367

A.5.6  擦除目标板的片内 Flash 368

A.6  常用BDM调试命令 368

A.6.1  汇编和反汇编命令 368

A.6.2  控制目标CPU运行的命令 370

A.6.3  显示和修改CPU寄存器的命令 370

A.6.4  显示和修改内存 370

A.6.5  以S格式读出目标代码 370

A.6.6  其他BDM命令 370

附录B  监控程序源代码 372

附录C  CPU12汇编指令表 406

附录D  CPU12指令机器码表 420

附录E  本书所附光盘说明 423

参考文献 424