- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《如何使用C的扩展功能78K0
如何使用C的扩展功能-78K0(1) 使用单片机,一个很重要的体现就是要写程序(废话)。由于现在的单片机中的程序存储空间都比较大了,所以开发人员可以不再像最初阶段那样斤斤计较程序的大小,这样C语言就登上舞台了。同时,考虑到程序的可移植性和可读性,现在越来越多的公司和个人都开始弃汇编而择C语言了。?使用C语言编写单片机程序的时候,针对各个厂家的单片机编程都会有一些特殊的使用方法。而这些方法是不一样的,因为他们不是标准C规定的。为了让大家能更好的、更容易的使用C语言编程、使用NEC的单片机,从现在开始我将逐一介绍大家编程中常用到的一些C的扩展功能。?首先,介绍如何使用寄存器。?寄存器是单片机的一个特点,只要你使用单片机,就不可避免的与寄存器打交道。我们知道在汇编里可以直接使用寄存器,可是标准C里面并没有规定如何使用寄存器(这个也比较难规定,因为各个厂家的寄存器着实相差太大。),那么在C语言里怎么使用这些寄存器呢? NEC的编译器里面使用寄存器比较简单,只要在文件的开始写一句#pragma sfr,那么这个文件之后就都可以使用寄存器了。多了不再罗嗦了,下面给出一个例子,相信你一看就明白了。——什么?不明白?本人本着诲人不倦的态度,你找地方,我单独给你开班。#pragma sfrvoid main(void){ IMS = 0xcc; IXS = 0x00; while(1);}如何使用C的扩展功能-78K0(2) 中断功能是单片机很有特点的一个功能,如果使用单片机不使用中断的话,那么单片机的魅力将会大大降低。 那么在C语言里面怎么怎么使用中断功能呢,同样,下面给一个例子:#pragma interrupt INTP0 isr_intp0__interrupt void isr_intp0(){ ......;} 其中INTP0是中断的名称,isr_intp0是中断服务函数,通过上面的声明就把中断INTP0和函数isr_intp0关联到一起来。对于__interrupt这个关键字我之前试验是可有可无的,不过为了增强程序的可读性,让人一看就知道这是个中断服务函数,那么还是加上比较方便一些,反正也费不了多少事。你还不知道什么是中断?对不起,找本单片机的书看看吧,任何单片机的书籍里面都有介绍。或者单独与我联系。如何使用C的扩展功能-78K0(3) 有一些特殊的指令是针对汇编层面而设定的,这些指令的诸如如何使能和禁止中断等。在这里我列出几个常见指令的使用方法,如果大家在使用的过程中还需要其他的指令,也可以提醒我,看看我之前发现没有。 一起交流,共同进步!#pragma HALT#pragma STOP#pragma BRK#pragma NOP#pragma DI#pragma EIvoid main(void){ DI(); EI(); HALT(); STOP(); BRK(); NOP();}如何使用C的扩展功能-78K0(4) C和汇编混合编程是单片机编程常用到的一种情况。因为虽然使用C语言编程有很多我们熟悉的优点,但是汇编的优势同样是无法取代的。比如汇编的效率会比较高。 接下来介绍如何在C语言中嵌入汇编。有两种方法,如下:#pragma asmvoid main(void){ #asm NOP; #endasm __asm(\tmovw ax, !_a \t;ax - a); __asm(\tmovw !_b, ax \t;b - ax); while(1);}同样,需要在前面声明一下:#pragma asm。main函数里面介绍的是两种嵌入汇编的方法。分享 如何使用C的扩展功能-78K0(callt/callf)在NEC的单片机里面,有两块比较特殊的区域,一个是从40H-7FH;另一块是800H-FFFH。前一块区域叫做CALLT区域,后一块区域叫做CALLF区域。我们先不管这两块名字的由来,因为就个人来看,名字完全是当年起名人的一时兴致使然。说一下这两两个函数的特点:CALLT函数:定义一个函数的时候,如果前面加上关键字callt/__callt,那么这个函数就是callt函数了。callt函数会把函数的入口地址放在40H-7FH,每个函数占用两个字节,这个很好理解。当我们调用函数时,系统会自动地找到函数入口地址并且跳向调用的函数。那么,这个函数有什么好处呢?一、调用的指令之产生一个字节,因为40H-7FH区域寻址只要6位就可以了(其实真正用到的是5位,因为最后一位是0,以保证偶地址对起),还有两位做指令码。二、速度更快。CALLF函数:定义方式同callt。callf函数会把函数体放在800H-FFFH。该函数调用的时候是两字节指令,所以同样可以节省代码空间,再者速度快。速度:callt 〉callf 〉call代码:call
文档评论(0)