标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语言中很容易实现,写几个nop就行了。

在keil C51中,直接调用库函数:

#include // 声明了void _nop_(void);

_nop_(); // 产生一条NOP指令

作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。

在选择C51中循环语句时,要注意以下几个问题

第一、定义的C51中循环变量,尽量采用无符号字符型变量。

第二、在FOR循环语句中,尽量采用变量减减来做循环。

第三、在do…while,while语句中,循环体内变量也采用减减方法。

这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。

下面举例说明:

unsigned char i;

for(i=0;i<255;i++);

unsigned char i;

for(i=255;i>0;i--);

其中,第二个循环语句C51编译后,就用DJNZ指令来完成,相当于如下指令:

MOV 09H,#0FFH

LOOP: DJNZ 09H,LOOP

指令相当简洁,也很好计算精确的延时时间。

同样对do…while,while循环语句中,也是如此

例:

unsigned char n;

n=255;

do{n--}

while(n);

n=255;

while(n)

{n--};

这两个循环语句经过C51编译之后,形成DJNZ来完成的方法,

故其精确时间的计算也很方便。

其三:对于要求精确延时时间更长,这时就要采用循环嵌套的方法来实现,因此,循环嵌套的方法常用于达到ms级的延时。对于循环语句同样可以采用for,do…while,while结构来完成,每个循环体内的变量仍然采用无符号字符变量。

unsigned char i,j

for(i=255;i>0;i--)

for(j=255;j>0;j--);

unsigned char i,j

i=255;

do{j=255;

do{j--}

while(j);

i--;

}

while(i);

unsigned char i,j

i=255;

while(i)

{j=255;

while(j)

{j--};

i--;

}

这三种方法都是用DJNZ指令嵌套实现循环的,由C51编译器用下面的指令组合来完成的

MOV R7,#0FFH

LOOP2: MOV R6,#0FFH

LOOP1: DJNZ R6,LOOP1

DJNZ R7,LOOP2

这些指令的组合在汇编语言中采用DJNZ指令来做延时用,因此它的时间精确计算也是很简单,假上面变量i的初值为m,变量j的初值为n,则总延时时 间为:m×(n×T+T),其中T为DJNZ指令执行时间(DJNZ指令为双周期指令)。这里的+T为MOV这条指令所使用的时间。同样对于更长时间的延 时,可以采用多重循环来完成。

只要在程序设计循环语句时注意以上几个问题。

下面给出有关在C51中延时子程序设计时要注意的问题

1、在C51中进行精确的延时子程序设计时,尽量不要或少在延时子程序中定义局部变量,所有的延时子程序中变量通过有参函数传递。

2、在延时子程序设计时,采用do…while,结构做循环体要比for结构做循环体好。

3、在延时子程序设计时,要进行循环体嵌套时,采用先内循环,再减减比先减减,再内循环要好。

unsigned char delay(unsigned char i,unsigned char j,unsigned char k)

{unsigned char b,c;

b="j";

c="k";

do{

do{

do{k--};

while(k);

k="c";

j--;};

while(j);

j=b;

i--;};

while(i);

}

这精确延时子程序就被C51编译为有下面的指令组合完成

delay延时子程序如下:

MOV R6,05H

MOV R4,03H

C0012: DJNZ R3, C0012

MOV R3,04H

DJNZ R5, C0012

MOV R5,06H

DJNZ R7, C0012

RET

假设参数变量i的初值为m,参数变量j的初值为n,参数变量k的初值为l,则总延时时间为:l×(n×(m×T+2T)+2T)+3T,其中T为 DJNZ和MOV指令执行的时间。当m=n=l时,精确延时为9T,最短;当m=n=l=256时,精确延时到16908803T,最长。

