- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c51设计基础
c51设计基础
1.7 寄存器组定义
8051系列的器件包含4个相同的寄存器组,每个寄存器组包括8个寄存器(R0~R7),C51编译器可使在一函数中决定用哪一寄存器组成为可能
。绝对寄存器的访问可用AREGS/NOAREGS和REGISTERBANK来控制。
定义一个带扩展性的函数语法如下:
返回类型 函数名([参数])[模式][再入][中断 n]using n
再入和中断将在后两节讨论。
例:void rb_function(void) using 3;
“using”不允许用于外部函数,它对函数的目标代码影响如下:
l 函数入口处将当前寄存器保存入栈;
l 指它的寄存器还会改变;
l 函数退出前寄存器组被恢复。
“using”定义对于返回一个寄存器内的值的函数是无用的。编程者必须十分小心以保证任何寄存器切换都只在仔细控制的区域发生。如果不
做到这一点将会产生不正确的函数结果。即使当编程者使用同一寄存器组时,带“using”属性的函数原则上也不能返回一个位值。
实际产生的代码决定于编译器及不同开关条件,有时用命令产生绝对的寄存器地址,当需要进行这样的地址计算时,使用REGISTERBANK指令的
影响只是计算Arn寄存器使用的地址,而必进行实际切换。
1.8 中断服务程序
C51编译器及其对C语言的扩充允许编程者对中断的所有方面进行控制。这种支持能使系统编程者创建高效的中断服务程序,用户只需在普通和
高级方式下关心中断及必要的寄存器组切换操作,C51编译器将产生最合适的代码。
1.8.1 中断服务程序的定义
使用中断服务函数的完整语法如下:
返回值 函数名([参数])[模式][再入] interrupt n[using n]
“interrupt”后接一个0~31的常数,不允许使用表达式。
中断不允许用于外部函数,它对函数目标代码的影响如下:
l 当使用函数时,SFR中的ACC、B、DPH、DPL和PSW(当需要时)入栈;
l 如不使用寄存器组切换,甚至中断函数所需的所有工作寄存器(Rn)都入栈;
l 函数退出前,所有的寄存器内容出栈;
l 函数由8051控制命令“RETI”终止。
1.8.2 开发中断过程时的规则
l 不能进行参数传递,如果中断过程包括任何参数声明,编译器将产生一个错误信息;
l 无返回值,如果想定义一个返回值将产生错误,然而,如果返回整型值编译器将不产生错误信息,因为整型值是默认值,因而编译器
不能清楚识别。
l 编译器会识别对中断过程的直接调用并拒绝它们,在任何情况下不能直接调用中断过程,因为退出该过程是由操作码RETI完成的。
RETI影响8051芯片的硬件中断系统,由于硬件上没有中断请求存在,因而这个操作码的结果是不定的并且通常是致命的。由于疏忽,可能用指
针来间接调用它,这是值得注意的。
l 编译器从绝对地址8n+3处产生一个中断向量,其中n为中断号,该向量包括一个到中断过程的跳转,向量的产生可由指令NOINTVECTOR
压缩。因而用户有能力从独立的汇编模块中提供中断向量。
l C51编译器允许0~31个中断,究竟允许哪些中断依赖于使用的8051系列芯片,编译器不能检查。
l 如果中断程序中有浮点运算,必须保持浮点寄存器状态,当没有其它程序执行浮点运算时,可能不保存,函数“fsave”和
“fprestore”用来保存浮点状态。
l 中断过程调用的函数所使用的寄存器必须与中断过程相同,当没有使用“using”指令时,编译器会选择一个寄存器组作绝对寄存器
访问,当子程序使用另一个寄存器组时会发生错误,用户必须保证按要求使用相应寄存器组,C编译器不会对此检查。
例:
unsigned int interruptent;
unsigned char second;
time() interrupt 1 using 2 /*定时器0中断服务程序,工作寄存器使用2区*/
{
if(++interruptcnt==4000) {
??? second++;???? /*秒计数加一*/
??? interruptcnt=0;?? /*清中断计数*/
}
}
1.9 再入函数
再入函数可被递归调用,调用可发生在任何时候,即使是在中断过程中。在实时处理的应用问题中常常需要再入函数。
使用关键字“reentrant”可有选择地定义函数有再入能力。在存贮器模式的基础上为再入函数在内部或外部存贮器中模拟了一个栈区域。由
于MCS-51缺乏合适的寻址方法,使用栈结构是相当必要的。因而应尽量少用再入函数。
定义一再入函数的语法如下:
返回值 函数名([参数])[模式]reetrant[interrupt n][using n]
例:
int calc(char i,int b) reentrant {
?? int x
您可能关注的文档
- 7S办公室培训.ppt
- 7S管理培训更新.ppt
- 7月库存分析报告.ppt
- 7运动保健运动按摩的应用.ppt
- 7—ELEVEN连锁经营管理模式.ppt
- 7个演讲坏习惯_让自己和观众都难受.ppt
- 7秸秆机械化还田技术.ppt
- 8 双曲线与圆圆定位最优岸台分布算法研究与比较.doc
- 7餐饮业营销管理.ppt
- 8-1、用积分求悬臂梁自由端的转角和挠度。.doc
- 2024学年第一学期浙江省精诚联盟10月联考高二物理试题含答案及解析.pdf
- 【山东卷】山东省泰安市2024-2025学年高三上学期11月期中考试(11.13-11.15)英语试卷含答案及解析.pdf
- 【浙江卷】浙江省杭州市四校联考2024-2025学年高一上学期10月月考英语试卷含答案及解析.pdf
- 西南大学附中高一10月月考生物试卷含答案及解析.pdf
- 辽宁省县域重点高中协作体2024~2025学年高一上学期10月质量监测试题历史试卷含答案及解析.pdf
- 基于多功能超疏水材料的海水淡化及油水分离研究.pdf
- FKBP5基因多态性与抚养方式对孤儿静息态脑功能的影响.pdf
- 《因明入正理论略抄及后疏》的研习与创作感受.pdf
- HIF-1α、SGK1在子宫内膜增生及子宫内膜癌孕激素抵抗中的表达和意义.pdf
- 初中信息科技大单元教学设计框架构建及应用研究--以《人工智能》大单元为例.pdf
文档评论(0)