




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何使用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代码:callt callf call既然callt和callf函数这么好,我们把所有的函数都定义成这两种函数不就得了吗。想法是好的,可现实往往是残酷的。因为上述两个区域的大小都是有限制的,所以这两种函数的个数也是有限制的。callt不能超过32个。callf函数总的大小不能超过2K。所以,我们应该将那些经常调用的函数定义成callt和callf函数。_callt int tsub(void);_callf int tadd(void);void main() ret_num = tadd(); ret_val = tsub(); ret_data = tmul(); while(1);_callt int tsub(void) int val; return val;_callf int tadd(void)int num;return num;int tmul(void)int data;return data;如何使用C的扩展功能-78K0(指定变量或代码的存放地址)有时候我们希望把有些数据或者代码放在某个特定的地址,那么如何来实现这个功能呢?下面介绍一种在C语言层面实现的方法。实现这个功能主要就是使用如下一条语句:#pragma section * xxxx AT address#pragma section:固定部分,只要实现这个功能先把这个写上。*:这是个很关键的部分,用于说明这条语句是对那些属性的数据起作用的。比如:CODE:表示对这条语句后面的代码起作用。 DATA:表示对这条语句后面不带初始值的变量起作用。 INIT:表示对这条语句后面带初始值的变量起作用。 CNST:表示对这条语句后面的常量起作用。这样的关键字大概有十几个,但是一般用得着的也就这个。如果你对其他的关键字感兴趣的话,可以参考手册NEC单片机安装工具自带的手册C language的附录部分。xxxx:段的名称,其一个你自己喜欢的名称就可以了。AT: 固定部分。address:指定从哪个地址开始放。#pragma section DATA ?DATA#pragma section CNST ?CNST AT 9000H int a1;sreg int b1; int c1 = 1; const int d1 = 2;#pragma section DATS ?DATS int a2;sreg int b2; int c2 = 3; const int d2 = 4;#pragma section DATA ?DATA2#pragma section CNST ?CNST AT 7000H int a3;sreg int b3; int c3 = 5;const int d3 = 6;#pragma section DATA DATA#pragma section INIT ?INIT#pragma section R_INIT ?R_INIT AT 2000H int a4;sreg int b4; int c4 = 7;const int d4 = 8;#pragma section INIT INIT#pragma section R_INIT R_INIT#pragma section BITS ?BITS_boolean e4; / ?BITSint a;#pragma section DATA DAT1 AT 0e000Hint b;sreg int c;#pragma section DATA DAT2 AT 0FB20Hint d;#pragma section CNST ?CNSTchar *const p = Hello;void main ()b+; while (1) b+; d+; c4+; 如何使用C的扩展功能-78K0(变量短直接寻址)这个功能是不说不知道,一说。也不奇妙。在NEC的单片机里有块RAM使用的短直接寻址,如果把变量放在这个区域,那么对变量进行存取的时候速度会快一些。方法很简单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位招聘考试教师招聘考试语文专业知识试卷(师范类)
- 2025年事业单位招聘考试教育类专业知识试卷高分技巧
- 2025年镗工职业技能鉴定试卷(精密加工)
- 2025年西式面点师实操考试试卷与实战案例
- 2025年探伤工(技师)检测数据分析考试试卷
- 2025年西班牙语DELEAK级写作冲刺试卷:家庭关系描写技巧
- 2025年天津市特岗教师招聘考试教育理论基础重点难点试卷
- 2025年税务师考试科目模拟试卷:税务师实务操作与案例分析试题
- 2025年事业单位招聘考试计算机专业能力测试试卷真题模拟精析
- 2025年室内装饰设计师(初级)专业能力考试试卷
- 2025上海市八年级升九年级数学暑假提升讲义:相似三角形压轴题(六大题型)原卷版
- 2025年工业互联网工程技术人员考核试题题库及答案
- 2025全国农业(水产)行业职业技能大赛(水生物病害防治员)选拔赛试题库(含答案)
- 网约车停运损失赔偿协议书范文
- GB/T 3923.2-2013纺织品织物拉伸性能第2部分:断裂强力的测定(抓样法)
- GB/T 23764-2009光催化自清洁材料性能测试方法
- 施工安全风险管控措施清单
- 领导科学概论课件
- 宁波市区成品住宅装修工程质量分户验收规程
- 邢者打板手法系统学习笔记版
- 正确的母乳喂养姿势
评论
0/150
提交评论