第一篇 51系列单片机基础 19
第1章 51系列单片机概述 19
1.1单片机的产生与发展 19
1.2 51系列单片机介绍 20
1.2.1 51系列单片机简介 20
1.2.2 51系列单片机的应用领域 20
1.3最新51内核单片机介绍 21
1.3.1 Atmel单片机介绍 21
1.3.2 Cypress单片机介绍 21
1.3.3 Infineon单片机介绍 22
1.3.4 Silicon单片机介绍 22
1.3.5 Maxim单片机介绍 22
1.3.6 NXP单片机介绍 23
1.3.7 Winbond单片机介绍 23
1.3.8 Analog Devices单片机介绍 23
1.3.9 TI单片机介绍 24
1.3.10其他单片机介绍 24
1.4 51系列单片机开发概述 24
1.4.1分析测控系统 25
1.4.2单片机选型 25
1.4.3硬件资源分配 25
1.4.4程序设计 26
1.4.5仿真测试 26
1.4.6实际硬件测试 26
1.5小结 26
第2章 51系列单片机基本结构 27
2.1 51系列单片机的内部结构 27
2.1.1内部结构的主要组成部分 27
2.1.2单片机结构的类型 28
2.2 51系列单片机的引脚功能 29
2.2.1 51系列单片机的引脚封装 29
2.2.2 51系列单片机引脚功能 29
2.3中央处理器(CPU) 31
2.3.1算术逻辑部件(ALU) 31
2.3.2控制器 31
2.3.3通用寄存器 31
2.3.4专用寄存器 32
2.4存储器结构 33
2.4.1程序存储器及其扩展 34
2.4.2数据存储器及其扩展 35
2.5 51系列单片机的复位 38
2.5.1单片机的复位状态 38
2.5.2单片机的复位电路 39
2.6 51系列单片机的时钟和时序 40
2.6.1振荡器和时钟电路 40
2.6.2 CPU的时序 41
2.6.3指令执行的时序 42
2.6.4访问外部ROM/RAM的操作时序 43
2.7 51系列单片机的并行I/O口 45
2.7.1并行I/O口 45
2.7.2并行I/O口的应用 48
2.7.3并行I/O口的扩展 48
2.8系统掉电保护和低功耗设计 50
2.8.1掉电保护 50
2.8.2低功耗设计 51
2.9 51系列单片机的最小系统 52
2.10小结 52
第3章 Keil C51开发工具简介 53
3.1 Keil μVision3简介 53
3.2 μVision3安装 53
3.3 μVision3集成开发环境 54
3.3.1 μVision3项目管理窗口 54
3.3.2 μVision3的菜单栏 55
3.3.3 μVision3的工具栏 59
3.3.4 μVision3的管理配置 61
3.3.5 μVision3的各种常用窗口 64
3.4小结 66
第二篇 编程篇——汇编语言 67
第4章 汇编语言程序设计 67
4.1汇编语言程序概述 67
4.1.1汇编语言简介 67
4.1.2汇编语言程序设计步骤 68
4.1.3汇编语言程序实例 68
4.2伪指令 68
4.2.1汇编程序起始伪指令ORG 69
4.2.2汇编程序结束伪指令END 69
4.2.3等值伪指令EQU(或=) 69
4.2.4 数据地址赋值伪指令DATA 70
4.2.5定义字节伪指令DB 70
4.2.6定义字伪指令DW 70
4.2.7定义空间伪指令DS 71
4.2.8位地址符号伪指令BIT 71
4.3汇编语言程序的格式 71
4.4源程序的汇编 72
4.5 Keil μVision3中运行汇编语言实例 72
4.5.1创建项目 72
4.5.2创建源文件 72
4.5.3编译项目 74
4.5.4仿真调试 74
4.6小结 74
第5章 汇编语言程序结构 75
5.1顺序结构程序 75
5.2分支结构程序 76
5.2.1双分支结构 76
5.2.2多分支结构 77
5.3循环结构程序 78
5.3.1循环程序的结构和组成 78
5.3.2循环程序示例 79
5.3.3多重循环程序结构 80
5.4子程序结构 81
5.4.1子程序的结构 81
5.4.2子程序的调用与返回 81
5.4.3子程序设计实例 82
5.5查表结构程序 83
5.6运算类程序 84
5.6.1 8位带符号整数的乘法子程序 84
5.6.2 8位带符号整数的除法子程序 85
5.7小结 86
第三篇 编程篇——C51 87
第6章 单片机C语言程序设计基础 87
6.1单片机C语言概述 87
6.1.1单片机C语言和汇编语言对比 87
6.1.2 C51语言的主要特点 87
6.2单片机C语言在Keil μVision3中应用实例 88
6.2.1创建项目 88
6.2.2创建源文件 89
6.2.3编译项目 89
6.2.4仿真调试 90
6.3 C51的标识符与关键字 90
6.3.1标识符 90
6.3.2关键字 91
6.4 C51的数据类型 92
6.4.1常量与变量 93
6.4.2整型数据 94
6.4.3浮点型数据 95
6.4.4字符型数据 96
6.4.5指针型数据 98
6.4.6无值型数据 99
6.5 C51的变量作用域 99
6.5.1基本规则 99
6.5.2自动变量 100
6.5.3外部变量 101
6.5.4静态变量 102
6.5.5寄存器变量 102
6.6分隔符与const修饰符 103
6.6.1 C51分隔符 103
6.6.2 const修饰符 103
6.7运算符 104
6.7.1算术运算符 104
6.7.2逻辑运算符和关系运算符 106
6.7.3位运算符 107
6.7.4特殊运算符 109
6.7.5运算符优先级和结合性 111
6.8表达式 113
6.8.1算术表达式 113
6.8.2赋值表达式 113
6.8.3逗号表达式 114
6.8.4关系和逻辑表达式 115
6.9小结 116
第7章 数组 117
7.1数组类型说明 117
7.2数组元素的表示 118
7.3数组元素的初始化赋值 118
7.4一维数组 119
7.4.1一维数组声明 120
7.4.2向函数传递一维数组 120
7.4.3一维字符串数组 120
7.5二维数组 121
7.5.1二维数组声明 121
7.5.2二维数组初始化 122
7.5.3二维字符串数组 124
7.6多维数组 124
7.7小结 125
第8章 指针 126
8.1地址、指针和指针变量的概念 126
8.2指针变量的声明 126
8.3指针变量的赋值 126
8.4指针变量的引用 128
8.4.1取地址运算符“&” 128
8.4.2取内容运算符“*” 128
8.5指针变量的运算 129
8.5.1关系运算 129
8.5.2算术运算 130
8.6数组指针 130
8.6.1指向一维数组的指针 130
8.6.2指向二维数组的指针 131
8.6.3指向一个由n个元素组成的数组指针 133
8.6.4指针和数组的关系 134
8.7字符指针 134
8.8指针数组 135
8.9小结 136
第9章 结构 137
9.1结构的定义 137
9.2结构变量的定义 138
9.2.1先定义结构,再定义结构变量 138
9.2.2在定义结构的同时,定义结构变量 138
9.2.3直接说明结构变量 138
9.3结构变量的使用 139
9.4多重结构变量的赋值 139
9.5结构变量的初始化 140
9.6结构数组 141
9.6.1结构数组的定义 141
9.6.2结构数组的初始化赋值 142
9.7结构指针 143
9.8特殊结构 145
9.8.1嵌套结构 145
9.8.2位结构 145
9.9小结 146
第10章 联合、枚举、类型说明和位域 147
10.1联合类型 147
10.1.1联合和联合变量的定义 147
10.1.2联合变量成员的引用 148
10.2结构和联合的区别 150
10.3枚举类型 150
10.3.1枚举的定义 151
10.3.2枚举变量的声明 151
10.3.3枚举类型变量的赋值 152
10.4类型说明 153
10.5位域 154
10.5.1位域的定义和位域变量的声明 154
10.5.2位域变量的使用 155
10.6小结 156
第11章 C51语言的函数 157
11.1函数的概念和分类 157
11.1.1从函数定义角度分类 157
11.1.2从有无返回值角度分类 158
11.1.3从数据传送角度分类 158
11.2函数的定义 158
11.3函数的参数 160
11.3.1形参和实参 160
11.3.2数组作为函数参数 161
11.3.3多维数组作为函数参数 162
11.3.4指针作为函数参数 163
11.4函数的返回值 164
11.5函数调用 164
11.5.1赋值调用与引用调用 164
11.5.2递归调用 165
11.5.3嵌套调用 166
11.6函数及其变量的作用域 167
11.6.1函数的作用域 167
11.6.2函数的变量作用域 168
11.7 main函数 168
11.8小结 169
第12章 C51语言的常用库函数详解 170
12.1字符函数 170
12.1.1检查英文字母函数 170
12.1.2检查字母数字函数 171
12.1.3检查控制字符函数 171
12.1.4十进制数字检查函数 172
12.1.5可打印字符检查函数 172
12.1.6包含空格的可打印字符检查函数 173
12.1.7格式字符检查函数 173
12.1.8小写英文字母检查函数 174
12.1.9大写英文字母检查函数 175
12.1.10控制字符检查函数 175
12.1.11十六进制数字检查函数 176
12.1.12十六进制数字转换函数 176
12.1.13大写字符转换函数 177
12.1.14小写字符转换函数 178
12.1.15 ASCII字符转换函数 178
12.1.16大写字符宏转换函数 179
12.1.17小写字符宏转换函数 180
12.2字符串函数 180
12.2.1字符查找函数 180
12.2.2指定长度的字符串比较函数 181
12.2.3字符串复制函数 182
12.2.4带终止字符的字符串复制函数 182
12.2.5字符串移动函数 183
12.2.6字符串填充函数 184
12.2.7字符串追加函数 184
12.2.8指定长度的字符串追加函数 185
12.2.9字符串比较函数 185
12.2.10包含结束符的字符串比较函数 186
12.2.11字符串覆盖函数 187
12.2.12指定长度的字符串覆盖函数 187
12.2.13获取字符串个数函数 188
12.2.14搜索字符串函数 189
12.2.15 搜索字符函数 189
12.2.16返回位置值的字符搜索函数 190
12.2.17字符包含函数 190
12.2.18返回位置值的字符包含函数 191
12.2.19在指定字符集中查找不包含字符函数 192
12.2.20在指定字符集中查找包含字符函数 192
12.2.21查找第一个包含字符函数 193
12.2.22查找最后一个包含字符函数 194
12.3 I/O函数 194
12.3.1字符读入函数 194
12.3.2字符读入输出函数 195
12.3.3字符串读入函数 196
12.3.4字符回送函数 196
12.3.5字符输出函数 197
12.3.6格式化输出函数 197
12.3.7格式化内存缓冲区输出函数 199
12.3.8字符串输出函数 200
12.3.9格式化输入函数 200
12.3.10格式化内存缓冲区输入函数 202
12.3.11字符串内存输出函数 203
12.3.12指向缓冲区的输出函数 204
12.4数学函数 205
12.4.1绝对值函数 205
12.4.2指数函数及对数函数 205
12.4.3三角函数 206
12.4.4取整函数 207
12.4.5浮点型分离函数 208
12.4.6幂函数 208
12.5标准函数 209
12.5.1字符串转换函数 209
12.5.2带返回指针的字符串转换函数 210
12.5.3随机函数 211
12.5.4数组内存分配函数 212
12.5.5释放内存函数 212
12.5.6初始化内存函数 213
12.5.7内存分配函数 214
12.5.8调整内存大小函数 214
12.6内部函数 215
12.6.1循环左移函数 215
12.6.2循环右移函数 216
12.6.3延时函数 217
12.6.4位测试函数 217
12.7绝对地址访问函数 218
12.7.1 BYTE型存储空间访问函数 218
12.7.2 WORD型存储空间访问函数 219
12.7.3 far存储区访问函数 219
12.7.4 far存储区数组访问函数 220
12.8变量参数表函数 220
12.9全程跳转函数 221
12.10计算结构体成员的偏移量函数 222
12.11小结 223
第13章 C51语句和流程 224
13.1说明语句 224
13.2表达式语句 224
13.3复合语句 225
13.4循环语句 226
13.4.1 while语句 226
13.4.2 do-while语句 226
13.4.3 for语句 227
13.5条件语句 228
13.5.1单分支结构 228
13.5.2双分支结构 228
13.5.3阶梯式if-else-if结构 229
13.6开关语句 231
13.7跳转语句 232
13.7.1 goto语句 232
13.7.2 break语句 232
13.7.3 continue语句 233
13.8函数调用语句 233
13.9空语句 234
13.10返回语句 235
13.11 C51语言的流程控制结构 235
13.12小结 236
第14章 预处理及用户配置文件 237
14.1预处理命令概述 237
14.2宏定义指令 237
14.2.1 #defie命令 237
14.2.2 #undef命令 239
14.3文件包含指令 240
14.4条件编译指令 241
14.4.1 #if、#else、#endif命令 241
14.4.2 #elif命令 241
14.4.3 #ifdef、#ifndef命令 242
14.5其他编译指令 243
14.5.1 #line命令 243
14.5.2 #error 243
14.5.3 #pragma 244
14.6 C51语言编译器的控制指令 245
14.6.1源文件控制类 245
14.6.2目标文件(Object)控制类 245
14.6.3列表文件(Listing)控制类 245
14.7 C51语言的用户配置文件 245
14.7.1 C51语言启动代码文件 245
14.7.2 C51语言启动代码分析 249
14.7.3变量初始化文件 250
14.7.4基本I/O函数文件 251
14.7.5分组配置文件 251
14.8小结 251
第15章 C51语言的存储结构 252
15.1存储器结构 252
15.1.1 51系列单片机的存储区域 252
15.1.2片内数据存储器(RAM)的结构 252
15.2存储类型 253
15.2.1 data存储类型 253
15.2.2 bdata存储类型 253
15.2.3 idata存储类型 254
15.2.4 pdata存储类型 254
15.2.5 xdata存储类型 254
15.2.6 code存储类型 254
15.3扩展数据类型 255
15.3.1 sfr和sfr16 255
15.3.2 sbit 255
15.3.3 bit型变量 256
15.4存储模式 256
15.4.1 Small模式 256
15.4.2 Compact模式 256
15.4.3 Large模式 257
15.4.4存储模式的选择 257
15.5 C51语言的存储器指针 257
15.5.1一般指针 257
15.5.2存储器指针 258
15.5.3指针存储类型与指针所指向的数据的存储类型的关系 258
15.6动态内存分配 259
15.6.1 C51语言的动态分配函数 259
15.6.2 malloc和calloc函数 260
15.7小结 260
第四篇 51系列单片机编程指南篇 261
第16章 51系列单片机的指令系统 261
16.1指令系统简介 261
16.1.1指令格式 261
16.1.2指令符号 262
16.2寻址方式 263
16.2.1立即寻址 263
16.2.2直接寻址 264
16.2.3寄存器寻址 265
16.2.4寄存器间接寻址 266
16.2.5变址寻址 267
16.2.6相对寻址 268
16.2.7位寻址 270
16.3数据传送指令 271
16.3.1内部RAM数据传送指令 271
16.3.2外部RAM数据传送指令 274
16.3.3程序存储器数据传送指令 275
16.3.4数据交换指令 277
16.3.5堆栈操作指令 278
16.4算术运算指令 279
16.4.1加法指令 279
16.4.2带进位的加法指令 280
16.4.3带借位的减法指令 282
16.4.4加1指令 283
16.4.5减1指令 284
16.4.6乘除法指令 285
16.4.7十进制调整指令 286
16.5逻辑运算及移位指令 287
16.5.1逻辑与指令 288
16.5.2逻辑或指令 289
16.5.3逻辑异或指令 290
16.5.4累加器清零指令 291
16.5.5累加器取反指令 292
16.5.6组合逻辑电路的实现 292
16.5.7循环移位指令 293
16.6控制转移指令 294
16.6.1无条件转移指令 295
16.6.2条件转移指令 299
16.6.3子程序调用及返回指令 302
16.7位操作指令 305
16.7.1位变量传送指令 305
16.7.2置位与清零指令 306
16.7.3位逻辑运算指令 306
16.7.4位控制转移指令 307
16.8空操作指令 309
16.9 51系列单片机指令汇总 310
16.10小结 314
第17章 51系列单片机的定时器/计数器 315
17.1定时器/计数器0和1 315
17.1.1定时器/计数器的结构 315
17.1.2定时器/计数器的功能 316
17.1.3 T0和T1的控制寄存器 316
17.2定时器/计数器0和1的工作模式 319
17.2.1工作模式0及其程序设计 319
17.2.2工作模式1及其程序设计 321
17.2.3工作模式2及其程序设计 322
17.2.4工作模式3及其程序设计 325
17.3定时器/计数器2 327
17.3.1 T2的控制寄存器T2CON和T2MOD及其程序访问 327
17.3.2定时器/计数器2的工作模式 329
17.4小结 333
第18章 51系列单片机中断系统及其程序设计 334
18.1中断系统概述 334
18.1.1什么是中断 334
18.1.2中断的用途 334
18.1.3中断需要解决的问题 335
18.2 51系列单片机的中断类型 336
18.2.1外部中断源 336
18.2.2定时中断源 337
18.2.3串行中断源 337
18.3 51系列单片机的中断系统 337
18.3.1中断请求标志及其访问 337
18.3.2中断允许标志及其访问 339
18.3.3中断优先级标志及其访问 340
18.4中断的处理过程 341
18.4.1中断响应 341
18.4.2中断处理 342
18.4.3中断返回 343
18.4.4中断请求的撤离 343
18.5中断源的程序设计 344
18.5.1外部中断源的程序设计 344
18.5.2定时中断源的程序设计 345
18.5.3串行中断源的程序设计 346
18.6外部中断源的扩展 347
18.6.1定时器/计数器扩展外部中断源 347
18.6.2查询方式扩展外部中断源 350
18.7小结 351
第19章 51系列单片机的串行接口 352
19.1串行通信概述 352
19.1.1串行通信简介 352
19.1.2串行通信的数据传送方式 354
19.2 51系列单片机的串行接口 355
19.2.1单片机串行接口的内部结构 355
19.2.2单片机串行接口的程序控制 356
19.2.3波特率的程序设计 358
19.3串行口的工作模式0 361
19.3.1模式0的发送及扩展输出端口 361
19.3.2模式0的接收及扩展输入端口 362
19.4串行口的工作模式1 364
19.4.1模式1的发送 364
19.4.2模式1的接收 365
19.5串行口的工作模式2 367
19.5.1模式2的发送 367
19.5.2模式2的接收 368
19.6串行口的工作模式3 369
19.6.1模式3的发送 369
19.6.2模式3的接收 370
19.7双机通信程序设计 371
19.7.1查询方式 371
19.7.2中断方式 372
19.8多机通信程序设计 374
19.8.1多机通信原理 374
19.8.2多机通信协议约定 375
19.8.3多机通信程序设计 375
19.9小结 380
第20章 C51下的RTX-51实时多任务操作系统 381
20.1 RTX-51实时多任务操作系统简介 381
20.1.1 RTX-51种类 381
20.1.2 RTX-51与单任务程序的比较 382
20.2 RTX-51的任务调度 383
20.2.1 RTX-51循环任务调度 383
20.2.2 RTX-51事件任务调度 384
20.2.3 RTX-51信号任务调度 384
20.2.4优先级及抢先任务切换 385
20.2.5 RTX-51的其他特性 386
20.3 RTX-51 Tiny的系统函数 387
20.3.1发送信号函数isr send signal 387
20.3.2清除信号标志函数os_clear_signal 387
20.3.3启动任务函数os_create_task 388
20.3.4删除任务函数os_delete_task 388
20.3.5当前任务号函数os_running_task_id 389
20.3.6发送信号函数os_send_signal 389
20.3.7等待函数os_wait 389
20.3.8等待函数os_wait1 390
20.3.9等待函数os_wait2 391
20.4 RTX-51 Tiny的任务管理 392
20.4.1 RTX-51 Tiny的任务状态 392
20.4.2 RTX-51 Tiny的事件 392
20.4.3 RTX-51 Tiny的任务切换 392
20.5 RTX-51 Tiny的配置文件 392
20.6 RTX-51 Tiny的要求及限定 395
20.6.1使用RTX-51 Tiny的要求 395
20.6.2 RTX-51 Tiny的注意事项 396
20.7 RTX-51 FULL的系统函数及技术参数 397
20.7.1 RTX-51 FULL函数一览 397
20.7.2 RTX-51的技术参数 398
20.8小结 398
第21章 Keil μVision3中的单片机硬件资源仿真 399
21.1仿真概述 399
21.2并行I/O端口的仿真 399
21.3定时器/计数器的仿真 401
21.3.1定时器/计数器T0和T1的仿真界面 401
21.3.2定时器/计数器T2的仿真界面 402
21.3.3定时器/计数器的仿真操作 402
21.4串行接口的仿真 405
21.4.1串行接口的仿真界面 405
21.4.2串行接口的仿真操作 406
21.4.3字符串输入/输出的仿真操作 407
21.5中断仿真 408
21.5.1中断系统的仿真界面 408
21.5.2中断系统的仿真操作 409
21.6看门狗定时器的仿真 410
21.6.1看门狗定时器的仿真界面 410
21.6.2看门狗定时器的仿真操作 411
21.7 A/D仿真 412
21.7.1 A/D转换器的仿真界面 412
21.7.2 A/D转换器的仿真操作 413
21.8 D/A仿真 414
21.8.1 D/A转换器的仿真界面 414
21.8.2 D/A转换器的仿真操作 415
21.9寄存器仿真 417
21.9.1寄存器的仿真界面 417
21.9.2寄存器的仿真操作 417
21.10低功耗仿真 418
21.11小结 420
第22章 Keil μVision3中的程序调试 421
22.1 Keil μVision3的程序调试器概述 421
22.2性能分析器 421
22.3代码覆盖分析器 422
22.4断点 423
22.5 Keil μ Vision3调试命令 423
22.5.1通用命令 424
22.5.2程序命令 427
22.5.3断点命令 429
22.5.4存储器命令 431
22.6小结 433
第五篇 典型案例篇 434
第23章 键盘程序设计 434
23.1键盘接口概述 434
23.1.1按键编码 434
23.1.2输入的可靠性 434
23.1.3程序检测及响应 435
23.2独立式按键及其编程接口 435
23.2.1独立式按键结构 435
23.2.2独立式按键程序设计 436
23.3 4×4矩阵式键盘及其编程接口 437
23.3.1扫描法及其程序设计 437
23.3.2线反转法及其程序设计 439
23.3.3中断法及其程序设计 440
23.4矩阵式键盘的接口实例 441
23.4.1电路图 442
23.4.2程序设计 443
23.4.3程序仿真 445
23.5小结 446
第24章 LED数码管显示 447
24.1 LED数码管概述 447
24.1.1 7段共阳极LED结构及显示段码 447
24.1.2 7段共阴极LED结构及显示段码 448
24.2单个LED驱动实例 449
24.2.1电路图 449
24.2.2程序设计 451
24.3多个LED驱动方式 453
24.3.1静态驱动显示 454
24.3.2动态驱动显示 457
24.3.3 LED驱动器 459
24.4多个LED驱动实例 463
24.4.1 LED驱动器电路图 463
24.4.2程序设计 464
24.5小结 467
第25章 LCD液晶显示模块 468
25.1 LCD液晶显示概述 468
25.1.1液晶的来源 468
25.1.2 LCD液晶显示器结构及原理 468
25.1.3液晶显示模块的种类 469
25.1.4液晶显示模块的优点 470
25.2液晶显示模块控制接口 470
25.2.1 LCD控制驱动器ST7920概述 470
25.2.2 ST7920功能说明 471
25.2.3 ST7920基本指令集 474
25.2.4 ST7920扩充指令集 477
25.2.5 ST7920的操作方式 478
25.2.6图形点阵式液晶显示模块 479
25.2.7图形点阵式液晶读写子函数 480
25.3汉字及图形显示实例 483
25.3.1电路设计 483
25.3.2建立项目 484
25.3.3汉字显示实例 484
25.3.4图形显示实例 486
25.3.5任意位置图形显示实例 488
25.4小结 490
第26章 D/A转换实例 491
26.1 D/A转换概述 491
26.1.1 D/A转换原理 491
26.1.2 D/A转换器的类型 492
26.1.3 D/A转换器的技术参数 493
26.2高速D/A转换芯片AD558 494
26.2.1 AD558简介 494
26.2.2 AD558电压输出模式 495
26.2.3 AD558的数据锁存 496
26.3光通信电压调制电路实例——电路部分 497
26.3.1相位调制的原理 497
26.3.2电压调制系统 498
26.3.3电路图 499
26.4光通信电压调制电路实例——程序部分 501
26.4.1系统状态编码 502
26.4.2建立项目 502
26.4.3主程序 502
26.4.4无调制模式函数 504
26.4.5调制模式1函数 504
26.4.6调制模式2函数 504
26.4.7调制模式3函数 505
26.4.8调制模式4函数 505
26.5光通信电压调制电路实例——仿真部分 505
26.5.1程序仿真 505
26.5.2运行效果 506
26.6小结 506
第27章 可编程逻辑器件CPLD 507
27.1可编程逻辑器件概述 507
27.1.1可编程逻辑器件的发展 507
27.1.2 CPLD的结构及其逻辑实现 507
27.1.3 FPGA的结构及其逻辑实现 509
27.2硬件描述语言简述 510
27.2.1硬件描述语言VHDL概述 511
27.2.2 VHDL程序结构 511
27.3 Altera常用CPLD芯片介绍 513
27.4使用CPLD扩展51单片机I/O接口 515
27.4.1 CPLD扩展单片机I/O接口原理 515
27.4.2电路图 516
27.5单片机程序设计 517
27.5.1项目建立 517
27.5.2主程序 517
27.6 VHDL程序设计 518
27.6.1项目建立 518
27.6.2程序设计 519
27.7程序仿真 521
27.7.1设计CPLD引脚 521
27.7.2仿真操作 522
27.8程序下载 523
27.9小结 524
第28章 51系列单片机读写I2C总线 525
28.1 I2C总线概述 525
28.1.1 I2C总线工作原理 525
28.1.2 I2C总线的电气结构和负载能力 526
28.1.3 I2C总线器件的寻址方式 526
28.2 I2C总线数据传输协议及其程序详解 527
28.2.1起始信号 527
28.2.2终止信号 528
28.2.3应答信号 528
28.2.4非应答信号 529
28.2.5应答位检查 530
28.2.6总线数据位 530
28.2.7写数据 530
28.2.8读数据 533
28.3 51单片机读写E2PROM 536
28.3.1串行E2PROM存储器简介 536
28.3.2电路设计 537
28.3.3程序设计 537
28.3.4仿真分析 539
28.4小结 540
第29章 单片机音乐播放 541
29.1单片机发音概述 541
29.1.1音调 541
29.1.2节拍 543
29.1.3单片机音乐播放的方法及音乐示例 543
29.2单片机音乐播放实例——电路图 547
29.3单片机音乐播放实例——程序设计 547
29.3.1建立项目 547
29.3.2程序设计 548
29.4小结 550
第30章 实时时钟芯片应用 551
30.1实时时钟芯片DS 1302概述 551
30.1.1实时时钟芯片DS 1302概述 551
30.1.2实时时钟芯片DS 1302命令字节 552
30.1.3实时时钟芯片DS 1302数据格式 552
30.1.4实时时钟芯片DS 1302数据传输方式 553
30.2单片机读写实时时钟芯片实例 554
30.2.1电路图 554
30.2.2建立项目 555
30.2.3主程序 555
30.2.4复位函数 558
30.2.5字节读取函数 558
30.2.6字节写入函数 559
30.2.7初始化函数 559
30.2.8时钟字节写入函数 560
30.2.9 RAM字节写入函数 560
30.2.10时钟寄存器内容显示函数 561
30.2.11多字节突发方式读取RAM函数 561
30.2.12多字节突发方式写入RAM函数 562
30.3小结 562
第31章 静态RAM存储器应用 563
31.1静态RAM存储器概述 563
31.1.1 RAM存储器概述 563
31.1.2静态RAM芯片HM628128 564
31.1.3静态RAM芯片HM628128的读写 564
31.2静态RAM存储器读写实例 565
31.2.1系统原理 566
31.2.2串行通信接口概述 566
31.2.3单片机与RS-232C的接口 571
31.2.4系统电路原理图 572
31.2.5建立项目 573
31.2.6主程序设计 573
31.2.7系统运行 576
31.3小结 577
第32章 道路交通灯控制系统 578
32.1交通灯控制系统概述 578
32.1.1道路交通灯概述 578
32.1.2交通灯控制系统 578
32.2交通灯控制系统原理图 579
32.3多任务交通灯控制系统程序 580
32.3.1建立项目 580
32.3.2多任务划分及程序设计 581
32.3.3串行通信函数 586
32.3.4获取命令函数 589
32.4小结 590
第33章 单总线温度传感器DS18S20 591
33.1单总线概述 591
33.2单总线温度传感器DS18S20 592
33.2.1温度传感器DS18520概述 592
33.2.2 DS18S20的供电方式 593
33.2.3 DS18S20的数据操作 593
33.3单片机读写温度传感器DS18S20实例 596
33.3.1电路图 596
33.3.2建立项目 597
33.3.3 DS18S20读写子函数 597
33.3.4主函数 603
33.3.5程序仿真 604
33.4小结 605
第34章 Microware串行总线E2 PROM的应用 606
34.1三线制Microware串行总线概述 606
34.2 Microware串行总线接口的E2PROM 607
34.2.1 Microware串行总线接口E2PROM概述 607
34.2.2 Microware串行总线接口E2PROM的指令 607
34.2.3 Microware串行总线接口E2PROM的指令时序 608
34.3 51系列单片机读写三线制E2PROM实例 611
34.3.1电路图 611
34.3.2建立项目 611
34.3.3三线制Microware串行总线读写子函数 612
34.3.4主程序 614
34.3.5 Microware串行总线仿真 616
34.4小结 617