第1章 C语言概述1.1 注释11.2 标志符和关键字11.3 变量和常量31.4 基本数据类型31.4.1 整型数据41.4.2 浮点型数据51.4.3 字符型数据51.5 构造类型61.5.1 数组61.5.2 结构81.5.3 联合111.5.4 枚举131.6 指针151.6.1 指针变量151.6.2 指针运算符161.6.3 指针运算161.6.4 数组的指针171.6.5 指针数组171.6.6 多级指针181.6.7 数组与指针191.7 运算符和表达式201.7.1 运算符201.8 类型转换261.8.1 算术转换261.8.2 强制类型转换271.9 表达式271.10 结构化控制语句281.10.1 语句281.10.2 结构化控制语句291.10.3 控制结构化36第2章 C编译器2.1 编译过程概述382.1.1 编译382.1.2 编译器的输入402.2 程序块与链接器492.2.1 程序块492.3 程序块链接522.3.1 程序块分组522.3.2 程序块配置532.3.3 链接器的程序块放置选项542.3.4 链接时的问题602.3.5 修改链接器选项62第3章 命令行驱动器3.1 长命令行653.2 默认库653.3 标准运行时间代码653.4 PICC18编译器选项653.4.1 processor定义处理器类型673.4.2 Aaddress指定ROM偏移量673.4.3 Aoption指定附加汇编器选项673.4.4 AAHEX生成美国式自动符号Hex673.4.5 ASMLIST生成.LST汇编程序文件673.4.6 BIN生成二进制输出文件673.4.7 BL选择大存储空间模块683.4.8 BS选择小存储空间模块683.4.9 C编译成目标文件683.4.10 CKfile生成校验和683.4.11 CP16使用16位宽程序空间指针683.4.12 CP24使用24位宽的程序空间指针693.4.13 CRfile生成交叉参考列表693.4.14 D24使用24位双精度值693.4.15 D32使用32位双精度值693.4.16 Dmacro定义宏693.4.17 E定义编译错误的格式703.4.18 Efile重定向编译器错误信息输出至文件713.4.19 FDOUBLE使能快速32位浮点数学程序723.4.20 FAKELOCAL提供MPLAB特殊调试信息723.4.21 Gfile生成源代码的符号文件723.4.22 HELP帮助733.4.23 ICD MPLAB的编译代码733.4.24 I path加入搜索路径733.4.25 INTEL生成INTEL十六进制文件733.4.26 L library库浏览733.4.27 L option指定链接器的附加选项743.4.28 Mfile生成映像文件753.4.29 MPLAB用MPLAB IDE编译和调试程序753.4.30 MOT生成Motorola S Record格式的十六进制文件753.4.31 Nsize标志符长度设定753.4.32 NODEL不删除临时文件和中间结果文件753.4.33 NOERRATA勘误表修改不使能753.4.34 NORT不链接标准运行时间启动模块753.4.35 O调用优化器763.4.36 Ofile指定输出文件763.4.37 O option对Objtohex指定一个选项763.4.38 P汇编文件的预处理763.4.39 PRE生成预处理后的源代码763.4.40 PROTO生成原型763.4.41 PSECTMAP存储器的使用情况773.4.42 q退出模式783.4.43 RESRAMranges[,ranges]保留指定的RAM地址范围783.4.44 RESROMranges[,ranges]保留指定的ROM地址范围793.4.45 ROMranges指定外部存储器793.4.46 S编译汇编程序代码793.4.47 SIGNED_CHAR使符号类型有正负之分803.4.48 STRICT完全满足ANSI标准803.4.49 TEK生成Tektronix格式的十六进制文件803.4.50 Umacro取消一个已定义的宏803.4.51 UBROF生成UBROF格式的输出文件803.4.52 V详细的编译信息803.4.53 Wlevel配置警告级813.4.54 X消去局部符号813.4.55 Zg[level]全局优先级81第4章 PICC18 C语言的特性及运行环境4.1 ANSI标准824.1.1 与ANSI C标准的不同点824.1.2 执行行为的定义824.2 有关处理器的特点824.2.1 处理器支持824.2.2 配置熔丝位834.2.3 ID区域 854.2.4 EEPROM数据864.2.5 运行时在线存取EEPROM和Flash864.2.6 位指令874.2.7 多字节的SFR寄存器组874.3 文件874.3.1 源程序文件874.3.2 输出文件格式884.3.3 符号文件884.3.4 标准库894.3.5 外围模块库904.3.6 运行启动模块904.4 支持的数据类型和变量924.4.1 数制及常量934.4.2 位变量和位数据类型944.4.3 8位整型数据类型和变量954.4.4 16位整型数据类型964.4.5 32位整型数据类型和变量964.4.6 浮点型和变量974.4.7 结构与联合984.4.8 标准类型的限定词994.4.9 特殊类型的限定词1004.4.10 bdata类型限定词1014.4.11 指针1024.5 存储器分类与目标对象的布置1044.5.1 局部变量1044.5.2 绝对变量1054.5.3 程序空间的目标对象1054.6 函数1064.6.1 函数变量的传递1064.6.2 函数返回值1074.6.3 存储器模式和用法1084.7 寄存器使用1094.8 算子1094.8.1 整合1094.8.2 整型的移位运用1104.8.3 整型数的除法运算和模运算1114.9 程序块1114.10 C中断处理1134.10.1 中断函数1134.10.2 中断现场保护1144.10.3 现场恢复1144.10.4 中断级别1154.10.5 中断寄存器1164.11 C语言与汇编语言的混合编程1164.11.1 外部的汇编函数1164.11.2 在汇编程序内访问C目标对象1174.11.3 #asm,#endasm和asm()1184.12 预处理1194.12.1 预处理程序标志1194.12.2 宏的预定义1204.12.3 pragma伪指令1214.13 链接程序1244.13.1 库文件模块的替换1244.13.2 标志检测1254.13.3 链接器定义的符号1264.14 标准I/O函数和串行I/O1264.15 调试信息126第5章 汇编器5.1 汇编器的用法1285.2 汇编器选项1295.3 汇编语言1315.3.1 汇编格式差异1315.3.2 特殊注释字符串1325.3.3 预定义宏1325.3.4 字符集1325.3.5 常量1325.3.6 分隔符1335.3.7 特殊字符1335.3.8 标志符1335.3.9 字符串1355.3.10 表达式1355.3.11 语句格式1365.3.12 程序块1375.3.13 汇编标志符1385.3.14 宏的符号1485.3.15 汇编控制命令149第6章 链接器及其应用6.1 简述1516.2 重定位与程序块1516.3 程序块1526.4 局部程序块1526.5 全局符号1526.6 链接地址和装载地址1536.7 操作1536.7.1 链接器选项中的数字1546.7.2 Aclass=low high,…指定类的地址范围1546.7.3 Cx调用列表选项1556.7.4 Cpsect=class指定全局程序块的类名1556.7.5 Dclass=delta指定类的DELTA值1556.7.6 Dsymfile生成旧式的标志文件1556.7.7 Eerrfile写错误信息到ERRFILE1556.7.8 F生成只带标志记录的.OBJ文件1566.7.9 Gspec指定段选择器1566.7.10 Hsymfile1566.7.11 H+symfile1576.7.12 Jerrcount1576.7.13 K1576.7.14 I1576.7.15 L1576.7.16 LM1576.7.17 Mmapfile1576.7.18 N( Ns, Nc)1586.7.19 Ooutfile1586.7.20 Pspec1586.7.21 Qprocessor1596.7.22 S1596.7.23 Sclass=limit[,bound]1606.7.24 Usymbol1606.7.25 Vavmap1606.7.26 Wnum1606.7.27 X1606.7.28 Z1606.8 调用链接器1616.9 映像文件1616.9.1 调用列表信息1626.10 库管理器1646.10.1 库格式1646.10.2 库的使用1656.10.3 举例1656.10.4 参数输入1666.10.5 列表格式1666.10.6 库中排序1666.10.7 错误信息1676.11 将目标文件转换到十六进制文件1676.12 Cref交叉列表程序1686.12.1 Fprefix1696.12.2 Hheading1696.12.3 Llen1696.12.4 Ooutfile1696.12.5 Pwidth1706.12.6 Sstoplist1706.12.7 Xprefix1706.13 cromwell文件格式转换程序1706.13.1 Pname1716.13.2 D1716.13.3 C1716.13.4 F1716.13.5 Okey1716.13.6 Ikey1726.13.7 L1726.13.8 E1726.13.9 B1726.13.10 M1726.13.11 V1726.14 memmap存储器映射程序172第7章 C语言库函数第8章 程序超限的下载方法、库函数的使用以及C语言和汇编语言的混合编程8.1 程序代码长度超过限制后的下载方法2268.1.1 C语言源程序文件2268.1.2 程序代码长度超过0x4000的下载方法2278.2 库函数文件生成及应用2328.2.1 C语言源程序文件2328.2.2 生成库函数文件2338.2.3 库函数文件使用2348.3 C语言和汇编语言的混合编程2358.3.1 在汇编程序内访问C变量2358.3.2 #asm,#endasm和asm()指令2358.3.3 包含汇编函数的C文件237第9章 程序存储器FLASH的读写及Bootloader程序的编写9.1 PIC18Fxxx单片机程序存储器FLASH2399.1.1 表读和表写2399.1.2 控制寄存器2409.1.3 表锁存寄存器TABLAT2429.1.4 读程序存储器FLASH2439.1.5 擦除程序存储器FLASH2439.1.6 写程序存储器FLASH2449.1.7 PIC18F2XX/4XX程序存储器及程序代码保护2469.2 Bootloader介绍2479.3 PIC18Fxxx单片机Bootloader程序的编写2479.3.1 Bootloader程序空间2479.3.2 Bootloader程序流程2489.3.3 Bootloader程序下载(烧写)2499.3.4 通过Bootloader下载用户应用程序249第10章 PIC18FXX8单片机及PICC18例程10.1 PIC18FXX8单片机简介26410.1.1 A/D转换功能26510.1.2 键盘26510.1.3 LED显示26610.1.4 8路开关量输入和8路开关量输出26610.1.5 D/A输出26610.1.6 串行通信接口SCI26610.1.7 捕捉方式和PWM方式26710.1.8 CAN控制器26710.1.9 定时器26710.1.10 看门狗和休眠方式26710.2 PIC18FXX8单片机编程例程26810.2.1 PIC18FXX8单片机编程例程流程图26810.2.2 PIC18FXX8单片机编程例程源程序270附录 编译器生成的错误信息294参考文献339