目录 1
第1章 二进制定点数运算 1
1.1 加法 2
子程序1——双字节无符号数加法 2
子程序2——多字节无符号数加法 2
子程序3——双字节有符号数加法 3
子程序4——多字节有符号数加法 4
1.2 减法 5
子程序5——双字节无符号数减法 5
子程序6——多字节无符号数减法 6
子程序7——双字节有符号数减法 7
子程序8——多字节有符号数减法 8
1.3 乘法 9
子程序9——双字节无符号数乘法 9
子程序10——多字节无符号数乘法 10
子程序11——双字节有符号数乘法 11
子程序12——多字节有符号数乘法 13
1.4 除法 14
子程序13——双字节无符号数除法 14
子程序14——多字节无符号数除法 16
子程序15——双字节有符号数除法 19
子程序16——多字节有符号数除法 20
1.5 开方 21
子程序17——单字节开方 21
子程序18——双字节开方 22
子程序19——多字节开方 23
第2章 二进制浮点数运算 25
子程序20——双字节无符号数加法 26
子程序21——多字节无符号数加法 26
2.1 加法 26
子程序22——双字节有符号数加法 27
子程序23——多字节有符号数加法 28
2.2 减法 29
子程序24——双字节无符号数减法 29
子程序25——多字节无符号数减法 30
子程序26——双字节有符号数减法 31
子程序27——多字节有符号数减法 32
2.3 乘法 36
子程序28——双字节无符号数乘法 36
子程序29——多字节无符号数乘法 37
子程序30——双字节有符号数乘法 38
子程序31——多字节有符号数乘法 40
2.4 除法 42
子程序32——双字节无符号数除法 42
子程序33——多字节无符号数除法 43
子程序34——双字节有符号数除法 44
子程序35——多字节有符号数除法 46
第3章 十进制(BCD码)数运算 49
子程序37——双字节加法 50
3.1 加法 50
子程序36——单字节加法 50
子程序38——多字节加法 51
3.2 减法 51
子程序39——单字节减法 52
子程序40——双字节减法 52
子程序41——多字节减法 53
3.3 乘法 54
子程序42——单字节乘法 55
子程序44——多字节乘法 56
子程序43——双字节乘法 56
3.4 除法 57
子程序45——单字节除法 57
子程序46——双字节除法 58
子程序47——多字节除法 60
3.5 开方 62
子程序48——单字节开方 62
子程序49——双字节开方 63
子程序50——多字节开方 64
第4章 代码转换 67
子程序52——二位十六进制数转换为ASCII码 68
4.1 十六进制数到ASCII码的转换实例 68
子程序51——一位十六进制数转换为ASCII码 68
子程序53——多位十六进制数转换为ASCII码 69
4.2 ASCII码到十六进制数的转换实例 69
子程序54——ASCII码到十六进制数的转换 69
4.3 十六进制数到BCD码的转换实例 70
子程序55——单字节整数转换 70
子程序56——双字节整数转换 71
子程序57——多字节整数转换 71
子程序58——单字节十六进制小数转换成单字节BCD码小数 72
子程序59——双字节十六进制小数转换成双字节BCD码小数 73
子程序60——多字节十六进制小数转换成双字节BCD码小数 74
4.4 BCD码到十六制数的转换实例 76
子程序61——单字节整数转换 76
子程序62——双字节整数转换 77
子程序63——多字节整数转换 77
子程序64——小数转换 78
4.5 BCD码到ASCII码转换实例 79
子程序66——BCD码到ASCII码的转换 79
子程序65——双字节BCD码小数转换成双字节十六进制小数 79
4.6 ASCII码到BCD码转换实例 80
子程序67——ASCII码到BCD码的转换 80
4.7 二进制数到格雷码的转换实例 81
子程序68——二进制数到格雷码的转换 81
4.8 格雷码到二进制数的转换实例 82
子程序69——8位格雷码转换为二进制数 82
子程序70——9位格雷码转换为二进制数 82
第5章 数据变换 83
子程序71——二进制定点数移位 84
子程序72——BCD码移位 84
5.1 移位 84
5.2 求补 85
子程序73——二进制定点数求补 85
子程序74——BCD码求补 85
5.3 规格化 86
子程序75——二进制数左规 86
子程序76——二进制浮点数右规 87
子程序77——双字节定点数转换成格式化浮点数 88
子程序78——多字节二进制数转换为浮点数 89
子程序79——格式化浮点数转换成双字节定点数 90
子程序80——32位整数转换为4字节规格化浮点数 92
5.4 浮点数对阶 93
子程序81——多字节浮点数对阶 94
子程序82——多字节浮点数减法对阶 95
第6章 排序和查找 101
6.1 数据块的排序 102
子程序83——单字节无符号数据块排序 102
子程序84——单字节有符号数据块排序 103
子程序85——双字节无符号数据块排序 104
子程序87——浮点数顺序查找 105
子程序86——单字节顺序查找 105
6.2 数据的查找 105
子程序88——单字节折半查找 106
子程序89——单字节最值查找 108
子程序90——浮点数最值查找 110
子程序91——双字节字符串顺序查找 111
子程序92——N字节字符串顺序查找 112
6.3 线性表的排序 113
子程序93——插入排序 113
子程序94——选择排序 114
子程序95——冒泡排序 115
子程序96——并归排序 120
子程序97——快速排序 128
6.4 线性表的查找 131
子程序98——顺序查找单字节表 131
子程序99——顺序查找双字节表 131
子程序100——单字节无符号增序数据表对分查找 132
子程序101——双字节无符号增序数据表对分查找 133
子程序102——表的分块查找 134
子程序103——串的匹配 136
子程序104——求解阶乘问题的递归算法 138
6.5 递归实例 138
6.6 递推实例 141
子程序105——求解阶乘问题的递推算法 141
6.7 回溯实例 143
子程序106——用回溯算法求解简化背包问题 143
第7章 数学函数 147
7.1 浮点数操作与处理函数实例 148
子程序107——浮点数传送 148
子程序108——浮点数压栈 148
子程序110——浮点数代数值比较 149
子程序109——浮点数弹栈 149
子程序111——浮点绝对值函数 151
子程序112——浮点符号函数 151
子程序113——浮点取整函数 151
子程序114——浮点倒数函数 154
子程序115——浮点数牛顿迭代开平方 156
子程序116——浮点弧度数转换成浮点度数 157
子程序117——浮点度数转换成浮点弧度数 159
子程序118——最小二乘法拟合 162
子程序119——浮点数多项式计算 165
子程序120——浮点正弦函数 166
7.2 三角函数和反三角函数实例 166
子程序121——浮点余弦函数 173
子程序122——反正弦函数 175
子程序123——反余弦函数 177
子程序124——反正切函数 178
7.3 指数函数和对数函数实例 182
子程序125——以10为底的浮点指数函数 182
子程序126——以e为底的浮点指数函数 186
子程序127——以2为底的浮点指数函数 189
子程序128——以10为底的浮点对数函数 197
子程序129——以e为底的浮点对数函数 204
第8章 树和图 215
8.1 二叉树的遍历 216
子程序130——编号遍历 216
子程序131——前根遍历 217
子程序132——中根遍历 219
子程序133——后跟遍历 221
8.2 普通树的遍历实例 223
子程序134——利用父指针数组的普通树前根遍历算法 223
子程序135——利用子指针数组的普通树前根遍历算法 226
子程序136——利用子指针数组的普通树后根遍历算法 229
8.3 图的遍历实例 232
子程序137——利用邻接矩阵的图广度优先遍历算法 232
子程序138——利用邻接表的图广度优先遍历算法 235
子程序139——利用邻接矩阵的图深度优先遍历算法 239
子程序140——利用邻接表的图深度优先遍历算法 242
子程序141——利用邻接表图的深度优先生成树生成算法 245
8.4 网络最小生成树和最短路径实例 249
子程序142——利用邻接矩阵的网络最小生成树算法 249
子程序143——利用邻接表的图最短路径算法 252
第9章 延时与跳转控制 257
9.1 循环延时 258
子程序144——一重循环延时 258
子程序145——多重循环延时 258
9.2 简单延时 259
子程序146——精确延时 259
子程序147——突发等待延时 260
9.3 分支程序 261
子程序148——无条件转移 261
子程序149——条件分支转移 262
9.4 散转程序实例 265
子程序150——N种分支的散转程序 266
子程序151——256种分支的散转程序 267
第10章 人机交互接口 269
10.1 键盘接口 270
子程序152——键盘输入需要解决的问题 270
子程序153——独立式键盘接口 270
子程序154——8279键盘接口 271
子程序155——拨码盘接口 272
子程序156——键盘扫描 273
10.2 LED显示接口 274
子程序157——六位数码管时钟显示 274
子程序158——串行口扩展显示 280
子程序159——基于8155软件译码键盘显示 281
子程序160——基于8279的显示器 282
10.3 LCD显示接口 283
子程序161——段式LCD显示 283
子程序162——字符型LCD显示 284
子程序163——图形LCD显示 287
子程序164——LCD点阵字符型液晶显示 290
10.4 打印机接口实例 294
子程序165——LH-GP16打印机接口 294
子程序166——XLF微型打印机接口 295
10.5 CRT显示实例 297
子程序167——CRT显示 297
第11章 单片机测控接口 301
11.1 8位A/D转换器ADC0809接口实例 302
子程序168——用中断方式读取转换结果的数字量 302
子程序169——AD578模数转换 303
11.2 12位A/D转换器AD578/AD678/AD1678接口实例 303
11.3 12位串行A/D转换器接口实例 304
子程序170——TLC2543数据采集 304
11.4 串行A/D转换器MAX187接口实例 305
子程序171——MAX187数据采集 305
11.5 16位A/D转换器ADC1 143接口实例 307
子程序172——ADC1143数模转换 307
11.6 单路8位D/A转换器DAC0832接口实例 308
子程序173——DAC0832同步波形输出 308
11.7 单路10位D/A转换器AD7520接口实例 309
子程序174——AD7520正弦波输出 309
子程序175——AD7543数模转换 310
11.8 12位串行D/A转换器7543接口实例 310
11.9 16位D/A转换器AD1147接口实例 311
子程序176——AD1147数模转换 311
第12章 51单片机内部资源编程实例 313
12.1 51单片机I/O口的应用 314
子程序177——P1口的应用 314
子程序178——P0口的扩展使用 314
子程序179——并行I/O口编程 315
子程序180——单片机的FPGA并行配置 316
子程序181——利用T0、T1作为外部中断源 318
12.2 中断服务子程序 318
子程序182——INT0中断 319
12.3 定时器/计数器应用 320
子程序183——定时器/计数器0工作在模式0方式 321
子程序184——定时器/计数器0工作在模式1方式 322
子程序185——定时器/计数器0工作在模式2方式 323
子程序186——定时器/计数器0工作在模式3方式 323
12.4 程序存储器的扩展 325
子程序187——扩展EPROM的典型电路 325
子程序188——扩展EPROM 325
子程序189——扩展EEPROM的典型电路 326
子程序190——扩展EEPROM 327
12.5 数据存储器的扩展 328
子程序191——数据存储区扩展的典型电路 328
子程序192——扩展RAM到扩展RAM的数据复制 328
子程序193——扩展RAM到片内RAM数据复制 329
第13章 单片机数据传输接口 331
13.1 串行接口 332
子程序194——RS-232-C/RS-485接口标准 332
子程序195——数据传输率发生 332
子程序196——单片机RS-485接口 334
子程序197——用外部中断配合查询方式接收串行数据 337
子程序198——PC机和51单片机的快速串行通信 338
子程序199——单片机多机通信 340
13.2 USB总线接口 345
子程序200——USB总线协议 345
子程序201——通用USB程序模块 347
13.3 I2C总线接口 354
子程序202——基于I2C的时钟模块X1203 354
子程序203——用两个普通IO模拟I2C总线 356
子程序204——SPI和Microwire串行总线协议 360
13.4 SPI和Microwire串行总线接口 360
子程序205——SPI接口LCD显示模块EDM1079 362
子程序206——SPI接口语音录放模块ISD4104 364
子程序207——SPI接口时钟日历模块DS1302 365
子程序208——Microwire接口E2PROM存储器NM93Cx6应用 368
13.5 1-WIRE总线接口 370
子程序209——单总线数据通信协议 370
子程序210——单总线数字温度传感器 370
13.6 CAN总线接口 372
子程序211——CAN接口汇编语言编程 373
子程序212——CAN接口C语言编程 381
13.7 单片机的红外接口 389
子程序213——遥控显示数码0123456789 389
第14章 波形发生与控制 395
14.1 波形发生实例 396
子程序214——锯齿波信号发生 396
子程序215——单极性PWM信号发生 396
子程序216——正弦信号发生 397
14.2 控制实例 397
子程序217——位置式PID控制 398
子程序218——增量式PID控制 409
第15章 C51单片机软件抗干扰和数字滤波 419
15.1 单片机执行过程中的软件抗干扰措施 420
子程序219——采用指令冗余对程序“跑飞”的软件处理 420
子程序220——采用软件陷阱对程序“跑飞”的软件处理 421
子程序221——软件“看门狗”对程序“跑飞”的处理 424
子程序222——通过“复位”使系统恢复正常 425
15.2 信息冗余校验实例 426
子程序223——汉明码校验实例 426
子程序224——循环冗余校验 427
15.3 数字滤波子程序 428
子程序225——程序判断滤波 429
子程序226——中值滤波 432
子程序227——算术均值滤波 433
子程序228——加权平均滤波 439
子程序229——滑动平均滤波 440
子程序230——防脉冲干扰数字滤波 443
子程序231——一阶滞后滤波 445
附录1 ATMEL8051系列单片机 447
附录2 单片机常见缩略语 451
附录3 常用存储器型号 455