规范的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. avr-gcc与avr单片机c语言开发 pdf,AVR 单片机与GCC 编程使用方法

    原标题:AVR 单片机与GCC 编程使用方法 WIN 是一个ATMEL AVR 系列 的开发工具集,它包含GNU C 和C++编译器 . 1.1 一个简单的例子 为了先有一个感性的认识,我们首先看一下 ...

  2. c语言延空指令,单片机C语言编程空指令产生短延时怎么办.doc

    单片机C语言编程空指令产生短延时怎么办.doc (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 个人收集整理-仅供参考单片机语言编程空 ...

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

    标准的C语言中没有空语句.但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果.这在汇编语言中很容易实现,写几个nop就行了. 在keil C51中,直接调用库函数: #include // ...

  4. _nop_在c语言里什么作用,单片机c语言中nop函数的使用方法和延时计算

    原标题:单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句.但在 的C语言编程中,经常需要用几个空指令产生短延时的效果. 这在汇编语言中很容易实现,写几个nop就行了. 在C51中 ...

  5. java和c语言的区别_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...

    单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言. 这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为什么这些语言不能用来编写单片机程序呢 ...

  6. 51单片机c语言基本结构,51单片机的内部组成及应用原理解析

    描述 1.单片机内部资源 STC89C52:8KFLASH.512字节RAM.32个IO口.3个定时器.1个UART.8个中断源 (1)Flash(硬盘)--程序存储空间 -- 擦写10万次,断电数据 ...

  7. 集美大学单片机c语言,2018年集美大学单片机原理及其应用考研大纲

    资源大小:0.1-10.0 MB 资源类型: rar 发布时间: 2020/5/14 23:35:45 资源评分: ★★★ 资源简介: 2018年集美大学单片机原理及其应用考研大纲 下载流程: 考研真 ...

  8. 为什么C语言是最适合单片机编程的高级语言

    单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言. 这个问题的意思应该是:现在有很多很好用的高级语言,如VC等等,为什么这些语言不能用来编写单片机程序呢?那么这个问题的答案就是 ...

  9. 单片机c语言面试笔试,c语言面试题集(单片机)..doc

    c语言面试题集(单片机). c语言面试题集(单片机) 1.预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define S ...

最新文章

  1. Linux脚本:xjps查看各个节点java进程
  2. java命令修改user.home file.encoding等参数值
  3. 【牛客 - 272D】Where are you(Tarjan求桥)
  4. Lambda 表达式与 Stream
  5. 火爆全网MySQL路线笔记!java文件读取中文乱码
  6. 这个沙盒游戏建立在数字时代,你能通关吗?
  7. linux 内核源码学习
  8. 多媒体交互应用基础(7)
  9. Android数据库程序开发必备工具SqliteDev
  10. 扒站工具Teleport Pro教程
  11. 尝试加载Crystal Reports 运行时时出错
  12. win10以太网没有有效的ip配置
  13. 使用emitter的坑,
  14. 数据库系统概论-第一章绪论【概念模型、层次模型和三级模式(外模式、模式、内模式)】
  15. 关于近几年嵌入式软件工程师的就业和前景问题
  16. 配置Hibernate环境
  17. [FFmpeg]编译av1的dav1d解码库
  18. 《天空之城》助Twitter刷新纪录,新架构功不可没
  19. C语言中图形函数及其用法
  20. 某m影视apk m3u8地址key值

热门文章

  1. 零基础如何成为自由插画师?
  2. java并发学习28:有序性
  3. java单步跳入单步跳过_Eclipse 单步调试
  4. 北斗网络同步时钟与GPS卫星时钟同步设备的区别
  5. AlexNet分类Fashi-MNIST(Pytorch实现)
  6. 面向对象设计的3个基本特征和5个原则
  7. iphone复制不能全选_iphone长按键盘进行复制、粘贴、全选操作技巧
  8. 个人微信/支付宝免签支付系统源码
  9. GSM Arena 魅族mx四核评测-个人翻译
  10. C# 如何避免装箱和拆箱操作