上篇 宏汇编程序设计 3
第一部分 MPASM宏汇编 3
第1章 MPASM概述 3
1.1 介绍 3
1.2 重点 3
1.3 什么是MPASM 3
1.4 MPASM能做什么 4
1.5 软件代码移植 4
1.6 兼容性问题 4
第2章 MPASM的安装与入门 5
2.1 介绍 5
2.2 重点 5
2.3 安装 5
2.4 汇编器概述 6
2.5 汇编器输入/输出文件 7
2.5.1 源代码格式(.ASM) 7
2.5.2 列表文件格式(.LST) 9
2.5.3 错误文件格式(.ERR) 10
2.5.4 十六进制文件格式(.HEX、.HXL、.HXH) 11
2.5.5 符号与调试文件格式(.COD) 11
2.5.6 目标文件格式(.O) 11
第3章 基于DOS的MPASM汇编 12
3.1 介绍 12
3.2 重点 12
3.3 命令行界面 12
3.4 DOS Shell界面 14
3.4.1 Source File:源文件 14
3.4.2 Processor Type:处理器类型 14
3.4.3 Error File:错误文件 14
3.4.4 Cross Reference File:交叉引用文件 15
3.4.5 Listing File:列表文件 15
3.4.6 HEX Dump Type:HEX文件输出类型 15
3.4.7 Assemble to Object File:汇编成目标文件 15
第4章 基于Windows和MPLAB的MPASM汇编 16
4.1 介绍 16
4.2 重点 16
4.3 Windows界面 16
4.4 MPLAB“工程”和MPASM 17
4.5 设置MPLAB以运行MPASM 18
4.6 生成输出文件 20
4.7 MPLAB/MPASM疑难解答 20
第5章 伪指令 22
5.1 介绍 22
5.2 重点 22
5.3 伪指令汇总 22
5.4 _ _BADRAM:标注不可用RAM 25
5.5 BANKISEL:产生间接堆(Bank)选择码 25
5.6 BANKSEL:产生堆选择码 26
5.7 CBLOCK:定义常量数据块 26
5.8 CODE:开始一个目标代码的选项 27
5.9 _ _CONFIG:设置处理器配置位 28
5.10 CONSTANT:说明符号常量 28
5.11 DA:将字符串存入程序存储器中 29
5.12 DATA:建立数字和文本数据 29
5.13 DB:说明一个字节数据 30
5.14 DE:说明一个EEPROM字节 31
5.15 #DEFINE:定义一个文本替换符号 31
5.16 DT:定义表格 32
5.17 DW:说明一个字数据 32
5.18 ELSE:开始IF汇编块的另一分支 33
5.19 END:程序结束标志 33
5.20 ENDC:结束一个自动常量块 34
5.21 ENDIF:结束条件汇编 34
5.22 ENDM:结束宏定义 34
5.23 ENDW:WHILE循环的结尾 35
5.24 EQU:定义一个汇编常量 35
5.25 ERROR:产生一条错误信息 36
5.26 ERRORLEVEL:设置信息优先级 36
5.27 EXITM:退出宏 37
5.28 EXPAND:展开宏列表 38
5.29 EXTERN:定义外部定义标号 38
5.30 FILL:指定内存填充值 39
5.31 GLOBAL:出口标号 39
5.32 IDATA:开始目标文件初始数据 40
5.33 _ _IDLOCS:设置处理器ID位置 40
5.34 IF:开始条件汇编 41
5.35 IFDEF:如果符号已被定义则执行 42
5.36 IFNDEF:如果符号未定义则执行 42
5.37 INCLUDE:包含文件 43
5.38 LIST:列表选项 43
5.39 LOCAL:说明局部变量 44
5.40 MACRO:宏定义 45
5.41 _ _MAXRAM:定义最大的RAM位置 46
5.42 MESSG:建立用户自定义信息 46
5.43 NOEXPAND:关闭宏扩展 47
5.44 NOLIST:关闭列表选项 47
5.45 ORG:设置程序起始地址 47
5.46 PAGE:插入页到列表中 48
5.47 PAGESEL:产生页选择码 48
5.48 PROCESSOR:设置处理器类型 49
5.49 RADIX:设置默认的进制类型 49
5.50 RES:保留存储器 50
5.51 SET:定义一个汇编变量 50
5.52 SPACE:在列表中插入空行 51
5.53 SUBTITLE:指定程序子标题 51
5.54 TITLE:指定程序标题 52
5.55 UDATA:声明非初始化数据区 52
5.56 UDATA_ASC:声明非初始化快速存取数据区 53
5.57 UDATA_OVR:声明非初始化可覆盖数据区 53
5.58 UDATA_SHR:声明非初始化可共享数据区 54
5.59 #UNDEFINE:删除一个替换符号 55
5.60 VARIABLE:说明符号变量 55
5.61 WHILE:条件为真时执行循环体 56
第6章 使用MPASM建立可重定位目标代码 57
6.1 概述 57
6.2 重点 57
6.3 头文件 57
6.4 程序存储器 58
6.4.1 绝对代码 58
6.4.2 可重定位代码 58
6.4.3 可重定位代码范例 58
6.5 指令操作符 59
6.6 RAM定位 59
6.6.1 绝对代码 60
6.6.2 可重定位代码 60
6.6.3 可重定位代码(初始化数据) 60
6.7 配置位和ID位置 61
6.8 操作其他模块的标号 61
6.8.1 可重定位代码,定义模块 61
6.8.2 可重定位代码,参考模块 61
6.9 分页和分堆的问题 62
6.9.1 绝对代码 62
6.9.2 可重定位代码 62
6.10 不再使用的伪指令 63
6.10.1 绝对代码 63
6.10.2 可重定位代码 63
6.11 生成目标模块 63
6.12 代码范例 64
6.12.1 绝对代码 64
6.12.2 可重定位代码,调用文件 65
6.12.3 可重定位代码,库例程 66
第7章 宏语言 67
7.1 概述 67
7.2 重点 67
7.3 宏语法 67
7.4 宏伪指令 68
7.5 文本替换 68
7.6 宏的用法 69
7.7 代码范例 69
7.7.1 8×8乘法 69
7.7.2 常量比较 70
第8章 表达式语法与操作 72
8.1 概述 72
8.2 重点 72
8.3 文本字符串 72
8.4 数值常量和进制类型 73
8.5 字节的高/低/上位 75
8.5.1 语法 75
8.5.2 描述 75
8.5.3 范例 75
8.6 增/减操作(++/--) 76
8.6.1 语法 76
8.6.2 描述 76
8.6.3 范例 76
第9章 初始化代码范例 77
9.1 介绍 77
9.2 重点 77
9.3 初始化代码范例 77
第二部分 MPLINK链接程序 78
第10章 MPLINK概述 78
10.1 介绍 78
10.2 重点 78
10.3 什么是MPLINK 78
10.4 MPLINK有什么作用 79
10.5 MPLINK能帮你做些什么 79
10.6 MPLINK范例 80
10.7 支持平台 80
第11章 MPLINK的安装与入门 81
11.1 介绍 81
11.2 重点 81
11.3 安装MPLINK 81
11.4 链接器概述 82
11.5 链接器输入/输出文件 83
11.5.1 目标文件(.O) 83
11.5.2 库文件(.LIB) 83
11.5.3 链接器描述文件(.LKR) 84
11.5.4 COFF文件(.OUT,.COF) 84
11.5.5 代码与调试文件(.COD) 84
11.5.6 HEX文件(.HEX) 84
11.5.7 绝对列表文件(.LST) 84
11.5.8 映射文件(.MAP) 84
第12章 在DOS下使用MPLINK 87
12.1 概述 87
12.2 重点 87
12.3 链接器命令行的参数选择 87
第13章 在Windows下的MPLAB软件包中使用MPLINK 89
13.1 概述 89
13.2 重点 89
13.3 “工程”和链接 89
13.4 设置MPLAB以便使用MPLINK 90
13.5 生成输出文件 93
13.6 MPLAB/MPLINK疑难解答 93
第14章 MPLINK链接器命令 94
14.1 概述 94
14.2 重点 94
14.3 链接器命令定义 94
14.4 命令行信息 95
14.5 存储器区段定义 96
14.5.1 定义ROM存储器区域 96
14.5.2 定义ROM存储器区域——范例 97
14.5.3 定义RAM存储器区域 98
14.5.4 定义RAM存储器区域——范例 98
14.6 逻辑区段定义 100
14.7 堆栈定义 101
14.8 关于链接器描述的注意事项 101
第15章 链接器的处理过程 103
15.1 介绍 103
15.2 重点 103
15.3 链接过程概述 103
15.4 链接器定位原理 104
15.4.1 绝对分配 104
15.4.2 可重定位分配 104
15.5 重定位范例 105
15.6 初始化数据 106
第16章 应用范例1 107
16.1 重点 107
16.2 概述 107
16.3 建立应用 108
16.4 源代码 109
16.4.1 eeprom.asm 109
16.4.2 eeprom1.c 110
16.4.3 eeprom.lkr 110
第17章 应用范例2 112
17.1 重点 112
17.2 概述 112
17.3 建立应用程序 113
17.4 源代码:启动引导器(BootLoader) 114
17.4.1 boot.c 114
17.4.2 loader.lkr 116
17.5 源代码:支持软件 116
17.5.1 firmware.c 117
17.5.2 fwtables.c 118
17.5.3 fwentry.h 118
17.5.4 fwentry.asm 118
17.5.5 firmware.lk 119
第18章 应用范例3 120
18.1 重点 120
18.2 概述 120
18.3 创建应用程序 121
18.4 源代码 122
18.4.1 memmapio.c 122
18.4.2 memmapio.lkr 123
第19章 应用范例4 126
19.1 重点 126
19.2 概述 126
19.3 建立应用程序 127
19.4 源代码 128
19.4.1 morse756.lkr 128
19.4.2 main.c 130
19.4.3 morse.h 130
19.4.4 morse.c 131
19.4.5 portb.h 132
19.4.6 portb.c 132
19.4.7 usart.h 133
19.4.8 usart.c 133
19.4.9 delayms.h 134
19.4.10 delayms.asm 134
第三部分 MPLIB库管理程序 136
第20章 MPLIB概述 136
20.1 介绍 136
20.2 重点 136
20.3 什么是MPLIB 136
20.4 MPLIB是干什么的 136
20.5 MPLIB能帮你做什么 137
第21章 MPLIB软件包的安装与入门 138
21.1 介绍 138
21.2 重点 138
21.3 MPLIB安装 138
21.4 MPLIB库概述 139
第22章 使用MPLIB软件包 140
22.1 介绍 140
22.2 重点 140
22.3 MPLIB的使用格式 140
22.4 应用范例 141
22.5 一些建议与提示 141
附录A 十六进制文件格式 142
A.1 介绍 142
A.2 重点 142
A.3 INTEL-HEX格式(.HEX) 142
A.4 8bit切分格式(.HXL/HXH) 143
A.5 32bit十六进制格式(.HEX) 143
附录B 快速参考 145
B.1 介绍 145
B.2 重点 145
B.3 MPASM快速参考 145
B.4 PICmiro系列指令集中用到的关键字 150
B.5 12bit核指令集 150
B.6 14bit核指令集 152
B.7 16bit核指令集 154
B.8 增强型16bit核指令集中涉及的关键字 157
B.9 增强型16bit核指令集 158
B.10 十六进制到十进制代码的转换 162
B.11 ASCII代码集 163
附录C MPASM错误/警告/信息 164
C.1 概述 164
C.2 重点 164
C.3 错误 164
C.4 Warnings 171
C.5 信息 174
附录D MPLINK错误/警告 176
D.1 介绍 176
D.2 重点 176
D.3 分析错误 176
D.4 链接错误 177
D.5 链接警告 180
D.6 库文件错误信息 181
D.7 COFF文件错误 181
D.8 COFF到COD转换错误 183
D.9 COFF到COD转换警告 184
附录E MPLIB出错信息 185
E.1 介绍 185
E.2 重点 185
E.3 分析错误 185
E.4 库文件错误 186
E.5 COFF文件错误 186
下篇 MPLAB IDE集成开发环境 189
第一部分 MPLAB IDE集成开发环境介绍 189
第1章 MPLAB概述 189
1.1 概述 189
1.2 重点 189
1.3 什么是MPLAB IDE 189
1.4 MPLAB IDE能做什么 190
1.5 MPLAB IDE集成开发环境 190
1.6 MPLAB IDE开发工具 191
第2章 MPLAB IDE的安装与入门 192
2.1 概述 192
2.2 重点 192
2.3 对于计算机主机的配置要求 192
2.4 从哪里得到软件包 193
2.5 安装MPLAB IDE 193
2.6 卸载MPLAB IDE集成开发环境 195
第3章 MPLAB IDE使用入门——实例 196
3.1 概述 196
3.2 重点 196
3.3 设置开发模式 197
3.4 建立一个简单的新“工程” 198
3.5 建立一个简单的源文件 202
3.6 输入源文件代码 203
3.7 对源文件进行汇编 204
3.8 运行你的程序 205
3.9 打开其他窗口帮助调试 206
3.10 使用“监视窗口” 206
3.10.1 建立一个监视窗口 206
3.10.2 保持监视窗口参数的设置 207
3.10.3 编辑监视窗口 207
3.11 设置断点 208
3.12 总结 209
第4章 MPLAB IDE“工程”指南 211
4.1 概述 211
4.2 重点 211
4.3 MPLAB IDE“工程”概述 211
4.4 建立一个只有一个MPASM源文件的“工程” 213
4.4.1 设置开发模式 213
4.4.2 新“工程” 214
4.4.3 “工程” 214
4.4.4 设置“节点”属性 214
4.4.5 增加“节点” 216
4.4.6 创建“工程” 217
4.4.7 疑难问题解答 217
4.4.8 “工程”窗口 217
4.4.9 总结 218
4.5 不用建立“工程”编译单个MPASM源文件 218
4.5.1 设置开发模式 219
4.5.2 打开源文件 219
4.5.3 编译源文件 220
4.5.4 疑难问题解答 220
4.5.5 总结 221
4.6 使用MPLINK创建一个有多个源文件的“工程” 221
4.6.1 设置开发模式 222
4.6.2 新“工程” 222
4.6.3 设置节点属性 222
4.6.4 添加第一个源文件节点 223
4.6.5 添加新的源文件 224
4.6.6 选择链接器描述文件(脚本文件)(Linker Script) 224
4.6.7 创建工程(Make Project) 225
4.6.8 疑难问题解答 225
4.6.9 工程窗口 227
4.6.10 总结 227
4.7 使用其他开发工具创建“工程” 228
第二部分 使用MPLAB IDE 229
第5章 MPLAB编辑器 229
5.1 概述 229
5.2 重点 229
5.3 什么是MPLAB编辑器 229
5.4 MPLAB编辑器可以帮你做什么 230
5.5 MPLAB编辑器的特点 230
5.5.1 文件大小 230
5.5.2 Windows下MDI的风格 230
5.5.3 重新配置键盘 231
5.5.4 轻松地“创建”文件 231
5.6 MPLAB编辑器的功能 231
5.6.1 对文件的操作 231
5.6.2 对模板的操作 231
5.6.3 文本处理 232
5.6.4 编辑器窗口模式 233
5.6.5 识别C语言格式 233
第6章 调试和MPLAB SIM模拟器 235
6.1 概述 235
6.2 重点 235
6.3 MPLAB IDE调试功能 235
6.4 “实时”执行程序 236
6.4.1 在MPLAB SIM模拟器模式下执行程序 236
6.4.2 慢速模式(Animate Mode,动画模式) 237
6.5 MPLAB SIM模拟器环境 237
6.5.1 I/O时序 237
6.5.2 执行速度 237
6.5.3 开销成本 238
6.5.4 调试工具 238
6.6 使用模拟器需要考虑的问题 238
6.7 断点和跟踪点 239
6.7.1 实时断点(Real-TimeBreak Points) 240
6.7.2 实时跟踪断点 242
6.7.3 给断点和跟踪点分配“通过计数器” 243
6.8 条件断点 244
6.8.1 条件 245
6.8.2 跟踪数据 245
6.8.3 单周期 245
6.8.4 多周期 245
6.9 “激励”功能 246
6.9.1 异步激励 246
6.9.2 管脚激励文件 247
6.9.3 寄存器激励文件 249
6.9.4 时钟模拟 252
6.10 12位核芯片的模拟 253
6.10.1 基于12位核芯片的处理器系列 253
6.10.2 I/O管脚 253
6.10.3 CPU模型 253
6.10.4 外设 254
6.11 14位核芯片的模拟 254
6.11.1 基于14位核芯片的处理器系列 254
6.11.2 I/O管脚 254
6.11.3 中断 255
6.11.4 CPU模式 255
6.11.5 特殊功能寄存器 256
6.11.6 外设 256
6.12 16位核芯片的模拟 258
6.12.1 基于16位核芯片的处理器系列 258
6.12.2 I/O管脚 258
6.12.3 中断 259
6.12.4 CPU模型 259
6.12.5 特殊寄存器 260
6.12.6 外设 260
6.12.7 存储器模式 261
6.13 扩展型16位核芯片的模拟 261
6.13.1 16位核的处理器 261
6.13.2 I/O管脚 262
6.13.3 中断 262
6.13.4 CPU模型 262
6.13.5 特殊功能寄存器 263
6.13.6 外设 263
第三部分 MPLAB IDE参考资料 265
第7章 MPLAB编辑器工具栏和菜单的使用 265
7.1 概述 265
7.2 重点 265
7.3 MPLAB IDE桌面 266
7.3.1 工具栏 266
7.3.2 状态栏 267
7.3.3 系统菜单 267
7.4 文件菜单 268
7.4.1 新建文件 268
7.4.2 打开已有文件 268
7.4.3 查看文件 269
7.4.4 保存文件 269
7.4.5 关闭文件 271
7.4.6 导入 271
7.4.7 导出(Export) 273
7.4.8 打印(Ctrl+P) 275
7.4.9 打印机设置 276
7.4.10 退出(Alt+F4) 277
7.4.11 最近使用过的文件列表(Most-Recently-Used File List) 277
7.5 “工程”菜单 277
7.6 编辑菜单 278
7.6.1 通用编辑选项 278
7.6.2 模板选项 281
7.6.3 文本选项 285
7.7 调试菜单 286
7.7.1 整步运行(Run) 286
7.7.2 执行指令(Execute) 288
7.7.3 模拟器“激励” 290
7.7.4 调试位置对中 290
7.7.5 断点的设置 290
7.7.6 跟踪设置 293
7.7.7 触发器输入/输出设置 296
7.7.8 触发器输出点设置 297
7.7.9 清除所有的点 298
7.7.10 复杂的触发器设置 298
7.7.11 代码区域 298
7.7.12 清除程序内存(Ctrl+Shift+F2) 299
7.7.13 系统复位(Ctrl+Shift+F3) 299
7.7.14 上电复位(Ctrl+Shift+F5) 300
7.8 烧写器菜单 301
7.9 选项菜单 303
7.9.1 开发模式选择 303
7.9.2 窗口设置 310
7.9.3 当前编辑模式 311
7.9.4 复位编辑器模式 313
7.9.5 环境设置 313
7.9.6 烧写器选项 323
7.10 工具菜单(F11) 324
7.10.1 在Window下运行DOS命令 324
7.10.2 在Window下重复DOS命令(Ctrl+F11) 325
7.10.3 检测PICMASTER仿真器 325
7.10.4 检测MPLAB ICE 325
7.11 窗口菜单 326
7.11.1 程序存储器 326
7.11.2 跟踪存储器 329
7.11.3 EEPROM存储器 330
7.11.4 校正数据 330
7.11.5 绝对列表 331
7.11.6 映射文件 332
7.11.7 堆栈 333
7.11.8 文件寄存器(File Registers) 335
7.11.9 特殊功能寄存器 336
7.11.10 显示符号列表(Ctrl+F8) 337
7.11.11 跑表(Stopwatch) 338
7.11.12 “工程”窗口 338
7.11.13 “监视”窗口 339
7.11.14 修改(Modify) 342
7.11.15 水平排列(Tile Horizontal) 343
7.11.16 垂直排列(Tile Vertical) 343
7.11.17 层叠(Cascade) 344
7.11.18 全部图标化 344
7.11.19 排列图标 344
7.11.20 打开窗口 344
7.12 帮助菜单 345
7.12.1 发布信息(Shift+F1) 345
7.12.2 开发工具发布信息 345
7.12.3 MPLAB处理IDE帮助 345
7.12.4 编辑器帮助 345
7.12.5 错误帮助 345
7.12.6 MPASM帮助 346
7.12.7 MPLINK帮助 346
7.12.8 开发工具帮助 346
7.12.9 关于 346
第8章 MPLAB IDE工具栏和状态栏的定义 347
8.1 MPLAB IDE工具栏 347
8.1.1 编辑工具栏 347
8.1.2 调试工具栏 348
8.1.3 “工程”工具栏 348
8.1.4 用户定义工具栏 349
8.2 MPLAB IDE状态栏 350
附录A MPLAB IDE中使用的快捷键及其功能 351
A.1 概述 351
A.2 MPLAB IDE快捷键及其功能 351
附录B MPLAB编辑器默认的命令键 357
B.1 概述 357
B.2 重点 357
B.3 功能键 357
B.4 移动键 358
B.5 控制键(Control Keys) 359
B.6 格式和编辑键(Formatting and Editing Keys) 360
附录C MPLAB IDE中使用的文件扩展名 361
附录D 缩略语 362