- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
初谈如何从汇编转向PICC
因为HIDE-TECH PICC 破解版很多,所以HIDE PICC 有比其它PICC 有更多的用户,虽然
它的编译效率不是最好。最好的是CCS,但没破戒版。。。,不过用HIDE PICC 精心安排函数
一样可以获得很高的编译效率,还是人脑是第一的。
当然要求你要有C 语言的基础。PICC 不支持C++,这对于习惯了C++ 的朋友还得翻翻C 语
言的书。
C 代码的头文件一定要有
#includepic.h
它是很多头文件的集合,C 编译器在pic.h 中根据你的芯片自动栽入相应的其它头文件。
这点比汇编好用。
载入的头文件中其实是声明芯片的寄存器和一些函数。
顺便摘抄一个片段:
static volatile unsigned char TMR0 @ 0x01;
static volatile unsigned char PCL @ 0x02;
static volatile unsigned char STATUS @ 0x03;
可以看出和汇编的头文件中定义寄存器是差不多的。如下:
TMR0 EQU 0X01 ;
PCL EQU 0X02 ;
STATUS EQU 0X03;
都是把无聊的地址定义为大家公认的名字。
一:怎么附值?
如对TMR0 附值:
汇编中:MOVLW 200 ;
MOVWF TMR0 ;当然得保证当前页面在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 ;
在汇编中是:
BCF PORTA ,0 ;
BSF PORTA ,2 ;
可以看出2 者是大同小异的,只是C 中不需要考虑页面的问题。
三:内存分配问题:
在汇编中定义一个内存是一件很小心的问题,要考虑太多的问题,稍微不注意就会出错。比
如16 位的运算等。用C 就不需要考虑太多。
下面给个例子:
16 位的除法(C 代码):
INT X=5000 ;
INT Y=1000 ;
INT Z=X/Y ;
而在汇编中则需要花太多精力。
给一个小的C 代码,用RA0 控制一个LED 闪烁:
#includepic.h
void main(){
int x;
CMCON=0B111; file://关掉A 口比较器,要是有比较器功能的话。
ADCON1=0B110; file://关掉A/D 功能,要是有A/D 功能的话。
TRISA=0; file://A 口全为输出。
loop:RA0= !RA0 ;
for(x=60000;--x;){;} file://延时
goto loop;
}
说说RA0= !RA0 的意思:PIC 对PORT 寄存器操作都是先读取修改写入。
上句的含义是程序先读 RA0 ,然后取反,最后把运算后的值重新写入RA0 ,这就实现了闪
烁的功能。
Pic 对位的操作
由于PIC 处理器对位操作是最高效的,所以把一些BOOL 变量放在一个内存的位中,既可
以达到运算速度快,又可以达到最大限度节省空间的目的。
在C 中的位操作有多种选择。
*********************************************
如:char x;x=x|0 /*对X 的4 位置1。*/
char x;x=x0 /*对X 的5 位清0 。*/
把上面的变成公式则是:
#define bitset(var,bitno)(var |=1bitno)
#define bitclr(var,bitno)(var =~(1bitno))
则上面的操作就是:
char x;bitset(x,4)
char x;bitclr(x,5)
*********
文档评论(0)