PICC中最好用前减来控制循环体。
来看看下面的语句:
for(x = 100; –x;){;}和for(x = 0; x < 100; x++){;}
在字面上2者意思一样的,便是可以能过汇编查看代码。后者代码雍长,而前者就很好的汇编出了简洁的代码。所以在PICC中最好用前者的形式来写循环体,好的C编译器会自动把增量循环化为减量循环。
PICC的位操作:
要是需要一个地址固定的变量来位操作,可以参看PIC.H里面定义寄存器。
如:用25H内存来定义8个位变量。
static volatile unsigned char myvar @ 0x25;
static volatile bit b7 @(unsigned)&myvar*8+7;
static volatile bit b6 @(unsigned)&myvar*8+6;
这样即可以对myvar操作,也可以对b0~b7直接位操作。
PICC关于unsigned 和signed的几个关键问题
unsigned是表示一个变量是无符类型。signed表示有符号。它们表示数值
范围不一样。PICC默认所有变量都是unsigned类型的,哪怕你用signed变量。因为有符号运算耗资源,而且MCU运算一般不涉及有符号运算。在PICC后面加上-SIGNED_CHARR后缀可以告诉PICC把signed变量当作有符号处理。
PICC在有符号编程环境下,对于递减的for语句的条件判断语句不能是>=0的形式。
对于递减到0的for语句推荐用>0判断语句来实现,不会出现编译错误的问题,并且不会增加代码量,尤其对于数组操作的方面。
PIC单片机是低电平复位。
PIC系列单片机的时钟电路设计有四种工作模式,标准XT,高速HS(4MHZ以上),低频LP(32.768HZ)和阻容RC。
PICC基本上符合ANSI标准,除了一点:不支持函数的递归调用。是因为PIC单片机的特殊堆栈结构。 PIC单片机的堆栈是硬件实现的。
PICC函数,特别注意main函数必须是一个没有返回的死循环。
除了bank0 内的变量声明不需要特殊处理外,定义在其佗bank内的变量前面必须加上相应的bank序号,例如:
bank1 unsinged char buffer[32];
bank2 bit flag1,flag2;
bank3 float val[8];
虽然变量所在的bank定位必须由编程员自己决定,但是编写源程序时进行变量存取操作前无需特意编写设定bank的指令。C编程器会根据所操作的对象自动生成对应的bank设定的汇编指令;为避免频繁的bank切换以提高代码效率,尽量把实现同一任务的变量定位在同一个bank内,对于不同bank内的变量进行读写操作时也尽量把位于相同bank内的变量归并在一起进行连续操作。
PICC把所有函数内部定义的auto型局部变量放在bank0,因此用户自己定位在bank0内的变量字节数将受到一定的限制。
bit型位变量只能是全局的或静态的。
PICC专门提供了一种长度为24位的截短型浮点数,它损失了浮点数的一点精度。