c语言 空指令的作用,单片机C语言编程空指令产生短延时怎么办相关推荐

  1. c语言延空指令,单片机C言语编程空指令发作短延时怎么办

    规范的C言语中没有空句子.但在单片机的C言语编程中,常常需求用几个空指令发作短延时的效果.这在汇编言语中很简略结束,写几个nop就行了. 在keil C51中,直接调用库函数: #include // ...

  2. c语言错误 xef代表什么,单片机C语言代码手册 含100多个经典C程序

    1 单片机单片机 C 语言代码手册语言代码手册 1 LED 灯灯 点亮一个点亮一个 LED include void main while 1 P0 0 x01 P2 0 x7d 流水灯闪烁流水灯闪烁 ...

  3. 单片机C语言数据存储原理,学习单片机C语言,必知的数据存储与程序编写知识!...

    一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...

  4. PIC16F C语言测频率程序,PIC单片机C语言程序—实例5

    PIC单片机C语言程序-实例5 来源:华强电子网 作者:华仔 浏览:3630 时间:2016-08-10 14:18 标签: 摘要: 前面已介绍了学习pic单片机c语言程序的一些最基本内容,并以具有一 ...

  5. 单片机c语言开发实验心得,在单片机C语言编程中的心得体会

    在单片机C语言编程中的心得体会在单片机C语言编程中的心得体会 在单片机C语言编程中的心得体会 作者:彭树林 在单片机C语言编程中使用恰当的`优化手段,可以写出简洁高效的代码.以下是笔者在C51编程过程 ...

  6. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

  7. MCS-51单片机C语言程序注释,精通MCS-51单片机C语言编程

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  8. avr c语言编译器,[VR虚拟现实]AVR单片机C语言编译器.doc

    (VR虚拟现实)AVR单片机C语言编译器 AVR单片机C语言编译器 Win-AVR是流行的GNU编译器在AVR平台上的移植.安装完毕后会在桌面上出现一下七个快捷方式,它们的作用如下: Programm ...

  9. c语言程序设计中常用语句,单片机C语言编程常用语句

    <单片机C语言编程常用语句>由会员分享,可在线阅读,更多相关<单片机C语言编程常用语句(22页珍藏版)>请在人人文库网上搜索. 1.C51程式设计一般陈述式摘要,1,C51 S ...

最新文章

  1. HDU 3342 Legal or Not(拓扑排序判断成环)
  2. eclipse版本、代号
  3. CentOs7 无可用“Chinese Support“
  4. Nginx的location区块的作用及设置
  5. C++中private成员变量和protect成员变量的区别
  6. 参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)
  7. ES6 Symbol 数据类型
  8. matlab修改图片位深度_如何利用matlab统一处理照片亮度对比度
  9. 扫地机自动回充揭秘之小米/iRobot/云鲸/360
  10. 只需要10秒,使用PPT给证件照换底色
  11. buct哥德巴赫猜想
  12. IDEA设置自定义主题背景
  13. c语言收银系统程序编码,C语言 超市收银系统.doc
  14. SAPMM模块不同维度采购模式分类
  15. yara 模式匹配 android,恶意软件模式匹配利器 – YARA
  16. 牛客练习赛24-B-贪心
  17. 为什么我说“链上KYC”是Web3失败的前奏
  18. Idea中new project项目与new module项目区别与验证
  19. linux驱动学习(七) ioctl中的cmd和_IO() , _IOR() , IOW() ,_IOWR() 以及_IOC_NR()的关系
  20. 个人网页主页设计(实现三种魔方展示效果)

热门文章

  1. 计算机快速结束进程,结束进程快捷键,详细教您电脑结束进程快捷键怎么操作...
  2. 盘点Sui生态20个值得关注的项目,其中8个已进入测试阶段
  3. 【cocos shader 004】 聚光灯 灯光 烘焙 效果
  4. 史上最长最全!围绕故障管理谈SRE体系建设
  5. 学习笔记-webrtc
  6. 变软的苹果,正在复制腾讯
  7. 南京计算机与软件学院,南京信息工程大学 计算机与软件学院 刘 琦
  8. ASCLL字母表顺序
  9. mac远程登录虚拟机
  10. SDP: 会话描述协议(Session Description Protocol)