第1篇 娓娓道来的基础篇 2
第1章 你好,我是单片机——单片机概述 2
1.1我是单片机,你见过我吗? 2
1.1.1单片机的结构 3
1.1.2单片机与计算机 3
1.1.3单片机与嵌入式系统 4
1.1.4单片机的特点 4
1.2我的显赫身世 5
1.2.1单片机的发展 5
1.2.2单片机的发展趋势 7
1.3我不孤单,因为我有兄弟姐妹 8
1.3.1 MCS-51系列单片机 8
1.3.2 AT89系列单片机 9
1.3.3 STC单片机 10
1.3.4 Motorola单片机 11
1.3.5其他单片机 11
1.4你和我怎么交流呢? 11
1.4.1单片机中的数制 12
1.4.2常用的信息编码 13
1.4.3语言交流——单片机语言 15
1.5最后,我总结一下 16
第2章 让你好好地了解我——MCS-51硬件结构 18
2.1我的器官们——单片机的结构 18
2.1.1 MCS-51单片机硬件结构图 18
2.1.2 MCS-51单片机的引脚信号 22
2.2秀秀我的大脑——单片机微处理器 24
2.2.1运算器 24
2.2.2控制器 25
2.2.3 CPU的时序 26
2.3好的记忆力来自于哪里——存储器 27
2.3.1程序存储器地址空间 27
2.3.2数据存储器地址空间 27
2.3.3片外RAM的扩展 32
2.3.4程序存储器 32
2.4节拍器和RST——时钟电路和复位电路 33
2.4.1时钟电路 34
2.4.2复位电路 34
2.5最后,我总结一下 35
第3章 想让我干活?先看看须知吧——MCS-51指令系统及程序设计 36
3.1稍息,立正——指令概述 36
3.1.1机器码指令——天书 37
3.1.2汇编语言指令——竹简 37
3.2坏了,我把钱藏哪里去了?——寻址方式 38
3.2.1立即寻址 39
3.2.2寄存器寻址 39
3.2.3 RAM寻址 39
3.2.4程序存储器中数据的寻址 41
3.2.5 I/O端中数据的寻址 41
3.2.6程序的寻址 42
3.2.7位寻址 43
3.3咱们用密令交流吧——指令系统 43
3.3.1数据传送类指令 43
3.3.2算术运算类指令 48
3.3.3逻辑操作类指令 54
3.3.4位操作类指令 57
3.4让你看看我的小把戏——汇编语言程序设计实例 58
3.4.1顺序程序设计 59
3.4.2循环程序设计 60
3.4.3分支程序设计 67
3.4.4子程序及其调用 74
3.5最后,我总结一下 76
第4章 你我沟通的桥梁——Keil 77
4.1 Keil C51简介 77
4.2 Keil C51的安装 78
4.3 Keil C51的使用 79
4.3.1设置编译器 79
4.3.2 Keil的使用 80
4.3.3 Keil的编译 82
4.4最后,我总结一下 82
第5章 手脚并用,干活麻利——并行I/O口的输入输出 83
5.1手脚并用与打电话——并行通信与串行通信 83
5.2看看我是怎么让小灯闪啊闪的 84
5.2.1一个小灯闪啊闪 84
5.2.2几个小灯闪啊闪 87
5.3给我一个支点,我能撬动地球——继电器的控制 91
5.3.1认识一下继电器 92
5.3.2通过继电器让小灯闪啊闪 92
5.3.3实际中的继电器控制 94
5.4来点理论知识——并行端口的输入输出 95
5.4.1 MOV指令可直接输入输出的P1口 97
5.4.2在MOVX指令下由系统总线进行输入输出的P0和P2口 98
5.4.3具有特殊功能的P3口 99
5.5数据输入/输出的控制方式 100
5.5.1查询传送方式 101
5.5.2中断传送方式 103
5.6 C51语言中的I/O口的操作 104
5.7最后,我总结一下 105
第6章 暂停,我要接电话一中断系统 107
6.1哎呀,有突发事件,我该怎么办?——中断系统的原理与结构 107
6.2来了请按门铃——中断源及中断请求标志 109
6.2.1中断源 109
6.2.2中断请求标志 109
6.3两个电话同时响了,怎么办呢?——中断管理 110
6.3.1中断的开放和屏蔽 111
6.3.2中断优先级的设置 112
6.4中断的响应过程 115
6.5中断程序的编程方法 116
6.6你来控制小灯闪烁吧——C51中断实例 117
6.6.1 C51中断的定义 117
6.6.2 C51中断实例 120
6.7最后,我来总结一下 124
第7章 齐步走,一二——定时器/计数器 125
7.1我的手表——定时器/计时器作用 125
7.2怎么知道是几点了呢?——定时器/计数器内部结构及原理 126
7.2.1定时器/计数器方式控制寄存器TMOD 127
7.2.2定时器/计数器的控制寄存器TCON 128
7.3是定时呢,还是计数呢,这是个问题——工作方式 129
7.3.1工作方式0 129
7.3.2工作方式1 129
7.3.3工作方式2 130
7.3.4工作方式3 130
7.4定时器/计数器的应用设计 132
7.4.1定时器/计数器的初始化编程 132
7.4.2计数器初值计算方法 132
7.4.3定时器初值计算方法 133
7.4.4应用举例 134
7.5 C51语言中的定时器/计数器使用 139
7.5.1 C51中T0即T1的编程 139
7.5.2 AT89S52单片机T2的编程 142
7.6最后,我总结一下 143
第8章 咱们电话联系——串行通信 144
8.1为什么听筒会出声音呢?——串行口的内部结构 144
8.1.1串行口数据缓冲器SBUF 145
8.1.2串行口控制寄存SCON 145
8.1.3电源及波特率选择寄存器PCON 146
8.2我怎么和你联系——串行口的工作方式 146
8.2.1工作方式0 146
8.2.2工作方式1 147
8.2.3工作方式2 147
8.2.4工作方式3 149
8.3同步才能传递——串行口的波特率 149
8.3.1方式0和方式2 149
8.3.2方式1和方式3 149
8.3.3 SMOD位对波特率的影响 150
8.4 MCS-51单片机串口通信应用 150
8.4.1单片机串行通讯口测试 150
8.4.2 MCS-51单片机双机通信技术 151
8.4.3单片机的多机通信 157
8.4.4 PC机和单片机之间的通信 160
8.5 C51语言中的串行通信 163
8.6最后,我总结一下 165
第9章 这个语言必须掌握——单片机C语言编程 166
9.1 C及C51语言概述 166
9.1.1 C及C51语言的特点 166
9.1.2 C51的数据类型 167
9.1.3 C51对内部资源的定义 170
9.1.4常量与变量 172
9.1.5 C51绝对地址访问 174
9.2运算符和表达式 175
9.2.1关系运算符与关系表达式 175
9.2.2逻辑运算符与逻辑表达式 175
9.2.3算术运算符与算术表达式 176
9.2.4位运算符和复合赋值运算符 176
9.2.5条件运算符和指针运算符 178
9.2.6强制类型转换运算符 178
9.2.7表达式语句 179
9.3分支程序设计 179
9.3.1 if语句 179
9.3.2 switch语句 180
9.4循环程序设计 181
9.4.1 while语句 181
9.4.2 do-while语句 182
9.4.3 for语句 183
9.4.4 break与continue语句 184
9.5函数 184
9.5.1函数的定义 184
9.5.2函数的调用 185
9.5.3中断函数 186
9.6数组及指针的使用 187
9.6.1数组的使用 187
9.6.2指针的使用 189
9.7 C51的编程规范与技巧 191
9.7.1编程规范 191
9.7.2 C51的开发技巧 191
9.8最后,我总结一下 192
第2篇 源自实践的单片机应用篇 194
第10章 我是沉睡的狮子——单片机最小系统 194
10.1什么是最小系统 194
10.2最小系统电路分析 195
10.3亲自做个最小系统吧 198
10.4觉醒吧,凶猛的狮子! 200
10.5最后,我总结一下 205
第11章 看看我的霓虹灯——跑马灯 206
11.1排好队,报数——跑马灯的硬件设计 206
11.2程序设计及改进 207
11.3最后,我总结一下 216
第12章1、2、3,出发——数码管 217
12.1数码管是什么东东? 217
12.2开始计数,1~2~3 219
12.3最后我总结一下 229
第13章 叮咚,门铃响了——蜂鸣器 230
13.1什么东西发出来的声音呢 230
13.2先叮还是先咚?还是先让它发声 231
13.3最后,我总结一下 239
第14章 告诉我你想干什么——矩阵键盘 240
14.1键盘?很复杂吧 240
14.2独立键盘设计及编程 241
14.3矩阵键盘的设计 247
14.4最后,我总结一下 255
第15章 早起的鸟儿有虫吃——闹钟 256
15.1叮咚,米已经煮了10分钟了 256
15.2外部中断的有趣的事 266
15.3最后,我总结一下 269
第16章 预备,跑——秒表 270
16.1先来做一个简单的——10秒的秒表 270
16.2进步一点点——99秒的秒表 272
16.3再来进步一点点——100000秒计时 274
16.4八位数码管显示数码时钟 277
16.5强劲闹铃横空出世 281
16.6红绿灯 293
16.7最后,我总结一下 298
第17章来段音乐轻松一下吧 299
17.1音乐,是如何产生的? 299
17.2专业的音乐是如何产生的 306
17.3电子琴 315
17.4亮灯倒计时10秒,开始播放音乐 318
17.5按键选择音乐 322
17.6一个按键六首歌,神奇吧 327
17.7最后,我总结一下 332
第18章 神奇的液晶显示——1602 333
18.1 1602是什么 333
18.2 1602怎么使 334
18.3滚动演示 339
18.4 1602的时钟显示 341
18.5数码管与液晶的竞技 346
18.6 最后,我总结一下 349
第19章 让你走几步你就得走几步——步进电机 350
19.1一步一叩首——步进电机 350
19.2给多少钱,干多少活——步进电机驱动控制 351
19.3前进!停止!后退!——步进电机正反转 354
19.4步进电机控制与1602显示 357
19.5最后,我总结一下 366
第20章 向后转!——直流电机 367
20.1直流电机?什么东东! 367
20.2不是所有的桥都在水上——H桥 368
20.3加速前进——目标就在前方! 371
20.4 PWM不仅仅可以调速哦 374
20.5我来总结一下 379
第21章 单线传递,简单易用——串口通信 380
21.1首先自检——串口自测程序 380
21.2串行通信查询法 381
21.3串行通信中断法 382
21.4向PC发送字符 383
21.5串行数据转为并行数据 384
21.6并行数据转为串行数据 386
21.7双机通信 387
21.8双机双向通信 389
21.9最后,我总结一下 393
第22章 电子温度计的设计——DS18B20 394
22.1温度计的触角——DS18B20 394
22.2 DS18B20与数码管的约会 395
22.3串口测温 399
22.4 DS18B20与1602的爱情故事 405
22.5最后,我总结一下 413