本书围绕中档系列 PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列 PIC
单片机的 C 语言编译器,但很多专业的第三方公司有众多支持 PIC 单片机的 C 语言编译器
供用户评估。另外,Hitech 公司针对广大 PIC 的业余爱好者和初学者还提供了完全免费的学
习版 PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的 PIC 单片机型号
的片上资源而最适用于单片机学习入门,因此笔者感兴趣的读者可从 PICC-Lite 入手掌
本章将介绍 Hitech-PICC 编译器的一些基本概念,由于篇幅所限将不涉及 C 语言的标准
为 PIC 单片机特殊的堆栈结构。在前面介绍 PIC 单片机架构时已经详细说明了 PIC 单片机
另外在 PIC 单片机中实现软件堆栈的效率也不是很高,为此,PICC 编译器采用一种叫做“静
原代码调试。使用 MPLAB-IDE 内的调试工具 ICE2000、ICD2 和软件模拟器都可以实现原
MPLAB-IDE后台调用的编译器所用到的所有可执行文件,其中有汇编编译器“PICC Assembler”、C 原程序编译器“PICC Compiler”和连接定位程序“PICC Linker”。同
第三章 3.1.3 节,此处不再重复。项目建立完成后可以加入 C 或汇编原程序,也可以加
PIC 单片机的 C 语言原程序基本框架基于 PICC 编译编写 PIC 单片机程序的基本方式和标准 C 程序类似,程序一般由以
在程序的最前面用#include 预处理指令引用包含头文件,其中必须包含一个编译器提供的“pic.h”文件,实现单片机内特殊寄存器和其它特殊符号的声明;
中档系列 PIC 单片机数据寄存器的一个 bank 大小为 128 字节,刨去前面若干字节的特
殊功能寄存器区域,在 C 语言中某一 bank 内定义的变量字节总数不能超过可用 RAM 字节
连接器告诉你总共有 0x12C(300)个字节准备放到 bank1 中但 bank1 容量不够。显然,只
作前无需再特意编写设定 bank 的指令。C 编译器会根据所操作的对象自动生成对应 bank 设
在同一个 bank 内;对不同 bank 内的变量进行读写操作时也尽量把位于相同 bank 内的变量
PICC 把所有函数内部定义的 auto 型局部变量放在 bank0。为节约宝贵的存储空间,它
既然所有的局部变量将占用 bank0 的存储空间,因此用户自己定位在 bank0 内的变量字
bit 型位变量只能是全局的或静态的。PICC 将把定位在同一 bank 内的 8 个位变量合并
PIC单片机的位操作汇编指令高效实现。基于此,位变量不能是局部自动型变量,也无法将其组合成复合型
PICC 对整个数据存储空间实行位编址,0x000 单元的第 0 位是位地址 0x0000,以此后
程序调试时方便地查找自己所定义的位变量,如果一个位变量 flag1 被编址为 0x123,那么
单片机的位操作指令常高效的。因此,PICC 在编译原代码时只要有可能,对普通变量的操作也将以最简单的位操作指令来实现。假设一个字节变量
PICC 中描述浮点数是以 IEEE-754 标准格式实现的。此标准下定义的浮点数为 32 位长,
高。在程序中定义的 float 型标准浮点数的长度固定为 24 位,双精度 double 型浮点数一般
也是 24 位长,但可以在程序编译选项中选择 double 型浮点数为 32 位,以提高计算的精度。百里挑一关昕和刘硕