如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
初谈如何从汇编转向PICC因为HIDE-TECHPICC破解版很多,所以HIDEPICC有比其它PICC有更多的用户,虽然它的编译效率不是最好。最好的是CCS,但没破戒版。。。,不过用HIDEPICC精心安排函数一样可以获得很高的编译效率,还是人脑是第一的。当然要求你要有C语言的基础。PICC不支持C++,这对于习惯了C++的朋友还得翻翻C语言的书。C代码的头文件一定要有#include<pic.h>它是很多头文件的集合,C编译器在pic.h中根据你的芯片自动栽入相应的其它头文件。这点比汇编好用。载入的头文件中其实是声明芯片的寄存器和一些函数。顺便摘抄一个片段:staticvolatileunsignedcharTMR0@0x01;staticvolatileunsignedcharPCL@0x02;staticvolatileunsignedcharSTATUS@0x03;可以看出和汇编的头文件中定义寄存器是差不多的。如下:TMR0EQU0X01;PCLEQU0X02;STATUSEQU0X03;都是把无聊的地址定义为大家公认的名字。一:怎么附值?如对TMR0附值:汇编中:MOVLW200;MOVWFTMR0;当然得保证当前页面在0,不然会出错。C语言:TMR0=200;//无论在任何页面都不会出错。可以看出来C是很直接了当的。并且最大好处是操作一个寄存器时候,不用考虑页面的问题。一切由C自动完成。二:怎么位操作?汇编中的位操作是很容易的。在C中更简单。C的头文件中已经对所有可能需要位操作的寄存器的每一位都有定义名称:如:PORTA的每一个I/O口定义为:RA0、RA1、RA2。。。RA7。OPTION的每一位定义为:PS0、PS1、PS2、PSA、T0SE、T0CS、INTEDG、RBPU。可以对其直接进行运算和附值。如:RA0=0;RA2=1;在汇编中是:BCFPORTA,0;BSFPORTA,2;可以看出2者是大同小异的,只是C中不需要考虑页面的问题。三:内存分配问题:在汇编中定义一个内存是一件很小心的问题,要考虑太多的问题,稍微不注意就会出错。比如16位的运算等。用C就不需要考虑太多。下面给个例子:16位的除法(C代码):INTX=5000;INTY=1000;INTZ=X/Y;而在汇编中则需要花太多精力。给一个小的C代码,用RA0控制一个LED闪烁:#include<pic.h>voidmain(){intx;CMCON=0B111;file://关掉A口比较器,要是有比较器功能的话。ADCON1=0B110;file://关掉A/D功能,要是有A/D功能的话。TRISA=0;file://A口全为输出。loop:RA0=!RA0;for(x=60000;--x;){;}file://延时gotoloop;}说说RA0=!RA0的意思:PIC对PORT寄存器操作都是先读取----修改----写入。上句的含义是程序先读RA0,然后取反,最后把运算后的值重新写入RA0,这就实现了闪烁的功能。Pic对位的操作由于PIC处理器对位操作是最高效的,所以把一些BOOL变量放在一个内存的位中,既可以达到运算速度快,又可以达到最大限度节省空间的目的。在C中的位操作有多种选择。*********************************************如:charx;x=x|0B00001000;/*对X的4位置1。*/charx;x=x&0B11011111;/*对X的5位清0。*/把上面的变成公式则是:#definebitset(var,bitno)(var|=1<<bitno)#definebitclr(var,bitno)(var&=~(1<<bitno))则上面的操作就是:charx;bitset(x,4)charx;bitclr(x,5)*************************************************但上述的方法有缺点,就是对每一位的含义不直观,最好是能在代码中能直观看出每一位代表的意思,这样就能提高编程效率,避免出错。如果我们想用X的0-2位分别表示温度、电压、电流的BOOL值可以如下:unsignedcharx@0x20;/*象汇编那样把X变量定义到一个固定内存中。*/bittemperature@(unsigned)&x*8+0;/*温度*/bitvoltage@(unsigned)&x*8+1;/*电压*/bitcurrent@(unsigned)&x*8+2;/*电流*/这样定义后X