标准的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

延时1s的程序设计c语言,C语言延时程序.doc相关推荐

  1. c语言的适当大小的子集,使用直接分析法编制C语言子集的词法分析程序..doc

    一.题目 使用直接分析法编制C语言子集的词法分析程序 二.目的 通过设计.编制.调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法 ...

  2. 八个小灯泡闪烁的c语言程序,C语言猜数游戏程序.doc

    #include //包含 time函数 #define random(x) (rand()%x) void main() { int zhucaidan(); void youxijieshao() ...

  3. pt100 c 语言,PT100计算公式 C程序.doc

    PT100计算公式 基于ITS-90工业用铂电阻分度表IEC751的修订版.包含2个函数. #define A 3.9083e-3 #define B -5.775e-7 #define C -4.1 ...

  4. pt100 c 语言,PT100计算公式_C程序.doc

    PT100计算公式 基于ITS-90工业用铂电阻分度表IEC751的修订版.包含2个函数. #define A 3.9083e-3 #define B -5.775e-7 #define C -4.1 ...

  5. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法

    前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...

  6. c51语言双层for循环延时2ms,51单片机利用for语句嵌套实现简单的延时1s功能

    原标题:51单片机利用for语句嵌套实现简单的延时1s功能 51单片机利用for语句嵌套实现简单的延时1s功能 名词解释: (1)时钟周期.定义为时钟频率的倒数,本例使用12MHz的时钟频率,它的时钟 ...

  7. 编写10ms延时的子程序c语言,单片机定时器延时程序

    单片机定时器延时程序 单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0 ...

  8. 怎么用C51语言实现50ms延时,单片机入门-C51语言实现简单的红绿LED交通灯控制

    原标题:单片机入门-C51语言实现简单的红绿LED交通灯控制 视频教程如下: 本文介绍了用C51语言实现十字路口交通灯控制: 四个路口各有红.绿2个LED,模拟交通灯的控制,即东西走向的灯变红,南北走 ...

  9. c语言for循环延时,如何利用for循环实现C语言的精确延时.doc

    如何利用for循环实现C语言的精确延时 C语言最大的缺点就是实时性差,我在网上到看了一些关于延时的讨论,其中有篇文章51单片机 Keil C 延时程序的简单研究,他是用while(--i);产生DJN ...

最新文章

  1. Windows 7 开发新特性
  2. 数位DP 回文序列 POJ-3280 Cheapest Palindrome
  3. 消费者关注的 Win8 问题汇总(下)
  4. Floyd cycle算法
  5. java工具类去掉字符串String中的.点。android开发java程序员常用工具类
  6. FTP客户端的基本使用---Linux学习笔记
  7. 穷人迈向富翁的理财十步曲
  8. android fragment 管理器,Android Fragment 與 Fragment管理器
  9. 网络安全设备常用默认弱口令
  10. centos 宝塔面版 运行 thinkjs
  11. 跟我学Android之二 第一个程序
  12. java 之 插入排序
  13. 图书管理系统mysql数据库设计_简单的图书馆管理系统数据库设计
  14. js alert追加html,利用JQ来美化Js的alert弹出框
  15. qcow2和vmdk互相转
  16. java ssl 双向认证_Java实现SSL双向认证的方法
  17. 机器人控制学习机器编程代码_带上机器人,让他们维护我们的代码!
  18. 解决warning C4305: 'initializing' : truncation from 'const double' to 'float'
  19. 机械自动化与计算机视觉关系,计算机视觉与机器视觉的区别?
  20. 作为荣耀脱离华为后的第二代旗舰,荣耀Magic4 Pro是否值得选购?

热门文章

  1. python画学习曲线_Python在同一个figu上用scikitlearn绘制几个学习曲线
  2. 常见3D打印技术原理及比较
  3. 利用Hyperledger fabric-config库进行通道配置更新
  4. 在家使用IPv6访问NAS服务器
  5. upnp 二级路由_下载宝作为二级路由折腾记-小白篇 - Padavan - 恩山无线论坛 - Powered by Discuz!...
  6. 区块链NFT之OpenSea
  7. 【自学笔记】尚硅谷数据结构与算法Chapter 1 数据结构与算法概述
  8. 如画的水乡,如画的同里16
  9. MFC中如何给控件关联变量
  10. Anaconda安装