C-语言程序设计基础(精品).doc

C-语言程序设计基础(精品).doc

ID:51071292

大小:154.00 KB

页数:25页

时间:2020-03-18

C-语言程序设计基础(精品).doc_第1页
C-语言程序设计基础(精品).doc_第2页
C-语言程序设计基础(精品).doc_第3页
C-语言程序设计基础(精品).doc_第4页
C-语言程序设计基础(精品).doc_第5页
资源描述:

《C-语言程序设计基础(精品).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、c51设计基础1.7寄存器纽定义8051系列的器件包含4个相同的寄存器组,每个寄存器组包括8个寄存器(R0〜R7),C51编译器可使在一函数屮决定用哪一寄存器组成为可能□绝对寄存器的访问可用AREGS/N0AREGS和REGTSTERBAXK来控制。定义一个带扩展性的函数语法如'卜:返回类型函数名([参数])[模式][再入][中断njusingn再入和屮断将在后两节讨论。仮i]:voidrb^function(void)using3;“using”不允许用于外部函数,它对函数的FI标代码影响如下:1函数入口处将当前寄存器保存入栈;1指它

2、的寄存器还会改变;1函数退出前寄存器组被恢复。“using”定义对于返回一个寄存器内的值的函数是无用的。编程者必须十分小心以保证任何寄存器切换都只在仔细控制的区域发牛。如果不做到这一点将会产牛不正确的函数结果。即使当编程者使用同一寄存器组时,带“using”属性的函数原则上也不能返回一个位值。实际产牛的代码决定于编译器及不同开关条件,有吋用命令产牛绝对的寄存器地址,当需要进行这样的地址计算吋,使用REGISTERBAXK指令的影响只是计算Arn寄存器使用的地址,而必进行实际切换。1.8屮断服务程序C51编译器及其对C语言的扩充允许编程者

3、对屮断的所有方面进行控制。这种支持能使系统编程者创建高效的屮断服务程序,用户只需在普通和高级方式下关心屮断及必要的寄存器组切换操作,C51编译器将产牛最合适的代码。1.8.1屮断服务程序的定义使用屮断服务函数的完整语法如下:返回值函数名([参数])[模式][再入]interruptnFusingn]uinterruptn后接一个0〜31的常数,不允许使用表达式。屮断不允许用于外部函数,它对函数H标代码的影响如下:1当使用函数时,SFR中的ACC、B、DPH、DPL和PSW(当需要时)入栈;1如不使用寄存器组切换,甚至屮断函数所需的所有工

4、作寄存器(Rn)都入栈;1函数退出前,所有的寄存器内容出栈;1函数由8051控制命令“RETT”终止。1.8.2开发屮断过程时的规则1不能进行参数传递,如果小断过程包括任何参数声明,编译器将产牛一,个错误信息;1无返回值,如果想定义一个返回值将产牛错误,然而,如果返冋整型值编译器将不产牛错误信息,因为整型值是默认值,因而编译器不能清楚识别。1编译器会识别对小断过程的直接调用并拒绝它们,在任何情况下不能直接调用屮断过程,因为退出该过程是由操作码RETI完成的。RETI影响8051芯片的硬件屮断系统,由于硬件上没有屮断请求存在,因而这个操作

5、码的结果是不定的并且通常是致命的。由于疏忽,可能用指针來间接调用它,这是值得注意的。1编译器从绝对地址8n+3处产牛一个屮断向量,其屮门为屮断号,该向量包括一个到屮断过程的跳转,向量的产牛可由指令N0INTVECT0R压缩。因而用户有能力从独立的汇编模块屮提供屮断向量。1C51编译器允许0〜31个屮断,究竟允许哪些屮断依赖于使用的8051系列芯片,编译器不能检查。1如果屮断程序屮有浮点运算,必须保持浮点寄存器状态,当没有其它程序执行浮点运算时,可能不保存,函数“fsave”和“fprestore”用来保存浮点状态。1屮断过程调用的函数所

6、使用的寄存器必须与屮断过程相同,当没有使用"using"指令吋,编译器会选择一个寄存器组作绝对寄存器访问,当子程序使用另一个寄存器组时会发牛错误,用户必须保证按要求使用相应寄存器组,C编译器不会对此检查。例:unsignedintinterruptent;unsignedcharsecond;time()interrupt1using2/*定时器0中断服务程序,工作寄存器使用2区*/[if(++interruptcnt二二4000){sec()nd++;/*秒计数加一噂/interruptcnt=0;/*清1(【断计数*/}}1.9再入

7、函数再入函数可被递归调用,调用可发牛在任何吋候,即使是在屮断过程屮。在实吋处理的应用问题屮常常需要再入函数。使用关键字“ree门tremt”可有选择地定义函数有再入能力。在存贮器模式的基础上为再入函数在内部或外部存贮器屮模拟了一个栈区域。由于MCS-51缺乏合适的寻址方法,使用栈结构是相当必要的。因而应尽量少用再入函数。定义一再入函数的语法如下:返回值函数名([参数〕)[模式]reetrant[iinterruptn][usingn]例:intcalc(chari,intb)reentrant{intx;x二table[i];retur

8、n(x*b);}使用再入函数有如下规定:1不能传递类型为“bit”的参数。也不能声明一个局部标量,再入功能不能包括位操作及MCS-51可位寻址区域。1不能在“alien”函数调用再入函数。1再入函数可同时有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。