本书以飞思卡尔全国大学生智能汽车竞赛组委会推荐芯片MC9S12XS128为蓝本,深入讲解CPU及片内外设工作原理,介绍单片机嵌入式应用的开发方法。本书首先简要介绍了单片机的基本概念,从门电路到单片机的硬件演进过程;然后按CPU、存储器、I/O口、时钟和复位的顺序,讲述MCU内部结构和工作原理,对中断系统、串行口、定时计数模块和A/D转换模块进行了详细分析,介绍了单片机嵌入式应用的开发方法,并给出相应的范例。
本书系统介绍了Freescale (飞思卡尔) 公司的S12XS 微控制器( MCU) 的硬件结构和工作原理。 以MC9S12XS128 为例详细分析了各个片内外设功能模块的硬件结构、工作原理和使用方法。 同时介绍了MCU 最小系统。 程序设计、下载和动态调试方法。 单片机嵌入式应用系统的设计方法。单片机的学习不仅要学习硬件。 还要学习软件。 根据我们多年的教学实践。 学生在学习单片机时。 由于前期电类基础不尽相同。 如何能够深入理解单片机的工作原理。 并尽快上手操作。 实现针对硬件编程、调试。 一直是单片机教学和学习过程中的难点。 为此。 本书在章节的编排和内容的选取上。 尽量做到零基础起步。 采用从原理到实践。 最后到系统设计的方法。 使得电类基础薄弱的读者也能尽快掌握单片机的工作原理。
本书在硬件上讲述单片机内部结构和工作原理时。 采用CPU、存储器、I/ O 口、时钟和复位的顺序。 读者在了解单片机内部结构之后。 马上就能够组成单片机最小系统。 并上手操作。只要有一点计算机基础的读者。 就能够通过范例操作。 看到I/ O 控制发光二极管的亮灭。激发读者的学习兴趣。 达到快速入门的目的。本书是在第1 版的基础上。 根据读者和任课教师的反馈意见进行了章节调整和部分内容的修改。 具体如下: 由于目前使用C 语言编程比汇编语言编程更加简单易学。 而且原书中给出的范例也是C 语言编程。 所以将第4 章指令系统删掉。 考虑到篇幅所限。 删掉了第11 章飞思卡尔智能车设计范例。 这部分内容在相关网站上有许多高手的经验介绍和交流文章。 各章都增加了思考题与习题。 便于读者对所学章节的内容进行复习和总结。第1 章简要讲述单片机的概念。 单片机的广泛应用。 单片机的发展历程。 从门电路到单片机的硬件演进过程。 并对常用的数制转换进行了介绍。 对飞思卡尔16 位单片机的特点及命名规则也进行了介绍。第2 章主要介绍S12XS 单片机的内部模块及引脚功能。 以MC9S12XS128 为例。 从硬件上详细分析CPU 取指、译码、操作以及标志设定和堆栈使用过程。 存储器结构及地址映射管理过程的地址管理、I/ O 口管理方法。 通过内部锁相环获得内部总线时钟的相关寄存器设置方法。 介绍了复位的工作原理。第3 章讲述如何用最简单的硬件和软件使单片机运行起来。 通过实例告诉你。 其实单片机入门并不难。第4 章讲述中断的概念、MC9S12XS128 中断源、中断响应和执行过程、中断优先级和中断嵌套。 通过外部中断范例。 理解中断响应是如何实现的。第5 章从总体上介绍串行通信的基本知识。 包括并行通信与串行通信。 同步串行通信和异步串行通信及数据格式。 常用异步串行通信标准。 介绍S12XS 同步串行模块SPI 和异步串行模块SCI 的工作原理及相关寄存器的功能和设置方法。第6 章讲述定时中断PIT、定时器TIM 和PWM 等内容。 每部分内容都有相应的范例。第7 章介绍A ̄D 转换模块中包含的逐次比较式A ̄D 转换器的工作原理。 MC9S12XS128的A ̄D 转换模块结构和工作原理。 按功能分类介绍了相关寄存器的设置方法。 通过范例 MC9S12 单片机原理及嵌入式应用开发技术(第2 版)Ⅳ 理解相关寄存器的设置和使用方法。第8 章讲述了MC9S12XS128 单片机嵌入式应用的开发方法。 介绍μC/ OSⅡ的概念及其移植和任务编写方法。 通过范例介绍单片机嵌入式应用系统的开发流程。第9 章介绍了单片机测控系统的设计原则。 阐述了键盘、显示接口扩展方法。本书原理的讲述力求简洁透彻。 范例的选择具有工程背景。 便于读者移植使用。 本书对寄存器是按功能分类介绍的。
本书由陈万忠担任主编。 李洪霞、赵静荣担任副主编。 参加编写的人员还有: 顾海军、马海涛、洪伟、刘聪、康冰、逄鹏、封淑玲。 感谢研究生李勇强、姜瑞、孙保峰、高韧杰、崔冰一、雷俊、张勇和范越宇在调试程序和绘制插图方面的贡献。 本书编写过程中参考了许多单片机专家的著作。 谨向作者致以崇高的敬意。感谢清华大学飞思卡尔中心的支持和帮助。本书为读者提供了一个单片机学习的快速入门方法。 作者深感自己知识的局限。 深入的内容未作讨论。 书中难免会有疏漏和不妥之处。 诚请读者指正。
作 者
前 言
第1 章 单片机概述 1
1 1 单片机简介 1
1. 2 单片机的广泛应用 1
1. 3 单片机的发展历史 3
1. 4 从门电路到单片机 4
1. 4. 1 半导体晶体管的开关特性 4
1. 4. 2 组合逻辑电路 4
1. 4. 3 时序逻辑电路 9
1. 4. 4 单片机的硬件构成 10
1. 5 数制转换 11
1. 6 飞思卡尔16 位单片机 13
1. 6. 1 Freescale 16 位单片机命名参考
规则 13
1. 6. 2 MC9S12X 系列单片机 14
思考题与习题 15
第2 章 S12XS 单片机的内部结构
分析 16
2. 1 MC9S12XS 单片机的性能 16
2. 1. 1 MC9S12XS 内部模块 16
2. 1. 2 MC9S12XS 单片机的引脚及
功能 18
2. 2 CPU 的构成 21
2. 2. 1 算术逻辑单元(ALU) 21
2. 2. 2 控制单元 21
2. 2. 3 核心寄存器组 22
2. 3 存储器 24
2. 3. 1 基本存储空间 24
2. 3. 2 扩展地址空间 24
2. 3. 3 全局存储器映射 25
2. 3. 4 MC9S12XS128 全局存储器
映射 27
2. 4 并行I/ O 口 29
2. 4. 1 A、B、E 和K 口 29
2. 4. 2 T、S、M、P、H 和J 口 30
2. 4. 3 AD 口 32
2. 5 时钟与复位模块 32
2. 5. 1 时钟模块 32
2. 5. 2 锁相环应用范例 36
2. 5. 3 复位 38
思考题与习题 39
第3 章 单片机最小系统与软件运行
环境 40
3. 1 硬件电路设计 40
3. 1. 1 单片机电源电路设计 40
3. 1. 2 S12 单片机时钟电路设计 41
3. 1. 3 复位电路设计 42
3. 1. 4 BDM 接口电路设计 42
3. 2 Code Warrior V5. 1 软件使用指南 43
3. 2. 1 软件安装 43
3. 2. 2 关于BDM 驱动 44
3. 2. 3 创建一个新的工程 45
3. 2. 4 编译与调试 48
3. 3 并口输出范例 50
3. 3. 1 编写简单的应用程序 51
3. 3. 2 LED 闪动程序 52
3. 3. 3 复位自检程序 52
3. 3. 4 流水灯程序 54
思考题与习题 55
第4 章 中断系统 56
4. 1 中断的概念 56
4. 2 中断源 56
4. 3 S12XS 单片机的中断响应和中断
返回 59
4. 4 优先权排队 60
4. 5 中断嵌套 60
4. 6 中断服务子程序设计 61
4. 6. 1 IRQ 使用范例 62
4. 6. 2 XIRQ 使用范例 64
思考题与习题 66
第5 章 串行口 67
5. 1 串行通信概述 67
5. 1. 1 串行通信的两种基本方式 67
5. 1. 2 发送时钟和接收时钟 68
5. 1. 3 串行通信标准 69
MC9S12 单片机原理及嵌入式应用开发技术(第2 版)
Ⅵ
5. 2 同步外设接口SPI 模块 71
5. 2. 1 SPI 模块概述 71
5. 2. 2 SPI 寄存器 72
5. 2. 3 SPI 应用范例 76
5. 3 SCI 模块 79
5. 3. 1 SCI 模块的结构及功能 79
5. 3. 2 SCI 模块寄存器 80
5. 3. 3 SCI 应用范例 84
思考题与习题 97
第6 章 定时器相关模块 98
6. 1 定时器/计数器概述 98
6. 2 TIM 模块 98
6. 2. 1 TIM 模块的结构及功能 99
6. 2. 2 TIM 模块寄存器 100
6. 2. 3 TIM 模块应用范例 106
6. 3 PIT 模块 112
6. 3. 1 PIT 模块的结构及功能 113
6. 3. 2 PIT 模块寄存器 114
6. 3. 3 PIT 模块应用范例 117
6. 4 PWM 模块 122
6. 4. 1 PWM 功能 123
6. 4. 2 PWM 模块寄存器 123
6. 4. 3 PWM 模块应用范例 127
思考题与习题 132
第7 章 A ̄D 转换模块 133
7. 1 A ̄D 转换模块概述 133
7. 1. 1 A ̄D 转换原理 133
7. 1. 2 S12XS 系列MCU 内置A ̄D 转换
模块 134
7. 2 A ̄D 转换寄存器 135
7. 2. 1 A ̄D 输入使能寄存器 135
7. 2. 2 A ̄D 控制寄存器 135
7. 2. 3 A ̄D 比较寄存器 139
7. 2. 4 A ̄D 转换状态寄存器 140
7. 2. 5 A ̄D 结果寄存器 140
7. 3 A ̄D 转换应用范例 141
7. 3. 1 应用注意事项 141
7. 3. 2 应用范例 142
思考题与习题 143
第8 章 嵌入式实时操作系统使用
范例 144
8. 1 嵌入式实时操作系统 144
8. 1. 1 嵌入式实时操作系统简介 144
8. 1. 2 嵌入式实时操作系统
μC/ OS ̄II 144
8. 2 移植μC/ OS ̄II 146
8. 2. 1 重新定义内核的大小和功能 147
8. 2. 2 OS—CPU. H 150
8. 2. 3 编写与硬件相关的代码 152
8. 2. 4 中断服务子程序OSTickISR() 152
8. 2. 5 任务堆栈初始化函数
OSTaskStkInit() 154
8. 2. 6 让优先级最高的就绪态任务开始
运行函数OSStartHighRdy() 155
8. 2. 7 任务级任务切换函数
OSCtxSw() 156
8. 2. 8 中断级任务切换函数
OSIntCtxSw() 157
8. 2. 9 相关接口函数 159
8. 3 应用范例 159
8. 3. 1 相关声明 160
8. 3. 2 主函数main() 161
8. 3. 3 系统任务函数AppStartTask() 162
8. 3. 4 用户任务1 AppTask1() 164
8. 3. 5 用户任务2 AppTask2() 165
8. 3. 6 用户任务3 AppTask3() 166
8. 3. 7 链接与程序定位 168
第9 章 单片机测控系统设计 169
9. 1 微机测控系统的组成 169
9. 1. 1 微机测控系统硬件 169
9. 1. 2 微机测控系统软件 170
9. 2 微机测控系统的常用器件 171
9. 2. 1 集成运算放大器及其应用 171
9. 2. 2 电压比较器 174
9. 2. 3 隔离放大器 175
9. 2. 4 光耦合器 177
9. 2. 5 固态继电器 179
9. 3 键盘、显示接口 181
9. 3. 1 键盘 181
9. 3. 2 7 段LED 显示 182
9. 3. 3 键盘显示接口范例 183
思考题与习题 186
参考文献 187