版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。在keilC51中,直接调用库函数:#include声明了void-nopjvoid),_nop_(),/产生一条NOP指令作用:对于延时很短的,要求在us级的,采用“op_函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对J:12M晶振,延时luS。对延时比较长的,要求在大于10us,采用C51中的循环语句来实现。在选择C51中循环语句时,要注意以下几个问题第一、定义的C51中循坏变量,尽量采用无符号字符型变量
2、。第二、在FOR循坏语句中,尽量采用变量减减來做循坏。第三、在do.while,while语句中,循环体内变量也采用减减方法。这因为在C51编译器中,对不同的循坏方法,采用不同的指令来完成的。卜面举例说明:unsignedcharl,for(L=0,L04-),其中,第二个循坏语句C51编译后,就用DJNZ指令来完成,相当丁如卜指令:MOV09H,#0FFHLOOP:DJNZ09H,LOOP指令相当简洁,也很好计算精确的延时时间。同样对do.while,while循环语句中,也是如此例:unsignedcharn,n=255,don-while(n),或n=255,while(n)n-,这两个
3、循坏语句经过C51编译之后,形成DJNZ来完成的方法,故其精确时间的计算也很方便。其三:对J:耍求精确延时时间更长,这时就要采用循环嵌套的方法來实现,因此,循环嵌套的方法常用J:达到ms级的延时。对于循环语句同样可以采用for,do.while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。unsignedcharl,jfor(i=255,iOu.)blj=255,jO,j),或unsignedcharij1=255,do=255,doj-vhile(j),while(i),或unsignedcharij1=255,HhiIe(L丿J=255,whilej)r这三种方法都是用
4、DJNZ指令嵌套实现循环的,由C51编译器用卜面的指令组合来完成的MOVR7,#OFFHLOOP2:MOVR6,#OFFHLOOP1:DJNZR6,LOOP1DJNZR7,LOOP2这些指令的组合在汇编语言中采用DJNZ指令來做延时用,因此它的时间精确计算也是很简单,假上面变量1的初值为m,变量j的初值为n,则总延时时间为:mx(nxT+T),其中T为DJNZ指令执行时间(DJNZ指令为双周期指令)。这里的+T为MOV这条指令所使用的时间。同样对更长时间的延时,可以采用多重循环來完成。只要在程序设计循坏语句时注意以上几个问题。卜面给出有关在C51中延时子程序设计时要注意的问题1、在C51中进行
5、精确的延时子程序设计时,尽最不要或少在延时子程序中定义局部变最,所有的延时子程序中变量通过有参函数传递。2、在延时子程序设计时,采用do.while,结构做循坏体要比foi:结构做循环体好。3、在延时子程序设计时,要进行循环体嵌套时,采用先内循坏,再减减比先减减,再内循环要好。unsignedchardelav(unsignedchari,unsignedcharj,unsignedchark丿unsignedcharb,c,b=“J”,c=”k”,dododok-,while(k),k=c,J_s,Rhde(j),J=Swhile(i),这精确延时子程序就被C51编译为有卜而的指令组合完成d
6、elay延时子程序如下:MOVR6,05HMOVR4,03HTOC o 1-5 h zC0012:DJNZR3,C0012MOVR3,04HDJNZR5,C0012MOVR5,06HDJNZR7,C0012RET假设参数变鼠的初值为m,参数变鼠j的初值为m参数变杲k的初值为1,贝IJ总延时时间为:4(nx(mxT+2T)+2T)+3T,其中T为DJNZ和MOV指令执行的时间。当m=n=l时,精确延时为9T,最短;当m=n=l=256时,精确延时到16908803T,最长。INTRINS.H:内部函数函数名:_crol_,_irol_,_lrol_原型:unsignedchar_crol_(un
7、signedcharval,unsignedcharn);unsignedint_irol_(unsignedintval,unsignedcharn);unsignedint_lrol_(unsignedintval,unsignedcharn);功能:_crol_,_irol_,_lrol_以位形式将val左移n位,该函数与8051“RLA”指令相关,上面几个函数不同于参数类型。例:#ineludemain()unsignedinty;C-51程序设计37y=OxOOff;y=_irol_(y,4);/*y=OxOffO*/函数名:cror,iror,Iror原型:unsignedchar
8、_cror_(unsignedcharval,unsignedcharn);unsignedint_iror_(unsignedintval,unsignedcharn);unsignedint_lror_(unsignedintval,unsignedcharn);功能:_cror_,ror_,ror_以位形式将val右移n位,该函数与8051“RRA”指令相关,上面儿个函数不同于参数类型。例:#ineludemain()unsignedinty;y=0 x0ff00;y=_iror_(y,4);/*y=0 x0ff0*/函数名:_nop_原型:void_nop_(void);功能:_nop
9、_产生一个NOP指令,该函数可用作C程序的时间比较。C51编译器在_nop_函数工作期间不产生函数调用,即在程序中直接执行了NOP指令。例:P()=1;_nop_();P()=0;函数需:_testbit_原型:bit_testbit_(bitx);功能:_testbit_产生一个JBC指令,该函数测试一个位,当置位时返回1,否则返回0。如果该位置为1,则将该位复位为0。8051的JBC指令即用作此目的。_testbit_只能用于可直接寻址的位:在表达式中使用是不允许的。2008-02-1908:56_crol_字符循环左移_cror_字符循环右移_irol_整数循环左移iror_整数循环右移
10、长整数循环左移lror_长整数循环右移nop_空操作8051NOP指令testbit_测试并清零位8051JBC指令详解:函数名:crolirol_,原型:unsignedchar_crol_(unsignedcharval,unsignedcharn);unsignedint_irol_(unsignedintval,unsignedcharn);unsignedintUQ|(unsignedintval,unsignedcharn);功能:_crol_irol_rol以位形式将val左移n位,该函数与805FRLA”指令相关,上面儿个函数不同于参数类型。例:#ineludemain()un
11、signedinty;C-51程序设计37y=OxOOff;y=Lirol_(y,4);/*y=OxOffO*/函数名:_cror_,ror_,ror_原型:unsignedchar_cror_(unsignedcharval,unsignedcharn);unsignedint_iror_(unsignedintval,unsignedcharn);unsignedint_lror_(unsignedintval,unsignedcharn);功能:_cror_,ror_,ror_以位形式将val右移n位,该函数与8051“RRA”指令相关,上面几个函数不同于参数类型。例:#ineludemain()unsignedinty;y=OxOffOO;y=_iror_(y,4);/*y=OxOffO*/函数名:_nop原型:void_nop_(void);时间比较。C51编译器在_nop_功能:_nop_产生一个NOP指令,该函数可用作C程序函数工作期间不产生函数调用,即
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州工程应用技术学院《英国文学史及选读ll》2023-2024学年第一学期期末试卷
- 信访知识培训
- 二建建筑工程实务-二建《建筑工程管理与实务》全真模拟试卷4260
- 产教融合人才培养共同体的概述
- 全国粤教清华版初中信息技术七年级下册第2单元第5节《重复的艺术》说课稿
- 2025年秋季学期幼儿园后勤工作计划样本
- 公司车辆管理及驾驶安全责任书范文
- 2025年春季幼儿园开学工作计划范文
- 全国浙教版初中信息技术八年级下册第三单元第14课《智能物联系统的软件编写》说课稿
- 2025拓展计划+联系方式
- 梁平法制图规则及钢筋翻样讲解
- 乙肝 丙肝培训课件
- 2024届湖北省武汉实验外国语学校数学七上期末统考模拟试题含解析
- 基于深度学习的网络钓鱼邮件识别技术研究
- 融资成本视角下的船舶融资租赁模式研究
- 感冒中医理论知识课件
- 2023年希望杯数学培训100题-六年级(含答案)
- 一年级科学人教版总结回顾2
- 个人住房贷款提前还款月供及节省利息EXCEL计算
- 第五单元《圆》教材解析-人教版数学六年级上册
- 患者突发昏迷应急预案演练脚本-
评论
0/150
提交评论